FreeBSD kernel pms device code
sampirsp.c
Go to the documentation of this file.
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/*******************************************************************************/
27/******************************************************************************/
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD$");
30#include <dev/pms/config.h>
31
33#ifdef SA_ENABLE_TRACE_FUNCTIONS
34#ifdef siTraceFileID
35#undef siTraceFileID
36#endif
37#define siTraceFileID 'J'
38#endif
39
40/******************************************************************************/
41/* Protoytpes */
43 agsaRoot_t *agRoot,
44 agsaIORequestDesc_t *pRequest
45 );
46
47/******************************************************************************/
61/*******************************************************************************/
62#if 0
65 agsaRoot_t *agRoot,
66 bit32 *pMsg1,
67 mpiMsgCategory_t category,
68 bit16 opcode
69 )
70{
71 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
73 bit32 parserStatus = AGSA_RC_SUCCESS;
74
76
77 switch (opcode)
78 {
80 {
82 agsaIORequestDesc_t *pRequest = agNULL;
83 bit32 tag = 0;
84 bit32 sspTag = 0;
85 bit32 count = 0;
86
87#ifdef SALL_API_TEST
88 saRoot->LLCounters.IOCounter.numSSPCompleted++;
89 SA_DBG3(("mpiParseOBIomb, SSP_COMP Response received IOMB=%p %d\n",
90 pMsg1, saRoot->LLCounters.IOCounter.numSSPCompleted));
91#else
92 SA_DBG3(("mpiParseOBIomb, OPC_OUB_COMBINED_SSP_COMP Response received IOMB=%p\n", pMsg1));
93#endif
94 /* get Tag */
95 for (count = 0; count < pIomb->coalescedCount; count++)
96 {
97 tag = pIomb->sspComplCxt[count].tag;
98 sspTag = pIomb->sspComplCxt[count].SSPTag;
99 pRequest = (agsaIORequestDesc_t *)saRoot->IOMap[tag].IORequest;
100 SA_ASSERT((pRequest), "pRequest");
101
102 if(pRequest == agNULL)
103 {
104 SA_DBG1(("mpiParseOBIomb,OPC_OUB_COMBINED_SSP_COMP Resp IOMB tag=0x%x, status=0x%x, param=0x%x, SSPTag=0x%x\n", tag, OSSA_IO_SUCCESS, 0, sspTag));
105 return(AGSA_RC_FAILURE);
106 }
107 SA_ASSERT((pRequest->valid), "pRequest->valid");
108
109 SA_DBG3(("mpiParseOBIomb, OPC_OUB_COMBINED_SSP_COMP IOMB tag=0x%x, status=0x%x, param=0x%x, SSPTag=0x%x\n", tag, OSSA_IO_SUCCESS, 0, sspTag));
110
111 /* Completion of SSP without Response Data */
112 siIODone( agRoot, pRequest, OSSA_IO_SUCCESS, sspTag);
113 }
114 }
115 break;
116
117 case OPC_OUB_SSP_COMP:
118 {
119#ifdef SALL_API_TEST
120 saRoot->LLCounters.IOCounter.numSSPCompleted++;
121 SA_DBG3(("mpiParseOBIomb, SSP_COMP Response received IOMB=%p %d\n",
122 pMsg1, saRoot->LLCounters.IOCounter.numSSPCompleted));
123#else
124 SA_DBG3(("mpiParseOBIomb, SSP_COMP Response received IOMB=%p\n", pMsg1));
125#endif
126 /* process the SSP IO Completed response message */
127 mpiSSPCompletion(agRoot, pMsg1);
128 break;
129 }
131 {
133 agsaIORequestDesc_t *pRequest;
134 bit32 tag;
135 bit32 count;
136
137 #ifdef SALL_API_TEST
138 saRoot->LLCounters.IOCounter.numSSPCompleted++;
139 SA_DBG3(("mpiParseOBIomb, OPC_OUB_COMBINED_SATA_COMP Response received IOMB=%p %d\n",
140 pMsg1, saRoot->LLCounters.IOCounter.numSSPCompleted));
141 #else
142 SA_DBG3(("mpiParseOBIomb, OPC_OUB_COMBINED_SATA_COMP Response received IOMB=%p\n", pMsg1));
143 #endif
144
145 pIomb = (agsaSATACoalescedCompletionRsp_t *)pMsg1;
146 /* get Tag */
147 for (count = 0; count < pIomb->coalescedCount; count++)
148 {
149 tag = pIomb->stpComplCxt[count].tag;
150 pRequest = (agsaIORequestDesc_t *)saRoot->IOMap[tag].IORequest;
151 SA_ASSERT((pRequest), "pRequest");
152
153 if(pRequest == agNULL)
154 {
155 SA_DBG1(("mpiParseOBIomb,OPC_OUB_COMBINED_SATA_COMP Resp IOMB tag=0x%x, status=0x%x, param=0x%x\n", tag, OSSA_IO_SUCCESS, 0));
156 return(AGSA_RC_FAILURE);
157 }
158 SA_ASSERT((pRequest->valid), "pRequest->valid");
159
160 SA_DBG3(("mpiParseOBIomb, OPC_OUB_COMBINED_SATA_COMP IOMB tag=0x%x, status=0x%x, param=0x%x\n", tag, OSSA_IO_SUCCESS, 0));
161
162 /* Completion of SATA without Response Data */
163 siIODone( agRoot, pRequest, OSSA_IO_SUCCESS, 0);
164 }
165 break;
166 }
168 {
169#ifdef SALL_API_TEST
170 saRoot->LLCounters.IOCounter.numSataCompleted++;
171 SA_DBG3(("mpiParseOBIomb, SATA_COMP Response received IOMB=%p %d\n",
172 pMsg1, saRoot->LLCounters.IOCounter.numSataCompleted));
173#else
174 SA_DBG3(("mpiParseOBIomb, SATA_COMP Response received IOMB=%p\n", pMsg1));
175#endif
176 /* process the response message */
177 mpiSATACompletion(agRoot, pMsg1);
178 break;
179 }
181 {
182#ifdef SALL_API_TEST
183 saRoot->LLCounters.IOCounter.numSSPAbortedCB++;
184#else
185 SA_DBG3(("mpiParseOBIomb, SSP_ABORT Response received IOMB=%p\n", pMsg1));
186#endif
187 /* process the response message */
188 parserStatus = mpiSSPAbortRsp(agRoot, (agsaSSPAbortRsp_t *)pMsg1);
189 if(parserStatus != AGSA_RC_SUCCESS)
190 {
191 SA_DBG3(("mpiParseOBIomb, mpiSSPAbortRsp FAIL IOMB=%p\n", pMsg1));
192 }
193
194 break;
195 }
197 {
198#ifdef SALL_API_TEST
199 saRoot->LLCounters.IOCounter.numSataAbortedCB++;
200#else
201 SA_DBG3(("mpiParseOBIomb, SATA_ABORT Response received IOMB=%p\n", pMsg1));
202#endif
203 /* process the response message */
204 mpiSATAAbortRsp(agRoot, (agsaSATAAbortRsp_t *)pMsg1);
205 break;
206 }
208 {
209 SA_DBG3(("mpiParseOBIomb, SATA_EVENT Response received IOMB=%p\n", pMsg1));
210 /* process the response message */
211 mpiSATAEvent(agRoot, (agsaSATAEventRsp_t *)pMsg1);
212 break;
213 }
215 {
216 SA_DBG3(("mpiParseOBIomb, SSP_EVENT Response received IOMB=%p\n", pMsg1));
217 /* process the response message */
218 mpiSSPEvent(agRoot, (agsaSSPEventRsp_t *)pMsg1);
219 break;
220 }
221 case OPC_OUB_SMP_COMP:
222 {
223#ifdef SALL_API_TEST
224 saRoot->LLCounters.IOCounter.numSMPCompleted++;
225 SA_DBG3(("mpiParseOBIomb, SMP_COMP Response received IOMB=%p, %d\n",
226 pMsg1, saRoot->LLCounters.IOCounter.numSMPCompleted));
227#else
228 SA_DBG3(("mpiParseOBIomb, SMP_COMP Response received IOMB=%p\n", pMsg1));
229#endif
230 /* process the response message */
232 break;
233 }
234#ifndef BIOS
235 case OPC_OUB_ECHO:
236 {
237#ifdef SALL_API_TEST
238 saRoot->LLCounters.IOCounter.numEchoCB++;
239 SA_DBG3(("mpiParseOBIomb, ECHO Response received %d\n", saRoot->LLCounters.IOCounter.numEchoCB));
240#else
241 SA_DBG3(("mpiParseOBIomb, ECHO Response received\n"));
242#endif
243 /* process the response message */
244 mpiEchoRsp(agRoot, (agsaEchoRsp_t *)pMsg1);
245 break;
246 }
247#endif
249 {
250 SA_DBG3(("mpiParseOBIomb, OPC_OUB_GET_NVMD_DATA received IOMB=%p\n", pMsg1));
251 /* process the response message */
252 mpiGetNVMDataRsp(agRoot, (agsaGetNVMDataRsp_t *)pMsg1);
253 break;
254 }
256 {
257 SA_ASSERT((smIS_SPC(agRoot)), "smIS_SPC");
258 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SPC_HW_EVENT Response received IOMB=%p\n", pMsg1));
259 /* process the response message */
260 mpiHWevent(agRoot, (agsaHWEvent_SPC_OUB_t *)pMsg1);
261 break;
262 }
263 case OPC_OUB_HW_EVENT:
264 {
265 SA_DBG3(("mpiParseOBIomb, HW_EVENT Response received IOMB=%p\n", pMsg1));
266 /* process the response message */
267 mpiHWevent(agRoot, (agsaHWEvent_SPC_OUB_t *)pMsg1);
268 break;
269 }
271 {
272 SA_DBG1(("mpiParseOBIomb, OPC_OUB_PHY_START_RESPONSE Response received IOMB=%p\n", pMsg1));
273 /* process the response message */
274 mpiPhyStartEvent( agRoot, (agsaHWEvent_Phy_OUB_t *)pMsg1 );
275
276 break;
277 }
279 {
280 SA_DBG1(("mpiParseOBIomb, OPC_OUB_PHY_STOP_RESPONSE Response received IOMB=%p\n", pMsg1));
281 /* process the response message */
282 mpiPhyStopEvent( agRoot, (agsaHWEvent_Phy_OUB_t *)pMsg1 );
283 break;
284 }
285
287 {
288 SA_DBG3(("mpiParseOBIomb, PHY CONTROL Response received IOMB=%p\n", pMsg1));
289 /* process the response message */
290 mpiPhyCntrlRsp(agRoot, (agsaLocalPhyCntrlRsp_t *)pMsg1);
291 break;
292 }
294 {
295 SA_ASSERT((smIS_SPC(agRoot)), "smIS_SPC");
296 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SPC_DEV_REGIST Response received IOMB=%p\n", pMsg1));
297 /* process the response message */
299 break;
300 }
302 {
303 SA_DBG2(("mpiParseOBIomb, DEV_REGISTRATION Response received IOMB=%p\n", pMsg1));
304 /* process the response message */
306 break;
307 }
309 {
310 SA_DBG3(("mpiParseOBIomb, DEREGISTRATION DEVICE Response received IOMB=%p\n", pMsg1));
311 /* process the response message */
313 break;
314 }
315#ifndef BIOS
317 {
318 SA_DBG3(("mpiParseOBIomb, GET_DEV_HANDLE Response received IOMB=%p\n", pMsg1));
319 /* process the response message */
321 break;
322 }
323#endif
325 {
326 SA_DBG3(("mpiParseOBIomb, SPC_DEV_HANDLE_ARRIV Response received IOMB=%p\n", pMsg1));
327 /* process the response message */
329 break;
330 }
332 {
333 SA_DBG3(("mpiParseOBIomb, DEV_HANDLE_ARRIV Response received IOMB=%p\n", pMsg1));
334 /* process the response message */
336 break;
337 }
338#if 0 //Sunitha
339 case OPC_OUB_THERM_HW_EVENT:
340 {
341 SA_DBG3(("mpiParseOBIomb, THERM_HW_EVENT Response received IOMB=%p\n", pMsg1));
342 ossaLogThermalEvent(agRoot, (agsaThermal_Hw_Event_Notify_t *)pMsg1);
343 break;
344 }
345#endif //Sunitha
347 {
348 SA_DBG3(("mpiParseOBIomb, SSP_RECV_EVENT Response received IOMB=%p\n", pMsg1));
349 /* process the response message */
351 break;
352 }
353 case OPC_OUB_DEV_INFO:
354 {
355 SA_ASSERT((smIS_SPCV(agRoot)), "smIS_SPCV");
356 SA_DBG3(("mpiParseOBIomb, DEV_INFO Response received IOMB=%p\n", pMsg1));
357 /* process the response message */
358 mpiGetDevInfoRsp(agRoot, (agsaGetDevInfoRspV_t *)pMsg1);
359 break;
360 }
361#ifndef BIOS
363 {
364 SA_ASSERT((smIS_SPCV(agRoot)), "smIS_SPCV");
365 SA_DBG2(("mpiParseOBIomb, OPC_OUB_GET_PHY_PROFILE_RSP Response received IOMB=%p\n", pMsg1));
366 /* process the response message */
368 break;
369 }
371 {
372 SA_ASSERT((smIS_SPCV(agRoot)), "smIS_SPCV");
373 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_PHY_PROFILE_RSP Response received IOMB=%p\n", pMsg1));
374 /* process the response message */
376 break;
377 }
378#endif /* BIOS */
380 {
381 SA_ASSERT((smIS_SPC(agRoot)), "smIS_SPC");
382 SA_DBG3(("mpiParseOBIomb, DEV_INFO Response received IOMB=%p\n", pMsg1));
383 /* process the response message */
385 break;
386 }
388 {
389 SA_DBG3(("mpiParseOBIomb, OPC_OUB_FW_FLASH_UPDATE Response received IOMB=%p\n", pMsg1));
390 /* process the response message */
392 break;
393 }
395 {
396 SA_DBG3(("mpiParseOBIomb, OPC_OUB_FW_FLASH_UPDATE Response received IOMB=%p\n", pMsg1));
397 /* process the response message */
399 break;
400 }
401#ifndef BIOS
402#ifdef SPC_ENABLE_PROFILE
404 {
405 SA_DBG3(("mpiParseOBIomb, OPC_OUB_FW_PROFILE Response received IOMB=%p\n", pMsg1));
406 /* process the response message */
407 mpiFwProfileRsp(agRoot, (agsaFwProfileRsp_t *)pMsg1);
408 break;
409 }
410#endif
412 {
413 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_NVMD_DATA received IOMB=%p\n", pMsg1));
414 /* process the response message */
415 mpiSetNVMDataRsp(agRoot, (agsaSetNVMDataRsp_t *)pMsg1);
416 break;
417 }
418
420 {
421 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_GPIO_RESPONSE Response received IOMB=%p\n", pMsg1));
422 /* process the response message */
423 mpiGPIORsp(agRoot, (agsaGPIORsp_t *)pMsg1);
424 break;
425 }
427 {
428 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_GPIO_RESPONSE Response received IOMB=%p\n", pMsg1));
429 /* process the response message */
430 mpiGPIOEventRsp(agRoot, (agsaGPIOEvent_t *)pMsg1);
431 break;
432 }
433#endif /* BIOS */
435 {
436 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_GENERAL_EVENT Response received IOMB=%p\n", pMsg1));
437 /* process the response message */
439 break;
440 }
441#ifndef BIOS
443 {
444 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SAS_DIAG_MODE_START_END Response received IOMB=%p\n", pMsg1));
445 /* process the response message */
447 break;
448 }
450 {
451 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SAS_DIAG_EXECUTE_RSP Response received IOMB=%p\n", pMsg1));
452 /* process the response message */
454 break;
455 }
456#endif /* BIOS */
458 {
459 SA_DBG3(("mpiParseOBIomb, OPC_OUB_GET_TIME_STAMP Response received IOMB=%p\n", pMsg1));
460 /* process the response message */
462 break;
463 }
464
466 {
467 SA_ASSERT((smIS_SPC(agRoot)), "smIS_SPC");
468 SA_DBG3(("mpiParseOBIomb,OPC_OUB_SPC_SAS_HW_EVENT_ACK Response received IOMB=%p\n", pMsg1));
469 /* process the response message */
471 break;
472 }
473
475 {
476 SA_ASSERT((smIS_SPCV(agRoot)), "smIS_SPCV");
477 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SAS_HW_EVENT_ACK Response received IOMB=%p\n", pMsg1));
478 /* process the response message */
480 break;
481 }
483 {
484 SA_DBG3(("mpiParseOBIomb, OPC_OUB_PORT_CONTROL Response received IOMB=%p\n", pMsg1));
485 /* process the response message */
486 mpiPortControlRsp(agRoot, (agsaPortControlRsp_t *)pMsg1);
487 break;
488 }
490 {
491#ifdef SALL_API_TEST
492 saRoot->LLCounters.IOCounter.numSMPAbortedCB++;
493 SA_DBG3(("mpiParseOBIomb, SMP_ABORT Response received IOMB=%p, %d\n",
494 pMsg1, saRoot->LLCounters.IOCounter.numSMPAbortedCB));
495#else
496 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SMP_ABORT_RSP Response received IOMB=%p\n", pMsg1));
497#endif
498 /* process the response message */
499 mpiSMPAbortRsp(agRoot, (agsaSMPAbortRsp_t *)pMsg1);
500 break;
501 }
503 {
504 SA_DBG3(("mpiParseOBIomb, OPC_OUB_DEVICE_HANDLE_REMOVAL received IOMB=%p\n", pMsg1));
505 /* process the response message */
507 break;
508 }
510 {
511 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_DEVICE_STATE received IOMB=%p\n", pMsg1));
512 /* process the response message */
514 break;
515 }
516
517#ifndef BIOS
519 {
520 SA_DBG3(("mpiParseOBIomb, OPC_OUB_GET_DEVICE_STATE received IOMB=%p\n", pMsg1));
521 /* process the response message */
523 break;
524 }
525#endif /* BIOS */
526
528 {
529 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_DEV_INFO received IOMB=%p\n", pMsg1));
530 /* process the response message */
532 break;
533 }
534
535#ifndef BIOS_DEBUG
537 {
538 SA_ASSERT((smIS_SPC(agRoot)), "smIS_SPC");
539 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SAS_RE_INITIALIZE received IOMB=%p\n", pMsg1));
540 /* process the response message */
542 break;
543 }
544#endif /* BIOS */
545
547 {
548 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SGPIO_RESPONSE Response received IOMB=%p\n", pMsg1));
549 /* process the response message */
550 mpiSGpioRsp(agRoot, (agsaSGpioRsp_t *)pMsg1);
551 break;
552 }
553
554#ifndef BIOS
556 {
557 SA_DBG3(("mpiParseOBIomb, OPC_OUB_PCIE_DIAG_EXECUTE Response received IOMB=%p\n", pMsg1));
558 /* process the response message */
560 break;
561 }
562 case 2104: //delray start
563 {
564 if(smIS_SPC6V(agRoot))
565 {
566 SA_DBG3(("mpiParseOBIomb, OPC_OUB_GET_DFE_DATA_RSP Response received IOMB=%p\n", pMsg1));
567 /* process the response message */
568 mpiGetDFEDataRsp(agRoot, (agsaGetDDEFDataRsp_t *)pMsg1);
569 }
570 if(smIS_SPC12V(agRoot))
571 {
572 SA_DBG3(("mpiParseOBIomb, OPC_INB_GET_VIST_CAP Response received IOMB=%p\n", pMsg1));
573 mpiGetVisRsp(agRoot, (agsaGetVisCapRsp_t *)pMsg1);
574 }
575 else
576 {
577 SA_DBG1(("mpiParseOBIomb, 2104 Response received IOMB=%p\n", pMsg1));
578 }
579 break;
580 }
581#endif /* BIOS */
583 {
584 SA_DBG3(("mpiParseOBIomb, OPC_OUB_SET_CONTROLLER_CONFIG Response received IOMB=%p\n", pMsg1));
586 break;
587 }
588#ifndef BIOS
590 {
591 SA_DBG3(("mpiParseOBIomb, OPC_OUB_GET_CONTROLLER_CONFIG Response received IOMB=%p\n", pMsg1));
593 break;
594 }
596 {
597 SA_DBG3(("mpiParseOBIomb, OPC_OUB_KEK_MANAGEMENT Response received IOMB=%p\n", pMsg1));
599 break;
600 }
601#endif /* BIOS */
602#ifdef UN_USED_FUNC
604 {
605 SA_DBG3(("mpiParseOBIomb, OPC_OUB_DEK_MANAGEMENT Response received IOMB=%p\n", pMsg1));
607 break;
608 }
609#endif
610#ifndef BIOS
611 case OPC_OUB_OPR_MGMT:
612 {
613 SA_DBG1(("mpiParseOBIomb, OPC_OUB_OPR_MGMT Response received IOMB=%p\n", pMsg1));
615 break;
616 }
618 {
619 SA_DBG1(("mpiParseOBIomb, OPC_OUB_ENC_TEST_EXECUTE Response received IOMB=%p\n", pMsg1));
620 mpiBistRsp(agRoot, (agsaEncryptBistRsp_t *)pMsg1);
621 break;
622 }
623#endif /* BIOS */
625 {
626 SA_DBG1(("mpiParseOBIomb, OPC_OUB_SET_OPERATOR Response received IOMB=%p\n", pMsg1));
627 mpiSetOperatorRsp(agRoot, (agsaSetOperatorRsp_t *)pMsg1);
628 break;
629 }
631 {
632 SA_DBG1(("mpiParseOBIomb, OPC_OUB_GET_OPERATOR Response received IOMB=%p\n", pMsg1));
633 mpiGetOperatorRsp(agRoot, (agsaGetOperatorRsp_t *)pMsg1);
634 break;
635 }
636 case OPC_OUB_DIF_ENC_OFFLOAD_RSP://delray start
637 {
638 SA_ASSERT((smIS_SPCV(agRoot)), "smIS_SPCV");
639 SA_DBG1(("mpiParseOBIomb, OPC_OUB_DIF_ENC_OFFLOAD_RSP Response received IOMB=%p\n", pMsg1));
641 break;
642 } //delray end
643 default:
644 {
645#ifdef SALL_API_TEST
646 saRoot->LLCounters.IOCounter.numUNKNWRespIOMB++;
647 SA_DBG1(("mpiParseOBIomb, UnKnown Response received IOMB=%p, %d\n",
648 pMsg1, saRoot->LLCounters.IOCounter.numUNKNWRespIOMB));
649#else
650 SA_DBG1(("mpiParseOBIomb, Unknown IOMB Response received opcode 0x%X IOMB=%p\n",opcode, pMsg1));
651#endif
652 break;
653 }
654 } /* switch */
655
657
658 return ret;
659
660}
661#endif
662
663#ifndef BIOS
664#endif
665
666/******************************************************************************/
677/*******************************************************************************/
679 agsaRoot_t *agRoot,
680 agsaEchoRsp_t *pIomb
681 )
682{
684 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
685 agsaIORequestDesc_t *pRequest;
686 agsaContext_t *agContext;
687 bit32 tag;
688
690
691 SA_DBG3(("mpiEchoRsp: HTAG=0x%x\n", pIomb->tag));
692
693 /* get request from IOMap */
694 OSSA_READ_LE_32(agRoot, &tag, pIomb, OSSA_OFFSET_OF(agsaEchoRsp_t, tag));
695
696 pRequest = (agsaIORequestDesc_t *)saRoot->IOMap[tag].IORequest;
697 if (agNULL == pRequest)
698 {
699 SA_DBG1(("mpiEchoRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x\n", tag));
701 return AGSA_RC_FAILURE;
702 }
703
704 agContext = saRoot->IOMap[tag].agContext;
705
706 ossaEchoCB(agRoot, agContext, (void *)&pIomb->payload[0]);
707
708 /* remove the request from IOMap */
709 saRoot->IOMap[tag].Tag = MARK_OFF;
710 saRoot->IOMap[tag].IORequest = agNULL;
711 saRoot->IOMap[tag].agContext = agNULL;
712
714 SA_ASSERT((pRequest->valid), "pRequest->valid");
715 pRequest->valid = agFALSE;
716 /* return the request to free pool */
718 {
719 SA_DBG1(("mpiEchoRsp: saving pRequest (%p) for later use\n", pRequest));
720 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
721 }
722 else
723 {
724 /* return the request to free pool */
725 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
726 }
728
729 /* return value */
731 return ret;
732}
733
734/******************************************************************************/
745/*******************************************************************************/
747 agsaRoot_t *agRoot,
749 )
750{
752 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
753 agsaIORequestDesc_t *pRequest;
754 agsaContext_t *agContext;
755 bit32 i, dataLen;
756 bit32 DlenStatus, tag, iRTdaBnDpsAsNvm;
757
759
760 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetNVMDataRsp_t, tag));
761 OSSA_READ_LE_32(AGROOT, &DlenStatus, pIomb, OSSA_OFFSET_OF(agsaGetNVMDataRsp_t, DlenStatus));
762 OSSA_READ_LE_32(AGROOT, &iRTdaBnDpsAsNvm, pIomb, OSSA_OFFSET_OF(agsaGetNVMDataRsp_t, iRTdaBnDpsAsNvm));
763 OSSA_READ_LE_32(AGROOT, &dataLen, pIomb, OSSA_OFFSET_OF(agsaGetNVMDataRsp_t, NVMData[10])) ;
764
765 SA_DBG1(("mpiGetNVMDataRsp: HTAG=0x%x\n", tag));
766
767 /* get request from IOMap */
768 pRequest = (agsaIORequestDesc_t *)saRoot->IOMap[tag].IORequest;
769 if (agNULL == pRequest)
770 {
771 SA_DBG1(("mpiGetNVMDataRsp: Bad Response IOMB!!! pRequest is NULL.\n"));
773 return AGSA_RC_FAILURE;
774 }
775
776 agContext = saRoot->IOMap[tag].agContext;
777
778 if (iRTdaBnDpsAsNvm & IRMode)
779 {
780 /* indirect mode - IR bit set */
781 SA_DBG1(("mpiGetNVMDataRsp: OSSA_SUCCESS, IR=1, DataLen=%d\n", dataLen));
782 if (((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_CONFIG_SEEPROM) ||
783 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_VPD_FLASH) ||
784 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_TWI_DEVICES) ||
785 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_EXPANSION_ROM) ||
786 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_IOP_REG_FLASH))
787 {
788 /* CB for NVMD */
789//#ifdef UN_USED_FUNC
790 ossaGetNVMDResponseCB(agRoot, agContext, (DlenStatus & NVMD_STAT), INDIRECT_MODE, dataLen, agNULL);
791//#endif
792 }
793 else if (((iRTdaBnDpsAsNvm & NVMD_TYPE) == AAP1_RDUMP) ||
794 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == IOP_RDUMP))
795 {
796#ifdef UN_USED_FUNC
797 if ((DlenStatus & NVMD_STAT) == 0)
798 {
799 /* CB for Register Dump */
800
801 ossaGetRegisterDumpCB(agRoot, agContext, OSSA_SUCCESS);
802 }
803 else
804 {
805 /* CB for Register Dump */
806 ossaGetRegisterDumpCB(agRoot, agContext, OSSA_FAILURE);
807 }
808#endif
809 }
810 else
811 {
812 /* Should not be happened */
813 SA_DBG1(("mpiGetNVMDataRsp: (IR=1)Wrong Device type 0x%x\n", iRTdaBnDpsAsNvm));
814 }
815 }
816 else /* direct mode */
817 {
818 SA_DBG1(("mpiGetNVMDataRsp: OSSA_SUCCESS, IR=0, DataLen=%d\n", ((DlenStatus & NVMD_LEN) >> SHIFT24)));
819 for (i = 0; i < (((DlenStatus & NVMD_LEN) >> SHIFT24)/4); i++)
820 {
821 SA_DBG1(("mpiGetNVMDataRsp: OSSA_SUCCESS, NVMDATA=0x%x\n", pIomb->NVMData[i]));
822 }
823 if (((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_CONFIG_SEEPROM) ||
824 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_VPD_FLASH) ||
825 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_TWI_DEVICES))
826 {
827 /* CB for NVMD */
828 // char * safe_type_pun = (char *)(&pIomb->NVMData[0]);
829#ifdef UN_USED_FUNC
830 ossaGetNVMDResponseCB(agRoot, agContext, (DlenStatus & NVMD_STAT), DIRECT_MODE,
831 ((DlenStatus & NVMD_LEN) >> SHIFT24), (agsaFrameHandle_t *)safe_type_pun);
832#endif
833 }
834 else if (((iRTdaBnDpsAsNvm & NVMD_TYPE) == AAP1_RDUMP) ||
835 ((iRTdaBnDpsAsNvm & NVMD_TYPE) == IOP_RDUMP))
836 {
837#ifdef UN_USED_FUNC
838
839 if ((DlenStatus & NVMD_STAT) == 0)
840 {
841 /* CB for Register Dump */
842 ossaGetRegisterDumpCB(agRoot, agContext, OSSA_SUCCESS);
843 }
844 else
845 {
846 /* CB for Register Dump */
847 ossaGetRegisterDumpCB(agRoot, agContext, OSSA_FAILURE);
848 }
849#endif
850 }
851 else
852 {
853 /* Should not be happened */
854 SA_DBG1(("mpiGetNVMDataRsp: (IR=0)Wrong Device type 0x%x\n", iRTdaBnDpsAsNvm));
855 }
856 }
857
858 /* remove the request from IOMap */
859 saRoot->IOMap[tag].Tag = MARK_OFF;
860 saRoot->IOMap[tag].IORequest = agNULL;
861 saRoot->IOMap[tag].agContext = agNULL;
862
864 SA_ASSERT((pRequest->valid), "pRequest->valid");
865 pRequest->valid = agFALSE;
866 /* return the request to free pool */
868 {
869 SA_DBG1(("mpiGetNVMDataRsp: saving pRequest (%p) for later use\n", pRequest));
870 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
871 }
872 else
873 {
874 /* return the request to free pool */
875 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
876 }
878
880
881 /* return value */
882 return ret;
883}
884
885/******************************************************************************/
896/*******************************************************************************/
897
899 agsaRoot_t *agRoot,
901 )
902{
904 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
905
906 bit32 phyId;
907 bit32 IOMBStatus;
908 bit32 tag;
909
910 agsaIORequestDesc_t *pRequest;
911 agsaContext_t *agContext;
912 bit32 HwCBStatus;
913
914 if(saRoot == agNULL)
915 {
916 SA_DBG1(("mpiPhyStartEvent: saRoot == agNULL\n"));
917 return(AGSA_RC_FAILURE);
918 }
920
921 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t, tag)) ;
922
923 /* get request from IOMap */
924 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
925 agContext = saRoot->IOMap[tag].agContext;
926 /* remove the request from IOMap */
927 saRoot->IOMap[tag].Tag = MARK_OFF;
928 saRoot->IOMap[tag].IORequest = agNULL;
929 saRoot->IOMap[tag].agContext = agNULL;
930 if (agNULL == pRequest)
931 {
932 SA_DBG1(("mpiPhyStartEvent: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x \n", tag));
934 return AGSA_RC_FAILURE;
935 }
936
937 SA_DBG1(("mpiPhyStartEvent: Status 0x%X PhyId 0x%X\n",pIomb->Status,pIomb->ReservedPhyId));
938
939 OSSA_READ_LE_32(AGROOT, &IOMBStatus, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t,Status ));
940 OSSA_READ_LE_32(AGROOT, &phyId, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t,ReservedPhyId ));
941
942 switch (IOMBStatus)
943 {
944 case OSSA_MPI_IO_SUCCESS: /* PhyStart operation completed successfully */
945 HwCBStatus = 0;
946 saRoot->phys[phyId].linkstatus = 1;
947 SA_DBG1(("mpiPhyStartEvent:MPI_IO_SUCCESS IOMBStatus 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
948 /* Callback with PHY_UP */
949 break;
950 case OSSA_MPI_ERR_INVALID_PHY_ID: /* identifier specified in the PHY_START command is invalid i.e out of supported range for this product. */
951 HwCBStatus = 1;
952 saRoot->phys[phyId].linkstatus = 0;
953 SA_DBG1(("mpiPhyStartEvent: MPI_ERR_INVALID_PHY_ID IOMBStatus 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
954 ret = AGSA_RC_FAILURE;
955 break;
957 HwCBStatus = 2;
958 saRoot->phys[phyId].linkstatus = 1;
959 SA_DBG1(("mpiPhyStartEvent: MPI_ERR_PHY_ALREADY_STARTED IOMBStatus 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
960 ret = AGSA_RC_FAILURE;
961 break;
963 HwCBStatus = 4;
964 saRoot->phys[phyId].linkstatus = 0;
965 SA_DBG1(("mpiPhyStartEvent: MPI_ERR_INVALID_ANALOG_TBL_IDX IOMBStatus 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
966 ret = AGSA_RC_FAILURE;
967 break;
968 default:
969 HwCBStatus = 3;
970 saRoot->phys[phyId].linkstatus = 0;
971 SA_DBG1(("mpiPhyStartEvent: Unknown IOMBStatus 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
972 ret = AGSA_RC_FAILURE;
973 break;
974 }
975
976 ossaHwCB(agRoot,agNULL, OSSA_HW_EVENT_PHY_START_STATUS ,((HwCBStatus << SHIFT8) | phyId) ,agContext, agNULL);
977
978 /* return the request to free pool */
980 SA_ASSERT((pRequest->valid), "pRequest->valid");
981 pRequest->valid = agFALSE;
983 {
984 SA_DBG1(("mpiPhyStartEvent: saving pRequest (%p) for later use\n", pRequest));
985 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
986 }
987 else
988 {
989 /* return the request to free pool */
990 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
991 }
993
994 return(ret);
995}
996
997
999 agsaRoot_t *agRoot,
1001 )
1002{
1003 bit32 ret = AGSA_RC_SUCCESS;
1004 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
1005 bit32 phyId;
1006
1007 bit32 IOMBStatus;
1008 bit32 HwCBStatus;
1009
1010 bit32 tag;
1011
1012 agsaIORequestDesc_t *pRequest;
1013 agsaContext_t *agContext;
1014
1015 agsaPhy_t *pPhy;
1016 agsaPort_t *pPort;
1017
1018
1019 if(saRoot == agNULL)
1020 {
1021 SA_DBG1(("mpiPhyStopEvent: saRoot == agNULL\n"));
1022 return(AGSA_RC_FAILURE);
1023 }
1024 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t, tag)) ;
1025
1026 /* get request from IOMap */
1027 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
1028 agContext = saRoot->IOMap[tag].agContext;
1029 /* remove the request from IOMap */
1030 saRoot->IOMap[tag].Tag = MARK_OFF;
1031 saRoot->IOMap[tag].IORequest = agNULL;
1032 saRoot->IOMap[tag].agContext = agNULL;
1033 if (agNULL == pRequest)
1034 {
1035 SA_DBG1(("mpiPhyStopEvent: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x \n", tag));
1036 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2H");
1037 return AGSA_RC_FAILURE;
1038 }
1039
1040 OSSA_READ_LE_32(AGROOT, &IOMBStatus, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t,Status ));
1041 OSSA_READ_LE_32(AGROOT, &phyId, pIomb, OSSA_OFFSET_OF(agsaHWEvent_Phy_OUB_t,ReservedPhyId ));
1042 SA_DBG1(("mpiPhyStopEvent: Status %08X PhyId %08X\n",IOMBStatus,phyId));
1043
1044 if(smIS_SPCV(agRoot))
1045 {
1046 phyId &= 0xff; // SPCv PHY_ID is one byte wide
1047 }
1048
1049 saRoot->phys[phyId].linkstatus = 0;
1050
1051 switch (IOMBStatus)
1052 {
1053 case OSSA_MPI_IO_SUCCESS: /* PhyStart operation completed successfully */
1054 SA_DBG1(("mpiPhyStopEvent:MPI_IO_SUCCESS 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
1055 HwCBStatus = 0;
1056 /* Callback with PHY_DOWN */
1057 break;
1058 case OSSA_MPI_ERR_INVALID_PHY_ID: /* identifier specified in the PHY_START command is invalid i.e out of supported range for this product. */
1059 SA_DBG1(("mpiPhyStopEvent: MPI_ERR_INVALID_PHY_ID 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
1060 HwCBStatus = 1;
1061 break;
1062 case OSSA_MPI_ERR_PHY_NOT_STARTED: /* An attempt to stop a phy which is not started */
1063 HwCBStatus = 4;
1064 SA_DBG1(("mpiPhyStopEvent: 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
1065 break;
1066
1067 case OSSA_MPI_ERR_DEVICES_ATTACHED: /* All the devices in a port need to be deregistered if the PHY_STOP is for the last phy */
1068 HwCBStatus = 2;
1069 SA_DBG1(("mpiPhyStopEvent: 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
1070 break;
1071
1072 default:
1073 HwCBStatus = 3;
1074 SA_DBG1(("mpiPhyStopEvent: Unknown Status 0x%x for phyId 0x%x\n",IOMBStatus,phyId));
1075 break;
1076 }
1077
1078
1079 if(HwCBStatus == 0)
1080 {
1081 pPhy = &(saRoot->phys[phyId]);
1082 /* get the port of the phy */
1083 pPort = pPhy->pPort;
1084 if ( agNULL != pPort )
1085 {
1086 SA_DBG1(("siPhyStopCB: phy%d invalidating port\n", phyId));
1087 /* invalid port state, remove the port */
1088 pPort->status |= PORT_INVALIDATING;
1089 saRoot->PortMap[pPort->portId].PortStatus |= PORT_INVALIDATING;
1090 /* invalid the port */
1091 siPortInvalid(agRoot, pPort);
1092 /* map out the portmap */
1093 saRoot->PortMap[pPort->portId].PortContext = agNULL;
1094 saRoot->PortMap[pPort->portId].PortID = PORT_MARK_OFF;
1095 saRoot->PortMap[pPort->portId].PortStatus |= PORT_INVALIDATING;
1096 ossaHwCB(agRoot,&(pPort->portContext) , OSSA_HW_EVENT_PHY_STOP_STATUS, ((HwCBStatus << SHIFT8) | phyId ),agContext, agNULL);
1097 }
1098 else
1099 {
1100 SA_DBG1(("siPhyStopCB: phy%d - Port is not established\n", phyId));
1101 ossaHwCB(agRoot, agNULL, OSSA_HW_EVENT_PHY_STOP_STATUS, ((HwCBStatus << SHIFT8) | phyId ) , agContext, agNULL);
1102 }
1103
1104 /* set PHY_STOPPED status */
1106
1107 /* Exclude the phy from a port */
1108 if ( agNULL != pPort )
1109 {
1110 /* Acquire port list lock */
1112
1113 /* Delete the phy from the port */
1114 pPort->phyMap[phyId] = agFALSE;
1115 saRoot->phys[phyId].pPort = agNULL;
1116
1117 /* Release port list lock */
1119 }
1120
1121 }
1122 else
1123 {
1124 SA_DBG1(("siPhyStopCB: Error phy%d - Port is not established\n", phyId));
1125 ossaHwCB(agRoot, agNULL, OSSA_HW_EVENT_PHY_STOP_STATUS, ((HwCBStatus << SHIFT8) | phyId ) , agContext, agNULL);
1126 }
1127
1128 /* return the request to free pool */
1130 SA_ASSERT((pRequest->valid), "pRequest->valid");
1131 pRequest->valid = agFALSE;
1133 {
1134 SA_DBG1(("mpiPhyStartEvent: saving pRequest (%p) for later use\n", pRequest));
1135 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
1136 }
1137 else
1138 {
1139 /* return the request to free pool */
1140 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
1141 }
1143
1144 return(ret);
1145}
1146
1147
1148/******************************************************************************/
1159/*******************************************************************************/
1161 agsaRoot_t *agRoot,
1163 )
1164{
1165 bit32 ret = AGSA_RC_SUCCESS;
1166 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
1167 agsaIORequestDesc_t *pRequest;
1168 agsaPortContext_t *agPortContext;
1169 agsaSASIdentify_t *IDframe;
1170 agsaFisRegDeviceToHost_t *sataFis;
1171 agsaContext_t *agContext;
1172 agsaPort_t *pPort = agNULL;
1173 bit32 phyId;
1174 bit32 portId;
1175 bit32 Event;
1176 bit32 tag, status;
1177 bit8 linkRate;
1178 bit32 LREventPhyIdPortId;
1179 bit32 npipps, eventParam,npip,port_state;
1180
1182
1183 SA_ASSERT((agNULL !=saRoot ), "");
1184 if(saRoot == agNULL)
1185 {
1186 SA_DBG1(("mpiHWevent: saRoot == agNULL\n"));
1187 return(AGSA_RC_FAILURE);
1188 }
1189 if(smIS_SPC(agRoot))
1190 {
1191 OSSA_READ_LE_32(AGROOT, &LREventPhyIdPortId, pIomb, OSSA_OFFSET_OF(agsaHWEvent_SPC_OUB_t, LRStatusEventPhyIdPortId));
1192 OSSA_READ_LE_32(AGROOT, &npipps, pIomb, OSSA_OFFSET_OF(agsaHWEvent_SPC_OUB_t, NpipPortState));
1193 OSSA_READ_LE_32(AGROOT, &eventParam, pIomb, OSSA_OFFSET_OF(agsaHWEvent_SPC_OUB_t, EVParam));
1194 SA_DBG2(("mpiHWEvent: S, LREventPhyIdPortId 0x%08x npipps 0x%08x eventParam 0x%08x\n", LREventPhyIdPortId ,npipps ,eventParam ));
1195
1196 /* get port context */
1197 portId = LREventPhyIdPortId & PORTID_MASK;
1198 smTrace(hpDBG_VERY_LOUD,"QK",portId);
1199 /* TP:QK portId */
1200
1201 /* get phyId */
1202 phyId = (LREventPhyIdPortId & PHY_ID_BITS) >> SHIFT4;
1203
1204 smTrace(hpDBG_VERY_LOUD,"QK",npipps);
1205 /* TP:QK npipps */
1206 smTrace(hpDBG_VERY_LOUD,"QL",portId);
1207 /* TP:QL portId */
1208 smTrace(hpDBG_VERY_LOUD,"QM",phyId);
1209 /* TP:QM phyId */
1210
1211 SA_DBG1(("mpiHWEvent:SPC, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1212 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, (npipps & PORT_STATE_MASK)));
1213 }
1214 else
1215 {
1216 OSSA_READ_LE_32(AGROOT, &LREventPhyIdPortId, pIomb, OSSA_OFFSET_OF(agsaHWEvent_V_OUB_t, LRStatEventPortId));
1217 OSSA_READ_LE_32(AGROOT, &npipps, pIomb, OSSA_OFFSET_OF(agsaHWEvent_V_OUB_t, RsvPhyIdNpipRsvPortState));
1218 OSSA_READ_LE_32(AGROOT, &eventParam, pIomb, OSSA_OFFSET_OF(agsaHWEvent_V_OUB_t, EVParam));
1219 SA_DBG2(("mpiHWEvent: V, LREventPhyIdPortId 0x%08x npipps 0x%08x eventParam 0x%08x\n", LREventPhyIdPortId ,npipps ,eventParam ));
1220
1221 smTrace(hpDBG_VERY_LOUD,"QN",npipps);
1222 /* TP:QN npipps */
1223
1224 /* get port context */
1225 portId = LREventPhyIdPortId & PORTID_MASK;
1226
1227 smTrace(hpDBG_VERY_LOUD,"QO",portId);
1228 /* TP:QO portId */
1229
1230 /* get phyId */
1231 phyId = (npipps & PHY_ID_V_BITS) >> SHIFT16;
1232 smTrace(hpDBG_VERY_LOUD,"QP",phyId);
1233 /* TP:QP phyId */
1234
1235 /* get npipps */
1236 npip =(npipps & 0xFF00 ) >> SHIFT4;
1237 port_state =(npipps & 0xF );
1238 npipps = npip | port_state; // Make it look like SPCs nipps
1239
1240
1241 SA_DBG1(("mpiHWEvent: V, PhyID 0x%x PortID 0x%x NPIP 0x%x PS 0x%x npipps 0x%x\n",
1242 phyId, portId,npip,port_state,npipps));
1243 }
1244
1245 Event = (LREventPhyIdPortId & HW_EVENT_BITS) >> SHIFT8;
1246
1247 /* get Link Rate */
1248 linkRate = (bit8)((LREventPhyIdPortId & LINK_RATE_MASK) >> SHIFT28);
1249 /* get status byte */
1250 status = (LREventPhyIdPortId & STATUS_BITS) >> SHIFT24;
1251
1252 smTrace(hpDBG_VERY_LOUD,"HA",portId);
1253 /* TP:HA portId */
1254 smTrace(hpDBG_VERY_LOUD,"HB",linkRate);
1255 /* TP:HB linkRate */
1256 smTrace(hpDBG_VERY_LOUD,"HC",phyId);
1257 /* TP:HC phyId */
1258 smTrace(hpDBG_VERY_LOUD,"HD",npipps);
1259 /* TP:HD npipps */
1261 /* TP:HE status */
1262
1263 if (portId > saRoot->phyCount)
1264 {
1266 {
1267 /* out of range checking for portId */
1268 SA_DBG1(("mpiHWEvent: PORT_ID is out of range, PhyID %d PortID %d\n",
1269 phyId, portId));
1270 /* port is not estiblished */
1271 agPortContext = agNULL;
1272 }
1273 else
1274 {
1275 /* portId is bad and state is correct - should not happen */
1276 SA_DBG1(("mpiHWEvent: PORT_ID is bad with correct Port State, PhyID %d PortID %d\n",
1277 phyId, portId));
1278 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2j");
1279 return AGSA_RC_FAILURE;
1280 }
1281 }
1282 else
1283 {
1284 SA_DBG2(("mpiHWEvent:PortID 0x%x PortStatus 0x%x PortContext %p\n",saRoot->PortMap[portId & PORTID_MASK].PortID,saRoot->PortMap[portId & PORTID_MASK].PortStatus,saRoot->PortMap[portId & PORTID_MASK].PortContext));
1285 agPortContext = (agsaPortContext_t *)saRoot->PortMap[portId].PortContext;
1286 }
1287
1288 if(agPortContext == agNULL)
1289 {
1290 SA_DBG1(("mpiHWEvent: agPortContext is NULL, PhyID %d PortID %d\n",
1291 phyId, portId));
1292 }
1293
1294 smTrace(hpDBG_VERY_LOUD,"HF",Event);
1295 /* TP:HF OSSA_HW_EVENT */
1296
1297 switch (Event)
1298 {
1300 {
1301 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_SAS_PHY_UP, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1302 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, (npipps & PORT_STATE_MASK)));
1303
1304 /* get SAS Identify info */
1305 IDframe = (agsaSASIdentify_t *)&pIomb->sasIdentify;
1306 /* Callback about SAS link up */
1307 saRoot->phys[phyId].linkstatus |= 2;
1308 saRoot->phys[phyId].sasIdentify.phyIdentifier = IDframe->phyIdentifier;
1310
1311 si_memcpy(&(saRoot->phys[phyId].sasIdentify.sasAddressHi),&(IDframe->sasAddressHi),4);
1312 si_memcpy(&(saRoot->phys[phyId].sasIdentify.sasAddressLo),&(IDframe->sasAddressLo),4);
1313 siEventPhyUpRcvd(agRoot, phyId, IDframe, portId, npipps, linkRate);
1314 break;
1315 }
1317 {
1318 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_SATA_PHY_UP, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1319 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, (npipps & PORT_STATE_MASK)));
1320
1321 /* get SATA FIS info */
1322 saRoot->phys[phyId].linkstatus |= 2;
1323 sataFis = (agsaFisRegDeviceToHost_t *)&pIomb->sataFis;
1324 /* Callback about SATA Link Up */
1325 siEventSATASignatureRcvd(agRoot, phyId, (void *)sataFis, portId, npipps, linkRate);
1326 break;
1327 }
1329 {
1330 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_SATA_SPINUP_HOLD, PhyID %d\n", phyId));
1332 break;
1333 }
1335 {
1336 agsaPhy_t *pPhy = &(saRoot->phys[phyId]);
1337
1338 if(pPhy) {
1339 osti_memset(&pPhy->sasIdentify,0,sizeof(agsaSASIdentify_t));
1340 }
1341 saRoot->phys[phyId].linkstatus &= 1;
1342 if (agNULL != agPortContext)
1343 {
1344 pPort = (agsaPort_t *) (agPortContext->sdkData);
1345 }
1346
1347 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1348 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1349
1350 /* callback */
1351 if ( agNULL != pPort )
1352 {
1353 if (OSSA_PORT_VALID == (npipps & PORT_STATE_MASK))
1354 {
1355 pPort->status &= ~PORT_INVALIDATING;
1356 saRoot->PortMap[portId].PortStatus &= ~PORT_INVALIDATING;
1357 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN, PhyID %d ~PORT_INVALIDATING \n", phyId));
1358 }
1359 else
1360 {
1361 if (OSSA_PORT_INVALID == (npipps & PORT_STATE_MASK))
1362 {
1363 /* set port invalid flag */
1364 pPort->status |= PORT_INVALIDATING;
1365 saRoot->PortMap[portId].PortStatus |= PORT_INVALIDATING;
1366 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN PortInvalid portID %d PortContext %p NPIP 0x%x\n", portId, agPortContext,npipps));
1367 }
1368 else
1369 {
1370 if (OSSA_PORT_IN_RESET == (npipps & PORT_STATE_MASK))
1371 {
1372 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN PortInReset portID %d PortContext %p\n", portId, agPortContext));
1373 }
1374 else
1375 {
1376 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN Not PortInReset portID %d PortContext %p\n", portId, agPortContext));
1377 }
1378 }
1379 }
1380
1381 /* report PhyId, NPIP, PortState */
1382 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1383 /* Callback with PHY_DOWN */
1384 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_DOWN, phyId, agNULL, agNULL);
1385 }
1386 else
1387 {
1388 /* no portcontext.- error */
1389 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_DOWN PhyDown pPort is NULL.\n"));
1390 }
1391
1392 /* set PHY_DOWN status */
1393 PHY_STATUS_SET(pPhy, PHY_DOWN);
1394 break;
1395 }
1397 {
1398 agsaPhyErrCountersPage_t errorParam;
1399 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1400 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1401 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1402 errorParam.inboundCRCError = eventParam;
1403 /* report PhyId, NPIP, PortState */
1404 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1405 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC, phyId, (void *)&errorParam, agNULL);
1406 break;
1407 }
1409 {
1410 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_HARD_RESET_RECEIVED, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1411 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1412 /* report PhyId, NPIP, PortState */
1413 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1414 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_HARD_RESET_RECEIVED, phyId, agNULL, agNULL);
1415 break;
1416 }
1418 {
1419 agsaPhyErrCountersPage_t errorParam;
1420 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_LINK_ERR_INVALID_DWORD, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1421 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1422 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1423 errorParam.invalidDword = eventParam;
1424 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1425 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD, phyId, (void *)&errorParam, agNULL);
1426 break;
1427 }
1429 {
1430 agsaPhyErrCountersPage_t errorParam;
1431 SA_DBG3(("mpiHWEvent: OSSA_HW_EVENT_LINK_ERR_DISPARITY_ERROR, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1432 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1433 /* report PhyId, NPIP, PortState */
1434 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1435 errorParam.runningDisparityError = eventParam;
1436 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1437 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR, phyId, (void *)&errorParam, agNULL);
1438 break;
1439 }
1441 {
1442 agsaPhyErrCountersPage_t errorParam;
1443 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_LINK_ERR_CODE_VIOLATION, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1444 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1445 /* report PhyId, NPIP, PortState */
1446 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1447 errorParam.codeViolation = eventParam;
1448 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1449 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION, phyId, (void *)&errorParam, agNULL);
1450 break;
1451 }
1453 {
1454 agsaPhyErrCountersPage_t errorParam;
1455 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_LINK_ERR_LOSS_OF_DWORD_SYNCH, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1456 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1457 /* report PhyId, NPIP, PortState */
1458 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1459 errorParam.lossOfDwordSynch = eventParam;
1460 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1461 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH, phyId, (void *)&errorParam, agNULL);
1462 break;
1463 }
1465 {
1466 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1467 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1468
1469 if (agNULL != agPortContext)
1470 {
1471 pPort = (agsaPort_t *) (agPortContext->sdkData);
1472 }
1473 else
1474 {
1475 SA_ASSERT((agPortContext), "agPortContext agNULL was there a PHY UP?");
1476 return(AGSA_RC_FAILURE);
1477 }
1478
1479 /* report PhyId, NPIP, PortState */
1480 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1481 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO, phyId, agNULL, agNULL);
1482
1483 if (OSSA_PORT_VALID == (npipps & PORT_STATE_MASK))
1484 {
1485 pPort->status &= ~PORT_INVALIDATING;
1486 saRoot->PortMap[portId].PortStatus &= ~PORT_INVALIDATING;
1487 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO NOT PORT_INVALIDATING portID %d PortContext %p\n", portId, agPortContext));
1488 }
1489 else
1490 {
1491 if (OSSA_PORT_INVALID == (npipps & PORT_STATE_MASK))
1492 {
1493 /* set port invalid flag */
1494 pPort->status |= PORT_INVALIDATING;
1495 saRoot->PortMap[portId].PortStatus |= PORT_INVALIDATING;
1496 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO PORT_INVALIDATING portID %d PortContext %p\n", portId, agPortContext));
1497 }
1498 else
1499 {
1500 if (OSSA_PORT_IN_RESET == (npipps & PORT_STATE_MASK))
1501 {
1502 SA_DBG1(("mpiHWEvent: PortInReset portID %d PortContext %p\n", portId, agPortContext));
1503 }
1504 }
1505 }
1506 break;
1507 }
1509 {
1510 if (agNULL != agPortContext)
1511 {
1512 pPort = (agsaPort_t *) (agPortContext->sdkData);
1513 }
1514
1515 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RECOVER, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1516 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1517
1518 if (OSSA_PORT_VALID == (npipps & PORT_STATE_MASK))
1519 {
1520 if (agNULL != pPort)
1521 {
1522 /* reset port invalid flag */
1523 pPort->status &= ~PORT_INVALIDATING;
1524 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RECOVER NOT PORT_INVALIDATING portID %d PortContext %p\n", portId, agPortContext));
1525 }
1526 saRoot->PortMap[portId].PortStatus &= ~PORT_INVALIDATING;
1527 }
1528 /* get SAS Identify info */
1529 IDframe = (agsaSASIdentify_t *)&pIomb->sasIdentify;
1530 /* report PhyId, NPIP, PortState and LinkRate */
1531 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16) | (linkRate << SHIFT8);
1532 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PORT_RECOVER, phyId, agNULL, (void *)IDframe);
1533 break;
1534 }
1536 {
1537 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS PhyId=0x%x, status=0x%x eventParam=0x%x\n", phyId, status,eventParam));
1538 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaHWEvent_SPC_OUB_t, EVParam));
1539
1540 switch(eventParam)
1541 {
1542 case 0:
1543 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS Stopped 0\n" ));
1544 break;
1545 case 1:
1546 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS INVALID_PHY 1\n" ));
1547 break;
1548 case 2:
1549 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS DEVICES_ATTACHED 2\n" ));
1550 break;
1551 case 3:
1552 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS OTHER_FAILURE 3\n" ));
1553 break;
1554 case 4:
1555 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS PHY_NOT_ENABLED 4\n" ));
1556 break;
1557 default:
1558 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS Unknown code 0x%x\n", eventParam));
1559 break;
1560 }
1561
1562 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_STOP_STATUS phyId 0x%x status 0x%x eventParam 0x%x\n", phyId, status,eventParam));
1563 /* get request from IOMap */
1564 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
1565 SA_ASSERT((pRequest), "pRequest NULL");
1566 SA_ASSERT((pRequest->valid), "pRequest->valid");
1567
1568 agContext = saRoot->IOMap[tag].agContext;
1569
1570 siPhyStopCB(agRoot, phyId, status, agContext, portId, npipps);
1571
1572 /* remove the request from IOMap */
1573 saRoot->IOMap[tag].Tag = MARK_OFF;
1574 saRoot->IOMap[tag].IORequest = agNULL;
1575 saRoot->IOMap[tag].agContext = agNULL;
1576
1578 pRequest->valid = agFALSE;
1579 /* return the request to free pool */
1581 {
1582 SA_DBG1(("mpiHWevent: saving pRequest (%p) for later use\n", pRequest));
1583 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
1584 }
1585 else
1586 {
1587 /* return the request to free pool */
1588 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
1589 }
1591 break;
1592 }
1594 {
1595 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_BROADCAST_CHANGE, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1596 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1597 /* report PhyId, NPIP, PortState */
1598 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1599 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE, phyId, agNULL, agNULL);
1600 break;
1601 }
1603 {
1604 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_BROADCAST_CHANGE_SES, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1605 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1606 /* report PhyId, NPIP, PortState */
1607 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1608 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_BROADCAST_SES, phyId, agNULL, agNULL);
1609 break;
1610 }
1612 {
1613 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_BROADCAST_EXP, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1614 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1615 /* report PhyId, NPIP, PortState */
1616 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1617 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_BROADCAST_EXP, phyId, agNULL, agNULL);
1618 break;
1619 }
1621 {
1622 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_ID_FRAME_TIMEOUT, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1623 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1624 /* report PhyId, NPIP, PortState */
1625 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1626 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_ID_FRAME_TIMEOUT, phyId, agNULL, agNULL);
1627 break;
1628 }
1630 {
1631 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaHWEvent_SPC_OUB_t, EVParam)) ;
1632 /* get request from IOMap */
1633 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
1634
1635 SA_ASSERT((pRequest), "pRequest");
1636 if( pRequest == agNULL)
1637 {
1638 SA_DBG1(("mpiHWevent: pRequest (%p) NULL\n", pRequest));
1639 ret = AGSA_RC_FAILURE;
1640 break;
1641 }
1642
1643 agContext = saRoot->IOMap[tag].agContext;
1644
1645 /* makeup for CB */
1646 status = (status << 8) | phyId;
1648
1649 /* remove the request from IOMap */
1650 saRoot->IOMap[tag].Tag = MARK_OFF;
1651 saRoot->IOMap[tag].IORequest = agNULL;
1652 saRoot->IOMap[tag].agContext = agNULL;
1653
1655 SA_ASSERT((pRequest->valid), "pRequest->valid");
1656 pRequest->valid = agFALSE;
1657 /* return the request to free pool */
1659 {
1660 SA_DBG1(("mpiHWevent: saving pRequest (%p) for later use\n", pRequest));
1661 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
1662 }
1663 else
1664 {
1665 /* return the request to free pool */
1666 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
1667 }
1669
1670 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_START_STATUS, PhyID %d\n", phyId));
1671
1672 break;
1673 }
1675 {
1676 agsaPhyErrCountersPage_t errorParam;
1677 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED, PhyID %d PortID %d NPIP 0x%x PS 0x%x\n",
1678 phyId, portId, (npipps & PHY_IN_PORT_MASK) >> SHIFT4, npipps & PORT_STATE_MASK));
1679 /* report PhyId, NPIP, PortState */
1680 si_memset(&errorParam, 0, sizeof(agsaPhyErrCountersPage_t));
1681 errorParam.phyResetProblem = eventParam;
1682 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1683 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED, phyId, (void *)&errorParam, agNULL);
1684 break;
1685 }
1687 {
1688 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RESET_TIMER_TMO, PhyID %d PortID %d\n", phyId, portId));
1689 /* report PhyId, NPIP, PortState */
1690 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1691 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PORT_RESET_TIMER_TMO, phyId, agNULL, agNULL);
1692 break;
1693 }
1695 {
1696 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_PORT_RESET_COMPLETE, PhyID %d PortID %d\n", phyId, portId));
1697 /* get SAS Identify info */
1698 IDframe = (agsaSASIdentify_t *)&pIomb->sasIdentify;
1699 /* report PhyId, NPIP, PortState and LinkRate */
1700 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16) | (linkRate << SHIFT8);
1701 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_PORT_RESET_COMPLETE, phyId, agNULL, (void *)IDframe);
1702 break;
1703 }
1705 {
1706 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT, PhyID %d PortID %d\n", phyId, portId));
1707 /* report PhyId, NPIP, PortState */
1708 phyId |= (npipps & PHY_IN_PORT_MASK) | ((npipps & PORT_STATE_MASK) << SHIFT16);
1709 ossaHwCB(agRoot, agPortContext, OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT, phyId, agNULL, agNULL);
1710 break;
1711 }
1713 {
1714 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_IT_NEXUS_LOSS, PhyID %d PortID %d status 0x%X\n", phyId, portId,status));
1715 break;
1716 }
1718 {
1719 SA_DBG1(("mpiHWEvent: OSSA_HW_EVENT_OPEN_RETRY_BACKOFF_THR_ADJUSTED, PhyID %d PortID %d status 0x%X\n", phyId, portId,status));
1721 break;
1722 }
1723
1724 default:
1725 {
1726 SA_DBG1(("mpiHWEvent: Unknown HW Event 0x%x status 0x%X\n", Event ,status));
1727 break;
1728 }
1729 }
1730
1731 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2j");
1732 return ret;
1733}
1734
1735/******************************************************************************/
1747/*******************************************************************************/
1749 agsaRoot_t *agRoot,
1751 )
1752{
1753 bit32 ret = AGSA_RC_SUCCESS;
1754 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
1755 bit32 status;
1756 bit32 tag;
1757 bit32 param;
1758 agsaIORequestDesc_t *pRequest;
1759
1760 SA_DBG3(("mpiSMPCompletion: start, HTAG=0x%x\n", pIomb->tag));
1761
1763
1764 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSMPCompletionRsp_t, tag)) ;
1765 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSMPCompletionRsp_t, status)) ;
1766 OSSA_READ_LE_32(AGROOT, &param, pIomb, OSSA_OFFSET_OF(agsaSMPCompletionRsp_t, param)) ;
1767 /* get SMP request from IOMap */
1768 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
1769 if (agNULL == pRequest)
1770 {
1771 SA_DBG1(("mpiSMPCompletion: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x PARAM=0x%x\n", tag, status, param));
1772 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2k");
1773 return AGSA_RC_FAILURE;
1774 }
1775
1776 switch (status)
1777 {
1778 case OSSA_IO_SUCCESS:
1779 SA_DBG3(("mpiSMPCompletion: OSSA_IO_SUCCESS HTAG = 0x%x\n", tag));
1780 /* process message */
1781 siSMPRespRcvd(agRoot, pIomb, param, tag);
1782 break;
1783
1784 case OSSA_IO_OVERFLOW:
1785 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OVERFLOW HTAG = 0x%x\n", tag));
1787 /* SMP failed */
1788 siAbnormal(agRoot, pRequest, status, 0, 0);
1789 break;
1790
1791 case OSSA_IO_ABORTED:
1792 SA_DBG1(("mpiSMPCompletion: OSSA_IO_ABORTED HTAG = 0x%x\n", tag));
1793
1795#ifdef SA_PRINTOUT_IN_WINDBG
1796#ifndef DBG
1797 DbgPrint("agOSSA_IO_ABORTED %d\n", saRoot->IoErrorCount.agOSSA_IO_ABORTED);
1798#endif /* DBG */
1799#endif /* SA_PRINTOUT_IN_WINDBG */
1800 /* SMP failed */
1801 siAbnormal(agRoot, pRequest, status, 0, 0);
1802 break;
1803
1804 case OSSA_IO_NO_DEVICE:
1805 SA_DBG1(("mpiSMPCompletion: OSSA_IO_NO_DEVICE HTAG = 0x%x\n", tag));
1807 siAbnormal(agRoot, pRequest, status, 0, 0);
1808 break;
1809
1811 SA_DBG1(("mpiSMPCompletion: OSSA_IO_ERROR_HW_TIMEOUT HTAG = 0x%x\n", tag));
1813 siAbnormal(agRoot, pRequest, status, 0, 0);
1814 break;
1815
1817 SA_DBG1(("mpiSMPCompletion: OSSA_IO_XFER_ERROR_BREAK HTAG = 0x%x\n", tag));
1819 siAbnormal(agRoot, pRequest, status, 0, 0);
1820 break;
1821
1823 SA_DBG1(("mpiSMPCompletion: OSSA_IO_XFER_ERROR_PHY_NOT_READY HTAG = 0x%x\n", tag));
1825 siAbnormal(agRoot, pRequest, status, 0, 0);
1826 break;
1827
1829 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED HTAG = 0x%x\n", tag));
1831 siAbnormal(agRoot, pRequest, status, 0, 0);
1832 break;
1833
1835 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION HTAG = 0x%x\n", tag));
1837 siAbnormal(agRoot, pRequest, status, 0, 0);
1838 break;
1839
1841 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_BREAK HTAG = 0x%x\n", tag));
1843 siAbnormal(agRoot, pRequest, status, 0, 0);
1844 break;
1845
1847 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS HTAG = 0x%x\n", tag));
1849 siAbnormal(agRoot, pRequest, status, 0, 0);
1850 break;
1851
1853 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION HTAG = 0x%x\n", tag));
1855 siAbnormal(agRoot, pRequest, status, 0, 0);
1856 break;
1857
1859 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED HTAG = 0x%x\n", tag));
1861 siAbnormal(agRoot, pRequest, status, 0, 0);
1862 break;
1863
1865 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION HTAG = 0x%x\n", tag));
1867 siAbnormal(agRoot, pRequest, status, 0, 0);
1868 break;
1869
1871 SA_DBG1(("mpiSMPCompletion: OSSA_IO_XFER_ERROR_RX_FRAME HTAG = 0x%x\n", tag));
1873 siAbnormal(agRoot, pRequest, status, 0, 0);
1874 break;
1875
1877 SA_DBG1(("mpiSMPCompletion: OSSA_IO_XFER_OPEN_RETRY_TIMEOUT HTAG = 0x%x\n", tag));
1879 siAbnormal(agRoot, pRequest, status, 0, 0);
1880 break;
1881
1883 SA_DBG1(("mpiSMPCompletion: OSSA_IO_ERROR_INTERNAL_SMP_RESOURCE HTAG = 0x%x\n", tag));
1885 siAbnormal(agRoot, pRequest, status, 0, 0);
1886 break;
1887
1889 SA_DBG1(("mpiSMPCompletion: OSSA_IO_PORT_IN_RESET HTAG = 0x%x\n", tag));
1891 siAbnormal(agRoot, pRequest, status, 0, 0);
1892 break;
1893
1895 SA_DBG1(("mpiSMPCompletion: OSSA_IO_DS_NON_OPERATIONAL HTAG = 0x%x\n", tag));
1897 siAbnormal(agRoot, pRequest, status, 0, 0);
1898 break;
1899
1901 SA_DBG1(("mpiSMPCompletion: OSSA_IO_DS_IN_RECOVERY HTAG = 0x%x\n", tag));
1903 siAbnormal(agRoot, pRequest, status, 0, 0);
1904 break;
1905
1907 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY HTAG = 0x%x\n", tag));
1909 siAbnormal(agRoot, pRequest, status, 0, 0);
1910 break;
1911
1913 SA_DBG1(("mpiSMPCompletion: OSSA_IO_ABORT_IN_PROGRESS HTAG = 0x%x\n", tag));
1915 siAbnormal(agRoot, pRequest, status, 0, 0);
1916 break;
1917
1919 SA_DBG1(("mpiSMPCompletion:OSSA_IO_ABORT_DELAYED HTAG = 0x%x\n", tag));
1921 siAbnormal(agRoot, pRequest, status, 0, 0);
1922 break;
1923
1925 SA_DBG1(("mpiSMPCompletion: OSSA_IO_INVALID_LENGTH HTAG = 0x%x\n", tag));
1927 siAbnormal(agRoot, pRequest, status, 0, 0);
1928 break;
1929
1931 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED HTAG = 0x%x\n", tag));
1933 siAbnormal(agRoot, pRequest, status, 0, 0);
1934 break;
1935
1937 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO HTAG = 0x%x\n", tag));
1939 siAbnormal(agRoot, pRequest, status, 0, 0);
1940 break;
1941
1943 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST HTAG = 0x%x\n", tag));
1945 siAbnormal(agRoot, pRequest, status, 0, 0);
1946 break;
1947
1949 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE HTAG = 0x%x\n", tag));
1951 siAbnormal(agRoot, pRequest, status, 0, 0);
1952 break;
1953
1955 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED HTAG = 0x%x\n", tag));
1957 siAbnormal(agRoot, pRequest, status, 0, 0);
1958 break;
1959
1960 case OSSA_IO_DS_INVALID:
1961 SA_DBG1(("mpiSMPCompletion: OSSA_IO_DS_INVALID HTAG = 0x%x\n", tag));
1963 siAbnormal(agRoot, pRequest, status, 0, 0);
1964 break;
1965
1967 SA_DBG1(("mpiSMPCompletion: OSSA_IO_XFER_READ_COMPL_ERR HTAG = 0x%x\n", tag));
1969 siAbnormal(agRoot, pRequest, status, 0, 0);
1970 break;
1971
1973 SA_DBG1(("mpiSMPCompletion: OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE HTAG = 0x%x\n", tag));
1975 siAbnormal(agRoot, pRequest, status, 0, 0);
1976 break;
1977
1979 SA_DBG1(("mpiSMPCompletion: OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE HTAG = 0x%x\n", tag));
1981 siAbnormal(agRoot, pRequest, status, 0, 0);
1982 break;
1983
1985 SA_DBG1(("mpiSMPCompletion: OSSA_IO_OPEN_CNX_ERROR_OPEN_PREEMPTED HTAG = 0x%x\n", tag));
1987 siAbnormal(agRoot, pRequest, status, 0, 0);
1988 break;
1989
1990 default:
1991 SA_DBG1(("mpiSMPCompletion: Unknown Status = 0x%x Tag 0x%x\n", status, tag));
1993 /* not allowed case. Therefore, assert */
1994 SA_ASSERT((agFALSE), "mpiSMPCompletion: Unknown Status");
1995 break;
1996 }
1997
1998 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2k");
1999 return ret;
2000}
2001
2002/******************************************************************************/
2014/*******************************************************************************/
2016 agsaRoot_t *agRoot,
2018 )
2019{
2020 bit32 ret = AGSA_RC_SUCCESS;
2021 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
2022 agsaIORequestDesc_t *pRequest;
2023 agsaPortContext_t *agPortContext;
2024 agsaContext_t *agContext;
2025 agsaDeviceDesc_t *pDevice;
2026 bit8 portId;
2027 bit32 deviceid=0, deviceIdc, i;
2028 bit32 DeviceIdcPortId, tag;
2029
2030 SA_DBG3(("mpiGetDevHandleRsp: start, HTAG=0x%x\n", pIomb->tag));
2031
2033
2034 OSSA_READ_LE_32(AGROOT, &DeviceIdcPortId, pIomb, OSSA_OFFSET_OF(agsaGetDevHandleRsp_t, DeviceIdcPortId)) ;
2035 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetDevHandleRsp_t, tag)) ;
2036 /* get request from IOMap */
2037 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2038 agContext = saRoot->IOMap[tag].agContext;
2039 /* remove the request from IOMap */
2040 saRoot->IOMap[tag].Tag = MARK_OFF;
2041 saRoot->IOMap[tag].IORequest = agNULL;
2042 saRoot->IOMap[tag].agContext = agNULL;
2043 if (agNULL == pRequest)
2044 {
2045 SA_DBG1(("mpiGetDevHandleRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x DeviceIdcPortId=0x%x\n", tag, DeviceIdcPortId));
2046 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2m");
2047 return AGSA_RC_FAILURE;
2048 }
2049
2050 /* get port context */
2051 portId = (bit8)(DeviceIdcPortId & PORTID_MASK);
2052 SA_DBG2(("mpiGetDevHandleRsp:PortID 0x%x PortStatus 0x%x PortContext %p\n",saRoot->PortMap[portId & PORTID_MASK].PortID,saRoot->PortMap[portId & PORTID_MASK].PortStatus,saRoot->PortMap[portId & PORTID_MASK].PortContext));
2053 agPortContext = (agsaPortContext_t *)saRoot->PortMap[portId].PortContext;
2054
2055 /* get Device ID count */
2056 deviceIdc = (bit8)((DeviceIdcPortId & DEVICE_IDC_BITS) >> SHIFT8);
2057
2058 /* based on the deviceIDC to get all device handles */
2059 for (i = 0; i < deviceIdc; i++)
2060 {
2061 OSSA_READ_LE_32(AGROOT, &deviceid, pIomb, OSSA_OFFSET_OF(agsaGetDevHandleRsp_t, deviceId[i])) ;
2062 /* find device handle from device index */
2063 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
2064 if (pDevice->targetDevHandle.sdkData)
2065 saRoot->DeviceHandle[i] = &(pDevice->targetDevHandle);
2066 else
2067 saRoot->DeviceHandle[i] = &(pDevice->initiatorDevHandle);
2068 }
2069
2070 SA_DBG1(("mpiGetDevHandleRsp:deviceid 0x%x 0x%x\n",deviceid, (deviceid & DEVICE_ID_BITS)));
2071 /* call back oslayer */
2072 ossaGetDeviceHandlesCB(agRoot, agContext, agPortContext, saRoot->DeviceHandle, deviceIdc);
2073
2074 /* return the request to free pool */
2076 SA_ASSERT((pRequest->valid), "pRequest->valid");
2077 pRequest->valid = agFALSE;
2079 {
2080 SA_DBG1(("mpiGetDevHandleRsp: saving pRequest (%p) for later use\n", pRequest));
2081 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2082 }
2083 else
2084 {
2085 /* return the request to free pool */
2086 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2087 }
2089
2090 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2m");
2091
2092 return ret;
2093}
2094
2095/******************************************************************************/
2106/*******************************************************************************/
2108 agsaRoot_t *agRoot,
2110 )
2111{
2112 bit32 ret = AGSA_RC_SUCCESS;
2113 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
2114 agsaIORequestDesc_t *pRequest;
2115 agsaContext_t *agContext = agNULL;
2116 bit32 phyId, operation, status, tag, phyOpId;
2117
2119
2120 SA_DBG3(("mpiPhyCntrlRsp: start, HTAG=0x%x,\n", pIomb->tag));
2121
2122 /* get tag */
2123 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaLocalPhyCntrlRsp_t, tag)) ;
2124 OSSA_READ_LE_32(AGROOT, &phyOpId, pIomb, OSSA_OFFSET_OF(agsaLocalPhyCntrlRsp_t, phyOpId)) ;
2125 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaLocalPhyCntrlRsp_t, status)) ;
2126 /* get request from IOMap */
2127 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2128 if (agNULL == pRequest)
2129 {
2130 SA_DBG1(("mpiPhyCntrlRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x PhyOpId=0x%x\n", tag, status, phyOpId));
2131 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2n");
2132 return AGSA_RC_FAILURE;
2133 }
2134 agContext = saRoot->IOMap[tag].agContext;
2135 /* remove the request from IOMap */
2136 saRoot->IOMap[tag].Tag = MARK_OFF;
2137 saRoot->IOMap[tag].IORequest = agNULL;
2138 saRoot->IOMap[tag].agContext = agNULL;
2139
2140 phyId = phyOpId & LOCAL_PHY_PHYID;
2141 operation = (phyOpId & LOCAL_PHY_OP_BITS) >> SHIFT8;
2142
2143
2144 SA_DBG3(("mpiPhyCntrlRsp: phyId=0x%x Operation=0x%x Status=0x%x\n", phyId, operation, status));
2145
2146 if( pRequest->completionCB == agNULL )
2147 {
2148 /* call back with the status */
2149 ossaLocalPhyControlCB(agRoot, agContext, phyId, operation, status, agNULL);
2150 }
2151 else
2152 {
2153 (*(ossaLocalPhyControlCB_t)(pRequest->completionCB))(agRoot, agContext, phyId, operation, status, agNULL );
2154 }
2155
2157 SA_ASSERT((pRequest->valid), "pRequest->valid");
2158 pRequest->valid = agFALSE;
2159 /* return the request to free pool */
2161 {
2162 SA_DBG1(("mpiPhyCntrlRsp: saving pRequest (%p) for later use\n", pRequest));
2163 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2164 }
2165 else
2166 {
2167 /* return the request to free pool */
2168 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2169 }
2171
2172 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2n");
2173 return ret;
2174}
2175
2176/******************************************************************************/
2187/*******************************************************************************/
2189 agsaRoot_t *agRoot,
2191 )
2192{
2193 bit32 ret = AGSA_RC_SUCCESS;
2194 agsaLLRoot_t *saRoot = agNULL;
2195 agsaIORequestDesc_t *pRequest;
2196 agsaContext_t *agContext;
2197 bit32 deviceId;
2198 agsaDeviceDesc_t *pDevice = agNULL;
2199 agsaDeviceDesc_t *pDeviceRemove = agNULL;
2200 bit32 deviceIdx,status, tag;
2201
2203
2204 /* sanity check */
2205 SA_ASSERT((agNULL != agRoot), "");
2206 saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
2207 SA_ASSERT((agNULL != saRoot), "");
2208
2209 SA_DBG3(("mpiDeviceRegRsp: start, HTAG=0x%x\n", pIomb->tag));
2210
2211 SA_ASSERT((NULL != saRoot->DeviceRegistrationCB), "DeviceRegistrationCB can not be NULL");
2212 OSSA_READ_LE_32(AGROOT, &deviceId, pIomb, OSSA_OFFSET_OF(agsaDeviceRegistrationRsp_t, deviceId)) ;
2213 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaDeviceRegistrationRsp_t, tag)) ;
2214 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaDeviceRegistrationRsp_t, status)) ;
2215
2216 SA_DBG1(("mpiDeviceRegRsp: deviceID 0x%x \n", deviceId));
2217
2218 /* get request from IOMap */
2219 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2220 if (agNULL == pRequest)
2221 {
2222 SA_DBG1(("mpiDeviceRegRsp: Bad IOMB!!! pRequest is NULL. TAG=0x%x, STATUS=0x%x DEVICEID=0x%x\n", tag, status, deviceId));
2223 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2p");
2224 return AGSA_RC_FAILURE;
2225 }
2226
2227 pDevice = pRequest->pDevice;
2228
2229 agContext = saRoot->IOMap[tag].agContext;
2230 SA_ASSERT((pRequest->valid), "pRequest->valid");
2231 /* remove the request from IOMap */
2232 saRoot->IOMap[tag].Tag = MARK_OFF;
2233 saRoot->IOMap[tag].IORequest = agNULL;
2234 saRoot->IOMap[tag].agContext = agNULL;
2235
2236 /* get Device Id or status */
2237 SA_DBG3(("mpiDeviceRegRsp: hosttag 0x%x\n", tag));
2238 SA_DBG3(("mpiDeviceRegRsp: deviceID 0x%x Device Context %p\n", deviceId, pDevice));
2239
2240 if (agNULL == pDevice)
2241 {
2243 pRequest->valid = agFALSE;
2244 /* return the request to free pool */
2246 {
2247 SA_DBG1(("mpiDeviceRegRsp: saving pRequest (%p) for later use\n", pRequest));
2248 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2249 }
2250 else
2251 {
2252 /* return the request to free pool */
2253 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2254 }
2256
2257 SA_DBG1(("mpiDeviceRegRsp: warning!!! no device is found\n"));
2258 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2p");
2259 return AGSA_RC_FAILURE;
2260 }
2261
2262 if (agNULL == saRoot->DeviceRegistrationCB)
2263 {
2265 pRequest->valid = agFALSE;
2266 /* return the request to free pool */
2268 {
2269 SA_DBG1(("mpiDeviceRegRsp: saving pRequest (%p) for later use\n", pRequest));
2270 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2271 }
2272 else
2273 {
2274 /* return the request to free pool */
2275 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2276 }
2278
2279 SA_DBG1(("mpiDeviceRegRsp: warning!!! no DeviceRegistrationCB is found\n"));
2280 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2p");
2281 return AGSA_RC_FAILURE;
2282 }
2283
2284
2285 if(smIS_SPCV(agRoot))
2286 {
2287 switch( status)
2288 {
2289 case 0:
2291 break;
2294 break;
2297 break;
2300 break;
2303 break;
2306 break;
2309 break;
2312 break;
2313 default:
2314 SA_ASSERT((0), "DeviceRegistration Unknown status");
2316 pRequest->valid = agFALSE;
2317 /* return the request to free pool */
2319 {
2320 SA_DBG1(("mpiDeviceRegRsp: saving pRequest (%p) for later use\n", pRequest));
2321 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2322 }
2323 else
2324 {
2325 /* return the request to free pool */
2326 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2327 }
2329
2330 return AGSA_RC_FAILURE;
2331 }
2332 }
2333
2334 switch (status)
2335 {
2336 case OSSA_SUCCESS:
2337 /* mapping the device handle and device id */
2338 deviceIdx = deviceId & DEVICE_ID_BITS;
2339 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
2340 saRoot->DeviceMap[deviceIdx].DeviceIdFromFW = deviceId;
2341 saRoot->DeviceMap[deviceIdx].DeviceHandle = (void *)pDevice;
2342 pDevice->DeviceMapIndex = deviceId;
2343
2345 agContext,
2347 &pDevice->targetDevHandle,
2348 deviceId
2349 );
2350
2351 break;
2353 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_OUT_OF_RESOURCE\n"));
2354 /* remove device from LL device list */
2355 siPortDeviceRemove(agRoot, pDevice->pPort, pDevice, agFALSE);
2356
2357 /* call ossaDeviceRegistrationCB_t */
2359 agContext,
2361 &pDevice->targetDevHandle,
2362 deviceId
2363 );
2364
2365
2366 break;
2368 /* get original device handle and device id */
2369 pDeviceRemove = pDevice;
2370 deviceIdx = deviceId & DEVICE_ID_BITS;
2371 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
2372 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceIdx].DeviceHandle;
2373 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_DEVICE_ALREADY_REGISTERED, existing deviceContext %p\n", pDevice));
2374 /* no auto registration */
2375 if (pDevice != agNULL)
2376 {
2377 /* remove device from LL device list */
2378 siPortDeviceListRemove(agRoot, pDevice->pPort, pDeviceRemove);
2379
2380 /* call ossaDeviceRegistrationCB_t */
2382 agContext,
2384 &pDevice->targetDevHandle,
2385 deviceId
2386 );
2387 }
2388 else
2389 {
2390 SA_DBG1(("mpiDeviceRegRsp: pDevice is NULL. TAG=0x%x, STATUS=0x%x DEVICEID=0x%x\n", tag, status, deviceId));
2391 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2p");
2392 return AGSA_RC_FAILURE;
2393 }
2394
2395 break;
2397 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_INVALID_PHY_ID\n"));
2398 /* remove device from LL device list */
2399 siPortDeviceRemove(agRoot, pDevice->pPort, pDevice, agFALSE);
2400
2401 /* call ossaDeviceRegistrationCB_t */
2403 agContext,
2405 &pDevice->targetDevHandle,
2406 deviceId
2407 );
2408 break;
2410 /* get original device handle and device id */
2411 pDeviceRemove = pDevice;
2412 deviceIdx = deviceId & DEVICE_ID_BITS;
2413 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
2414 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceIdx].DeviceHandle;
2415 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED, existing deviceContext %p\n", pDevice));
2416 /* no auto registration */
2417 if (pDevice != agNULL)
2418 {
2419 /* remove device from LL device list */
2420 siPortDeviceListRemove(agRoot, pDevice->pPort, pDeviceRemove);
2421
2422 /* call ossaDeviceRegistrationCB_t */
2424 agContext,
2426 &pDevice->targetDevHandle,
2427 deviceId
2428 );
2429 }
2430 else
2431 {
2432 SA_DBG1(("mpiDeviceRegRsp: pDevice is NULL. TAG=0x%x, STATUS=0x%x DEVICEID=0x%x\n", tag, status, deviceId));
2433 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "2p");
2434 return AGSA_RC_FAILURE;
2435 }
2436
2437 break;
2439 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_OUT_OF_RESOURCE\n"));
2440 /* remove device from LL device list */
2441 siPortDeviceRemove(agRoot, pDevice->pPort, pDevice, agFALSE);
2442
2443 /* call ossaDeviceRegistrationCB_t */
2445 agContext,
2447 &pDevice->targetDevHandle,
2448 deviceId
2449 );
2450 break;
2452 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_PORT_NOT_VALID_STATE\n"));
2453 /* remove device from LL device list */
2454 siPortDeviceRemove(agRoot, pDevice->pPort, pDevice, agFALSE);
2455
2456 /* call ossaDeviceRegistrationCB_t */
2458 agContext,
2460 &pDevice->targetDevHandle,
2461 deviceId
2462 );
2463 break;
2465 SA_DBG1(("mpiDeviceRegRsp: OSSA_FAILURE_DEVICE_TYPE_NOT_VALID\n"));
2466 /* remove device from LL device list */
2467 siPortDeviceRemove(agRoot, pDevice->pPort, pDevice, agFALSE);
2468 /* call ossaDeviceRegistrationCB_t */
2470 agContext,
2472 &pDevice->targetDevHandle,
2473 deviceId
2474 );
2475 break;
2476 default:
2477 SA_DBG3(("mpiDeviceRegRsp, unknown status in response %d\n", status));
2478 break;
2479 }
2480
2482 pRequest->valid = agFALSE;
2483 /* return the request to free pool */
2485 {
2486 SA_DBG1(("mpiDeviceRegRsp: saving pRequest (%p) for later use\n", pRequest));
2487 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2488 }
2489 else
2490 {
2491 /* return the request to free pool */
2492 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2493 }
2495
2496 smTraceFuncExit(hpDBG_VERY_LOUD, 'f', "2p");
2497 return ret;
2498}
2499
2500/******************************************************************************/
2511/*******************************************************************************/
2513 agsaRoot_t *agRoot,
2515 )
2516{
2517 bit32 ret = AGSA_RC_SUCCESS;
2518 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
2519 agsaIORequestDesc_t *pRequest;
2520 agsaDevHandle_t *agDevHandle;
2521 agsaContext_t *agContext;
2522 agsaDeviceDesc_t *pDevice;
2523 bit32 deviceIdx, status, tag;
2524
2526 SA_ASSERT((NULL != saRoot->DeviceDeregistrationCB), "DeviceDeregistrationCB can not be NULL");
2527
2528 SA_DBG3(("mpiDeregDevHandleRsp: start, HTAG=0x%x\n", pIomb->tag));
2529
2530 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaDeregDevHandleRsp_t, tag)) ;
2531 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaDeregDevHandleRsp_t, status)) ;
2532 OSSA_READ_LE_32(AGROOT, &deviceIdx, pIomb, OSSA_OFFSET_OF(agsaDeregDevHandleRsp_t, deviceId)) ;
2533 /* get request from IOMap */
2534
2535 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2536 if (agNULL == pRequest)
2537 {
2538 SA_DBG1(("mpiDeregDevHandleRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x deviceIdx 0x%x\n", tag, status,deviceIdx));
2539 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2r");
2540 return AGSA_RC_FAILURE;
2541 }
2542
2543 agContext = saRoot->IOMap[tag].agContext;
2544 /* remove the request from IOMap */
2545 saRoot->IOMap[tag].Tag = MARK_OFF;
2546 saRoot->IOMap[tag].IORequest = agNULL;
2547 saRoot->IOMap[tag].agContext = agNULL;
2548
2549 SA_ASSERT((pRequest->valid), "pRequest->valid");
2550
2551 pDevice = pRequest->pDevice;
2552 if (pDevice != agNULL)
2553 {
2554 if (pDevice->targetDevHandle.sdkData)
2555 {
2556 agDevHandle = &(pDevice->targetDevHandle);
2557 }
2558 else
2559 {
2560 agDevHandle = &(pDevice->initiatorDevHandle);
2561 }
2562 }
2563 else
2564 {
2565 SA_DBG1(("mpiDeregDevHandleRsp: pDevice is NULL"));
2566 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2r");
2567 return AGSA_RC_FAILURE;
2568 }
2569
2570 if (agNULL == agDevHandle)
2571 {
2572 SA_DBG1(("mpiDeregDevHandleRsp: warning!!! no deviceHandle is found"));
2573 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2r");
2574
2576 pRequest->valid = agFALSE;
2577 /* return the request to free pool */
2579 {
2580 SA_DBG1(("mpiDeregDevHandleRsp: saving pRequest (%p) for later use\n", pRequest));
2581 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2582 }
2583 else
2584 {
2585 /* return the request to free pool */
2586 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2587 }
2589
2590 return AGSA_RC_FAILURE;
2591 }
2592
2593 SA_DBG1(("mpiDeregDevHandleRsp: deviceID 0x%x Device Context %p\n", pDevice->DeviceMapIndex, pDevice));
2594
2595 if (agNULL == saRoot->DeviceDeregistrationCB)
2596 {
2597 SA_DBG1(("mpiDeregDevHandleRsp: warning!!! no DeviceDeregistrationCB is found"));
2598 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2r");
2599
2601 pRequest->valid = agFALSE;
2602 /* return the request to free pool */
2604 {
2605 SA_DBG1(("mpiDeregDevHandleRsp: saving pRequest (%p) for later use\n", pRequest));
2606 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2607 }
2608 else
2609 {
2610 /* return the request to free pool */
2611 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2612 }
2614
2615 return AGSA_RC_FAILURE;
2616 }
2617
2618 switch (status)
2619 {
2620 case OSSA_SUCCESS:
2622 agContext,
2623 agDevHandle,
2625 );
2626 siRemoveDevHandle(agRoot, agDevHandle);
2627 break;
2631 agContext,
2632 agDevHandle,
2633 status
2634 );
2635// already removed and no device to remove
2636// siRemoveDevHandle(agRoot, agDevHandle);
2637 SA_DBG1(("mpiDeregDevRegRsp, OSSA_INVALID_HANDLE status in response %d\n", status));
2638 break;
2641 agContext,
2642 agDevHandle,
2643 status
2644 );
2645 SA_DBG1(("mpiDeregDevRegRsp, OSSA_ERR_DEVICE_BUSY status in response %d\n", status));
2646 ret = AGSA_RC_BUSY;
2647 break;
2648 default:
2649 SA_DBG1(("mpiDeregDevRegRsp, unknown status in response 0x%X\n", status));
2650 break;
2651 }
2652
2654 pRequest->valid = agFALSE;
2655 /* return the request to free pool */
2657 {
2658 SA_DBG1(("mpiDeregDevHandleRsp: saving pRequest (%p) for later use\n", pRequest));
2659 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2660 }
2661 else
2662 {
2663 /* return the request to free pool */
2664 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2665 }
2667
2668 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "2r");
2669 return ret;
2670}
2671
2672
2673/******************************************************************************/
2684/*******************************************************************************/
2685
2687 agsaRoot_t *agRoot,
2689 )
2690{
2691 bit32 ret = AGSA_RC_SUCCESS;
2692 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
2693 agsaIORequestDesc_t *pRequest;
2694 agsaContext_t *agContext;
2695 bit32 status, tag;
2696
2697 bit32 Reserved_SOP_PHYID;
2698 bit32 PhyId;
2699 bit32 SOP;
2700
2702 OSSA_READ_LE_32(agRoot, &status, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t, status));
2703 OSSA_READ_LE_32(agRoot, &tag, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t, tag));
2704 /* get TAG */
2705 SA_DBG1(("mpiGetPhyProfileRsp: HTag=0x%x\n", tag));
2706
2707 /* get request from IOMap */
2708 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2709 if (agNULL == pRequest)
2710 {
2711 SA_DBG1(("mpiGetPhyProfileRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
2712 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2J");
2713 return AGSA_RC_FAILURE;
2714 }
2715
2716 agContext = saRoot->IOMap[tag].agContext;
2717
2718 OSSA_READ_LE_32(agRoot, &Reserved_SOP_PHYID, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,Reserved_Ppc_SOP_PHYID ));
2719
2720 /* remove the request from IOMap */
2721 saRoot->IOMap[tag].Tag = MARK_OFF;
2722 saRoot->IOMap[tag].IORequest = agNULL;
2723 saRoot->IOMap[tag].agContext = agNULL;
2724
2725 SA_ASSERT((pRequest->valid), "pRequest->valid");
2726 SA_DBG1(("mpiGetPhyProfileRsp: %p\n",pIomb));
2727 SA_DBG1(("mpiGetPhyProfileRsp: completionCB %p\n",pRequest->completionCB ));
2728
2729 SOP = (Reserved_SOP_PHYID & 0xFF00) >> SHIFT8;
2730 PhyId = Reserved_SOP_PHYID & 0xFF;
2731
2732 /* check status success or failure */
2733 if (status)
2734 {
2735 /* status is FAILED */
2736 SA_DBG1(("mpiGetPhyProfileRsp:AGSA_RC_FAILURE 0x%08X\n", status));
2737 switch(SOP)
2738 {
2740 {
2741 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_ERR_COUNTERS_PAGE SOP 0x%x\n", SOP));
2742 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2743 break;
2744 }
2746 {
2747 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE SOP 0x%x\n", SOP));
2748 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2749 break;
2750 }
2752 {
2753 SA_DBG1(("mpiGetPhyProfileRsp: GET_SAS_PHY_BW_COUNTERS SOP 0x%x\n", SOP));
2754 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2755 break;
2756 }
2758 {
2759 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE SOP 0x%x\n", SOP));
2760 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2761 break;
2762 }
2764 {
2765 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_GENERAL_STATUS_PAGE SOP 0x%x\n", SOP));
2766 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2767 break;
2768 }
2769 case AGSA_PHY_SNW3_PAGE:
2770 {
2771 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_PHY_SNW3_PAGE SOP 0x%x\n", SOP));
2772 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2773 break;
2774 }
2776 {
2777 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_PHY_RATE_CONTROL_PAGE SOP 0x%x\n", SOP));
2778 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2779 break;
2780 }
2782 {
2783 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE SOP 0x%x\n", SOP));
2784 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL );
2785 break;
2786 }
2787 default:
2788 {
2789 SA_DBG1(("mpiGetPhyProfileRsp: undefined SOP 0x%x\n", SOP));
2790 break;
2791 }
2792 }
2793 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2J");
2794 return AGSA_RC_FAILURE;
2795 }
2796 else
2797 {
2798 SA_DBG1(("mpiGetPhyProfileRsp: SUCCESS type 0x%X\n",SOP ));
2799 switch(SOP)
2800 {
2802 /* call back with the status */
2803 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE PhyId %d\n",PhyId));
2804 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , agNULL);
2805 break;
2807 {
2808
2810
2811 OSSA_READ_LE_32(agRoot, &Errors.invalidDword, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2812 OSSA_READ_LE_32(agRoot, &Errors.runningDisparityError, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2813 OSSA_READ_LE_32(agRoot, &Errors.codeViolation, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[2] ));
2814 OSSA_READ_LE_32(agRoot, &Errors.lossOfDwordSynch, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[3] ));
2815 OSSA_READ_LE_32(agRoot, &Errors.phyResetProblem, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[4] ));
2816 OSSA_READ_LE_32(agRoot, &Errors.inboundCRCError, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[5] ));
2817
2818 /* call back with the status */
2819 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , &Errors);
2820 /* status is SUCCESS */
2821
2822 SA_DBG3(("mpiGetPhyProfileRsp: pIomb %p\n",pIomb));
2823 SA_DBG1(("mpiGetPhyProfileRsp: Reserved_SOP_PHYID 0x%08X\n",Reserved_SOP_PHYID));
2824 SA_DBG1(("mpiGetPhyProfileRsp: invalidDword 0x%08X\n",Errors.invalidDword ));
2825 SA_DBG1(("mpiGetPhyProfileRsp: runningDisparityError 0x%08X\n",Errors.runningDisparityError ));
2826 SA_DBG1(("mpiGetPhyProfileRsp: codeViolation 0x%08X\n",Errors.codeViolation ));
2827 SA_DBG1(("mpiGetPhyProfileRsp: lossOfDwordSynch 0x%08X\n",Errors.lossOfDwordSynch ));
2828 SA_DBG1(("mpiGetPhyProfileRsp: phyResetProblem 0x%08X\n",Errors.phyResetProblem ));
2829 SA_DBG1(("mpiGetPhyProfileRsp: inboundCRCError 0x%08X\n",Errors.inboundCRCError ));
2830 break;
2831
2832 }
2834 {
2835
2836 agsaPhyBWCountersPage_t bw_counts;
2837 OSSA_READ_LE_32(agRoot, &bw_counts.TXBWCounter, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2838 OSSA_READ_LE_32(agRoot, &bw_counts.RXBWCounter, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2839
2840 SA_DBG1(("mpiGetPhyProfileRsp: GET_SAS_PHY_BW_COUNTERS TX 0x%08X RX 0x%08X\n",bw_counts.TXBWCounter,bw_counts.RXBWCounter));
2841 /* call back with the status */
2842 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, &bw_counts);
2843 break;
2844 }
2846 {
2848
2849 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE 0x%X\n",SOP));
2850 OSSA_READ_LE_32(agRoot, &analog.Dword0, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2851 OSSA_READ_LE_32(agRoot, &analog.Dword1, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2852 OSSA_READ_LE_32(agRoot, &analog.Dword2, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[2] ));
2853 OSSA_READ_LE_32(agRoot, &analog.Dword3, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[3] ));
2854 OSSA_READ_LE_32(agRoot, &analog.Dword4, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[4] ));
2855 /* call back with the status */
2856 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, &analog);
2857 break;
2858 }
2859
2861 {
2863 OSSA_READ_LE_32(agRoot, &GenStatus.Dword0, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2864 OSSA_READ_LE_32(agRoot, &GenStatus.Dword1, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2865 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_GENERAL_STATUS_PAGE SOP 0x%x 0x%x 0x%x\n", SOP,GenStatus.Dword0,GenStatus.Dword1));
2866 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , &GenStatus );
2867 break;
2868 }
2869 case AGSA_PHY_SNW3_PAGE:
2870 {
2871 agsaPhySNW3Page_t Snw3;
2872 OSSA_READ_LE_32(agRoot, &Snw3.LSNW3, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2873 OSSA_READ_LE_32(agRoot, &Snw3.RSNW3, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2874
2875 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_PHY_SNW3_PAGE SOP 0x%x\n", SOP));
2876 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , &Snw3 );
2877 break;
2878 }
2880 {
2881 agsaPhyRateControlPage_t RateControl;
2882 OSSA_READ_LE_32(agRoot, &RateControl.Dword0, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2883 OSSA_READ_LE_32(agRoot, &RateControl.Dword1, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2884 OSSA_READ_LE_32(agRoot, &RateControl.Dword2, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[2] ));
2885 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_PHY_RATE_CONTROL_PAGE SOP 0x%x\n", SOP));
2886 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , &RateControl );
2887 break;
2888 }
2890 {
2892 OSSA_READ_LE_32(agRoot, &Backoff.Dword0, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[0] ));
2893 OSSA_READ_LE_32(agRoot, &Backoff.Dword1, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[1] ));
2894 OSSA_READ_LE_32(agRoot, &Backoff.Dword2, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[2] ));
2895 OSSA_READ_LE_32(agRoot, &Backoff.Dword3, pIomb, OSSA_OFFSET_OF(agsaGetPhyProfileRspV_t,PageSpecificArea[3] ));
2896 SA_DBG1(("mpiGetPhyProfileRsp: AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE SOP 0x%x\n", SOP));
2897 ossaGetPhyProfileCB(agRoot, agContext, status, SOP, PhyId , &Backoff );
2898 break;
2899 }
2900 default:
2901 {
2902 SA_DBG1(("mpiGetPhyProfileRsp: undefined successful SOP 0x%x\n", SOP));
2903 break;
2904 }
2905
2906 }
2907 }
2908
2910 pRequest->valid = agFALSE;
2911 /* return the request to free pool */
2913 {
2914 SA_DBG1(("mpiGetPhyProfileRsp: saving pRequest (%p) for later use\n", pRequest));
2915 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
2916 }
2917 else
2918 {
2919 /* return the request to free pool */
2920 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
2921 }
2923
2924 /* return value */
2925 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2J");
2926 return ret;
2927}
2928
2929
2931 agsaRoot_t *agRoot,
2933 )
2934{
2935 bit32 ret = AGSA_RC_SUCCESS;
2936 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
2937 agsaIORequestDesc_t *pRequest;
2938 agsaContext_t *agContext;
2939 bit32 status, tag;
2940
2941 bit32 Reserved_Ppc_PHYID;
2942 bit32 PhyId;
2943 bit16 SOP;
2944
2946 OSSA_READ_LE_32(agRoot, &status, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t, status));
2947 OSSA_READ_LE_32(agRoot, &tag, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t, tag));
2948 OSSA_READ_LE_32(agRoot, &Reserved_Ppc_PHYID, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t, Reserved_Ppc_PHYID));
2949 /* get TAG */
2950 SA_DBG1(("mpiSetPhyProfileRsp: HTag=0x%x\n", tag));
2951
2952 /* get request from IOMap */
2953 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
2954 if (agNULL == pRequest)
2955 {
2956 SA_DBG1(("mpiSetPhyProfileRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
2957 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2Q");
2958 return AGSA_RC_FAILURE;
2959 }
2960
2961 agContext = saRoot->IOMap[tag].agContext;
2962
2963 /* remove the request from IOMap */
2964 saRoot->IOMap[tag].Tag = MARK_OFF;
2965 saRoot->IOMap[tag].IORequest = agNULL;
2966 saRoot->IOMap[tag].agContext = agNULL;
2967
2968 SA_DBG1(("mpiSetPhyProfileRsp: %p\n",pIomb));
2969
2970 SOP = pRequest->SOP;
2971 PhyId = Reserved_Ppc_PHYID & 0xFF;
2972
2973 /* check status success or failure */
2974 if (status)
2975 {
2976 /* status is FAILED */
2977 SA_DBG1(("mpiSetPhyProfileRsp:AGSA_RC_FAILURE 0x%08X\n", status));
2978 switch(SOP)
2979 {
2981 {
2982 SA_DBG1(("mpiSetPhyProfileRsp: AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE SOP 0x%x\n", SOP));
2983 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, agNULL );
2984 break;
2985 }
2986 case AGSA_PHY_SNW3_PAGE:
2987 {
2988 SA_DBG1(("mpiSetPhyProfileRsp: AGSA_PHY_SNW3_PAGE SOP 0x%x\n", SOP));
2989 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, agNULL );
2990 break;
2991 }
2992
2994 {
2995 SA_DBG1(("mpiSetPhyProfileRsp: AGSA_PHY_RATE_CONTROL_PAGE SOP 0x%x\n", SOP));
2996 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, agNULL );
2997 break;
2998 }
3000 {
3001 SA_DBG1(("mpiSetPhyProfileRsp: AGSA_SAS_PHY_MISC_PAGE SOP 0x%x\n", SOP));
3002 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, agNULL );
3003 break;
3004 }
3005
3006 default:
3007 {
3008 SA_DBG1(("mpiSetPhyProfileRsp: undefined SOP 0x%x\n", SOP));
3009 break;
3010 }
3011 }
3012 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2Q");
3013 return AGSA_RC_FAILURE;
3014 }
3015 else
3016 {
3017 SA_DBG1(("mpiSetPhyProfileRsp: SUCCESS type 0x%X\n",SOP ));
3018 switch(SOP)
3019 {
3020 case AGSA_PHY_SNW3_PAGE:
3022 {
3023 SA_DBG1(("mpiSetPhyProfileRsp: Status 0x%x SOP 0x%x PhyId %d\n",status, SOP, PhyId));
3024 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, agNULL );
3025 break;
3026
3027 }
3029 {
3031
3032 SA_DBG1(("mpiSetPhyProfileRsp: AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE 0x%X\n",SOP));
3033 OSSA_READ_LE_32(agRoot, &analog.Dword0, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t,PageSpecificArea[0] ));
3034 OSSA_READ_LE_32(agRoot, &analog.Dword1, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t,PageSpecificArea[1] ));
3035 OSSA_READ_LE_32(agRoot, &analog.Dword2, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t,PageSpecificArea[2] ));
3036 OSSA_READ_LE_32(agRoot, &analog.Dword3, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t,PageSpecificArea[3] ));
3037 OSSA_READ_LE_32(agRoot, &analog.Dword4, pIomb, OSSA_OFFSET_OF(agsaSetPhyProfileRspV_t,PageSpecificArea[4] ));
3038 /* call back with the status */
3039 ossaSetPhyProfileCB(agRoot, agContext, status, SOP, PhyId, &analog );
3040 break;
3041 }
3042 default:
3043 {
3044 SA_DBG1(("mpiSetPhyProfileRsp: undefined successful SOP 0x%x\n", SOP));
3045 break;
3046 }
3047
3048 }
3049 }
3050
3052 SA_ASSERT((pRequest->valid), "pRequest->valid");
3053 SA_DBG1(("mpiSetPhyProfileRsp: completionCB %p\n",pRequest->completionCB ));
3054
3055 pRequest->valid = agFALSE;
3056 /* return the request to free pool */
3058 {
3059 SA_DBG1(("mpiSetPhyProfileRsp: saving pRequest (%p) for later use\n", pRequest));
3060 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3061 }
3062 else
3063 {
3064 /* return the request to free pool */
3065 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3066 }
3068
3069 /* return value */
3070 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2Q");
3071 return ret;
3072}
3073
3074
3075
3076/******************************************************************************/
3087/*******************************************************************************/
3089 agsaRoot_t *agRoot,
3091 )
3092{
3093 bit32 ret = AGSA_RC_SUCCESS;
3094 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
3095 agsaIORequestDesc_t *pRequest;
3096 agsaDevHandle_t *agDevHandle;
3097 agsaDeviceDesc_t *pDevice;
3098 agsaContext_t *agContext;
3099 agsaDeviceInfo_t commonDevInfo;
3100 bit32 ARSrateSMPTimeOutPortID, IRMcnITNexusTimeOut, status, tag;
3101 bit32 deviceid;
3102 bit32 sasAddrHi;
3103 bit32 sasAddrLow;
3104#if defined(SALLSDK_DEBUG)
3105 bit32 option;
3106#endif /* SALLSDK_DEBUG */
3107
3109 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t, status));
3110 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t, tag));
3111 /* get TAG */
3112 SA_DBG3(("mpiGetDevInfoRsp: HTag=0x%x\n", tag));
3113
3114 /* get request from IOMap */
3115 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
3116 if (agNULL == pRequest)
3117 {
3118 SA_DBG1(("mpiGetDevInfoRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
3119 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2M");
3120 return AGSA_RC_FAILURE;
3121 }
3122
3123 agContext = saRoot->IOMap[tag].agContext;
3124
3125 /* remove the request from IOMap */
3126 saRoot->IOMap[tag].Tag = MARK_OFF;
3127 saRoot->IOMap[tag].IORequest = agNULL;
3128 saRoot->IOMap[tag].agContext = agNULL;
3129
3130 SA_ASSERT((pRequest->valid), "pRequest->valid");
3131
3132 /* check status success or failure */
3133 if (status)
3134 {
3135 /* status is FAILED */
3137 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2M");
3138
3140 pRequest->valid = agFALSE;
3141#if defined(SALLSDK_DEBUG)
3142 option = (bit32)pRequest->DeviceInfoCmdOption;
3143#endif /* SALLSDK_DEBUG */
3144 /* return the request to free pool */
3146 {
3147 SA_DBG1(("mpiGetDevInfoRsp: saving pRequest (%p) for later use\n", pRequest));
3148 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3149 }
3150 else
3151 {
3152 /* return the request to free pool */
3153 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3154 }
3156
3157 return AGSA_RC_FAILURE;
3158 }
3159
3160 /* status is SUCCESS */
3161 OSSA_READ_LE_32(AGROOT, &deviceid, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t, deviceId));
3162 OSSA_READ_LE_32(AGROOT, &ARSrateSMPTimeOutPortID, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t, ARSrateSMPTimeOutPortID));
3163 OSSA_READ_LE_32(AGROOT, &IRMcnITNexusTimeOut, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t, IRMcnITNexusTimeOut));
3164 OSSA_READ_LE_32(AGROOT, &sasAddrHi, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t,sasAddrHi[0] ));
3165 OSSA_READ_LE_32(AGROOT, &sasAddrLow, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRspV_t,sasAddrLow[0] ));
3166
3167 /* find device handle from device index */
3168 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
3169 if (pDevice != agNULL)
3170 {
3171 if (pDevice->targetDevHandle.sdkData)
3172 {
3173 agDevHandle = &(pDevice->targetDevHandle);
3174 }
3175 else
3176 {
3177 agDevHandle = &(pDevice->initiatorDevHandle);
3178 }
3179 }
3180 else
3181 {
3182 SA_DBG1(("mpiGetDevInfoRsp: pDevice is NULL"));
3183 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2M");
3184 return AGSA_RC_FAILURE;
3185 }
3186
3187 if (agDevHandle == agNULL)
3188 {
3189 SA_DBG1(("mpiGetDevInfoRsp: warning!!! no deviceHandle is found"));
3191 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2M");
3192
3194 pRequest->valid = agFALSE;
3195#if defined(SALLSDK_DEBUG)
3196 option = (bit32)pRequest->DeviceInfoCmdOption;
3197#endif /* SALLSDK_DEBUG */
3198 /* return the request to free pool */
3200 {
3201 SA_DBG1(("mpiGetDevInfoRsp: saving pRequest (%p) for later use\n", pRequest));
3202 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3203 }
3204 else
3205 {
3206 /* return the request to free pool */
3207 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3208 }
3210
3211 return AGSA_RC_FAILURE;
3212 }
3213
3214 /* setup common device information */
3215 si_memset(&commonDevInfo, 0, sizeof(agsaDeviceInfo_t));
3216 commonDevInfo.smpTimeout = (bit16)((ARSrateSMPTimeOutPortID >> SHIFT8 ) & SMPTO_VBITS);
3217 commonDevInfo.it_NexusTimeout = (bit16)(IRMcnITNexusTimeOut & NEXUSTO_VBITS);
3218 commonDevInfo.firstBurstSize = (bit16)((IRMcnITNexusTimeOut >> SHIFT16) & FIRST_BURST_MCN);
3219 commonDevInfo.devType_S_Rate = (bit8)((ARSrateSMPTimeOutPortID >> SHIFT24) & 0x3f);
3220 commonDevInfo.flag = (bit32)((ARSrateSMPTimeOutPortID >> SHIFT30 ) & FLAG_VBITS);
3221 commonDevInfo.flag |= IRMcnITNexusTimeOut & 0xf0000;
3222 if (IRMcnITNexusTimeOut & 0x1000000)
3223 {
3224 commonDevInfo.flag |= 0x100000;
3225 }
3226
3227 /* check SAS device then copy SAS Address */
3228 if ( ((ARSrateSMPTimeOutPortID & DEV_TYPE_BITS) >> SHIFT28 == 0x00) ||
3229 ((ARSrateSMPTimeOutPortID & DEV_TYPE_BITS) >> SHIFT28 == 0x01))
3230 {
3231 /* copy the sasAddressHi byte-by-byte : no endianness */
3232 commonDevInfo.sasAddressHi[0] = pIomb->sasAddrHi[0];
3233 commonDevInfo.sasAddressHi[1] = pIomb->sasAddrHi[1];
3234 commonDevInfo.sasAddressHi[2] = pIomb->sasAddrHi[2];
3235 commonDevInfo.sasAddressHi[3] = pIomb->sasAddrHi[3];
3236
3237 /* copy the sasAddressLow byte-by-byte : no endianness */
3238 commonDevInfo.sasAddressLo[0] = pIomb->sasAddrLow[0];
3239 commonDevInfo.sasAddressLo[1] = pIomb->sasAddrLow[1];
3240 commonDevInfo.sasAddressLo[2] = pIomb->sasAddrLow[2];
3241 commonDevInfo.sasAddressLo[3] = pIomb->sasAddrLow[3];
3242 }
3243
3244 /* copy common device information to SAS and SATA device common header*/
3245 si_memcpy(&pDevice->devInfo.sasDeviceInfo.commonDevInfo, &commonDevInfo, sizeof(agsaDeviceInfo_t));
3246 si_memcpy(&pDevice->devInfo.sataDeviceInfo.commonDevInfo, &commonDevInfo, sizeof(agsaDeviceInfo_t));
3247
3248 /* setup device firstBurstSize infomation */
3250 (bit16)((IRMcnITNexusTimeOut >> SHIFT16) & FIRST_BURST);
3251
3252 /* Display Device Information */
3253 SA_DBG3(("mpiGetDevInfoRsp: smpTimeout=0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.smpTimeout));
3254 SA_DBG3(("mpiGetDevInfoRsp: it_NexusTimeout=0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.it_NexusTimeout));
3255 SA_DBG3(("mpiGetDevInfoRsp: firstBurstSize=0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.firstBurstSize));
3256 SA_DBG3(("mpiGetDevInfoRsp: devType_S_Rate=0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate));
3257
3258 /*
3259 D518 P2I[15-12]: Disk HP DG0146FAMWL , HPDE, WWID=5000c500:17459a31, 6.0G
3260 */
3261
3262 SA_DBG1(("mpiGetDevInfoRsp: Device 0x%08X flag 0x%08X %s WWID= %02x%02x%02x%02x:%02x%02x%02x%02x, %s\n",
3263 deviceid,
3265 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x20 ? "SATA DA" :
3266 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x10 ? "SSP/SMP" :
3267 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x0 ? " STP " : "Unknown",
3268
3277
3278 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 8 ? " 1.5G" :
3279 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 9 ? " 3.0G" :
3280 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 10 ? " 6.0G" :
3281 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 11 ? "12.0G" : "????" ));
3282
3283 ossaGetDeviceInfoCB(agRoot, agContext, agDevHandle, OSSA_DEV_INFO_NO_EXTENDED_INFO, &commonDevInfo);
3284
3286 pRequest->valid = agFALSE;
3287#if defined(SALLSDK_DEBUG)
3288 option = (bit32)pRequest->DeviceInfoCmdOption;
3289#endif /* SALLSDK_DEBUG */
3290 /* return the request to free pool */
3292 {
3293 SA_DBG1(("mpiGetDevInfoRsp: saving pRequest (%p) for later use\n", pRequest));
3294 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3295 }
3296 else
3297 {
3298 /* return the request to free pool */
3299 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3300 }
3302
3303 /* return value */
3304 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "2M");
3305 return ret;
3306}
3307
3308/******************************************************************************/
3319/*******************************************************************************/
3321 agsaRoot_t *agRoot,
3322 agsaGetDevInfoRsp_t *pIomb
3323 )
3324{
3325 bit32 ret = AGSA_RC_SUCCESS;
3326 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
3327 agsaIORequestDesc_t *pRequest;
3328 agsaDevHandle_t *agDevHandle;
3329 agsaDeviceDesc_t *pDevice;
3330 agsaContext_t *agContext;
3331 bit32 dTypeSrateSMPTOPortID, FirstBurstSizeITNexusTimeOut, status, tag;
3332 bit32 deviceid;
3333 bit32 sasAddrHi;
3334 bit32 sasAddrLow;
3335 bit32 Info_avail = 0;
3336
3338 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, status));
3339 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, tag));
3340 /* get TAG */
3341 SA_DBG3(("mpiGetDevInfoRspSpc: HTag=0x%x\n", tag));
3342
3343 /* get request from IOMap */
3344 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
3345 if (agNULL == pRequest)
3346 {
3347 SA_DBG1(("mpiGetDevInfoRspSpc: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
3348 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2t");
3349 return AGSA_RC_FAILURE;
3350 }
3351
3352 agContext = saRoot->IOMap[tag].agContext;
3353
3354 /* remove the request from IOMap */
3355 saRoot->IOMap[tag].Tag = MARK_OFF;
3356 saRoot->IOMap[tag].IORequest = agNULL;
3357 saRoot->IOMap[tag].agContext = agNULL;
3358
3359 SA_ASSERT((pRequest->valid), "pRequest->valid");
3360
3361 /* check status success or failure */
3362 if (status)
3363 {
3364 /* status is FAILED */
3366 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2t");
3367 return AGSA_RC_FAILURE;
3368 }
3369
3370 /* status is SUCCESS */
3371 OSSA_READ_LE_32(AGROOT, &deviceid, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, deviceId));
3372 OSSA_READ_LE_32(AGROOT, &dTypeSrateSMPTOPortID, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, dTypeSrateSMPTOArPortID));
3373 OSSA_READ_LE_32(AGROOT, &FirstBurstSizeITNexusTimeOut, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, FirstBurstSizeITNexusTimeOut));
3374 OSSA_READ_LE_32(AGROOT, &sasAddrHi, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, sasAddrHi[0]));
3375 OSSA_READ_LE_32(AGROOT, &sasAddrLow, pIomb, OSSA_OFFSET_OF(agsaGetDevInfoRsp_t, sasAddrLow[0]));
3376
3377
3378 SA_DBG2(("mpiGetDevInfoRspSpc:deviceid 0x%08X\n",deviceid));
3379 SA_DBG2(("mpiGetDevInfoRspSpc:dTypeSrateSMPTOPortID 0x%08X\n",dTypeSrateSMPTOPortID));
3380 SA_DBG2(("mpiGetDevInfoRspSpc:FirstBurstSizeITNexusTimeOut 0x%08X\n",FirstBurstSizeITNexusTimeOut));
3381 SA_DBG2(("mpiGetDevInfoRspSpc:sasAddrHi 0x%08X\n",sasAddrHi));
3382 SA_DBG2(("mpiGetDevInfoRspSpc:sasAddrLow 0x%08X\n",sasAddrLow));
3383
3384
3385 /* find device handle from device index */
3386 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
3387 if (pDevice != agNULL)
3388 {
3389 if (pDevice->targetDevHandle.sdkData)
3390 {
3391 agDevHandle = &(pDevice->targetDevHandle);
3392 }
3393 else
3394 {
3395 agDevHandle = &(pDevice->initiatorDevHandle);
3396 }
3397 }
3398 else
3399 {
3400 SA_DBG1(("mpiGetDevInfoRspSpc: pDevice is NULL"));
3401 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2t");
3402 return AGSA_RC_FAILURE;
3403 }
3404
3405 if (agDevHandle == agNULL)
3406 {
3407 SA_DBG1(("mpiGetDevInfoRspSpc: warning!!! no deviceHandle is found"));
3409 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2t");
3410
3412 pRequest->valid = agFALSE;
3413 /* return the request to free pool */
3415 {
3416 SA_DBG1(("mpiGetDevInfoRspSpc: saving pRequest (%p) for later use\n", pRequest));
3417 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3418 }
3419 else
3420 {
3421 /* return the request to free pool */
3422 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3423 }
3425
3426 return AGSA_RC_FAILURE;
3427 }
3428
3429 Info_avail = OSSA_DEV_INFO_NO_EXTENDED_INFO;
3430
3431 /* setup device common infomation */
3433 (bit16)((dTypeSrateSMPTOPortID >> SHIFT8 ) & SMPTO_BITS);
3434
3436 (bit16)((dTypeSrateSMPTOPortID >> SHIFT8 ) & SMPTO_BITS);
3437
3439 (bit16)(FirstBurstSizeITNexusTimeOut & NEXUSTO_BITS);
3440
3442 (bit16)(FirstBurstSizeITNexusTimeOut & NEXUSTO_BITS);
3443
3445 (bit16)((FirstBurstSizeITNexusTimeOut >> SHIFT16) & FIRST_BURST);
3446
3448 (bit16)((FirstBurstSizeITNexusTimeOut >> SHIFT16) & FIRST_BURST);
3449
3450 pDevice->devInfo.sasDeviceInfo.commonDevInfo.flag = (bit32)((dTypeSrateSMPTOPortID >> SHIFT4 ) & FLAG_BITS);
3451
3452 pDevice->devInfo.sataDeviceInfo.commonDevInfo.flag = (bit32)((dTypeSrateSMPTOPortID >> SHIFT4 ) & FLAG_BITS);
3453
3455 (bit8)((dTypeSrateSMPTOPortID >> SHIFT24) & LINK_RATE_BITS);
3456
3458 (bit8)((dTypeSrateSMPTOPortID >> SHIFT24) & LINK_RATE_BITS);
3459
3460 /* check SAS device then copy SAS Address */
3461 if ( ((dTypeSrateSMPTOPortID & DEV_TYPE_BITS) >> SHIFT28 == 0x00) ||
3462 ((dTypeSrateSMPTOPortID & DEV_TYPE_BITS) >> SHIFT28 == 0x01))
3463 {
3464 /* copy the sasAddressHi byte-by-byte : no endianness */
3469
3470 /* copy the sasAddressLow byte-by-byte : no endianness */
3475 }
3476
3477 /* Display Device Information */
3478 SA_DBG3(("mpiGetDevInfoRspSpc: smpTimeout= 0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.smpTimeout));
3479 SA_DBG3(("mpiGetDevInfoRspSpc: it_NexusTimeout=0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.it_NexusTimeout));
3480 SA_DBG3(("mpiGetDevInfoRspSpc: firstBurstSize= 0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.firstBurstSize));
3481 SA_DBG3(("mpiGetDevInfoRspSpc: devType_S_Rate= 0x%x\n", pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate));
3482
3483
3484 SA_DBG1(("Device SPC deviceid 0x%08X flag 0x%08X %s WWID= %02x%02x%02x%02x:%02x%02x%02x%02x, %s\n",
3485 deviceid,
3487 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x20 ? "SATA DA" :
3488 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x10 ? "SSP/SMP" :
3489 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x0 ? " STP " : "Unknown",
3490
3499
3500 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 8 ? " 1.5G" :
3501 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 9 ? " 3.0G" :
3502 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 10 ? " 6.0G" :
3503 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 11 ? "12.0G" : "????" ));
3504
3505 ossaGetDeviceInfoCB(agRoot, agContext, agDevHandle, Info_avail, &pDevice->devInfo.sasDeviceInfo.commonDevInfo);
3506
3508 pRequest->valid = agFALSE;
3509 /* return the request to free pool */
3511 {
3512 SA_DBG1(("mpiGetDevInfoRspSpc: saving pRequest (%p) for later use\n", pRequest));
3513 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
3514 }
3515 else
3516 {
3517 /* return the request to free pool */
3518 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3519 }
3521
3522 /* return value */
3523 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "2t");
3524 return ret;
3525}
3526
3527/******************************************************************************/
3538/*******************************************************************************/
3540 agsaRoot_t *agRoot,
3542 )
3543{
3544 bit32 ret = AGSA_RC_SUCCESS;
3545 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
3546 agsaIORequestDesc_t *pRequest;
3547 agsaDevHandle_t *agDevHandle;
3548 agsaDeviceDesc_t *pDevice;
3549 agsaContext_t *agContext;
3550 bit32 tag, status, deviceid, option, param;
3551
3553 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSetDeviceInfoRsp_t, status));
3554 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSetDeviceInfoRsp_t, tag));
3555 /* get TAG */
3556 SA_DBG3(("mpiSetDevInfoRsp: HTag=0x%x\n", tag));
3557
3558 /* get request from IOMap */
3559 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
3560 if (agNULL == pRequest)
3561 {
3562 SA_DBG1(("mpiSetDevInfoRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
3563 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2v");
3564 return AGSA_RC_FAILURE;
3565 }
3566
3567 agContext = saRoot->IOMap[tag].agContext;
3568
3569 /* remove the request from IOMap */
3570 saRoot->IOMap[tag].Tag = MARK_OFF;
3571 saRoot->IOMap[tag].IORequest = agNULL;
3572 saRoot->IOMap[tag].agContext = agNULL;
3573
3574 SA_ASSERT((pRequest->valid), "pRequest->valid");
3575 /* check status success or failure */
3576 if (status)
3577 {
3578 /* status is FAILED */
3579 if (pRequest->completionCB == agNULL)
3580 {
3581 SA_DBG1(("mpiSetDevInfoRsp: status is FAILED pRequest->completionCB == agNULL\n" ));
3582 ossaSetDeviceInfoCB(agRoot, agContext, agNULL, status, 0, 0);
3583 }
3584 else
3585 {
3586 SA_DBG1(("mpiSetDevInfoRsp: status is FAILED use CB\n" ));
3587 (*(ossaSetDeviceInfoCB_t)(pRequest->completionCB))(agRoot, agContext, agNULL, status, 0, 0);
3588 }
3589 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2v");
3590
3592 pRequest->valid = agFALSE;
3593 /* return the request to free pool */
3594 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3596
3597 return AGSA_RC_FAILURE;
3598 }
3599
3600 /* status is SUCCESS */
3601 OSSA_READ_LE_32(AGROOT, &deviceid, pIomb, OSSA_OFFSET_OF(agsaSetDeviceInfoRsp_t, deviceId));
3602 OSSA_READ_LE_32(AGROOT, &option, pIomb, OSSA_OFFSET_OF(agsaSetDeviceInfoRsp_t, SA_SR_SI));
3603 OSSA_READ_LE_32(AGROOT, &param, pIomb, OSSA_OFFSET_OF(agsaSetDeviceInfoRsp_t, A_R_ITNT));
3604
3605 /* find device handle from device index */
3606 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
3607 if (pDevice != agNULL)
3608 {
3609 if (pDevice->targetDevHandle.sdkData)
3610 {
3611 agDevHandle = &(pDevice->targetDevHandle);
3612 }
3613 else
3614 {
3615 agDevHandle = &(pDevice->initiatorDevHandle);
3616 }
3617 }
3618 else
3619 {
3620 SA_DBG1(("mpiSetDevInfoRsp: pDevice is NULL"));
3622 pRequest->valid = agFALSE;
3623 /* return the request to free pool */
3624 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3626 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2v");
3627 return AGSA_RC_FAILURE;
3628 }
3629
3630 if (agDevHandle == agNULL)
3631 {
3632 SA_DBG1(("mpiSetDevInfoRsp: warning!!! no deviceHandle is found"));
3633 if (pRequest->completionCB == agNULL)
3634 {
3635 ossaSetDeviceInfoCB(agRoot, agContext, agNULL, OSSA_IO_NO_DEVICE, 0, 0);
3636 }
3637 else
3638 {
3639 (*(ossaSetDeviceInfoCB_t)(pRequest->completionCB))(agRoot, agContext, agNULL, OSSA_IO_NO_DEVICE, 0, 0);
3640 }
3641 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2v");
3642
3644 pRequest->valid = agFALSE;
3645 /* return the request to free pool */
3646 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3648
3649 return AGSA_RC_FAILURE;
3650 }
3651
3652 SA_DBG2(("mpiSetDevInfoRsp:, option 0x%X param 0x%X\n", option, param));
3653
3654 if(smIS_SPCV(agRoot))
3655 {
3656 SA_DBG2(("mpiSetDevInfoRsp:was option 0x%X param 0x%X\n", option, param));
3657 SA_DBG2(("mpiSetDevInfoRsp:pDevice->option 0x%X pDevice->param 0x%X\n", pDevice->option, pDevice->param));
3658 option |= pDevice->option;
3659 param |= pDevice->param;
3660 SA_DBG2(("mpiSetDevInfoRsp:now option 0x%X param 0x%X\n", option, param));
3661 if (pRequest->completionCB == agNULL)
3662 {
3663 ossaSetDeviceInfoCB(agRoot, agContext, agDevHandle, OSSA_SUCCESS, option, param);
3664 }
3665 else
3666 {
3667 (*(ossaSetDeviceInfoCB_t)(pRequest->completionCB))(agRoot, agContext, agDevHandle, OSSA_SUCCESS, option, param);
3668 }
3669 }
3670 else
3671 {
3672 SA_DBG2(("mpiSetDevInfoRsp:, option 0x%X param 0x%X\n", option, param));
3673 if (pRequest->completionCB == agNULL)
3674 {
3675 ossaSetDeviceInfoCB(agRoot, agContext, agDevHandle, OSSA_SUCCESS, option, param);
3676 }
3677 else
3678 {
3679 (*(ossaSetDeviceInfoCB_t)(pRequest->completionCB))(agRoot, agContext, agDevHandle, OSSA_SUCCESS, option, param);
3680 }
3681 }
3682
3684 pRequest->valid = agFALSE;
3685 /* return the request to free pool */
3686 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
3688
3689 /* return value */
3690 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "2v");
3691 return ret;
3692}
3693
3694/******************************************************************************/
3705/*******************************************************************************/
3707 agsaRoot_t *agRoot,
3708 agsaSSPEventRsp_t *pIomb
3709 )
3710{
3711 bit32 ret = AGSA_RC_SUCCESS;
3712 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
3713 agsaIORequestDesc_t *pRequest;
3714 agsaPortContext_t *agPortContext;
3715 agsaDevHandle_t *agDevHandle;
3716 agsaDeviceDesc_t *pDevice;
3717 bit32 event,deviceId;
3718 bit32 deviceIdx, tag, portId_tmp;
3719 bit32 SSPTag;
3720 bit16 sspTag;
3721 bit8 portId;
3722
3723 agsaDifDetails_t Dif_details;
3724
3726
3727 OSSA_READ_LE_32(AGROOT, &event, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, event));
3728 OSSA_READ_LE_32(AGROOT, &deviceId, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, deviceId));
3729 OSSA_READ_LE_32(AGROOT, &portId_tmp, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, portId));
3730 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, tag));
3731 OSSA_READ_LE_32(AGROOT, &SSPTag, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, SSPTag));
3732
3733
3734 sspTag = (bit16)(SSPTag & SSPTAG_BITS);
3735
3736 /* get IORequest from IOMap */
3737 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
3738
3739 SA_ASSERT((pRequest), "pRequest");
3740
3741 if(agNULL == pRequest)
3742 {
3743 SA_DBG1(("mpiSSPEvent: agNULL == pRequest event 0x%X\n", event));
3744 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2u");
3745 return AGSA_RC_FAILURE;
3746 }
3747
3748 /* get port context */
3749 portId = (bit8)(portId_tmp & PORTID_MASK);
3750 SA_DBG2(("mpiSSPEvent:PortID 0x%x PortStatus 0x%x PortContext %p\n",saRoot->PortMap[portId & PORTID_MASK].PortID,saRoot->PortMap[portId & PORTID_MASK].PortStatus,saRoot->PortMap[portId & PORTID_MASK].PortContext));
3751 agPortContext = (agsaPortContext_t *)saRoot->PortMap[portId].PortContext;
3752 /* get device Id */
3753 deviceIdx = deviceId & DEVICE_ID_BITS;
3754 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
3755 /* find device handle from device index */
3756 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceIdx].DeviceHandle;
3757
3758 if( agNULL == pDevice )
3759 {
3760 OS_ASSERT(pDevice, "pDevice");
3761 agDevHandle = agNULL;
3762 }
3763 else
3764 {
3765 if (pDevice->targetDevHandle.sdkData)
3766 {
3767 agDevHandle = &(pDevice->targetDevHandle);
3768 }
3769 else
3770 {
3771 agDevHandle = &(pDevice->initiatorDevHandle);
3772 }
3773 }
3774
3775 switch (event)
3776 {
3781 {
3782
3783 SA_DBG1(("mpiSSPEvent: DIF Event 0x%x HTAG = 0x%x\n", event, tag));
3784
3785 OSSA_READ_LE_32(AGROOT, &Dif_details.UpperLBA, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, EVT_PARAM0_or_LBAH));
3786 OSSA_READ_LE_32(AGROOT, &Dif_details.LowerLBA, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, EVT_PARAM1_or_LBAL));
3787 OSSA_READ_LE_32(AGROOT, &Dif_details.sasAddressHi, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, SAS_ADDRH));
3788 OSSA_READ_LE_32(AGROOT, &Dif_details.sasAddressLo, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, SAS_ADDRL));
3789 OSSA_READ_LE_32(AGROOT, &Dif_details.ExpectedCRCUDT01, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, UDT1_E_UDT0_E_CRC_E));
3790 OSSA_READ_LE_32(AGROOT, &Dif_details.ExpectedUDT2345, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, UDT5_E_UDT4_E_UDT3_E_UDT2_E));
3791 OSSA_READ_LE_32(AGROOT, &Dif_details.ActualCRCUDT01, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, UDT1_A_UDT0_A_CRC_A));
3792 OSSA_READ_LE_32(AGROOT, &Dif_details.ActualUDT2345, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, UDT5_A_UDT4_A_UDT3_A_UDT2_A));
3793 OSSA_READ_LE_32(AGROOT, &Dif_details.DIFErrDevID, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, HW_DEVID_Reserved_DIF_ERR));
3794 OSSA_READ_LE_32(AGROOT, &Dif_details.ErrBoffsetEDataLen, pIomb, OSSA_OFFSET_OF(agsaSSPEventRsp_t, EDATA_LEN_ERR_BOFF));
3795
3796 SA_DBG2(("mpiSSPEvent: UpperLBA. 0x%08X LowerLBA. 0x%08X\n",Dif_details.UpperLBA, Dif_details.LowerLBA));
3797 SA_DBG2(("mpiSSPEvent: sasAddressHi. 0x%02X%02X%02X%02X sasAddressLo. 0x%02X%02X%02X%02X\n",
3798 Dif_details.sasAddressHi[0],Dif_details.sasAddressHi[1],Dif_details.sasAddressHi[2],Dif_details.sasAddressHi[3],
3799 Dif_details.sasAddressLo[0],Dif_details.sasAddressLo[1],Dif_details.sasAddressLo[2],Dif_details.sasAddressLo[3]));
3800 SA_DBG2(("mpiSSPEvent: ExpectedCRCUDT01. 0x%08X ExpectedUDT2345. 0x%08X\n",Dif_details.ExpectedCRCUDT01, Dif_details.ExpectedUDT2345));
3801 SA_DBG2(("mpiSSPEvent: ActualCRCUDT01. 0x%08X ActualUDT2345. 0x%08X\n",Dif_details.ActualCRCUDT01, Dif_details.ActualUDT2345));
3802 SA_DBG2(("mpiSSPEvent: DIFErrDevID. 0x%08X ErrBoffsetEDataLen. 0x%08X\n",Dif_details.DIFErrDevID, Dif_details.ErrBoffsetEDataLen));
3803 }
3804
3805 default:
3806 {
3807 SA_DBG3(("mpiSSPEvent: Non DIF event"));
3808 break;
3809 }
3810 }
3811
3812
3813 /* get event */
3814 switch (event)
3815 {
3816 case OSSA_IO_OVERFLOW:
3817 {
3818 SA_DBG1(("mpiSSPEvent: OSSA_IO_OVERFLOW tag 0x%x ssptag 0x%x\n", tag, sspTag));
3820 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3821 break;
3822 }
3824 {
3825 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_BREAK tag 0x%x ssptag 0x%x\n", tag, sspTag));
3827 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3828 break;
3829 }
3831 {
3832 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_PHY_NOT_READY tag 0x%x ssptag 0x%x\n", tag, sspTag));
3834 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3835 break;
3836 }
3838 {
3839 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3841 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3842 break;
3843 }
3845 {
3846 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION tag 0x%x ssptag 0x%x\n", tag, sspTag));
3848 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3849 break;
3850 }
3852 {
3853 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_BREAK tag 0x%x ssptag 0x%x\n", tag, sspTag));
3855 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3856 break;
3857 }
3859 {
3860 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS tag 0x%x ssptag 0x%x\n", tag, sspTag));
3862 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3863 break;
3864 }
3866 {
3867 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION tag 0x%x ssptag 0x%x\n", tag, sspTag));
3869 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3870 break;
3871 }
3873 {
3874 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3876 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3877 break;
3878 }
3880 {
3881 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION tag 0x%x ssptag 0x%x\n", tag, sspTag));
3883 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3884 break;
3885 }
3887 {
3888 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_NAK_RECEIVED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3890 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3891 break;
3892 }
3894 {
3895 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_ACK_NAK_TIMEOUT tag 0x%x ssptag 0x%x\n", tag, sspTag));
3897 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3898 break;
3899 }
3901 {
3902 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_OFFSET_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
3903#ifdef SA_ENABLE_PCI_TRIGGER
3904 if( saRoot->swConfig.PCI_trigger & PCI_TRIGGER_OFFSET_MISMATCH )
3905 {
3906 siPCITriger(agRoot);
3907 }
3908#endif /* SA_ENABLE_PCI_TRIGGER */
3910 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3911 break;
3912 }
3914 {
3915 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN tag 0x%x ssptag 0x%x\n", tag, sspTag));
3917 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3918 break;
3919 }
3921 {
3922 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT tag 0x%x ssptag 0x%x\n", tag, sspTag));
3924 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3925 break;
3926 }
3928 {
3929 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_OPEN_RETRY_TIMEOUT tag 0x%x ssptag 0x%x\n", tag, sspTag));
3931 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3932 break;
3933 }
3935 {
3936 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN tag 0x%x ssptag 0x%x\n", tag, sspTag));
3938 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3939 break;
3940 }
3942 {
3943 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3945 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3946 break;
3947 }
3949 {
3950 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_CMD_FRAME_ISSUED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3952 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3953 break;
3954 }
3956 {
3957 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERROR_UNEXPECTED_PHASE tag 0x%x ssptag 0x%x\n", tag, sspTag));
3959 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3960 break;
3961 }
3963 {
3964 SA_DBG1(("mpiSSPEvent:OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED HTAG = 0x%x sspTag = 0x%x\n", tag, sspTag));
3966 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3967 break;
3968 }
3970 {
3971 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO tag 0x%x ssptag 0x%x\n", tag, sspTag));
3973 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3974 break;
3975 }
3977 {
3978 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST tag 0x%x ssptag 0x%x\n", tag, sspTag));
3980 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3981 break;
3982 }
3984 {
3985 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE tag 0x%x ssptag 0x%x\n", tag, sspTag));
3987 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3988 break;
3989 }
3991 {
3992 SA_DBG1(("mpiSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED tag 0x%x ssptag 0x%x\n", tag, sspTag));
3994 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
3995 break;
3996 }
3998 {
3999 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS tag 0x%x ssptag 0x%x\n", tag, sspTag));
4001 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
4002 break;
4003 }
4005 {
4006 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
4008 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
4009 break;
4010 }
4012 {
4013 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR HTAG = 0x%x\n", tag));
4015 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
4016 break;
4017 }
4019 {
4020 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
4022 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag,sizeof(agsaDifDetails_t),&Dif_details);
4023 break;
4024 }
4026 {
4027 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
4029 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag,sizeof(agsaDifDetails_t),&Dif_details);
4030 break;
4031 }
4033 {
4034 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
4036 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag,sizeof(agsaDifDetails_t),&Dif_details);
4037 break;
4038 }
4040 {
4041 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFR_ERROR_DIF_MISMATCH tag 0x%x ssptag 0x%x\n", tag, sspTag));
4043 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag,sizeof(agsaDifDetails_t),&Dif_details);
4044 break;
4045 }
4047 {
4048 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_ERR_EOB_DATA_OVERRUN tag 0x%x ssptag 0x%x\n", tag, sspTag));
4050 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0, agNULL);
4051 break;
4052 }
4054 {
4055 SA_DBG1(("mpiSSPEvent: OSSA_IO_XFER_READ_COMPL_ERR tag 0x%x ssptag 0x%x\n", tag, sspTag));
4057 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0, agNULL);
4058 break;
4059 }
4060 default:
4061 {
4062 SA_DBG1(("mpiSSPEvent: Unknown Event 0x%x tag 0x%x ssptag 0x%x\n", event, tag, sspTag));
4064 ossaSSPEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, sspTag, 0,agNULL);
4065 break;
4066 }
4067 }
4068
4069 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2u");
4070 /* return value */
4071 return ret;
4072}
4073
4074/******************************************************************************/
4085/*******************************************************************************/
4087 agsaRoot_t *agRoot,
4088 agsaSATAEventRsp_t *pIomb
4089 )
4090{
4091 bit32 ret = AGSA_RC_SUCCESS;
4092 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4093 agsaIORequestDesc_t *pRequest = agNULL;
4094 agsaPortContext_t *agPortContext;
4095 agsaDevHandle_t *agDevHandle;
4096 agsaDeviceDesc_t *pDevice;
4097 bit32 deviceIdx, portId_tmp, event, tag, deviceId;
4098 bit8 portId;
4099
4101
4102 /* get port context */
4103 OSSA_READ_LE_32(AGROOT, &portId_tmp, pIomb, OSSA_OFFSET_OF(agsaSATAEventRsp_t, portId));
4104 OSSA_READ_LE_32(AGROOT, &deviceId, pIomb, OSSA_OFFSET_OF(agsaSATAEventRsp_t, deviceId));
4105 OSSA_READ_LE_32(AGROOT, &event, pIomb, OSSA_OFFSET_OF(agsaSATAEventRsp_t, event));
4106 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSATAEventRsp_t, tag));
4107
4109 {
4110 /* get IORequest from IOMap */
4111 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4112 }
4113 /* get port context - only for OSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE */
4114 portId = (bit8)(portId_tmp & PORTID_MASK);
4115 SA_DBG2(("mpiSATAEvent:PortID 0x%x PortStatus 0x%x PortContext %p\n",saRoot->PortMap[portId & PORTID_MASK].PortID,saRoot->PortMap[portId & PORTID_MASK].PortStatus,saRoot->PortMap[portId & PORTID_MASK].PortContext));
4116 agPortContext = (agsaPortContext_t *)saRoot->PortMap[portId].PortContext;
4117 /* get device Id - only for OSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE*/
4118 deviceIdx = deviceId & DEVICE_ID_BITS;
4119 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
4120 /* find device handle from device index */
4121 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceIdx].DeviceHandle;
4122 agDevHandle = &(pDevice->targetDevHandle);
4123
4124 /* get event */
4125 switch (event)
4126 {
4127 case OSSA_IO_OVERFLOW:
4128 {
4129 SA_DBG1(("mpiSATAEvent: OSSA_IO_OVERFLOW HTAG = 0x%x\n", tag));
4131 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4132 break;
4133 }
4135 {
4136 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_BREAK HTAG = 0x%x\n", tag));
4138 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4139 break;
4140 }
4142 {
4143 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_PHY_NOT_READY HTAG = 0x%x\n", tag));
4145 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4146 break;
4147 }
4149 {
4150 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED HTAG = 0x%x\n", tag));
4152 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4153 break;
4154 }
4156 {
4157 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION HTAG = 0x%x\n", tag));
4159 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4160 break;
4161 }
4163 {
4164 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_BREAK HTAG = 0x%x\n", tag));
4166 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4167 break;
4168 }
4169
4171 {
4172 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST HTAG = 0x%x\n", tag));
4174 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4175 break;
4176 }
4178 {
4179 SA_DBG1(("mpiSATAEvent: HTAG = 0x%x\n", tag));
4181 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4182 break;
4183 }
4185 {
4186 SA_DBG1(("mpiSATAEvent:OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED HTAG = 0x%x\n", tag));
4188 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4189 break;
4190 }
4192 {
4193 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS HTAG = 0x%x\n", tag));
4195 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4196 break;
4197 }
4199 {
4200 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION HTAG = 0x%x\n", tag));
4202 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4203 break;
4204 }
4206 {
4207 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED HTAG = 0x%x\n", tag));
4209 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4210 break;
4211 }
4213 {
4214 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION HTAG = 0x%x\n", tag));
4216 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4217 break;
4218 }
4220 {
4221 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_NAK_RECEIVED HTAG = 0x%x\n", tag));
4223 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4224 break;
4225 }
4227 {
4228 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE HTAG = 0x%x\n", tag));
4230 ossaSATAEvent(agRoot, agNULL, agPortContext, agDevHandle, event, 0, agNULL);
4231 break;
4232 }
4234 {
4235 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_OFFSET_MISMATCH HTAG = 0x%x\n", tag));
4237 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4238 break;
4239 }
4241 {
4242 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN HTAG = 0x%x\n", tag));
4244 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4245 break;
4246 }
4248 {
4249 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_OPEN_RETRY_TIMEOUT HTAG = 0x%x\n", tag));
4251 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4252 break;
4253 }
4255 {
4256 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_PEER_ABORTED HTAG = 0x%x\n", tag));
4258 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4259 break;
4260 }
4262 {
4263 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_CMD_FRAME_ISSUED HTAG = 0x%x\n", tag));
4265 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4266 break;
4267 }
4269 {
4270 SA_DBG1(("mpiSATAEvent, OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY HTAG = 0x%x\n", tag));
4272 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4273 break;
4274 }
4276 {
4277 SA_DBG1(("mpiSATAEvent, OSSA_IO_XFER_ERROR_UNEXPECTED_PHASE HTAG = 0x%x\n", tag));
4279 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4280 break;
4281 }
4283 {
4284 SA_DBG1(("mpiSATAEvent, OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN HTAG = 0x%x\n", tag));
4286 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4287 break;
4288 }
4290 {
4291 SA_DBG1(("mpiSATAEvent, OSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED HTAG = 0x%x\n", tag));
4293 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4294 break;
4295 }
4297 {
4298 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_PIO_SETUP_ERROR HTAG = 0x%x\n", tag));
4300 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4301 break;
4302 }
4304 {
4305 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFR_ERROR_DIF_MISMATCH HTAG = 0x%x\n", tag));
4307 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4308 break;
4309 }
4311 {
4312 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR HTAG = 0x%x\n", tag));
4314 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4315 break;
4316 }
4318 {
4319 SA_DBG1(("mpiSATAEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED HTAG = 0x%x\n", tag));
4321 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4322 break;
4323 }
4325 {
4326 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERR_EOB_DATA_OVERRUN HTAG = 0x%x\n", tag));
4328 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4329 break;
4330 }
4332 {
4333 SA_DBG1(("mpiSATAEvent: OSSA_IO_XFER_ERROR_DMA_ACTIVATE_TIMEOUT HTAG = 0x%x\n", tag));
4335 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4336 break;
4337 }
4338 default:
4339 {
4340 SA_DBG1(("mpiSATAEvent: Unknown Event 0x%x HTAG = 0x%x\n", event, tag));
4342 ossaSATAEvent(agRoot, pRequest->pIORequestContext, agPortContext, agDevHandle, event, 0, agNULL);
4343 break;
4344 }
4345 }
4346
4347 /* return value */
4348 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2w");
4349 return ret;
4350}
4351
4352/******************************************************************************/
4363/*******************************************************************************/
4365 agsaRoot_t *agRoot,
4366 agsaSetNVMDataRsp_t *pIomb
4367 )
4368{
4369 bit32 ret = AGSA_RC_SUCCESS;
4370 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4371 agsaIORequestDesc_t *pRequest;
4372 agsaContext_t *agContext;
4373 bit32 tag, status, iPTdaBnDpsAsNvm;
4374
4376
4377 SA_DBG1(("mpiSetNVMDataRsp: HTag=0x%x\n", pIomb->tag));
4378
4379 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSetNVMDataRsp_t, tag));
4380 OSSA_READ_LE_32(AGROOT, &iPTdaBnDpsAsNvm, pIomb, OSSA_OFFSET_OF(agsaSetNVMDataRsp_t, iPTdaBnDpsAsNvm));
4381 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSetNVMDataRsp_t, status));
4382
4383 /* get request from IOMap */
4384 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4385 if (agNULL == pRequest)
4386 {
4387 SA_DBG1(("mpiSetNVMDataRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
4388 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2x");
4389 return AGSA_RC_FAILURE;
4390 }
4391
4392 agContext = saRoot->IOMap[tag].agContext;
4393 /* remove the request from IOMap */
4394 saRoot->IOMap[tag].Tag = MARK_OFF;
4395 saRoot->IOMap[tag].IORequest = agNULL;
4396 saRoot->IOMap[tag].agContext = agNULL;
4397
4398 SA_ASSERT((pRequest->valid), "pRequest->valid");
4399
4400 if (((iPTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_CONFIG_SEEPROM) ||
4401 ((iPTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_VPD_FLASH) ||
4402 ((iPTdaBnDpsAsNvm & NVMD_TYPE) == AGSA_NVMD_TWI_DEVICES))
4403 {
4404 /* CB for VPD for SEEPROM-0, VPD_FLASH and TWI */
4405 ossaSetNVMDResponseCB(agRoot, agContext, (status & NVMD_STAT));
4406 }
4407 else
4408 {
4409 /* should not happend */
4410 SA_DBG1(("mpiSetNVMDataRsp: NVMD is wrong. TAG=0x%x STATUS=0x%x\n", tag, (iPTdaBnDpsAsNvm & NVMD_TYPE)));
4411 ret = AGSA_RC_FAILURE;
4412 }
4413
4415 pRequest->valid = agFALSE;
4416 /* return the request to free pool */
4417 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4419
4420 /* return value */
4421 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2x");
4422 return ret;
4423}
4424
4425/******************************************************************************/
4436/*******************************************************************************/
4438 agsaRoot_t *agRoot,
4439 agsaSSPAbortRsp_t *pIomb
4440 )
4441{
4442 bit32 ret = AGSA_RC_SUCCESS;
4443 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4444 agsaIORequestDesc_t *pRequest;
4445 agsaDeviceDesc_t *pDevice;
4446 bit32 tag, status, scope;
4448
4449 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSSPAbortRsp_t, tag));
4450 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSSPAbortRsp_t, status));
4451 OSSA_READ_LE_32(AGROOT, &scope, pIomb, OSSA_OFFSET_OF(agsaSSPAbortRsp_t, scp));
4452 scope &= 3;
4453 /* get IORequest from IOMap */
4454 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4455
4456 if (agNULL == pRequest)
4457 {
4458 /* remove the SSP_ABORT or SATA_ABORT request from IOMap */
4459 saRoot->IOMap[tag].Tag = MARK_OFF;
4460 saRoot->IOMap[tag].IORequest = agNULL;
4461 SA_ASSERT((pRequest), "pRequest");
4462 SA_DBG1(("mpiSSPAbortRsp: the request is NULL. Tag=%x\n", tag));
4463 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2y");
4464 return AGSA_RC_FAILURE;
4465 }
4466
4467
4468 if ( agTRUE == pRequest->valid )
4469 {
4470 pDevice = pRequest->pDevice;
4471 SA_ASSERT((pRequest->pDevice), "pRequest->pDevice");
4472
4473 SA_DBG3(("mpiSSPAbortRsp: request abort is valid Htag 0x%x\n", tag));
4474 /* remove the SSP_ABORT or SATA_ABORT request from IOMap */
4475 saRoot->IOMap[tag].Tag = MARK_OFF;
4476 saRoot->IOMap[tag].IORequest = agNULL;
4477
4478 if( pRequest->completionCB == agNULL )
4479 {
4480 ossaSSPAbortCB(agRoot, pRequest->pIORequestContext, scope, status);
4481 }
4482 else
4483 {
4484 (*(ossaGenericAbortCB_t)(pRequest->completionCB))(agRoot, pRequest->pIORequestContext, scope, status);
4485 }
4486
4488 pRequest->valid = agFALSE;
4489 /* Delete the request from the pendingIORequests */
4490 saLlistIORemove(&(pDevice->pendingIORequests), &(pRequest->linkNode));
4491
4493 {
4494 SA_DBG1(("mpiSSPAbortRsp: saving pRequest (%p) for later use\n", pRequest));
4495 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
4496 }
4497 else
4498 {
4499 /* return the request to free pool */
4500 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4501 }
4502
4503 if(scope)
4504 {
4506 }
4507
4509
4510 }
4511 else
4512 {
4513 ret = AGSA_RC_FAILURE;
4514 SA_DBG1(("mpiSSPAbortRsp: the request is not valid any more. Tag=%x\n", pRequest->HTag));
4515 }
4516
4517 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2y");
4518 return ret;
4519}
4520
4521/******************************************************************************/
4532/*******************************************************************************/
4534 agsaRoot_t *agRoot,
4535 agsaSATAAbortRsp_t *pIomb
4536 )
4537{
4538 bit32 ret = AGSA_RC_SUCCESS;
4539 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4540 agsaIORequestDesc_t *pRequest;
4541 agsaDeviceDesc_t *pDevice;
4542 bit32 tag, status, scope;
4543
4545 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSATAAbortRsp_t, tag));
4546 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSATAAbortRsp_t, status));
4547 OSSA_READ_LE_32(AGROOT, &scope, pIomb, OSSA_OFFSET_OF(agsaSATAAbortRsp_t, scp));
4548
4549 /* get IORequest from IOMap */
4550 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4551
4552 if (agNULL == pRequest)
4553 {
4554 /* remove the SSP_ABORT or SATA_ABORT request from IOMap */
4555 saRoot->IOMap[tag].Tag = MARK_OFF;
4556 saRoot->IOMap[tag].IORequest = agNULL;
4557 SA_DBG1(("mpiSATAAbortRsp: the request is NULL. Tag=%x\n", tag));
4558 SA_ASSERT((pRequest), "pRequest");
4559 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3B");
4560 return AGSA_RC_FAILURE;
4561 }
4562
4563 if ( agTRUE == pRequest->valid )
4564 {
4565 pDevice = pRequest->pDevice;
4566 SA_ASSERT((pRequest->pDevice), "pRequest->pDevice");
4567
4568 SA_DBG3(("mpiSATAAbortRsp: request abort is valid Htag 0x%x\n", tag));
4569
4570 if( pRequest->completionCB == agNULL )
4571 {
4572 ossaSATAAbortCB(agRoot, pRequest->pIORequestContext, scope, status);
4573 }
4574 else
4575 {
4576 (*(ossaGenericAbortCB_t)(pRequest->completionCB))(agRoot, pRequest->pIORequestContext, scope, status);
4577 }
4578 /* remove the SATA_ABORT request from IOMap */
4579 saRoot->IOMap[tag].Tag = MARK_OFF;
4580 saRoot->IOMap[tag].IORequest = agNULL;
4581 saRoot->IOMap[tag].agContext = agNULL;
4582
4584 pRequest->valid = agFALSE;
4585 /* Delete the request from the pendingIORequests */
4586 saLlistIORemove(&(pDevice->pendingIORequests), &(pRequest->linkNode));
4587 /* return the request to free pool */
4588 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4590
4591 }
4592 else
4593 {
4594 ret = AGSA_RC_FAILURE;
4595 SA_DBG1(("mpiSATAAbortRsp: the request is not valid any more. Tag=%x\n", pRequest->HTag));
4596 }
4597
4598
4599 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3B");
4600 return ret;
4601}
4602
4603/******************************************************************************/
4614/*******************************************************************************/
4616 agsaRoot_t *agRoot,
4617 agsaGPIORsp_t *pIomb
4618 )
4619{
4620 bit32 ret = AGSA_RC_SUCCESS;
4621 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4622 agsaContext_t *agContext;
4623 agsaIORequestDesc_t *pRequest;
4624 agsaGpioPinSetupInfo_t pinSetupInfo;
4625 agsaGpioEventSetupInfo_t eventSetupInfo;
4626 bit32 GpioIe, OT11_0, OT19_12, GPIEVChange, GPIEVFall, GPIEVRise, GpioRdVal, tag;
4627
4629
4630 SA_DBG3(("mpiGPIORsp: HTag=0x%x\n", pIomb->tag));
4631
4632 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, tag));
4633
4634 /* get request from IOMap */
4635 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4636 if (agNULL == pRequest)
4637 {
4638 SA_DBG1(("mpiGPIORsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x\n", tag));
4639 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "5C");
4640 return AGSA_RC_FAILURE;
4641 }
4642
4643 agContext = saRoot->IOMap[tag].agContext;
4644 /* remove the request from IOMap */
4645 saRoot->IOMap[tag].Tag = MARK_OFF;
4646 saRoot->IOMap[tag].IORequest = agNULL;
4647 saRoot->IOMap[tag].agContext = agNULL;
4648 SA_ASSERT((pRequest->valid), "pRequest->valid");
4649
4650 /* set payload to zeros */
4651 si_memset(&pinSetupInfo, 0, sizeof(agsaGpioPinSetupInfo_t));
4652 si_memset(&eventSetupInfo, 0, sizeof(agsaGpioEventSetupInfo_t));
4653
4654 OSSA_READ_LE_32(AGROOT, &GpioIe, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, GpioIe));
4655 OSSA_READ_LE_32(AGROOT, &OT11_0, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, OT11_0));
4656 OSSA_READ_LE_32(AGROOT, &OT19_12, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, OT19_12));
4657 OSSA_READ_LE_32(AGROOT, &GPIEVChange, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, GPIEVChange));
4658 OSSA_READ_LE_32(AGROOT, &GPIEVFall, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, GPIEVFall));
4659 OSSA_READ_LE_32(AGROOT, &GPIEVRise, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, GPIEVRise));
4660 OSSA_READ_LE_32(AGROOT, &GpioRdVal, pIomb, OSSA_OFFSET_OF(agsaGPIORsp_t, GpioRdVal));
4661 pinSetupInfo.gpioInputEnabled = GpioIe;
4662 pinSetupInfo.gpioTypePart1 = OT11_0;
4663 pinSetupInfo.gpioTypePart2 = OT19_12;
4664 eventSetupInfo.gpioEventLevel = GPIEVChange;
4665 eventSetupInfo.gpioEventFallingEdge = GPIEVFall;
4666 eventSetupInfo.gpioEventRisingEdge = GPIEVRise;
4667
4668 ossaGpioResponseCB(agRoot, agContext, OSSA_IO_SUCCESS, GpioRdVal,
4669 &pinSetupInfo,
4670 &eventSetupInfo);
4671
4673 pRequest->valid = agFALSE;
4674 /* return the request to free pool */
4676 {
4677 SA_DBG1(("mpiGPIORsp: saving pRequest (%p) for later use\n", pRequest));
4678 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
4679 }
4680 else
4681 {
4682 /* return the request to free pool */
4683 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4684 }
4686
4687 /* return value */
4688 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "5C");
4689 return ret;
4690}
4691
4692/******************************************************************************/
4703/*******************************************************************************/
4705 agsaRoot_t *agRoot,
4706 agsaGPIOEvent_t *pIomb
4707 )
4708{
4709 bit32 ret = AGSA_RC_SUCCESS;
4710 bit32 GpioEvent;
4711
4713
4714 OSSA_READ_LE_32(AGROOT, &GpioEvent, pIomb, OSSA_OFFSET_OF(agsaGPIOEvent_t, GpioEvent));
4715
4716 ossaGpioEvent(agRoot, GpioEvent);
4717
4718 /* return value */
4719 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3D");
4720 return ret;
4721}
4722
4723/******************************************************************************/
4734/*******************************************************************************/
4736 agsaRoot_t *agRoot,
4738 )
4739{
4740 bit32 ret = AGSA_RC_SUCCESS;
4741 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4742 agsaIORequestDesc_t *pRequest;
4743 agsaContext_t *agContext;
4744 bit32 tag, Status;
4745
4747
4748 SA_DBG3(("mpiSASDiagStartEndRsp: HTAG=0x%x\n", pIomb->tag));
4749
4750 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSASDiagStartEndRsp_t, tag));
4751 OSSA_READ_LE_32(AGROOT, &Status, pIomb, OSSA_OFFSET_OF(agsaSASDiagStartEndRsp_t, Status));
4752
4753 /* get request from IOMap */
4754 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4755 if (agNULL == pRequest)
4756 {
4757 SA_DBG1(("mpiSASDiagStartEndRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, Status));
4758 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2F");
4759 return AGSA_RC_FAILURE;
4760 }
4761
4762 agContext = saRoot->IOMap[tag].agContext;
4763 /* remove the request from IOMap */
4764 saRoot->IOMap[tag].Tag = MARK_OFF;
4765 saRoot->IOMap[tag].IORequest = agNULL;
4766 saRoot->IOMap[tag].agContext = agNULL;
4767
4768 SA_ASSERT((pRequest->valid), "pRequest->valid");
4769
4770 switch(Status)
4771 {
4772
4774 SA_DBG3(("mpiSASDiagStartEndRsp: Status OSSA_DIAG_SE_SUCCESS 0x%X \n", Status));
4775 break;
4777 SA_DBG1(("mpiSASDiagStartEndRsp: Status OSSA_DIAG_SE_INVALID_PHY_ID 0x%X \n", Status));
4778 break;
4780 SA_DBG1(("mpiSASDiagStartEndRsp: Status OSSA_DIAG_PHY_NOT_DISABLED Status 0x%X \n", Status));
4781 break;
4783 if(smIS_SPCV(agRoot))
4784 {
4785 SA_DBG1(("mpiSASDiagStartEndRsp: Status OSSA_DIAG_OTHER_FAILURE Status 0x%X \n", Status));
4786 }
4787 else
4788 {
4789 SA_DBG1(("mpiSASDiagStartEndRsp: Status OSSA_DIAG_OPCODE_INVALID Status 0x%X \n", Status));
4790 }
4791 break;
4792 default:
4793 SA_DBG1(("mpiSASDiagStartEndRsp:Status UNKNOWN 0x%X \n", Status));
4794 break;
4795 }
4796
4797 ossaSASDiagStartEndCB(agRoot, agContext, Status);
4798
4800 pRequest->valid = agFALSE;
4801 /* return the request to free pool */
4803 {
4804 SA_DBG1(("mpiSASDiagStartEndRsp: saving pRequest (%p) for later use\n", pRequest));
4805 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
4806 }
4807 else
4808 {
4809 /* return the request to free pool */
4810 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4811 }
4813
4814 /* return value */
4815 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2F");
4816 return ret;
4817}
4818
4819/******************************************************************************/
4830/*******************************************************************************/
4832 agsaRoot_t *agRoot,
4834 )
4835{
4836 bit32 ret = AGSA_RC_SUCCESS;
4837 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4838 agsaIORequestDesc_t *pRequest;
4839 agsaContext_t *agContext;
4840 bit32 tag, Status, CmdTypeDescPhyId, ReportData;
4842
4843 SA_DBG3(("mpiSASDiagExecuteRsp: HTAG=0x%x\n", pIomb->tag));
4844
4845 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSASDiagExecuteRsp_t, tag));
4846 OSSA_READ_LE_32(AGROOT, &Status, pIomb, OSSA_OFFSET_OF(agsaSASDiagExecuteRsp_t, Status));
4847 OSSA_READ_LE_32(AGROOT, &CmdTypeDescPhyId, pIomb, OSSA_OFFSET_OF(agsaSASDiagExecuteRsp_t, CmdTypeDescPhyId));
4848 OSSA_READ_LE_32(AGROOT, &ReportData, pIomb, OSSA_OFFSET_OF(agsaSASDiagExecuteRsp_t, ReportData));
4849 /* get request from IOMap */
4850 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
4851 if (agNULL == pRequest)
4852 {
4853 SA_DBG1(("mpiSASDiagExecuteRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x STATUS=0x%x\n", tag, Status));
4854 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3G");
4855 return AGSA_RC_FAILURE;
4856 }
4857
4858 switch(Status)
4859 {
4860
4861 case OSSA_DIAG_SUCCESS:
4862 SA_DBG3(("mpiSASDiagExecuteRsp: Status OSSA_DIAG_SUCCESS 0x%X \n", Status));
4863 break;
4865 if(smIS_SPCV(agRoot))
4866 {
4867 SA_DBG1(("mpiSASDiagExecuteRsp: Status OSSA_DIAG_INVALID_COMMAND Status 0x%X \n", Status));
4868 }
4869 else
4870 {
4871 SA_DBG1(("mpiSASDiagExecuteRsp: Status OSSA_DIAG_FAIL Status 0x%X \n", Status));
4872 }
4873 break;
4875 SA_DBG1(("mpiSASDiagExecuteRsp: Status OSSA_REGISTER_ACCESS_TIMEOUT Status 0x%X \n", Status));
4876 break;
4878 SA_DBG1(("mpiSASDiagExecuteRsp: Status OSSA_DIAG_NOT_IN_DIAGNOSTIC_MODE Status 0x%X \n", Status));
4879 break;
4881 SA_DBG1(("mpiSASDiagExecuteRsp: Status OSSA_DIAG_INVALID_PHY Status 0x%X \n", Status));
4882 break;
4884 SA_DBG1(("mpiSASDiagExecuteRsp: Status Status 0x%X \n", Status));
4885 break;
4886
4887 default:
4888 SA_DBG1(("mpiSASDiagExecuteRsp:Status UNKNOWN 0x%X \n", Status));
4889 break;
4890 }
4891
4892
4893 agContext = saRoot->IOMap[tag].agContext;
4894 /* remove the request from IOMap */
4895 saRoot->IOMap[tag].Tag = MARK_OFF;
4896 saRoot->IOMap[tag].IORequest = agNULL;
4897 saRoot->IOMap[tag].agContext = agNULL;
4898
4899 SA_ASSERT((pRequest->valid), "pRequest->valid");
4900
4901 ossaSASDiagExecuteCB(agRoot, agContext, Status, CmdTypeDescPhyId, ReportData);
4902
4904 pRequest->valid = agFALSE;
4905 /* return the request to free pool */
4907 {
4908 SA_DBG1(("mpiSASDiagExecuteRsp: saving pRequest (%p) for later use\n", pRequest));
4909 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
4910 }
4911 else
4912 {
4913 /* return the request to free pool */
4914 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
4915 }
4917
4918 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3G");
4919
4920 /* return value */
4921 return ret;
4922}
4923
4924/******************************************************************************/
4935/*******************************************************************************/
4937 agsaRoot_t *agRoot,
4939 )
4940{
4941 bit32 ret = AGSA_RC_SUCCESS;
4942 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
4943 bit32 i;
4944 bit32 status;
4945 bit32 tag;
4946 agsaIORequestDesc_t *pRequest;
4947 agsaDeviceDesc_t *pDevice;
4948 agsaContext_t *agContext = NULL;
4949 agsaGeneralEventRsp_t GenEventData;
4950 agsaHWEventEncrypt_t agEvent;
4951 bit16 OpCode = 0;
4952
4954
4955 si_memset(&GenEventData,0,sizeof(agsaGeneralEventRsp_t));
4956
4957 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGeneralEventRsp_t, status));
4958
4959 SA_DBG3(("mpiGeneralEventRsp: %p\n", pIomb));
4960
4961 SA_DBG1(("mpiGeneralEventRsp: OpCode 0x%X status 0x%x\n",pIomb->inbIOMBpayload[0] & OPCODE_BITS, status));
4962
4963 for (i = 0; i < GENERAL_EVENT_PAYLOAD; i++)
4964 {
4965 OSSA_READ_LE_32(AGROOT, &GenEventData.inbIOMBpayload[i], pIomb, OSSA_OFFSET_OF(agsaGeneralEventRsp_t,inbIOMBpayload[i] ));
4966 }
4967 SA_DBG1(("mpiGeneralEventRsp: inbIOMBpayload 0x%08x 0x%08x 0x%08x 0x%08x\n",
4968 GenEventData.inbIOMBpayload[0],GenEventData.inbIOMBpayload[1],
4969 GenEventData.inbIOMBpayload[2],GenEventData.inbIOMBpayload[3] ));
4970 SA_DBG1(("mpiGeneralEventRsp: inbIOMBpayload 0x%08x 0x%08x 0x%08x 0x%08x\n",
4971 GenEventData.inbIOMBpayload[4],GenEventData.inbIOMBpayload[8],
4972 GenEventData.inbIOMBpayload[6],GenEventData.inbIOMBpayload[7] ));
4973
4974 switch (status) /*status */
4975 {
4976
4978 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_IOMB_V_BIT_NOT_SET\n" ));
4979 break;
4981 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_INBOUND_IOMB_OPC_NOT_SUPPORTED\n" ));
4982 break;
4984 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_IOMB_INVALID_OBID\n" ));
4985 break;
4987 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_DS_IN_NON_OPERATIONAL\n" ));
4988 break;
4990 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_DS_IN_RECOVERY\n" ));
4991 break;
4993 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_DS_INVALID\n" ));
4994 break;
4996 SA_DBG1(("mpiGeneralEventRsp: GEN_EVENT_IO_XFER_READ_COMPL_ERR 0x%x 0x%x 0x%x\n",
4997 GenEventData.inbIOMBpayload[0],
4998 GenEventData.inbIOMBpayload[1],
4999 GenEventData.inbIOMBpayload[1] ));
5000 ossaGeneralEvent(agRoot, status, agContext, GenEventData.inbIOMBpayload);
5001 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3H");
5002 return(ret);
5003 default:
5004 SA_DBG1(("mpiGeneralEventRsp: Unknown General Event status!!! 0x%x\n", status));
5005 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3H");
5006 return AGSA_RC_FAILURE;
5007 }
5008
5009 OpCode = (bit16)(GenEventData.inbIOMBpayload[0] & OPCODE_BITS);
5010 tag = GenEventData.inbIOMBpayload[1];
5011 SA_DBG1(("mpiGeneralEventRsp:OpCode 0x%X [0] 0x%08x\n" ,OpCode,(bit16)(GenEventData.inbIOMBpayload[0] & OPCODE_BITS)));
5012
5013 switch (OpCode) /* OpCode */
5014 {
5016 case OPC_INB_ECHO:
5026 case OPC_INB_PHYSTART:
5027 case OPC_INB_PHYSTOP:
5029 case OPC_INB_GPIO:
5035// case OPC_INB_PCIE_DIAG_EXECUTE:
5041// case OPC_INB_SGPIO:
5042
5043#ifdef SPC_ENABLE_PROFILE
5044 case OPC_INB_FW_PROFILE:
5045#endif
5046 /* Uses the tag table, so we have to free it up */
5047
5048 SA_ASSERT((tag < AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs),
5049 "OPC_OUB_GENERAL_EVENT tag out of range");
5050 SA_ASSERT((saRoot->IOMap[ tag < (AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs) ? tag : 0 ].Tag != MARK_OFF),
5051 "OPC_OUB_GENERAL_EVENT tag not in use 1");
5052
5053#if defined(SALLSDK_DEBUG)
5054 if (tag > AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs)
5055 {
5056 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "3H");
5057 return AGSA_RC_FAILURE;
5058 }
5059#endif /* SALLSDK_DEBUG */
5060
5061 SA_DBG1(("mpiGeneralEventRsp:OpCode found 0x%x htag 0x%x\n",OpCode, tag));
5062 /* get agContext */
5063 agContext = saRoot->IOMap[tag].agContext;
5064 /* get request from IOMap */
5065 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5066 if(pRequest)
5067 {
5068 /* remove the request from IOMap */
5069 saRoot->IOMap[tag].Tag = MARK_OFF;
5070 saRoot->IOMap[tag].IORequest = agNULL;
5071 saRoot->IOMap[tag].agContext = agNULL;
5072
5074 SA_ASSERT((pRequest->valid), "pRequest->valid");
5075 pRequest->valid = agFALSE;
5076 /* return the request to free pool */
5078 {
5079 SA_DBG1(("mpiGeneralEventRsp: saving pRequest (%p) for later use\n", pRequest));
5080 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5081 }
5082 else
5083 {
5084 /* return the request to free pool */
5085 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5086 }
5088 }
5089 else
5090 {
5091 SA_DBG1(("mpiGeneralEventRsp:pRequest (%p) NULL\n", pRequest));
5092 ret = AGSA_RC_FAILURE;
5093 }
5094 break;
5095 /* ???? */
5097 case OPC_INB_SATA_ABORT:
5105
5106 case OPC_INB_SSP_ABORT:
5108 case OPC_INB_SMP_ABORT:
5109 {
5110 /* Uses the tag table, so we have to free it up */
5111 SA_DBG1(("mpiGeneralEventRsp:OpCode found 0x%x htag 0x%x\n",OpCode, tag));
5112
5113 tag = GenEventData.inbIOMBpayload[1];
5114
5115 SA_ASSERT((tag < AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs),
5116 "OPC_OUB_GENERAL_EVENT tag out of range");
5117 SA_ASSERT((saRoot->IOMap[ tag < (AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs) ? tag : 0 ].Tag != MARK_OFF),
5118 "OPC_OUB_GENERAL_EVENT tag not in use 2");
5119#if defined(SALLSDK_DEBUG)
5120 if (tag > AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs)
5121 {
5122 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "3H");
5123 return AGSA_RC_FAILURE;
5124 }
5125#endif
5126 /* get request from IOMap */
5127 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5128 if(pRequest)
5129 {
5130 pDevice = pRequest->pDevice;
5131 /* return the request to free pool */
5132 /* get IORequestContext */
5133 agContext = (agsaContext_t *)pRequest->pIORequestContext;
5134 /* remove the request from IOMap */
5135 saRoot->IOMap[tag].Tag = MARK_OFF;
5136 saRoot->IOMap[tag].IORequest = agNULL;
5137 saRoot->IOMap[tag].agContext = agNULL;
5138
5140 SA_ASSERT((pRequest->valid), "pRequest->valid");
5141 pRequest->valid = agFALSE;
5142 saLlistIORemove(&(pDevice->pendingIORequests), &(pRequest->linkNode));
5144 {
5145 SA_DBG1(("mpiGeneralEventRsp: saving pRequest (%p) for later use\n", pRequest));
5146 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5147 }
5148 else
5149 {
5150 /* return the request to free pool */
5151 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5152 }
5154 break;
5155 }
5156 else
5157 {
5158 SA_DBG1(("mpiGeneralEventRsp:pRequest (%p) NULL\n", pRequest));
5159 ret = AGSA_RC_FAILURE;
5160 }
5161 }
5162 default:
5163 {
5164 SA_DBG1(("mpiGeneralEventRsp:OpCode Not found 0x%x htag 0x%x\n",OpCode, tag));
5165 ret = AGSA_RC_FAILURE;
5166
5167 /* Uses the tag table, so we have to free it up */
5168 tag = GenEventData.inbIOMBpayload[1];
5169
5170 SA_ASSERT((tag < AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs),
5171 "OPC_OUB_GENERAL_EVENT tag out of range");
5172 SA_ASSERT((saRoot->IOMap[ tag < (AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs) ? tag : 0 ].Tag != MARK_OFF),
5173 "OPC_OUB_GENERAL_EVENT tag not in use 3");
5174
5175#if defined(SALLSDK_DEBUG)
5176 if (tag > AGSA_MAX_VALID_PORTS * saRoot->swConfig.maxActiveIOs)
5177 {
5178 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "3H");
5179 return AGSA_RC_FAILURE;
5180 }
5181#endif
5182 /* get agContext */
5183 agContext = saRoot->IOMap[tag].agContext;
5184 /* get request from IOMap */
5185 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5186 if (pRequest == agNULL)
5187 {
5188 smTraceFuncExit(hpDBG_VERY_LOUD, 'f', "3H");
5189 return AGSA_RC_FAILURE;
5190 }
5191
5192 /* remove the request from IOMap */
5193 saRoot->IOMap[tag].Tag = MARK_OFF;
5194 saRoot->IOMap[tag].IORequest = agNULL;
5195 saRoot->IOMap[tag].agContext = agNULL;
5196
5198 SA_ASSERT((pRequest->valid), "pRequest->valid");
5199 pRequest->valid = agFALSE;
5200 /* return the request to free pool */
5202 {
5203 SA_DBG1(("mpiGeneralEventRsp: saving pRequest (%p) for later use\n", pRequest));
5204 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5205 }
5206 else
5207 {
5208 /* return the request to free pool */
5209 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5210 }
5212 break;
5213 }
5214 ret = AGSA_RC_FAILURE;
5215
5216 }
5217
5218 switch (OpCode) /* OpCode */
5219 {
5220
5222 {
5223 bit32 flags = GenEventData.inbIOMBpayload[2];
5224
5225 SA_DBG1(("mpiGeneralEventRsp: OPC_INB_KEK_MANAGEMENT 0x%x htag 0x%x flags 0x%x\n",OpCode, tag, flags));
5226 if (flags & 0xFF00) /* update and store*/
5227 {
5229 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE\n"));
5230 }
5231 else /* update */
5232 {
5234 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_KEK_UPDATE\n"));
5235 }
5237 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
5238 agEvent.status = status;
5239
5240 SA_DBG1(("mpiGeneralEventRsp: ossaHwCB OSSA_HW_EVENT_ENCRYPTION\n" ));
5241 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_ENCRYPTION, 0, (void*)&agEvent, agContext);
5242 break;
5243 }
5244 case OPC_INB_OPR_MGMT:
5245 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
5246 agEvent.status = status;
5248
5249 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT\n" ));
5250 ossaOperatorManagementCB(agRoot, agContext, status, 0);
5251 break;
5253 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_SET_OPERATOR\n" ));
5254 ossaSetOperatorCB(agRoot,agContext,0xFF,0xFF );
5255 break;
5257 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_GET_OPERATOR\n" ));
5258 ossaGetOperatorCB(agRoot,agContext,0xFF,0xFF,0xFF,0xFF,agNULL );
5259 break;
5261 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
5262 agEvent.status = status;
5264
5265 SA_DBG1(("mpiGeneralEventRsp: OSSA_HW_ENCRYPT_TEST_EXECUTE\n" ));
5266 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_ENCRYPTION, 0, (void*)&agEvent, agContext);
5267 break;
5268 default:
5269 SA_DBG1(("mpiGeneralEventRsp: MGMNT OpCode Not found 0x%x\n",OpCode ));
5270 ossaGeneralEvent(agRoot, status, agContext, GenEventData.inbIOMBpayload);
5271 break;
5272 }
5273
5274 /* return value */
5275 smTraceFuncExit(hpDBG_VERY_LOUD, 'g', "3H");
5276 return ret;
5277}
5278
5279/******************************************************************************/
5290/*******************************************************************************/
5292 agsaRoot_t *agRoot,
5294{
5295 bit32 ret = AGSA_RC_SUCCESS;
5296 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5297 agsaDeviceDesc_t *pDevice;
5298 bit32 deviceid, iniTagSSPIul, frameTypeHssa, TlrHdsa;
5299
5301 /* convert endiness if necassary */
5302 OSSA_READ_LE_32(AGROOT, &deviceid, pMsg1, OSSA_OFFSET_OF(agsaSSPReqReceivedNotify_t, deviceId));
5303 OSSA_READ_LE_32(AGROOT, &iniTagSSPIul, pMsg1, OSSA_OFFSET_OF(agsaSSPReqReceivedNotify_t, iniTagSSPIul));
5304 OSSA_READ_LE_32(AGROOT, &frameTypeHssa, pMsg1, OSSA_OFFSET_OF(agsaSSPReqReceivedNotify_t, frameTypeHssa));
5305 OSSA_READ_LE_32(AGROOT, &TlrHdsa, pMsg1, OSSA_OFFSET_OF(agsaSSPReqReceivedNotify_t, TlrHdsa));
5306 /* deviceId -> agDeviceHandle */
5307 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
5308
5309 if (agNULL == pDevice)
5310 {
5311 SA_DBG1(("mpiSSPReqReceivedNotify: warning!!! no deviceHandle is found"));
5312 }
5313 else
5314 {
5315 /* type punning only safe through char *. See gcc -fstrict_aliasing. */
5316 char * safe_type_pun = (char *)&(pMsg1->SSPIu[0]);
5317 if( pDevice->initiatorDevHandle.sdkData != agNULL)
5318 {
5319 ossaSSPReqReceived(agRoot, &(pDevice->initiatorDevHandle),
5320 (agsaFrameHandle_t *)safe_type_pun,
5321 (bit16)((iniTagSSPIul >> SHIFT16) & INITTAG_BITS),
5322 ((frameTypeHssa >> SHIFT24) & FRAME_TYPE) |
5323 ((TlrHdsa >> SHIFT16) & TLR_BITS),
5324 (iniTagSSPIul & SSPIUL_BITS));
5325 }else if( pDevice->targetDevHandle.sdkData != agNULL)
5326 {
5327 ossaSSPReqReceived(agRoot, &(pDevice->targetDevHandle),
5328 (agsaFrameHandle_t *)safe_type_pun,
5329 (bit16)((iniTagSSPIul >> SHIFT16) & INITTAG_BITS),
5330 ((frameTypeHssa >> SHIFT24) & FRAME_TYPE) |
5331 ((TlrHdsa >> SHIFT16) & TLR_BITS),
5332 (iniTagSSPIul & SSPIUL_BITS));
5333 }else
5334 {
5335 SA_ASSERT(0, "Device handle sdkData not set");
5336 }
5337 }
5338
5339 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3J");
5340 return ret;
5341}
5342
5343/******************************************************************************/
5354/*******************************************************************************/
5356 agsaRoot_t *agRoot,
5358{
5359 bit32 ret = AGSA_RC_SUCCESS;
5360 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5361 agsaDeviceDesc_t *pDevice;
5362 agsaPort_t *pPort;
5363 agsaSASDeviceInfo_t pDeviceInfo;
5364 agsaPortContext_t *agPortContext;
5365 agsaSASIdentify_t remoteIdentify;
5366 bit32 CTag;
5367 bit32 FwdDeviceId;
5368 bit32 ProtConrPortId;
5369 bit32 portId;
5370 bit32 conRate;
5371 bit8 i, protocol, dTypeSRate;
5372 bit32 HostAssignedId;
5373
5374 if(saRoot == agNULL)
5375 {
5376 SA_ASSERT((saRoot != agNULL), "saRoot");
5377 return AGSA_RC_FAILURE;
5378 }
5379
5381 /* convert endiness if necassary */
5382 OSSA_READ_LE_32(AGROOT, &CTag, pMsg1, OSSA_OFFSET_OF(agsaDeviceHandleArrivedNotify_t, CTag));
5383 OSSA_READ_LE_32(AGROOT, &FwdDeviceId, pMsg1, OSSA_OFFSET_OF(agsaDeviceHandleArrivedNotify_t, HostAssignedIdFwdDeviceId));
5384 OSSA_READ_LE_32(AGROOT, &ProtConrPortId, pMsg1, OSSA_OFFSET_OF(agsaDeviceHandleArrivedNotify_t, ProtConrPortId));
5385
5386
5387 if(smIS_SPCV(agRoot))
5388 {
5389 portId = ProtConrPortId & PortId_V_MASK;
5390 conRate = (ProtConrPortId & Conrate_V_MASK ) >> Conrate_V_SHIFT;
5391
5392 HostAssignedId = (FwdDeviceId & 0xFFFF0000) >> SHIFT16;
5393 if(HostAssignedId)
5394 {
5395 SA_DBG1(("mpiDeviceHandleArrived: HostAssignedId 0x%X\n",HostAssignedId));
5396 }
5397 }
5398 else
5399 {
5400 portId = ProtConrPortId & PortId_SPC_MASK;
5401 conRate = (ProtConrPortId & Conrate_SPC_MASK ) >> Conrate_SPC_SHIFT;
5402 }
5403 protocol =(bit8)((ProtConrPortId & PROTOCOL_BITS ) >> PROTOCOL_SHIFT);
5404
5405 SA_DBG1(("mpiDeviceHandleArrived: New Port portID %d deviceid 0x%X conRate 0x%X protocol 0x%X\n",portId, FwdDeviceId,conRate,protocol));
5406
5407 /* Port Map */
5408 agPortContext = saRoot->PortMap[portId].PortContext;
5409 if (agNULL == agPortContext)
5410 {
5412 /* new port */
5413 /* Acquire port list lock */
5414 /* Allocate a free port */
5415 pPort = (agsaPort_t *) saLlistGetHead(&(saRoot->freePorts));
5416 if (agNULL != pPort)
5417 {
5418 saLlistRemove(&(saRoot->freePorts), &(pPort->linkNode));
5419
5420 /* setup the port data structure */
5421 pPort->portContext.osData = agNULL;
5422 pPort->portContext.sdkData = pPort;
5423 pPort->tobedeleted = agFALSE;
5424 /* Add to valid port list */
5425 saLlistAdd(&(saRoot->validPorts), &(pPort->linkNode));
5426 /* Release port list lock */
5428
5429 /* Setup portMap based on portId */
5430 saRoot->PortMap[portId].PortID = portId;
5431 saRoot->PortMap[portId].PortContext = &(pPort->portContext);
5432 saRoot->PortMap[portId].PortStatus &= ~PORT_INVALIDATING;
5433 pPort->portId = portId;
5434
5435 pPort->status &= ~PORT_INVALIDATING;
5436 SA_DBG3(("mpiDeviceHandleArrived: ~PORT_INVALIDATING New Port portID %d PortContext %p\n",saRoot->PortMap[pPort->portId].PortID , &pPort->portContext));
5437 }
5438 else
5439 {
5441 SA_DBG2(("mpiDeviceHandleArrived:Port NULL\n"));
5442 /* pPort is agNULL*/
5443 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3L");
5444 return AGSA_RC_FAILURE;
5445 }
5446 }
5447 else
5448 {
5449 /* exist port */
5450 pPort = (agsaPort_t *) (agPortContext->sdkData);
5451 pPort->status &= ~PORT_INVALIDATING;
5452 pPort->portId =portId;
5453 saRoot->PortMap[pPort->portId].PortStatus &= ~PORT_INVALIDATING;
5454
5455 SA_DBG1(("mpiDeviceHandleArrived: ~PORT_INVALIDATING Old port portID %d PortContext %p\n", portId, &pPort->portContext));
5456
5457 }
5458 /* build Device Information structure */
5459 si_memset(&pDeviceInfo, 0, sizeof(agsaSASDeviceInfo_t));
5460 if (ProtConrPortId & PROTOCOL_BITS)
5461 {
5462 protocol = SA_IDFRM_SSP_BIT; /* SSP */
5463 pDeviceInfo.commonDevInfo.devType_S_Rate = (bit8)(conRate | 0x10);
5464
5465 }
5466 else
5467 {
5468 protocol = SA_IDFRM_SMP_BIT; /* SMP */
5469 pDeviceInfo.commonDevInfo.devType_S_Rate = (bit8)conRate;
5470 }
5471 pDeviceInfo.initiator_ssp_stp_smp = protocol;
5472 pDeviceInfo.numOfPhys = 1;
5473 pDeviceInfo.commonDevInfo.sasAddressHi[0] = pMsg1->sasAddrHi[0];
5474 pDeviceInfo.commonDevInfo.sasAddressHi[1] = pMsg1->sasAddrHi[1];
5475 pDeviceInfo.commonDevInfo.sasAddressHi[2] = pMsg1->sasAddrHi[2];
5476 pDeviceInfo.commonDevInfo.sasAddressHi[3] = pMsg1->sasAddrHi[3];
5477 pDeviceInfo.commonDevInfo.sasAddressLo[0] = pMsg1->sasAddrLow[0];
5478 pDeviceInfo.commonDevInfo.sasAddressLo[1] = pMsg1->sasAddrLow[1];
5479 pDeviceInfo.commonDevInfo.sasAddressLo[2] = pMsg1->sasAddrLow[2];
5480 pDeviceInfo.commonDevInfo.sasAddressLo[3] = pMsg1->sasAddrLow[3];
5481 pDeviceInfo.commonDevInfo.flag = 0;
5483
5484 /* deviceId -> agDeviceHandle */
5485 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[FwdDeviceId & DEVICE_ID_BITS].DeviceHandle;
5486
5487 if (agNULL == pDevice)
5488 {
5489 /* new device */
5490 si_memset(&remoteIdentify, 0, sizeof(agsaSASIdentify_t));
5491 for (i=0;i<4;i++)
5492 {
5493 remoteIdentify.sasAddressHi[i] = pMsg1->sasAddrHi[i];
5494 remoteIdentify.sasAddressLo[i] = pMsg1->sasAddrLow[i];
5495 }
5496 remoteIdentify.deviceType_addressFrameType = (bit8)(pDeviceInfo.commonDevInfo.devType_S_Rate & 0xC0);
5497 dTypeSRate = pDeviceInfo.commonDevInfo.devType_S_Rate;
5498 /* get Device from free Device List */
5499 pDevice = siPortSASDeviceAdd(agRoot, pPort, remoteIdentify, agTRUE, SMP_TO_DEFAULT, ITL_TO_DEFAULT, 0, dTypeSRate, 0);
5500 if (agNULL == pDevice)
5501 {
5502 SA_DBG1(("mpiDeviceHandleArrived: Device Handle is NULL, Out of Resources Error.\n"));
5503 }
5504 else
5505 {
5506 bit32 AccStatus = 0;
5507 bit32 SaveId = FwdDeviceId & 0xFFFF;
5508 /* mapping the device handle and device id */
5509 saRoot->DeviceMap[FwdDeviceId & DEVICE_ID_BITS].DeviceIdFromFW = FwdDeviceId;
5510 saRoot->DeviceMap[FwdDeviceId & DEVICE_ID_BITS].DeviceHandle = (void *)pDevice;
5511 pDevice->DeviceMapIndex = FwdDeviceId;
5512 SA_DBG2(("mpiDeviceHandleArrived: New deviceID 0x%x Device Context %p DeviceTypeSRate 0x%x\n", FwdDeviceId, pDevice, dTypeSRate));
5513
5514 /* Call Back */
5515 AccStatus = ossaDeviceHandleAccept(agRoot, &(pDevice->initiatorDevHandle), &pDeviceInfo, agPortContext,&FwdDeviceId );
5516
5517 HostAssignedId = (FwdDeviceId & 0xFFFF0000) >> SHIFT16;
5518 if(HostAssignedId)
5519 {
5520 if( SaveId == (FwdDeviceId & 0xFFFF) )
5521 {
5522
5523 saRoot->DeviceMap[FwdDeviceId & DEVICE_ID_BITS].DeviceIdFromFW = FwdDeviceId;
5524 pDevice->DeviceMapIndex = FwdDeviceId;
5525
5526 SA_DBG1(("mpiDeviceHandleArrived:FwdDeviceId 0x%x HostAssignedId 0x%x\n",FwdDeviceId,HostAssignedId));
5527 }
5528 else
5529 {
5530 SA_DBG1(("mpiDeviceHandleArrived:Id mangled expect 0x%x Got 0x%x\n",SaveId, (FwdDeviceId & 0xFFFF)));
5531 ret = AGSA_RC_FAILURE;
5532 }
5533 }
5534
5535 /* get AWT flag and ITLN_TMO value */
5536
5537 if(AccStatus == OSSA_RC_ACCEPT )
5538 {
5539 /* build DEVICE_HANDLE_ACCEPT IOMB and send to SPC with action=accept */
5540 mpiDevHandleAcceptCmd(agRoot, agNULL, CTag, FwdDeviceId, 0, pDeviceInfo.commonDevInfo.flag, pDeviceInfo.commonDevInfo.it_NexusTimeout, 0);
5541 }
5542 else
5543 {
5544 mpiDevHandleAcceptCmd(agRoot, agNULL, CTag, FwdDeviceId, 1, pDeviceInfo.commonDevInfo.flag, pDeviceInfo.commonDevInfo.it_NexusTimeout, 0);
5545 }
5546 }
5547 }
5548
5549 SA_DBG1(("mpiDeviceHandleArrived Device 0x%08X flag 0x%08X %s WWID= %02x%02x%02x%02x:%02x%02x%02x%02x, %s\n",
5550 FwdDeviceId,
5552 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x20 ? "SATA DA" :
5553 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x10 ? "SSP/SMP" :
5554 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF0) == 0x0 ? " STP " : "Unknown",
5555
5564
5565 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 8 ? " 1.5G" :
5566 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 9 ? " 3.0G" :
5567 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 10 ? " 6.0G" :
5568 (pDevice->devInfo.sasDeviceInfo.commonDevInfo.devType_S_Rate & 0xF) == 11 ? "12.0G" : "????" ));
5569
5570 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3L");
5571 return ret;
5572}
5573
5574/******************************************************************************/
5585/*******************************************************************************/
5587 agsaRoot_t *agRoot,
5589 )
5590{
5591 bit32 ret = AGSA_RC_SUCCESS;
5592 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5593 agsaIORequestDesc_t *pRequest;
5594 agsaContext_t *agContext;
5595 bit32 tag, timeStampLower, timeStampUpper;
5596
5598
5599 SA_DBG3(("mpiGetTimeStampRsp: HTAG=0x%x\n", pIomb->tag));
5600
5601 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetTimeStampRsp_t, tag));
5602 OSSA_READ_LE_32(AGROOT, &timeStampLower, pIomb, OSSA_OFFSET_OF(agsaGetTimeStampRsp_t, timeStampLower));
5603 OSSA_READ_LE_32(AGROOT, &timeStampUpper, pIomb, OSSA_OFFSET_OF(agsaGetTimeStampRsp_t, timeStampUpper));
5604 /* get request from IOMap */
5605 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5606 if (agNULL == pRequest)
5607 {
5608 SA_DBG1(("mpiGetTimeStampRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x\n", tag));
5609 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3M");
5610 return AGSA_RC_FAILURE;
5611 }
5612
5613 agContext = saRoot->IOMap[tag].agContext;
5614 /* remove the request from IOMap */
5615 saRoot->IOMap[tag].Tag = MARK_OFF;
5616 saRoot->IOMap[tag].IORequest = agNULL;
5617 saRoot->IOMap[tag].agContext = agNULL;
5618
5619 SA_ASSERT((pRequest->valid), "pRequest->valid");
5620
5621 SA_DBG3(("mpiGetTimeStampRsp: timeStampLower 0x%x timeStampUpper 0x%x\n", timeStampLower, timeStampUpper));
5622
5623 ossaGetTimeStampCB(agRoot, agContext, timeStampLower, timeStampUpper);
5624
5626 pRequest->valid = agFALSE;
5627 /* return the request to free pool */
5629 {
5630 SA_DBG1(("mpiGetTimeStampRsp: saving pRequest (%p) for later use\n", pRequest));
5631 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5632 }
5633 else
5634 {
5635 /* return the request to free pool */
5636 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5637 }
5639
5640 /* return value */
5641 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3M");
5642 return ret;
5643}
5644
5645/******************************************************************************/
5656/*******************************************************************************/
5658 agsaRoot_t *agRoot,
5660 )
5661{
5662 bit32 ret = AGSA_RC_SUCCESS;
5663 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5664 agsaIORequestDesc_t *pRequest;
5665 agsaContext_t *agContext;
5666 agsaPort_t *pPort;
5667 bit32 tag, status;
5668
5670
5671 SA_DBG2(("mpiSASHwEventAckRsp: Htag=0x%x %p\n", pIomb->tag,pIomb));
5672
5673 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSASHwEventAckRsp_t, tag));
5674 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSASHwEventAckRsp_t, status));
5675 /* get request from IOMap */
5676 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5677 if (agNULL == pRequest)
5678 {
5679 SA_DBG1(("mpiSASHwEventAckRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x Status=0x%x\n", tag, status));
5680 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2N");
5681 return AGSA_RC_FAILURE;
5682 }
5683
5684 agContext = saRoot->IOMap[tag].agContext;
5685 /* remove the request from IOMap */
5686 saRoot->IOMap[tag].Tag = MARK_OFF;
5687 saRoot->IOMap[tag].IORequest = agNULL;
5688 saRoot->IOMap[tag].agContext = agNULL;
5689 SA_ASSERT((pRequest->valid), "pRequest->valid");
5690
5691 SA_DBG1(("mpiSASHwEventAckRsp: status 0x%x Htag=0x%x HwAckType=0x%x\n",status,pIomb->tag,pRequest->HwAckType ));
5692
5693 ossaHwEventAckCB(agRoot, agContext, status);
5694
5695 pPort = pRequest->pPort;
5696 if (agNULL != pPort)
5697 {
5698 SA_DBG1(("mpiSASHwEventAckRsp: pPort %p tobedeleted %d\n", pPort, pPort->tobedeleted));
5699 if (pPort->status & PORT_INVALIDATING && pPort->tobedeleted )
5700 {
5701 SA_DBG1(("mpiSASHwEventAckRsp: PORT_INVALIDATING portInvalid portID %d pPort %p, nulling out PortContext\n", pPort->portId, pPort));
5702 /* invalid the port */
5703 siPortInvalid(agRoot, pPort);
5704 /* map out the portmap */
5705 saRoot->PortMap[pPort->portId].PortContext = agNULL;
5706 saRoot->PortMap[pPort->portId].PortID = PORT_MARK_OFF;
5707 saRoot->PortMap[pPort->portId].PortStatus |= PORT_INVALIDATING;
5708 }
5709 else
5710 {
5711 SA_DBG1(("mpiSASHwEventAckRsp:pPort->status 0x%x Htag=0x%x %p\n",pPort->status, pIomb->tag,pIomb));
5712 }
5713 }
5714 else
5715 {
5716 SA_DBG1(("mpiSASHwEventAckRsp: pPort is NULL, no portId, HTag=0x%x\n", tag));
5717 }
5718
5720 pRequest->valid = agFALSE;
5721 /* return the request to free pool */
5723 {
5724 SA_DBG1(("mpiSASHwEventAckRsp: saving pRequest (%p) for later use\n", pRequest));
5725 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5726 }
5727 else
5728 {
5729 /* return the request to free pool */
5730 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5731 }
5733
5734 /* return value */
5735 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2N");
5736 return ret;
5737}
5738
5739/******************************************************************************/
5750/*******************************************************************************/
5752 agsaRoot_t *agRoot,
5754 )
5755{
5756 bit32 ret = AGSA_RC_SUCCESS;
5757 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5758 agsaIORequestDesc_t *pRequest = agNULL;
5759 agsaContext_t *agContext = agNULL;
5760 agsaPortContext_t *agPortContext = agNULL;
5761 bit32 tag;
5762 bit32 port =0;
5763 bit32 operation =0;
5764 bit32 status =0;
5765 bit32 portState =0;
5766 bit32 portOperation =0;
5767
5769
5770 SA_DBG2(("mpiPortControlRsp: HTag=0x%x\n", pIomb->tag));
5771
5772 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaPortControlRsp_t, tag));
5773 OSSA_READ_LE_32(AGROOT, &operation, pIomb, OSSA_OFFSET_OF(agsaPortControlRsp_t, portOPPortId));
5774 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaPortControlRsp_t, status));
5775 OSSA_READ_LE_32(AGROOT, &portState, pIomb, OSSA_OFFSET_OF(agsaPortControlRsp_t,rsvdPortState ));
5776
5777 /* get request from IOMap */
5778 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5779 if (agNULL == pRequest)
5780 {
5781 SA_DBG1(("mpiPortControlRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x Status=0x%x\n", tag, status));
5782 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3O");
5783 return AGSA_RC_FAILURE;
5784 }
5785
5786 agContext = saRoot->IOMap[tag].agContext;
5787 /* remove the request from IOMap */
5788 saRoot->IOMap[tag].Tag = MARK_OFF;
5789 saRoot->IOMap[tag].IORequest = agNULL;
5790 saRoot->IOMap[tag].agContext = agNULL;
5791
5792 SA_ASSERT((pRequest->valid), "pRequest->valid");
5793
5794 if(!pRequest->valid)
5795 {
5796 SA_DBG1(("mpiPortControlRsp: pRequest->valid %d not set\n", pRequest->valid));
5797 }
5798
5799 SA_DBG2(("mpiPortControlRsp: pRequest->completionCB %p\n", pRequest->completionCB));
5800
5801 port = operation & PORTID_MASK;
5802
5803 if(port < AGSA_MAX_VALID_PORTS )
5804 {
5805 SA_DBG2(("mpiPortControlRsp: PortID 0x%x PortStatus 0x%x PortContext %p\n",
5806 saRoot->PortMap[port].PortID,
5807 saRoot->PortMap[port].PortStatus,
5808 saRoot->PortMap[port].PortContext));
5809
5810 agPortContext = (agsaPortContext_t *)saRoot->PortMap[port].PortContext;
5811 }
5812 SA_DBG2(("mpiPortControlRsp: PortID 0x%x PortStatus 0x%x PortContext %p\n",saRoot->PortMap[operation & PORTID_MASK].PortID,saRoot->PortMap[operation & PORTID_MASK].PortStatus,saRoot->PortMap[operation & PORTID_MASK].PortContext));
5813 agPortContext = (agsaPortContext_t *)saRoot->PortMap[operation & PORTID_MASK].PortContext;
5814 SA_DBG1(("mpiPortControlRsp: agPortContext %p\n",agPortContext ));
5815
5816
5817 SA_DBG2(("mpiPortControlRsp: portID 0x%x status 0x%x\n", (operation & PORTID_MASK), status));
5818
5819 SA_DBG1(("mpiPortControlRsp: portID 0x%x status 0x%x agPortContext %p\n",port, status,agPortContext));
5820
5821 portOperation = (((operation & LOCAL_PHY_OP_BITS) >> SHIFT8) | (portState << SHIFT28) );
5822
5823 SA_DBG1(("mpiPortControlRsp: portState 0x%x operation 0x%x portOperation 0x%x\n",portState, operation,portOperation ));
5824
5825 switch(portOperation)
5826 {
5828 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_SET_SMP_PHY_WIDTH operation 0x%x\n",operation ));
5829 break;
5831 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_SET_PORT_RECOVERY_TIME operation 0x%x\n",operation ));
5832 break;
5833 case AGSA_PORT_IO_ABORT:
5834 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_IO_ABORT operation 0x%x\n",operation ));
5835 break;
5837 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_SET_PORT_RESET_TIME operation 0x%x\n",operation ));
5838 break;
5840 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_HARD_RESET operation 0x%x\n",operation ));
5841 break;
5842 case AGSA_PORT_CLEAN_UP:
5843 SA_DBG1(("mpiPortControlRsp: AGSA_PORT_CLEAN_UP operation 0x%x\n",operation ));
5844 break;
5846 SA_DBG1(("mpiPortControlRsp: AGSA_STOP_PORT_RECOVERY_TIMER operation 0x%x\n",operation ));
5847 break;
5848 default:
5849 {
5850 SA_DBG1(("mpiPortControlRsp: Unknown operation 0x%x\n",operation ));
5851 }
5852 }
5853
5854 ossaPortControlCB(agRoot, agContext, agPortContext, portOperation, status);
5855
5857 pRequest->valid = agFALSE;
5858 /* return the request to free pool */
5860 {
5861 SA_DBG1(("mpiPortControlRsp: saving pRequest (%p) for later use\n", pRequest));
5862 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5863 }
5864 else
5865 {
5866 /* return the request to free pool */
5867 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5868 }
5870
5871 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3O");
5872 /* return value */
5873 return ret;
5874}
5875
5876/******************************************************************************/
5887/*******************************************************************************/
5889 agsaRoot_t *agRoot,
5890 agsaSMPAbortRsp_t *pIomb
5891 )
5892{
5893 bit32 ret = AGSA_RC_SUCCESS;
5894 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5895 agsaIORequestDesc_t *pRequest;
5896 agsaDeviceDesc_t *pDevice;
5897 bit32 tag, scp, status;
5898
5900
5901 SA_DBG3(("mpiSMPAbortRsp: HTag=0x%x Status=0x%x\n", pIomb->tag, pIomb->status));
5902
5903 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSMPAbortRsp_t, tag));
5904 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSMPAbortRsp_t, status));
5905 OSSA_READ_LE_32(AGROOT, &scp, pIomb, OSSA_OFFSET_OF(agsaSMPAbortRsp_t, scp));
5906
5907 /* get IORequest from IOMap */
5908 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
5909
5910 if (agNULL == pRequest)
5911 {
5912 SA_DBG1(("mpiSMPAbortRsp: pRequest is NULL, HTag=0x%x Status=0x%x\n", pIomb->tag, pIomb->status));
5913 SA_ASSERT((pRequest), "pRequest");
5914 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3P");
5915 return AGSA_RC_FAILURE;
5916 }
5917
5918 if ( agTRUE == pRequest->valid )
5919 {
5920 pDevice = pRequest->pDevice;
5921 SA_ASSERT((pRequest->pDevice), "pRequest->pDevice");
5922
5923 SA_DBG3(("mpiSMPAbortRsp: request abort is valid Htag 0x%x\n", tag));
5924
5925 /* remove the SSP_ABORT or SATA_ABORT request from IOMap */
5926 saRoot->IOMap[tag].Tag = MARK_OFF;
5927 saRoot->IOMap[tag].IORequest = agNULL;
5928 saRoot->IOMap[tag].agContext = agNULL;
5929
5930 if( pRequest->completionCB == agNULL )
5931 {
5932 SA_DBG1(("mpiSMPAbortRsp: ************************************************* Valid for Expander only tag 0x%x\n", tag));
5933 ossaSMPAbortCB(agRoot, pRequest->pIORequestContext, scp, status);
5934 }
5935 else
5936 {
5937 (*(ossaGenericAbortCB_t)(pRequest->completionCB))(agRoot, pRequest->pIORequestContext, scp, status);
5938 }
5939
5941
5942 /* Delete the request from the pendingIORequests */
5943 saLlistIORemove(&(pDevice->pendingIORequests), &(pRequest->linkNode));
5944 pRequest->valid = agFALSE;
5945 /* return the request to free pool */
5947 {
5948 SA_DBG1(("mpiSMPAbortRsp: saving pRequest (%p) for later use\n", pRequest));
5949 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
5950 }
5951 else
5952 {
5953 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
5954 }
5956
5957 }
5958 else
5959 {
5960 ret = AGSA_RC_FAILURE;
5961 SA_DBG1(("mpiSMPAbortRsp: the request is not valid any more. Tag=%x\n", pRequest->HTag));
5962 }
5963
5964
5965 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3P");
5966
5967 return ret;
5968}
5969
5970/******************************************************************************/
5981/*******************************************************************************/
5983 agsaRoot_t *agRoot,
5985{
5986 bit32 ret = AGSA_RC_SUCCESS;
5987 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
5988 agsaDeviceDesc_t *pDevice;
5989 agsaPortContext_t *agPortContext;
5990 bit32 portId;
5991 bit32 deviceid, deviceIdx;
5992
5994
5995 /* convert endiness if necassary */
5996 OSSA_READ_LE_32(AGROOT, &portId, pMsg1, OSSA_OFFSET_OF(agsaDeviceHandleRemoval_t, portId));
5997 OSSA_READ_LE_32(AGROOT, &deviceid, pMsg1, OSSA_OFFSET_OF(agsaDeviceHandleRemoval_t, deviceId));
5998
5999 SA_DBG3(("mpiDeviceHandleRemoval: portId=0x%x deviceId=0x%x\n", portId, deviceid));
6000
6001 pDevice = saRoot->DeviceMap[deviceid & DEVICE_ID_BITS].DeviceHandle;
6002 SA_DBG2(("mpiDeviceHandleRemoval:PortID 0x%x PortStatus 0x%x PortContext %p\n",
6003 saRoot->PortMap[portId & PORTID_MASK].PortID,
6004 saRoot->PortMap[portId & PORTID_MASK].PortStatus,
6005 saRoot->PortMap[portId & PORTID_MASK].PortContext));
6006 agPortContext = (agsaPortContext_t *)saRoot->PortMap[portId & PORTID_MASK].PortContext;
6007
6008 /* Call Back */
6009 SA_DBG1(("mpiDeviceHandleRemoval: portId=0x%x deviceId=0x%x autoDeregDeviceflag=0x%x\n", portId, deviceid,saRoot->autoDeregDeviceflag[portId & PORTID_MASK]));
6010 if (pDevice->targetDevHandle.sdkData)
6011 {
6012 ossaDeviceHandleRemovedEvent(agRoot, &(pDevice->targetDevHandle), agPortContext);
6013
6014 if (saRoot->autoDeregDeviceflag[portId & PORTID_MASK])
6015 {
6016 /* remove the DeviceMap and MapIndex */
6017 deviceIdx = pDevice->DeviceMapIndex & DEVICE_ID_BITS;
6018 SA_DBG1(("mpiDeviceHandleRemoval: A Freed portId=0x%x deviceId=0x%x\n", portId, deviceid));
6019 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
6020
6021 saRoot->DeviceMap[deviceIdx].DeviceIdFromFW = 0;
6022 saRoot->DeviceMap[deviceIdx].DeviceHandle = agNULL;
6023 pDevice->DeviceMapIndex = 0;
6024
6025 /* Reset the device data structure */
6026 pDevice->pPort = agNULL;
6027 pDevice->targetDevHandle.sdkData = agNULL;
6028 pDevice->targetDevHandle.osData = agNULL;
6030 saLlistAdd(&(saRoot->freeDevicesList), &(pDevice->linkNode));
6031 SA_DBG1(("mpiDeviceHandleRemoval: portId=0x%x deviceId=0x%x\n", portId, deviceid));
6032
6034 }
6035 }
6036 else
6037 {
6038 if (pDevice->initiatorDevHandle.sdkData)
6039 {
6040 ossaDeviceHandleRemovedEvent(agRoot, &(pDevice->initiatorDevHandle), agPortContext);
6041
6042 if (saRoot->autoDeregDeviceflag[portId & PORTID_MASK])
6043 {
6044 /* remove the DeviceMap and MapIndex */
6045 deviceIdx = pDevice->DeviceMapIndex & DEVICE_ID_BITS;
6046 SA_DBG1(("mpiDeviceHandleRemoval: A Freed portId=0x%x deviceId=0x%x\n", portId, deviceid));
6047 OS_ASSERT(deviceIdx < MAX_IO_DEVICE_ENTRIES, "deviceIdx MAX_IO_DEVICE_ENTRIES");
6048 saRoot->DeviceMap[deviceIdx].DeviceIdFromFW = 0;
6049 saRoot->DeviceMap[deviceIdx].DeviceHandle = agNULL;
6050 pDevice->DeviceMapIndex = 0;
6051
6052 /* Reset the device data structure */
6053 pDevice->pPort = agNULL;
6055 pDevice->initiatorDevHandle.osData = agNULL;
6057 saLlistAdd(&(saRoot->freeDevicesList), &(pDevice->linkNode));
6059 }
6060 }
6061 else
6062 {
6063 /* no callback because bad device_id */
6064 SA_DBG1(("mpiDeviceHandleRemoval: Bad Device Handle, deviceId=0x%x\n", deviceid));
6065 }
6066 }
6067
6068 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3R");
6069 return ret;
6070}
6071
6072/******************************************************************************/
6083/*******************************************************************************/
6085 agsaRoot_t *agRoot,
6087 )
6088{
6089 bit32 ret = AGSA_RC_SUCCESS;
6090 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6091 agsaIORequestDesc_t *pRequest;
6092 agsaDevHandle_t *agDevHandle;
6093 agsaDeviceDesc_t *pDevice;
6094 agsaContext_t *agContext;
6095 bit32 tag, status, deviceState, deviceId;
6096
6098
6099 SA_DBG1(("mpiSetDeviceStateRsp: HTag=0x%x, deviceId=0x%x\n", pIomb->tag, pIomb->deviceId));
6100
6101 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSetDeviceStateRsp_t, tag));
6102 OSSA_READ_LE_32(AGROOT, &deviceId, pIomb, OSSA_OFFSET_OF(agsaSetDeviceStateRsp_t, deviceId));
6103 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSetDeviceStateRsp_t, status));
6104
6105 /* get request from IOMap */
6106 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6107 if (agNULL == pRequest)
6108 {
6109 SA_DBG1(("mpiSetDeviceStateRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
6110 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3Q");
6111 return AGSA_RC_FAILURE;
6112 }
6113
6114 agContext = saRoot->IOMap[tag].agContext;
6115 /* remove the request from IOMap */
6116 saRoot->IOMap[tag].Tag = MARK_OFF;
6117 saRoot->IOMap[tag].IORequest = agNULL;
6118 saRoot->IOMap[tag].agContext = agNULL;
6119
6120 SA_ASSERT((pRequest->valid), "pRequest->valid");
6121
6122 /* status is SUCCESS */
6123 OSSA_READ_LE_32(AGROOT, &deviceState, pIomb, OSSA_OFFSET_OF(agsaSetDeviceStateRsp_t, pds_nds));
6124
6125 /* find device handle from device index */
6126 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceId & DEVICE_ID_BITS].DeviceHandle;
6127 if (agNULL == pDevice)
6128 {
6129 SA_DBG1(("mpiSetDeviceStateRsp: DeviceHandle is NULL!!! deviceId=0x%x TAG=0x%x STATUS=0x%x \n", deviceId, tag, status));
6130 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3Q");
6131 return AGSA_RC_FAILURE;
6132 }
6133
6134 if (pDevice->targetDevHandle.sdkData)
6135 {
6136 agDevHandle = &(pDevice->targetDevHandle);
6137 }
6138 else
6139 {
6140 agDevHandle = &(pDevice->initiatorDevHandle);
6141 }
6142
6143 if (agDevHandle == agNULL)
6144 {
6145 SA_DBG1(("mpiSetDeviceStateRsp: warning!!! no deviceHandle is found"));
6146 ossaSetDeviceStateCB(agRoot, agContext, agNULL, OSSA_IO_NO_DEVICE, 0, 0);
6147 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "3Q");
6148
6150 pRequest->valid = agFALSE;
6151 /* return the request to free pool */
6153 {
6154 SA_DBG1(("mpiSetDeviceStateRsp: saving pRequest (%p) for later use\n", pRequest));
6155 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6156 }
6157 else
6158 {
6159 /* return the request to free pool */
6160 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6161 }
6163
6164 return AGSA_RC_FAILURE;
6165 }
6166
6167 ossaSetDeviceStateCB(agRoot, agContext, agDevHandle, status, (deviceState & NDS_BITS),
6168 (deviceState & PDS_BITS) >> SHIFT4);
6169
6171 pRequest->valid = agFALSE;
6172 /* return the request to free pool */
6174 {
6175 SA_DBG1(("mpiSetDeviceStateRsp: saving pRequest (%p) for later use\n", pRequest));
6176 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6177 }
6178 else
6179 {
6180 /* return the request to free pool */
6181 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6182 }
6184
6185 /* return value */
6186 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "3Q");
6187 return ret;
6188}
6189
6190/******************************************************************************/
6201/*******************************************************************************/
6203 agsaRoot_t *agRoot,
6205 )
6206{
6207 bit32 ret = AGSA_RC_SUCCESS;
6208 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6209 agsaIORequestDesc_t *pRequest;
6210 agsaDevHandle_t *agDevHandle;
6211 agsaDeviceDesc_t *pDevice;
6212 agsaContext_t *agContext;
6213 bit32 tag, status, deviceId, deviceState;
6214
6216
6217 SA_DBG1(("mpiGetDeviceStateRsp: HTag=0x%x, deviceId=0x%x\n", pIomb->tag, pIomb->deviceId));
6218
6219 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetDeviceStateRsp_t, tag));
6220 OSSA_READ_LE_32(AGROOT, &deviceId, pIomb, OSSA_OFFSET_OF(agsaGetDeviceStateRsp_t, deviceId));
6221 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetDeviceStateRsp_t, status));
6222
6223 /* get request from IOMap */
6224 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6225 if (agNULL == pRequest)
6226 {
6227 SA_DBG1(("mpiGetDeviceStateRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
6228 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3W");
6229 return AGSA_RC_FAILURE;
6230 }
6231
6232 agContext = saRoot->IOMap[tag].agContext;
6233 /* remove the request from IOMap */
6234 saRoot->IOMap[tag].Tag = MARK_OFF;
6235 saRoot->IOMap[tag].IORequest = agNULL;
6236 saRoot->IOMap[tag].agContext = agNULL;
6237
6238 SA_ASSERT((pRequest->valid), "pRequest->valid");
6239
6240 /* status is SUCCESS */
6241 OSSA_READ_LE_32(AGROOT, &deviceState, pIomb, OSSA_OFFSET_OF(agsaGetDeviceStateRsp_t, ds));
6242
6243 /* find device handle from device index */
6244 pDevice = (agsaDeviceDesc_t *)saRoot->DeviceMap[deviceId & DEVICE_ID_BITS].DeviceHandle;
6245 if (pDevice != agNULL)
6246 {
6247 if (pDevice->targetDevHandle.sdkData)
6248 {
6249 agDevHandle = &(pDevice->targetDevHandle);
6250 }
6251 else
6252 {
6253 agDevHandle = &(pDevice->initiatorDevHandle);
6254 }
6255 }
6256 else
6257 {
6258 SA_DBG1(("mpiGetDeviceStateRsp: pDevice is NULL"));
6259 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3W");
6260 return AGSA_RC_FAILURE;
6261 }
6262
6263 if (agDevHandle == agNULL)
6264 {
6265 SA_DBG1(("mpiGetDeviceStateRsp: warning!!! no deviceHandle is found"));
6266 ossaGetDeviceStateCB(agRoot, agContext, agNULL, OSSA_IO_NO_DEVICE, 0);
6267 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "3W");
6268
6270 pRequest->valid = agFALSE;
6271 /* return the request to free pool */
6273 {
6274 SA_DBG1(("mpiGetDeviceStateRsp: saving pRequest (%p) for later use\n", pRequest));
6275 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6276 }
6277 else
6278 {
6279 /* return the request to free pool */
6280 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6281 }
6283
6284 return AGSA_RC_FAILURE;
6285 }
6286
6287 ossaGetDeviceStateCB(agRoot, agContext, agDevHandle, status, deviceState);
6288
6290 pRequest->valid = agFALSE;
6291 /* return the request to free pool */
6293 {
6294 SA_DBG1(("mpiGetDeviceStateRsp: saving pRequest (%p) for later use\n", pRequest));
6295 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6296 }
6297 else
6298 {
6299 /* return the request to free pool */
6300 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6301 }
6303
6304 /* return value */
6305 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "3W");
6306 return ret;
6307}
6308
6309/******************************************************************************/
6320/*******************************************************************************/
6322 agsaRoot_t *agRoot,
6324 )
6325{
6326 bit32 ret = AGSA_RC_SUCCESS;
6327 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6328 agsaIORequestDesc_t *pRequest;
6329 agsaContext_t *agContext;
6330 agsaSASReconfig_t SASReconfig;
6331 bit32 tag, status, setFlags, MaxPorts;
6332 bit32 openRejReCmdData, sataHOLTMO;
6333
6335
6336 SA_DBG1(("mpiSasReInitializeRsp: HTag=0x%x, status=0x%x\n", pIomb->tag, pIomb->status));
6337
6338 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, tag));
6339 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, status));
6340 OSSA_READ_LE_32(AGROOT, &setFlags, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, setFlags));
6341 OSSA_READ_LE_32(AGROOT, &MaxPorts, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, MaxPorts));
6342 OSSA_READ_LE_32(AGROOT, &openRejReCmdData, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, openRejReCmdData));
6343 OSSA_READ_LE_32(AGROOT, &sataHOLTMO, pIomb, OSSA_OFFSET_OF(agsaSasReInitializeRsp_t, sataHOLTMO));
6344
6345 /* get request from IOMap */
6346 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6347 if (agNULL == pRequest)
6348 {
6349 SA_DBG1(("mpiSasReInitializeRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
6350 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3X");
6351 return AGSA_RC_FAILURE;
6352 }
6353
6354 agContext = saRoot->IOMap[tag].agContext;
6355 /* remove the request from IOMap */
6356 saRoot->IOMap[tag].Tag = MARK_OFF;
6357 saRoot->IOMap[tag].IORequest = agNULL;
6358 saRoot->IOMap[tag].agContext = agNULL;
6359
6360 SA_ASSERT((pRequest->valid), "pRequest->valid");
6361
6362 SASReconfig.flags = setFlags;
6363 SASReconfig.maxPorts = (bit8)(MaxPorts & 0xFF);
6364 SASReconfig.openRejectRetriesCmd = (bit16)((openRejReCmdData & 0xFFFF0000) >> SHIFT16);
6365 SASReconfig.openRejectRetriesData = (bit16)(openRejReCmdData & 0x0000FFFF);
6366 SASReconfig.sataHolTmo = (bit16)(sataHOLTMO & 0xFFFF);
6367 ossaReconfigSASParamsCB(agRoot, agContext, status, &SASReconfig);
6368
6370 pRequest->valid = agFALSE;
6371 /* return the request to free pool */
6373 {
6374 SA_DBG1(("mpiSasReInitializeRsp: saving pRequest (%p) for later use\n", pRequest));
6375 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6376 }
6377 else
6378 {
6379 /* return the request to free pool */
6380 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6381 }
6383
6384 /* return value */
6385 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3X");
6386
6387 return ret;
6388}
6389
6390/******************************************************************************/
6401/*******************************************************************************/
6403 agsaRoot_t *agRoot,
6404 agsaSGpioRsp_t *pInIomb
6405 )
6406{
6407 bit32 ret = AGSA_RC_SUCCESS;
6408 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6409 agsaIORequestDesc_t *pRequest = NULL;
6410 agsaContext_t *agContext = NULL;
6411 bit32 i, tag, resultFunctionFrameType;
6412 agsaSGpioReqResponse_t SgpioResponse = {0};
6413
6415
6416 SA_DBG3(("mpiSGpioRsp: HTAG=0x%x\n", pInIomb->tag));
6417
6418 OSSA_READ_LE_32(AGROOT, &tag, pInIomb, OSSA_OFFSET_OF(agsaSGpioRsp_t, tag));
6419 OSSA_READ_LE_32(AGROOT, &resultFunctionFrameType, pInIomb, OSSA_OFFSET_OF(agsaSGpioRsp_t, resultFunctionFrameType));
6420
6421 SgpioResponse.smpFrameType = resultFunctionFrameType & 0xFF;
6422 SgpioResponse.function = (resultFunctionFrameType & 0xFF00) >> 8;
6423 SgpioResponse.functionResult = (resultFunctionFrameType & 0xFF0000) >> 16;
6424
6425 if (SA_SAS_SMP_READ_GPIO_REGISTER == SgpioResponse.function)
6426 {
6427 for (i = 0; i < OSSA_SGPIO_MAX_READ_DATA_COUNT; i++)
6428 {
6429 OSSA_READ_LE_32(AGROOT, &SgpioResponse.readWriteData[i], pInIomb, OSSA_OFFSET_OF(agsaSGpioRsp_t, readData) + (i * 4));
6430 }
6431 }
6432
6433 /* Get the request from IOMap */
6434 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6435 if (agNULL == pRequest)
6436 {
6437 SA_DBG1(("mpiSGpioRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x STATUS=0x%x\n", tag, SgpioResponse.functionResult));
6438 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3Y");
6439 ret = AGSA_RC_FAILURE;
6440 }
6441 else
6442 {
6443 agContext = saRoot->IOMap[tag].agContext;
6444 ossaSGpioCB(agRoot, agContext, &SgpioResponse);
6445
6446 /* Return the request to free pool */
6447 saReturnRequestToFreePool(agRoot, pRequest);
6448
6449 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3Y");
6450 }
6451
6452 return ret;
6453}
6454
6455/******************************************************************************/
6466/*******************************************************************************/
6468 agsaRoot_t *agRoot,
6469 void *pInIomb
6470 )
6471{
6472 bit32 ret = AGSA_RC_SUCCESS;
6473 agsaLLRoot_t *saRoot = agNULL;
6474 agsaIORequestDesc_t *pRequest;
6475 agsaContext_t *agContext;
6476 bit32 tag, Status, Command;
6477 agsaPCIeDiagResponse_t pciediadrsp;
6478 bit32 *pIomb = (bit32 *)pInIomb;
6479
6481
6482 /* sanity check */
6483 SA_ASSERT((agNULL != agRoot), "");
6484 saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
6485 SA_ASSERT((agNULL != saRoot), "");
6486
6487 si_memset(&pciediadrsp, 0, sizeof(agsaPCIeDiagResponse_t));
6488
6489 if(smIS_SPCV(agRoot))
6490 {
6491 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,tag));
6492 OSSA_READ_LE_32(AGROOT, &Command, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,CmdTypeDesc));
6493 OSSA_READ_LE_32(AGROOT, &Status, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,Status));
6494 OSSA_READ_LE_32(AGROOT, &pciediadrsp.ERR_BLKH, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,ERR_BLKH ));
6495 OSSA_READ_LE_32(AGROOT, &pciediadrsp.ERR_BLKL, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,ERR_BLKL ));
6496 OSSA_READ_LE_32(AGROOT, &pciediadrsp.DWord8, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,DWord8 ));
6497 OSSA_READ_LE_32(AGROOT, &pciediadrsp.DWord9, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,DWord9 ));
6498 OSSA_READ_LE_32(AGROOT, &pciediadrsp.DWord10, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,DWord10 ));
6499 OSSA_READ_LE_32(AGROOT, &pciediadrsp.DWord11, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,DWord11 ));
6500 OSSA_READ_LE_32(AGROOT, &pciediadrsp.DIF_ERR, pIomb, OSSA_OFFSET_OF(agsaPCIeDiagExecuteRsp_t,DIF_ERR ));
6501 SA_DBG3(("mpiPCIeDiagExecuteRsp: HTAG=0x%x\n",tag));
6502 }
6503 else
6504 {
6505 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsa_SPC_PCIeDiagExecuteRsp_t,tag));
6506 OSSA_READ_LE_32(AGROOT, &Command, pIomb, OSSA_OFFSET_OF(agsa_SPC_PCIeDiagExecuteRsp_t,CmdTypeDesc));
6507 OSSA_READ_LE_32(AGROOT, &Status, pIomb, OSSA_OFFSET_OF(agsa_SPC_PCIeDiagExecuteRsp_t,Status));
6508 SA_DBG3(("mpiPCIeDiagExecuteRsp: SPC HTAG=0x%x\n",tag));
6509 }
6510
6511 switch(Status)
6512 {
6514 SA_DBG3(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_SUCCESS TAG=0x%x STATUS=0x%x\n", tag, Status));
6515 break;
6517 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_IO_INVALID_LENGTH TAG=0x%x STATUS=0x%x\n", tag, Status));
6518 break;
6520 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INVALID_COMMAND TAG=0x%x STATUS=0x%x\n", tag, Status));
6521 break;
6523 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INTERNAL_FAILURE TAG=0x%x STATUS=0x%x\n", tag, Status));
6524 break;
6526 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INVALID_CMD_TYPE TAG=0x%x STATUS=0x%x\n", tag, Status));
6527 break;
6529 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INVALID_CMD_DESC TAG=0x%x STATUS=0x%x\n", tag, Status));
6530 break;
6532 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH TAG=0x%x STATUS=0x%x\n", tag, Status));
6533 break;
6535 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_CRC_MISMATCH TAG=0x%x STATUS=0x%x\n", tag, Status));
6536 break;
6538 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INVALID_PCIE_ADDR TAG=0x%x STATUS=0x%x\n", tag, Status));
6539 break;
6541 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_INVALID_BLOCK_SIZE TAG=0x%x STATUS=0x%x\n", tag, Status));
6542 break;
6544 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_LENGTH_NOT_BLOCK_SIZE_ALIGNED TAG=0x%x STATUS=0x%x\n", tag, Status));
6545 break;
6547 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_MISMATCH TAG=0x%x STATUS=0x%x\n", tag, Status));
6548 break;
6550 SA_DBG1(("mpiPCIeDiagExecuteRsp: OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH TAG=0x%x STATUS=0x%x\n", tag, Status));
6551 break;
6552 default:
6553 SA_DBG1(("mpiPCIeDiagExecuteRsp: UNKNOWN status TAG=0x%x STATUS=0x%x\n", tag, Status));
6554 break;
6555 }
6556 /* get request from IOMap */
6557 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6558 if (agNULL == pRequest)
6559 {
6560 SA_DBG1(("mpiPCIeDiagExecuteRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x STATUS=0x%x\n", tag, Status));
6561 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3Z");
6562 return AGSA_RC_FAILURE;
6563 }
6564
6565 agContext = saRoot->IOMap[tag].agContext;
6566 /* remove the request from IOMap */
6567 saRoot->IOMap[tag].Tag = MARK_OFF;
6568 saRoot->IOMap[tag].IORequest = agNULL;
6569 saRoot->IOMap[tag].agContext = agNULL;
6570
6571 SA_ASSERT((pRequest->valid), "pRequest->valid");
6572
6573 ossaPCIeDiagExecuteCB(agRoot, agContext, Status, Command,&pciediadrsp);
6574
6576 pRequest->valid = agFALSE;
6577 /* return the request to free pool */
6579 {
6580 SA_DBG1(("mpiPCIeDiagExecuteRsp: saving pRequest (%p) for later use\n", pRequest));
6581 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6582 }
6583 else
6584 {
6585 /* return the request to free pool */
6586 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6587 }
6589
6590 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3Z");
6591
6592 /* return value */
6593 return ret;
6594}
6595/******************************************************************************/
6606/*******************************************************************************/
6608 agsaRoot_t *agRoot,
6609 void *pIomb
6610 )
6611{
6612 bit32 ret = AGSA_RC_SUCCESS;
6613 agsaLLRoot_t *saRoot = agNULL;
6614 agsaIORequestDesc_t *pRequest;
6615 agsaContext_t *agContext;
6616 bit32 tag = 0, status = 0, In_Ln = 0, MCNT = 0, NBT = 0;
6617
6619
6620 /* sanity check */
6621 SA_ASSERT((agNULL != agRoot), "");
6622 saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
6623 SA_ASSERT((agNULL != saRoot), "");
6624
6625 if(smIS_SPCV(agRoot))
6626 {
6627 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetDDEFDataRsp_t,tag));
6628 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetDDEFDataRsp_t,status));
6629 OSSA_READ_LE_32(AGROOT, &In_Ln, pIomb, OSSA_OFFSET_OF(agsaGetDDEFDataRsp_t,reserved_In_Ln));
6630 OSSA_READ_LE_32(AGROOT, &MCNT, pIomb, OSSA_OFFSET_OF(agsaGetDDEFDataRsp_t,MCNT));
6631 OSSA_READ_LE_32(AGROOT, &NBT, pIomb, OSSA_OFFSET_OF(agsaGetDDEFDataRsp_t,NBT));
6632 }
6633 else
6634 {
6635 /* SPC does not support this command */
6636 }
6637
6638 switch(status)
6639 {
6641 SA_DBG3(("mpiGetDFEDataRsp: OSSA_DFE_MPI_IO_SUCCESS TAG=0x%x STATUS=0x%x\n", tag, status));
6642 break;
6644 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_DATA_OVERFLOW TAG=0x%x STATUS=0x%x\n", tag, status));
6645 break;
6647 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_MPI_ERR_RESOURCE_UNAVAILABLE TAG=0x%x STATUS=0x%x\n", tag, status));
6648 break;
6650 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_CHANNEL_DOWN TAG=0x%x STATUS=0x%x\n", tag, status));
6651 break;
6653 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_MEASUREMENT_IN_PROGRESS TAG=0x%x STATUS=0x%x\n", tag, status));
6654 break;
6656 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_CHANNEL_INVALID TAG=0x%x STATUS=0x%x\n", tag, status));
6657 break;
6659 SA_DBG1(("mpiGetDFEDataRsp: OSSA_DFE_DMA_FAILURE TAG=0x%x STATUS=0x%x\n", tag, status));
6660 break;
6661 default:
6662 SA_DBG1(("mpiGetDFEDataRsp: UNKNOWN status TAG=0x%x STATUS=0x%x\n", tag, status));
6663 break;
6664 }
6665
6666 /* get request from IOMap */
6667 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6668 if (agNULL == pRequest)
6669 {
6670 SA_DBG1(("mpiGetDFEDataRsp: Bad Response IOMB!!! pRequest is NULL.TAG=0x%x STATUS=0x%x\n", tag, status));
6671 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2Y");
6672 return AGSA_RC_FAILURE;
6673 }
6674
6675 agContext = saRoot->IOMap[tag].agContext;
6676 /* remove the request from IOMap */
6677 saRoot->IOMap[tag].Tag = MARK_OFF;
6678 saRoot->IOMap[tag].IORequest = agNULL;
6679 saRoot->IOMap[tag].agContext = agNULL;
6680
6681 SA_ASSERT((pRequest->valid), "pRequest->valid");
6682
6683 ossaGetDFEDataCB(agRoot, agContext, status, NBT);
6684
6686 pRequest->valid = agFALSE;
6687 /* return the request to free pool */
6689 {
6690 SA_DBG1(("mpiGetDFEDataRsp: saving pRequest (%p) for later use\n", pRequest));
6691 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6692 }
6693 else
6694 {
6695 /* return the request to free pool */
6696 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6697 }
6699
6700 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2Y");
6701
6702 return ret;
6703}
6704
6705
6706/******************************************************************************/
6717/*******************************************************************************/
6719 agsaRoot_t *agRoot,
6721 )
6722{
6723 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6724 agsaIORequestDesc_t *pRequest;
6725 agsaHWEventMode_t agMode;
6726 bit32 status, errorQualifierPage, tag;
6727 bit32 errorQualifier;
6728 bit32 pagetype;
6729
6731
6732 SA_DBG1(("mpiSetControllerConfigRsp: HTag=0x%x\n", pIomb->tag));
6733
6734 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSetControllerConfigRsp_t, tag));
6735 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSetControllerConfigRsp_t, status));
6736 OSSA_READ_LE_32(AGROOT, &errorQualifierPage, pIomb, OSSA_OFFSET_OF(agsaSetControllerConfigRsp_t, errorQualifierPage));
6737
6738 /* get request from IOMap */
6739 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6740 if (agNULL == pRequest)
6741 {
6742 SA_DBG1(("mpiSetControllerConfigRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
6743 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3a");
6744 return AGSA_RC_FAILURE;
6745 }
6746
6747 si_memset(&agMode, 0, sizeof(agsaHWEventMode_t));
6749 agMode.status = status;
6750 agMode.context = saRoot->IOMap[tag].agContext;
6751 errorQualifier = (errorQualifierPage & 0xFFFF0000) >> SHIFT16;
6752 pagetype = (errorQualifierPage & 0xFF);
6753
6754 if(status )
6755 {
6756 SA_DBG1(("mpiSetControllerConfigRsp: Error detected tag 0x%x pagetype 0x%x status 0x%x errorQualifier 0x%x\n",
6757 tag, pagetype,status, errorQualifier));
6758 }
6759 else
6760 {
6761 SA_DBG1(("mpiSetControllerConfigRsp: tag 0x%x pagetype 0x%x status 0x%x\n", tag, pagetype,status ));
6762 }
6763
6764
6765 switch( pagetype)
6766 {
6772 /*case AGSA_ENCRYPTION_CONTROL_PARM_PAGE:*/
6773 /* Report the event before freeing the IOMB */
6774 SA_DBG1(("mpiSetControllerConfigRsp:OSSA_HW_EVENT_MODE\n"));
6775 ossaHwCB(agRoot,agMode.context, OSSA_HW_EVENT_MODE, errorQualifierPage, (void *) &agMode, 0);
6776
6777
6778 break;
6779
6781 SA_DBG1(("mpiSetControllerConfigRsp:warning!!!! GENERAL_CONFIG_PAGE is read only, cannot be set\n"));
6782 break;
6783
6784 /* why we need to read the scrach pad register when handling ENCRYPTION_SECURITY_PARM_PAGE??? */
6786 {
6787 bit32 ScratchPad1 = 0;
6788 bit32 ScratchPad3 = 0;
6789 agsaEncryptInfo_t encrypt;
6790 agsaEncryptInfo_t *encryptInfo = &encrypt;
6791 SA_DBG1(("mpiSetControllerConfigRsp: AGSA_ENCRYPTION_CONTROL_PARM_PAGE\n" ));
6792
6793 if( pRequest->modePageContext)
6794 {
6795 pRequest->modePageContext = agFALSE;
6796 }
6797
6798 si_memset(&encrypt, 0, sizeof(agsaEncryptInfo_t));
6799 encryptInfo->status = 0;
6800 encryptInfo->encryptionCipherMode = 0;
6801 encryptInfo->encryptionSecurityMode = 0;
6802
6803 ScratchPad1 = ossaHwRegRead(agRoot,V_Scratchpad_1_Register);
6804 ScratchPad3 = ossaHwRegRead(agRoot,V_Scratchpad_3_Register);
6805 if( ScratchPad3 & SCRATCH_PAD3_V_XTS_ENABLED)
6806 {
6808 }
6809 if( (ScratchPad3 & SCRATCH_PAD3_V_SM_MASK ) == SCRATCH_PAD3_V_SMF_ENABLED )
6810 {
6812 }
6813 if( (ScratchPad3 & SCRATCH_PAD3_V_SM_MASK ) == SCRATCH_PAD3_V_SMA_ENABLED)
6814 {
6816 }
6817 if( (ScratchPad3 & SCRATCH_PAD3_V_SM_MASK ) == SCRATCH_PAD3_V_SMB_ENABLED )
6818 {
6820 }
6822 {
6823 if((ScratchPad3 & SCRATCH_PAD3_V_ENC_MASK) == SCRATCH_PAD3_V_ENC_READY ) /* 3 */
6824 {
6825 encryptInfo->status = AGSA_RC_SUCCESS;
6826 }
6827 else if((ScratchPad3 & SCRATCH_PAD3_V_ENC_READY) == SCRATCH_PAD3_V_ENC_DISABLED) /* 0 */
6828 {
6829 encryptInfo->status = 0xFFFF;
6830 encryptInfo->encryptionCipherMode = 0;
6831 encryptInfo->encryptionSecurityMode = 0;
6832 }
6833 else if((ScratchPad3 & SCRATCH_PAD3_V_ENC_MASK ) == SCRATCH_PAD3_V_ENC_DIS_ERR) /* 1 */
6834 {
6835 encryptInfo->status = (ScratchPad3 & SCRATCH_PAD3_V_ERR_CODE ) >> SHIFT16;
6836 }
6837 else if((ScratchPad3 & SCRATCH_PAD3_V_ENC_MASK ) == SCRATCH_PAD3_V_ENC_ENA_ERR) /* 2 */
6838 {
6839 encryptInfo->status = (ScratchPad3 & SCRATCH_PAD3_V_ERR_CODE ) >> SHIFT16;
6840 }
6841 }
6842 else if((ScratchPad1 & SCRATCH_PAD1_V_RAAE_MASK) == SCRATCH_PAD1_V_RAAE_ERR)
6843 {
6844 SA_DBG1(("mpiSetControllerConfigRsp, RAAE not ready SPC AGSA_RC_FAILURE\n"));
6845 encryptInfo->status = 0xFFFF;
6846 encryptInfo->encryptionCipherMode = 0;
6847 encryptInfo->encryptionSecurityMode = 0;
6848 }
6849 else if((ScratchPad1 & SCRATCH_PAD1_V_RAAE_MASK) == 0x0 )
6850 {
6851 SA_DBG2(("mpiSetControllerConfigRsp, RAAE not ready AGSA_RC_BUSY\n"));
6852 }
6853
6854 SA_DBG2(("mpiSetControllerConfigRsp, encryptionCipherMode 0x%x encryptionSecurityMode 0x%x status 0x%x\n",
6855 encryptInfo->encryptionCipherMode,
6856 encryptInfo->encryptionSecurityMode,
6857 encryptInfo->status));
6858 SA_DBG2(("mpiSetControllerConfigRsp, ScratchPad3 0x%x\n",ScratchPad3));
6859 SA_DBG1(("mpiSetControllerConfigRsp:AGSA_ENCRYPTION_CONTROL_PARM_PAGE 0x%X\n", agMode.modePageOperation));
6860 ossaHwCB(agRoot, agNULL, OSSA_HW_EVENT_SECURITY_MODE, errorQualifier, (void *)encryptInfo, agMode.context);
6861 break;
6862 }
6863
6864 default:
6865 SA_DBG1(("mpiSetControllerConfigRsp: Unknown page code 0x%X\n", pagetype));
6866 break;
6867 }
6868
6869 /* remove the request from IOMap */
6870 saRoot->IOMap[tag].Tag = MARK_OFF;
6871 saRoot->IOMap[tag].IORequest = agNULL;
6872 saRoot->IOMap[tag].agContext = agNULL;
6873
6875 SA_ASSERT((pRequest->valid), "pRequest->valid");
6876 pRequest->valid = agFALSE;
6877 /* return the request to free pool */
6879 {
6880 SA_DBG1(("mpiSetControllerRsp: saving pRequest (%p) for later use\n", pRequest));
6881 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
6882 }
6883 else
6884 {
6885 /* return the request to free pool */
6886 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
6887 }
6889
6890 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3a");
6891 return AGSA_RC_SUCCESS;
6892
6893}
6894
6895/******************************************************************************/
6906/*******************************************************************************/
6908 agsaRoot_t *agRoot,
6910 )
6911{
6912 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
6913 agsaIORequestDesc_t *pRequest;
6914 agsaHWEventMode_t agMode;
6915 bit32 status, errorQualifier, tag;
6916 bit32 configPage[12];
6917
6919
6920 si_memset(&agMode, 0, sizeof(agsaHWEventMode_t));
6921 si_memset(configPage, 0, sizeof(configPage));
6922
6923
6924 SA_DBG2(("mpiGetControllerConfigRsp: HTag=0x%x\n", pIomb->tag));
6925
6926 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t, tag));
6927 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t, status));
6928 OSSA_READ_LE_32(AGROOT, &errorQualifier, pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t, errorQualifier));
6929 OSSA_READ_LE_32(AGROOT, &configPage[0], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[0] ));
6930 OSSA_READ_LE_32(AGROOT, &configPage[1], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[1] ));
6931 OSSA_READ_LE_32(AGROOT, &configPage[2], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[2] ));
6932 OSSA_READ_LE_32(AGROOT, &configPage[3], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[3] ));
6933 OSSA_READ_LE_32(AGROOT, &configPage[4], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[4] ));
6934 OSSA_READ_LE_32(AGROOT, &configPage[5], pIomb, OSSA_OFFSET_OF(agsaGetControllerConfigRsp_t,configPage[5] ));
6935
6936 /* get request from IOMap */
6937 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
6938 if (agNULL == pRequest)
6939 {
6940 SA_DBG1(("mpiGetControllerConfigRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
6941 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3b");
6942 return AGSA_RC_FAILURE;
6943 }
6944
6945 si_memset(&agMode, 0, sizeof(agsaHWEventMode_t));
6947 agMode.status = status;
6948
6949 SA_DBG1(("mpiGetControllerConfigRsp: page 0x%x status 0x%x errorQualifier 0x%x \n", (pIomb->configPage[0] & 0xFF),status, errorQualifier));
6950
6951 switch (pIomb->configPage[0] & 0xFF)
6952 {
6955 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_SAS_PROTOCOL_TIMER_CONFIG_PAGE page len 0x%x \n",agMode.modePageLen));
6956 break;
6958 agMode.modePageLen = sizeof(agsaInterruptConfigPage_t);
6959 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_INTERRUPT_CONFIGURATION_PAGE page len 0x%x \n",agMode.modePageLen));
6960 break;
6962 agMode.modePageLen = sizeof(agsaIoGeneralPage_t);
6963 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_IO_GENERAL_CONFIG_PAGE page len 0x%x \n",agMode.modePageLen));
6964 break;
6966 agMode.modePageLen = sizeof(agsaEncryptGeneralPage_t);
6967 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_ENCRYPTION_GENERAL_CONFIG_PAGE page len 0x%x \n",agMode.modePageLen));
6968#ifdef HIALEAH_ENCRYPTION
6969 saRoot->EncGenPage.numberOfKeksPageCode = configPage[0];
6970 saRoot->EncGenPage.KeyCardIdKekIndex = configPage[1];
6971 saRoot->EncGenPage.KeyCardId3_0 = configPage[2];
6972 saRoot->EncGenPage.KeyCardId7_4 = configPage[3];
6973 saRoot->EncGenPage.KeyCardId11_8 = configPage[4];
6974
6975 SA_DBG1(("mpiGetControllerConfigRsp: numberOfKeksPageCode 0x%x\n",saRoot->EncGenPage.numberOfKeksPageCode));
6976 SA_DBG1(("mpiGetControllerConfigRsp: KeyCardIdKekIndex 0x%x\n",saRoot->EncGenPage.KeyCardIdKekIndex));
6977 SA_DBG1(("mpiGetControllerConfigRsp: KeyCardId3_0 0x%x\n",saRoot->EncGenPage.KeyCardId3_0));
6978 SA_DBG1(("mpiGetControllerConfigRsp: KeyCardId7_4 0x%x\n",saRoot->EncGenPage.KeyCardId7_4));
6979 SA_DBG1(("mpiGetControllerConfigRsp: KeyCardId11_8 0x%x\n",saRoot->EncGenPage.KeyCardId11_8));
6980#endif /* HIALEAH_ENCRYPTION */
6981
6982 break;
6984 agMode.modePageLen = sizeof(agsaEncryptDekConfigPage_t);
6985 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_ENCRYPTION_DEK_CONFIG_PAGE page len 0x%x \n",agMode.modePageLen));
6986 break;
6989 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_ENCRYPTION_CONTROL_PARM_PAGE page len 0x%x \n",agMode.modePageLen));
6990 break;
6993 SA_DBG1(("mpiGetControllerConfigRsp: AGSA_ENCRYPTION_HMAC_CONFIG_PAGE page len 0x%x \n",agMode.modePageLen));
6994 break;
6995 default:
6996 agMode.modePageLen = 0;
6997 SA_DBG1(("mpiGetControllerConfigRsp: Unknown !!! page len 0x%x \n",agMode.modePageLen));
6998 break;
6999 }
7000
7001 agMode.modePage = (void *) &pIomb->configPage[0];
7002 agMode.context = saRoot->IOMap[tag].agContext;
7003
7004 /* Report the event before freeing the IOMB */
7005 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_MODE, errorQualifier, (void *) &agMode, 0);
7006
7007 /* remove the request from IOMap */
7008 saRoot->IOMap[tag].Tag = MARK_OFF;
7009 saRoot->IOMap[tag].IORequest = agNULL;
7010 saRoot->IOMap[tag].agContext = agNULL;
7011
7013 SA_ASSERT((pRequest->valid), "pRequest->valid");
7014 pRequest->valid = agFALSE;
7015 /* return the request to free pool */
7017 {
7018 SA_DBG1(("mpiGetControllerRsp: saving pRequest (%p) for later use\n", pRequest));
7019 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7020 }
7021 else
7022 {
7023 /* return the request to free pool */
7024 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7025 }
7027
7028 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3b");
7029 return AGSA_RC_SUCCESS;
7030}
7031
7032/******************************************************************************/
7043/*******************************************************************************/
7045 agsaRoot_t *agRoot,
7047 )
7048{
7049 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7050 agsaIORequestDesc_t *pRequest;
7051 agsaContext_t *agContext;
7052 agsaHWEventEncrypt_t agEvent;
7053 bit32 status, errorQualifier, tag, flags;
7055
7056 SA_DBG1(("mpiKekManagementRsp: HTag=0x%x\n", pIomb->tag));
7057
7058 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaKekManagementRsp_t, tag));
7059 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaKekManagementRsp_t, status));
7060 OSSA_READ_LE_32(AGROOT, &flags, pIomb, OSSA_OFFSET_OF(agsaKekManagementRsp_t, flags));
7061 OSSA_READ_LE_32(AGROOT, &errorQualifier, pIomb, OSSA_OFFSET_OF(agsaKekManagementRsp_t, errorQualifier));
7062
7063
7064 SA_DBG1(("mpiKekManagementRsp:status 0x%x flags 0x%x errorQualifier 0x%x\n", status, flags, errorQualifier));
7065
7066 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
7067 if ((flags & 0xFF) == KEK_MGMT_SUBOP_UPDATE)
7068 {
7069 SA_DBG1(("mpiKekManagementRsp:KEK_MGMT_SUBOP_UPDATE 0x%x \n", status));
7070 if (flags & 0xFF00) /* update and store*/
7071 {
7073 }
7074 else /* update */
7075 {
7077 }
7078 agEvent.status = status;
7080 {
7081 agEvent.eq = errorQualifier;
7082 }
7083 agEvent.info = 0;
7084 /* Store the new KEK index in agEvent.handle */
7085 agEvent.handle = (void *) ((bitptr) (flags >> 24));
7086 /* Store the current KEK index in agEvent.param */
7087 agEvent.param = (void *) ((bitptr) (flags >> 16) & 0xFF);
7088
7089 }
7090
7091 else if ((flags & 0xFF) == KEK_MGMT_SUBOP_INVALIDATE)
7092 {
7094 agEvent.status = status;
7096 {
7097 agEvent.eq = errorQualifier;
7098 }
7099 agEvent.info = 0;
7100 /* Store the new KEK index in agEvent.handle */
7101 agEvent.handle = (void *) ((bitptr) (flags >> 24));
7102 /* Store the current KEK index in agEvent.param */
7103 agEvent.param = (void *) ((bitptr) (flags >> 16) & 0xFF);
7104 }
7105
7106 else if ((flags & 0xFF) == KEK_MGMT_SUBOP_KEYCARDINVALIDATE)
7107 {
7109 agEvent.status = status;
7111 {
7112 agEvent.eq = errorQualifier;
7113 }
7114 agEvent.info = 0;
7115 /* Store the new KEK index in agEvent.handle */
7116 agEvent.handle = (void *) ((bitptr) (flags >> 24));
7117 /* Store the current KEK index in agEvent.param */
7118 agEvent.param = (void *) ((bitptr) (flags >> 16) & 0xFF);
7119
7120 }
7121
7122 else if ((flags & 0xFF) == KEK_MGMT_SUBOP_KEYCARDUPDATE)
7123 {
7125 agEvent.status = status;
7127 {
7128 agEvent.eq = errorQualifier;
7129 }
7130 agEvent.info = 0;
7131 /* Store the new KEK index in agEvent.handle */
7132 agEvent.handle = (void *) ((bitptr) (flags >> 24));
7133 /* Store the current KEK index in agEvent.param */
7134 agEvent.param = (void *) ((bitptr) (flags >> 16) & 0xFF);
7135
7136 }
7137 /* get request from IOMap */
7138 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7139 if (agNULL == pRequest)
7140 {
7141 SA_DBG1(("mpiKekManagementRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7142 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2A");
7143 return AGSA_RC_FAILURE;
7144 }
7145
7146 agContext = saRoot->IOMap[tag].agContext;
7147 /* remove the request from IOMap */
7148 saRoot->IOMap[tag].Tag = MARK_OFF;
7149 saRoot->IOMap[tag].IORequest = agNULL;
7150 saRoot->IOMap[tag].agContext = agNULL;
7151
7152 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_ENCRYPTION, 0, (void *) &agEvent, agContext);
7153
7155 SA_ASSERT((pRequest->valid), "pRequest->valid");
7156 pRequest->valid = agFALSE;
7157 /* return the request to free pool */
7159 {
7160 SA_DBG1(("mpiKekManagementRsp: saving pRequest (%p) for later use\n", pRequest));
7161 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7162 }
7163 else
7164 {
7165 /* return the request to free pool */
7166 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7167 }
7169
7170 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2A");
7171
7172 return AGSA_RC_SUCCESS;
7173}
7174
7175/******************************************************************************/
7186/*******************************************************************************/
7188 agsaRoot_t *agRoot,
7190 )
7191{
7192 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7193 agsaIORequestDesc_t *pRequest;
7194 agsaContext_t *agContext;
7195 agsaHWEventEncrypt_t agEvent;
7196 bit32 flags, status, errorQualifier, tag, dekIndex;
7197
7199
7200 SA_DBG1(("mpiDekManagementRsp: HTag=0x%x\n", pIomb->tag));
7201
7202 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaDekManagementRsp_t, tag));
7203 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaDekManagementRsp_t, status));
7204 OSSA_READ_LE_32(AGROOT, &flags, pIomb, OSSA_OFFSET_OF(agsaDekManagementRsp_t, flags));
7205 OSSA_READ_LE_32(AGROOT, &errorQualifier, pIomb, OSSA_OFFSET_OF(agsaDekManagementRsp_t, errorQualifier));
7206 OSSA_READ_LE_32(AGROOT, &dekIndex, pIomb, OSSA_OFFSET_OF(agsaDekManagementRsp_t, dekIndex));
7207
7208 SA_DBG2(("mpiDekManagementRsp:tag =0x%x\n",tag ));
7209 SA_DBG2(("mpiDekManagementRsp:status =0x%x\n", status));
7210 SA_DBG2(("mpiDekManagementRsp:flags =0x%x\n",flags ));
7211 SA_DBG2(("mpiDekManagementRsp:errorQualifier =0x%x\n", errorQualifier));
7212 SA_DBG2(("mpiDekManagementRsp:dekIndex =0x%x\n",dekIndex ));
7213
7214 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
7215 if ((flags & 0xFF) == DEK_MGMT_SUBOP_UPDATE)
7216 {
7218 }
7219 else
7220 {
7222 }
7223 agEvent.status = status;
7225 {
7226 agEvent.eq = errorQualifier;
7227 }
7228 /* Store the DEK in agEvent.info */
7229 agEvent.info = (flags >> 8) & 0xF;
7230 /* Store the KEK index in agEvent.handle */
7231 agEvent.handle = (void *) ((bitptr) (flags >> 24));
7232 /* Store the DEK index in agEvent.param */
7233 agEvent.param = (void *) (bitptr) dekIndex;
7234
7235 /* get request from IOMap */
7236 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7237 if (agNULL == pRequest)
7238 {
7239 SA_DBG1(("mpiDekManagementRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7240 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2B");
7241 return AGSA_RC_FAILURE;
7242 }
7243
7244 agContext = saRoot->IOMap[tag].agContext;
7245 /* remove the request from IOMap */
7246 saRoot->IOMap[tag].Tag = MARK_OFF;
7247 saRoot->IOMap[tag].IORequest = agNULL;
7248 saRoot->IOMap[tag].agContext = agNULL;
7249
7250 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_ENCRYPTION, 0, (void *) &agEvent,agContext );
7251
7253 SA_ASSERT((pRequest->valid), "pRequest->valid");
7254 pRequest->valid = agFALSE;
7255 /* return the request to free pool */
7257 {
7258 SA_DBG1(("mpiDekManagementRsp: saving pRequest (%p) for later use\n", pRequest));
7259 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7260 }
7261 else
7262 {
7263 /* return the request to free pool */
7264 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7265 }
7266
7268
7269 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2B");
7270
7271 return AGSA_RC_SUCCESS;
7272}
7273
7274/******************************************************************************/
7285/*******************************************************************************/
7287 agsaRoot_t *agRoot,
7289 )
7290{
7291 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7292 agsaIORequestDesc_t *pRequest;
7293 agsaContext_t *agContext;
7294 agsaHWEventEncrypt_t agEvent;
7295 bit32 OPRIDX_AUTIDX_R_OMO,status, errorQualifier, tag;
7296
7298
7299 SA_DBG1(("mpiOperatorManagementRsp: HTag=0x%x\n", pIomb->tag));
7300
7301 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaOperatorMangmenRsp_t, tag));
7302 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaOperatorMangmenRsp_t, status));
7303 OSSA_READ_LE_32(AGROOT, &OPRIDX_AUTIDX_R_OMO, pIomb, OSSA_OFFSET_OF(agsaOperatorMangmenRsp_t, OPRIDX_AUTIDX_R_OMO));
7304 OSSA_READ_LE_32(AGROOT, &errorQualifier, pIomb, OSSA_OFFSET_OF(agsaOperatorMangmenRsp_t, errorQualifier));
7305
7306 SA_DBG2(("mpiOperatorManagementRsp:tag =0x%x\n",tag ));
7307 SA_DBG2(("mpiOperatorManagementRsp:status =0x%x\n", status));
7308 SA_DBG2(("mpiOperatorManagementRsp:OPRIDX_AUTIDX_R_OMO =0x%x\n",OPRIDX_AUTIDX_R_OMO ));
7309 SA_DBG2(("mpiOperatorManagementRsp:errorQualifier =0x%x\n", errorQualifier));
7310
7311 /* get request from IOMap */
7312 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7313 if (agNULL == pRequest)
7314 {
7315 SA_DBG1(("mpiOperatorManagementRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7316 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "36");
7317 return AGSA_RC_FAILURE;
7318 }
7319
7320 agContext = saRoot->IOMap[tag].agContext;
7321 /* remove the request from IOMap */
7322 saRoot->IOMap[tag].Tag = MARK_OFF;
7323 saRoot->IOMap[tag].IORequest = agNULL;
7324 saRoot->IOMap[tag].agContext = agNULL;
7325
7326 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
7327 agEvent.status = status;
7328 agEvent.info = OPRIDX_AUTIDX_R_OMO;
7331 {
7332 agEvent.eq = errorQualifier;
7333 }
7334
7335 ossaOperatorManagementCB(agRoot, agContext, status, errorQualifier);
7336
7338 SA_ASSERT((pRequest->valid), "pRequest->valid");
7339 pRequest->valid = agFALSE;
7340 /* return the request to free pool */
7342 {
7343 SA_DBG1(("mpiOperatorManagementRsp: saving pRequest (%p) for later use\n", pRequest));
7344 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7345 }
7346 else
7347 {
7348 /* return the request to free pool */
7349 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7350 }
7351
7353
7354 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "36");
7355
7356 return AGSA_RC_SUCCESS;
7357}
7358
7360 agsaRoot_t *agRoot,
7362 )
7363{
7364 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7365 agsaIORequestDesc_t *pRequest;
7366 agsaContext_t *agContext;
7367 agsaHWEventEncrypt_t agEvent;
7368 bit32 status;
7369 bit32 results[11];
7370 bit32 length;
7371 bit32 subop;
7372 bit32 tag;
7373
7375
7376 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, tag));
7377 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, status));
7378 OSSA_READ_LE_32(AGROOT, &subop, pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, subop));
7379 OSSA_READ_LE_32(AGROOT, &results[0], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[0]));
7380 OSSA_READ_LE_32(AGROOT, &results[1], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[1]));
7381 OSSA_READ_LE_32(AGROOT, &results[2], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[2]));
7382 OSSA_READ_LE_32(AGROOT, &results[3], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[3]));
7383 OSSA_READ_LE_32(AGROOT, &results[4], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[4]));
7384 OSSA_READ_LE_32(AGROOT, &results[5], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[5]));
7385 OSSA_READ_LE_32(AGROOT, &results[6], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[6]));
7386 OSSA_READ_LE_32(AGROOT, &results[7], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[7]));
7387 OSSA_READ_LE_32(AGROOT, &results[8], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[8]));
7388 OSSA_READ_LE_32(AGROOT, &results[9], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[9]));
7389 OSSA_READ_LE_32(AGROOT, &results[10], pIomb, OSSA_OFFSET_OF(agsaEncryptBistRsp_t, testResults[10]));
7390
7391 subop &= 0xFF;
7392 SA_DBG1(("mpiBistRsp: HTag=0x%x subops =0x%x status =0x%x\n",pIomb->tag, subop, status));
7393
7394 switch(subop)
7395 {
7396 case AGSA_BIST_TEST:
7397 length = sizeof(agsaEncryptSelfTestStatusBitMap_t);
7398 break;
7399 case AGSA_SHA_TEST:
7400 length = sizeof(agsaEncryptSHATestResult_t);
7401 break;
7402 case AGSA_HMAC_TEST:
7403 length = sizeof(agsaEncryptHMACTestResult_t);
7404 break;
7405 default:
7406 length = 0;
7407 break;
7408 }
7409
7410 si_memset(&agEvent, 0, sizeof(agsaHWEventEncrypt_t));
7411 agEvent.status = status;
7413 agEvent.info = length;
7414 agEvent.eq = subop;
7415 agEvent.handle = agNULL;
7416 agEvent.param = &results;
7417
7418 /* get request from IOMap */
7419 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7420 if (agNULL == pRequest)
7421 {
7422 SA_DBG1(("mpiBistRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7423 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "37");
7424 return AGSA_RC_FAILURE;
7425 }
7426
7427 agContext = saRoot->IOMap[tag].agContext;
7428
7429 ossaHwCB(agRoot, NULL, OSSA_HW_EVENT_ENCRYPTION, 0, (void*)&agEvent, agContext);
7430
7431 /* remove the request from IOMap */
7432 saRoot->IOMap[tag].Tag = MARK_OFF;
7433 saRoot->IOMap[tag].IORequest = agNULL;
7434 saRoot->IOMap[tag].agContext = agNULL;
7435
7437 SA_ASSERT((pRequest->valid), "pRequest->valid");
7438 pRequest->valid = agFALSE;
7439 /* return the request to free pool */
7441 {
7442 SA_DBG1(("mpiBistRsp: saving pRequest (%p) for later use\n", pRequest));
7443 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7444 }
7445 else
7446 {
7447 /* return the request to free pool */
7448 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7449 }
7450
7452
7453 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "37");
7454
7455 return AGSA_RC_SUCCESS;
7456}
7457
7458/******************************************************************************/
7469/*******************************************************************************/
7471 agsaRoot_t *agRoot,
7473 )
7474{
7475 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7476 agsaIORequestDesc_t *pRequest = agNULL;
7477 agsaContext_t *agContext = agNULL;
7478 bit32 ERR_QLFR_OPRIDX_PIN_ACS, OPRIDX_PIN_ACS, status, errorQualifier, tag = 0;
7479
7481
7482 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaSetOperatorRsp_t, tag));
7483 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaSetOperatorRsp_t, status));
7484 OSSA_READ_LE_32(AGROOT, &ERR_QLFR_OPRIDX_PIN_ACS, pIomb, OSSA_OFFSET_OF(agsaSetOperatorRsp_t, ERR_QLFR_OPRIDX_PIN_ACS));
7485
7486 errorQualifier = ERR_QLFR_OPRIDX_PIN_ACS >> 16;
7487 OPRIDX_PIN_ACS = ERR_QLFR_OPRIDX_PIN_ACS & 0xFFFF;
7488
7489 SA_DBG1(("mpiSetOperatorRsp: HTag=0x%x ERR_QLFR=0x%x OPRIDX_PIN_ACS=0x%x \n",tag, errorQualifier, OPRIDX_PIN_ACS));
7490
7491 /* get request from IOMap */
7492 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7493 if (agNULL == pRequest)
7494 {
7495 SA_DBG1(("mpiSetOperatorRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7496 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "38");
7497 return AGSA_RC_FAILURE;
7498 }
7499
7500 agContext = saRoot->IOMap[tag].agContext;
7501 /* remove the request from IOMap */
7502 saRoot->IOMap[tag].Tag = MARK_OFF;
7503 saRoot->IOMap[tag].IORequest = agNULL;
7504 saRoot->IOMap[tag].agContext = agNULL;
7505
7506
7507 ossaSetOperatorCB(agRoot,agContext,status,errorQualifier );
7508
7510 SA_ASSERT((pRequest->valid), "pRequest->valid");
7511 pRequest->valid = agFALSE;
7512 /* return the request to free pool */
7514 {
7515 SA_DBG1(("mpiSetOperatorRsp: saving pRequest (%p) for later use\n", pRequest));
7516 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7517 }
7518 else
7519 {
7520 /* return the request to free pool */
7521 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7522 }
7523
7525
7526 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "38");
7527
7528 return AGSA_RC_SUCCESS;
7529}
7530
7531/******************************************************************************/
7542/*******************************************************************************/
7544 agsaRoot_t *agRoot,
7546 )
7547{
7548 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7549 agsaIORequestDesc_t *pRequest;
7550 agsaContext_t *agContext;
7551 bit32 Num_Option, NumOperators ,status, tag;
7552 bit8 option, Role = 0;
7553 bit32 IDstr[8];
7554 bit8 *tmpIDstr = agNULL;
7555 agsaID_t *IDString = agNULL;
7556
7558
7559 si_memset(&IDstr, 0, sizeof(IDstr));
7560 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, tag));
7561 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, status));
7562 OSSA_READ_LE_32(AGROOT, &Num_Option, pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, Num_Option));
7563 OSSA_READ_LE_32(AGROOT, &IDstr[0], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[0]));
7564 OSSA_READ_LE_32(AGROOT, &IDstr[1], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[1]));
7565 OSSA_READ_LE_32(AGROOT, &IDstr[2], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[2]));
7566 OSSA_READ_LE_32(AGROOT, &IDstr[3], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[3]));
7567 OSSA_READ_LE_32(AGROOT, &IDstr[4], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[4]));
7568 OSSA_READ_LE_32(AGROOT, &IDstr[5], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[5]));
7569 OSSA_READ_LE_32(AGROOT, &IDstr[6], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[6]));
7570 OSSA_READ_LE_32(AGROOT, &IDstr[7], pIomb, OSSA_OFFSET_OF(agsaGetOperatorRsp_t, IDString[7]));
7571
7572 SA_DBG1(("mpiGetOperatorRsp:tag=0x%x status=0x%x Num_Option=0x%x IDString_Role=0x%x\n",
7573 tag, status, Num_Option, IDstr[0]));
7574
7575 /* get request from IOMap */
7576 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7577 if (agNULL == pRequest)
7578 {
7579 SA_DBG1(("mpiGetOperatorRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7580 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3f");
7581 return AGSA_RC_FAILURE;
7582 }
7583
7584 agContext = saRoot->IOMap[tag].agContext;
7585 /* remove the request from IOMap */
7586 saRoot->IOMap[tag].Tag = MARK_OFF;
7587 saRoot->IOMap[tag].IORequest = agNULL;
7588 saRoot->IOMap[tag].agContext = agNULL;
7589 option = Num_Option & 0xFF;
7590 NumOperators = (Num_Option >> SHIFT8) & 0xFF;
7591 /* current operator's Role/ID, valid only if option == 1 */
7592 if ( option == 1)
7593 {
7594 /* extra the role value as parameter */
7595 Role = IDstr[0] & 0xFF;
7596 tmpIDstr = (bit8*)&IDstr[0];
7597 tmpIDstr++; /* skip role byte */
7598 IDString = (agsaID_t *)tmpIDstr;
7599 SA_DBG1(("mpiGetOperatorRsp: OSSA_IO_SUCCESS\n"));
7600 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[0], IDString->ID[1], IDString->ID[2], IDString->ID[3]));
7601 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[4], IDString->ID[5], IDString->ID[6], IDString->ID[7]));
7602 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[8], IDString->ID[9], IDString->ID[10],IDString->ID[11]));
7603 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[12],IDString->ID[13],IDString->ID[14],IDString->ID[15]));
7604 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[16],IDString->ID[17],IDString->ID[18],IDString->ID[19]));
7605 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[20],IDString->ID[21],IDString->ID[22],IDString->ID[23]));
7606 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x 0x%02x\n",IDString->ID[24],IDString->ID[25],IDString->ID[26],IDString->ID[27]));
7607 SA_DBG2(("mpiGetOperatorRsp: 0x%02x 0x%02x 0x%02x\n", IDString->ID[28],IDString->ID[29],IDString->ID[30]));
7608 }
7609
7610 SA_DBG1(("mpiGetOperatorRsp:status 0x%x option 0x%x Role 0x%x\n",status,option,Role ));
7611
7612 ossaGetOperatorCB(agRoot,agContext,status,option,NumOperators ,Role,IDString );
7613
7615 SA_ASSERT((pRequest->valid), "pRequest->valid");
7616 pRequest->valid = agFALSE;
7617 /* return the request to free pool */
7619 {
7620 SA_DBG1(("mpiGetOperatorRsp: saving pRequest (%p) for later use\n", pRequest));
7621 saLlistIOAdd(&(saRoot->freeReservedRequests), &(pRequest->linkNode));
7622 }
7623 else
7624 {
7625 /* return the request to free pool */
7626 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7627 }
7628
7630
7631 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3f");
7632
7633 return AGSA_RC_SUCCESS;
7634}
7635
7636
7638 agsaRoot_t *agRoot,
7640 )
7641{
7642
7643 bit32 ret = AGSA_RC_SUCCESS;
7644 agsaLLRoot_t *saRoot = agNULL;
7645 agsaIORequestDesc_t *pRequest;
7646 agsaContext_t *agContext;
7647
7648 bit32 tag = 0; /* 1 */
7649 bit32 status = 0; /* 2 */
7650 bit32 channel; /* 3 */
7651 bit32 BistLo; /* 4 */
7652 bit32 BistHi; /* 5 */
7653 bit32 BytesXfered = 0; /* 6 */
7654 bit32 PciLo; /* 7 */
7655 bit32 PciHi; /* 8 */
7656 bit32 PciBytecount = 0; /* 9 */
7657
7659
7660 /* sanity check */
7661 SA_ASSERT((agNULL != agRoot), "");
7662 saRoot = (agsaLLRoot_t *) (agRoot->sdkData);
7663 SA_ASSERT((agNULL != saRoot), "");
7664
7665 if(smIS_SPC12V(agRoot))
7666 {
7667 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,tag));
7668 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,status));
7669 OSSA_READ_LE_32(AGROOT, &channel, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,channel));
7670 OSSA_READ_LE_32(AGROOT, &BistLo, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,BistLo));
7671 OSSA_READ_LE_32(AGROOT, &BistHi, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,BistHi));
7672 OSSA_READ_LE_32(AGROOT, &BytesXfered, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,BytesXfered));
7673 OSSA_READ_LE_32(AGROOT, &PciLo, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,PciLo));
7674 OSSA_READ_LE_32(AGROOT, &PciHi, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,PciHi));
7675 OSSA_READ_LE_32(AGROOT, &PciBytecount, pIomb, OSSA_OFFSET_OF(agsaGetVHistCapRsp_t,PciBytecount));
7676 }
7677 else
7678 {
7679 /* SPC does not support this command */
7680 SA_DBG1(("mpiGetVHistRsp: smIS_SPC12V only\n"));
7681 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3K");
7682 return AGSA_RC_FAILURE;
7683 }
7684
7685 SA_DBG3(("mpiGetVHistRsp: HTag=0x%x\n", tag));
7686
7687 /* get request from IOMap */
7688 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7689 if (agNULL == pRequest)
7690 {
7691 SA_DBG1(("mpiGetVHistRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7692 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3K");
7693 return AGSA_RC_FAILURE;
7694 }
7695
7696 agContext = saRoot->IOMap[tag].agContext;
7697
7698 /* remove the request from IOMap */
7699 saRoot->IOMap[tag].Tag = MARK_OFF;
7700 saRoot->IOMap[tag].IORequest = agNULL;
7701 saRoot->IOMap[tag].agContext = agNULL;
7702
7703 SA_ASSERT((pRequest->valid), "pRequest->valid");
7704
7705 /* check status success or failure */
7706 if (status)
7707 {
7708 SA_DBG1(("mpiGetVHistRsp: status is FAILED, status = %x\n", status ));
7709
7710 if (pRequest->completionCB == agNULL)
7711 {
7712 ossaVhistCaptureCB(agRoot, agContext, status, BytesXfered);
7713 }
7714 else
7715 {
7716 (*(ossaVhistCaptureCB_t)(pRequest->completionCB))(agRoot, agContext, status, BytesXfered);
7717 }
7718
7720 pRequest->valid = agFALSE;
7721 /* return the request to free pool */
7722 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7724
7725 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "3K");
7726 return AGSA_RC_FAILURE;
7727 }
7728
7729 /* status is SUCCESS */
7730 SA_DBG1(("mpiGetVHistRsp: status is SUCCESS\n" ));
7731
7732 if (pRequest->completionCB == agNULL)
7733 {
7734 ossaVhistCaptureCB(agRoot, agContext, status, BytesXfered);
7735 }
7736 else
7737 {
7738 (*(ossaVhistCaptureCB_t)(pRequest->completionCB))(agRoot, agContext, status, BytesXfered);
7739 }
7740
7742 pRequest->valid = agFALSE;
7743 /* return the request to free pool */
7744 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7746
7747 /* return value */
7748 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "3K");
7749
7750 return ret;
7751}
7752
7753
7754
7755/******************************************************************************/
7766/*******************************************************************************/
7768 agsaRoot_t *agRoot,
7770 )
7771{
7772
7773 bit32 ret = AGSA_RC_SUCCESS;
7774 agsaLLRoot_t *saRoot = (agsaLLRoot_t *)(agRoot->sdkData);
7775 agsaIORequestDesc_t *pRequest;
7776 agsaContext_t *agContext;
7777 bit32 tag, status;
7779
7781
7782 OSSA_READ_LE_32(AGROOT, &tag, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, tag));
7783 OSSA_READ_LE_32(AGROOT, &status, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, status));
7784 /* get TAG */
7785 SA_DBG3(("mpiDifEncOffloadRsp: HTag=0x%x\n", tag));
7786
7787 /* get request from IOMap */
7788 pRequest = (agsaIORequestDesc_t*)saRoot->IOMap[tag].IORequest;
7789 if (agNULL == pRequest)
7790 {
7791 SA_DBG1(("mpiDifEncOffloadRsp: Bad Response IOMB!!! pRequest is NULL. TAG=0x%x STATUS=0x%x\n", tag, status));
7792 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "3F");
7793 return AGSA_RC_FAILURE;
7794 }
7795
7796 agContext = saRoot->IOMap[tag].agContext;
7797
7798 /* remove the request from IOMap */
7799 saRoot->IOMap[tag].Tag = MARK_OFF;
7800 saRoot->IOMap[tag].IORequest = agNULL;
7801 saRoot->IOMap[tag].agContext = agNULL;
7802
7803 SA_ASSERT((pRequest->valid), "pRequest->valid");
7804
7805 /* check status success or failure */
7806 if (status)
7807 {
7808 SA_DBG1(("mpiDifEncOffloadRsp: status is FAILED, status = %x\n", status ));
7809
7812 {
7813 si_memset(&details, 0, sizeof(agsaOffloadDifDetails_t));
7814 OSSA_READ_LE_32(AGROOT, &details.ExpectedCRCUDT01, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, ExpectedCRCUDT01));
7815 OSSA_READ_LE_32(AGROOT, &details.ExpectedUDT2345, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, ExpectedUDT2345));
7816 OSSA_READ_LE_32(AGROOT, &details.ActualCRCUDT01, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, ActualCRCUDT01));
7817 OSSA_READ_LE_32(AGROOT, &details.ActualUDT2345, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, ActualUDT2345));
7818 OSSA_READ_LE_32(AGROOT, &details.DIFErr, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, DIFErr));
7819 OSSA_READ_LE_32(AGROOT, &details.ErrBoffset, pIomb, OSSA_OFFSET_OF(agsaDifEncOffloadRspV_t, ErrBoffset));
7820
7821 if (pRequest->completionCB == agNULL)
7822 {
7823 ossaDIFEncryptionOffloadStartCB(agRoot, agContext, status, &details);
7824 }
7825 else
7826 {
7827 (*(ossaDIFEncryptionOffloadStartCB_t)(pRequest->completionCB))(agRoot, agContext, status, &details);
7828 }
7829 }
7830 else
7831 {
7832 if (pRequest->completionCB == agNULL)
7833 {
7834 ossaDIFEncryptionOffloadStartCB(agRoot, agContext, status, agNULL);
7835 }
7836 else
7837 {
7838 (*(ossaDIFEncryptionOffloadStartCB_t)(pRequest->completionCB))(agRoot, agContext, status, agNULL);
7839 }
7840 }
7841
7842 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "3F");
7843
7845 pRequest->valid = agFALSE;
7846 /* return the request to free pool */
7847 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7849
7850 return AGSA_RC_FAILURE;
7851 }
7852
7853 /* status is SUCCESS */
7854 SA_DBG1(("mpiDifEncOffloadRsp: status is SUCCESS\n" ));
7855
7856 if (pRequest->completionCB == agNULL)
7857 {
7858 ossaDIFEncryptionOffloadStartCB(agRoot, agContext, status, agNULL);
7859 }
7860 else
7861 {
7862 (*(ossaDIFEncryptionOffloadStartCB_t)(pRequest->completionCB))(agRoot, agContext, status, agNULL);
7863 }
7864
7866 pRequest->valid = agFALSE;
7867 /* return the request to free pool */
7868 saLlistIOAdd(&(saRoot->freeIORequests), &(pRequest->linkNode));
7870
7871 /* return value */
7872 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "3F");
7873
7874 return ret;
7875}
7876
bit32 channel
Definition: encrypt_ioctl.h:1
bit32 flags
Definition: encrypt_ioctl.h:2
bit32 dekIndex
Definition: encrypt_ioctl.h:2
bit16 Status
Definition: encrypt_ioctl.h:4
bit32 status
Definition: encrypt_ioctl.h:12
enum mpiMsgCategory_e mpiMsgCategory_t
Definition: mpi.h:84
#define smTraceFuncEnter(L, I)
Definition: mpidebug.h:238
#define smTraceFuncExit(L, S, I)
Definition: mpidebug.h:239
#define smTrace(L, I, V)
Definition: mpidebug.h:244
#define hpDBG_VERY_LOUD
Definition: mpidebug.h:100
#define OS_ASSERT(expr, message)
Definition: osdebug.h:56
#define osti_memset(s, c, n)
Definition: osstring.h:65
unsigned short bit16
Definition: ostypes.h:98
#define NULL
Definition: ostypes.h:142
#define agNULL
Definition: ostypes.h:151
unsigned long bitptr
Definition: ostypes.h:112
#define GLOBAL
Definition: ostypes.h:131
unsigned int bit32
Definition: ostypes.h:99
#define agFALSE
Definition: ostypes.h:150
#define FORCEINLINE
Definition: ostypes.h:86
#define agTRUE
Definition: ostypes.h:149
unsigned char bit8
Definition: ostypes.h:97
struct agsaInterruptConfigPage_s agsaInterruptConfigPage_t
#define OSSA_DIAG_SE_INVALID_PHY_ID
Definition: sa.h:1262
#define OSSA_DIAG_SE_SUCCESS
Definition: sa.h:1261
#define OSSA_RC_ACCEPT
Definition: sa.h:1241
#define OSSA_MEMORY_ALLOC_FAILURE
Definition: sa.h:1257
#define OSSA_DFE_MEASUREMENT_IN_PROGRESS
Definition: sa.h:1627
#define AGSA_IO_GENERAL_CONFIG_PAGE
Definition: sa.h:3154
#define SA_RESERVED_REQUEST_COUNT
Definition: sa.h:3597
#define AGSA_PORT_SET_PORT_RESET_TIME
Definition: sa.h:1173
#define AGSA_NVMD_TWI_DEVICES
Definition: sa.h:1449
#define OSSA_MPI_ERR_DEK_MANAGEMENT_DEK_UNWRAP_FAIL
Definition: sa.h:1506
#define OSSA_INVALID_ENCRYPTION_SECURITY_MODE
Definition: sa.h:1502
#define OSSA_HW_ENCRYPT_DEK_UPDATE
Definition: sa.h:1490
#define AGSA_RC_BUSY
Definition: sa.h:782
#define OSSA_PORT_IN_RESET
Definition: sa.h:1327
void * agsaFrameHandle_t
handle to access frame
Definition: sa.h:1719
#define OSSA_DEV_INFO_NO_EXTENDED_INFO
Definition: sa.h:1404
#define OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED
Definition: sa.h:1308
#define AGSA_ENCRYPTION_GENERAL_CONFIG_PAGE
Definition: sa.h:3155
#define OSSA_HW_EVENT_ID_FRAME_TIMEOUT
Definition: sa.h:1300
#define AGSA_SHA_TEST
Definition: sa.h:3269
#define OSSA_HW_EVENT_BROADCAST_EXP
Definition: sa.h:1301
#define AGSA_ENCRYPTION_HMAC_CONFIG_PAGE
Definition: sa.h:3158
#define OSSA_DIAG_SUCCESS
Definition: sa.h:1251
#define OSSA_DEV_INFO_INVALID_HANDLE
Definition: sa.h:1403
#define OSSA_OFFSET_OF(STRUCT_TYPE, FEILD)
Definition: sa.h:39
#define OSSA_MPI_ENC_ERR_ILLEGAL_DEK_PARAM
Definition: sa.h:1505
void(* ossaDeviceRegistrationCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaDevHandle_t *agDevHandle, bit32 deviceID)
Callback definition for .ossaDeviceRegistration.
Definition: sa.h:3469
#define OSSA_PCIE_DIAG_SUCCESS
Definition: sa.h:1955
#define OSSA_DFE_MPI_ERR_RESOURCE_UNAVAILABLE
Definition: sa.h:1625
void(* ossaDeregisterDeviceHandleCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status)
Callback definition for.
Definition: sa.h:3480
#define AGSA_SAS_PHY_BW_COUNTERS_PAGE
Definition: sa.h:845
struct agsaEncryptDekConfigPage_s agsaEncryptDekConfigPage_t
#define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_MISMATCH
Definition: sa.h:1963
#define OSSA_HW_EVENT_SECURITY_MODE
Definition: sa.h:1320
#define OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE
Definition: sa.h:1488
#define OSSA_DFE_MPI_IO_SUCCESS
Definition: sa.h:1623
void(* ossaGenericAbortCB_t)(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
Callback definition for abort SMP SSP SATA callback.
Definition: sa.h:3496
#define AGSA_PORT_SET_SMP_PHY_WIDTH
Definition: sa.h:1170
#define AGSA_PHY_SNW3_PAGE
Definition: sa.h:848
#define AGSA_SAS_PHY_MISC_PAGE
Definition: sa.h:850
#define OSSA_HW_EVENT_PORT_RESET_TIMER_TMO
Definition: sa.h:1311
#define OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED
Definition: sa.h:1215
struct agsaEncryptSelfTestStatusBitMap_s agsaEncryptSelfTestStatusBitMap_t
#define OSSA_FAILURE_INVALID_PHY_ID
Definition: sa.h:1214
#define OSSA_HW_EVENT_BROADCAST_SES
Definition: sa.h:1295
#define agsaModePageGet
Definition: sa.h:1584
#define AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE
Definition: sa.h:846
#define OSSA_PORT_VALID
Definition: sa.h:1325
#define OSSA_PCIE_DIAG_INTERNAL_FAILURE
Definition: sa.h:1957
#define AGSA_BIST_TEST
Definition: sa.h:3267
#define AGSA_STOP_PORT_RECOVERY_TIMER
Definition: sa.h:1176
#define OSSA_MPI_ENC_ERR_ILLEGAL_KEK_PARAM
Definition: sa.h:1507
#define OSSA_PCIE_DIAG_INVALID_PCIE_ADDR
Definition: sa.h:1960
#define OSSA_FAILURE_OUT_OF_RESOURCE
Definition: sa.h:1212
#define OSSA_DFE_DMA_FAILURE
Definition: sa.h:1629
#define OSSA_PORT_NOT_ESTABLISHED
Definition: sa.h:1324
#define AGSA_PORT_IO_ABORT
Definition: sa.h:1172
#define AGSA_PHY_RATE_CONTROL_PAGE
Definition: sa.h:849
struct agsaIoGeneralPage_s agsaIoGeneralPage_t
#define AGSA_NVMD_EXPANSION_ROM
Definition: sa.h:1454
#define OSSA_ERR_DEVICE_HANDLE_INVALID
Definition: sa.h:1237
#define OSSA_HW_EVENT_PORT_RESET_COMPLETE
Definition: sa.h:1312
struct agsaEncryptControlParamPage_s agsaEncryptControlParamPage_t
#define AGSA_SAS_PHY_GENERAL_STATUS_PAGE
Definition: sa.h:847
#define AGSA_ENCRYPTION_DEK_CONFIG_PAGE
Definition: sa.h:3156
#define AGSA_INTERRUPT_CONFIGURATION_PAGE
Definition: sa.h:3153
#define AGSA_NVMD_CONFIG_SEEPROM
Definition: sa.h:1450
#define OSSA_HW_EVENT_SAS_PHY_UP
Definition: sa.h:1287
#define AGSA_ENCRYPTION_CONTROL_PARM_PAGE
Definition: sa.h:3157
#define OSSA_INVALID_HANDLE
Definition: sa.h:1236
#define OSSA_PCIE_DIAG_INVALID_CMD_TYPE
Definition: sa.h:1958
struct agsaEncryptHMACConfigPage_s agsaEncryptHMACConfigPage_t
#define OSSA_REGISTER_ACCESS_TIMEOUT
Definition: sa.h:1253
#define OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION
Definition: sa.h:1306
#define OSSA_DFE_DATA_OVERFLOW
Definition: sa.h:1624
#define agsaEncryptSMB
Definition: sa.h:1526
#define AGSA_PORT_CLEAN_UP
Definition: sa.h:1175
#define OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR
Definition: sa.h:1305
#define OSSA_HW_EVENT_SATA_SPINUP_HOLD
Definition: sa.h:1289
#define OSSA_HW_EVENT_SATA_PHY_UP
Definition: sa.h:1288
#define OSSA_HW_EVENT_ENCRYPTION
Definition: sa.h:1318
#define agsaEncryptCipherModeXTS
Definition: sa.h:1542
#define AGSA_NVMD_IOP_REG_FLASH
Definition: sa.h:1453
#define OSSA_DFE_CHANNEL_DOWN
Definition: sa.h:1626
#define agsaEncryptSMF
Definition: sa.h:1524
#define OSSA_DIAG_INVALID_PHY
Definition: sa.h:1256
struct agsaEncryptGeneralPage_s agsaEncryptGeneralPage_t
#define OSSA_HW_ENCRYPT_KEK_UPDATE
Definition: sa.h:1487
#define OSSA_HW_EVENT_HARD_RESET_RECEIVED
Definition: sa.h:1297
#define OSSA_SGPIO_MAX_READ_DATA_COUNT
Definition: sa.h:1617
#define OSSA_FAILURE_PORT_NOT_VALID_STATE
Definition: sa.h:1217
#define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH
Definition: sa.h:1964
#define agsaEncryptSMA
Definition: sa.h:1525
#define OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT
Definition: sa.h:1492
#define AGSA_NVMD_VPD_FLASH
Definition: sa.h:1451
#define OSSA_PORT_INVALID
Definition: sa.h:1329
#define OSSA_HW_EVENT_OPEN_RETRY_BACKOFF_THR_ADJUSTED
Definition: sa.h:1316
#define OSSA_HW_ENCRYPT_TEST_EXECUTE
Definition: sa.h:1493
#define MAX_IO_DEVICE_ENTRIES
Definition: sa.h:3791
#define OSSA_HW_ENCRYPT_KEK_INVALIDTE
Definition: sa.h:1489
#define AGSA_SAS_PHY_ERR_COUNTERS_PAGE
Definition: sa.h:843
#define OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH
Definition: sa.h:1307
#define OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO
Definition: sa.h:1309
void(* ossaLocalPhyControlCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 phyId, bit32 phyOperation, bit32 status, void *parm)
Definition: sa.h:3504
#define OSSA_PCIE_DIAG_INVALID_CMD_DESC
Definition: sa.h:1959
#define OSSA_HW_EVENT_PHY_DOWN
Definition: sa.h:1290
#define OSSA_FAILURE_DEVICE_TYPE_NOT_VALID
Definition: sa.h:1218
#define OSSA_FAILURE_DEVICE_ALREADY_REGISTERED
Definition: sa.h:1213
#define OSSA_PCIE_DIAG_INVALID_BLOCK_SIZE
Definition: sa.h:1961
void(* ossaVhistCaptureCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 len)
Definition: sa.h:3584
#define OSSA_PCIE_DIAG_LENGTH_NOT_BLOCK_SIZE_ALIGNED
Definition: sa.h:1962
#define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH
Definition: sa.h:1965
#define OSSA_HW_EVENT_MODE
Definition: sa.h:1319
#define OSSA_SUCCESS
Definition: sa.h:1200
#define OSSA_HW_EVENT_PHY_START_STATUS
Definition: sa.h:1303
#define OSSA_HW_EVENT_PORT_RECOVER
Definition: sa.h:1310
#define AGSA_RC_FAILURE
Definition: sa.h:781
#define OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT
Definition: sa.h:1313
#define OSSA_HW_EVENT_IT_NEXUS_LOSS
Definition: sa.h:1314
#define OSSA_ERR_DEVICE_BUSY
Definition: sa.h:1238
void(* ossaDIFEncryptionOffloadStartCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaOffloadDifDetails_t *agsaOffloadDifDetails)
Definition: sa.h:3590
#define OSSA_DFE_CHANNEL_INVALID
Definition: sa.h:1628
#define OSSA_FAILURE
Definition: sa.h:1201
#define OSSA_DIAG_INVALID_COMMAND
Definition: sa.h:1252
#define OSSA_DIAG_OTHER_FAILURE
Definition: sa.h:1264
struct agsaEncryptSHATestResult_s agsaEncryptSHATestResult_t
#define OSSA_FAILURE_PORT_ID_OUT_OF_RANGE
Definition: sa.h:1216
#define OSSA_DIAG_PHY_NOT_DISABLED
Definition: sa.h:1263
#define AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE
Definition: sa.h:844
#define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_CRC_MISMATCH
Definition: sa.h:1966
#define AGSA_SAS_PROTOCOL_TIMER_CONFIG_PAGE
Definition: sa.h:3152
#define OSSA_PCIE_DIAG_INVALID_COMMAND
Definition: sa.h:1956
#define OSSA_HW_EVENT_BROADCAST_CHANGE
Definition: sa.h:1292
#define OSSA_HW_ENCRYPT_DEK_INVALIDTE
Definition: sa.h:1491
struct agsaEncryptHMACTestResult_s agsaEncryptHMACTestResult_t
#define AGSA_PORT_HARD_RESET
Definition: sa.h:1174
#define AGSA_HMAC_TEST
Definition: sa.h:3268
#define OSSA_HW_EVENT_PHY_STOP_STATUS
Definition: sa.h:1286
struct agsaSASProtocolTimerConfigurationPage_s agsaSASProtocolTimerConfigurationPage_t
data structure for SAS protocol timer configuration page.
#define OSSA_DIAG_NOT_IN_DIAGNOSTIC_MODE
Definition: sa.h:1255
#define AGSA_PORT_SET_PORT_RECOVERY_TIME
Definition: sa.h:1171
#define OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD
Definition: sa.h:1304
void(* ossaSetDeviceInfoCB_t)(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 option, bit32 param)
Callback definition for.
Definition: sa.h:3555
#define AGSA_RC_SUCCESS
Definition: sa.h:780
#define agsaModePageSet
Definition: sa.h:1585
#define AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE
Definition: sa.h:851
#define OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC
Definition: sa.h:1296
#define OSSA_MPI_ERR_INVALID_ANALOG_TBL_IDX
Definition: sa_err.h:156
#define OSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION
Definition: sa_err.h:70
#define OSSA_MPI_ERR_PHY_NOT_STARTED
Definition: sa_err.h:153
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE
Definition: sa_err.h:117
#define OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE
Definition: sa_err.h:131
#define OSSA_IO_XFER_READ_COMPL_ERR
Definition: sa_err.h:121
#define OSSA_IO_ABORTED
Definition: sa_err.h:46
#define OSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED
Definition: sa_err.h:91
#define OSSA_IO_DS_IN_RECOVERY
Definition: sa_err.h:104
#define OSSA_IO_OPEN_CNX_ERROR_OPEN_PREEMPTED
Definition: sa_err.h:129
#define OSSA_MPI_IO_SUCCESS
Definition: sa_err.h:148
#define OSSA_IO_DS_NON_OPERATIONAL
Definition: sa_err.h:103
#define OSSA_IO_XFER_CMD_FRAME_ISSUED
Definition: sa_err.h:100
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO
Definition: sa_err.h:115
#define OSSA_MPI_ERR_DEVICES_ATTACHED
Definition: sa_err.h:150
#define OSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE
Definition: sa_err.h:85
#define OSSA_MPI_ERR_INVALID_PHY_ID
Definition: sa_err.h:151
#define OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY
Definition: sa_err.h:69
#define OSSA_IO_XFER_ERROR_PHY_NOT_READY
Definition: sa_err.h:62
#define OSSA_IO_ABORT_DELAYED
Definition: sa_err.h:111
#define OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH
Definition: sa_err.h:165
#define OSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH
Definition: sa_err.h:194
#define OSSA_IO_OVERFLOW
Definition: sa_err.h:47
#define OSSA_IO_XFER_ERROR_UNEXPECTED_PHASE
Definition: sa_err.h:89
#define OSSA_IO_OPEN_CNX_ERROR_BREAK
Definition: sa_err.h:65
#define OSSA_IO_XFER_ERROR_OFFSET_MISMATCH
Definition: sa_err.h:98
#define OSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN
Definition: sa_err.h:99
#define OSSA_IO_SUCCESS
Definition: sa_err.h:45
#define OSSA_IO_ERROR_INTERNAL_SMP_RESOURCE
Definition: sa_err.h:101
#define OSSA_IO_PORT_IN_RESET
Definition: sa_err.h:102
#define OSSA_MPI_ERR_OFFLOAD_DIF_OR_ENC_NOT_ENABLED
Definition: sa_err.h:144
#define OSSA_IO_XFER_ERROR_DMA_ACTIVATE_TIMEOUT
Definition: sa_err.h:124
#define OSSA_IO_XFER_ERROR_NAK_RECEIVED
Definition: sa_err.h:73
#define OSSA_IO_XFER_ERROR_BREAK
Definition: sa_err.h:61
#define OSSA_IO_XFER_ERROR_PEER_ABORTED
Definition: sa_err.h:75
#define OSSA_IO_XFR_ERROR_DIF_MISMATCH
Definition: sa_err.h:191
#define OSSA_IO_XFER_ERROR_ACK_NAK_TIMEOUT
Definition: sa_err.h:74
#define OPR_MGMT_MPI_ENC_ERR_OPR_PARAM_ILLEGAL
Definition: sa_err.h:200
#define OSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT
Definition: sa_err.h:93
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED
Definition: sa_err.h:118
#define OSSA_IO_XFER_PIO_SETUP_ERROR
Definition: sa_err.h:106
#define OSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS
Definition: sa_err.h:160
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS
Definition: sa_err.h:66
#define OSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR
Definition: sa_err.h:125
#define OSSA_IO_INVALID_LENGTH
Definition: sa_err.h:112
#define OSSA_IO_ERROR_HW_TIMEOUT
Definition: sa_err.h:60
#define OSSA_MPI_ERR_PHY_ALREADY_STARTED
Definition: sa_err.h:152
#define OSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY
Definition: sa_err.h:109
#define OSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH
Definition: sa_err.h:192
#define OSSA_IO_XFER_OPEN_RETRY_TIMEOUT
Definition: sa_err.h:86
#define OSSA_IO_XFER_ERR_EOB_DATA_OVERRUN
Definition: sa_err.h:127
#define OSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED
Definition: sa_err.h:63
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED
Definition: sa_err.h:114
#define OSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION
Definition: sa_err.h:64
#define OSSA_IO_NO_DEVICE
Definition: sa_err.h:52
#define OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN
Definition: sa_err.h:90
#define OSSA_IO_ABORT_IN_PROGRESS
Definition: sa_err.h:110
#define OSSA_IO_DS_INVALID
Definition: sa_err.h:119
#define OSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION
Definition: sa_err.h:67
#define OSSA_IO_XFER_ERROR_RX_FRAME
Definition: sa_err.h:76
#define OSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH
Definition: sa_err.h:193
#define OSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED
Definition: sa_err.h:68
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST
Definition: sa_err.h:116
#define SA_IDFRM_SSP_BIT
Definition: sa_spec.h:497
#define SA_SAS_SMP_READ_GPIO_REGISTER
Definition: sa_spec.h:69
#define SA_IDFRM_SMP_BIT
Definition: sa_spec.h:499
#define SHIFT4
Definition: sadefs.h:205
#define LL_IOREQ_LOCKEQ_LOCK
Definition: sadefs.h:130
#define SHIFT30
Definition: sadefs.h:231
#define AGSA_MAX_VALID_PORTS
Definition: sadefs.h:37
#define PORT_STATE_MASK
Definition: sadefs.h:79
#define MARK_OFF
Definition: sadefs.h:185
#define PORTID_MASK
Definition: sadefs.h:75
#define SHIFT8
Definition: sadefs.h:209
#define PHY_STOPPED
Definition: sadefs.h:159
#define LL_PORT_LOCK
Definition: sadefs.h:128
#define SHIFT16
Definition: sadefs.h:217
#define PHY_DOWN
Definition: sadefs.h:161
#define SMP_TO_DEFAULT
Definition: sadefs.h:278
#define PHY_IN_PORT_MASK
Definition: sadefs.h:80
#define SHIFT24
Definition: sadefs.h:225
#define PORT_INVALIDATING
Definition: sadefs.h:165
#define ITL_TO_DEFAULT
Definition: sadefs.h:279
#define PORT_MARK_OFF
Definition: sadefs.h:186
#define SHIFT28
Definition: sadefs.h:229
GLOBAL bit32 siRemoveDevHandle(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle)
Function for target to remove stale initiator device handle.
Definition: sadisc.c:158
This file defines global types.
GLOBAL void siPCITriger(agsaRoot_t *agRoot)
Definition: sahw.c:2907
#define SCRATCH_PAD1_V_RAAE_ERR
Definition: sahwreg.h:258
#define SCRATCH_PAD3_V_ENC_DISABLED
Definition: sahwreg.h:396
#define PCI_TRIGGER_OFFSET_MISMATCH
Definition: sahwreg.h:677
#define SCRATCH_PAD3_V_SMF_ENABLED
Definition: sahwreg.h:408
#define V_Scratchpad_3_Register
Definition: sahwreg.h:106
#define SCRATCH_PAD3_V_SMB_ENABLED
Definition: sahwreg.h:407
#define SCRATCH_PAD3_V_XTS_ENABLED
Definition: sahwreg.h:405
#define V_Scratchpad_1_Register
Definition: sahwreg.h:104
#define SCRATCH_PAD1_V_RAAE_MASK
Definition: sahwreg.h:257
#define SCRATCH_PAD3_V_ENC_ENA_ERR
Definition: sahwreg.h:398
#define SCRATCH_PAD3_V_ENC_MASK
Definition: sahwreg.h:400
#define SCRATCH_PAD3_V_SMA_ENABLED
Definition: sahwreg.h:406
#define SCRATCH_PAD3_V_ERR_CODE
Definition: sahwreg.h:410
#define SCRATCH_PAD3_V_ENC_READY
Definition: sahwreg.h:399
#define SCRATCH_PAD3_V_ENC_DIS_ERR
Definition: sahwreg.h:397
#define SCRATCH_PAD3_V_SM_MASK
Definition: sahwreg.h:409
GLOBAL void siAbnormal(agsaRoot_t *agRoot, agsaIORequestDesc_t *pRequest, bit32 status, bit32 param, bit32 sspTag)
Routine to handle abnormal completed IO/SMP event.
Definition: saint.c:1678
GLOBAL FORCEINLINE bit32 mpiSSPCompletion(agsaRoot_t *agRoot, bit32 *pIomb1)
SPC MPI SSP Completion.
Definition: saint.c:3383
GLOBAL void siEventSATASignatureRcvd(agsaRoot_t *agRoot, bit32 phyId, void *pMsg, bit32 portId, bit32 npipps, bit8 linkRate)
Routine to handle for received SATA signature event.
Definition: saint.c:2200
GLOBAL void siSMPRespRcvd(agsaRoot_t *agRoot, agsaSMPCompletionRsp_t *pIomb, bit32 payloadSize, bit32 tag)
Routine to handle for received SMP response event.
Definition: saint.c:1961
GLOBAL bit32 mpiParseOBIomb(agsaRoot_t *agRoot, bit32 *pMsg1, mpiMsgCategory_t category, bit16 opcode)
Process Outbound IOMB Message.
Definition: saint.c:2356
GLOBAL void siEventPhyUpRcvd(agsaRoot_t *agRoot, bit32 phyId, agsaSASIdentify_t *agSASIdentify, bit32 portId, bit32 npipps, bit8 linkRate)
Routine to handle for received Phy Up event.
Definition: saint.c:2069
GLOBAL FORCEINLINE bit32 mpiSATACompletion(agsaRoot_t *agRoot, bit32 *pIomb1)
SPC MPI SATA Completion.
Definition: saint.c:2963
GLOBAL FORCEINLINE void siIODone(agsaRoot_t *agRoot, agsaIORequestDesc_t *pRequest, bit32 status, bit32 sspTag)
Routine to handle successfully completed IO event.
Definition: saint.c:1549
GLOBAL bit32 mpiFwExtFlashUpdateRsp(agsaRoot_t *agRoot, agsaFwFlashOpExtRsp_t *payload)
Definition: saioctlcmd.c:641
GLOBAL bit32 mpiFwFlashUpdateRsp(agsaRoot_t *agRoot, agsaFwFlashUpdateRsp_t *payload)
SPC FW_FLASH_UPDATE Respond.
Definition: saioctlcmd.c:591
#define saLlistIOAdd(pList, pLink)
Definition: sallist.h:185
#define saLlistIORemove(pList, pLink)
Definition: sallist.h:275
#define saLlistAdd(pList, pLink)
saLlistAdd macro
Definition: sallist.h:176
#define saLlistIOGetCount(pList)
Definition: sallist.h:361
#define saLlistRemove(pList, pLink)
saLlistRemove macro
Definition: sallist.h:268
#define saLlistGetHead(pList)
saLlistGetHead macro
Definition: sallist.h:305
#define SA_DBG1(format)
Definition: samacro.h:200
#define SA_DBG2(format)
Definition: samacro.h:201
#define PHY_STATUS_SET(pPhy, value)
PHY_STATUS_SET macro.
Definition: samacro.h:66
#define SA_ASSERT
Definition: samacro.h:209
#define SA_DBG3(format)
Definition: samacro.h:202
GLOBAL bit32 mpiDevHandleAcceptCmd(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 ctag, bit32 deviceId, bit32 action, bit32 flag, bit32 itlnx, bit32 queueNum)
Device Handle Accept Command.
Definition: sampicmd.c:1222
#define OPC_INB_SET_DEVICE_STATE
Definition: sampidefs.h:70
#define OPC_INB_SAS_HW_EVENT_ACK
Definition: sampidefs.h:81
#define OPC_OUB_SET_OPERATOR
Definition: sampidefs.h:171
#define MPI_ERR_PORT_STATE_NOT_VALID
Definition: sampidefs.h:1128
#define MPI_ERR_PHY_ID_INVALID
Definition: sampidefs.h:1135
#define HW_EVENT_BITS
Definition: sampidefs.h:975
#define KEK_MGMT_SUBOP_UPDATE
Definition: sampidefs.h:177
#define PHY_ID_BITS
Definition: sampidefs.h:972
#define OPC_OUB_SSP_RECV_EVENT
Definition: sampidefs.h:119
#define DIRECT_MODE
Definition: sampidefs.h:791
#define OPC_INB_SSP_ABORT
Definition: sampidefs.h:47
#define OPC_OUB_SATA_COMP
Definition: sampidefs.h:113
#define OPC_OUB_FLASH_OP_EXT_RSP
Definition: sampidefs.h:158
#define OPC_OUB_GET_NVMD_DATA
Definition: sampidefs.h:136
#define OPC_INB_SPC_GET_DEV_INFO
Definition: sampidefs.h:58
#define OPC_OUB_SPC_DEV_INFO
Definition: sampidefs.h:120
#define OPC_OUB_GPIO_RESPONSE
Definition: sampidefs.h:123
#define OPC_OUB_GET_CONTROLLER_CONFIG
Definition: sampidefs.h:153
#define OPC_OUB_OPR_MGMT
Definition: sampidefs.h:169
#define OPC_OUB_SSP_EVENT
Definition: sampidefs.h:115
#define OPC_INB_PORT_CONTROL
Definition: sampidefs.h:67
#define OPC_OUB_GPIO_EVENT
Definition: sampidefs.h:124
#define OPC_OUB_SPC_HW_EVENT
Definition: sampidefs.h:105
#define SSPTAG_BITS
Definition: sampidefs.h:1191
#define OPC_OUB_SSP_COMP
Definition: sampidefs.h:106
#define PDS_BITS
Definition: sampidefs.h:1588
#define MPI_ERR_DEVICE_HANDLE_UNAVAILABLE
Definition: sampidefs.h:1124
#define OPC_OUB_GET_DEV_HANDLE
Definition: sampidefs.h:112
#define LINK_RATE_BITS
Definition: sampidefs.h:1213
#define OPC_INB_SAS_DIAG_EXECUTE
Definition: sampidefs.h:64
#define FRAME_TYPE
Definition: sampidefs.h:1451
#define OPC_INB_DEREG_DEV_HANDLE
Definition: sampidefs.h:48
#define DEK_MGMT_SUBOP_UPDATE
Definition: sampidefs.h:182
#define OPC_OUB_DEV_REGIST
Definition: sampidefs.h:154
#define OPC_OUB_COMBINED_SSP_COMP
Definition: sampidefs.h:167
#define OPC_INB_SATA_DIF_ENC_OPSTART
Definition: sampidefs.h:93
#define OPC_INB_SAS_RE_INITIALIZE
Definition: sampidefs.h:73
#define OPC_OUB_ECHO
Definition: sampidefs.h:103
#define INITTAG_BITS
Definition: sampidefs.h:1450
#define OPC_OUB_DEK_MANAGEMENT
Definition: sampidefs.h:166
#define GEN_EVENT_IOMB_INVALID_OBID
Definition: sampidefs.h:1429
#define OPC_INB_SMP_ABORT
Definition: sampidefs.h:52
#define OPC_INB_SSPTGTIOSTART
Definition: sampidefs.h:45
#define OPC_INB_GET_OPERATOR
Definition: sampidefs.h:97
#define OPC_INB_SET_DEV_INFO
Definition: sampidefs.h:72
#define OPC_OUB_GET_DEVICE_STATE
Definition: sampidefs.h:140
#define LINK_RATE_MASK
Definition: sampidefs.h:973
#define MPI_ERR_PHY_ID_ALREADY_REGISTERED
Definition: sampidefs.h:1136
#define FIRST_BURST_MCN
Definition: sampidefs.h:1234
#define OPC_OUB_COMBINED_SATA_COMP
Definition: sampidefs.h:168
#define OPC_OUB_DEV_INFO
Definition: sampidefs.h:156
#define Conrate_V_SHIFT
Definition: sampidefs.h:1471
#define OPC_OUB_LOCAL_PHY_CNTRL
Definition: sampidefs.h:108
#define OPC_OUB_GET_PHY_PROFILE_RSP
Definition: sampidefs.h:157
#define OPC_INB_GPIO
Definition: sampidefs.h:62
#define OPC_OUB_PHY_STOP_RESPONSE
Definition: sampidefs.h:148
#define OPC_OUB_SSP_ABORT_RSP
Definition: sampidefs.h:127
#define NVMD_STAT
Definition: sampidefs.h:797
#define OPC_INB_ECHO
Definition: sampidefs.h:37
#define LOCAL_PHY_PHYID
Definition: sampidefs.h:1101
#define OPC_OUB_FW_FLASH_UPDATE
Definition: sampidefs.h:121
#define Conrate_SPC_SHIFT
Definition: sampidefs.h:1473
#define KEK_MGMT_SUBOP_INVALIDATE
Definition: sampidefs.h:176
#define PortId_V_MASK
Definition: sampidefs.h:1480
#define KEK_MGMT_SUBOP_KEYCARDUPDATE
Definition: sampidefs.h:179
#define OPC_INB_GET_TIME_STAMP
Definition: sampidefs.h:66
#define GENERAL_EVENT_PAYLOAD
Definition: sampidefs.h:1420
#define OPC_OUB_FW_PROFILE
Definition: sampidefs.h:163
#define OPC_OUB_DEREG_DEV
Definition: sampidefs.h:111
#define OPC_OUB_DIF_ENC_OFFLOAD_RSP
Definition: sampidefs.h:173
#define GEN_EVENT_DS_IN_NON_OPERATIONAL
Definition: sampidefs.h:1430
#define OPC_INB_SPC_REG_DEV
Definition: sampidefs.h:54
#define MPI_ERR_DEVICE_ALREADY_REGISTERED
Definition: sampidefs.h:1125
#define OPC_OUB_PHY_START_RESPONSE
Definition: sampidefs.h:147
#define OPC_INB_FW_FLASH_UPDATE
Definition: sampidefs.h:60
#define OPC_INB_SSPTGTRSPSTART
Definition: sampidefs.h:46
#define MPI_ERR_PORT_INVALID_PORT_ID
Definition: sampidefs.h:1127
#define OPC_OUB_SAS_DIAG_EXECUTE
Definition: sampidefs.h:130
#define FIRST_BURST
Definition: sampidefs.h:1211
#define OPC_OUB_SET_DEVICE_STATE
Definition: sampidefs.h:139
#define OPC_OUB_SET_NVMD_DATA
Definition: sampidefs.h:137
#define SMPTO_BITS
Definition: sampidefs.h:1209
#define Conrate_SPC_MASK
Definition: sampidefs.h:1472
#define OPC_OUB_ENC_TEST_EXECUTE
Definition: sampidefs.h:170
#define DEVICE_ID_BITS
Definition: sampidefs.h:1086
#define GEN_EVENT_DS_IN_RECOVERY
Definition: sampidefs.h:1431
#define NVMD_TYPE
Definition: sampidefs.h:796
#define OPC_OUB_GENERAL_EVENT
Definition: sampidefs.h:125
#define OPC_OUB_SAS_HW_EVENT_ACK
Definition: sampidefs.h:155
#define OPC_OUB_SGPIO_RESPONSE
Definition: sampidefs.h:149
#define OPC_OUB_HW_EVENT
Definition: sampidefs.h:144
#define NEXUSTO_VBITS
Definition: sampidefs.h:1233
#define OPC_OUB_SET_PHY_PROFILE_RSP
Definition: sampidefs.h:159
#define OPC_INB_SMP_REQUEST
Definition: sampidefs.h:50
#define OPC_INB_SET_OPERATOR
Definition: sampidefs.h:96
#define SSPIUL_BITS
Definition: sampidefs.h:1449
#define OPC_INB_KEK_MANAGEMENT
Definition: sampidefs.h:90
#define OPC_INB_PHYSTART
Definition: sampidefs.h:39
#define OPC_INB_SET_NVMD_DATA
Definition: sampidefs.h:69
#define Conrate_V_MASK
Definition: sampidefs.h:1470
#define MPI_ERR_DEVICE_TYPE_NOT_VALID
Definition: sampidefs.h:1126
#define DEVICE_IDC_BITS
Definition: sampidefs.h:1085
#define OPC_OUB_SET_DEV_INFO
Definition: sampidefs.h:141
#define OPC_INB_GET_DEVICE_STATE
Definition: sampidefs.h:71
#define OPC_OUB_SATA_ABORT_RSP
Definition: sampidefs.h:128
#define SMPTO_VBITS
Definition: sampidefs.h:1232
#define PROTOCOL_SHIFT
Definition: sampidefs.h:1484
#define OPC_INB_SAS_DIAG_MODE_START_END
Definition: sampidefs.h:63
#define NEXUSTO_BITS
Definition: sampidefs.h:1210
#define GEN_EVENT_IO_XFER_READ_COMPL_ERR
Definition: sampidefs.h:1434
#define OPC_INB_FW_PROFILE
Definition: sampidefs.h:100
#define INDIRECT_MODE
Definition: sampidefs.h:792
#define GEN_EVENT_IOMB_V_BIT_NOT_SET
Definition: sampidefs.h:1427
#define FLAG_VBITS
Definition: sampidefs.h:1235
#define TLR_BITS
Definition: sampidefs.h:1452
#define OPC_INB_SSPINIEXTIOSTART
Definition: sampidefs.h:43
#define NVMD_LEN
Definition: sampidefs.h:798
#define NDS_BITS
Definition: sampidefs.h:1587
#define OPC_OUB_DEVICE_HANDLE_REMOVAL
Definition: sampidefs.h:138
#define OPC_OUB_GET_TIME_STAMP
Definition: sampidefs.h:131
#define PortId_SPC_MASK
Definition: sampidefs.h:1481
#define OPC_OUB_PCIE_DIAG_EXECUTE
Definition: sampidefs.h:150
#define OPC_INB_GET_NVMD_DATA
Definition: sampidefs.h:68
#define OPC_OUB_SPC_DEV_REGIST
Definition: sampidefs.h:110
#define OPC_OUB_PORT_CONTROL
Definition: sampidefs.h:133
#define PROTOCOL_BITS
Definition: sampidefs.h:1483
#define OPC_OUB_SAS_DIAG_MODE_START_END
Definition: sampidefs.h:129
#define OPC_OUB_SET_CONTROLLER_CONFIG
Definition: sampidefs.h:152
#define OPC_INB_SATA_ABORT
Definition: sampidefs.h:56
#define LOCAL_PHY_OP_BITS
Definition: sampidefs.h:1100
#define OPC_OUB_SATA_EVENT
Definition: sampidefs.h:114
#define OPC_INB_SATA_HOST_OPSTART
Definition: sampidefs.h:55
#define GEN_EVENT_INBOUND_IOMB_OPC_NOT_SUPPORTED
Definition: sampidefs.h:1428
#define OPCODE_BITS
Definition: sampidefs.h:1421
#define STATUS_BITS
Definition: sampidefs.h:974
#define DEV_TYPE_BITS
Definition: sampidefs.h:1214
#define OPC_INB_PHYSTOP
Definition: sampidefs.h:40
#define OPC_OUB_SAS_RE_INITIALIZE
Definition: sampidefs.h:142
#define OPC_OUB_SMP_ABORT_RSP
Definition: sampidefs.h:135
#define OPC_INB_GET_DEV_HANDLE
Definition: sampidefs.h:49
#define KEK_MGMT_SUBOP_KEYCARDINVALIDATE
Definition: sampidefs.h:178
#define FLAG_BITS
Definition: sampidefs.h:1212
#define OPC_OUB_GET_OPERATOR
Definition: sampidefs.h:172
#define OPC_INB_SSPINIIOSTART
Definition: sampidefs.h:41
#define IRMode
Definition: sampidefs.h:794
#define OPC_OUB_KEK_MANAGEMENT
Definition: sampidefs.h:165
#define OPC_INB_DEV_HANDLE_ACCEPT
Definition: sampidefs.h:44
#define OPC_OUB_SMP_COMP
Definition: sampidefs.h:107
#define OPC_INB_ENC_TEST_EXECUTE
Definition: sampidefs.h:95
#define OPC_OUB_DEV_HANDLE_ARRIV
Definition: sampidefs.h:145
#define IOP_RDUMP
Definition: sampidefs.h:788
#define PHY_ID_V_BITS
Definition: sampidefs.h:996
#define OPC_INB_SSPINITMSTART
Definition: sampidefs.h:42
#define OPC_INB_OPR_MGMT
Definition: sampidefs.h:94
#define OPC_INB_LOCAL_PHY_CONTROL
Definition: sampidefs.h:57
#define AAP1_RDUMP
Definition: sampidefs.h:787
#define OPC_OUB_SPC_SAS_HW_EVENT_ACK
Definition: sampidefs.h:132
#define OPC_INB_SSP_DIF_ENC_OPSTART
Definition: sampidefs.h:92
#define GEN_EVENT_DS_INVALID
Definition: sampidefs.h:1432
#define OPC_OUB_SPC_DEV_HANDLE_ARRIV
Definition: sampidefs.h:117
GLOBAL bit32 mpiDeviceHandleArrived(agsaRoot_t *agRoot, agsaDeviceHandleArrivedNotify_t *pMsg1)
SPC MPI Device Handle Arrived Event (target mode)
Definition: sampirsp.c:5355
GLOBAL bit32 mpiHWevent(agsaRoot_t *agRoot, agsaHWEvent_SPC_OUB_t *pIomb)
Hardware Event Response from SPC.
Definition: sampirsp.c:1160
GLOBAL bit32 mpiGetDevHandleRsp(agsaRoot_t *agRoot, agsaGetDevHandleRsp_t *pIomb)
SPC MPI Get Device Handle Command Response.
Definition: sampirsp.c:2015
GLOBAL bit32 mpiGetNVMDataRsp(agsaRoot_t *agRoot, agsaGetNVMDataRsp_t *pIomb)
Get NVM Data Response.
Definition: sampirsp.c:746
GLOBAL bit32 mpiSSPAbortRsp(agsaRoot_t *agRoot, agsaSSPAbortRsp_t *pIomb)
SPC MPI SSP ABORT Response.
Definition: sampirsp.c:4437
GLOBAL bit32 mpiGetDevInfoRspSpc(agsaRoot_t *agRoot, agsaGetDevInfoRsp_t *pIomb)
Get Device Information Response.
Definition: sampirsp.c:3320
GLOBAL bit32 mpiSetControllerConfigRsp(agsaRoot_t *agRoot, agsaSetControllerConfigRsp_t *pIomb)
SAS Set Controller Config Response.
Definition: sampirsp.c:6718
GLOBAL bit32 mpiGetTimeStampRsp(agsaRoot_t *agRoot, agsaGetTimeStampRsp_t *pIomb)
Get Time Stamp Response.
Definition: sampirsp.c:5586
GLOBAL bit32 mpiPortControlRsp(agsaRoot_t *agRoot, agsaPortControlRsp_t *pIomb)
Port Control Response.
Definition: sampirsp.c:5751
GLOBAL bit32 mpiEchoRsp(agsaRoot_t *agRoot, agsaEchoRsp_t *pIomb)
Process Outbound IOMB Message.
Definition: sampirsp.c:678
GLOBAL bit32 mpiSASHwEventAckRsp(agsaRoot_t *agRoot, agsaSASHwEventAckRsp_t *pIomb)
SAS HW Event Ack Response.
Definition: sampirsp.c:5657
GLOBAL bit32 mpiSetPhyProfileRsp(agsaRoot_t *agRoot, agsaSetPhyProfileRspV_t *pIomb)
Definition: sampirsp.c:2930
GLOBAL bit32 mpiSetNVMDataRsp(agsaRoot_t *agRoot, agsaSetNVMDataRsp_t *pIomb)
Set NVM Data Response.
Definition: sampirsp.c:4364
GLOBAL bit32 mpiSMPCompletion(agsaRoot_t *agRoot, agsaSMPCompletionRsp_t *pIomb)
SPC MPI SMP Completion.
Definition: sampirsp.c:1748
GLOBAL bit32 mpiGetVHistRsp(agsaRoot_t *agRoot, agsaGetVHistCapRsp_t *pIomb)
Definition: sampirsp.c:7637
GLOBAL bit32 mpiGetDeviceStateRsp(agsaRoot_t *agRoot, agsaGetDeviceStateRsp_t *pIomb)
Get Device State Response.
Definition: sampirsp.c:6202
GLOBAL bit32 mpiDeviceRegRsp(agsaRoot_t *agRoot, agsaDeviceRegistrationRsp_t *pIomb)
SPC MPI Device Register Command Response.
Definition: sampirsp.c:2188
GLOBAL bit32 mpiDekManagementRsp(agsaRoot_t *agRoot, agsaDekManagementRsp_t *pIomb)
DEK Management Response.
Definition: sampirsp.c:7187
GLOBAL bit32 mpiGetOperatorRsp(agsaRoot_t *agRoot, agsaGetOperatorRsp_t *pIomb)
Get Operator Response.
Definition: sampirsp.c:7543
GLOBAL bit32 mpiGetDevInfoRsp(agsaRoot_t *agRoot, agsaGetDevInfoRspV_t *pIomb)
Get Device Information Response.
Definition: sampirsp.c:3088
GLOBAL bit32 mpiSATAEvent(agsaRoot_t *agRoot, agsaSATAEventRsp_t *pIomb)
SPC MPI SATA Event.
Definition: sampirsp.c:4086
void saReturnRequestToFreePool(agsaRoot_t *agRoot, agsaIORequestDesc_t *pRequest)
Return request to free pool.
Definition: saioctlcmd.c:2158
GLOBAL bit32 mpiSetDevInfoRsp(agsaRoot_t *agRoot, agsaSetDeviceInfoRsp_t *pIomb)
Set Device Information Response.
Definition: sampirsp.c:3539
GLOBAL bit32 mpiOperatorManagementRsp(agsaRoot_t *agRoot, agsaOperatorMangmenRsp_t *pIomb)
Operator Management Response.
Definition: sampirsp.c:7286
__FBSDID("$FreeBSD$")
GLOBAL bit32 mpiSASDiagStartEndRsp(agsaRoot_t *agRoot, agsaSASDiagStartEndRsp_t *pIomb)
SAS Diagnostic Start/End Response.
Definition: sampirsp.c:4735
GLOBAL bit32 mpiGPIOEventRsp(agsaRoot_t *agRoot, agsaGPIOEvent_t *pIomb)
Set GPIO Event Response.
Definition: sampirsp.c:4704
GLOBAL bit32 mpiKekManagementRsp(agsaRoot_t *agRoot, agsaKekManagementRsp_t *pIomb)
KEK Management Response.
Definition: sampirsp.c:7044
GLOBAL bit32 mpiSMPAbortRsp(agsaRoot_t *agRoot, agsaSMPAbortRsp_t *pIomb)
SPC MPI SMP ABORT Response.
Definition: sampirsp.c:5888
GLOBAL bit32 mpiSGpioRsp(agsaRoot_t *agRoot, agsaSGpioRsp_t *pInIomb)
serial GPIO Response
Definition: sampirsp.c:6402
GLOBAL bit32 mpiSetOperatorRsp(agsaRoot_t *agRoot, agsaSetOperatorRsp_t *pIomb)
Set Operator Response.
Definition: sampirsp.c:7470
GLOBAL bit32 mpiSASDiagExecuteRsp(agsaRoot_t *agRoot, agsaSASDiagExecuteRsp_t *pIomb)
SAS Diagnostic Execute Response.
Definition: sampirsp.c:4831
GLOBAL bit32 mpiSSPEvent(agsaRoot_t *agRoot, agsaSSPEventRsp_t *pIomb)
SPC MPI SSP Event.
Definition: sampirsp.c:3706
GLOBAL bit32 mpiSATAAbortRsp(agsaRoot_t *agRoot, agsaSATAAbortRsp_t *pIomb)
SPC MPI SATA ABORT Response.
Definition: sampirsp.c:4533
GLOBAL bit32 mpiGPIORsp(agsaRoot_t *agRoot, agsaGPIORsp_t *pIomb)
Set GPIO Response.
Definition: sampirsp.c:4615
GLOBAL bit32 mpiGeneralEventRsp(agsaRoot_t *agRoot, agsaGeneralEventRsp_t *pIomb)
SAS General Event Notification Response.
Definition: sampirsp.c:4936
GLOBAL bit32 mpiGetPhyProfileRsp(agsaRoot_t *agRoot, agsaGetPhyProfileRspV_t *pIomb)
Get Phy Profile Response SPCv.
Definition: sampirsp.c:2686
GLOBAL bit32 mpiGetControllerConfigRsp(agsaRoot_t *agRoot, agsaGetControllerConfigRsp_t *pIomb)
SAS Get Controller Config Response.
Definition: sampirsp.c:6907
GLOBAL bit32 mpiPhyStartEvent(agsaRoot_t *agRoot, agsaHWEvent_Phy_OUB_t *pIomb)
Phy Event Response from SPCv.
Definition: sampirsp.c:898
GLOBAL bit32 mpiSetDeviceStateRsp(agsaRoot_t *agRoot, agsaSetDeviceStateRsp_t *pIomb)
Set Device State Response.
Definition: sampirsp.c:6084
GLOBAL bit32 mpiDeregDevHandleRsp(agsaRoot_t *agRoot, agsaDeregDevHandleRsp_t *pIomb)
SPC MPI Deregister Device Command Response.
Definition: sampirsp.c:2512
GLOBAL bit32 mpiDeviceHandleRemoval(agsaRoot_t *agRoot, agsaDeviceHandleRemoval_t *pMsg1)
SPC MPI Device Handle Arrived Event (target mode)
Definition: sampirsp.c:5982
GLOBAL bit32 mpiPhyStopEvent(agsaRoot_t *agRoot, agsaHWEvent_Phy_OUB_t *pIomb)
Definition: sampirsp.c:998
GLOBAL bit32 mpiSasReInitializeRsp(agsaRoot_t *agRoot, agsaSasReInitializeRsp_t *pIomb)
SAS ReInitialize Response.
Definition: sampirsp.c:6321
GLOBAL bit32 mpiBistRsp(agsaRoot_t *agRoot, agsaEncryptBistRsp_t *pIomb)
Definition: sampirsp.c:7359
GLOBAL bit32 mpiPCIeDiagExecuteRsp(agsaRoot_t *agRoot, void *pInIomb)
PCIE Diagnostics Response.
Definition: sampirsp.c:6467
GLOBAL bit32 mpiGetDFEDataRsp(agsaRoot_t *agRoot, void *pIomb)
Get DFE Data command Response.
Definition: sampirsp.c:6607
GLOBAL bit32 mpiDifEncOffloadRsp(agsaRoot_t *agRoot, agsaDifEncOffloadRspV_t *pIomb)
DifEncOffload Response.
Definition: sampirsp.c:7767
GLOBAL bit32 mpiPhyCntrlRsp(agsaRoot_t *agRoot, agsaLocalPhyCntrlRsp_t *pIomb)
SPC MPI Phy Control Command Response.
Definition: sampirsp.c:2107
GLOBAL bit32 mpiSSPReqReceivedNotify(agsaRoot_t *agRoot, agsaSSPReqReceivedNotify_t *pMsg1)
SPC MPI SSP Request Received Event (target mode)
Definition: sampirsp.c:5291
GLOBAL void ossaPortControlCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaPortContext_t *agPortContext, bit32 portOperation, bit32 status)
Definition: ossacmnapi.c:3439
GLOBAL void ossaGetNVMDResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit8 indirectPayload, bit32 agInfoLen, agsaFrameHandle_t agFrameHandle)
ossaGetNVMDResponseCB
Definition: ossacmnapi.c:6989
GLOBAL void ossaGpioResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 gpioReadValue, agsaGpioPinSetupInfo_t *gpioPinSetupInfo, agsaGpioEventSetupInfo_t *gpioEventSetupInfo)
ossaGpioResponseCB
Definition: ossacmnapi.c:7266
GLOBAL FORCEINLINE void ossaSingleThreadedEnter(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedEnter
Definition: ossacmnapi.c:3786
GLOBAL void ossaSetPhyProfileCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 ppc, bit32 phyID, void *parm)
Definition: ossacmnapi.c:5857
GLOBAL void ossaGetDFEDataCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 agInfoLen)
ossaGetDFEDataCB
Definition: ossacmnapi.c:8235
GLOBAL void ossaLocalPhyControlCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 phyId, bit32 phyOperation, bit32 status, void *parm)
ossaLocalPhyControlCB
Definition: ossacmnapi.c:5549
GLOBAL void ossaHwCB(agsaRoot_t *agRoot, agsaPortContext_t *agPortContext, bit32 event, bit32 eventParm1, void *eventParm2, void *eventParm3)
Definition: ossacmnapi.c:775
GLOBAL void ossaSATAAbortCB(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
Definition: ttdcb.c:55
GLOBAL void ossaGetDeviceHandlesCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDev[], bit32 validDevs)
ossaGetDeviceHandlesCB
Definition: ossacmnapi.c:5891
GLOBAL void ossaDIFEncryptionOffloadStartCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaOffloadDifDetails_t *agsaOffloadDifDetails)
Definition: ossacmnapi.c:8435
void ossaGetRegisterDumpCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaGetRegisterDumpCB
Definition: ossacmnapi.c:7914
GLOBAL void ossaSASDiagStartEndCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaSASDiagStartEndCB
Definition: ossacmnapi.c:7383
GLOBAL bit32 ossaDeviceHandleAccept(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaSASDeviceInfo_t *agDeviceInfo, agsaPortContext_t *agPortContext, bit32 *hostAssignedDeviceId)
Definition: ossacmnapi.c:169
GLOBAL void ossaSSPReqReceived(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaFrameHandle_t agFrameHandle, bit16 agInitiatorTag, bit32 parameter, bit32 agFrameLen)
ossaSSPReqReceived
Definition: ossacmnapi.c:4603
GLOBAL void ossaDeviceHandleRemovedEvent(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaPortContext_t *agPortContext)
ossaDeviceHandleRemovedEvent
Definition: ossacmnapi.c:6750
GLOBAL void ossaSetNVMDResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaSetNVMDResponseCB
Definition: ossacmnapi.c:7050
GLOBAL void ossaOperatorManagementCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 eq)
Definition: ossacmnapi.c:8276
GLOBAL void ossaSetOperatorCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 eq)
Definition: ossacmnapi.c:8386
GLOBAL void ossaGetDeviceInfoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, void *agInfo)
ossaGetDeviceInfoCB
Definition: ossacmnapi.c:5931
GLOBAL void ossaPCIeDiagExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 command, agsaPCIeDiagResponse_t *resp)
Definition: ossacmnapi.c:7423
GLOBAL void ossaGpioEvent(agsaRoot_t *agRoot, bit32 gpioEvent)
ossaGpioEvent
Definition: ossacmnapi.c:7314
GLOBAL FORCEINLINE void ossaSingleThreadedLeave(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedLeave
Definition: ossacmnapi.c:3827
GLOBAL void ossaReconfigSASParamsCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaSASReconfig_t *agSASConfig)
ossaReconfigSASParamsCB
Definition: ossacmnapi.c:7413
GLOBAL void ossaSATAEvent(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDevHandle, bit32 event, bit32 agIOInfoLen, void *agParam)
Definition: smsatcb.c:10524
GLOBAL void ossaGetPhyProfileCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 ppc, bit32 phyID, void *parm)
Definition: ossacmnapi.c:5711
GLOBAL void ossaSMPAbortCB(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
ossaSMPAbortCB
Definition: ossacmnapi.c:7592
GLOBAL void ossaSetDeviceStateCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 newDeviceState, bit32 previousDeviceState)
ossaSetDeviceStateCB
Definition: ossacmnapi.c:7952
GLOBAL void ossaHwEventAckCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaHwEventAckCB
Definition: ossacmnapi.c:7516
GLOBAL void ossaSetDeviceInfoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 option, bit32 param)
ossaSetDeviceInfoCB
Definition: ossacmnapi.c:8174
GLOBAL void ossaVhistCaptureCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 len)
ossaVhistCaptureCB
Definition: ossacmnapi.c:8265
GLOBAL void ossaSGpioCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaSGpioReqResponse_t *pSgpioResponse)
Definition: ossacmnapi.c:7444
GLOBAL void ossaGetDeviceStateCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 deviceState)
ossaGetDeviceStateCB
Definition: ossacmnapi.c:8007
GLOBAL void ossaGetTimeStampCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 timeStampLower, bit32 timeStampUpper)
ossaGetTimeStampCB
Definition: ossacmnapi.c:7561
GLOBAL void ossaGeneralEvent(agsaRoot_t *agRoot, bit32 status, agsaContext_t *agContext, bit32 *msg)
ossaGeneralEvent
Definition: ossacmnapi.c:7819
GLOBAL void ossaSSPEvent(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDevHandle, bit32 event, bit16 sspTag, bit32 agIOInfoLen, void *agParam)
Definition: ossacmnapi.c:4682
GLOBAL void ossaEchoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, void *echoPayload)
ossaEchoCB
Definition: ossacmnapi.c:7197
GLOBAL void ossaGetOperatorCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 option, bit32 num, bit32 role, agsaID_t *id)
Definition: ossacmnapi.c:8326
GLOBAL void ossaSSPAbortCB(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
GLOBAL FORCEINLINE bit32 ossaHwRegRead(agsaRoot_t *agRoot, bit32 regOffset)
Definition: ossacmnapi.c:3521
GLOBAL void ossaSASDiagExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 command, bit32 reportData)
ossaSASDiagExecuteCB
Definition: ossacmnapi.c:7347
GLOBAL bit32 siPhyStopCB(agsaRoot_t *agRoot, bit32 phyId, bit32 status, agsaContext_t *agContext, bit32 portId, bit32 npipps)
CallBack Routine to stop a Phy.
Definition: saphy.c:314
GLOBAL void siPortDeviceListRemove(agsaRoot_t *agRoot, agsaPort_t *pPort, agsaDeviceDesc_t *pDevice)
The function to remove a device descriptor.
Definition: saport.c:370
GLOBAL void siPortDeviceRemove(agsaRoot_t *agRoot, agsaPort_t *pPort, agsaDeviceDesc_t *pDevice, bit32 unmap)
The function to remove a device descriptor.
Definition: saport.c:169
GLOBAL agsaDeviceDesc_t * siPortSASDeviceAdd(agsaRoot_t *agRoot, agsaPort_t *pPort, agsaSASIdentify_t sasIdentify, bit32 sasInitiator, bit32 smpTimeout, bit32 itNexusTimeout, bit32 firstBurstSize, bit8 dTypeSRate, bit32 flag)
Add a SAS device to the discovery list of the port.
Definition: saport.c:60
GLOBAL void siPortInvalid(agsaRoot_t *agRoot, agsaPort_t *pPort)
Invalid a port.
Definition: saport.c:331
GLOBAL void siCountActiveIORequestsOnDevice(agsaRoot_t *agRoot, bit32 device)
siCountActiveIORequestsOnDevice count all active IO's
Definition: sautil.c:315
GLOBAL FORCEINLINE void * si_memcpy(void *dst, void *src, bit32 count)
memcopy
Definition: sautil.c:76
GLOBAL bit32 smIS_SPC(agsaRoot_t *agRoot)
Definition: sautil.c:437
GLOBAL bit32 smIS_SPC12V(agsaRoot_t *agRoot)
Definition: sautil.c:470
GLOBAL FORCEINLINE void * si_memset(void *s, int c, bit32 n)
memset
Definition: sautil.c:104
GLOBAL bit32 smIS_SPC6V(agsaRoot_t *agRoot)
Definition: sautil.c:459
GLOBAL bit32 smIS_SPCV(agsaRoot_t *agRoot)
Definition: sautil.c:502
data structure stores OS specific and LL specific context
Definition: sa.h:1658
void * osData
Definition: sa.h:1659
void * sdkData
Definition: sa.h:1660
the data structure of Deregister Device Response
Definition: sampidefs.h:1067
the LL defined device descriptor
Definition: satypes.h:112
agsaDevHandle_t targetDevHandle
Definition: satypes.h:115
agsaDevHandle_t initiatorDevHandle
Definition: satypes.h:114
SALINK linkNode
Definition: satypes.h:113
agsaPort_t * pPort
Definition: satypes.h:117
bit32 DeviceMapIndex
Definition: satypes.h:123
agsaSASSATADevInfo_t devInfo
Definition: satypes.h:122
SALINK_LIST pendingIORequests
Definition: satypes.h:116
the data structure of Device Handle Arrived Notification
Definition: sampidefs.h:1459
the data structure of Device Handle Removal
Definition: sampidefs.h:1568
data structure provides some information about a SATA device
Definition: sa.h:2561
bit8 sasAddressHi[4]
Definition: sa.h:2580
bit8 devType_S_Rate
Definition: sa.h:2567
bit16 firstBurstSize
Definition: sa.h:2564
bit16 smpTimeout
Definition: sa.h:2562
bit8 sasAddressLo[4]
Definition: sa.h:2581
bit32 flag
Definition: sa.h:2582
bit16 it_NexusTimeout
Definition: sa.h:2563
void * DeviceHandle
Definition: satypes.h:195
bit32 DeviceIdFromFW
Definition: satypes.h:194
the data structure of DEVICE_REGISTRATION Response
Definition: sampidefs.h:1108
bit8 sasAddressHi[4]
Definition: sa.h:3359
bit32 ExpectedUDT2345
Definition: sa.h:3362
bit32 LowerLBA
Definition: sa.h:3358
bit32 ErrBoffsetEDataLen
Definition: sa.h:3366
bit32 ActualCRCUDT01
Definition: sa.h:3363
bit8 sasAddressLo[4]
Definition: sa.h:3360
bit32 ActualUDT2345
Definition: sa.h:3364
bit32 UpperLBA
Definition: sa.h:3357
bit32 DIFErrDevID
Definition: sa.h:3365
bit32 ExpectedCRCUDT01
Definition: sa.h:3361
the data structure of Echo Response
Definition: sampidefs.h:954
bit32 payload[14]
Definition: sampidefs.h:956
bit32 status
Definition: sa.h:3210
bit32 encryptionSecurityMode
Definition: sa.h:3209
bit32 encryptionCipherMode
Definition: sa.h:3208
the data structure EXT Flash Op
Definition: sampidefs.h:559
the data structure of FW_FLASH_UPDATE Response
Definition: sampidefs.h:1312
the data structure of GPIO Event
Definition: sampidefs.h:1347
the data structure of GPIO Response
Definition: sampidefs.h:1330
the data structure of General Event Notification Response
Definition: sampidefs.h:1415
bit32 inbIOMBpayload[14]
Definition: sampidefs.h:1417
the data structure of GET DFE Data Response
Definition: sampidefs.h:1686
the data structure of Get Device Handle Response
Definition: sampidefs.h:1079
the data structure of Get Device Info Response
Definition: sampidefs.h:1198
the data structure of Get Device Info Response V
Definition: sampidefs.h:1221
the data structure of Get Device State Response
Definition: sampidefs.h:1595
the data structure of Get NVMD Data Response
Definition: sampidefs.h:1544
the data structure of Get Phy Profile Response IOMB V
Definition: sampidefs.h:1253
the data structure of Get Time Stamp Response
Definition: sampidefs.h:1496
the data structure of GET Vis Data Response
Definition: sampidefs.h:1700
describe a GPIO Event Setup Infomation in the SAS/SATA hardware
Definition: sa.h:2102
bit32 gpioEventRisingEdge
Definition: sa.h:2105
bit32 gpioEventFallingEdge
Definition: sa.h:2106
describe a GPIO Pin Setup Infomation in the SAS/SATA hardware
Definition: sa.h:2115
bit32 gpioTypePart1
Definition: sa.h:2118
bit32 gpioTypePart2
Definition: sa.h:2119
bit32 gpioInputEnabled
Definition: sa.h:2117
void * handle
Definition: sa.h:3312
bit32 encryptOperation
Definition: sa.h:3308
void * param
Definition: sa.h:3313
void * modePage
Definition: sa.h:3321
bit32 modePageLen
Definition: sa.h:3320
void * context
Definition: sa.h:3322
bit32 status
Definition: sa.h:3319
bit32 modePageOperation
Definition: sa.h:3318
the data structure of HW Event from Outbound
Definition: sampidefs.h:964
agsaSASIdentify_t sasIdentify
Definition: sampidefs.h:968
agsaFisRegDeviceToHost_t sataFis
Definition: sampidefs.h:969
the data structure of HW Event from Outbound
Definition: sampidefs.h:988
Definition: sa.h:3292
bit8 ID[AGSA_ID_SIZE]
Definition: sa.h:3293
bit32 agOSSA_IO_XFER_CMD_FRAME_ISSUED
Definition: sa.h:3684
bit32 agOSSA_IO_OPEN_CNX_ERROR_OPEN_PREEMPTED
Definition: sa.h:3723
bit32 agOSSA_IO_NO_DEVICE
Definition: sa.h:3645
bit32 agOSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED
Definition: sa.h:3654
bit32 agOSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR
Definition: sa.h:3706
bit32 agOSSA_IO_XFER_ERROR_PEER_ABORTED
Definition: sa.h:3665
bit32 agOSSA_IO_ABORT_IN_PROGRESS
Definition: sa.h:3694
bit32 agOSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY
Definition: sa.h:3660
bit32 agOSSA_IO_DS_NON_OPERATIONAL
Definition: sa.h:3687
bit32 agOSSA_IO_DS_INVALID
Definition: sa.h:3703
bit32 agOSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY
Definition: sa.h:3693
bit32 agOSSA_IO_XFR_ERROR_DIF_MISMATCH
Definition: sa.h:3716
bit32 agOSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH
Definition: sa.h:3718
bit32 agOSSA_MPI_ERR_OFFLOAD_DIF_OR_ENC_NOT_ENABLED
Definition: sa.h:3726
bit32 agOSSA_IO_DS_IN_RECOVERY
Definition: sa.h:3688
bit32 agOSSA_IO_XFER_ERROR_PHY_NOT_READY
Definition: sa.h:3653
bit32 agOSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH
Definition: sa.h:3717
bit32 agOSSA_IO_ABORTED
Definition: sa.h:3639
bit32 agOSSA_IO_XFER_ERROR_ACK_NAK_TIMEOUT
Definition: sa.h:3664
bit32 agOSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH
Definition: sa.h:3719
bit32 agOSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED
Definition: sa.h:3659
bit32 agOSSA_IO_ERROR_INTERNAL_SMP_RESOURCE
Definition: sa.h:3685
bit32 agOSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION
Definition: sa.h:3661
bit32 agOSSA_IO_XFER_OPEN_RETRY_TIMEOUT
Definition: sa.h:3674
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE
Definition: sa.h:3701
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED
Definition: sa.h:3702
bit32 agOSSA_IO_XFER_ERROR_NAK_RECEIVED
Definition: sa.h:3663
bit32 agOSSA_IO_PORT_IN_RESET
Definition: sa.h:3686
bit32 agOSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS
Definition: sa.h:3710
bit32 agOSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION
Definition: sa.h:3658
bit32 agOSSA_IO_UNKNOWN_ERROR
Definition: sa.h:3728
bit32 agOSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED
Definition: sa.h:3678
bit32 agOSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN
Definition: sa.h:3677
bit32 agOSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH
Definition: sa.h:3711
bit32 agOSSA_IO_INVALID_LENGTH
Definition: sa.h:3696
bit32 agOSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE
Definition: sa.h:3708
bit32 agOSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT
Definition: sa.h:3679
bit32 agOSSA_IO_ABORT_DELAYED
Definition: sa.h:3695
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO
Definition: sa.h:3699
bit32 agOSSA_IO_OPEN_CNX_ERROR_BREAK
Definition: sa.h:3656
bit32 agOSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN
Definition: sa.h:3683
bit32 agOSSA_IO_XFER_PIO_SETUP_ERROR
Definition: sa.h:3690
bit32 agOSSA_IO_XFER_ERROR_DMA_ACTIVATE_TIMEOUT
Definition: sa.h:3727
bit32 agOSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE
Definition: sa.h:3673
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS
Definition: sa.h:3657
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST
Definition: sa.h:3700
bit32 agOSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION
Definition: sa.h:3655
bit32 agOSSA_IO_XFER_ERR_EOB_DATA_OVERRUN
Definition: sa.h:3721
bit32 agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED
Definition: sa.h:3698
bit32 agOSSA_IO_OVERFLOW
Definition: sa.h:3640
bit32 agOSSA_IO_XFER_ERROR_RX_FRAME
Definition: sa.h:3666
bit32 agOSSA_IO_XFER_ERROR_UNEXPECTED_PHASE
Definition: sa.h:3676
bit32 agOSSA_IO_ERROR_HW_TIMEOUT
Definition: sa.h:3651
bit32 agOSSA_IO_XFER_ERROR_OFFSET_MISMATCH
Definition: sa.h:3682
bit32 agOSSA_IO_XFER_ERROR_BREAK
Definition: sa.h:3652
bit32 agOSSA_IO_XFER_READ_COMPL_ERR
Definition: sa.h:3704
agsaIORequestDesc_t * IORequest
Definition: satypes.h:171
bit32 Tag
Definition: satypes.h:170
agsaContext_t * agContext
Definition: satypes.h:172
the LL defined IO request descriptor
Definition: satypes.h:132
agsaPort_t * pPort
Definition: satypes.h:136
agsaIORequest_t * pIORequestContext
Definition: satypes.h:134
ossaSSPCompletedCB_t completionCB
Definition: satypes.h:137
bit8 DeviceInfoCmdOption
Definition: satypes.h:146
agsaDeviceDesc_t * pDevice
Definition: satypes.h:135
the LLRoot
Definition: satypes.h:209
agsaDeviceMap_t DeviceMap[MAX_IO_DEVICE_ENTRIES]
Definition: satypes.h:245
SALINK_LIST freeIORequests
Definition: satypes.h:214
bit32 autoDeregDeviceflag[AGSA_MAX_VALID_PORTS]
Definition: satypes.h:333
SALINK_LIST freeReservedRequests
Definition: satypes.h:215
agsaPhy_t phys[AGSA_MAX_VALID_PHYS]
Definition: satypes.h:221
agsaIOMap_t IOMap[MAX_ACTIVE_IO_REQUESTS]
Definition: satypes.h:246
agsaIOErrorEventStats_t IoErrorCount
Definition: satypes.h:299
bit8 phyCount
Definition: satypes.h:227
ossaDeviceRegistrationCB_t DeviceRegistrationCB
Definition: satypes.h:261
SALINK_LIST freeDevicesList
Definition: satypes.h:211
SALINK_LIST validPorts
Definition: satypes.h:225
ossaDeregisterDeviceHandleCB_t DeviceDeregistrationCB
Definition: satypes.h:262
agsaSwConfig_t swConfig
Definition: satypes.h:252
agsaDevHandle_t * DeviceHandle[MAX_IO_DEVICE_ENTRIES]
Definition: satypes.h:247
SALINK_LIST freePorts
Definition: satypes.h:224
agsaIOErrorEventStats_t IoEventCount
Definition: satypes.h:300
agsaPortMap_t PortMap[AGSA_MAX_VALID_PORTS]
Definition: satypes.h:244
the data structure of Local Phy Control Response
Definition: sampidefs.h:1093
bit32 ActualCRCUDT01
Definition: sa.h:3568
bit32 ExpectedUDT2345
Definition: sa.h:3567
bit32 ExpectedCRCUDT01
Definition: sa.h:3566
the data structure of PCIe diag response
Definition: sampidefs.h:1650
agsaPCIeDiagResponse_t
Definition: sa.h:1997
describe a Phy Analog Setting
Definition: sa.h:1779
structure describes bandwidth counters of a PHY in the SAS/SATA
Definition: sa.h:2287
used in saGetPhyProfile
Definition: sa.h:2270
bit32 lossOfDwordSynch
Definition: sa.h:2274
bit32 runningDisparityError
Definition: sa.h:2272
describe a Phy Rate Control 4.56 agsaPhyRateControlPage_t Description This profile page is used to re...
Definition: sa.h:1820
Structure is used as a parameter passed in saLocalPhyControlCB() to describe the error counter.
Definition: sa.h:2235
bit32 RSNW3
Definition: sa.h:2237
bit32 LSNW3
Definition: sa.h:2236
the phy
Definition: satypes.h:82
agsaSASIdentify_t sasIdentify
Definition: satypes.h:84
agsaPort_t * pPort
Definition: satypes.h:83
bit8 linkstatus
Definition: satypes.h:88
the data structure of Port Control Response
Definition: sampidefs.h:1519
bit32 PortStatus
Definition: satypes.h:183
bit32 PortID
Definition: satypes.h:182
void * PortContext
Definition: satypes.h:184
the port
Definition: satypes.h:64
bit32 status
Definition: satypes.h:69
bit32 phyMap[AGSA_MAX_VALID_PHYS]
Definition: satypes.h:68
bit32 tobedeleted
Definition: satypes.h:70
agsaPortContext_t portContext
Definition: satypes.h:66
bit32 portId
Definition: satypes.h:71
SALINK linkNode
Definition: satypes.h:65
data structure provides some information about a SAS device
Definition: sa.h:2682
agsaDeviceInfo_t commonDevInfo
Definition: sa.h:2683
bit32 numOfPhys
Definition: sa.h:2697
bit8 initiator_ssp_stp_smp
Definition: sa.h:2685
the data structure of SAS Diagnostic Execute Response
Definition: sampidefs.h:1402
the data structure of SAS Diagnostic Start/End Response
Definition: sampidefs.h:1391
the data structure of SAS HW Event Ack Response
Definition: sampidefs.h:1508
describe SAS IDENTIFY address frame
Definition: sa_spec.h:448
bit8 sasAddressLo[4]
Definition: sa_spec.h:471
bit8 phyIdentifier
Definition: sa_spec.h:473
bit8 deviceType_addressFrameType
Definition: sa_spec.h:449
bit8 sasAddressHi[4]
Definition: sa_spec.h:470
for the SAS/SATA LL Layer
Definition: sa.h:2522
describe a Open reject retry backoff threshold page
Definition: sa.h:1799
describe a SAS ReCofiguration structure in the SAS/SATA hardware
Definition: sa.h:1726
bit32 flags
Definition: sa.h:1727
bit8 maxPorts
Definition: sa.h:1737
bit16 sataHolTmo
Definition: sa.h:1741
bit16 openRejectRetriesData
Definition: sa.h:1739
bit16 openRejectRetriesCmd
Definition: sa.h:1738
the data structure of SATA_ABORT Response
Definition: sampidefs.h:1379
agsaCoalStpComplCxt_t stpComplCxt[1]
Definition: sampidefs.h:1806
agsaDeviceInfo_t commonDevInfo
Definition: sa.h:2650
the data structure of SATA Event Response
Definition: sampidefs.h:1159
describe a serial GPIO request and response in the SAS/SATA hardware
Definition: sa.h:2156
bit32 readWriteData[OSSA_SGPIO_MAX_READ_DATA_COUNT]
Definition: sa.h:2163
the data structure of SGPIO Response
Definition: sampidefs.h:1637
the data structure of SMP Abort Response
Definition: sampidefs.h:1532
the data structure of SMP Completion Response
Definition: sampidefs.h:1055
the data structure of SSP_ABORT Response
Definition: sampidefs.h:1367
the data structure of SSP Completion Response
Definition: sampidefs.h:1788
agsaCoalSspComplCxt_t sspComplCxt[1]
Definition: sampidefs.h:1790
the data structure of SSP Event Response
Definition: sampidefs.h:1172
the data structure of SSP Request Received Notification
Definition: sampidefs.h:1441
the data structure of SAS Re_Initialize Response
Definition: sampidefs.h:1622
the data structure of Set Device Info Response
Definition: sampidefs.h:1608
the data structure of Set Device State Response
Definition: sampidefs.h:1579
the data structure of Set NVMD Data Response
Definition: sampidefs.h:1556
the data structure of Set Phy Profile Response IOMB V
Definition: sampidefs.h:1288
bit32 maxActiveIOs
Definition: sa.h:2320
the data structure of PCI diag response
Definition: sampidefs.h:1674
agsaSATADeviceInfo_t sataDeviceInfo
Definition: satypes.h:103
agsaSASDeviceInfo_t sasDeviceInfo
Definition: satypes.h:102