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