1 /******************************************************************************* 2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3 * 4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided 5 *that the following conditions are met: 6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7 *following disclaimer. 8 *2. Redistributions in binary form must reproduce the above copyright notice, 9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided 10 *with the distribution. 11 * 12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20 21 ********************************************************************************/ 22 /*******************************************************************************/ 23 /*! \file sautil.c 24 * \brief The file contains general helper routines. 25 * 26 * 27 */ 28 /******************************************************************************/ 29 #include <sys/cdefs.h> 30 #include <dev/pms/config.h> 31 32 #include <dev/pms/RefTisa/sallsdk/spc/saglobal.h> 33 #ifdef SA_TESTBASE_EXTRA 34 #include <string.h> 35 #endif /* SA_TESTBASE_EXTRA */ 36 37 38 #ifdef SA_ENABLE_TRACE_FUNCTIONS 39 #ifdef siTraceFileID 40 #undef siTraceFileID 41 #endif 42 #define siTraceFileID 'S' 43 #endif 44 45 /******************************************************************************/ 46 /*! \brief Check for Hex digit 47 * 48 * 49 * \param char value 50 * 51 * \return -void- 52 * 53 */ 54 /*******************************************************************************/ 55 int siIsHexDigit(char a) 56 { 57 return ( (((a) >= 'a') && ((a) <= 'z')) || 58 (((a) >= 'A') && ((a) <= 'Z')) || 59 (((a) >= '0') && ((a) <= '9')) || 60 ( (a) == '*')); 61 } 62 63 /******************************************************************************/ 64 /*! \brief memcopy 65 * 66 * 67 * \param char value 68 * 69 * \return -void- 70 * 71 */ 72 /*******************************************************************************/ 73 FORCEINLINE 74 void* 75 si_memcpy(void *dst, void *src, bit32 count) 76 { 77 /* 78 bit32 x; 79 unsigned char *dst1 = (unsigned char *)dst; 80 unsigned char *src1 = (unsigned char *)src; 81 82 for (x=0; x < count; x++) 83 dst1[x] = src1[x]; 84 85 return dst; 86 */ 87 return memcpy(dst, src, count); 88 } 89 90 91 /******************************************************************************/ 92 /*! \brief memset 93 * 94 * 95 * \param char value 96 * 97 * \return -void- 98 * 99 */ 100 /*******************************************************************************/ 101 FORCEINLINE 102 void* 103 si_memset(void *s, int c, bit32 n) 104 { 105 /* 106 bit32 i; 107 char *dst = (char *)s; 108 for (i=0; i < n; i++) 109 { 110 dst[i] = (char) c; 111 } 112 return (void *)(&dst[i-n]); 113 */ 114 return memset(s, c, n); 115 } 116 117 118 /******************************************************************************/ 119 /*! \brief siDumpActiveIORequests 120 * 121 * 122 * \param char value 123 * 124 * \return -void- 125 * 126 */ 127 /*******************************************************************************/ 128 GLOBAL void 129 siDumpActiveIORequests( 130 agsaRoot_t *agRoot, 131 bit32 count) 132 { 133 bit32 j, num_found = 0; 134 agsaIORequestDesc_t *pRequestDesc = agNULL; 135 agsaLLRoot_t *saRoot = agNULL; 136 bit32 i; 137 mpiOCQueue_t *circularQ; 138 139 /* sanity check */ 140 SA_ASSERT((agNULL != agRoot), ""); 141 saRoot = (agsaLLRoot_t *)(agRoot->sdkData); 142 SA_ASSERT((agNULL != saRoot), ""); 143 144 145 saCountActiveIORequests(agRoot); 146 // return; 147 148 149 if(smIS_SPCV(agRoot)) 150 { 151 bit32 sp1; 152 sp1= ossaHwRegRead(agRoot,V_Scratchpad_1_Register ); 153 154 if(SCRATCH_PAD1_V_ERROR_STATE(sp1)) 155 { 156 SA_DBG1(("siDumpActiveIORequests: SCRATCH_PAD1_V_ERROR_STAT 0x%x\n",sp1 )); 157 } 158 SA_DBG1(("siDumpActiveIORequests: SCRATCH_PAD0 value = 0x%x\n", ossaHwRegRead(agRoot, V_Scratchpad_0_Register))); 159 SA_DBG1(("siDumpActiveIORequests: SCRATCH_PAD1 value = 0x%x\n", ossaHwRegRead(agRoot, V_Scratchpad_1_Register))); 160 SA_DBG1(("siDumpActiveIORequests: SCRATCH_PAD2 value = 0x%x\n", ossaHwRegRead(agRoot, V_Scratchpad_2_Register))); 161 SA_DBG1(("siDumpActiveIORequests: SCRATCH_PAD3 value = 0x%x\n", ossaHwRegRead(agRoot, V_Scratchpad_3_Register))); 162 } 163 164 for ( i = 0; i < saRoot->QueueConfig.numOutboundQueues; i++ ) 165 { 166 circularQ = &saRoot->outboundQueue[i]; 167 OSSA_READ_LE_32(circularQ->agRoot, &circularQ->producerIdx, circularQ->piPointer, 0); 168 if(circularQ->producerIdx != circularQ->consumerIdx) 169 { 170 SA_DBG1(("siDumpActiveIORequests:OBQ%d PI 0x%03x CI 0x%03x\n", i,circularQ->producerIdx, circularQ->consumerIdx )); 171 } 172 } 173 174 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), 0); 175 SA_DBG1(("siDumpActiveIORequests: Current Time: %d ticks (usecpertick=%d)\n", 176 saRoot->timeTick, saRoot->usecsPerTick)); 177 178 for ( j = 0; j < count; j ++ ) 179 { 180 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), j); 181 182 if (pRequestDesc->valid == agTRUE) 183 { 184 num_found++; 185 SA_DBG1(("siDumpActiveIORequests: IO #%4d: %p Tag=%03X Type=%08X Device 0x%X Pending for %d seconds\n", 186 j, 187 pRequestDesc->pIORequestContext, 188 pRequestDesc->HTag, 189 pRequestDesc->requestType, 190 pRequestDesc->pDevice ? pRequestDesc->pDevice->DeviceMapIndex : 0, 191 ((saRoot->timeTick - pRequestDesc->startTick)*saRoot->usecsPerTick)/1000000 )); 192 193 } 194 } 195 if(count) 196 { 197 SA_DBG1(("siDumpActiveIORequests: %d found active\n",num_found)); 198 } 199 200 } 201 202 /******************************************************************************/ 203 /*! \brief saCountActiveIORequests 204 * 205 * 206 * \param char value 207 * 208 * \return -void- 209 * 210 */ 211 /*******************************************************************************/ 212 GLOBAL void 213 siClearActiveIORequests( 214 agsaRoot_t *agRoot) 215 { 216 bit32 j; 217 bit32 num_found = 0; 218 agsaIORequestDesc_t *pRequestDesc = agNULL; 219 agsaLLRoot_t *saRoot = agNULL; 220 221 /* sanity check */ 222 SA_ASSERT((agNULL != agRoot), ""); 223 saRoot = (agsaLLRoot_t *)(agRoot->sdkData); 224 SA_ASSERT((agNULL != saRoot), ""); 225 226 if(saRoot) 227 { 228 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), 0); 229 230 for ( j = 0; j < saRoot->swConfig.maxActiveIOs; j++ ) 231 { 232 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), j); 233 234 if (pRequestDesc->valid == agTRUE) 235 { 236 num_found++; 237 pRequestDesc->valid = agFALSE; 238 } 239 } 240 if(num_found) 241 { 242 SA_DBG1(("siClearActiveIORequests %d found active\n",num_found)); 243 } 244 } 245 else 246 { 247 SA_DBG1(("siClearActiveIORequests saroot NULL\n")); 248 } 249 250 } 251 252 /******************************************************************************/ 253 /*! \brief siCountActiveIORequestsOnDevice 254 * count all active IO's 255 * 256 * \param char value 257 * 258 * \return -void- 259 * 260 */ 261 /*******************************************************************************/ 262 GLOBAL void 263 siClearActiveIORequestsOnDevice( 264 agsaRoot_t *agRoot, 265 bit32 device ) 266 { 267 bit32 j, num_found = 0; 268 agsaIORequestDesc_t *pRequestDesc = agNULL; 269 agsaLLRoot_t *saRoot = agNULL; 270 271 /* sanity check */ 272 SA_ASSERT((agNULL != agRoot), ""); 273 saRoot = (agsaLLRoot_t *)(agRoot->sdkData); 274 SA_ASSERT((agNULL != saRoot), ""); 275 276 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), 0); 277 278 for ( j = 0; j < saRoot->swConfig.maxActiveIOs; j++ ) 279 { 280 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), j); 281 282 if (pRequestDesc->valid == agTRUE) 283 { 284 if (pRequestDesc->pDevice) 285 { 286 if (pRequestDesc->pDevice->DeviceMapIndex == device) 287 { 288 num_found++; 289 pRequestDesc->valid = agFALSE; 290 } 291 } 292 } 293 } 294 if(num_found) 295 { 296 SA_DBG1(("siClearActiveIORequestsOnDevice 0x%x %d cleared\n",device,num_found)); 297 } 298 299 } 300 301 302 303 /******************************************************************************/ 304 /*! \brief siCountActiveIORequestsOnDevice 305 * count all active IO's 306 * 307 * \param char value 308 * 309 * \return -void- 310 * 311 */ 312 /*******************************************************************************/ 313 GLOBAL void 314 siCountActiveIORequestsOnDevice( 315 agsaRoot_t *agRoot, 316 bit32 device ) 317 { 318 bit32 j, num_found = 0; 319 agsaIORequestDesc_t *pRequestDesc = agNULL; 320 agsaLLRoot_t *saRoot = agNULL; 321 322 /* sanity check */ 323 SA_ASSERT((agNULL != agRoot), ""); 324 saRoot = (agsaLLRoot_t *)(agRoot->sdkData); 325 SA_ASSERT((agNULL != saRoot), ""); 326 327 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), 0); 328 329 for ( j = 0; j < saRoot->swConfig.maxActiveIOs; j++ ) 330 { 331 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), j); 332 333 if (pRequestDesc->valid == agTRUE) 334 { 335 if (pRequestDesc->pDevice) 336 { 337 if (pRequestDesc->pDevice->DeviceMapIndex == device) 338 { 339 num_found++; 340 if(saRoot->ResetStartTick > pRequestDesc->startTick) 341 { 342 SA_DBG2(("siCountActiveIORequestsOnDevice: saRoot->ResetStartTick %d pRequestDesc->startTick %d\n", 343 saRoot->ResetStartTick, pRequestDesc->startTick)); 344 } 345 } 346 } 347 } 348 } 349 if(num_found) 350 { 351 SA_DBG1(("siCountActiveIORequestsOnDevice 0x%x %d found active\n",device,num_found)); 352 } 353 354 } 355 356 357 358 /******************************************************************************/ 359 /*! \brief saCountActiveIORequests 360 * count all active IO's 361 * 362 * \param char value 363 * 364 * \return -void- 365 * 366 */ 367 /*******************************************************************************/ 368 GLOBAL void 369 saCountActiveIORequests( 370 agsaRoot_t *agRoot) 371 { 372 bit32 j, num_found = 0; 373 agsaIORequestDesc_t *pRequestDesc = agNULL; 374 agsaLLRoot_t *saRoot = agNULL; 375 376 /* sanity check */ 377 SA_ASSERT((agNULL != agRoot), ""); 378 if( agRoot == agNULL) 379 { 380 return; 381 } 382 saRoot = (agsaLLRoot_t *)(agRoot->sdkData); 383 if( saRoot == agNULL) 384 { 385 return; 386 } 387 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), 0); 388 389 for ( j = 0; j < saRoot->swConfig.maxActiveIOs; j++ ) 390 { 391 pRequestDesc = (agsaIORequestDesc_t *) AGSAMEM_ELEMENT_READ(&(saRoot->IORequestMem), j); 392 393 if (pRequestDesc->valid == agTRUE) 394 { 395 num_found++; 396 if(saRoot->ResetStartTick > pRequestDesc->startTick) 397 { 398 SA_DBG2(("saCountActiveIORequests: saRoot->ResetStartTick %d pRequestDesc->startTick %d\n", 399 saRoot->ResetStartTick, pRequestDesc->startTick)); 400 } 401 } 402 } 403 if(num_found) 404 { 405 SA_DBG1(("saCountActiveIORequests %d found active\n",num_found)); 406 } 407 408 } 409 410 411 GLOBAL bit32 smIsCfg_V_ANY( agsaRoot_t *agRoot) 412 { 413 414 if(smIsCfg_V8008(agRoot) == 1) return 1; 415 if(smIsCfg_V8009(agRoot) == 1) return 1; 416 if(smIsCfg_V8018(agRoot) == 1) return 1; 417 if(smIsCfg_V8019(agRoot) == 1) return 1; 418 if(smIsCfg_V8088(agRoot) == 1) return 1; 419 if(smIsCfg_V8089(agRoot) == 1) return 1; 420 if(smIsCfg_V8070(agRoot) == 1) return 1; 421 if(smIsCfg_V8071(agRoot) == 1) return 1; 422 if(smIsCfg_V8072(agRoot) == 1) return 1; 423 if(smIsCfg_V8073(agRoot) == 1) return 1; 424 if(smIS_SPCV8074(agRoot) == 1) return 1; 425 if(smIS_SPCV8075(agRoot) == 1) return 1; 426 if(smIS_SPCV8076(agRoot) == 1) return 1; 427 if(smIS_SPCV8077(agRoot) == 1) return 1; 428 if(smIsCfg_V8025(agRoot) == 1) return 1; 429 if(smIsCfg_V9015(agRoot) == 1) return 1; 430 if(smIsCfg_V9060(agRoot) == 1) return 1; 431 if(smIsCfg_V8006(agRoot) == 1) return 1; 432 433 return 0; 434 } 435 436 GLOBAL bit32 smIS_SPC( agsaRoot_t *agRoot) 437 { 438 if(smIS_spc8001(agRoot) == 1) return 1; 439 if(smIS_spc8081(agRoot) == 1) return 1; 440 if(smIS_SFC_AS_SPC(agRoot) == 1) return 1; 441 return 0; 442 } 443 444 445 GLOBAL bit32 smIS_HIL( agsaRoot_t *agRoot) /* or delray */ 446 { 447 if(smIS_spc8081(agRoot) == 1) return 1; 448 if(smIS_ADAP8088(agRoot) == 1) return 1; 449 if(smIS_ADAP8089(agRoot) == 1) return 1; 450 if(smIS_SPCV8074(agRoot) == 1) return 1; 451 if(smIS_SPCV8075(agRoot) == 1) return 1; 452 if(smIS_SPCV8076(agRoot) == 1) return 1; 453 if(smIS_SPCV8077(agRoot) == 1) return 1; 454 return 0; 455 456 } 457 458 GLOBAL bit32 smIS_SPC6V( agsaRoot_t *agRoot) 459 { 460 if(smIS_SPCV8008(agRoot) == 1) return 1; 461 if(smIS_SPCV8009(agRoot) == 1) return 1; 462 if(smIS_SPCV8018(agRoot) == 1) return 1; 463 if(smIS_SPCV8019(agRoot) == 1) return 1; 464 if(smIS_ADAP8088(agRoot) == 1) return 1; 465 if(smIS_ADAP8089(agRoot) == 1) return 1; 466 return 0; 467 } 468 469 GLOBAL bit32 smIS_SPC12V( agsaRoot_t *agRoot) 470 { 471 if(smIS_SPCV8070(agRoot) == 1) return 1; 472 if(smIS_SPCV8071(agRoot) == 1) return 1; 473 if(smIS_SPCV8072(agRoot) == 1) return 1; 474 if(smIS_SPCV8073(agRoot) == 1) return 1; 475 if(smIS_SPCV8074(agRoot) == 1) return 1; 476 if(smIS_SPCV8075(agRoot) == 1) return 1; 477 if(smIS_SPCV8076(agRoot) == 1) return 1; 478 if(smIS_SPCV8077(agRoot) == 1) return 1; 479 if(smIS_SPCV9015(agRoot) == 1) return 1; 480 if(smIS_SPCV9060(agRoot) == 1) return 1; 481 if(smIS_SPCV8006(agRoot) == 1) return 1; 482 return 0; 483 } 484 485 GLOBAL bit32 smIS_SPCV_2_IOP( agsaRoot_t *agRoot) 486 { 487 if(smIS_SPCV8009(agRoot) == 1) return 1; 488 if(smIS_SPCV8018(agRoot) == 1) return 1; 489 if(smIS_SPCV8019(agRoot) == 1) return 1; 490 if(smIS_SPCV8071(agRoot) == 1) return 1; 491 if(smIS_SPCV8072(agRoot) == 1) return 1; 492 if(smIS_SPCV8073(agRoot) == 1) return 1; 493 if(smIS_SPCV8076(agRoot) == 1) return 1; 494 if(smIS_SPCV8077(agRoot) == 1) return 1; 495 if(smIS_ADAP8088(agRoot) == 1) return 1; 496 if(smIS_ADAP8089(agRoot) == 1) return 1; 497 if(smIS_SPCV8006(agRoot) == 1) return 1; 498 return 0; 499 } 500 501 GLOBAL bit32 smIS_SPCV( agsaRoot_t *agRoot) 502 { 503 if(smIS_SPC6V(agRoot) == 1) return 1; 504 if(smIS_SPC12V(agRoot) == 1) return 1; 505 if(smIS_SFC_AS_V(agRoot) == 1 ) return 1; 506 return 0; 507 } 508 509 GLOBAL bit32 smIS_ENCRYPT( agsaRoot_t *agRoot) 510 { 511 if(smIS_SPCV8009(agRoot) == 1) return 1; 512 if(smIS_ADAP8088(agRoot) == 1) return 1; 513 if(smIS_SPCV8019(agRoot) == 1) return 1; 514 if(smIS_SPCV8071(agRoot) == 1) return 1; 515 if(smIS_SPCV8073(agRoot) == 1) return 1; 516 if(smIS_SPCV8077(agRoot) == 1) return 1; 517 if(smIS_SPCV9015(agRoot) == 1) return 1; 518 if(smIS_SPCV9060(agRoot) == 1) return 1; 519 return 0; 520 } 521 522 523 524 #if defined(SALLSDK_DEBUG) 525 526 /******************************************************************************/ 527 /*! \brief Routine print buffer 528 * 529 * 530 * \param debugLevel verbosity level 531 * \param header header to print 532 * \param buffer buffer to print 533 * \param length length of buffer in bytes 534 * 535 * \return -void- 536 * 537 */ 538 /*******************************************************************************/ 539 GLOBAL void siPrintBuffer( 540 bit32 debugLevel, 541 siPrintType type, 542 char *header, 543 void *a, 544 bit32 length 545 ) 546 { 547 bit32 x, rem; 548 bit8 *buffer = (bit8 *)a; 549 bit32 *lPtr; 550 bit8 temp[16]; 551 552 ossaLogDebugString(gLLDebugLevel, debugLevel, ("%s\n", header)); 553 554 if (type == SA_8) 555 { 556 for (x=0; x < length/16; x++) 557 { 558 ossaLogDebugString(gLLDebugLevel, debugLevel, 559 ("%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x == " 560 "%c%c%c%c%c%c%c%c - %c%c%c%c%c%c%c%c\n", 561 *(buffer), 562 *(buffer+1), 563 *(buffer+2), 564 *(buffer+3), 565 *(buffer+4), 566 *(buffer+5), 567 *(buffer+6), 568 *(buffer+7), 569 *(buffer+8), 570 *(buffer+9), 571 *(buffer+10), 572 *(buffer+11), 573 *(buffer+12), 574 *(buffer+13), 575 *(buffer+14), 576 *(buffer+15), 577 siIsHexDigit(*(buffer)) ? *(buffer) : ' ', 578 siIsHexDigit(*(buffer+1)) ? *(buffer+1) : ' ', 579 siIsHexDigit(*(buffer+2)) ? *(buffer+2) : ' ', 580 siIsHexDigit(*(buffer+3)) ? *(buffer+3) : ' ', 581 siIsHexDigit(*(buffer+4)) ? *(buffer+4) : ' ', 582 siIsHexDigit(*(buffer+5)) ? *(buffer+5) : ' ', 583 siIsHexDigit(*(buffer+6)) ? *(buffer+6) : ' ', 584 siIsHexDigit(*(buffer+7)) ? *(buffer+7) : ' ', 585 siIsHexDigit(*(buffer+8)) ? *(buffer+8) : ' ', 586 siIsHexDigit(*(buffer+9)) ? *(buffer+9) : ' ', 587 siIsHexDigit(*(buffer+10)) ? *(buffer+10) : ' ', 588 siIsHexDigit(*(buffer+11)) ? *(buffer+11) : ' ', 589 siIsHexDigit(*(buffer+12)) ? *(buffer+12) : ' ', 590 siIsHexDigit(*(buffer+13)) ? *(buffer+13) : ' ', 591 siIsHexDigit(*(buffer+14)) ? *(buffer+14) : ' ', 592 siIsHexDigit(*(buffer+15)) ? *(buffer+15) : ' ') 593 ); 594 595 buffer += 16; 596 } 597 598 rem = length%16; 599 if (rem) 600 { 601 for (x = 0; x < 16; x++) 602 { 603 temp[x] = ' '; 604 } 605 606 for (x = 0; x < rem; x++) 607 { 608 temp[x] = *(buffer+x); 609 } 610 611 buffer = temp; 612 613 ossaLogDebugString(gLLDebugLevel, debugLevel, 614 ("%02x %02x %02x %02x %02x %02x %02x %02x - %02x %02x %02x %02x %02x %02x %02x %02x == " 615 "%c%c%c%c%c%c%c%c - %c%c%c%c%c%c%c%c\n", 616 *(buffer), 617 *(buffer+1), 618 *(buffer+2), 619 *(buffer+3), 620 *(buffer+4), 621 *(buffer+5), 622 *(buffer+6), 623 *(buffer+7), 624 *(buffer+8), 625 *(buffer+9), 626 *(buffer+10), 627 *(buffer+11), 628 *(buffer+12), 629 *(buffer+13), 630 *(buffer+14), 631 *(buffer+15), 632 siIsHexDigit(*(buffer)) ? *(buffer) : ' ', 633 siIsHexDigit(*(buffer+1)) ? *(buffer+1) : ' ', 634 siIsHexDigit(*(buffer+2)) ? *(buffer+2) : ' ', 635 siIsHexDigit(*(buffer+3)) ? *(buffer+3) : ' ', 636 siIsHexDigit(*(buffer+4)) ? *(buffer+4) : ' ', 637 siIsHexDigit(*(buffer+5)) ? *(buffer+5) : ' ', 638 siIsHexDigit(*(buffer+6)) ? *(buffer+6) : ' ', 639 siIsHexDigit(*(buffer+7)) ? *(buffer+7) : ' ', 640 siIsHexDigit(*(buffer+8)) ? *(buffer+8) : ' ', 641 siIsHexDigit(*(buffer+9)) ? *(buffer+9) : ' ', 642 siIsHexDigit(*(buffer+10)) ? *(buffer+10) : ' ', 643 siIsHexDigit(*(buffer+11)) ? *(buffer+11) : ' ', 644 siIsHexDigit(*(buffer+12)) ? *(buffer+12) : ' ', 645 siIsHexDigit(*(buffer+13)) ? *(buffer+13) : ' ', 646 siIsHexDigit(*(buffer+14)) ? *(buffer+14) : ' ', 647 siIsHexDigit(*(buffer+15)) ? *(buffer+15) : ' ') 648 ); 649 } 650 } 651 else 652 { 653 bit32 *ltemp = (bit32 *)temp; 654 lPtr = (bit32 *) a; 655 656 for (x=0; x < length/4; x++) 657 { 658 ossaLogDebugString(gLLDebugLevel, debugLevel, 659 ("%08x %08x %08x %08x\n", 660 *(lPtr), 661 *(lPtr+1), 662 *(lPtr+2), 663 *(lPtr+3)) 664 ); 665 666 lPtr += 4; 667 } 668 669 rem = length%4; 670 if (rem) 671 { 672 for (x = 0; x < 4; x++) 673 { 674 ltemp[x] = 0; 675 } 676 677 for (x = 0; x < rem; x++) 678 { 679 ltemp[x] = lPtr[x]; 680 } 681 682 lPtr = ltemp; 683 684 ossaLogDebugString(gLLDebugLevel, debugLevel, 685 ("%08x %08x %08x %08x\n", 686 *(lPtr), 687 *(lPtr+1), 688 *(lPtr+2), 689 *(lPtr+3)) 690 ); 691 } 692 } 693 694 } 695 696 697 698 void sidump_hwConfig(agsaHwConfig_t *hwConfig) 699 { 700 SA_DBG2(("sidump_hwConfig:hwConfig->hwInterruptCoalescingTimer 0x%x\n",hwConfig->hwInterruptCoalescingTimer )); 701 SA_DBG2(("sidump_hwConfig:hwConfig->hwInterruptCoalescingControl 0x%x\n",hwConfig->hwInterruptCoalescingControl )); 702 SA_DBG2(("sidump_hwConfig:hwConfig->intReassertionOption 0x%x\n",hwConfig->intReassertionOption )); 703 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister0 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister0 )); 704 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister1 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister1 )); 705 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister2 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister2 )); 706 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister3 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister3 )); 707 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister4 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister4 )); 708 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister5 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister5 )); 709 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister6 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister6 )); 710 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister7 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister7 )); 711 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister8 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister8 )); 712 SA_DBG2(("sidump_hwConfig:hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister9 0x%x\n",hwConfig->phyAnalogConfig.phyAnalogSetupRegisters->spaRegister9 )); 713 SA_DBG2(("sidump_hwConfig:hwConfig->hwOption 0x%x\n",hwConfig->hwOption )); 714 } 715 716 void sidump_swConfig(agsaSwConfig_t *swConfig) 717 { 718 SA_DBG2(("sidump_swConfig:swConfig->maxActiveIOs 0x%x\n",swConfig->maxActiveIOs )); 719 SA_DBG2(("sidump_swConfig:swConfig->numDevHandles 0x%x\n",swConfig->numDevHandles )); 720 SA_DBG2(("sidump_swConfig:swConfig->smpReqTimeout 0x%x\n",swConfig->smpReqTimeout )); 721 SA_DBG2(("sidump_swConfig:swConfig->numberOfEventRegClients 0x%x\n",swConfig->numberOfEventRegClients )); 722 SA_DBG2(("sidump_swConfig:swConfig->sizefEventLog1 0x%x\n",swConfig->sizefEventLog1 )); 723 SA_DBG2(("sidump_swConfig:swConfig->sizefEventLog2 0x%x\n",swConfig->sizefEventLog2 )); 724 SA_DBG2(("sidump_swConfig:swConfig->eventLog1Option 0x%x\n",swConfig->eventLog1Option )); 725 SA_DBG2(("sidump_swConfig:swConfig->eventLog2Option 0x%x\n",swConfig->eventLog2Option )); 726 SA_DBG2(("sidump_swConfig:swConfig->fatalErrorInterruptEnable 0x%x\n",swConfig->fatalErrorInterruptEnable )); 727 SA_DBG2(("sidump_swConfig:swConfig->fatalErrorInterruptVector 0x%x\n",swConfig->fatalErrorInterruptVector )); 728 SA_DBG2(("sidump_swConfig:swConfig->max_MSI_InterruptVectors 0x%x\n",swConfig->max_MSI_InterruptVectors )); 729 SA_DBG2(("sidump_swConfig:swConfig->max_MSIX_InterruptVectors 0x%x\n",swConfig->max_MSIX_InterruptVectors )); 730 SA_DBG2(("sidump_swConfig:swConfig->legacyInt_X 0x%x\n",swConfig->legacyInt_X )); 731 SA_DBG2(("sidump_swConfig:swConfig->hostDirectAccessSupport 0x%x\n",swConfig->hostDirectAccessSupport )); 732 SA_DBG2(("sidump_swConfig:swConfig->hostDirectAccessMode 0x%x\n",swConfig->hostDirectAccessMode )); 733 SA_DBG2(("sidump_swConfig:swConfig->param1 0x%x\n",swConfig->param1 )); 734 SA_DBG2(("sidump_swConfig:swConfig->param2 0x%x\n",swConfig->param2 )); 735 SA_DBG2(("sidump_swConfig:swConfig->param3 %p\n",swConfig->param3 )); 736 SA_DBG2(("sidump_swConfig:swConfig->param4 %p\n",swConfig->param4 )); 737 738 } 739 740 741 void sidump_Q_config( agsaQueueConfig_t *queueConfig ) 742 { 743 bit32 x; 744 745 SA_DBG2(("sidump_Q_config: queueConfig->generalEventQueue 0x%x\n", queueConfig->generalEventQueue )); 746 SA_DBG2(("sidump_Q_config: queueConfig->numInboundQueues 0x%x\n", queueConfig->numInboundQueues )); 747 SA_DBG2(("sidump_Q_config: queueConfig->numOutboundQueues 0x%x\n", queueConfig->numOutboundQueues )); 748 SA_DBG2(("sidump_Q_config: queueConfig->iqHighPriorityProcessingDepth 0x%x\n", queueConfig->iqHighPriorityProcessingDepth )); 749 SA_DBG2(("sidump_Q_config: queueConfig->iqNormalPriorityProcessingDepth 0x%x\n", queueConfig->iqNormalPriorityProcessingDepth )); 750 SA_DBG2(("sidump_Q_config: queueConfig->queueOption 0x%x\n", queueConfig->queueOption )); 751 SA_DBG2(("sidump_Q_config: queueConfig->tgtDeviceRemovedEventQueue 0x%x\n", queueConfig->tgtDeviceRemovedEventQueue )); 752 753 for(x=0;x < queueConfig->numInboundQueues;x++) 754 { 755 SA_DBG2(("sidump_Q_config: queueConfig->inboundQueues[%d].elementCount 0x%x\n",x,queueConfig->inboundQueues[x].elementCount )); 756 SA_DBG2(("sidump_Q_config: queueConfig->inboundQueues[%d].elementSize 0x%x\n",x,queueConfig->inboundQueues[x].elementSize )); 757 } 758 759 for(x=0;x < queueConfig->numOutboundQueues;x++) 760 { 761 762 SA_DBG2(("sidump_Q_config: queueConfig->outboundQueues[%d].elementCount 0x%x\n",x,queueConfig->outboundQueues[x].elementCount )); 763 SA_DBG2(("sidump_Q_config: queueConfig->outboundQueues[%d].elementSize 0x%x\n",x,queueConfig->outboundQueues[x].elementSize )); 764 } 765 766 } 767 #endif 768 769 #ifdef SALL_API_TEST 770 /******************************************************************************/ 771 /*! \brief Get Performance IO counters 772 * 773 * Start/Abort SAS/SATA discovery 774 * 775 * \param agRoot Handles for this instance of SAS/SATA hardware 776 * \param counters bit map of the counters 777 * \param LLCountInfo pointer to the LLCounters 778 * 779 * \return 780 * - \e AGSA_RC_SUCCESS 781 * 782 */ 783 /*******************************************************************************/ 784 GLOBAL bit32 saGetLLCounters( 785 agsaRoot_t *agRoot, 786 bit32 counters, 787 agsaLLCountInfo_t *LLCountInfo 788 ) 789 { 790 agsaLLRoot_t *saRoot = (agsaLLRoot_t *) (agRoot->sdkData); 791 bit32 i; 792 793 for (i = 0; i < LL_COUNTERS; i++) 794 { 795 if (counters & (1 << i)) 796 LLCountInfo->arrayIOCounter[i] = saRoot->LLCounters.arrayIOCounter[i]; 797 } 798 799 return AGSA_RC_SUCCESS; 800 } 801 802 /******************************************************************************/ 803 /*! \brief Function for target to remove stale initiator device handle 804 * 805 * function is called to ask the LL layer to remove all LL layer and SPC firmware 806 * internal resources associated with a device handle 807 * 808 * \param agRoot Handles for this instance of SAS/SATA hardware 809 * \param counters Bit map of the IO counters 810 * 811 * \return 812 * - \e AGSA_RC_SUCCESS 813 * 814 */ 815 /*******************************************************************************/ 816 GLOBAL bit32 saResetLLCounters( 817 agsaRoot_t *agRoot, 818 bit32 counters 819 ) 820 { 821 agsaLLRoot_t *saRoot = (agsaLLRoot_t *) (agRoot->sdkData); 822 bit32 i; 823 824 for (i = 0; i < LL_COUNTERS; i++) 825 { 826 if (counters & (1 << i)) 827 saRoot->LLCounters.arrayIOCounter[i] = 0; 828 } 829 830 return AGSA_RC_SUCCESS; 831 } 832 #endif 833 834