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