xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/api/sa.h (revision 2ff63af9)
14e1bc9a0SAchim Leubner /*******************************************************************************
24e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
34e1bc9a0SAchim Leubner *
44e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided
54e1bc9a0SAchim Leubner *that the following conditions are met:
64e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
74e1bc9a0SAchim Leubner *following disclaimer.
84e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice,
94e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided
104e1bc9a0SAchim Leubner *with the distribution.
114e1bc9a0SAchim Leubner *
124e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
134e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
144e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
154e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
164e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
174e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
184e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
194e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
204e1bc9a0SAchim Leubner *
214e1bc9a0SAchim Leubner *
224e1bc9a0SAchim Leubner ********************************************************************************/
234e1bc9a0SAchim Leubner /*******************************************************************************/
244e1bc9a0SAchim Leubner /*! \file sa.h
254e1bc9a0SAchim Leubner  *  \brief The file defines the constants, data structure, and functions defined by LL API
264e1bc9a0SAchim Leubner  */
274e1bc9a0SAchim Leubner /******************************************************************************/
284e1bc9a0SAchim Leubner 
294e1bc9a0SAchim Leubner #ifndef  __SA_H__
304e1bc9a0SAchim Leubner #define __SA_H__
314e1bc9a0SAchim Leubner 
324e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/api/sa_spec.h>
334e1bc9a0SAchim Leubner #include <dev/pms/RefTisa/sallsdk/api/sa_err.h>
344e1bc9a0SAchim Leubner 
354e1bc9a0SAchim Leubner /* TestBase needed to have the 'Multi-Data fetch disable' feature */
364e1bc9a0SAchim Leubner #define SA_CONFIG_MDFD_REGISTRY
374e1bc9a0SAchim Leubner 
384e1bc9a0SAchim Leubner #define OSSA_OFFSET_OF(STRUCT_TYPE, FEILD)              \
394e1bc9a0SAchim Leubner         (bitptr)&(((STRUCT_TYPE *)0)->FEILD)
404e1bc9a0SAchim Leubner 
414e1bc9a0SAchim Leubner #if defined(SA_CPU_LITTLE_ENDIAN)
424e1bc9a0SAchim Leubner 
434e1bc9a0SAchim Leubner #define OSSA_WRITE_LE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16)     \
444e1bc9a0SAchim Leubner         (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit16)(VALUE16);
454e1bc9a0SAchim Leubner 
464e1bc9a0SAchim Leubner #define OSSA_WRITE_LE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32)     \
474e1bc9a0SAchim Leubner         (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit32)(VALUE32);
484e1bc9a0SAchim Leubner 
494e1bc9a0SAchim Leubner #define OSSA_READ_LE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET)       \
504e1bc9a0SAchim Leubner         (*((bit16 *)ADDR16)) = (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET))))
514e1bc9a0SAchim Leubner 
524e1bc9a0SAchim Leubner #define OSSA_READ_LE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET)       \
534e1bc9a0SAchim Leubner         (*((bit32 *)ADDR32)) = (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET))))
544e1bc9a0SAchim Leubner 
554e1bc9a0SAchim Leubner #define OSSA_WRITE_BE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16)     \
564e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))))   = (bit8)((((bit16)VALUE16)>>8)&0xFF);  \
574e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)(((bit16)VALUE16)&0xFF);
584e1bc9a0SAchim Leubner 
594e1bc9a0SAchim Leubner #define OSSA_WRITE_BE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32)     \
604e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))))   = (bit8)((((bit32)VALUE32)>>24)&0xFF); \
614e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit32)VALUE32)>>16)&0xFF); \
624e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))) = (bit8)((((bit32)VALUE32)>>8)&0xFF);  \
634e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))) = (bit8)(((bit32)VALUE32)&0xFF);
644e1bc9a0SAchim Leubner 
654e1bc9a0SAchim Leubner #define OSSA_READ_BE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET)       \
664e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR16)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))));   \
674e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR16)))   = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1)));
684e1bc9a0SAchim Leubner 
694e1bc9a0SAchim Leubner #define OSSA_READ_BE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET)       \
704e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR32)+3)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))));   \
714e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR32)+2)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); \
724e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR32)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))); \
734e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR32)))   = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3)));
744e1bc9a0SAchim Leubner 
754e1bc9a0SAchim Leubner #define OSSA_WRITE_BYTE_STRING(AGROOT, DEST_ADDR, SRC_ADDR, LEN)                        \
764e1bc9a0SAchim Leubner         si_memcpy(DEST_ADDR, SRC_ADDR, LEN);
774e1bc9a0SAchim Leubner 
784e1bc9a0SAchim Leubner 
794e1bc9a0SAchim Leubner #elif defined(SA_CPU_BIG_ENDIAN)
804e1bc9a0SAchim Leubner 
814e1bc9a0SAchim Leubner #define OSSA_WRITE_LE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16)     \
824e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit16)VALUE16)>>8)&0xFF);   \
834e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))))   = (bit8)(((bit16)VALUE16)&0xFF);
844e1bc9a0SAchim Leubner 
854e1bc9a0SAchim Leubner #define OSSA_WRITE_LE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32)     \
864e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))) = (bit8)((((bit32)VALUE32)>>24)&0xFF);  \
874e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))) = (bit8)((((bit32)VALUE32)>>16)&0xFF);  \
884e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit32)VALUE32)>>8)&0xFF);   \
894e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))))   = (bit8)(((bit32)VALUE32)&0xFF);
904e1bc9a0SAchim Leubner 
914e1bc9a0SAchim Leubner #define OSSA_READ_LE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET)       \
924e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR16)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))));   \
934e1bc9a0SAchim Leubner         (*(bit8 *)(((bit8 *)ADDR16)))   = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1)));
944e1bc9a0SAchim Leubner 
954e1bc9a0SAchim Leubner #define OSSA_READ_LE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET)       \
964e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)ADDR32)+3))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET))));   \
974e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)ADDR32)+2))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); \
984e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)ADDR32)+1))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))); \
994e1bc9a0SAchim Leubner         (*((bit8 *)(((bit8 *)ADDR32))))   = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3)));
1004e1bc9a0SAchim Leubner 
1014e1bc9a0SAchim Leubner #define OSSA_WRITE_BE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16)         \
1024e1bc9a0SAchim Leubner         (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit16)(VALUE16);
1034e1bc9a0SAchim Leubner 
1044e1bc9a0SAchim Leubner #define OSSA_WRITE_BE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32)         \
1054e1bc9a0SAchim Leubner         (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit32)(VALUE32);
1064e1bc9a0SAchim Leubner 
1074e1bc9a0SAchim Leubner #define OSSA_READ_BE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET)           \
1084e1bc9a0SAchim Leubner         (*((bit16 *)ADDR16)) = (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET))));
1094e1bc9a0SAchim Leubner 
1104e1bc9a0SAchim Leubner #define OSSA_READ_BE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET)           \
1114e1bc9a0SAchim Leubner         (*((bit32 *)ADDR32)) = (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET))));
1124e1bc9a0SAchim Leubner 
1134e1bc9a0SAchim Leubner #define OSSA_WRITE_BYTE_STRING(AGROOT, DEST_ADDR, SRC_ADDR, LEN)    \
1144e1bc9a0SAchim Leubner         si_memcpy(DEST_ADDR, SRC_ADDR, LEN);
1154e1bc9a0SAchim Leubner 
1164e1bc9a0SAchim Leubner #else
1174e1bc9a0SAchim Leubner 
1184e1bc9a0SAchim Leubner #error (Host CPU endianess undefined!!)
1194e1bc9a0SAchim Leubner 
1204e1bc9a0SAchim Leubner #endif
1214e1bc9a0SAchim Leubner 
1224e1bc9a0SAchim Leubner #define AGSA_WRITE_SGL(sglDest, sgLower, sgUpper, len, extReserved)     \
1234e1bc9a0SAchim Leubner         OSSA_WRITE_LE_32(agRoot, sglDest, 0, sgLower);                  \
1244e1bc9a0SAchim Leubner         OSSA_WRITE_LE_32(agRoot, sglDest, 4, sgUpper);                  \
1254e1bc9a0SAchim Leubner         OSSA_WRITE_LE_32(agRoot, sglDest, 8, len);                      \
1264e1bc9a0SAchim Leubner         OSSA_WRITE_LE_32(agRoot, sglDest, 12, extReserved);
1274e1bc9a0SAchim Leubner 
1284e1bc9a0SAchim Leubner 
1294e1bc9a0SAchim Leubner /**************************************************************************
1304e1bc9a0SAchim Leubner  *                        define byte swap macro                          *
1314e1bc9a0SAchim Leubner  **************************************************************************/
1324e1bc9a0SAchim Leubner /*! \def AGSA_FLIP_2_BYTES(_x)
1334e1bc9a0SAchim Leubner * \brief AGSA_FLIP_2_BYTES macro
1344e1bc9a0SAchim Leubner *
1354e1bc9a0SAchim Leubner * use to flip two bytes
1364e1bc9a0SAchim Leubner */
1374e1bc9a0SAchim Leubner #define AGSA_FLIP_2_BYTES(_x) ((bit16)(((((bit16)(_x))&0x00FF)<<8)|  \
1384e1bc9a0SAchim Leubner                                      ((((bit16)(_x))&0xFF00)>>8)))
1394e1bc9a0SAchim Leubner 
1404e1bc9a0SAchim Leubner /*! \def AGSA_FLIP_4_BYTES(_x)
1414e1bc9a0SAchim Leubner * \brief AGSA_FLIP_4_BYTES macro
1424e1bc9a0SAchim Leubner *
1434e1bc9a0SAchim Leubner * use to flip four bytes
1444e1bc9a0SAchim Leubner */
1454e1bc9a0SAchim Leubner #define AGSA_FLIP_4_BYTES(_x) ((bit32)(((((bit32)(_x))&0x000000FF)<<24)|  \
1464e1bc9a0SAchim Leubner                                      ((((bit32)(_x))&0x0000FF00)<<8)|   \
1474e1bc9a0SAchim Leubner                                      ((((bit32)(_x))&0x00FF0000)>>8)|   \
1484e1bc9a0SAchim Leubner                                      ((((bit32)(_x))&0xFF000000)>>24)))
1494e1bc9a0SAchim Leubner 
1504e1bc9a0SAchim Leubner 
1514e1bc9a0SAchim Leubner #if defined(SA_CPU_LITTLE_ENDIAN)
1524e1bc9a0SAchim Leubner 
1534e1bc9a0SAchim Leubner /*! \def LEBIT16_TO_BIT16(_x)
1544e1bc9a0SAchim Leubner * \brief LEBIT16_TO_BIT16 macro
1554e1bc9a0SAchim Leubner *
1564e1bc9a0SAchim Leubner * use to convert little endian bit16 to host bit16
1574e1bc9a0SAchim Leubner */
1584e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_BIT16
1594e1bc9a0SAchim Leubner #define LEBIT16_TO_BIT16(_x)   (_x)
1604e1bc9a0SAchim Leubner #endif
1614e1bc9a0SAchim Leubner 
1624e1bc9a0SAchim Leubner /*! \def BIT16_TO_LEBIT16(_x)
1634e1bc9a0SAchim Leubner * \brief BIT16_TO_LEBIT16 macro
1644e1bc9a0SAchim Leubner *
1654e1bc9a0SAchim Leubner * use to convert host bit16 to little endian bit16
1664e1bc9a0SAchim Leubner */
1674e1bc9a0SAchim Leubner #ifndef BIT16_TO_LEBIT16
1684e1bc9a0SAchim Leubner #define BIT16_TO_LEBIT16(_x)   (_x)
1694e1bc9a0SAchim Leubner #endif
1704e1bc9a0SAchim Leubner 
1714e1bc9a0SAchim Leubner /*! \def BEBIT16_TO_BIT16(_x)
1724e1bc9a0SAchim Leubner * \brief BEBIT16_TO_BIT16 macro
1734e1bc9a0SAchim Leubner *
1744e1bc9a0SAchim Leubner * use to convert big endian bit16 to host bit16
1754e1bc9a0SAchim Leubner */
1764e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_BIT16
1774e1bc9a0SAchim Leubner #define BEBIT16_TO_BIT16(_x)   AGSA_FLIP_2_BYTES(_x)
1784e1bc9a0SAchim Leubner #endif
1794e1bc9a0SAchim Leubner 
1804e1bc9a0SAchim Leubner /*! \def BIT16_TO_BEBIT16(_x)
1814e1bc9a0SAchim Leubner * \brief BIT16_TO_BEBIT16 macro
1824e1bc9a0SAchim Leubner *
1834e1bc9a0SAchim Leubner * use to convert host bit16 to big endian bit16
1844e1bc9a0SAchim Leubner */
1854e1bc9a0SAchim Leubner #ifndef BIT16_TO_BEBIT16
1864e1bc9a0SAchim Leubner #define BIT16_TO_BEBIT16(_x)   AGSA_FLIP_2_BYTES(_x)
1874e1bc9a0SAchim Leubner #endif
1884e1bc9a0SAchim Leubner 
1894e1bc9a0SAchim Leubner /*! \def LEBIT32_TO_BIT32(_x)
1904e1bc9a0SAchim Leubner * \brief LEBIT32_TO_BIT32 macro
1914e1bc9a0SAchim Leubner *
1924e1bc9a0SAchim Leubner * use to convert little endian bit32 to host bit32
1934e1bc9a0SAchim Leubner */
1944e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_BIT32
1954e1bc9a0SAchim Leubner #define LEBIT32_TO_BIT32(_x)   (_x)
1964e1bc9a0SAchim Leubner #endif
1974e1bc9a0SAchim Leubner 
1984e1bc9a0SAchim Leubner /*! \def BIT32_TO_LEBIT32(_x)
1994e1bc9a0SAchim Leubner * \brief BIT32_TO_LEBIT32 macro
2004e1bc9a0SAchim Leubner *
2014e1bc9a0SAchim Leubner * use to convert host bit32 to little endian bit32
2024e1bc9a0SAchim Leubner */
2034e1bc9a0SAchim Leubner #ifndef BIT32_TO_LEBIT32
2044e1bc9a0SAchim Leubner #define BIT32_TO_LEBIT32(_x)   (_x)
2054e1bc9a0SAchim Leubner #endif
2064e1bc9a0SAchim Leubner 
2074e1bc9a0SAchim Leubner /*! \def BEBIT32_TO_BIT32(_x)
2084e1bc9a0SAchim Leubner * \brief BEBIT32_TO_BIT32 macro
2094e1bc9a0SAchim Leubner *
2104e1bc9a0SAchim Leubner * use to convert big endian bit32 to host bit32
2114e1bc9a0SAchim Leubner */
2124e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_BIT32
2134e1bc9a0SAchim Leubner #define BEBIT32_TO_BIT32(_x)   AGSA_FLIP_4_BYTES(_x)
2144e1bc9a0SAchim Leubner #endif
2154e1bc9a0SAchim Leubner 
2164e1bc9a0SAchim Leubner /*! \def BIT32_TO_BEBIT32(_x)
2174e1bc9a0SAchim Leubner * \brief BIT32_TO_BEBIT32 macro
2184e1bc9a0SAchim Leubner *
2194e1bc9a0SAchim Leubner * use to convert host bit32 to big endian bit32
2204e1bc9a0SAchim Leubner */
2214e1bc9a0SAchim Leubner #ifndef BIT32_TO_BEBIT32
2224e1bc9a0SAchim Leubner #define BIT32_TO_BEBIT32(_x)   AGSA_FLIP_4_BYTES(_x)
2234e1bc9a0SAchim Leubner #endif
2244e1bc9a0SAchim Leubner 
2254e1bc9a0SAchim Leubner 
2264e1bc9a0SAchim Leubner /*
2274e1bc9a0SAchim Leubner  * bit8 to Byte[x] of bit32
2284e1bc9a0SAchim Leubner  */
2294e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B0
2304e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B0(_x)   ((bit32)(_x))
2314e1bc9a0SAchim Leubner #endif
2324e1bc9a0SAchim Leubner 
2334e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B1
2344e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B1(_x)   (((bit32)(_x)) << 8)
2354e1bc9a0SAchim Leubner #endif
2364e1bc9a0SAchim Leubner 
2374e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B2
2384e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B2(_x)   (((bit32)(_x)) << 16)
2394e1bc9a0SAchim Leubner #endif
2404e1bc9a0SAchim Leubner 
2414e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B3
2424e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B3(_x)   (((bit32)(_x)) << 24)
2434e1bc9a0SAchim Leubner #endif
2444e1bc9a0SAchim Leubner 
2454e1bc9a0SAchim Leubner /*
2464e1bc9a0SAchim Leubner  * Byte[x] of bit32 to bit8
2474e1bc9a0SAchim Leubner  */
2484e1bc9a0SAchim Leubner #ifndef BIT32_B0_TO_BIT8
2494e1bc9a0SAchim Leubner #define BIT32_B0_TO_BIT8(_x)   ((bit8)(((bit32)(_x)) & 0x000000FF))
2504e1bc9a0SAchim Leubner #endif
2514e1bc9a0SAchim Leubner 
2524e1bc9a0SAchim Leubner #ifndef BIT32_B1_TO_BIT8
2534e1bc9a0SAchim Leubner #define BIT32_B1_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x0000FF00) >> 8))
2544e1bc9a0SAchim Leubner #endif
2554e1bc9a0SAchim Leubner 
2564e1bc9a0SAchim Leubner #ifndef BIT32_B2_TO_BIT8
2574e1bc9a0SAchim Leubner #define BIT32_B2_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x00FF0000) >> 16))
2584e1bc9a0SAchim Leubner #endif
2594e1bc9a0SAchim Leubner 
2604e1bc9a0SAchim Leubner #ifndef BIT32_B3_TO_BIT8
2614e1bc9a0SAchim Leubner #define BIT32_B3_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0xFF000000) >> 24))
2624e1bc9a0SAchim Leubner #endif
2634e1bc9a0SAchim Leubner 
2644e1bc9a0SAchim Leubner #elif defined(SA_CPU_BIG_ENDIAN)
2654e1bc9a0SAchim Leubner 
2664e1bc9a0SAchim Leubner /*! \def LEBIT16_TO_BIT16(_x)
2674e1bc9a0SAchim Leubner * \brief LEBIT16_TO_BIT16 macro
2684e1bc9a0SAchim Leubner *
2694e1bc9a0SAchim Leubner * use to convert little endian bit16 to host bit16
2704e1bc9a0SAchim Leubner */
2714e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_BIT16
2724e1bc9a0SAchim Leubner #define LEBIT16_TO_BIT16(_x)   AGSA_FLIP_2_BYTES(_x)
2734e1bc9a0SAchim Leubner #endif
2744e1bc9a0SAchim Leubner 
2754e1bc9a0SAchim Leubner /*! \def BIT16_TO_LEBIT16(_x)
2764e1bc9a0SAchim Leubner * \brief BIT16_TO_LEBIT16 macro
2774e1bc9a0SAchim Leubner *
2784e1bc9a0SAchim Leubner * use to convert host bit16 to little endian bit16
2794e1bc9a0SAchim Leubner */
2804e1bc9a0SAchim Leubner #ifndef BIT16_TO_LEBIT16
2814e1bc9a0SAchim Leubner #define BIT16_TO_LEBIT16(_x)   AGSA_FLIP_2_BYTES(_x)
2824e1bc9a0SAchim Leubner #endif
2834e1bc9a0SAchim Leubner 
2844e1bc9a0SAchim Leubner /*! \def BEBIT16_TO_BIT16(_x)
2854e1bc9a0SAchim Leubner * \brief BEBIT16_TO_BIT16 macro
2864e1bc9a0SAchim Leubner *
2874e1bc9a0SAchim Leubner * use to convert big endian bit16 to host bit16
2884e1bc9a0SAchim Leubner */
2894e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_BIT16
2904e1bc9a0SAchim Leubner #define BEBIT16_TO_BIT16(_x)   (_x)
2914e1bc9a0SAchim Leubner #endif
2924e1bc9a0SAchim Leubner 
2934e1bc9a0SAchim Leubner /*! \def BIT16_TO_BEBIT16(_x)
2944e1bc9a0SAchim Leubner * \brief BIT16_TO_BEBIT16 macro
2954e1bc9a0SAchim Leubner *
2964e1bc9a0SAchim Leubner * use to convert host bit16 to big endian bit16
2974e1bc9a0SAchim Leubner */
2984e1bc9a0SAchim Leubner #ifndef BIT16_TO_BEBIT16
2994e1bc9a0SAchim Leubner #define BIT16_TO_BEBIT16(_x)   (_x)
3004e1bc9a0SAchim Leubner #endif
3014e1bc9a0SAchim Leubner 
3024e1bc9a0SAchim Leubner /*! \def LEBIT32_TO_BIT32(_x)
3034e1bc9a0SAchim Leubner * \brief LEBIT32_TO_BIT32 macro
3044e1bc9a0SAchim Leubner *
3054e1bc9a0SAchim Leubner * use to convert little endian bit32 to host bit32
3064e1bc9a0SAchim Leubner */
3074e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_BIT32
3084e1bc9a0SAchim Leubner #define LEBIT32_TO_BIT32(_x)   AGSA_FLIP_4_BYTES(_x)
3094e1bc9a0SAchim Leubner #endif
3104e1bc9a0SAchim Leubner 
3114e1bc9a0SAchim Leubner /*! \def BIT32_TO_LEBIT32(_x)
3124e1bc9a0SAchim Leubner * \brief BIT32_TO_LEBIT32 macro
3134e1bc9a0SAchim Leubner *
3144e1bc9a0SAchim Leubner * use to convert host bit32 to little endian bit32
3154e1bc9a0SAchim Leubner */
3164e1bc9a0SAchim Leubner #ifndef BIT32_TO_LEBIT32
3174e1bc9a0SAchim Leubner #define BIT32_TO_LEBIT32(_x)   AGSA_FLIP_4_BYTES(_x)
3184e1bc9a0SAchim Leubner #endif
3194e1bc9a0SAchim Leubner 
3204e1bc9a0SAchim Leubner /*! \def BEBIT32_TO_BIT32(_x)
3214e1bc9a0SAchim Leubner * \brief BEBIT32_TO_BIT32 macro
3224e1bc9a0SAchim Leubner *
3234e1bc9a0SAchim Leubner * use to convert big endian bit32 to host bit32
3244e1bc9a0SAchim Leubner */
3254e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_BIT32
3264e1bc9a0SAchim Leubner #define BEBIT32_TO_BIT32(_x)   (_x)
3274e1bc9a0SAchim Leubner #endif
3284e1bc9a0SAchim Leubner 
3294e1bc9a0SAchim Leubner /*! \def BIT32_TO_BEBIT32(_x)
3304e1bc9a0SAchim Leubner * \brief BIT32_TO_BEBIT32 macro
3314e1bc9a0SAchim Leubner *
3324e1bc9a0SAchim Leubner * use to convert host bit32 to big endian bit32
3334e1bc9a0SAchim Leubner */
3344e1bc9a0SAchim Leubner #ifndef BIT32_TO_BEBIT32
3354e1bc9a0SAchim Leubner #define BIT32_TO_BEBIT32(_x)   (_x)
3364e1bc9a0SAchim Leubner #endif
3374e1bc9a0SAchim Leubner 
3384e1bc9a0SAchim Leubner 
3394e1bc9a0SAchim Leubner /*
3404e1bc9a0SAchim Leubner  * bit8 to Byte[x] of bit32
3414e1bc9a0SAchim Leubner  */
3424e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B0
3434e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B0(_x)   (((bit32)(_x)) << 24)
3444e1bc9a0SAchim Leubner #endif
3454e1bc9a0SAchim Leubner 
3464e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B1
3474e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B1(_x)   (((bit32)(_x)) << 16)
3484e1bc9a0SAchim Leubner #endif
3494e1bc9a0SAchim Leubner 
3504e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B2
3514e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B2(_x)   (((bit32)(_x)) << 8)
3524e1bc9a0SAchim Leubner #endif
3534e1bc9a0SAchim Leubner 
3544e1bc9a0SAchim Leubner #ifndef BIT8_TO_BIT32_B3
3554e1bc9a0SAchim Leubner #define BIT8_TO_BIT32_B3(_x)   ((bit32)(_x))
3564e1bc9a0SAchim Leubner #endif
3574e1bc9a0SAchim Leubner 
3584e1bc9a0SAchim Leubner /*
3594e1bc9a0SAchim Leubner  * Byte[x] of bit32 to bit8
3604e1bc9a0SAchim Leubner  */
3614e1bc9a0SAchim Leubner #ifndef BIT32_B0_TO_BIT8
3624e1bc9a0SAchim Leubner #define BIT32_B0_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0xFF000000) >> 24))
3634e1bc9a0SAchim Leubner #endif
3644e1bc9a0SAchim Leubner 
3654e1bc9a0SAchim Leubner #ifndef BIT32_B1_TO_BIT8
3664e1bc9a0SAchim Leubner #define BIT32_B1_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x00FF0000) >> 16))
3674e1bc9a0SAchim Leubner #endif
3684e1bc9a0SAchim Leubner 
3694e1bc9a0SAchim Leubner #ifndef BIT32_B2_TO_BIT8
3704e1bc9a0SAchim Leubner #define BIT32_B2_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x0000FF00) >> 8))
3714e1bc9a0SAchim Leubner #endif
3724e1bc9a0SAchim Leubner 
3734e1bc9a0SAchim Leubner #ifndef BIT32_B3_TO_BIT8
3744e1bc9a0SAchim Leubner #define BIT32_B3_TO_BIT8(_x)   ((bit8)(((bit32)(_x)) & 0x000000FF))
3754e1bc9a0SAchim Leubner #endif
3764e1bc9a0SAchim Leubner 
3774e1bc9a0SAchim Leubner #else
3784e1bc9a0SAchim Leubner 
3794e1bc9a0SAchim Leubner #error No definition of SA_CPU_BIG_ENDIAN or SA_CPU_LITTLE_ENDIAN
3804e1bc9a0SAchim Leubner 
3814e1bc9a0SAchim Leubner #endif
3824e1bc9a0SAchim Leubner 
3834e1bc9a0SAchim Leubner 
3844e1bc9a0SAchim Leubner #if defined(SA_DMA_LITTLE_ENDIAN)
3854e1bc9a0SAchim Leubner 
3864e1bc9a0SAchim Leubner /*
3874e1bc9a0SAchim Leubner  * ** bit32 to bit32
3884e1bc9a0SAchim Leubner  * */
3894e1bc9a0SAchim Leubner #ifndef DMA_BIT32_TO_BIT32
3904e1bc9a0SAchim Leubner #define DMA_BIT32_TO_BIT32(_x)   (_x)
3914e1bc9a0SAchim Leubner #endif
3924e1bc9a0SAchim Leubner 
3934e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_BIT32
3944e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_BIT32(_x) (_x)
3954e1bc9a0SAchim Leubner #endif
3964e1bc9a0SAchim Leubner 
3974e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BIT32
3984e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BIT32(_x) AGSA_FLIP_4_BYTES(_x)
3994e1bc9a0SAchim Leubner #endif
4004e1bc9a0SAchim Leubner 
4014e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_BIT32
4024e1bc9a0SAchim Leubner #define BIT32_TO_DMA_BIT32(_x)   (_x)
4034e1bc9a0SAchim Leubner #endif
4044e1bc9a0SAchim Leubner 
4054e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_LEBIT32
4064e1bc9a0SAchim Leubner #define BIT32_TO_DMA_LEBIT32(_x) (_x)
4074e1bc9a0SAchim Leubner #endif
4084e1bc9a0SAchim Leubner 
4094e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_BEBIT32
4104e1bc9a0SAchim Leubner #define BIT32_TO_DMA_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
4114e1bc9a0SAchim Leubner #endif
4124e1bc9a0SAchim Leubner 
4134e1bc9a0SAchim Leubner 
4144e1bc9a0SAchim Leubner /*
4154e1bc9a0SAchim Leubner  * ** bit16 to bit16
4164e1bc9a0SAchim Leubner  * */
4174e1bc9a0SAchim Leubner #ifndef DMA_BIT16_TO_BIT16
4184e1bc9a0SAchim Leubner #define DMA_BIT16_TO_BIT16(_x)   (_x)
4194e1bc9a0SAchim Leubner #endif
4204e1bc9a0SAchim Leubner 
4214e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_BIT16
4224e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_BIT16(_x) (_x)
4234e1bc9a0SAchim Leubner #endif
4244e1bc9a0SAchim Leubner 
4254e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BIT16
4264e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BIT16(_x) AGSA_FLIP_2_BYTES(_x)
4274e1bc9a0SAchim Leubner #endif
4284e1bc9a0SAchim Leubner 
4294e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_BIT16
4304e1bc9a0SAchim Leubner #define BIT16_TO_DMA_BIT16(_x)   (_x)
4314e1bc9a0SAchim Leubner #endif
4324e1bc9a0SAchim Leubner 
4334e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_LEBIT16
4344e1bc9a0SAchim Leubner #define BIT16_TO_DMA_LEBIT16(_x) (_x)
4354e1bc9a0SAchim Leubner #endif
4364e1bc9a0SAchim Leubner 
4374e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_BEBIT16
4384e1bc9a0SAchim Leubner #define BIT16_TO_DMA_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
4394e1bc9a0SAchim Leubner #endif
4404e1bc9a0SAchim Leubner 
4414e1bc9a0SAchim Leubner #if defined(SA_CPU_LITTLE_ENDIAN)
4424e1bc9a0SAchim Leubner 
4434e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_DMA_BEBIT32
4444e1bc9a0SAchim Leubner #define BEBIT32_TO_DMA_BEBIT32(_x) (_x)
4454e1bc9a0SAchim Leubner #endif
4464e1bc9a0SAchim Leubner 
4474e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_DMA_LEBIT32
4484e1bc9a0SAchim Leubner #define LEBIT32_TO_DMA_LEBIT32(_x) (_x)
4494e1bc9a0SAchim Leubner #endif
4504e1bc9a0SAchim Leubner 
4514e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_LEBIT32
4524e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_LEBIT32(_x) (_x)
4534e1bc9a0SAchim Leubner #endif
4544e1bc9a0SAchim Leubner 
4554e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BEBIT32
4564e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BEBIT32(_x) (_x)
4574e1bc9a0SAchim Leubner #endif
4584e1bc9a0SAchim Leubner 
4594e1bc9a0SAchim Leubner /*
4604e1bc9a0SAchim Leubner  * ** bit16 to bit16
4614e1bc9a0SAchim Leubner  * */
4624e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_DMA_BEBIT16
4634e1bc9a0SAchim Leubner #define BEBIT16_TO_DMA_BEBIT16(_x) (_x)
4644e1bc9a0SAchim Leubner #endif
4654e1bc9a0SAchim Leubner 
4664e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_DMA_LEBIT16
4674e1bc9a0SAchim Leubner #define LEBIT16_TO_DMA_LEBIT16(_x) (_x)
4684e1bc9a0SAchim Leubner #endif
4694e1bc9a0SAchim Leubner 
4704e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_LEBIT16
4714e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_LEBIT16(_x) (_x)
4724e1bc9a0SAchim Leubner #endif
4734e1bc9a0SAchim Leubner 
4744e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BEBIT16
4754e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BEBIT16(_x) (_x)
4764e1bc9a0SAchim Leubner #endif
4774e1bc9a0SAchim Leubner 
4784e1bc9a0SAchim Leubner #else   /* defined(SA_CPU_BIG_ENDIAN) */
4794e1bc9a0SAchim Leubner 
4804e1bc9a0SAchim Leubner 
4814e1bc9a0SAchim Leubner /*
4824e1bc9a0SAchim Leubner  * ** bit32 to bit32
4834e1bc9a0SAchim Leubner  * */
4844e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_DMA_BEBIT32
4854e1bc9a0SAchim Leubner #define BEBIT32_TO_DMA_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
4864e1bc9a0SAchim Leubner #endif
4874e1bc9a0SAchim Leubner 
4884e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_DMA_LEBIT32
4894e1bc9a0SAchim Leubner #define LEBIT32_TO_DMA_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
4904e1bc9a0SAchim Leubner #endif
4914e1bc9a0SAchim Leubner 
4924e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_LEBIT32
4934e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
4944e1bc9a0SAchim Leubner #endif
4954e1bc9a0SAchim Leubner 
4964e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BEBIT32
4974e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
4984e1bc9a0SAchim Leubner #endif
4994e1bc9a0SAchim Leubner 
5004e1bc9a0SAchim Leubner /*
5014e1bc9a0SAchim Leubner  * ** bit16 to bit16
5024e1bc9a0SAchim Leubner  * */
5034e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_DMA_BEBIT16
5044e1bc9a0SAchim Leubner #define BEBIT16_TO_DMA_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
5054e1bc9a0SAchim Leubner #endif
5064e1bc9a0SAchim Leubner 
5074e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_DMA_LEBIT16
5084e1bc9a0SAchim Leubner #define LEBIT16_TO_DMA_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
5094e1bc9a0SAchim Leubner #endif
5104e1bc9a0SAchim Leubner 
5114e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_LEBIT16
5124e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
5134e1bc9a0SAchim Leubner #endif
5144e1bc9a0SAchim Leubner 
5154e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BEBIT16
5164e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
5174e1bc9a0SAchim Leubner #endif
5184e1bc9a0SAchim Leubner 
5194e1bc9a0SAchim Leubner #endif
5204e1bc9a0SAchim Leubner 
5214e1bc9a0SAchim Leubner /*
5224e1bc9a0SAchim Leubner  * bit8 to Byte[x] of bit32
5234e1bc9a0SAchim Leubner  */
5244e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B0
5254e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B0(_x)   ((bit32)(_x))
5264e1bc9a0SAchim Leubner #endif
5274e1bc9a0SAchim Leubner 
5284e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B1
5294e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B1(_x)   (((bit32)(_x)) << 8)
5304e1bc9a0SAchim Leubner #endif
5314e1bc9a0SAchim Leubner 
5324e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B2
5334e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B2(_x)   (((bit32)(_x)) << 16)
5344e1bc9a0SAchim Leubner #endif
5354e1bc9a0SAchim Leubner 
5364e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B3
5374e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B3(_x)   (((bit32)(_x)) << 24)
5384e1bc9a0SAchim Leubner #endif
5394e1bc9a0SAchim Leubner 
5404e1bc9a0SAchim Leubner /*
5414e1bc9a0SAchim Leubner  * Byte[x] of bit32 to bit8
5424e1bc9a0SAchim Leubner  */
5434e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B0_TO_BIT8
5444e1bc9a0SAchim Leubner #define DMA_BIT32_B0_TO_BIT8(_x)   ((bit8)(((bit32)(_x)) & 0x000000FF))
5454e1bc9a0SAchim Leubner #endif
5464e1bc9a0SAchim Leubner 
5474e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B1_TO_BIT8
5484e1bc9a0SAchim Leubner #define DMA_BIT32_B1_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x0000FF00) >> 8))
5494e1bc9a0SAchim Leubner #endif
5504e1bc9a0SAchim Leubner 
5514e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B2_TO_BIT8
5524e1bc9a0SAchim Leubner #define DMA_BIT32_B2_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x00FF0000) >> 16))
5534e1bc9a0SAchim Leubner #endif
5544e1bc9a0SAchim Leubner 
5554e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B3_TO_BIT8
5564e1bc9a0SAchim Leubner #define DMA_BIT32_B3_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0xFF000000) >> 24))
5574e1bc9a0SAchim Leubner #endif
5584e1bc9a0SAchim Leubner 
5594e1bc9a0SAchim Leubner /*|                                                                   |
5604e1bc9a0SAchim Leubner   | end of DMA access macros for LITTLE ENDIAN                        |
5614e1bc9a0SAchim Leubner   ---------------------------------------------------------------------
5624e1bc9a0SAchim Leubner  */
5634e1bc9a0SAchim Leubner 
5644e1bc9a0SAchim Leubner #elif defined(SA_DMA_BIG_ENDIAN)                /* DMA big endian */
5654e1bc9a0SAchim Leubner 
5664e1bc9a0SAchim Leubner /*--------------------------------------------------------------------
5674e1bc9a0SAchim Leubner  | DMA buffer access macros for BIG ENDIAN                           |
5684e1bc9a0SAchim Leubner  |                                                                   |
5694e1bc9a0SAchim Leubner  */
5704e1bc9a0SAchim Leubner 
5714e1bc9a0SAchim Leubner /* bit32 to bit32 */
5724e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BIT32
5734e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BIT32(_x)   (_x)
5744e1bc9a0SAchim Leubner #endif
5754e1bc9a0SAchim Leubner 
5764e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_BIT32
5774e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_BIT32(_x) AGSA_FLIP_4_BYTES(_x)
5784e1bc9a0SAchim Leubner #endif
5794e1bc9a0SAchim Leubner 
5804e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_BIT32
5814e1bc9a0SAchim Leubner #define BIT32_TO_DMA_BIT32(_x)   (_x)
5824e1bc9a0SAchim Leubner #endif
5834e1bc9a0SAchim Leubner 
5844e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_LEBIT32
5854e1bc9a0SAchim Leubner #define BIT32_TO_DMA_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
5864e1bc9a0SAchim Leubner #endif
5874e1bc9a0SAchim Leubner 
5884e1bc9a0SAchim Leubner #ifndef BIT32_TO_DMA_BEBIT32
5894e1bc9a0SAchim Leubner #define BIT32_TO_DMA_BEBIT32(_x) (_x)
5904e1bc9a0SAchim Leubner #endif
5914e1bc9a0SAchim Leubner 
5924e1bc9a0SAchim Leubner /* bit16 to bit16 */
5934e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BIT16
5944e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BIT16(_x)   (_x)
5954e1bc9a0SAchim Leubner #endif
5964e1bc9a0SAchim Leubner 
5974e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_BIT16
5984e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_BIT16(_x) AGSA_FLIP_2_BYTES(_x)
5994e1bc9a0SAchim Leubner #endif
6004e1bc9a0SAchim Leubner 
6014e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_BIT16
6024e1bc9a0SAchim Leubner #define BIT16_TO_DMA_BIT16(_x)   (_x)
6034e1bc9a0SAchim Leubner #endif
6044e1bc9a0SAchim Leubner 
6054e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_LEBIT16
6064e1bc9a0SAchim Leubner #define BIT16_TO_DMA_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
6074e1bc9a0SAchim Leubner #endif
6084e1bc9a0SAchim Leubner 
6094e1bc9a0SAchim Leubner #ifndef BIT16_TO_DMA_BEBIT16
6104e1bc9a0SAchim Leubner #define BIT16_TO_DMA_BEBIT16(_x) (_x)
6114e1bc9a0SAchim Leubner #endif
6124e1bc9a0SAchim Leubner 
6134e1bc9a0SAchim Leubner 
6144e1bc9a0SAchim Leubner #if defined(SA_CPU_LITTLE_ENDIAN)           /* CPU little endain */
6154e1bc9a0SAchim Leubner 
6164e1bc9a0SAchim Leubner /* bit32 to bit32 */
6174e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_DMA_BEBIT32
6184e1bc9a0SAchim Leubner #define BEBIT32_TO_DMA_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
6194e1bc9a0SAchim Leubner #endif
6204e1bc9a0SAchim Leubner 
6214e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_DMA_LEBIT32
6224e1bc9a0SAchim Leubner #define LEBIT32_TO_DMA_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
6234e1bc9a0SAchim Leubner #endif
6244e1bc9a0SAchim Leubner 
6254e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_LEBIT32
6264e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
6274e1bc9a0SAchim Leubner #endif
6284e1bc9a0SAchim Leubner 
6294e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BEBIT32
6304e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x)
6314e1bc9a0SAchim Leubner #endif
6324e1bc9a0SAchim Leubner 
6334e1bc9a0SAchim Leubner /* bit16 to bit16 */
6344e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_DMA_BEBIT16
6354e1bc9a0SAchim Leubner #define BEBIT16_TO_DMA_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
6364e1bc9a0SAchim Leubner #endif
6374e1bc9a0SAchim Leubner 
6384e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_DMA_LEBIT16
6394e1bc9a0SAchim Leubner #define LEBIT16_TO_DMA_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
6404e1bc9a0SAchim Leubner #endif
6414e1bc9a0SAchim Leubner 
6424e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_LEBIT16
6434e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
6444e1bc9a0SAchim Leubner #endif
6454e1bc9a0SAchim Leubner 
6464e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BEBIT16
6474e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x)
6484e1bc9a0SAchim Leubner #endif
6494e1bc9a0SAchim Leubner 
6504e1bc9a0SAchim Leubner 
6514e1bc9a0SAchim Leubner #else   /* defined(SA_CPU_BIG_ENDIAN) */
6524e1bc9a0SAchim Leubner 
6534e1bc9a0SAchim Leubner /* bit32 to bit32 */
6544e1bc9a0SAchim Leubner #ifndef BEBIT32_TO_DMA_BEBIT32
6554e1bc9a0SAchim Leubner #define BEBIT32_TO_DMA_BEBIT32(_x) (_x)
6564e1bc9a0SAchim Leubner #endif
6574e1bc9a0SAchim Leubner 
6584e1bc9a0SAchim Leubner #ifndef LEBIT32_TO_DMA_LEBIT32
6594e1bc9a0SAchim Leubner #define LEBIT32_TO_DMA_LEBIT32(_x) (_x)
6604e1bc9a0SAchim Leubner #endif
6614e1bc9a0SAchim Leubner 
6624e1bc9a0SAchim Leubner #ifndef DMA_LEBIT32_TO_LEBIT32
6634e1bc9a0SAchim Leubner #define DMA_LEBIT32_TO_LEBIT32(_x) (_x)
6644e1bc9a0SAchim Leubner #endif
6654e1bc9a0SAchim Leubner 
6664e1bc9a0SAchim Leubner #ifndef DMA_BEBIT32_TO_BEBIT32
6674e1bc9a0SAchim Leubner #define DMA_BEBIT32_TO_BEBIT32(_x) (_x)
6684e1bc9a0SAchim Leubner #endif
6694e1bc9a0SAchim Leubner 
6704e1bc9a0SAchim Leubner /* bit16 to bit16 */
6714e1bc9a0SAchim Leubner #ifndef BEBIT16_TO_DMA_BEBIT16
6724e1bc9a0SAchim Leubner #define BEBIT16_TO_DMA_BEBIT16(_x) (_x)
6734e1bc9a0SAchim Leubner #endif
6744e1bc9a0SAchim Leubner 
6754e1bc9a0SAchim Leubner #ifndef LEBIT16_TO_DMA_LEBIT16
6764e1bc9a0SAchim Leubner #define LEBIT16_TO_DMA_LEBIT16(_x) (_x)
6774e1bc9a0SAchim Leubner #endif
6784e1bc9a0SAchim Leubner 
6794e1bc9a0SAchim Leubner #ifndef DMA_LEBIT16_TO_LEBIT16
6804e1bc9a0SAchim Leubner #define DMA_LEBIT16_TO_LEBIT16(_x) (_x)
6814e1bc9a0SAchim Leubner #endif
6824e1bc9a0SAchim Leubner 
6834e1bc9a0SAchim Leubner #ifndef DMA_BEBIT16_TO_BEBIT16
6844e1bc9a0SAchim Leubner #define DMA_BEBIT16_TO_BEBIT16(_x) (_x)
6854e1bc9a0SAchim Leubner #endif
6864e1bc9a0SAchim Leubner 
6874e1bc9a0SAchim Leubner #endif
6884e1bc9a0SAchim Leubner 
6894e1bc9a0SAchim Leubner /*
6904e1bc9a0SAchim Leubner  * bit8 to Byte[x] of bit32
6914e1bc9a0SAchim Leubner  */
6924e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B0
6934e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B0(_x)   (((bit32)(_x)) << 24)
6944e1bc9a0SAchim Leubner #endif
6954e1bc9a0SAchim Leubner 
6964e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B1
6974e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B1(_x)   (((bit32)(_x)) << 16)
6984e1bc9a0SAchim Leubner #endif
6994e1bc9a0SAchim Leubner 
7004e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B2
7014e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B2(_x)   (((bit32)(_x)) << 8)
7024e1bc9a0SAchim Leubner #endif
7034e1bc9a0SAchim Leubner 
7044e1bc9a0SAchim Leubner #ifndef BIT8_TO_DMA_BIT32_B3
7054e1bc9a0SAchim Leubner #define BIT8_TO_DMA_BIT32_B3(_x)   ((bit32)(_x))
7064e1bc9a0SAchim Leubner #endif
7074e1bc9a0SAchim Leubner 
7084e1bc9a0SAchim Leubner /*
7094e1bc9a0SAchim Leubner  * ** Byte[x] of bit32 to bit8
7104e1bc9a0SAchim Leubner  * */
7114e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B0_TO_BIT8
7124e1bc9a0SAchim Leubner #define DMA_BIT32_B0_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0xFF000000) >> 24))
7134e1bc9a0SAchim Leubner #endif
7144e1bc9a0SAchim Leubner 
7154e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B1_TO_BIT8
7164e1bc9a0SAchim Leubner #define DMA_BIT32_B1_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x00FF0000) >> 16))
7174e1bc9a0SAchim Leubner #endif
7184e1bc9a0SAchim Leubner 
7194e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B2_TO_BIT8
7204e1bc9a0SAchim Leubner #define DMA_BIT32_B2_TO_BIT8(_x)   ((bit8)((((bit32)(_x)) & 0x0000FF00) >> 8))
7214e1bc9a0SAchim Leubner #endif
7224e1bc9a0SAchim Leubner 
7234e1bc9a0SAchim Leubner #ifndef DMA_BIT32_B3_TO_BIT8
7244e1bc9a0SAchim Leubner #define DMA_BIT32_B3_TO_BIT8(_x)   ((bit8)(((bit32)(_x)) & 0x000000FF))
7254e1bc9a0SAchim Leubner #endif
7264e1bc9a0SAchim Leubner 
7274e1bc9a0SAchim Leubner /*|                                                                   |
7284e1bc9a0SAchim Leubner   | end of DMA access macros for BIG ENDIAN                           |
7294e1bc9a0SAchim Leubner   ---------------------------------------------------------------------
7304e1bc9a0SAchim Leubner */
7314e1bc9a0SAchim Leubner #else
7324e1bc9a0SAchim Leubner 
7334e1bc9a0SAchim Leubner #error No definition of SA_DMA_BIG_ENDIAN or SA_DMA_LITTLE_ENDIAN
7344e1bc9a0SAchim Leubner 
7354e1bc9a0SAchim Leubner #endif  /* DMA endian */
7364e1bc9a0SAchim Leubner /*
7374e1bc9a0SAchim Leubner  * End of DMA buffer access macros                                   *
7384e1bc9a0SAchim Leubner  *                                                                    *
7394e1bc9a0SAchim Leubner  **********************************************************************
7404e1bc9a0SAchim Leubner  */
7414e1bc9a0SAchim Leubner 
7424e1bc9a0SAchim Leubner /************************************************************************************
7434e1bc9a0SAchim Leubner  *                                                                                  *
7444e1bc9a0SAchim Leubner  *               Constants defined for LL Layer starts                              *
7454e1bc9a0SAchim Leubner  *                                                                                  *
7464e1bc9a0SAchim Leubner  ************************************************************************************/
7474e1bc9a0SAchim Leubner 
7484e1bc9a0SAchim Leubner /*********************************************************
7494e1bc9a0SAchim Leubner  *   sTSDK LL revision and Interface revision, FW version
7504e1bc9a0SAchim Leubner  *********************************************************/
7514e1bc9a0SAchim Leubner 
7524e1bc9a0SAchim Leubner #define FW_THIS_VERSION_SPC12G 0x03060005
7534e1bc9a0SAchim Leubner 
7544e1bc9a0SAchim Leubner #define FW_THIS_VERSION_SPC6G  0x02092400
7554e1bc9a0SAchim Leubner #define FW_THIS_VERSION_SPC    0x01110000
7564e1bc9a0SAchim Leubner 
7574e1bc9a0SAchim Leubner 
7584e1bc9a0SAchim Leubner #define STSDK_LL_INTERFACE_VERSION                  0x20A
7594e1bc9a0SAchim Leubner #define STSDK_LL_OLD_INTERFACE_VERSION              0x1                   /* SPC and SPCv before 02030401 */
7604e1bc9a0SAchim Leubner #define STSDK_LL_VERSION                            FW_THIS_VERSION_SPC6G /**< current sTSDK version */
7614e1bc9a0SAchim Leubner #define MAX_FW_VERSION_SUPPORTED                    FW_THIS_VERSION_SPC6G /**< FW */
7624e1bc9a0SAchim Leubner #define MATCHING_V_FW_VERSION                       FW_THIS_VERSION_SPC6G /**< current V  matching FW version */
7634e1bc9a0SAchim Leubner #define MIN_FW_SPCVE_VERSION_SUPPORTED              0x02000000            /**< 2.00 FW */
7644e1bc9a0SAchim Leubner 
7654e1bc9a0SAchim Leubner #define STSDK_LL_12G_INTERFACE_VERSION              0x302
7664e1bc9a0SAchim Leubner #define STSDK_LL_12G_VERSION                        FW_THIS_VERSION_SPC12G /**< current sTSDK version */
7674e1bc9a0SAchim Leubner #define MAX_FW_12G_VERSION_SUPPORTED                FW_THIS_VERSION_SPC12G /**< FW */
7684e1bc9a0SAchim Leubner #define MATCHING_12G_V_FW_VERSION                   FW_THIS_VERSION_SPC12G /**< current V  matching FW version */
7694e1bc9a0SAchim Leubner #define MIN_FW_12G_SPCVE_VERSION_SUPPORTED          0x03000000             /**< 3.00 FW */
7704e1bc9a0SAchim Leubner 
7714e1bc9a0SAchim Leubner #define STSDK_LL_SPC_VERSION                        0x01100000          /**< current SPC FW version supported */
7724e1bc9a0SAchim Leubner #define MATCHING_SPC_FW_VERSION                     FW_THIS_VERSION_SPC /**< current SPC matching FW version */
7734e1bc9a0SAchim Leubner #define MIN_FW_SPC_VERSION_SUPPORTED                0x01062502          /**< 1.06d FW */
7744e1bc9a0SAchim Leubner 
7754e1bc9a0SAchim Leubner #define STSDK_LL_INTERFACE_VERSION_IGNORE_MASK      0xF00
7764e1bc9a0SAchim Leubner /*************************************************
7774e1bc9a0SAchim Leubner  *   constants for API return values
7784e1bc9a0SAchim Leubner  *************************************************/
7794e1bc9a0SAchim Leubner #define AGSA_RC_SUCCESS                             0x00     /**< Successful function return value */
7804e1bc9a0SAchim Leubner #define AGSA_RC_FAILURE                             0x01     /**< Failed function return value */
7814e1bc9a0SAchim Leubner #define AGSA_RC_BUSY                                0x02     /**< Busy function return value */
7824e1bc9a0SAchim Leubner /* current only return from saGetControllerInfo() and saGetControllerStatus() */
7834e1bc9a0SAchim Leubner #define AGSA_RC_HDA_NO_FW_RUNNING                   0x03     /**< HDA mode and no FW running */
7844e1bc9a0SAchim Leubner #define AGSA_RC_FW_NOT_IN_READY_STATE               0x04     /**< FW not in ready state */
7854e1bc9a0SAchim Leubner /* current only return from saInitialize() for version checking */
7864e1bc9a0SAchim Leubner #define AGSA_RC_VERSION_INCOMPATIBLE                0x05     /**< Version mismatch */
7874e1bc9a0SAchim Leubner #define AGSA_RC_VERSION_UNTESTED                    0x06     /**< Version not tested */
7884e1bc9a0SAchim Leubner #define AGSA_RC_NOT_SUPPORTED                       0x07     /**< Operation not supported on the current hardware */
7894e1bc9a0SAchim Leubner #define AGSA_RC_COMPLETE                            0x08
7904e1bc9a0SAchim Leubner 
7914e1bc9a0SAchim Leubner /*************************************************
7924e1bc9a0SAchim Leubner  *   constants for type field in agsaMem_t
7934e1bc9a0SAchim Leubner  *************************************************/
7944e1bc9a0SAchim Leubner #define AGSA_CACHED_MEM                             0x00     /**< CACHED memory type */
7954e1bc9a0SAchim Leubner #define AGSA_DMA_MEM                                0x01     /**< DMA memory type */
7964e1bc9a0SAchim Leubner #define AGSA_CACHED_DMA_MEM                         0x02     /**< CACHED DMA memory type */
7974e1bc9a0SAchim Leubner 
7984e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
7994e1bc9a0SAchim Leubner #ifdef FAST_IO_TEST
8004e1bc9a0SAchim Leubner #define AGSA_NUM_MEM_CHUNKS                 (12 + AGSA_MAX_INBOUND_Q + AGSA_MAX_OUTBOUND_Q)       /**< max # of memory chunks supported */
8014e1bc9a0SAchim Leubner #else
8024e1bc9a0SAchim Leubner #define AGSA_NUM_MEM_CHUNKS                 (11 + AGSA_MAX_INBOUND_Q + AGSA_MAX_OUTBOUND_Q)       /**< max # of memory chunks supported */
8034e1bc9a0SAchim Leubner #endif
8044e1bc9a0SAchim Leubner #else
8054e1bc9a0SAchim Leubner #ifdef FAST_IO_TEST
8064e1bc9a0SAchim Leubner #define AGSA_NUM_MEM_CHUNKS                 (11 + AGSA_MAX_INBOUND_Q + AGSA_MAX_OUTBOUND_Q)       /**< max # of memory chunks supported */
8074e1bc9a0SAchim Leubner #else
8084e1bc9a0SAchim Leubner #define AGSA_NUM_MEM_CHUNKS                 (10 + AGSA_MAX_INBOUND_Q + AGSA_MAX_OUTBOUND_Q)       /**< max # of memory chunks supported */
8094e1bc9a0SAchim Leubner #endif
8104e1bc9a0SAchim Leubner #endif /* END SA_ENABLE_TRACE_FUNCTIONS */
8114e1bc9a0SAchim Leubner 
8124e1bc9a0SAchim Leubner 
8134e1bc9a0SAchim Leubner /**********************************
8144e1bc9a0SAchim Leubner  * default constant for phy count
8154e1bc9a0SAchim Leubner  **********************************/
8164e1bc9a0SAchim Leubner #define AGSA_MAX_VALID_PHYS                         16  /* was 8 for SPC */   /**< max # of phys supported by the hardware */
8174e1bc9a0SAchim Leubner 
8184e1bc9a0SAchim Leubner /************************************
8194e1bc9a0SAchim Leubner  * default constant for Esgl entries
8204e1bc9a0SAchim Leubner  ************************************/
8214e1bc9a0SAchim Leubner #define MAX_ESGL_ENTRIES                            10    /**< max # of extended SG list entry */
8224e1bc9a0SAchim Leubner 
8234e1bc9a0SAchim Leubner /*******************************************
8244e1bc9a0SAchim Leubner  * constant for max inbound/outbound queues
8254e1bc9a0SAchim Leubner  *******************************************/
8264e1bc9a0SAchim Leubner #define AGSA_MAX_INBOUND_Q                          64    /**< max # of inbound queue */
8274e1bc9a0SAchim Leubner #define AGSA_MAX_OUTBOUND_Q                         64    /**< max # of outbound queue */
8284e1bc9a0SAchim Leubner #define AGSA_MAX_BEST_INBOUND_Q                     16    /* Max inbound Q number with good IO performance */
8294e1bc9a0SAchim Leubner 
8304e1bc9a0SAchim Leubner /****************************
8314e1bc9a0SAchim Leubner  *   Phy Control constants
8324e1bc9a0SAchim Leubner  ****************************/
8334e1bc9a0SAchim Leubner #define AGSA_PHY_LINK_RESET                         0x01
8344e1bc9a0SAchim Leubner #define AGSA_PHY_HARD_RESET                         0x02
8354e1bc9a0SAchim Leubner #define AGSA_PHY_GET_ERROR_COUNTS                   0x03 /* SPC only used in original saLocalPhyControl */
8364e1bc9a0SAchim Leubner #define AGSA_PHY_CLEAR_ERROR_COUNTS                 0x04 /* SPC only */
8374e1bc9a0SAchim Leubner #define AGSA_PHY_GET_BW_COUNTS                      0x05 /* SPC only */
8384e1bc9a0SAchim Leubner #define AGSA_PHY_NOTIFY_ENABLE_SPINUP               0x10
8394e1bc9a0SAchim Leubner #define AGSA_PHY_BROADCAST_ASYNCH_EVENT             0x12
8404e1bc9a0SAchim Leubner #define AGSA_PHY_COMINIT_OOB                        0x20
8414e1bc9a0SAchim Leubner 
8424e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_ERR_COUNTERS_PAGE      0x01 /* retrieve the SAS PHY error counters */
8434e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE  0x02 /* retrieve the SAS PHY error counters After capturing the errors, the hardware error counters are cleared and restarted. */
8444e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_BW_COUNTERS_PAGE       0x03 /* retrieve the SAS PHY transmit and receive bandwidth counters. */
8454e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE   0x04 /* retrieve the SAS PHY analog settings  */
8464e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_GENERAL_STATUS_PAGE    0x05 /* retrieve the SAS PHY general status for the PHY specified in the phyID parameter   */
8474e1bc9a0SAchim Leubner #define AGSA_PHY_SNW3_PAGE                  0x06
8484e1bc9a0SAchim Leubner #define AGSA_PHY_RATE_CONTROL_PAGE          0x07 /* Used to set several rate control parameters. */
8494e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_MISC_PAGE              0x08
8504e1bc9a0SAchim Leubner #define AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE     0x08 /* Used to set retry and backoff threshold  parameters. */
8514e1bc9a0SAchim Leubner 
8524e1bc9a0SAchim Leubner /*****************
8534e1bc9a0SAchim Leubner  * HW Reset
8544e1bc9a0SAchim Leubner  *****************/
8554e1bc9a0SAchim Leubner #define AGSA_CHIP_RESET                             0x00     /**< flag to reset hard reset */
8564e1bc9a0SAchim Leubner #define AGSA_SOFT_RESET                             0x01     /**< flag to reset the controller chip */
8574e1bc9a0SAchim Leubner 
8584e1bc9a0SAchim Leubner /***************************************
8594e1bc9a0SAchim Leubner  * Discovery Types
8604e1bc9a0SAchim Leubner  ***************************************/
8614e1bc9a0SAchim Leubner #define AG_SA_DISCOVERY_TYPE_SAS                    0x00     /**< flag to discover SAS devices */
8624e1bc9a0SAchim Leubner #define AG_SA_DISCOVERY_TYPE_SATA                   0x01     /**< flag to discover SATA devices */
8634e1bc9a0SAchim Leubner 
8644e1bc9a0SAchim Leubner /***************************************
8654e1bc9a0SAchim Leubner  * Discovery Options
8664e1bc9a0SAchim Leubner  ***************************************/
8674e1bc9a0SAchim Leubner #define AG_SA_DISCOVERY_OPTION_FULL_START           0x00     /**< flag to start full discovery */
8684e1bc9a0SAchim Leubner #define AG_SA_DISCOVERY_OPTION_INCREMENTAL_START    0x01     /**< flag to start incremental discovery */
8694e1bc9a0SAchim Leubner #define AG_SA_DISCOVERY_OPTION_ABORT                0x02     /**< flag to abort a discovery */
8704e1bc9a0SAchim Leubner 
8714e1bc9a0SAchim Leubner /****************************************************************
8724e1bc9a0SAchim Leubner  * SSP/SMP/SATA Request type
8734e1bc9a0SAchim Leubner  ****************************************************************/
8744e1bc9a0SAchim Leubner /* bit31-28 - request type
8754e1bc9a0SAchim Leubner    bit27-16 - reserved
8764e1bc9a0SAchim Leubner    bit15-10 - SATA ATAP
8774e1bc9a0SAchim Leubner    bit9-8   - direction
8784e1bc9a0SAchim Leubner    bit7     - AUTO
8794e1bc9a0SAchim Leubner    bit6     - reserved
8804e1bc9a0SAchim Leubner    bit5     - EXT
8814e1bc9a0SAchim Leubner    bit4     - MSG
8824e1bc9a0SAchim Leubner    bit3-0   - Initiator, target or task mode (1 to 8)
8834e1bc9a0SAchim Leubner    */
8844e1bc9a0SAchim Leubner #define AGSA_REQTYPE_MASK                           0xF0000000  /**< request type mask */
8854e1bc9a0SAchim Leubner #define AGSA_REQ_TYPE_UNKNOWN                       0x00000000  /**< unknown request type */
8864e1bc9a0SAchim Leubner #define AGSA_SSP_REQTYPE                            0x80000000
8874e1bc9a0SAchim Leubner #define AGSA_SMP_REQTYPE                            0x40000000
8884e1bc9a0SAchim Leubner #define AGSA_SATA_REQTYPE                           0x20000000
8894e1bc9a0SAchim Leubner 
8904e1bc9a0SAchim Leubner #define AGSA_DIR_MASK                               0x00000300
8914e1bc9a0SAchim Leubner #define AGSA_AUTO_MASK                              0x00000080
8924e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_MASK                         0x0000FC00
8934e1bc9a0SAchim Leubner 
8944e1bc9a0SAchim Leubner #define AGSA_DIR_NONE                               0x00000000
8954e1bc9a0SAchim Leubner #define AGSA_DIR_CONTROLLER_TO_HOST                 0x00000100  /**< used to be called AGSA_DIR_READ */
8964e1bc9a0SAchim Leubner #define AGSA_DIR_HOST_TO_CONTROLLER                 0x00000200  /**< used to be called AGSA_DIR_WRITE */
8974e1bc9a0SAchim Leubner 
8984e1bc9a0SAchim Leubner /* bit definition - AUTO mode */
8994e1bc9a0SAchim Leubner #define AGSA_AUTO_GOOD_RESPONSE                     0x00000080
9004e1bc9a0SAchim Leubner 
9014e1bc9a0SAchim Leubner /* request type - not bit difination */
9024e1bc9a0SAchim Leubner #define AGSA_SSP_INIT                               0x00000001
9034e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_MODE                           0x00000003
9044e1bc9a0SAchim Leubner #define AGSA_SSP_TASK_MGNT                          0x00000005
9054e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_RSP                            0x00000006
9064e1bc9a0SAchim Leubner #define AGSA_SMP_INIT                               0x00000007
9074e1bc9a0SAchim Leubner #define AGSA_SMP_TGT                                0x00000008
9084e1bc9a0SAchim Leubner 
9094e1bc9a0SAchim Leubner /* request type for SSP Initiator and extend */
9104e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_EXT                           (AGSA_SSP_INIT | AGSA_SSP_EXT_BIT)
9114e1bc9a0SAchim Leubner 
9124e1bc9a0SAchim Leubner /* request type for SSP Initiator and indirect */
9134e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_INDIRECT                      (AGSA_SSP_INIT | AGSA_SSP_INDIRECT_BIT)
9144e1bc9a0SAchim Leubner 
9154e1bc9a0SAchim Leubner /* bit definition */
9164e1bc9a0SAchim Leubner #define AGSA_MSG                                    0x00000010
9174e1bc9a0SAchim Leubner #define AGSA_SSP_EXT_BIT                            0x00000020
9184e1bc9a0SAchim Leubner #define AGSA_SSP_INDIRECT_BIT                       0x00000040
9194e1bc9a0SAchim Leubner #define AGSA_MSG_BIT                                AGSA_MSG >> 2
9204e1bc9a0SAchim Leubner 
9214e1bc9a0SAchim Leubner /* agsaSSPIniEncryptIOStartCmd_t dirMTlr bits*/
9224e1bc9a0SAchim Leubner #define AGSA_INDIRECT_CDB_BIT                       0x00000008
9234e1bc9a0SAchim Leubner #define AGSA_SKIP_MASK_BIT                          0x00000010
9244e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_BIT                            0x00000020
9254e1bc9a0SAchim Leubner #define AGSA_DIF_BIT                                0x00000040
9264e1bc9a0SAchim Leubner #define AGSA_DIF_LA_BIT                             0x00000080
9274e1bc9a0SAchim Leubner #define AGSA_DIRECTION_BITS                         0x00000300
9284e1bc9a0SAchim Leubner #define AGSA_SKIP_MASK_OFFSET_BITS                  0x0F000000
9294e1bc9a0SAchim Leubner #define AGSA_SSP_INFO_LENGTH_BITS                   0xF0000000
9304e1bc9a0SAchim Leubner 
9314e1bc9a0SAchim Leubner /*  agsaSSPTgtIOStartCmd_t INITagAgrDir bits */
9324e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_INI_TAG                   0xFFFF0000 /* 16 31  */
9334e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_ODS                       0x00008000 /* 15 */
9344e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DEE_DIF                   0x00004000 /* 14 */
9354e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DEE                       0x00002000 /* 13 14 */
9364e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_R                         0x00001000 /* 12 */
9374e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DAD                       0x00000600 /* 11 10 */
9384e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DIR                       0x00000300 /* 8 9 */
9394e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DIR_IN                    0x00000100 /* 8 9 */
9404e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_DIR_OUT                   0x00000200 /* 8 9 */
9414e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_AGR                       0x00000080 /* 7 */
9424e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_RDF                       0x00000040 /* 6 */
9434e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_RTE                       0x00000030 /* 4 5 */
9444e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_BITS_AN                        0x00000006 /* 2 3 */
9454e1bc9a0SAchim Leubner 
9464e1bc9a0SAchim Leubner 
9474e1bc9a0SAchim Leubner /* agsaSSPIniEncryptIOStartCmd_t DIF_flags bit definitions */
9484e1bc9a0SAchim Leubner #define AGSA_DIF_UPDATE_BITS                        0xFC000000
9494e1bc9a0SAchim Leubner #define AGSA_DIF_VERIFY_BITS                        0x03F00000
9504e1bc9a0SAchim Leubner #define AGSA_DIF_BLOCK_SIZE_BITS                    0x000F0000
9514e1bc9a0SAchim Leubner #define AGSA_DIF_ENABLE_BLOCK_COUNT_BIT             0x00000040
9524e1bc9a0SAchim Leubner #define AGSA_DIF_CRC_SEED_BIT                       0x00000020
9534e1bc9a0SAchim Leubner #define AGSA_DIF_CRC_INVERT_BIT                     0x00000010
9544e1bc9a0SAchim Leubner #define AGSA_DIF_CRC_VERIFY_BIT                     0x00000008
9554e1bc9a0SAchim Leubner #define AGSA_DIF_OP_BITS                            0x00000007
9564e1bc9a0SAchim Leubner 
9574e1bc9a0SAchim Leubner #define AGSA_DIF_OP_INSERT                          0x00000000
9584e1bc9a0SAchim Leubner #define AGSA_DIF_OP_VERIFY_AND_FORWARD              0x00000001
9594e1bc9a0SAchim Leubner #define AGSA_DIF_OP_VERIFY_AND_DELETE               0x00000002
9604e1bc9a0SAchim Leubner #define AGSA_DIF_OP_VERIFY_AND_REPLACE              0x00000003
9614e1bc9a0SAchim Leubner #define AGSA_DIF_OP_RESERVED2                       0x00000004
9624e1bc9a0SAchim Leubner #define AGSA_DIF_OP_VERIFY_UDT_REPLACE_CRC          0x00000005
9634e1bc9a0SAchim Leubner #define AGSA_DIF_OP_RESERVED3                       0x00000006
9644e1bc9a0SAchim Leubner #define AGSA_DIF_OP_REPLACE_UDT_REPLACE_CRC         0x00000007
9654e1bc9a0SAchim Leubner 
9664e1bc9a0SAchim Leubner 
9674e1bc9a0SAchim Leubner /* agsaSSPIniEncryptIOStartCmd_t EncryptFlagsLo bit definitions */
9684e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_DEK_BITS                       0xFFFFFF000
9694e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_SKIP_DIF_BIT                   0x000000010
9704e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_KEY_TABLE_BITS                 0x00000000C
9714e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_KEY_TAG_BIT                    0x000000002
9724e1bc9a0SAchim Leubner 
9734e1bc9a0SAchim Leubner /* Cipher mode to be used for this I/O. */
9744e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_ECB_Mode                       0
9754e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_XTS_Mode                       0x6
9764e1bc9a0SAchim Leubner 
9774e1bc9a0SAchim Leubner /* agsaSSPIniEncryptIOStartCmd_t EncryptFlagsHi bit definitions */
9784e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_KEK_SELECT_BITS                0x0000000E0
9794e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_SECTOR_SIZE_BITS               0x00000001F
9804e1bc9a0SAchim Leubner 
9814e1bc9a0SAchim Leubner /* defined in the sTSDK spec. */
9824e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_NONDATA                       (AGSA_SSP_REQTYPE | AGSA_DIR_NONE | AGSA_SSP_INIT)  /**< SSP initiator non data request type */
9834e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ                          (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT)  /**< SSP initiator read request type */
9844e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE                         (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT)  /**< SSP initiator write request type */
9854e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_READ_DATA                      (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_TGT_MODE)  /**< SSP target read data request type */
9864e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_READ                           (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_TGT_MODE)  /**< SSP target read data request type */
9874e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_READ_GOOD_RESP                 (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_TGT_MODE | AGSA_AUTO_GOOD_RESPONSE)  /**< SSP target read data with automatic good response request type */
9884e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_WRITE_DATA                     (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_TGT_MODE)  /**< SSP target write data request type */
9894e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_WRITE                          (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_TGT_MODE)  /**< SSP target write data request type */
9904e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_WRITE_GOOD_RESP                (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_TGT_MODE  | AGSA_AUTO_GOOD_RESPONSE) /**< SSP target write data request type with automatic good response request type*/
9914e1bc9a0SAchim Leubner #define AGSA_SSP_TASK_MGNT_REQ                      (AGSA_SSP_REQTYPE | AGSA_SSP_TASK_MGNT)  /**< SSP task management request type */
9924e1bc9a0SAchim Leubner #define AGSA_SSP_TGT_CMD_OR_TASK_RSP                (AGSA_SSP_REQTYPE | AGSA_SSP_TGT_RSP)  /**< SSP command or task management response request type */
9934e1bc9a0SAchim Leubner #define AGSA_SMP_INIT_REQ                           (AGSA_SMP_REQTYPE | AGSA_SMP_INIT)  /**< SMP initiator request type */
9944e1bc9a0SAchim Leubner #define AGSA_SMP_TGT_RESPONSE                       (AGSA_SMP_REQTYPE | AGSA_SMP_TGT)  /**< SMP target response request type */
9954e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ_M                        (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT | AGSA_MSG)
9964e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE_M                       (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT | AGSA_MSG)
9974e1bc9a0SAchim Leubner #define AGSA_SSP_TASK_MGNT_REQ_M                    (AGSA_SSP_REQTYPE | AGSA_SSP_TASK_MGNT                          | AGSA_MSG)
9984e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ_EXT                      (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT_EXT)  /**< SSP initiator read request Ext type */
9994e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE_EXT                     (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT_EXT)  /**< SSP initiator write request Ext type */
10004e1bc9a0SAchim Leubner 
10014e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ_INDIRECT                 (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT_INDIRECT)  /**< SSP initiator read request indirect type */
10024e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE_INDIRECT                (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT_INDIRECT)  /**< SSP initiator write request indirect type */
10034e1bc9a0SAchim Leubner 
10044e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ_INDIRECT_M               (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT_INDIRECT | AGSA_MSG)  /**< SSP initiator read request indirect type */
10054e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE_INDIRECT_M              (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT_INDIRECT | AGSA_MSG)  /**< SSP initiator write request indirect type */
10064e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_READ_EXT_M                    (AGSA_SSP_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SSP_INIT_EXT | AGSA_MSG)
10074e1bc9a0SAchim Leubner #define AGSA_SSP_INIT_WRITE_EXT_M                   (AGSA_SSP_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SSP_INIT_EXT | AGSA_MSG)
10084e1bc9a0SAchim Leubner 
10094e1bc9a0SAchim Leubner #define AGSA_SMP_IOCTL_REQUEST			    		0xFFFFFFFF
10104e1bc9a0SAchim Leubner 
10114e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_SRST_ASSERT                  0x00000400
10124e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_SRST_DEASSERT                0x00000800
10134e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_EXECDEVDIAG                  0x00000C00
10144e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_NON_DATA                     0x00001000
10154e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_PIO                          0x00001400
10164e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_DMA                          0x00001800
10174e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_NCQ                          0x00001C00
10184e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_PKT_DEVRESET                 0x00002000
10194e1bc9a0SAchim Leubner #define AGSA_SATA_ATAP_PKT                          0x00002400
10204e1bc9a0SAchim Leubner 
10214e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_NON_DATA                 (AGSA_SATA_REQTYPE | AGSA_DIR_NONE  | AGSA_SATA_ATAP_NON_DATA)
10224e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_PIO_READ                 (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_PIO)  /**< SATA PIO read request type */
10234e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DMA_READ                 (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_DMA)  /**< SATA DMA read request type */
10244e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_FPDMA_READ               (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_NCQ)  /**< SATA FDMA read request type */
10254e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_PIO_WRITE                (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_PIO)  /**< SATA PIO read request type */
10264e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DMA_WRITE                (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_DMA)  /**< SATA DMA read request type */
10274e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_FPDMA_WRITE              (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_NCQ)  /**< SATA FDMA read request type */
10284e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DEV_RESET                (AGSA_SATA_REQTYPE | AGSA_DIR_NONE  | AGSA_SATA_ATAP_PKT_DEVRESET)  /**< SATA device reset request type */
10294e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_SRST_ASSERT              (AGSA_SATA_REQTYPE | AGSA_DIR_NONE  | AGSA_SATA_ATAP_SRST_ASSERT)  /**< SATA device reset assert */
10304e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_SRST_DEASSERT            (AGSA_SATA_REQTYPE | AGSA_DIR_NONE  | AGSA_SATA_ATAP_SRST_DEASSERT)  /**< SATA device reset deassert */
10314e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_D2H_PKT                  (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_PKT)
10324e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_H2D_PKT                  (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_PKT)
10334e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_NON_PKT                  (AGSA_SATA_REQTYPE | AGSA_DIR_NONE | AGSA_SATA_ATAP_PKT)
10344e1bc9a0SAchim Leubner 
10354e1bc9a0SAchim Leubner 
10364e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_NON_DATA_M               (AGSA_SATA_REQTYPE | AGSA_DIR_NONE          | AGSA_SATA_ATAP_NON_DATA | AGSA_MSG)
10374e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_PIO_READ_M               (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_PIO | AGSA_MSG)  /**< SATA PIO read request type */
10384e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DMA_READ_M               (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_DMA | AGSA_MSG)  /**< SATA DMA read request type */
10394e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_FPDMA_READ_M             (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_NCQ | AGSA_MSG)  /**< SATA FDMA read request type */
10404e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_PIO_WRITE_M              (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_PIO | AGSA_MSG)  /**< SATA PIO read request type */
10414e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DMA_WRITE_M              (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_DMA | AGSA_MSG)  /**< SATA DMA read request type */
10424e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_FPDMA_WRITE_M            (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_NCQ | AGSA_MSG)  /**< SATA FDMA read request type */
10434e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_D2H_PKT_M                (AGSA_SATA_REQTYPE | AGSA_DIR_CONTROLLER_TO_HOST | AGSA_SATA_ATAP_PKT | AGSA_MSG)
10444e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_H2D_PKT_M                (AGSA_SATA_REQTYPE | AGSA_DIR_HOST_TO_CONTROLLER | AGSA_SATA_ATAP_PKT | AGSA_MSG)
10454e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_NON_PKT_M                (AGSA_SATA_REQTYPE | AGSA_DIR_NONE               | AGSA_SATA_ATAP_PKT | AGSA_MSG)
10464e1bc9a0SAchim Leubner /* TestBase */
10474e1bc9a0SAchim Leubner #define AGSA_SATA_PROTOCOL_DEV_RESET_M              (AGSA_SATA_REQTYPE | AGSA_DIR_NONE  | AGSA_SATA_ATAP_PKT_DEVRESET     | AGSA_MSG)  /**< SATA device reset request type */
10484e1bc9a0SAchim Leubner 
10494e1bc9a0SAchim Leubner 
10504e1bc9a0SAchim Leubner 
10514e1bc9a0SAchim Leubner #define AGSA_INTERRUPT_HANDLE_ALL_CHANNELS          0xFFFFFFFF    /**< flag indicates handles interrupts for all channles */
10524e1bc9a0SAchim Leubner 
10534e1bc9a0SAchim Leubner /****************************************************************************
10544e1bc9a0SAchim Leubner ** INBOUND Queue related macros
10554e1bc9a0SAchim Leubner ****************************************************************************/
10564e1bc9a0SAchim Leubner #define AGSA_IBQ_PRIORITY_NORMAL                    0x0
10574e1bc9a0SAchim Leubner #define AGSA_IBQ_PRIORITY_HIGH                      0x1
10584e1bc9a0SAchim Leubner 
10594e1bc9a0SAchim Leubner /****************************************************************************
10604e1bc9a0SAchim Leubner ** Phy properties related macros
10614e1bc9a0SAchim Leubner ****************************************************************************/
10624e1bc9a0SAchim Leubner /* link rate */
10634e1bc9a0SAchim Leubner #define AGSA_PHY_MAX_LINK_RATE_MASK                 0x0000000F /* bits 0-3 */
10644e1bc9a0SAchim Leubner #define AGSA_PHY_MAX_LINK_RATE_1_5G                 0x00000001 /* 0001b */
10654e1bc9a0SAchim Leubner #define AGSA_PHY_MAX_LINK_RATE_3_0G                 0x00000002 /* 0010b */
10664e1bc9a0SAchim Leubner #define AGSA_PHY_MAX_LINK_RATE_6_0G                 0x00000004 /* 0100b */
10674e1bc9a0SAchim Leubner #define AGSA_PHY_MAX_LINK_RATE_12_0G                0x00000008 /* 1000b */
10684e1bc9a0SAchim Leubner 
10694e1bc9a0SAchim Leubner /* SAS/SATA mode */
10704e1bc9a0SAchim Leubner #define AGSA_PHY_MODE_MASK                          0x00000030 /* bits 4-5 */
10714e1bc9a0SAchim Leubner #define AGSA_PHY_MODE_SAS                           0x00000010 /* 01b */
10724e1bc9a0SAchim Leubner #define AGSA_PHY_MODE_SATA                          0x00000020 /* 10b */
10734e1bc9a0SAchim Leubner 
10744e1bc9a0SAchim Leubner /* control spin-up hold */
10754e1bc9a0SAchim Leubner #define AGSA_PHY_SPIN_UP_HOLD_MASK                  0x00000040 /* bit6 */
10764e1bc9a0SAchim Leubner #define AGSA_PHY_SPIN_UP_HOLD_ON                    0x00000040 /* 1b */
10774e1bc9a0SAchim Leubner #define AGSA_PHY_SPIN_UP_HOLD_OFF                   0x00000000 /* 0b */
10784e1bc9a0SAchim Leubner 
10794e1bc9a0SAchim Leubner /****************************************************************************
10804e1bc9a0SAchim Leubner ** Device Info related macros
10814e1bc9a0SAchim Leubner ****************************************************************************/
10824e1bc9a0SAchim Leubner /* S (SAS/SATA) */
10834e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_SASSATA_MASK                  0x00000010 /* bit 4 */
10844e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_SASSATA_SAS                   0x00000010 /* 1b */
10854e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_SASSATA_SATA                  0x00000000 /* 0b */
10864e1bc9a0SAchim Leubner 
10874e1bc9a0SAchim Leubner /* Rate (link-rate) */
10884e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_RATE_MASK                     0x0000000F /* bits 0-3 */
10894e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_RATE_1_5G                     0x00000008 /* 8h */
10904e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_RATE_3_0G                     0x00000009 /* 9h */
10914e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_RATE_6_0G                     0x0000000A /* Ah */
10924e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_RATE_12_0G                    0x0000000B /* Bh */
10934e1bc9a0SAchim Leubner 
10944e1bc9a0SAchim Leubner /* devType */
10954e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_DEV_TYPE_MASK                 0x000000E0 /* bits 5-7 */
10964e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_DEV_TYPE_END_DEVICE           0x00000020 /* 001b */
10974e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_DEV_TYPE_EDGE_EXP_DEVICE      0x00000040 /* 010b */
10984e1bc9a0SAchim Leubner #define AGSA_DEV_INFO_DEV_TYPE_FANOUT_EXP_DEVICE    0x00000060 /* 011b */
10994e1bc9a0SAchim Leubner 
11004e1bc9a0SAchim Leubner /*****************************************************************************
11014e1bc9a0SAchim Leubner ** SAS TM Function definitions see SAS spec p308 Table 105 (Revision 7)
11024e1bc9a0SAchim Leubner *****************************************************************************/
11034e1bc9a0SAchim Leubner #define AGSA_ABORT_TASK                             0x01
11044e1bc9a0SAchim Leubner #define AGSA_ABORT_TASK_SET                         0x02
11054e1bc9a0SAchim Leubner #define AGSA_CLEAR_TASK_SET                         0x04
11064e1bc9a0SAchim Leubner #define AGSA_LOGICAL_UNIT_RESET                     0x08
11074e1bc9a0SAchim Leubner #define AGSA_IT_NEXUS_RESET                         0x10
11084e1bc9a0SAchim Leubner #define AGSA_CLEAR_ACA                              0x40
11094e1bc9a0SAchim Leubner #define AGSA_QUERY_TASK                             0x80
11104e1bc9a0SAchim Leubner #define AGSA_QUERY_TASK_SET                         0x81
11114e1bc9a0SAchim Leubner #define AGSA_QUERY_UNIT_ATTENTION                   0x82
11124e1bc9a0SAchim Leubner 
11134e1bc9a0SAchim Leubner /*****************************************************************************
11144e1bc9a0SAchim Leubner ** SAS TM Function Response Code see SAS spec p312 Table 111 (Revision 7)
11154e1bc9a0SAchim Leubner *****************************************************************************/
11164e1bc9a0SAchim Leubner #define AGSA_TASK_MANAGEMENT_FUNCTION_COMPLETE      0x0
11174e1bc9a0SAchim Leubner #define AGSA_INVALID_FRAME                          0x2
11184e1bc9a0SAchim Leubner #define AGSA_TASK_MANAGEMENT_FUNCTION_NOT_SUPPORTED 0x4
11194e1bc9a0SAchim Leubner #define AGSA_TASK_MANAGEMENT_FUNCTION_FAILED        0x5
11204e1bc9a0SAchim Leubner #define AGSA_TASK_MANAGEMENT_FUNCTION_SUCCEEDED     0x8
11214e1bc9a0SAchim Leubner #define AGSA_INCORRECT_LOGICAL_UNIT_NUMBER          0x9
11224e1bc9a0SAchim Leubner /* SAS spec 9.2.2.5.3 p356 Table 128 (Revision 9e) */
11234e1bc9a0SAchim Leubner #define AGSA_OVERLAPPED_TAG_ATTEMPTED               0xA
11244e1bc9a0SAchim Leubner 
11254e1bc9a0SAchim Leubner #define AGSA_SATA_BSY_OVERRIDE                      0x00080000
11264e1bc9a0SAchim Leubner #define AGSA_SATA_CLOSE_CLEAR_AFFILIATION           0x00400000
11274e1bc9a0SAchim Leubner 
11284e1bc9a0SAchim Leubner #define AGSA_MAX_SMPPAYLOAD_VIA_SFO                 40
11294e1bc9a0SAchim Leubner #define AGSA_MAX_SSPPAYLOAD_VIA_SFO                 36
11304e1bc9a0SAchim Leubner 
11314e1bc9a0SAchim Leubner /* SATA Initiator Request option field defintion */
11324e1bc9a0SAchim Leubner #define AGSA_RETURN_D2H_FIS_GOOD_COMPLETION         0x000001
11334e1bc9a0SAchim Leubner #define AGSA_SATA_ENABLE_ENCRYPTION                 0x000004
11344e1bc9a0SAchim Leubner #define AGSA_SATA_ENABLE_DIF                        0x000008
11354e1bc9a0SAchim Leubner #define AGSA_SATA_SKIP_QWORD                        0xFFFF00
11364e1bc9a0SAchim Leubner 
11374e1bc9a0SAchim Leubner /* SAS Initiator Request flag definitions */
11384e1bc9a0SAchim Leubner /* Bits 0,1 use TLR_MASK */
11394e1bc9a0SAchim Leubner 
11404e1bc9a0SAchim Leubner #define AGSA_SAS_ENABLE_ENCRYPTION                  0x0004
11414e1bc9a0SAchim Leubner #define AGSA_SAS_ENABLE_DIF                         0x0008
11424e1bc9a0SAchim Leubner 
11434e1bc9a0SAchim Leubner #ifdef SAFLAG_USE_DIF_ENC_IOMB
11444e1bc9a0SAchim Leubner #define AGSA_SAS_USE_DIF_ENC_OPSTART                0x0010
11454e1bc9a0SAchim Leubner #endif /* SAFLAG_USE_DIF_ENC_IOMB */
11464e1bc9a0SAchim Leubner 
11474e1bc9a0SAchim Leubner #define AGSA_SAS_ENABLE_SKIP_MASK                   0x0010
11484e1bc9a0SAchim Leubner #define AGSA_SAS_SKIP_MASK_OFFSET                   0xFFE0
11494e1bc9a0SAchim Leubner 
11504e1bc9a0SAchim Leubner /****************************************************************************
11514e1bc9a0SAchim Leubner ** SMP Phy control Phy Operation field
11524e1bc9a0SAchim Leubner ****************************************************************************/
11534e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_LINK_RESET_OP              0x1
11544e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_HARD_RESET_OP              0x2
11554e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_DISABLE                    0x3
11564e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_CLEAR_ERROR_LOG_OP         0x5
11574e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_CLEAR_AFFILIATION          0x6
11584e1bc9a0SAchim Leubner #define AGSA_PHY_CONTROL_XMIT_SATA_PS_SIGNAL        0x7
11594e1bc9a0SAchim Leubner 
11604e1bc9a0SAchim Leubner /****************************************************************************
11614e1bc9a0SAchim Leubner ** SAS Diagnostic Operation code
11624e1bc9a0SAchim Leubner ****************************************************************************/
11634e1bc9a0SAchim Leubner #define AGSA_SAS_DIAG_START                         0x1
11644e1bc9a0SAchim Leubner #define AGSA_SAS_DIAG_END                           0x0
11654e1bc9a0SAchim Leubner 
11664e1bc9a0SAchim Leubner /****************************************************************************
11674e1bc9a0SAchim Leubner ** Port Control constants
11684e1bc9a0SAchim Leubner ****************************************************************************/
11694e1bc9a0SAchim Leubner #define AGSA_PORT_SET_SMP_PHY_WIDTH                 0x1
11704e1bc9a0SAchim Leubner #define AGSA_PORT_SET_PORT_RECOVERY_TIME            0x2
11714e1bc9a0SAchim Leubner #define AGSA_PORT_IO_ABORT                          0x3
11724e1bc9a0SAchim Leubner #define AGSA_PORT_SET_PORT_RESET_TIME               0x4
11734e1bc9a0SAchim Leubner #define AGSA_PORT_HARD_RESET                        0x5
11744e1bc9a0SAchim Leubner #define AGSA_PORT_CLEAN_UP                          0x6
11754e1bc9a0SAchim Leubner #define AGSA_STOP_PORT_RECOVERY_TIMER               0x7
11764e1bc9a0SAchim Leubner 
11774e1bc9a0SAchim Leubner /* Device State */
11784e1bc9a0SAchim Leubner #define SA_DS_OPERATIONAL                           0x1
11794e1bc9a0SAchim Leubner #define SA_DS_PORT_IN_RESET                         0x2
11804e1bc9a0SAchim Leubner #define SA_DS_IN_RECOVERY                           0x3
11814e1bc9a0SAchim Leubner #define SA_DS_IN_ERROR                              0x4
11824e1bc9a0SAchim Leubner #define SA_DS_NON_OPERATIONAL                       0x7
11834e1bc9a0SAchim Leubner 
11844e1bc9a0SAchim Leubner /************************************************************************************
11854e1bc9a0SAchim Leubner  *                                                                                  *
11864e1bc9a0SAchim Leubner  *               Constants defined for LL Layer ends                                *
11874e1bc9a0SAchim Leubner  *                                                                                  *
11884e1bc9a0SAchim Leubner  ************************************************************************************/
11894e1bc9a0SAchim Leubner 
11904e1bc9a0SAchim Leubner /************************************************************************************
11914e1bc9a0SAchim Leubner  *                                                                                  *
11924e1bc9a0SAchim Leubner  *               Constants defined for OS Layer starts                              *
11934e1bc9a0SAchim Leubner  *                                                                                  *
11944e1bc9a0SAchim Leubner  ************************************************************************************/
11954e1bc9a0SAchim Leubner /*****************************************
11964e1bc9a0SAchim Leubner  *  ossaXXX return values
11974e1bc9a0SAchim Leubner  ******************************************/
11984e1bc9a0SAchim Leubner /* common for all ossaXXX CB */
11994e1bc9a0SAchim Leubner #define OSSA_SUCCESS                                0x00   /**< flag indicates successful callback status */
12004e1bc9a0SAchim Leubner #define OSSA_FAILURE                                0x01   /**< flag indicates failed callback status */
12014e1bc9a0SAchim Leubner 
12024e1bc9a0SAchim Leubner /* ossaHwCB() */
12034e1bc9a0SAchim Leubner #define OSSA_RESET_PENDING                          0x03   /**< flag indicates reset pending callback status */
12044e1bc9a0SAchim Leubner #define OSSA_CHIP_FAILED                            0x04   /**< flag indicates chip failed callback status */
12054e1bc9a0SAchim Leubner #define OSSA_FREEZE_FAILED                          0x05   /**< flag indicates freeze failed callback status */
12064e1bc9a0SAchim Leubner 
12074e1bc9a0SAchim Leubner /* ossaLocalPhyControl() */
12084e1bc9a0SAchim Leubner #define OSSA_PHY_CONTROL_FAILURE                    0x03   /**< flag indicates phy Control operation failure */
12094e1bc9a0SAchim Leubner 
12104e1bc9a0SAchim Leubner /* ossaDeviceRegisterCB() */
12114e1bc9a0SAchim Leubner #define OSSA_FAILURE_OUT_OF_RESOURCE                0x01   /**< flag indicates failed callback status */
12124e1bc9a0SAchim Leubner #define OSSA_FAILURE_DEVICE_ALREADY_REGISTERED      0x02   /**< flag indicates failed callback status */
12134e1bc9a0SAchim Leubner #define OSSA_FAILURE_INVALID_PHY_ID                 0x03   /**< flag indicates failed callback status */
12144e1bc9a0SAchim Leubner #define OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED      0x04   /**< flag indicates failed callback status */
12154e1bc9a0SAchim Leubner #define OSSA_FAILURE_PORT_ID_OUT_OF_RANGE           0x05   /**< flag indicates failed callback status */
12164e1bc9a0SAchim Leubner #define OSSA_FAILURE_PORT_NOT_VALID_STATE           0x06   /**< flag indicates failed callback status */
12174e1bc9a0SAchim Leubner #define OSSA_FAILURE_DEVICE_TYPE_NOT_VALID          0x07   /**< flag indicates failed callback status */
12184e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_HANDLE_UNAVAILABLE          0x1020
12194e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_ALREADY_REGISTERED          0x1021
12204e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_TYPE_NOT_VALID              0x1022
12214e1bc9a0SAchim Leubner 
12224e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_DEVICE_ACCEPT_PENDING          0x1027 /**/
12234e1bc9a0SAchim Leubner 
12244e1bc9a0SAchim Leubner #define OSSA_ERR_PORT_INVALID                       0x1041
12254e1bc9a0SAchim Leubner #define OSSA_ERR_PORT_STATE_NOT_VALID               0x1042
12264e1bc9a0SAchim Leubner 
12274e1bc9a0SAchim Leubner #define OSSA_ERR_PORT_SMP_PHY_WIDTH_EXCEED          0x1045
12284e1bc9a0SAchim Leubner 
12294e1bc9a0SAchim Leubner #define OSSA_ERR_PHY_ID_INVALID                     0x1061
12304e1bc9a0SAchim Leubner #define OSSA_ERR_PHY_ID_ALREADY_REGISTERED          0x1062
12314e1bc9a0SAchim Leubner 
12324e1bc9a0SAchim Leubner 
12334e1bc9a0SAchim Leubner 
12344e1bc9a0SAchim Leubner /* ossaDeregisterDeviceCB() */
12354e1bc9a0SAchim Leubner #define OSSA_INVALID_HANDLE                         0x02   /**< flag indicates failed callback status */
12364e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_HANDLE_INVALID              0x1023 /* MPI_ERR_DEVICE_HANDLE_INVALID The device handle associated with DEVICE_ID does not exist. */
12374e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_BUSY                        0x1024 /* MPI_ERR_DEVICE_BUSY Device has outstanding I/Os. */
12384e1bc9a0SAchim Leubner 
12394e1bc9a0SAchim Leubner 
12404e1bc9a0SAchim Leubner #define OSSA_RC_ACCEPT                              0x00   /**< flag indicates the result of the callback function */
12414e1bc9a0SAchim Leubner #define OSSA_RC_REJECT                              0x01   /**< flag indicates the result of the callback function */
12424e1bc9a0SAchim Leubner 
12434e1bc9a0SAchim Leubner /* ossaSetDeviceStateCB() */
12444e1bc9a0SAchim Leubner #define OSSA_INVALID_STATE                          0x0001
12454e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_NEW_STATE_INVALID           0x1025
12464e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_STATE_CHANGE_NOT_ALLOWED    0x1026
12474e1bc9a0SAchim Leubner #define OSSA_ERR_DEVICE_STATE_INVALID               0x0049
12484e1bc9a0SAchim Leubner 
12494e1bc9a0SAchim Leubner /* status of ossaSASDiagExecuteCB() */
12504e1bc9a0SAchim Leubner #define OSSA_DIAG_SUCCESS                           0x00 /* Successful SAS diagnostic command. */
12514e1bc9a0SAchim Leubner #define OSSA_DIAG_INVALID_COMMAND                   0x01 /* Invalid SAS diagnostic command. */
12524e1bc9a0SAchim Leubner #define OSSA_REGISTER_ACCESS_TIMEOUT                0x02 /* Register access has been timed-out. This is applicable only to the SPCv controller. */
12534e1bc9a0SAchim Leubner #define OSSA_DIAG_FAIL                              0x02 /* SAS diagnostic command failed. This is applicable only to the SPC controller. */
12544e1bc9a0SAchim Leubner #define OSSA_DIAG_NOT_IN_DIAGNOSTIC_MODE            0x03 /* Attempted to execute SAS diagnostic command but PHY is not in diagnostic mode */
12554e1bc9a0SAchim Leubner #define OSSA_DIAG_INVALID_PHY                       0x04 /* Attempted to execute SAS diagnostic command on an invalid/out-of-range PHY. */
12564e1bc9a0SAchim Leubner #define OSSA_MEMORY_ALLOC_FAILURE                   0x05 /* Memory allocation failed in diagnostic. This is applicable only to the SPCv controller. */
12574e1bc9a0SAchim Leubner 
12584e1bc9a0SAchim Leubner 
12594e1bc9a0SAchim Leubner /* status of ossaSASDiagStartEndCB() */
12604e1bc9a0SAchim Leubner #define OSSA_DIAG_SE_SUCCESS                        0x00
12614e1bc9a0SAchim Leubner #define OSSA_DIAG_SE_INVALID_PHY_ID                 0x01
12624e1bc9a0SAchim Leubner #define OSSA_DIAG_PHY_NOT_DISABLED                  0x02
12634e1bc9a0SAchim Leubner #define OSSA_DIAG_OTHER_FAILURE                     0x03 /* SPC */
12644e1bc9a0SAchim Leubner #define OSSA_DIAG_OPCODE_INVALID                    0x03
12654e1bc9a0SAchim Leubner 
12664e1bc9a0SAchim Leubner /* status of ossaPortControlCB() */
12674e1bc9a0SAchim Leubner #define OSSA_PORT_CONTROL_FAILURE                   0x03
12684e1bc9a0SAchim Leubner 
12694e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_IO_RESOURCE_UNAVAILABLE   0x1004
12704e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_INVALID                   0x1041 /**/
12714e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_OP_NOT_IN_USE             0x1043 /**/
12724e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_OP_NOT_SUPPORTED          0x1044 /**/
12734e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_SMP_WIDTH_EXCEEDED        0x1045 /**/
12744e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_PORT_NOT_IN_CORRECT_STATE      0x1047 /**/
12754e1bc9a0SAchim Leubner 
12764e1bc9a0SAchim Leubner /*regDumpNum of agsaRegDumpInfo_t */
12774e1bc9a0SAchim Leubner #define GET_GSM_SM_INFO                             0x02
12784e1bc9a0SAchim Leubner #define GET_IOST_RB_INFO                            0x03
12794e1bc9a0SAchim Leubner 
12804e1bc9a0SAchim Leubner /************************************************************************************
12814e1bc9a0SAchim Leubner  *               HW Events
12824e1bc9a0SAchim Leubner  ************************************************************************************/
12834e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_RESET_START                   0x01   /**< flag indicates reset started event */
12844e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_RESET_COMPLETE                0x02   /**< flag indicates chip reset completed event */
12854e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_STOP_STATUS               0x03   /**< flag indicates phy stop event status */
12864e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_SAS_PHY_UP                    0x04   /**< flag indicates SAS link up event */
12874e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_SATA_PHY_UP                   0x05   /**< flag indicates SATA link up event */
12884e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_SATA_SPINUP_HOLD              0x06   /**< flag indicates SATA spinup hold event */
12894e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_DOWN                      0x07   /**< flag indicates link down event */
12904e1bc9a0SAchim Leubner 
12914e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_BROADCAST_CHANGE              0x09   /**< flag indicates broadcast change event */
12924e1bc9a0SAchim Leubner /* not used spcv 0x0A*/
12934e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERROR                     0x0A   /**< flag indicates link error event */
12944e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_BROADCAST_SES                 0x0B   /**< flag indicates broadcast change (SES) event */
12954e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC           0x0C
12964e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_HARD_RESET_RECEIVED           0x0D   /**< flag indicates hardware reset received event */
12974e1bc9a0SAchim Leubner /* not used spcv 0x0E*/
12984e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_MALFUNCTION                   0x0E   /**< flag indicates unrecoverable Error */
12994e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_ID_FRAME_TIMEOUT              0x0F   /**< flag indicates ID Frame Timeout event */
13004e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_BROADCAST_EXP                 0x10   /**< flag indicates broadcast (EXPANDER) event */
13014e1bc9a0SAchim Leubner /* not used spcv 0x11*/
13024e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_START_STATUS              0x11   /**< flag indicates phy start event status */
13034e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD         0x12   /**< flag indicates Link error invalid DWORD */
13044e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR       0x13   /**< flag indicates Phy error disparity */
13054e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION        0x14   /**< flag indicates Phy error code violation */
13064e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH   0x15   /**< flag indicates Link error loss of DWORD synch */
13074e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED      0x16   /**< flag indicates Link error phy reset failed */
13084e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO       0x17   /**< flag indicates Port Recovery timeout */
13094e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PORT_RECOVER                  0x18   /**< flag indicates Port Recovery */
13104e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PORT_RESET_TIMER_TMO          0x19   /**< flag indicates Port Reset Timer out */
13114e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_PORT_RESET_COMPLETE           0x20   /**< flag indicates Port Reset Complete */
13124e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT        0x21   /**< flag indicates Broadcast Asynch Event */
13134e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_IT_NEXUS_LOSS                 0x22   /**< Custom: H/W event for IT Nexus Loss */
13144e1bc9a0SAchim Leubner 
13154e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_OPEN_RETRY_BACKOFF_THR_ADJUSTED 0x25
13164e1bc9a0SAchim Leubner 
13174e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_ENCRYPTION                    0x83   /**< TSDK internal flag indicating that an encryption event occurred */
13184e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_MODE                          0x84   /**< TSDK internal flag indicating that a controller mode page operation completed */
13194e1bc9a0SAchim Leubner #define OSSA_HW_EVENT_SECURITY_MODE                 0x85   /**< TSDK internal flag indicating that saEncryptSetMode() completed */
13204e1bc9a0SAchim Leubner 
13214e1bc9a0SAchim Leubner 
13224e1bc9a0SAchim Leubner /* port state */
13234e1bc9a0SAchim Leubner #define OSSA_PORT_NOT_ESTABLISHED                   0x00   /**< flag indicates port is not established */
13244e1bc9a0SAchim Leubner #define OSSA_PORT_VALID                             0x01   /**< flag indicates port valid */
13254e1bc9a0SAchim Leubner #define OSSA_PORT_LOSTCOMM                          0x02   /**< flag indicates port lost communication */
13264e1bc9a0SAchim Leubner #define OSSA_PORT_IN_RESET                          0x04   /**< flag indicates port in reset state */
13274e1bc9a0SAchim Leubner #define OSSA_PORT_3RDPARTY_RESET                    0x07   /**< flag indicates port in 3rd party reset state */
13284e1bc9a0SAchim Leubner #define OSSA_PORT_INVALID                           0x08   /**< flag indicates port invalid */
13294e1bc9a0SAchim Leubner 
13304e1bc9a0SAchim Leubner /* status for agsaHWEventMode_t */
13314e1bc9a0SAchim Leubner #define OSSA_CTL_SUCCESS                            0x0000
13324e1bc9a0SAchim Leubner #define OSSA_CTL_INVALID_CONFIG_PAGE                0x1001
13334e1bc9a0SAchim Leubner #define OSSA_CTL_INVALID_PARAM_IN_CONFIG_PAGE       0x1002
13344e1bc9a0SAchim Leubner #define OSSA_CTL_INVALID_ENCRYPTION_SECURITY_MODE   0x1003
13354e1bc9a0SAchim Leubner #define OSSA_CTL_RESOURCE_NOT_AVAILABLE             0x1004
13364e1bc9a0SAchim Leubner #define OSSA_CTL_CONTROLLER_NOT_IDLE                0x1005
13374e1bc9a0SAchim Leubner // #define OSSA_CTL_NVM_MEMORY_ACCESS_ERR              0x100B
13384e1bc9a0SAchim Leubner #define OSSA_CTL_OPERATOR_AUTHENTICATION_FAILURE    0x100XX
13394e1bc9a0SAchim Leubner 
13404e1bc9a0SAchim Leubner 
13414e1bc9a0SAchim Leubner 
13424e1bc9a0SAchim Leubner /************************************************************************************
13434e1bc9a0SAchim Leubner  *               General Events value
13444e1bc9a0SAchim Leubner  ************************************************************************************/
13454e1bc9a0SAchim Leubner #define OSSA_INBOUND_V_BIT_NOT_SET                  0x01
13464e1bc9a0SAchim Leubner #define OSSA_INBOUND_OPC_NOT_SUPPORTED              0x02
13474e1bc9a0SAchim Leubner #define OSSA_INBOUND_IOMB_INVALID_OBID              0x03
13484e1bc9a0SAchim Leubner 
13494e1bc9a0SAchim Leubner /************************************************************************************
13504e1bc9a0SAchim Leubner  *               FW Flash Update status values
13514e1bc9a0SAchim Leubner  ************************************************************************************/
13524e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_COMPLETE_PENDING_REBOOT   0x00   /**< flag indicates fw flash update completed */
13534e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_IN_PROGRESS               0x01   /**< flag indicates fw flash update in progress */
13544e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_HDR_ERR                   0x02   /**< flag indicates fw flash header error */
13554e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_OFFSET_ERR                0x03   /**< flag indicates fw flash offset error */
13564e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_CRC_ERR                   0x04   /**< flag indicates fw flash CRC error */
13574e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_LENGTH_ERR                0x05   /**< flag indicates fw flash length error */
13584e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_HW_ERR                    0x06   /**< flag indicates fw flash HW error */
13594e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_HMAC_ERR                  0x0E   /**< flag indicates fw flash Firmware image HMAC authentication failure.*/
13604e1bc9a0SAchim Leubner 
13614e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_DNLD_NOT_SUPPORTED        0x10   /**< flag indicates fw flash down load not supported */
13624e1bc9a0SAchim Leubner #define OSSA_FLASH_UPDATE_DISABLED                  0x11   /**< flag indicates fw flash Update disabled */
13634e1bc9a0SAchim Leubner #define OSSA_FLASH_FWDNLD_DEVICE_UNSUPPORT          0x12   /**< flag indicates fw flash Update disabled */
13644e1bc9a0SAchim Leubner 
13654e1bc9a0SAchim Leubner /************************************************************************************
13664e1bc9a0SAchim Leubner *               Discovery status values
13674e1bc9a0SAchim Leubner ************************************************************************************/
13684e1bc9a0SAchim Leubner #define OSSA_DISCOVER_STARTED                       0x00   /**< flag indicates discover started */
13694e1bc9a0SAchim Leubner #define OSSA_DISCOVER_FOUND_DEVICE                  0x01   /**< flag indicates discovery found a new device */
13704e1bc9a0SAchim Leubner #define OSSA_DISCOVER_REMOVED_DEVICE                0x02   /**< flag indicates discovery found a device removed */
13714e1bc9a0SAchim Leubner #define OSSA_DISCOVER_COMPLETE                      0x03   /**< flag indicates discover completed */
13724e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT                         0x04   /**< flag indicates discover error12 */
13734e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_1                 0x05   /**< flag indicates discover error1 */
13744e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_2                 0x06   /**< flag indicates discover error2 */
13754e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_3                 0x07   /**< flag indicates discover error3 */
13764e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_4                 0x08   /**< flag indicates discover error4 */
13774e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_5                 0x09   /**< flag indicates discover error5 */
13784e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_6                 0x0A   /**< flag indicates discover error6 */
13794e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_7                 0x0B   /**< flag indicates discover error7 */
13804e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_8                 0x0C   /**< flag indicates discover error8 */
13814e1bc9a0SAchim Leubner #define OSSA_DISCOVER_ABORT_ERROR_9                 0x0D   /**< flag indicates discover error9 */
13824e1bc9a0SAchim Leubner 
13834e1bc9a0SAchim Leubner /***********************************************************************************
13844e1bc9a0SAchim Leubner  *                        Log Debug Levels
13854e1bc9a0SAchim Leubner  ***********************************************************************************/
13864e1bc9a0SAchim Leubner #define OSSA_DEBUG_LEVEL_0                          0x00   /**< debug level 0 */
13874e1bc9a0SAchim Leubner #define OSSA_DEBUG_LEVEL_1                          0x01   /**< debug level 1 */
13884e1bc9a0SAchim Leubner #define OSSA_DEBUG_LEVEL_2                          0x02   /**< debug level 2 */
13894e1bc9a0SAchim Leubner #define OSSA_DEBUG_LEVEL_3                          0x03   /**< debug level 3 */
13904e1bc9a0SAchim Leubner #define OSSA_DEBUG_LEVEL_4                          0x04   /**< debug level 4 */
13914e1bc9a0SAchim Leubner 
13924e1bc9a0SAchim Leubner #define OSSA_DEBUG_PRINT_INVALID_NUMBER             0xFFFFFFFF   /**< the number won't be printed by OS layer */
13934e1bc9a0SAchim Leubner 
13944e1bc9a0SAchim Leubner #define OSSA_FRAME_TYPE_SSP_CMD                     0x06   /**< flag indicates received frame is SSP command */
13954e1bc9a0SAchim Leubner #define OSSA_FRAME_TYPE_SSP_TASK                    0x16   /**< flag indicates received frame is SSP task management */
13964e1bc9a0SAchim Leubner 
13974e1bc9a0SAchim Leubner /* Event Source Type of saRegisterEventCallback() */
13984e1bc9a0SAchim Leubner #define OSSA_EVENT_SOURCE_DEVICE_HANDLE_ADDED       0x00
13994e1bc9a0SAchim Leubner #define OSSA_EVENT_SOURCE_DEVICE_HANDLE_REMOVED     0x01
14004e1bc9a0SAchim Leubner 
14014e1bc9a0SAchim Leubner /* Status of Get Device Info CB */
14024e1bc9a0SAchim Leubner #define OSSA_DEV_INFO_INVALID_HANDLE                0x01
14034e1bc9a0SAchim Leubner #define OSSA_DEV_INFO_NO_EXTENDED_INFO              0x02
14044e1bc9a0SAchim Leubner #define OSSA_DEV_INFO_SAS_EXTENDED_INFO             0x03
14054e1bc9a0SAchim Leubner #define OSSA_DEV_INFO_SATA_EXTENDED_INFO            0x04
14064e1bc9a0SAchim Leubner 
14074e1bc9a0SAchim Leubner /* Diagnostic Command Type */
14084e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_OPRN_PERFORM             0x00
14094e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_OPRN_STOP                0x01
14104e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_THRESHOLD_SPECIFY        0x02
14114e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_RECEIVE_ENABLE           0x03
14124e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_REPORT_GET               0x04
14134e1bc9a0SAchim Leubner #define AGSA_CMD_TYPE_DIAG_ERR_CNT_RESET            0x05
14144e1bc9a0SAchim Leubner 
14154e1bc9a0SAchim Leubner /* Command Description for CMD_TYPE DIAG_OPRN_PERFORM, DIAG_OPRN_STOP, THRESHOLD_SPECIFY */
14164e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_PRBS                          0x00
14174e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CJTPAT                        0x01
14184e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_USR_PATTERNS                  0x02
14194e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_PRBS_ERR_INSERT               0x08
14204e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_PRBS_INVERT                   0x09
14214e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CJTPAT_INVERT                 0x0A
14224e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CODE_VIOL_INSERT              0x0B
14234e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_DISP_ERR_INSERT               0x0C
14244e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_SSPA_PERF_EVENT_1             0x0E
14254e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_LINE_SIDE_ANA_LPBK            0x10
14264e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_LINE_SIDE_DIG_LPBK            0x11
14274e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_SYS_SIDE_ANA_LPBK             0x12
14284e1bc9a0SAchim Leubner 
14294e1bc9a0SAchim Leubner /* Command Description for CMD_TYPE DIAG_REPORT_GET and ERR_CNT_RESET */
14304e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_PRBS_ERR_CNT                  0x00
14314e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CODE_VIOL_ERR_CNT             0x01
14324e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_DISP_ERR_CNT                  0x02
14334e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_LOST_DWD_SYNC_CNT             0x05
14344e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_INVALID_DWD_CNT               0x06
14354e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CODE_VIOL_ERR_CNT_THHD        0x09
14364e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_DISP_ERR_CNT_THHD             0x0A
14374e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_SSPA_PERF_CNT                 0x0B
14384e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_PHY_RST_CNT                   0x0C
14394e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_SSPA_PERF_1_THRESHOLD         0x0E
14404e1bc9a0SAchim Leubner 
14414e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_CODE_VIOL_ERR_THHD            0x19
14424e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_DISP_ERR_THHD                 0x1A
14434e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_RX_LINK_BANDWIDTH             0x1B
14444e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_TX_LINK_BANDWIDTH             0x1C
14454e1bc9a0SAchim Leubner #define AGSA_CMD_DESC_ALL                           0x1F
14464e1bc9a0SAchim Leubner 
14474e1bc9a0SAchim Leubner /* NVMDevice type */
14484e1bc9a0SAchim Leubner #define AGSA_NVMD_TWI_DEVICES                       0x00
14494e1bc9a0SAchim Leubner #define AGSA_NVMD_CONFIG_SEEPROM                    0x01
14504e1bc9a0SAchim Leubner #define AGSA_NVMD_VPD_FLASH                         0x04
14514e1bc9a0SAchim Leubner #define AGSA_NVMD_AAP1_REG_FLASH                    0x05
14524e1bc9a0SAchim Leubner #define AGSA_NVMD_IOP_REG_FLASH                     0x06
14534e1bc9a0SAchim Leubner #define AGSA_NVMD_EXPANSION_ROM                     0x07
14544e1bc9a0SAchim Leubner #define AGSA_NVMD_REG_FLASH                         0x05
14554e1bc9a0SAchim Leubner 
14564e1bc9a0SAchim Leubner 
14574e1bc9a0SAchim Leubner /* GET/SET NVMD Data Response errors */
14584e1bc9a0SAchim Leubner #define OSSA_NVMD_SUCCESS                           0x0000
14594e1bc9a0SAchim Leubner #define OSSA_NVMD_MODE_ERROR                        0x0001
14604e1bc9a0SAchim Leubner #define OSSA_NVMD_LENGTH_ERROR                      0x0002
14614e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_ADDRESS_SIZE_ERROR            0x0005
14624e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_NACK_ERROR                    0x2001
14634e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_LOST_ARB_ERROR                0x2002
14644e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_TIMEOUT_ERROR                 0x2021
14654e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_BUS_NACK_ERROR                0x2081
14664e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_ARB_FAILED_ERROR              0x2082
14674e1bc9a0SAchim Leubner #define OSSA_NVMD_TWI_BUS_TIMEOUT_ERROR             0x20FF
14684e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_PARTITION_NUM_ERROR         0x9001
14694e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_LENGTH_TOOBIG_ERROR         0x9002
14704e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_PROGRAM_ERROR               0x9003
14714e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_DEVICEID_ERROR              0x9004
14724e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_VENDORID_ERROR              0x9005
14734e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_ERASE_TIMEOUT_ERROR         0x9006
14744e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_ERASE_ERROR                 0x9007
14754e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_BUSY_ERROR                  0x9008
14764e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_NOT_SUPPORT_DEVICE_ERROR    0x9009
14774e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_CFI_INF_ERROR               0x900A
14784e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_MORE_ERASE_BLOCK_ERROR      0x900B
14794e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_READ_ONLY_ERROR             0x900C
14804e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_MAP_TYPE_ERROR              0x900D
14814e1bc9a0SAchim Leubner #define OSSA_NVMD_FLASH_MAP_DISABLE_ERROR           0x900E
14824e1bc9a0SAchim Leubner 
14834e1bc9a0SAchim Leubner /************************************************************
14844e1bc9a0SAchim Leubner * ossaHwCB Encryption encryptOperation of agsaHWEventEncrypt_t
14854e1bc9a0SAchim Leubner ************************************************************/
14864e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_KEK_UPDATE                      0x0000
14874e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE            0x0001
14884e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_KEK_INVALIDTE                   0x0002
14894e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_DEK_UPDATE                      0x0003
14904e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_DEK_INVALIDTE                   0x0004
14914e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT             0x0005
14924e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_TEST_EXECUTE                    0x0006
14934e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_SET_OPERATOR                    0x0007
14944e1bc9a0SAchim Leubner #define OSSA_HW_ENCRYPT_GET_OPERATOR                    0x0008
14954e1bc9a0SAchim Leubner 
14964e1bc9a0SAchim Leubner 
14974e1bc9a0SAchim Leubner /************************************************************
14984e1bc9a0SAchim Leubner * ossaHwCB Encryption status of agsaHWEventEncrypt_t
14994e1bc9a0SAchim Leubner ************************************************************/
15004e1bc9a0SAchim Leubner /* KEK and DEK managment status from PM */
15014e1bc9a0SAchim Leubner #define OSSA_INVALID_ENCRYPTION_SECURITY_MODE           0x1003
15024e1bc9a0SAchim Leubner #define OSSA_KEK_MGMT_SUBOP_NOT_SUPPORTED_              0x2000     /*not in PM 101222*/
15034e1bc9a0SAchim Leubner #define OSSA_DEK_MGMT_SUBOP_NOT_SUPPORTED               0x2000
15044e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_ILLEGAL_DEK_PARAM              0x2001
15054e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_DEK_MANAGEMENT_DEK_UNWRAP_FAIL     0x2002
15064e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_ILLEGAL_KEK_PARAM              0x2021
15074e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_KEK_MANAGEMENT_KEK_UNWRAP_FAIL     0x2022
15084e1bc9a0SAchim Leubner #define OSSA_MPI_ERR_KEK_MANAGEMENT_NVRAM_OPERATION_FAIL 0x2023
15094e1bc9a0SAchim Leubner 
15104e1bc9a0SAchim Leubner /*encrypt operator management response status */
15114e1bc9a0SAchim Leubner #define OSSA_OPR_MGMT_OP_NOT_SUPPORTED                  0x2060
15124e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_OPR_PARAM_ILLEGAL              0x2061
15134e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_OPR_ID_NOT_FOUND               0x2062
15144e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_OPR_ROLE_NOT_MATCH             0x2063
15154e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_OPR_MAX_NUM_EXCEEDED           0x2064
15164e1bc9a0SAchim Leubner 
15174e1bc9a0SAchim Leubner /*encrypt saSetOperator() response status */
15184e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_ERR_CONTROLLER_NOT_IDLE            0x1005
15194e1bc9a0SAchim Leubner #define OSSA_MPI_ENC_NVM_MEM_ACCESS_ERR                 0x100B
15204e1bc9a0SAchim Leubner 
15214e1bc9a0SAchim Leubner /* agsaEncryptSMX | agsaEncryptCipherMode == cipherMode for saEncryptSetMode()*/
15224e1bc9a0SAchim Leubner /* Make sure all definitions are unique bits */
15234e1bc9a0SAchim Leubner #define agsaEncryptSMF                            0x00000000
15244e1bc9a0SAchim Leubner #define agsaEncryptSMA                            0x00000100
15254e1bc9a0SAchim Leubner #define agsaEncryptSMB                            0x00000200
15264e1bc9a0SAchim Leubner #define agsaEncryptReturnSMF                    (1 << 12)
15274e1bc9a0SAchim Leubner #define agsaEncryptAuthorize                    (1 << 13)
15284e1bc9a0SAchim Leubner 
15294e1bc9a0SAchim Leubner /*
15304e1bc9a0SAchim Leubner Bits 16-23: Allowable Cipher Mode(ACM)
15314e1bc9a0SAchim Leubner Bit 16: Enable AES ECB. If set to 1, AES ECB is enable. If set to 0, AES ECB is disabled.
15324e1bc9a0SAchim Leubner Bit 22: Enable AES XTS. If set to 1, AES XTS is enable. If set to 0, AES XTS is disabled.
15334e1bc9a0SAchim Leubner */
15344e1bc9a0SAchim Leubner #define agsaEncryptAcmMask                        0x00ff0000
15354e1bc9a0SAchim Leubner #define agsaEncryptEnableAES_ECB                (1 << 16)
15364e1bc9a0SAchim Leubner #define agsaEncryptEnableAES_XTS                (1 << 22)
15374e1bc9a0SAchim Leubner 
15384e1bc9a0SAchim Leubner 
15394e1bc9a0SAchim Leubner 
15404e1bc9a0SAchim Leubner #define agsaEncryptCipherModeECB                  0x00000001
15414e1bc9a0SAchim Leubner #define agsaEncryptCipherModeXTS                  0x00000002
15424e1bc9a0SAchim Leubner 
15434e1bc9a0SAchim Leubner 
15444e1bc9a0SAchim Leubner 
15454e1bc9a0SAchim Leubner #define agsaEncryptStatusNoNVRAM                  0x00000001
15464e1bc9a0SAchim Leubner #define agsaEncryptStatusNVRAMErr                 0x00000002
15474e1bc9a0SAchim Leubner 
15484e1bc9a0SAchim Leubner /*
15494e1bc9a0SAchim Leubner 
15504e1bc9a0SAchim Leubner Bin    Hex  Sector      Total
15514e1bc9a0SAchim Leubner 00000 :0x0  512B        512
15524e1bc9a0SAchim Leubner 11000 :0x1  520B        520
15534e1bc9a0SAchim Leubner 00010 :0x2  4K          4096
15544e1bc9a0SAchim Leubner 00011 :0x3  4K+64B      4160
15554e1bc9a0SAchim Leubner 00100 :0x4  4K+128B     4224
15564e1bc9a0SAchim Leubner 
15574e1bc9a0SAchim Leubner 11000 :0x18 512+8B      520
15584e1bc9a0SAchim Leubner 11001 :0x19 520+8B      528
15594e1bc9a0SAchim Leubner 11010 :0x1A 4K+8B       4104
15604e1bc9a0SAchim Leubner 11011 :0x1B 4K+64B+8B   4168
15614e1bc9a0SAchim Leubner 11100 :0x1C 4K+128B+8B  4232
15624e1bc9a0SAchim Leubner 
15634e1bc9a0SAchim Leubner */
15644e1bc9a0SAchim Leubner 
15654e1bc9a0SAchim Leubner #define agsaEncryptSectorSize512                        0
15664e1bc9a0SAchim Leubner /*  define agsaEncryptSectorSize520                     1 Not supported */
15674e1bc9a0SAchim Leubner #define agsaEncryptSectorSize4096                       2
15684e1bc9a0SAchim Leubner #define agsaEncryptSectorSize4160                       3
15694e1bc9a0SAchim Leubner #define agsaEncryptSectorSize4224                       4
15704e1bc9a0SAchim Leubner 
15714e1bc9a0SAchim Leubner #define agsaEncryptDIFSectorSize520                     (agsaEncryptSectorSize512  | 0x18)
15724e1bc9a0SAchim Leubner #define agsaEncryptDIFSectorSize528                     ( 0x19)
15734e1bc9a0SAchim Leubner #define agsaEncryptDIFSectorSize4104                    (agsaEncryptSectorSize4096 | 0x18)
15744e1bc9a0SAchim Leubner #define agsaEncryptDIFSectorSize4168                    (agsaEncryptSectorSize4160 | 0x18)
15754e1bc9a0SAchim Leubner #define agsaEncryptDIFSectorSize4232                    (agsaEncryptSectorSize4224 | 0x18)
15764e1bc9a0SAchim Leubner 
15774e1bc9a0SAchim Leubner 
15784e1bc9a0SAchim Leubner #define AGSA_ENCRYPT_STORE_NVRAM                         1
15794e1bc9a0SAchim Leubner 
15804e1bc9a0SAchim Leubner /************************************************************
15814e1bc9a0SAchim Leubner * ossaHwCB Mode page event definitions
15824e1bc9a0SAchim Leubner ************************************************************/
15834e1bc9a0SAchim Leubner #define agsaModePageGet                                    1
15844e1bc9a0SAchim Leubner #define agsaModePageSet                                    2
15854e1bc9a0SAchim Leubner 
15864e1bc9a0SAchim Leubner /************************************************************
15874e1bc9a0SAchim Leubner * saSgpio() SGPIO Function and Register type
15884e1bc9a0SAchim Leubner ************************************************************/
15894e1bc9a0SAchim Leubner #define AGSA_READ_SGPIO_REGISTER                         0x02
15904e1bc9a0SAchim Leubner #define AGSA_WRITE_SGPIO_REGISTER                        0x82
15914e1bc9a0SAchim Leubner 
15924e1bc9a0SAchim Leubner #define AGSA_SGPIO_CONFIG_REG                            0x0
15934e1bc9a0SAchim Leubner #define AGSA_SGPIO_DRIVE_BY_DRIVE_RECEIVE_REG            0x1
15944e1bc9a0SAchim Leubner #define AGSA_SGPIO_GENERAL_PURPOSE_RECEIVE_REG           0x2
15954e1bc9a0SAchim Leubner #define AGSA_SGPIO_DRIVE_BY_DRIVE_TRANSMIT_REG           0x3
15964e1bc9a0SAchim Leubner #define AGSA_SGPIO_GENERAL_PURPOSE_TRANSMIT_REG          0x4
15974e1bc9a0SAchim Leubner 
15984e1bc9a0SAchim Leubner /************************************************************
15994e1bc9a0SAchim Leubner * ossaSGpioCB() Function result
16004e1bc9a0SAchim Leubner ************************************************************/
16014e1bc9a0SAchim Leubner #define OSSA_SGPIO_COMMAND_SUCCESS                          0x00
16024e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FRAME_TYPE               0x01
16034e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_TYPE                 0x02
16044e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_INDEX                0x03
16054e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_COUNT                0x04
16064e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FRAME_REG_TYPE           0x05
16074e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FUNCTION                 0x06
16084e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FRAME_TYPE_REG_INDEX     0x19
16094e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FRAME_TYPE_REG_CNT       0x81
16104e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_TYPE_REG_INDEX       0x1A
16114e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_TYPE_REG_COUNT       0x82
16124e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_REG_INDEX_REG_COUNT      0x83
16134e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_FRAME_REG_TYPE_REG_INDEX 0x1D
16144e1bc9a0SAchim Leubner #define OSSA_SGPIO_CMD_ERROR_WRONG_ALL_HEADER_PARAMS        0x9D
16154e1bc9a0SAchim Leubner 
16164e1bc9a0SAchim Leubner #define OSSA_SGPIO_MAX_READ_DATA_COUNT                      0x0D
16174e1bc9a0SAchim Leubner #define OSSA_SGPIO_MAX_WRITE_DATA_COUNT                     0x0C
16184e1bc9a0SAchim Leubner 
16194e1bc9a0SAchim Leubner /************************************************************
16204e1bc9a0SAchim Leubner * ossaGetDFEDataCB() status
16214e1bc9a0SAchim Leubner ************************************************************/
16224e1bc9a0SAchim Leubner #define OSSA_DFE_MPI_IO_SUCCESS                         0x0000
16234e1bc9a0SAchim Leubner #define OSSA_DFE_DATA_OVERFLOW                          0x0002
16244e1bc9a0SAchim Leubner #define OSSA_DFE_MPI_ERR_RESOURCE_UNAVAILABLE           0x1004
16254e1bc9a0SAchim Leubner #define OSSA_DFE_CHANNEL_DOWN                           0x100E
16264e1bc9a0SAchim Leubner #define OSSA_DFE_MEASUREMENT_IN_PROGRESS                0x100F
16274e1bc9a0SAchim Leubner #define OSSA_DFE_CHANNEL_INVALID                        0x1010
16284e1bc9a0SAchim Leubner #define OSSA_DFE_DMA_FAILURE                            0x1011
16294e1bc9a0SAchim Leubner 
16304e1bc9a0SAchim Leubner /************************************************************************************
16314e1bc9a0SAchim Leubner  *                                                                                  *
16324e1bc9a0SAchim Leubner  *               Constants defined for OS Layer ends                                *
16334e1bc9a0SAchim Leubner  *                                                                                  *
16344e1bc9a0SAchim Leubner  ************************************************************************************/
16354e1bc9a0SAchim Leubner 
16364e1bc9a0SAchim Leubner /************************************************************************************
16374e1bc9a0SAchim Leubner  *                                                                                  *
16384e1bc9a0SAchim Leubner  *               Data Structures Defined for LL API start                           *
16394e1bc9a0SAchim Leubner  *                                                                                  *
16404e1bc9a0SAchim Leubner  ************************************************************************************/
16414e1bc9a0SAchim Leubner /** \brief data structure stores OS specific and LL specific context
16424e1bc9a0SAchim Leubner  *
16434e1bc9a0SAchim Leubner  * The agsaContext_t data structure contains two generic pointers,
16444e1bc9a0SAchim Leubner  * also known as handles, which are used to store OS Layer-specific and
16454e1bc9a0SAchim Leubner  * LL Layer-specific contexts. Only the handle specific to a layer can
16464e1bc9a0SAchim Leubner  * be modified by the layer. The other layer's handle must be returned
16474e1bc9a0SAchim Leubner  * unmodified when communicating between the layers.
16484e1bc9a0SAchim Leubner 
16494e1bc9a0SAchim Leubner  * A layer's handle is typically typecast to an instance of a layer-specific
16504e1bc9a0SAchim Leubner  * data structure. The layer can use its handle to point to any data type
16514e1bc9a0SAchim Leubner  * that is to be associated with a function call. A handle provides a way
16524e1bc9a0SAchim Leubner  * to uniquely identify responses when multiple calls to the same function
16534e1bc9a0SAchim Leubner  * are necessary.
16544e1bc9a0SAchim Leubner  *
16554e1bc9a0SAchim Leubner  */
16564e1bc9a0SAchim Leubner typedef struct agsaContext_s
16574e1bc9a0SAchim Leubner {
16584e1bc9a0SAchim Leubner   void  *osData; /**< Pointer-sized value used internally by the OS Layer */
16594e1bc9a0SAchim Leubner   void  *sdkData; /**< Pointer-sized value used internally by the LL Layer */
16604e1bc9a0SAchim Leubner } agsaContext_t;
16614e1bc9a0SAchim Leubner 
166217db4b52SGordon Bergling /** \brief hold points to global data structures used by the LL and OS Layers
16634e1bc9a0SAchim Leubner  *
16644e1bc9a0SAchim Leubner  * The agsaRoot_t data structure is used to hold pointer-sized values for
16654e1bc9a0SAchim Leubner  * internal use by the LL and OS Layers. It is intended that the
16664e1bc9a0SAchim Leubner  * sdkData element of the agsaRoot_t data structure be used to
16674e1bc9a0SAchim Leubner  * identify an instance of the hardware context. The sdkData
16684e1bc9a0SAchim Leubner  * element is set by the LL Layer in the saHwInitialize()
16694e1bc9a0SAchim Leubner  * function and returned to the OS Layer in the agsaRoot_t data
16704e1bc9a0SAchim Leubner  * structure
16714e1bc9a0SAchim Leubner  */
16724e1bc9a0SAchim Leubner typedef agsaContext_t agsaRoot_t;
16734e1bc9a0SAchim Leubner 
16744e1bc9a0SAchim Leubner /** \brief holds the pointers to the device data structure used by the LL and OS Layers
16754e1bc9a0SAchim Leubner  *
16764e1bc9a0SAchim Leubner  * The agsaDevHandle_t data structure is the device instance handle.
16774e1bc9a0SAchim Leubner  * It holds pointer-sized values used internally by each of the LL and
16784e1bc9a0SAchim Leubner  * OS Layers. It is intended that the agsaDevHandle_t data
16794e1bc9a0SAchim Leubner  * structure be used to identify a specific device instance. A
16804e1bc9a0SAchim Leubner  * device instance is uniquely identified by its device handle.
16814e1bc9a0SAchim Leubner  */
16824e1bc9a0SAchim Leubner typedef agsaContext_t agsaDevHandle_t;
16834e1bc9a0SAchim Leubner 
16844e1bc9a0SAchim Leubner /** \brief holds the pointers to the port data structure used by the LL and
16854e1bc9a0SAchim Leubner  *  OS Layers
16864e1bc9a0SAchim Leubner  *
16874e1bc9a0SAchim Leubner  * The agsaPortContext_t data structure is used to describe an instance of
16884e1bc9a0SAchim Leubner  * SAS port or SATA port. It holds pointer-sized values used
16894e1bc9a0SAchim Leubner  * internally by each of the LL and OS Layers.
16904e1bc9a0SAchim Leubner  *
16914e1bc9a0SAchim Leubner  * When connected to other SAS end-devices or expanders, each instance of
16924e1bc9a0SAchim Leubner  * agsaPortContext_t represents a SAS local narrow-port or
16934e1bc9a0SAchim Leubner  * wide-port.
16944e1bc9a0SAchim Leubner  *
16954e1bc9a0SAchim Leubner  * When connected to SATA device, each instance of agsaPortContext_t
16964e1bc9a0SAchim Leubner  * represents a local SATA port.
16974e1bc9a0SAchim Leubner  *
16984e1bc9a0SAchim Leubner  */
16994e1bc9a0SAchim Leubner typedef agsaContext_t agsaPortContext_t;
17004e1bc9a0SAchim Leubner 
17014e1bc9a0SAchim Leubner /** \brief data structure pointer to IO request structure
17024e1bc9a0SAchim Leubner  *
17034e1bc9a0SAchim Leubner  * It is intended that the agsaIORequest_t structure be used to
17044e1bc9a0SAchim Leubner  * uniquely identify each I/O Request for either target or
17054e1bc9a0SAchim Leubner  * initiator. The OS Layer is responsible for allocating and
17064e1bc9a0SAchim Leubner  * managing agsaIORequest_t structures. The LL Layer uses each
17074e1bc9a0SAchim Leubner  * structure only between calls to: saSSPStart() and
17084e1bc9a0SAchim Leubner  * ossaSSPCompleted(), saSATAStart() and ossaSATACompleted(),
17094e1bc9a0SAchim Leubner  * saSMPStart() and ossaSMPCompleted()
17104e1bc9a0SAchim Leubner  *
17114e1bc9a0SAchim Leubner  */
17124e1bc9a0SAchim Leubner typedef agsaContext_t agsaIORequest_t;
17134e1bc9a0SAchim Leubner 
17144e1bc9a0SAchim Leubner /** \brief handle to access frame
17154e1bc9a0SAchim Leubner  *
17164e1bc9a0SAchim Leubner  * This data structure is the handle to access frame
17174e1bc9a0SAchim Leubner  */
17184e1bc9a0SAchim Leubner typedef void *agsaFrameHandle_t;
17194e1bc9a0SAchim Leubner 
17204e1bc9a0SAchim Leubner /** \brief describe a SAS ReCofiguration structure in the SAS/SATA hardware
17214e1bc9a0SAchim Leubner  *
17224e1bc9a0SAchim Leubner  * Describe a SAS ReConfiguration in the SAS/SATA hardware
17234e1bc9a0SAchim Leubner  *
17244e1bc9a0SAchim Leubner  */
17254e1bc9a0SAchim Leubner typedef struct agsaSASReconfig_s {
17264e1bc9a0SAchim Leubner   bit32     flags;                 /* flag to indicate a change to the default parameter
17274e1bc9a0SAchim Leubner                                       bit31-30:reserved
17284e1bc9a0SAchim Leubner                                       bit29:   a change to the default SAS/SATA ports is requested
17294e1bc9a0SAchim Leubner                                       bit28:   the OPEN REJECT (RETRY) in command phase is requested
17304e1bc9a0SAchim Leubner                                       bit27:   the OPEN REJECT (RETRY) in data phase is requested
17314e1bc9a0SAchim Leubner                                       bit26:   REJECT will be mapped into OPEN REJECT
17324e1bc9a0SAchim Leubner                                       bit25:   delay for SATA Head-of-Line blocking detection timeout
17334e1bc9a0SAchim Leubner                                       bit24-00:reserved */
17344e1bc9a0SAchim Leubner   bit16     reserved0;             /* reserved */
17354e1bc9a0SAchim Leubner   bit8      reserved1;             /* reserved */
17364e1bc9a0SAchim Leubner   bit8      maxPorts;              /* This field is valid if bit 29 of the flags field is set to 1 */
17374e1bc9a0SAchim Leubner   bit16     openRejectRetriesCmd;  /* This field is valid if bit 28 of the flags field is set to 1 */
17384e1bc9a0SAchim Leubner   bit16     openRejectRetriesData; /* This field is valid if bit 27 of the flags field is set to 1.*/
17394e1bc9a0SAchim Leubner   bit16     reserved2;             /* reserved */
17404e1bc9a0SAchim Leubner   bit16     sataHolTmo;            /* This field is valid if bit 25 of the flags field is set to 1 */
17414e1bc9a0SAchim Leubner } agsaSASReconfig_t;
17424e1bc9a0SAchim Leubner 
17434e1bc9a0SAchim Leubner /** \brief describe a Phy Analog Setup registers for a Controller in the SAS/SATA hardware
17444e1bc9a0SAchim Leubner  *
17454e1bc9a0SAchim Leubner  * Describe a Phy Analog Setup registers for a controller in the SAS/SATA hardware
17464e1bc9a0SAchim Leubner  *
17474e1bc9a0SAchim Leubner  */
17484e1bc9a0SAchim Leubner typedef struct agsaPhyAnalogSetupRegisters_s
17494e1bc9a0SAchim Leubner {
17504e1bc9a0SAchim Leubner   bit32     spaRegister0;
17514e1bc9a0SAchim Leubner   bit32     spaRegister1;
17524e1bc9a0SAchim Leubner   bit32     spaRegister2;
17534e1bc9a0SAchim Leubner   bit32     spaRegister3;
17544e1bc9a0SAchim Leubner   bit32     spaRegister4;
17554e1bc9a0SAchim Leubner   bit32     spaRegister5;
17564e1bc9a0SAchim Leubner   bit32     spaRegister6;
17574e1bc9a0SAchim Leubner   bit32     spaRegister7;
17584e1bc9a0SAchim Leubner   bit32     spaRegister8;
17594e1bc9a0SAchim Leubner   bit32     spaRegister9;
17604e1bc9a0SAchim Leubner } agsaPhyAnalogSetupRegisters_t;
17614e1bc9a0SAchim Leubner 
17624e1bc9a0SAchim Leubner #define MAX_INDEX 10
17634e1bc9a0SAchim Leubner 
17644e1bc9a0SAchim Leubner /** \brief
17654e1bc9a0SAchim Leubner  *
17664e1bc9a0SAchim Leubner  */
17674e1bc9a0SAchim Leubner typedef struct agsaPhyAnalogSetupTable_s
17684e1bc9a0SAchim Leubner {
17694e1bc9a0SAchim Leubner   agsaPhyAnalogSetupRegisters_t     phyAnalogSetupRegisters[MAX_INDEX];
17704e1bc9a0SAchim Leubner } agsaPhyAnalogSetupTable_t;
17714e1bc9a0SAchim Leubner 
17724e1bc9a0SAchim Leubner /** \brief describe a Phy Analog Setting
17734e1bc9a0SAchim Leubner  *
17744e1bc9a0SAchim Leubner  * Describe a Phy Analog Setup registers for a controller in the SAS/SATA hardware
17754e1bc9a0SAchim Leubner  *
17764e1bc9a0SAchim Leubner  */
17774e1bc9a0SAchim Leubner typedef struct agsaPhyAnalogSettingsPage_s
17784e1bc9a0SAchim Leubner {
17794e1bc9a0SAchim Leubner   bit32   Dword0;
17804e1bc9a0SAchim Leubner   bit32   Dword1;
17814e1bc9a0SAchim Leubner   bit32   Dword2;
17824e1bc9a0SAchim Leubner   bit32   Dword3;
17834e1bc9a0SAchim Leubner   bit32   Dword4;
17844e1bc9a0SAchim Leubner   bit32   Dword5;
17854e1bc9a0SAchim Leubner   bit32   Dword6;
17864e1bc9a0SAchim Leubner   bit32   Dword7;
17874e1bc9a0SAchim Leubner   bit32   Dword8;
17884e1bc9a0SAchim Leubner   bit32   Dword9;
17894e1bc9a0SAchim Leubner } agsaPhyAnalogSettingsPage_t;
17904e1bc9a0SAchim Leubner 
17914e1bc9a0SAchim Leubner 
17924e1bc9a0SAchim Leubner /** \brief describe a Open reject retry backoff threshold page
17934e1bc9a0SAchim Leubner  *
17944e1bc9a0SAchim Leubner  * Describe a Open reject retry backoff threshold registers in the SAS/SATA hardware
17954e1bc9a0SAchim Leubner  *
17964e1bc9a0SAchim Leubner  */
17974e1bc9a0SAchim Leubner typedef struct agsaSASPhyOpenRejectRetryBackOffThresholdPage_s
17984e1bc9a0SAchim Leubner {
17994e1bc9a0SAchim Leubner   bit32   Dword0;
18004e1bc9a0SAchim Leubner   bit32   Dword1;
18014e1bc9a0SAchim Leubner   bit32   Dword2;
18024e1bc9a0SAchim Leubner   bit32   Dword3;
18034e1bc9a0SAchim Leubner } agsaSASPhyOpenRejectRetryBackOffThresholdPage_t;
18044e1bc9a0SAchim Leubner 
18054e1bc9a0SAchim Leubner /** \brief describe a Phy Rate Control
18064e1bc9a0SAchim Leubner  *  4.56  agsaPhyRateControlPage_t
18074e1bc9a0SAchim Leubner  *  Description
18084e1bc9a0SAchim Leubner  *  This profile page is used to read or set several rate control
18094e1bc9a0SAchim Leubner  *  parameters. The page code for this profile page is 0x07. This page can
18104e1bc9a0SAchim Leubner  *  be READ by issuing saGetPhyProfile(). It can be read anytime and there
18114e1bc9a0SAchim Leubner  *  is no need to quiesce the I/O to the controller.
18124e1bc9a0SAchim Leubner  *  Related parameters can be modified by issuing saSetPhyProfile() before
18134e1bc9a0SAchim Leubner  *  calling saPhyStart() to the PHY.
18144e1bc9a0SAchim Leubner  *  Note: This page is applicable only to the SPCv controller.
18154e1bc9a0SAchim Leubner  *  Usage
18164e1bc9a0SAchim Leubner  *  Initiator and target.
18174e1bc9a0SAchim Leubner  */
18184e1bc9a0SAchim Leubner typedef struct agsaPhyRateControlPage_s
18194e1bc9a0SAchim Leubner {
18204e1bc9a0SAchim Leubner   bit32 Dword0;
18214e1bc9a0SAchim Leubner   bit32 Dword1;
18224e1bc9a0SAchim Leubner   bit32 Dword2;
18234e1bc9a0SAchim Leubner } agsaPhyRateControlPage_t;
18244e1bc9a0SAchim Leubner 
18254e1bc9a0SAchim Leubner /**
18264e1bc9a0SAchim Leubner  *  Dword0 Bits 0-11: ALIGN_RATE(ALNR). Align Insertion rate is 2 in every
18274e1bc9a0SAchim Leubner  *  ALIGN_RATE+1 DWord. The default value results in the standard compliant
18284e1bc9a0SAchim Leubner  *  value of 2/256. This rate applies to out of connection, SMP and SSP
18294e1bc9a0SAchim Leubner  *  connections. The default value is 0x0ff. Other bits are reserved.
18304e1bc9a0SAchim Leubner  *  Dword1 Bits 0 -11: STP_ALIGN_RATE(STPALNR) Align Insertion rate is 2 in
18314e1bc9a0SAchim Leubner  *  every ALIGN_RATE+1 DWords. Default value results in standard compliant
18324e1bc9a0SAchim Leubner  *  value of 2/256. This rate applies to out of STP connections. The default
18334e1bc9a0SAchim Leubner  *  value is 0x0ff. Other bits are reserved.
18344e1bc9a0SAchim Leubner  *  Dword2 Bits 0-7: SSP_FRAME_RATE(SSPFRMR) The number of idle DWords
18354e1bc9a0SAchim Leubner  *  between each SSP frame. 0 means no idle cycles. The default value is
18364e1bc9a0SAchim Leubner  *  0x0. Other bits are reserved.
18374e1bc9a0SAchim Leubner **/
18384e1bc9a0SAchim Leubner 
18394e1bc9a0SAchim Leubner /** \brief describe a Register Dump information for a Controller in the SAS/SATA hardware
18404e1bc9a0SAchim Leubner  *
18414e1bc9a0SAchim Leubner  * Describe a register dump information for a controller in the SAS/SATA hardware
18424e1bc9a0SAchim Leubner  *
18434e1bc9a0SAchim Leubner  */
18444e1bc9a0SAchim Leubner typedef struct agsaRegDumpInfo_s
18454e1bc9a0SAchim Leubner {
18464e1bc9a0SAchim Leubner   bit8    regDumpSrc;
18474e1bc9a0SAchim Leubner   bit8    regDumpNum;
18484e1bc9a0SAchim Leubner   bit8    reserved[2];
18494e1bc9a0SAchim Leubner   bit32   regDumpOffset;
18504e1bc9a0SAchim Leubner   bit32   directLen;
18514e1bc9a0SAchim Leubner   void    *directData;
18524e1bc9a0SAchim Leubner   bit32   indirectAddrUpper32;
18534e1bc9a0SAchim Leubner   bit32   indirectAddrLower32;
18544e1bc9a0SAchim Leubner   bit32   indirectLen;
18554e1bc9a0SAchim Leubner } agsaRegDumpInfo_t;
18564e1bc9a0SAchim Leubner 
18574e1bc9a0SAchim Leubner /*
18584e1bc9a0SAchim Leubner 7 :  SPC GSM register at [MEMBASE-III SHIFT =  0x00_0000]
18594e1bc9a0SAchim Leubner 8 :  SPC GSM register at [MEMBASE-III SHIFT =  0x05_0000]
18604e1bc9a0SAchim Leubner 9 :  BDMA GSM register at [MEMBASE-III SHIFT =  0x01_0000]
18614e1bc9a0SAchim Leubner 10:  PCIe APP GSM register at [MEMBASE-III SHIFT =  0x01_0000]
18624e1bc9a0SAchim Leubner 11:  PCIe PHY GSM register at [MEMBASE-III SHIFT =  0x01_0000]
18634e1bc9a0SAchim Leubner 12:  PCIe CORE GSM register at [MEMBASE-III SHIFT =  0x01_0000]
18644e1bc9a0SAchim Leubner 13:  OSSP GSM register at [MEMBASE-III SHIFT =  0x02_0000]
18654e1bc9a0SAchim Leubner 14:  SSPA GSM register at [MEMBASE-III SHIFT =  0x03_0000]
18664e1bc9a0SAchim Leubner 15:  SSPA GSM register at [MEMBASE-III SHIFT =  0x04_0000]
18674e1bc9a0SAchim Leubner 16:  HSST GSM register at [MEMBASE-III SHIFT =  0x02_0000]
18684e1bc9a0SAchim Leubner 17:  LMS_DSS(A) GSM register at [MEMBASE-III SHIFT =  0x03_0000]
18694e1bc9a0SAchim Leubner 18:  SSPL_6G GSM register at [MEMBASE-III SHIFT =  0x03_0000]
18704e1bc9a0SAchim Leubner 19:  HSST(A) GSM register at [MEMBASE-III SHIFT =  0x03_0000]
18714e1bc9a0SAchim Leubner 20:  LMS_DSS(A) GSM register at [MEMBASE-III SHIFT =  0x04_0000]
18724e1bc9a0SAchim Leubner 21:  SSPL_6G GSM register at [MEMBASE-III SHIFT =  0x04_0000]
18734e1bc9a0SAchim Leubner 22:  HSST(A) GSM register at [MEMBASE-III SHIFT =  0x04_0000]
18744e1bc9a0SAchim Leubner 23:  MBIC IOP GSM register at [MEMBASE-III SHIFT =  0x06_0000]
18754e1bc9a0SAchim Leubner 24:  MBIC AAP1 GSM register at [MEMBASE-III SHIFT =  0x07_0000]
18764e1bc9a0SAchim Leubner 25:  SPBC GSM register at [MEMBASE-III SHIFT =  0x09_0000]
18774e1bc9a0SAchim Leubner 26:  GSM GSM register at [MEMBASE-III SHIFT =  0x70_0000]
18784e1bc9a0SAchim Leubner */
18794e1bc9a0SAchim Leubner 
18804e1bc9a0SAchim Leubner #define TYPE_GSM_SPACE        1
18814e1bc9a0SAchim Leubner #define TYPE_QUEUE            2
18824e1bc9a0SAchim Leubner #define TYPE_FATAL            3
18834e1bc9a0SAchim Leubner #define TYPE_NON_FATAL        4
18844e1bc9a0SAchim Leubner #define TYPE_INBOUND_QUEUE    5
18854e1bc9a0SAchim Leubner #define TYPE_OUTBOUND_QUEUE   6
18864e1bc9a0SAchim Leubner 
18874e1bc9a0SAchim Leubner 
18884e1bc9a0SAchim Leubner #define BAR_SHIFT_GSM_OFFSET  0x400000
18894e1bc9a0SAchim Leubner 
18904e1bc9a0SAchim Leubner #define ONE_MEGABYTE  0x100000
18914e1bc9a0SAchim Leubner #define SIXTYFOURKBYTE   (1024 * 64)
18924e1bc9a0SAchim Leubner 
18934e1bc9a0SAchim Leubner 
18944e1bc9a0SAchim Leubner 
18954e1bc9a0SAchim Leubner #define TYPE_INBOUND          1
18964e1bc9a0SAchim Leubner #define TYPE_OUTBOUND         2
18974e1bc9a0SAchim Leubner 
18984e1bc9a0SAchim Leubner typedef struct
18994e1bc9a0SAchim Leubner {
19004e1bc9a0SAchim Leubner   bit32  DataType;
19014e1bc9a0SAchim Leubner   union
19024e1bc9a0SAchim Leubner   {
19034e1bc9a0SAchim Leubner     struct
19044e1bc9a0SAchim Leubner     {
19054e1bc9a0SAchim Leubner       bit32  directLen;
19064e1bc9a0SAchim Leubner       bit32  directOffset;
19074e1bc9a0SAchim Leubner       bit32  readLen;
19084e1bc9a0SAchim Leubner       void  *directData;
19094e1bc9a0SAchim Leubner     }gsmBuf;
19104e1bc9a0SAchim Leubner 
19114e1bc9a0SAchim Leubner     struct
19124e1bc9a0SAchim Leubner     {
19134e1bc9a0SAchim Leubner       bit16  queueType;
19144e1bc9a0SAchim Leubner       bit16  queueIndex;
19154e1bc9a0SAchim Leubner       bit32  directLen;
19164e1bc9a0SAchim Leubner       void  *directData;
19174e1bc9a0SAchim Leubner     }queueBuf;
19184e1bc9a0SAchim Leubner 
19194e1bc9a0SAchim Leubner     struct
19204e1bc9a0SAchim Leubner     {
19214e1bc9a0SAchim Leubner       bit32  directLen;
19224e1bc9a0SAchim Leubner       bit32  directOffset;
19234e1bc9a0SAchim Leubner       bit32  readLen;
19244e1bc9a0SAchim Leubner       void  *directData;
19254e1bc9a0SAchim Leubner     }dataBuf;
19264e1bc9a0SAchim Leubner   } BufferType;
19274e1bc9a0SAchim Leubner } agsaForensicData_t;
19284e1bc9a0SAchim Leubner 
19294e1bc9a0SAchim Leubner /** \brief describe a NVMData for a Controller in the SAS/SATA hardware
19304e1bc9a0SAchim Leubner  *
19314e1bc9a0SAchim Leubner  * Describe a NVMData for a controller in the SAS/SATA hardware
19324e1bc9a0SAchim Leubner  *
19334e1bc9a0SAchim Leubner  */
19344e1bc9a0SAchim Leubner typedef struct agsaNVMDData_s
19354e1bc9a0SAchim Leubner {
19364e1bc9a0SAchim Leubner   bit32   indirectPayload      :1;
19374e1bc9a0SAchim Leubner   bit32   reserved             :7;
19384e1bc9a0SAchim Leubner   bit32   TWIDeviceAddress     :8;
19394e1bc9a0SAchim Leubner   bit32   TWIBusNumber         :4;
19404e1bc9a0SAchim Leubner   bit32   TWIDevicePageSize    :4;
19414e1bc9a0SAchim Leubner   bit32   TWIDeviceAddressSize :4;
19424e1bc9a0SAchim Leubner   bit32   NVMDevice            :4;
19434e1bc9a0SAchim Leubner   bit32   directLen            :8;
19444e1bc9a0SAchim Leubner   bit32   dataOffsetAddress    :24;
19454e1bc9a0SAchim Leubner   void   *directData;
19464e1bc9a0SAchim Leubner   bit32   indirectAddrUpper32;
19474e1bc9a0SAchim Leubner   bit32   indirectAddrLower32;
19484e1bc9a0SAchim Leubner   bit32   indirectLen;
19494e1bc9a0SAchim Leubner   bit32   signature;
19504e1bc9a0SAchim Leubner } agsaNVMDData_t;
19514e1bc9a0SAchim Leubner 
19524e1bc9a0SAchim Leubner 
19534e1bc9a0SAchim Leubner /* status of ossaPCIeDiagExecuteCB() is shared with ossaSASDiagExecuteCB() */
19544e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_SUCCESS                                          0x0000
19554e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INVALID_COMMAND                                  0x0001
19564e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INTERNAL_FAILURE                                 0x0002
19574e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INVALID_CMD_TYPE                                 0x1006
19584e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INVALID_CMD_DESC                                 0x1007
19594e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INVALID_PCIE_ADDR                                0x1008
19604e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_INVALID_BLOCK_SIZE                               0x1009
19614e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_LENGTH_NOT_BLOCK_SIZE_ALIGNED                    0x100A
19624e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_MISMATCH                        0x3000
19634e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH        0x3001
19644e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH          0x3002
19654e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_IO_XFR_ERROR_DIF_CRC_MISMATCH                    0x3003
19664e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_MPI_ERR_INVALID_LENGTH                           0x0042
19674e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_MPI_ERR_IO_RESOURCE_UNAVAILABLE                  0x1004
19684e1bc9a0SAchim Leubner #define OSSA_PCIE_DIAG_MPI_ERR_CONTROLLER_NOT_IDLE                      0x1005
19694e1bc9a0SAchim Leubner 
19704e1bc9a0SAchim Leubner 
19714e1bc9a0SAchim Leubner typedef struct agsaPCIeDiagExecute_s
19724e1bc9a0SAchim Leubner {
19734e1bc9a0SAchim Leubner   bit32 command;
19744e1bc9a0SAchim Leubner   bit32 flags;
19754e1bc9a0SAchim Leubner   bit16 initialIOSeed;
19764e1bc9a0SAchim Leubner   bit16 reserved;
19774e1bc9a0SAchim Leubner   bit32 rdAddrLower;
19784e1bc9a0SAchim Leubner   bit32 rdAddrUpper;
19794e1bc9a0SAchim Leubner   bit32 wrAddrLower;
19804e1bc9a0SAchim Leubner   bit32 wrAddrUpper;
19814e1bc9a0SAchim Leubner   bit32 len;
19824e1bc9a0SAchim Leubner   bit32 pattern;
19834e1bc9a0SAchim Leubner   bit8  udtArray[6];
19844e1bc9a0SAchim Leubner   bit8  udrtArray[6];
19854e1bc9a0SAchim Leubner } agsaPCIeDiagExecute_t;
19864e1bc9a0SAchim Leubner 
19874e1bc9a0SAchim Leubner 
19884e1bc9a0SAchim Leubner /** \brief agsaPCIeDiagResponse_t
19894e1bc9a0SAchim Leubner  *
19904e1bc9a0SAchim Leubner  *  status of ossaPCIeDiagExecuteCB()
19914e1bc9a0SAchim Leubner  *  The agsaPCIeDiagResponse_t structure is a parameter passed to
19924e1bc9a0SAchim Leubner  *   ossaPCIeDiagExecuteCB()
19934e1bc9a0SAchim Leubner  * to contain a PCIe Diagnostic command response.
19944e1bc9a0SAchim Leubner  */
19954e1bc9a0SAchim Leubner 
19964e1bc9a0SAchim Leubner typedef struct agsaPCIeDiagResponse_s {
19974e1bc9a0SAchim Leubner   bit32  ERR_BLKH;
19984e1bc9a0SAchim Leubner   bit32  ERR_BLKL;
19994e1bc9a0SAchim Leubner   bit32  DWord8;
20004e1bc9a0SAchim Leubner   bit32  DWord9;
20014e1bc9a0SAchim Leubner   bit32  DWord10;
20024e1bc9a0SAchim Leubner   bit32  DWord11;
20034e1bc9a0SAchim Leubner   bit32  DIF_ERR;
20044e1bc9a0SAchim Leubner } agsaPCIeDiagResponse_t;
20054e1bc9a0SAchim Leubner 
20064e1bc9a0SAchim Leubner 
20074e1bc9a0SAchim Leubner /** \brief describe a fatal error information for a Controller in the SAS/SATA hardware
20084e1bc9a0SAchim Leubner  *
20094e1bc9a0SAchim Leubner  * Describe a fatal error information for a controller in the SAS/SATA hardware
20104e1bc9a0SAchim Leubner  *
20114e1bc9a0SAchim Leubner  */
20124e1bc9a0SAchim Leubner typedef struct agsaFatalErrorInfo_s
20134e1bc9a0SAchim Leubner {
20144e1bc9a0SAchim Leubner   bit32   errorInfo0;
20154e1bc9a0SAchim Leubner   bit32   errorInfo1;
20164e1bc9a0SAchim Leubner   bit32   errorInfo2;
20174e1bc9a0SAchim Leubner   bit32   errorInfo3;
20184e1bc9a0SAchim Leubner   bit32   regDumpBusBaseNum0;
20194e1bc9a0SAchim Leubner   bit32   regDumpOffset0;
20204e1bc9a0SAchim Leubner   bit32   regDumpLen0;
20214e1bc9a0SAchim Leubner   bit32   regDumpBusBaseNum1;
20224e1bc9a0SAchim Leubner   bit32   regDumpOffset1;
20234e1bc9a0SAchim Leubner   bit32   regDumpLen1;
20244e1bc9a0SAchim Leubner } agsaFatalErrorInfo_t;
20254e1bc9a0SAchim Leubner 
20264e1bc9a0SAchim Leubner /** \brief describe a information for a Event in the SAS/SATA hardware
20274e1bc9a0SAchim Leubner  *
20284e1bc9a0SAchim Leubner  * Describe a general information for a Event in the SAS/SATA hardware
20294e1bc9a0SAchim Leubner  *
20304e1bc9a0SAchim Leubner  */
20314e1bc9a0SAchim Leubner typedef struct agsaEventSource_s
20324e1bc9a0SAchim Leubner {
20334e1bc9a0SAchim Leubner   agsaPortContext_t *agPortContext;
20344e1bc9a0SAchim Leubner   bit32                   event;
20354e1bc9a0SAchim Leubner   bit32                   param;
20364e1bc9a0SAchim Leubner } agsaEventSource_t;
20374e1bc9a0SAchim Leubner 
20384e1bc9a0SAchim Leubner /** \brief describe a information for a Controller in the SAS/SATA hardware
20394e1bc9a0SAchim Leubner  *
20404e1bc9a0SAchim Leubner  * Describe a general information for a controller in the SAS/SATA hardware
20414e1bc9a0SAchim Leubner  *
20424e1bc9a0SAchim Leubner  */
20434e1bc9a0SAchim Leubner typedef struct agsaControllerInfo_s
20444e1bc9a0SAchim Leubner {
20454e1bc9a0SAchim Leubner   bit32     signature;        /* coherent controller information */
20464e1bc9a0SAchim Leubner   bit32     fwInterfaceRev;   /* host and controller interface version */
20474e1bc9a0SAchim Leubner   bit32     hwRevision;       /* controller HW Revision number */
20484e1bc9a0SAchim Leubner   bit32     fwRevision;       /* controller FW Revision number */
20494e1bc9a0SAchim Leubner   bit32     ilaRevision;      /* controller ILA Revision number */
20504e1bc9a0SAchim Leubner   bit32     maxPendingIO;     /* maximum number of outstanding I/Os supported */
20514e1bc9a0SAchim Leubner   bit32     maxDevices;       /* Maximum Device Supported by controller */
20524e1bc9a0SAchim Leubner   bit32     maxSgElements;    /* maximum number of SG elements supported */
20534e1bc9a0SAchim Leubner   bit32     queueSupport;     /* maximum number of IQ and OQ supported
20544e1bc9a0SAchim Leubner                                bit31-19 reserved
20554e1bc9a0SAchim Leubner                                bit18    interrupt coalescing
20564e1bc9a0SAchim Leubner                                bit17    reserved
20574e1bc9a0SAchim Leubner                                bit16    high priority IQ supported
20584e1bc9a0SAchim Leubner                                bit15-08 maximum number of OQ
20594e1bc9a0SAchim Leubner                                bit07-00 maximum number of IQ */
20604e1bc9a0SAchim Leubner   bit8      phyCount;         /* number of phy available in the controller */
20614e1bc9a0SAchim Leubner   bit8      controllerSetting;/* Controller setting
20624e1bc9a0SAchim Leubner                                bit07-04 reserved
20634e1bc9a0SAchim Leubner                                bit03-00 HDA setting */
20644e1bc9a0SAchim Leubner   bit8      PCILinkRate;      /* PCI generation 1/2/3 2.5g/5g/8g  */
20654e1bc9a0SAchim Leubner   bit8      PCIWidth;         /* PCI number of lanes */
20664e1bc9a0SAchim Leubner   bit32     sasSpecsSupport;  /* the supported SAS spec. */
20674e1bc9a0SAchim Leubner   bit32     sdkInterfaceRev;  /* sdk interface reversion */
20684e1bc9a0SAchim Leubner   bit32     sdkRevision;      /* sdk reversion */
20694e1bc9a0SAchim Leubner } agsaControllerInfo_t;
20704e1bc9a0SAchim Leubner 
20714e1bc9a0SAchim Leubner /** \brief describe a status for a Controller in the SAS/SATA hardware
20724e1bc9a0SAchim Leubner  *
20734e1bc9a0SAchim Leubner  * Describe a general status for a controller in the SAS/SATA hardware
20744e1bc9a0SAchim Leubner  *
20754e1bc9a0SAchim Leubner  */
20764e1bc9a0SAchim Leubner typedef struct agsaControllerStatus_s
20774e1bc9a0SAchim Leubner {
20784e1bc9a0SAchim Leubner   agsaFatalErrorInfo_t fatalErrorInfo; /* fatal error information */
20794e1bc9a0SAchim Leubner   bit32     interfaceState;            /* host and controller interface state
20804e1bc9a0SAchim Leubner                                           bit02-00 state of host and controller
20814e1bc9a0SAchim Leubner                                           bit16-03 reserved
20824e1bc9a0SAchim Leubner                                           bit31-16 detail of error based on error state */
20834e1bc9a0SAchim Leubner   bit32     iqFreezeState0;            /* freeze state of 1st set of IQ */
20844e1bc9a0SAchim Leubner   bit32     iqFreezeState1;            /* freeze state of 2nd set of IQ */
20854e1bc9a0SAchim Leubner   bit32     tickCount0;                /* tick count in second for internal CPU-0 */
20864e1bc9a0SAchim Leubner   bit32     tickCount1;                /* tick count in second for internal CPU-1 */
20874e1bc9a0SAchim Leubner   bit32     tickCount2;                /* tick count in second for internal CPU-2 */
20884e1bc9a0SAchim Leubner   bit32     phyStatus[8];              /* status of phy 0 to phy 15 */
20894e1bc9a0SAchim Leubner   bit32     recoverableErrorInfo[8];   /* controller specific recoverable error information */
20904e1bc9a0SAchim Leubner   bit32     bootStatus;
20914e1bc9a0SAchim Leubner   bit16     bootComponentState[8];
20924e1bc9a0SAchim Leubner 
20934e1bc9a0SAchim Leubner } agsaControllerStatus_t;
20944e1bc9a0SAchim Leubner 
20954e1bc9a0SAchim Leubner /** \brief describe a GPIO Event Setup Infomation in the SAS/SATA hardware
20964e1bc9a0SAchim Leubner  *
20974e1bc9a0SAchim Leubner  * Describe a configuration for a GPIO Event Setup Infomation in the SAS/SATA hardware
20984e1bc9a0SAchim Leubner  *
20994e1bc9a0SAchim Leubner  */
21004e1bc9a0SAchim Leubner typedef struct agsaGpioEventSetupInfo_s
21014e1bc9a0SAchim Leubner {
21024e1bc9a0SAchim Leubner   bit32         gpioPinMask;
21034e1bc9a0SAchim Leubner   bit32         gpioEventLevel;
21044e1bc9a0SAchim Leubner   bit32         gpioEventRisingEdge;
21054e1bc9a0SAchim Leubner   bit32         gpioEventFallingEdge;
21064e1bc9a0SAchim Leubner } agsaGpioEventSetupInfo_t;
21074e1bc9a0SAchim Leubner 
21084e1bc9a0SAchim Leubner /** \brief describe a GPIO Pin Setup Infomation in the SAS/SATA hardware
21094e1bc9a0SAchim Leubner  *
21104e1bc9a0SAchim Leubner  * Describe a configuration for a GPIO Pin Setup Infomation in the SAS/SATA hardware
21114e1bc9a0SAchim Leubner  *
21124e1bc9a0SAchim Leubner  */
21134e1bc9a0SAchim Leubner typedef struct agsaGpioPinSetupInfo_t
21144e1bc9a0SAchim Leubner {
21154e1bc9a0SAchim Leubner   bit32         gpioPinMask;
21164e1bc9a0SAchim Leubner   bit32         gpioInputEnabled;
21174e1bc9a0SAchim Leubner   bit32         gpioTypePart1;
21184e1bc9a0SAchim Leubner   bit32         gpioTypePart2;
21194e1bc9a0SAchim Leubner } agsaGpioPinSetupInfo_t;
21204e1bc9a0SAchim Leubner 
21214e1bc9a0SAchim Leubner /** \brief describe a serial GPIO operation in the SAS/SATA hardware
21224e1bc9a0SAchim Leubner  *
21234e1bc9a0SAchim Leubner  * Describe a configuration for a GPIO write Setup Infomation in the SAS/SATA hardware
21244e1bc9a0SAchim Leubner  *
21254e1bc9a0SAchim Leubner  */
21264e1bc9a0SAchim Leubner typedef struct agsaGpioWriteSetupInfo_s
21274e1bc9a0SAchim Leubner {
21284e1bc9a0SAchim Leubner   bit32         gpioWritemask;
21294e1bc9a0SAchim Leubner   bit32         gpioWriteVal;
21304e1bc9a0SAchim Leubner }agsaGpioWriteSetupInfo_t;
21314e1bc9a0SAchim Leubner 
21324e1bc9a0SAchim Leubner /** \brief describe a GPIO Read Infomation in the SAS/SATA hardware
21334e1bc9a0SAchim Leubner  *
21344e1bc9a0SAchim Leubner  * Describe a configuration for a GPIO read Infomation in the SAS/SATA hardware
21354e1bc9a0SAchim Leubner  *
21364e1bc9a0SAchim Leubner  */
21374e1bc9a0SAchim Leubner typedef struct agsaGpioReadInfo_s
21384e1bc9a0SAchim Leubner {
21394e1bc9a0SAchim Leubner   bit32         gpioReadValue;
21404e1bc9a0SAchim Leubner   bit32         gpioInputEnabled; /* GPIOIE */
21414e1bc9a0SAchim Leubner   bit32         gpioEventLevelChangePart1; /* GPIEVCHANGE (pins 11-0) */
21424e1bc9a0SAchim Leubner   bit32         gpioEventLevelChangePart2; /* GPIEVCHANGE (pins 23-20) */
21434e1bc9a0SAchim Leubner   bit32         gpioEventRisingEdgePart1; /* GPIEVRISE (pins 11-0) */
21444e1bc9a0SAchim Leubner   bit32         gpioEventRisingEdgePart2; /* GPIEVRISE (pins 23-20) */
21454e1bc9a0SAchim Leubner   bit32         gpioEventFallingEdgePart1; /* GPIEVALL (pins 11-0) */
21464e1bc9a0SAchim Leubner   bit32         gpioEventFallingEdgePart2; /* GPIEVALL (pins 23-20) */
21474e1bc9a0SAchim Leubner }agsaGpioReadInfo_t;
21484e1bc9a0SAchim Leubner 
21494e1bc9a0SAchim Leubner /** \brief describe a serial GPIO request and response in the SAS/SATA hardware
21504e1bc9a0SAchim Leubner  *
21514e1bc9a0SAchim Leubner  * Describe the fields required for serial GPIO request and response in the SAS/SATA hardware
21524e1bc9a0SAchim Leubner  *
21534e1bc9a0SAchim Leubner  */
21544e1bc9a0SAchim Leubner typedef struct agsaSGpioReqResponse_s
21554e1bc9a0SAchim Leubner {
21564e1bc9a0SAchim Leubner     bit8 smpFrameType;                                      /* 0x40 for request, 0x41 for response*/
21574e1bc9a0SAchim Leubner     bit8 function;                                          /* 0x02 for read, 0x82 for write */
21584e1bc9a0SAchim Leubner     bit8 registerType;                                      /* used only in request */
21594e1bc9a0SAchim Leubner     bit8 registerIndex;                                     /* used only in request */
21604e1bc9a0SAchim Leubner     bit8 registerCount;                                     /* used only in request */
21614e1bc9a0SAchim Leubner     bit8 functionResult;                                    /* used only in response */
21624e1bc9a0SAchim Leubner     bit32 readWriteData[OSSA_SGPIO_MAX_READ_DATA_COUNT];    /* write data for request; read data for response */
21634e1bc9a0SAchim Leubner } agsaSGpioReqResponse_t;
21644e1bc9a0SAchim Leubner 
21654e1bc9a0SAchim Leubner 
21664e1bc9a0SAchim Leubner /** \brief describe a serial GPIO operation response in the SAS/SATA hardware
21674e1bc9a0SAchim Leubner  *
21684e1bc9a0SAchim Leubner  * Describe the fields required for serial GPIO operations response in the SAS/SATA hardware
21694e1bc9a0SAchim Leubner  *
21704e1bc9a0SAchim Leubner  */
21714e1bc9a0SAchim Leubner typedef struct agsaSGpioCfg0
21724e1bc9a0SAchim Leubner {
21734e1bc9a0SAchim Leubner     bit8 reserved1;
21744e1bc9a0SAchim Leubner     bit8 version:4;
21754e1bc9a0SAchim Leubner     bit8 reserved2:4;
21764e1bc9a0SAchim Leubner     bit8 gpRegisterCount:4;
21774e1bc9a0SAchim Leubner     bit8 cfgRegisterCount:3;
21784e1bc9a0SAchim Leubner     bit8 gpioEnable:1;
21794e1bc9a0SAchim Leubner     bit8 supportedDriveCount;
21804e1bc9a0SAchim Leubner } agsaSGpioCfg0_t;
21814e1bc9a0SAchim Leubner 
21824e1bc9a0SAchim Leubner /** \brief SGPIO configuration register 1
21834e1bc9a0SAchim Leubner  *
21844e1bc9a0SAchim Leubner  * These fields constitute SGPIO configuration register 1, as defined by SFF-8485 spec
21854e1bc9a0SAchim Leubner  *
21864e1bc9a0SAchim Leubner  */
21874e1bc9a0SAchim Leubner typedef struct agsaSGpioCfg1{
21884e1bc9a0SAchim Leubner     bit8 reserved;
21894e1bc9a0SAchim Leubner     bit8 blinkGenA:4;
21904e1bc9a0SAchim Leubner     bit8 blinkGenB:4;
21914e1bc9a0SAchim Leubner     bit8 maxActOn:4;
21924e1bc9a0SAchim Leubner     bit8 forceActOff:4;
21934e1bc9a0SAchim Leubner     bit8 stretchActOn:4;
21944e1bc9a0SAchim Leubner     bit8 stretchActOff:4;
21954e1bc9a0SAchim Leubner } agsaSGpioCfg1_t;
21964e1bc9a0SAchim Leubner 
21974e1bc9a0SAchim Leubner /** \brief describe a configuration for a PHY in the SAS/SATA hardware
21984e1bc9a0SAchim Leubner  *
21994e1bc9a0SAchim Leubner  * Describe a configuration for a PHY in the SAS/SATA hardware
22004e1bc9a0SAchim Leubner  *
22014e1bc9a0SAchim Leubner  */
22024e1bc9a0SAchim Leubner typedef struct agsaPhyConfig_s
22034e1bc9a0SAchim Leubner {
22044e1bc9a0SAchim Leubner   bit32   phyProperties;
22054e1bc9a0SAchim Leubner                       /**< b31-b8 reserved */
22064e1bc9a0SAchim Leubner                       /**< b16-b19 SSC Disable */
22074e1bc9a0SAchim Leubner                       /**< b15-b8 phy analog setup index */
22084e1bc9a0SAchim Leubner                       /**< b7     phy analog setup enable */
22094e1bc9a0SAchim Leubner                       /**< b6     Control spin up hold */
22104e1bc9a0SAchim Leubner                       /**< b5-b4  SAS/SATA mode, bit4 - SAS, bit5 - SATA, 11b - Auto mode */
22114e1bc9a0SAchim Leubner                       /**< b3-b0  Max. Link Rate, bit0 - 1.5Gb/s, bit1 - 3.0Gb/s,
22124e1bc9a0SAchim Leubner                                   bit2 - 6.0Gb/s, bit3 - reserved */
22134e1bc9a0SAchim Leubner } agsaPhyConfig_t;
22144e1bc9a0SAchim Leubner 
22154e1bc9a0SAchim Leubner 
22164e1bc9a0SAchim Leubner /** \brief Structure is used as a parameter passed in saLocalPhyControlCB() to describe the error counter
22174e1bc9a0SAchim Leubner  *
22184e1bc9a0SAchim Leubner  * Description
22194e1bc9a0SAchim Leubner  * This profile page is used to read or set the SNW-3 PHY capabilities of a
22204e1bc9a0SAchim Leubner  * SAS PHY. This page can be read by calling saGetPhyProfile(). It can be
22214e1bc9a0SAchim Leubner  * read anytime and there is no need to quiesce he I/O to the controller.
22224e1bc9a0SAchim Leubner  * The format of the 32-bit SNW3 is the same as defined in the SAS 2
22234e1bc9a0SAchim Leubner  * specification.
22244e1bc9a0SAchim Leubner  * Local SNW3 can be modified by calling saSetPhyProfile() before
22254e1bc9a0SAchim Leubner  * saPhyStart() to the PHY. REQUESTED LOGICAL LINK RATE is reserved.
22264e1bc9a0SAchim Leubner  * The SPCv will calculate the PARITY field.
22274e1bc9a0SAchim Leubner 
22284e1bc9a0SAchim Leubner  * Note: This page is applicable only to the SPCv controller.
22294e1bc9a0SAchim Leubner  * Usage
22304e1bc9a0SAchim Leubner  * Initiator and target.
22314e1bc9a0SAchim Leubner  */
22324e1bc9a0SAchim Leubner 
22334e1bc9a0SAchim Leubner typedef struct agsaPhySNW3Page_s
22344e1bc9a0SAchim Leubner {
22354e1bc9a0SAchim Leubner   bit32   LSNW3;
22364e1bc9a0SAchim Leubner   bit32   RSNW3;
22374e1bc9a0SAchim Leubner } agsaPhySNW3Page_t;
22384e1bc9a0SAchim Leubner 
22394e1bc9a0SAchim Leubner /** \brief structure describe error counters of a PHY in the SAS/SATA
22404e1bc9a0SAchim Leubner  *
22414e1bc9a0SAchim Leubner  * Structure is used as a parameter passed in saLocalPhyControlCB()
22424e1bc9a0SAchim Leubner  * to describe the error counter
22434e1bc9a0SAchim Leubner  *
22444e1bc9a0SAchim Leubner  */
22454e1bc9a0SAchim Leubner typedef struct agsaPhyErrCounters_s
22464e1bc9a0SAchim Leubner {
22474e1bc9a0SAchim Leubner   bit32   invalidDword;             /* Number of invalid dwords that have been
22484e1bc9a0SAchim Leubner                                        received outside of phy reset sequences.*/
22494e1bc9a0SAchim Leubner   bit32   runningDisparityError;    /* Number of dwords containing running disparity
22504e1bc9a0SAchim Leubner                                        errors that have been received outside of phy
22514e1bc9a0SAchim Leubner                                        reset sequences.*/
22524e1bc9a0SAchim Leubner   bit32   lossOfDwordSynch;         /* Number of times the phy has restarted the link
22534e1bc9a0SAchim Leubner                                        reset sequence because it lost dword synchronization.*/
22544e1bc9a0SAchim Leubner   bit32   phyResetProblem;          /* Number of times the phy did not obtain dword
22554e1bc9a0SAchim Leubner                                        synchronization during the final SAS speed
22564e1bc9a0SAchim Leubner                                        negotiation window.*/
22574e1bc9a0SAchim Leubner   bit32   elasticityBufferOverflow; /* Number of times the phys receive elasticity
22584e1bc9a0SAchim Leubner                                        buffer has overflowed.*/
22594e1bc9a0SAchim Leubner   bit32   receivedErrorPrimitive;   /* Number of times the phy received an ERROR primitive */
22604e1bc9a0SAchim Leubner   bit32   inboundCRCError;          /* Number of inbound CRC Error */
22614e1bc9a0SAchim Leubner   bit32   codeViolation;            /* Number of code violation */
22624e1bc9a0SAchim Leubner } agsaPhyErrCounters_t;
22634e1bc9a0SAchim Leubner 
22644e1bc9a0SAchim Leubner 
22654e1bc9a0SAchim Leubner /** \brief
22664e1bc9a0SAchim Leubner  * used in saGetPhyProfile
22674e1bc9a0SAchim Leubner  */
22684e1bc9a0SAchim Leubner typedef struct agsaPhyErrCountersPage_s
22694e1bc9a0SAchim Leubner {
22704e1bc9a0SAchim Leubner   bit32   invalidDword;
22714e1bc9a0SAchim Leubner   bit32   runningDisparityError;
22724e1bc9a0SAchim Leubner   bit32   codeViolation;
22734e1bc9a0SAchim Leubner   bit32   lossOfDwordSynch;
22744e1bc9a0SAchim Leubner   bit32   phyResetProblem;
22754e1bc9a0SAchim Leubner   bit32   inboundCRCError;
22764e1bc9a0SAchim Leubner } agsaPhyErrCountersPage_t;
22774e1bc9a0SAchim Leubner 
22784e1bc9a0SAchim Leubner /** \brief structure describes bandwidth counters of a PHY in the SAS/SATA
22794e1bc9a0SAchim Leubner  *
22804e1bc9a0SAchim Leubner  * Structure is used as a parameter passed in saGetPhyProfile()
22814e1bc9a0SAchim Leubner  * to describe the error counter
22824e1bc9a0SAchim Leubner  *
22834e1bc9a0SAchim Leubner  */
22844e1bc9a0SAchim Leubner 
22854e1bc9a0SAchim Leubner typedef struct agsaPhyBWCountersPage_s
22864e1bc9a0SAchim Leubner {
22874e1bc9a0SAchim Leubner   bit32   TXBWCounter;
22884e1bc9a0SAchim Leubner   bit32   RXBWCounter;
22894e1bc9a0SAchim Leubner } agsaPhyBWCountersPage_t;
22904e1bc9a0SAchim Leubner 
22914e1bc9a0SAchim Leubner 
22924e1bc9a0SAchim Leubner 
22934e1bc9a0SAchim Leubner /** \brief structure describe hardware configuration
22944e1bc9a0SAchim Leubner  *
22954e1bc9a0SAchim Leubner  * Structure is used as a parameter passed in saInitialize() to describe the
22964e1bc9a0SAchim Leubner  * configuration used during hardware initialization
22974e1bc9a0SAchim Leubner  *
22984e1bc9a0SAchim Leubner  */
22994e1bc9a0SAchim Leubner typedef struct agsaHwConfig_s
23004e1bc9a0SAchim Leubner {
23014e1bc9a0SAchim Leubner   bit32   phyCount;                     /**< Number of PHYs that are to be configured
23024e1bc9a0SAchim Leubner                                          and initialized.  */
23034e1bc9a0SAchim Leubner   bit32   hwInterruptCoalescingTimer;   /**< Host Interrupt CoalescingTimer */
23044e1bc9a0SAchim Leubner   bit32   hwInterruptCoalescingControl; /**< Host Interrupt CoalescingControl */
23054e1bc9a0SAchim Leubner   bit32   intReassertionOption;         /**< Interrupt Ressertion Option */
23064e1bc9a0SAchim Leubner   bit32   hwOption;                     /** PCAD64 on 64 bit addressing */
23074e1bc9a0SAchim Leubner 
23084e1bc9a0SAchim Leubner   agsaPhyAnalogSetupTable_t phyAnalogConfig; /**< Phy Analog Setting Table */
23094e1bc9a0SAchim Leubner } agsaHwConfig_t;
23104e1bc9a0SAchim Leubner 
23114e1bc9a0SAchim Leubner /** \brief structure describe software configuration
23124e1bc9a0SAchim Leubner  *
23134e1bc9a0SAchim Leubner  * Structure is used as a parameter passed in saInitialize() to describe the
23144e1bc9a0SAchim Leubner  * configuration used during software initialization
23154e1bc9a0SAchim Leubner  *
23164e1bc9a0SAchim Leubner  */
23174e1bc9a0SAchim Leubner typedef struct agsaSwConfig_s
23184e1bc9a0SAchim Leubner {
23194e1bc9a0SAchim Leubner   bit32   maxActiveIOs;                 /**< Maximum active I/O requests supported */
23204e1bc9a0SAchim Leubner   bit32   numDevHandles;                /**< Number of SAS/SATA device handles allocated
23214e1bc9a0SAchim Leubner                                          in the pool */
23224e1bc9a0SAchim Leubner   bit32   smpReqTimeout;                /**< SMP request time out in millisecond */
23234e1bc9a0SAchim Leubner   bit32   numberOfEventRegClients;      /**< Maximum number of OS Layer clients for the event
23244e1bc9a0SAchim Leubner                                              registration defined by saRegisterEventCallback() */
23254e1bc9a0SAchim Leubner   bit32   sizefEventLog1;               /**< Size of Event Log 1 */
23264e1bc9a0SAchim Leubner   bit32   sizefEventLog2;               /**< Size of Event Log 2 */
23274e1bc9a0SAchim Leubner   bit32   eventLog1Option;              /**< Option of Event Log 1 */
23284e1bc9a0SAchim Leubner   bit32   eventLog2Option;              /**< Option of Event Log 2 */
23294e1bc9a0SAchim Leubner 
23304e1bc9a0SAchim Leubner   bit32   fatalErrorInterruptEnable:1;  /**< 0 Fatal Error Iterrupt Enable */
23314e1bc9a0SAchim Leubner   bit32   sgpioSupportEnable:1;         /**< 1 SGPIO Support Enable */
23324e1bc9a0SAchim Leubner   bit32   fatalErrorInterruptVector:8;  /**< 2-9  Fatal Error Interrupt Vector */
23334e1bc9a0SAchim Leubner   bit32   max_MSI_InterruptVectors:8;   /**< 10-18 Maximum MSI Interrupt Vectors */
23344e1bc9a0SAchim Leubner   bit32   max_MSIX_InterruptVectors:8;  /**< 18-25 Maximum MSIX Interrupt Vectors */
23354e1bc9a0SAchim Leubner   bit32   legacyInt_X:1;                /**< 26 Support Legacy Interrupt */
23364e1bc9a0SAchim Leubner   bit32   hostDirectAccessSupport:1;    /**< 27 Support HDA mode */
23374e1bc9a0SAchim Leubner   bit32   hostDirectAccessMode:2;       /**< 28-29 HDA mode: 00b - HDA SoftReset, 01b - HDA Normal */
23384e1bc9a0SAchim Leubner   bit32   enableDIF:1;                  /**< 30 */
23394e1bc9a0SAchim Leubner   bit32   enableEncryption:1;           /**< 31 */
23404e1bc9a0SAchim Leubner #ifdef SA_CONFIG_MDFD_REGISTRY
23414e1bc9a0SAchim Leubner   bit32   disableMDF;                   /*disable MDF*/
23424e1bc9a0SAchim Leubner #endif
23434e1bc9a0SAchim Leubner   bit32   param1;                       /**< parameter1 */
23444e1bc9a0SAchim Leubner   bit32   param2;                       /**< parameter2 */
23454e1bc9a0SAchim Leubner   void    *param3;                      /**< parameter3 */
23464e1bc9a0SAchim Leubner   void    *param4;                      /**< paramater4 */
23474e1bc9a0SAchim Leubner   bit32   stallUsec;
23484e1bc9a0SAchim Leubner   bit32   FWConfig;
23494e1bc9a0SAchim Leubner   bit32   PortRecoveryResetTimer;
23504e1bc9a0SAchim Leubner   void    *mpiContextTable;             /** Pointer to a table that contains agsaMPIContext_t
23514e1bc9a0SAchim Leubner                                             entries. This table is used to fill in MPI table
23524e1bc9a0SAchim Leubner                                             fields. Values in this table are written to MPI table last.
23534e1bc9a0SAchim Leubner                                             Any previous values in MPI table are overwritten by values
23544e1bc9a0SAchim Leubner                                             in this table. */
23554e1bc9a0SAchim Leubner 
23564e1bc9a0SAchim Leubner   bit32   mpiContextTablelen;           /** Number of agsaMPIContext_t entries in mpiContextTable */
23574e1bc9a0SAchim Leubner 
23584e1bc9a0SAchim Leubner #if defined(SALLSDK_DEBUG)
23594e1bc9a0SAchim Leubner   bit32   sallDebugLevel;               /**< Low Layer debug level */
23604e1bc9a0SAchim Leubner #endif
23614e1bc9a0SAchim Leubner 
23624e1bc9a0SAchim Leubner #ifdef SA_ENABLE_PCI_TRIGGER
23634e1bc9a0SAchim Leubner   bit32   PCI_trigger;
23644e1bc9a0SAchim Leubner #endif /* SA_ENABLE_PCI_TRIGGER */
23654e1bc9a0SAchim Leubner 
23664e1bc9a0SAchim Leubner #ifdef SA_ENABLE_TRACE_FUNCTIONS
23674e1bc9a0SAchim Leubner   bit32 TraceDestination;
23684e1bc9a0SAchim Leubner   bit32 TraceBufferSize;
23694e1bc9a0SAchim Leubner   bit32 TraceMask;
23704e1bc9a0SAchim Leubner #endif /* SA_ENABLE_TRACE_FUNCTIONS */
23714e1bc9a0SAchim Leubner } agsaSwConfig_t;
23724e1bc9a0SAchim Leubner 
23734e1bc9a0SAchim Leubner 
23744e1bc9a0SAchim Leubner typedef struct agsaQueueInbound_s
23754e1bc9a0SAchim Leubner {
23764e1bc9a0SAchim Leubner   bit32   elementCount:16;  /* Maximum number of elements in the queue (queue depth).
23774e1bc9a0SAchim Leubner                                A value of zero indicates that the host disabled this queue.*/
23784e1bc9a0SAchim Leubner   bit32   elementSize:16;   /* Size of each element in the queue in bytes.*/
23794e1bc9a0SAchim Leubner   bit32   priority:2;       /* Queue priority:
23804e1bc9a0SAchim Leubner                                     00: normal priority
23814e1bc9a0SAchim Leubner                                     01: high priority
23824e1bc9a0SAchim Leubner                                     10: reserved
23834e1bc9a0SAchim Leubner                                     11: reserved */
23844e1bc9a0SAchim Leubner   bit32   reserved:30;
23854e1bc9a0SAchim Leubner } agsaQueueInbound_t;
23864e1bc9a0SAchim Leubner 
23874e1bc9a0SAchim Leubner typedef struct agsaQueueOutbound_s
23884e1bc9a0SAchim Leubner {
23894e1bc9a0SAchim Leubner   bit32   elementCount:16;          /* Maximum number of elements in the queue (queue depth).
23904e1bc9a0SAchim Leubner                                        A value of zero indicates that the host disabled
23914e1bc9a0SAchim Leubner                                        this queue.*/
23924e1bc9a0SAchim Leubner   bit32   elementSize:16;           /* Size of each element in the queue in bytes.*/
23934e1bc9a0SAchim Leubner   bit32   interruptDelay:16;        /* Time, in usec, to delay interrupts to the host.
23944e1bc9a0SAchim Leubner                                        Zero means not to delay based on time. An
23954e1bc9a0SAchim Leubner                                        interrupt is passed to the host when either of
23964e1bc9a0SAchim Leubner                                        the interruptDelay or interruptCount parameters
23974e1bc9a0SAchim Leubner                                        is satisfied. Default value is 0.*/
23984e1bc9a0SAchim Leubner   bit32   interruptCount:16;        /* Number of interrupts required before passing to
23994e1bc9a0SAchim Leubner                                        the host. Zero means not to coalesce based on count. */
24004e1bc9a0SAchim Leubner   bit32   interruptVectorIndex:8;   /* MSI/MSI-X interrupt vector index. For MSI, when
24014e1bc9a0SAchim Leubner                                        Multiple Messages is enabled, this field is the
24024e1bc9a0SAchim Leubner                                        index to the MSI vectors derived from a single
24034e1bc9a0SAchim Leubner                                        Message Address and multiple Message Data.
24044e1bc9a0SAchim Leubner                                        For MSI-X, this field is the index to the
24054e1bc9a0SAchim Leubner                                        MSI-X Table Structure. */
24064e1bc9a0SAchim Leubner   bit32   interruptEnable:1;        /* 0b: No interrupt to host (host polling)
24074e1bc9a0SAchim Leubner                                        1b: Interrupt enabled */
24084e1bc9a0SAchim Leubner   bit32   reserved:23;
24094e1bc9a0SAchim Leubner 
24104e1bc9a0SAchim Leubner } agsaQueueOutbound_t;
24114e1bc9a0SAchim Leubner 
24124e1bc9a0SAchim Leubner typedef struct agsaPhyCalibrationTbl_s
24134e1bc9a0SAchim Leubner {
24144e1bc9a0SAchim Leubner   bit32   txPortConfig1;            /* transmitter per port configuration 1 SAS_SATA G1 */
24154e1bc9a0SAchim Leubner   bit32   txPortConfig2;            /* transmitter per port configuration 2 SAS_SATA G1*/
24164e1bc9a0SAchim Leubner   bit32   txPortConfig3;            /* transmitter per port configuration 3 SAS_SATA G1*/
24174e1bc9a0SAchim Leubner   bit32   txConfig1;                /* transmitter configuration 1 */
24184e1bc9a0SAchim Leubner   bit32   rvPortConfig1;            /* reveiver per port configuration 1 SAS_SATA G1G2 */
24194e1bc9a0SAchim Leubner   bit32   rvPortConfig2;            /* reveiver per port configuration 2 SAS_SATA G3 */
24204e1bc9a0SAchim Leubner   bit32   rvConfig1;                /* reveiver per configuration 1 */
24214e1bc9a0SAchim Leubner   bit32   rvConfig2;                /* reveiver per configuration 2 */
24224e1bc9a0SAchim Leubner   bit32   reserved[2];              /* reserved */
24234e1bc9a0SAchim Leubner } agsaPhyCalibrationTbl_t;
24244e1bc9a0SAchim Leubner 
24254e1bc9a0SAchim Leubner typedef struct agsaQueueConfig_s
24264e1bc9a0SAchim Leubner {
24274e1bc9a0SAchim Leubner   bit16   numInboundQueues;
24284e1bc9a0SAchim Leubner   bit16   numOutboundQueues;
24294e1bc9a0SAchim Leubner   bit8    sasHwEventQueue[AGSA_MAX_VALID_PHYS];
24304e1bc9a0SAchim Leubner   bit8    sataNCQErrorEventQueue[AGSA_MAX_VALID_PHYS];
24314e1bc9a0SAchim Leubner   bit8    tgtITNexusEventQueue[AGSA_MAX_VALID_PHYS];
24324e1bc9a0SAchim Leubner   bit8    tgtSSPEventQueue[AGSA_MAX_VALID_PHYS];
24334e1bc9a0SAchim Leubner   bit8    tgtSMPEventQueue[AGSA_MAX_VALID_PHYS];
24344e1bc9a0SAchim Leubner   bit8    iqNormalPriorityProcessingDepth;
24354e1bc9a0SAchim Leubner   bit8    iqHighPriorityProcessingDepth;
24364e1bc9a0SAchim Leubner   bit8    generalEventQueue;
24374e1bc9a0SAchim Leubner   bit8    tgtDeviceRemovedEventQueue;
24384e1bc9a0SAchim Leubner   bit32   queueOption;
24394e1bc9a0SAchim Leubner   agsaQueueInbound_t  inboundQueues[AGSA_MAX_INBOUND_Q];
24404e1bc9a0SAchim Leubner   agsaQueueOutbound_t outboundQueues[AGSA_MAX_OUTBOUND_Q];
24414e1bc9a0SAchim Leubner } agsaQueueConfig_t;
24424e1bc9a0SAchim Leubner 
24434e1bc9a0SAchim Leubner #define OQ_SHARE_PATH_BIT 0x00000001
24444e1bc9a0SAchim Leubner 
24454e1bc9a0SAchim Leubner typedef struct agsaFwImg_s
24464e1bc9a0SAchim Leubner {
24474e1bc9a0SAchim Leubner   bit8    *aap1Img;             /**< AAP1 Image */
24484e1bc9a0SAchim Leubner   bit32   aap1Len;              /**< AAP1 Image Length */
24494e1bc9a0SAchim Leubner   bit8    *ilaImg;              /**< ILA Image */
24504e1bc9a0SAchim Leubner   bit32   ilaLen;               /**< ILA Image Length */
24514e1bc9a0SAchim Leubner   bit8    *iopImg;              /**< IOP Image */
24524e1bc9a0SAchim Leubner   bit32   iopLen;               /**< IOP Image Length */
24534e1bc9a0SAchim Leubner   bit8    *istrImg;             /**< Init String */
24544e1bc9a0SAchim Leubner   bit32   istrLen;              /**< Init String Length */
24554e1bc9a0SAchim Leubner } agsaFwImg_t;
24564e1bc9a0SAchim Leubner 
24574e1bc9a0SAchim Leubner /** \brief generic memory descriptor
24584e1bc9a0SAchim Leubner  *
24594e1bc9a0SAchim Leubner  * a generic memory descriptor used for describing a memory requirement in a structure
24604e1bc9a0SAchim Leubner  *
24614e1bc9a0SAchim Leubner  */
24624e1bc9a0SAchim Leubner typedef struct agsaMem_s
24634e1bc9a0SAchim Leubner {
24644e1bc9a0SAchim Leubner   void    *virtPtr;             /**< Virtual pointer to the memory chunk */
24654e1bc9a0SAchim Leubner   void    *osHandle;            /**< Handle used for OS to free memory */
24664e1bc9a0SAchim Leubner   bit32   phyAddrUpper;         /**< Upper 32 bits of physical address */
24674e1bc9a0SAchim Leubner   bit32   phyAddrLower;         /**< Lower 32 bits of physical address */
24684e1bc9a0SAchim Leubner   bit32   totalLength;          /**< Total length in bytes allocated */
24694e1bc9a0SAchim Leubner   bit32   numElements;          /**< Number of elements */
24704e1bc9a0SAchim Leubner   bit32   singleElementLength;  /**< Size in bytes of an element */
24714e1bc9a0SAchim Leubner   bit32   alignment;            /**< Alignment in bytes needed. A value of one indicates
24724e1bc9a0SAchim Leubner                                      no specific alignment requirement */
24734e1bc9a0SAchim Leubner   bit32   type;                 /**< DMA or Cache */
24744e1bc9a0SAchim Leubner   bit32   reserved;             /**< reserved */
24754e1bc9a0SAchim Leubner } agsaMem_t;
24764e1bc9a0SAchim Leubner 
24774e1bc9a0SAchim Leubner /** \brief specify the controller Event Log for the SAS/SATA LL Layer
24784e1bc9a0SAchim Leubner  *
24794e1bc9a0SAchim Leubner  * data structure used in the saGetControllerEventLogInfo() function calls
24804e1bc9a0SAchim Leubner  *
24814e1bc9a0SAchim Leubner  */
24824e1bc9a0SAchim Leubner typedef struct agsaControllerEventLog_s
24834e1bc9a0SAchim Leubner {
24844e1bc9a0SAchim Leubner   agsaMem_t   eventLog1;
24854e1bc9a0SAchim Leubner   agsaMem_t   eventLog2;
24864e1bc9a0SAchim Leubner   bit32       eventLog1Option;
24874e1bc9a0SAchim Leubner   bit32       eventLog2Option;
24884e1bc9a0SAchim Leubner } agsaControllerEventLog_t;
24894e1bc9a0SAchim Leubner 
24904e1bc9a0SAchim Leubner /* Log Option - bit3-0 */
24914e1bc9a0SAchim Leubner #define DISABLE_LOGGING 0x0
24924e1bc9a0SAchim Leubner #define CRITICAL_ERROR  0x1
24934e1bc9a0SAchim Leubner #define WARNING         0x2
24944e1bc9a0SAchim Leubner #define NOTICE          0x3
24954e1bc9a0SAchim Leubner #define INFORMATION     0x4
24964e1bc9a0SAchim Leubner #define DEBUGGING       0x5
24974e1bc9a0SAchim Leubner 
24984e1bc9a0SAchim Leubner /** \brief specify the SAS Diagnostic Parameters for the SAS/SATA LL Layer
24994e1bc9a0SAchim Leubner  *
25004e1bc9a0SAchim Leubner  * data structure used in the saGetRequirements() and the saInitialize() function calls
25014e1bc9a0SAchim Leubner  *
25024e1bc9a0SAchim Leubner  */
25034e1bc9a0SAchim Leubner typedef struct agsaSASDiagExecute_s
25044e1bc9a0SAchim Leubner {
25054e1bc9a0SAchim Leubner   bit32 command;
25064e1bc9a0SAchim Leubner   bit32 param0;
25074e1bc9a0SAchim Leubner   bit32 param1;
25084e1bc9a0SAchim Leubner   bit32 param2;
25094e1bc9a0SAchim Leubner   bit32 param3;
25104e1bc9a0SAchim Leubner   bit32 param4;
25114e1bc9a0SAchim Leubner   bit32 param5;
25124e1bc9a0SAchim Leubner } agsaSASDiagExecute_t;
25134e1bc9a0SAchim Leubner 
25144e1bc9a0SAchim Leubner 
25154e1bc9a0SAchim Leubner /** \brief  for the SAS/SATA LL Layer
25164e1bc9a0SAchim Leubner  *
25174e1bc9a0SAchim Leubner  *  This data structure contains the general status of a SAS Phy.
25184e1bc9a0SAchim Leubner  *  Section 4.60
25194e1bc9a0SAchim Leubner  */
25204e1bc9a0SAchim Leubner typedef struct agsaSASPhyGeneralStatusPage_s
25214e1bc9a0SAchim Leubner {
25224e1bc9a0SAchim Leubner   bit32 Dword0;
25234e1bc9a0SAchim Leubner   bit32 Dword1;
25244e1bc9a0SAchim Leubner } agsaSASPhyGeneralStatusPage_t;
25254e1bc9a0SAchim Leubner 
25264e1bc9a0SAchim Leubner 
25274e1bc9a0SAchim Leubner /** \brief specify the memory allocation requirement for the SAS/SATA LL Layer
25284e1bc9a0SAchim Leubner  *
25294e1bc9a0SAchim Leubner  * data structure used in the saGetRequirements() and the saInitialize() function calls
25304e1bc9a0SAchim Leubner  *
25314e1bc9a0SAchim Leubner  */
25324e1bc9a0SAchim Leubner typedef struct agsaMemoryRequirement_s
25334e1bc9a0SAchim Leubner {
25344e1bc9a0SAchim Leubner   bit32       count;                         /**< The number of memory chunks used
25354e1bc9a0SAchim Leubner                                                   in the agMemory table */
25364e1bc9a0SAchim Leubner   agsaMem_t   agMemory[AGSA_NUM_MEM_CHUNKS]; /**< The structure that defines the memory
25374e1bc9a0SAchim Leubner                                                   requirement structure */
25384e1bc9a0SAchim Leubner } agsaMemoryRequirement_t;
25394e1bc9a0SAchim Leubner 
25404e1bc9a0SAchim Leubner 
25414e1bc9a0SAchim Leubner /** \brief describe a SAS address and PHY Identifier
25424e1bc9a0SAchim Leubner  *
25434e1bc9a0SAchim Leubner  * This structure is used
25444e1bc9a0SAchim Leubner  *
25454e1bc9a0SAchim Leubner  */
25464e1bc9a0SAchim Leubner typedef struct agsaSASAddressID_s
25474e1bc9a0SAchim Leubner {
25484e1bc9a0SAchim Leubner   bit8   sasAddressLo[4];     /**< HOST SAS address lower part */
25494e1bc9a0SAchim Leubner   bit8   sasAddressHi[4];     /**< HOST SAS address higher part */
25504e1bc9a0SAchim Leubner   bit8   phyIdentifier;    /**< PHY IDENTIFIER of the PHY */
25514e1bc9a0SAchim Leubner } agsaSASAddressID_t;
25524e1bc9a0SAchim Leubner 
25534e1bc9a0SAchim Leubner /** \brief data structure provides some information about a SATA device
25544e1bc9a0SAchim Leubner  *
25554e1bc9a0SAchim Leubner  * data structure provides some information about a SATA device discovered
25564e1bc9a0SAchim Leubner  * following the SATA discovery.
25574e1bc9a0SAchim Leubner  *
25584e1bc9a0SAchim Leubner  */
25594e1bc9a0SAchim Leubner typedef struct agsaDeviceInfo_s
25604e1bc9a0SAchim Leubner {
25614e1bc9a0SAchim Leubner   bit16   smpTimeout;
25624e1bc9a0SAchim Leubner   bit16   it_NexusTimeout;
25634e1bc9a0SAchim Leubner   bit16   firstBurstSize;
25644e1bc9a0SAchim Leubner   bit8    reserved;
25654e1bc9a0SAchim Leubner     /* Not Used */
25664e1bc9a0SAchim Leubner   bit8    devType_S_Rate;
25674e1bc9a0SAchim Leubner     /* Bit 6-7: reserved
25684e1bc9a0SAchim Leubner        Bit 4-5: Two-bit flag to specify a SSP/SMP, or directly attached SATA or STP device
25694e1bc9a0SAchim Leubner                 00: STP device
25704e1bc9a0SAchim Leubner                 01: SSP or SMP device
25714e1bc9a0SAchim Leubner                 10: Direct SATA device
25724e1bc9a0SAchim Leubner        Bit 0-3: Connection Rate field when opening the device.
25734e1bc9a0SAchim Leubner                 Code Description:
25744e1bc9a0SAchim Leubner                 08h:  1.5 Gbps
25754e1bc9a0SAchim Leubner                 09h:  3.0 Gbps
25764e1bc9a0SAchim Leubner                 0ah:  6.0 Gbps
25774e1bc9a0SAchim Leubner                 All others Reserved
25784e1bc9a0SAchim Leubner     */
25794e1bc9a0SAchim Leubner   bit8    sasAddressHi[4];
25804e1bc9a0SAchim Leubner   bit8    sasAddressLo[4];
25814e1bc9a0SAchim Leubner   bit32   flag;
25824e1bc9a0SAchim Leubner /*
25834e1bc9a0SAchim Leubner flag
25844e1bc9a0SAchim Leubner Bit 0: Retry flag.
25854e1bc9a0SAchim Leubner       1b: enable SAS TLR (Transport Layer Retry).
25864e1bc9a0SAchim Leubner       0b: disable SAS TLR (Transport Layer Retry).
25874e1bc9a0SAchim Leubner           When used during device registration, it is recommended that TLR is
25884e1bc9a0SAchim Leubner           enabled, i.e. set the bit to 1.
25894e1bc9a0SAchim Leubner Bit 1: Priority setting for AWT (Arbitration Wait Time) for this device.
25904e1bc9a0SAchim Leubner       0b: Default setting (recommended). Actual AWT value TBD.
25914e1bc9a0SAchim Leubner       1b: Increase priority. Actual AWT value TBD.
25924e1bc9a0SAchim Leubner Bit 2-3: Reserved
25934e1bc9a0SAchim Leubner Bit 4-11: Zero-based PHY identifier. This field is used only if bits 4-5 in devType_S_Rate are set to 10b
25944e1bc9a0SAchim Leubner           which indicates a directly-attached SATA drive.
25954e1bc9a0SAchim Leubner Bit 12-15: Reserved
25964e1bc9a0SAchim Leubner Bit 16-19 : Maximum Connection Number. This field specifies the maximum number of connections that
25974e1bc9a0SAchim Leubner             can be established with the device concurrently. This field is set to the lowest port width along the pathway
25984e1bc9a0SAchim Leubner             from the controller to the device. This is applicable only to the SPCv controller.
25994e1bc9a0SAchim Leubner             However, for backward compatibility reasons, if this field is set to zero, it is treated as 1 so that the controller
26004e1bc9a0SAchim Leubner             can establish at least one connection.
26014e1bc9a0SAchim Leubner Bit 20: Initiator Role
26024e1bc9a0SAchim Leubner         This bit indicates whether the device has SSP initiator role capability. This is applicable only to the SPCv controller.
26034e1bc9a0SAchim Leubner       0b : The device has no SSP initiator capability.
26044e1bc9a0SAchim Leubner       1b : The device has SSP initiator capability.
26054e1bc9a0SAchim Leubner Bit 21: ATAPI Device Flag. (Only applies to the SPCv) Flag to indicate ATAPI protocol support
26064e1bc9a0SAchim Leubner       0b : Device does not support ATAPI protocol.
26074e1bc9a0SAchim Leubner       1b : Device supports ATAPI protocol.
26084e1bc9a0SAchim Leubner Bit 22-31: Reserved
26094e1bc9a0SAchim Leubner */
26104e1bc9a0SAchim Leubner } agsaDeviceInfo_t;
26114e1bc9a0SAchim Leubner 
26124e1bc9a0SAchim Leubner 
26134e1bc9a0SAchim Leubner #define DEV_INFO_MASK       0xFF
26144e1bc9a0SAchim Leubner #define DEV_INFO_MCN_SHIFT  16
26154e1bc9a0SAchim Leubner #define DEV_INFO_IR_SHIFT   20
26164e1bc9a0SAchim Leubner 
26174e1bc9a0SAchim Leubner #define RETRY_DEVICE_FLAG            (1 << SHIFT0)
26184e1bc9a0SAchim Leubner #define AWT_DEVICE_FLAG              (1 << SHIFT1)
26194e1bc9a0SAchim Leubner #define SSP_DEVICE_FLAG              (1 << SHIFT20)
26204e1bc9a0SAchim Leubner #define ATAPI_DEVICE_FLAG                 0x200000 /* bit21  */
26214e1bc9a0SAchim Leubner #define XFER_RDY_PRIORTY_DEVICE_FLAG (1 << SHIFT22)
26224e1bc9a0SAchim Leubner 
26234e1bc9a0SAchim Leubner 
26244e1bc9a0SAchim Leubner #define DEV_LINK_RATE 0x3F
26254e1bc9a0SAchim Leubner 
26264e1bc9a0SAchim Leubner #define SA_DEVINFO_GET_SAS_ADDRESSLO(devInfo) \
26274e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(devInfo)->sasAddressLo)
26284e1bc9a0SAchim Leubner 
26294e1bc9a0SAchim Leubner #define SA_DEVINFO_GET_SAS_ADDRESSHI(devInfo) \
26304e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(devInfo)->sasAddressHi)
26314e1bc9a0SAchim Leubner 
26324e1bc9a0SAchim Leubner #define SA_DEVINFO_GET_DEVICETTYPE(devInfo) \
26334e1bc9a0SAchim Leubner   (((devInfo)->devType_S_Rate & 0xC0) >> 5)
26344e1bc9a0SAchim Leubner 
26354e1bc9a0SAchim Leubner #define SA_DEVINFO_PUT_SAS_ADDRESSLO(devInfo, src32) \
26364e1bc9a0SAchim Leubner   *(bit32 *)((devInfo)->sasAddressLo) = BIT32_TO_DMA_BEBIT32(src32)
26374e1bc9a0SAchim Leubner 
26384e1bc9a0SAchim Leubner #define SA_DEVINFO_PUT_SAS_ADDRESSHI(devInfo, src32) \
26394e1bc9a0SAchim Leubner   *(bit32 *)((devInfo)->sasAddressHi) = BIT32_TO_DMA_BEBIT32(src32)
26404e1bc9a0SAchim Leubner 
26414e1bc9a0SAchim Leubner /** \brief data structure provides some information about a SATA device
26424e1bc9a0SAchim Leubner  *
26434e1bc9a0SAchim Leubner  * data structure provides some information about a SATA device discovered
26444e1bc9a0SAchim Leubner  * following the SATA discovery.
26454e1bc9a0SAchim Leubner  *
26464e1bc9a0SAchim Leubner  */
26474e1bc9a0SAchim Leubner typedef struct agsaSATADeviceInfo_s
26484e1bc9a0SAchim Leubner {
26494e1bc9a0SAchim Leubner   agsaDeviceInfo_t          commonDevInfo;          /**< The general/common part of the
26504e1bc9a0SAchim Leubner                                                          SAS/SATA device information */
26514e1bc9a0SAchim Leubner   bit8                      connection;             /**< How device is connected:
26524e1bc9a0SAchim Leubner                                                            0: Direct attached.
26534e1bc9a0SAchim Leubner                                                            1: Behind Port Multiplier,
26544e1bc9a0SAchim Leubner                                                               portMultiplierField is valid.
26554e1bc9a0SAchim Leubner                                                            2: STP, stpPhyIdentifier is valid */
26564e1bc9a0SAchim Leubner 
26574e1bc9a0SAchim Leubner   bit8                      portMultiplierField;    /**< The first 4 bits indicate that
26584e1bc9a0SAchim Leubner                                                          the Port Multiplier field is defined
26594e1bc9a0SAchim Leubner                                                          by SATA-II. This field is valid only
26604e1bc9a0SAchim Leubner                                                          if the connection field above is
26614e1bc9a0SAchim Leubner                                                          set to 1 */
26624e1bc9a0SAchim Leubner 
26634e1bc9a0SAchim Leubner   bit8                      stpPhyIdentifier;       /**< PHY ID of the STP PHY. Valid only if
26644e1bc9a0SAchim Leubner                                                          connection field is set to 2 (STP). */
26654e1bc9a0SAchim Leubner 
26664e1bc9a0SAchim Leubner   bit8                      reserved;
26674e1bc9a0SAchim Leubner   bit8                      signature[8];           /**< The signature of SATA in Task
26684e1bc9a0SAchim Leubner                                                          File registers following power up.
26694e1bc9a0SAchim Leubner                                                          Only five bytes are defined by ATA.
26704e1bc9a0SAchim Leubner                                                          The added three bytes are for
26714e1bc9a0SAchim Leubner                                                          alignment purposes */
26724e1bc9a0SAchim Leubner } agsaSATADeviceInfo_t;
26734e1bc9a0SAchim Leubner 
26744e1bc9a0SAchim Leubner /** \brief data structure provides some information about a SAS device
26754e1bc9a0SAchim Leubner  *
26764e1bc9a0SAchim Leubner  * data structure provides some information about a SAS device discovered
26774e1bc9a0SAchim Leubner  * following the SAS discovery
26784e1bc9a0SAchim Leubner  *
26794e1bc9a0SAchim Leubner  */
26804e1bc9a0SAchim Leubner typedef struct agsaSASDeviceInfo_s
26814e1bc9a0SAchim Leubner {
26824e1bc9a0SAchim Leubner   agsaDeviceInfo_t  commonDevInfo;          /**< The general/common part of the SAS/SATA
26834e1bc9a0SAchim Leubner                                                  device information */
26844e1bc9a0SAchim Leubner   bit8              initiator_ssp_stp_smp;  /**< SAS initiator capabilities */
26854e1bc9a0SAchim Leubner                                             /* b4-7: reserved */
26864e1bc9a0SAchim Leubner                                             /* b3:   SSP initiator port */
26874e1bc9a0SAchim Leubner                                             /* b2:   STP initiator port */
26884e1bc9a0SAchim Leubner                                             /* b1:   SMP initiator port */
26894e1bc9a0SAchim Leubner                                             /* b0:   reserved */
26904e1bc9a0SAchim Leubner   bit8              target_ssp_stp_smp;     /**< SAS target capabilities */
26914e1bc9a0SAchim Leubner                                             /* b4-7: reserved */
26924e1bc9a0SAchim Leubner                                             /* b3:   SSP target port */
26934e1bc9a0SAchim Leubner                                             /* b2:   STP target port */
26944e1bc9a0SAchim Leubner                                             /* b1:   SMP target port */
26954e1bc9a0SAchim Leubner                                             /* b0:   reserved */
26964e1bc9a0SAchim Leubner   bit32             numOfPhys;              /**< Number of PHYs in the device */
26974e1bc9a0SAchim Leubner   bit8              phyIdentifier;          /**< PHY IDENTIFIER in IDENTIFY address
26984e1bc9a0SAchim Leubner                                                  frame as defined by the SAS
26994e1bc9a0SAchim Leubner                                                  specification. */
27004e1bc9a0SAchim Leubner } agsaSASDeviceInfo_t;
27014e1bc9a0SAchim Leubner 
27024e1bc9a0SAchim Leubner #define SA_SASDEV_SSP_BIT         SA_IDFRM_SSP_BIT  /* SSP Initiator port */
27034e1bc9a0SAchim Leubner #define SA_SASDEV_STP_BIT         SA_IDFRM_STP_BIT  /* STP Initiator port */
27044e1bc9a0SAchim Leubner #define SA_SASDEV_SMP_BIT         SA_IDFRM_SMP_BIT  /* SMP Initiator port */
27054e1bc9a0SAchim Leubner #define SA_SASDEV_SATA_BIT        SA_IDFRM_SATA_BIT /* SATA device, valid in the discovery response only */
27064e1bc9a0SAchim Leubner 
27074e1bc9a0SAchim Leubner #define SA_SASDEV_IS_SSP_INITIATOR(sasDev) \
27084e1bc9a0SAchim Leubner   (((sasDev)->initiator_ssp_stp_smp & SA_SASDEV_SSP_BIT) == SA_SASDEV_SSP_BIT)
27094e1bc9a0SAchim Leubner 
27104e1bc9a0SAchim Leubner #define SA_SASDEV_IS_STP_INITIATOR(sasDev) \
27114e1bc9a0SAchim Leubner   (((sasDev)->initiator_ssp_stp_smp & SA_SASDEV_STP_BIT) == SA_SASDEV_STP_BIT)
27124e1bc9a0SAchim Leubner 
27134e1bc9a0SAchim Leubner #define SA_SASDEV_IS_SMP_INITIATOR(sasDev) \
27144e1bc9a0SAchim Leubner   (((sasDev)->initiator_ssp_stp_smp & SA_SASDEV_SMP_BIT) == SA_SASDEV_SMP_BIT)
27154e1bc9a0SAchim Leubner 
27164e1bc9a0SAchim Leubner #define SA_SASDEV_IS_SSP_TARGET(sasDev) \
27174e1bc9a0SAchim Leubner   (((sasDev)->target_ssp_stp_smp & SA_SASDEV_SSP_BIT) == SA_SASDEV_SSP_BIT)
27184e1bc9a0SAchim Leubner 
27194e1bc9a0SAchim Leubner #define SA_SASDEV_IS_STP_TARGET(sasDev) \
27204e1bc9a0SAchim Leubner   (((sasDev)->target_ssp_stp_smp & SA_SASDEV_STP_BIT) == SA_SASDEV_STP_BIT)
27214e1bc9a0SAchim Leubner 
27224e1bc9a0SAchim Leubner #define SA_SASDEV_IS_SMP_TARGET(sasDev) \
27234e1bc9a0SAchim Leubner   (((sasDev)->target_ssp_stp_smp & SA_SASDEV_SMP_BIT) == SA_SASDEV_SMP_BIT)
27244e1bc9a0SAchim Leubner 
27254e1bc9a0SAchim Leubner #define SA_SASDEV_IS_SATA_DEVICE(sasDev) \
27264e1bc9a0SAchim Leubner   (((sasDev)->target_ssp_stp_smp & SA_SASDEV_SATA_BIT) == SA_SASDEV_SATA_BIT)
27274e1bc9a0SAchim Leubner 
27284e1bc9a0SAchim Leubner 
27294e1bc9a0SAchim Leubner 
27304e1bc9a0SAchim Leubner 
27314e1bc9a0SAchim Leubner /** \brief the data structure describe SG list
27324e1bc9a0SAchim Leubner  *
27334e1bc9a0SAchim Leubner  * the data structure describe SG list
27344e1bc9a0SAchim Leubner  *
27354e1bc9a0SAchim Leubner  */
27364e1bc9a0SAchim Leubner typedef struct _SASG_DESCRIPTOR
27374e1bc9a0SAchim Leubner {
27384e1bc9a0SAchim Leubner   bit32   sgLower;  /**< Lower 32 bits of data area physical address */
27394e1bc9a0SAchim Leubner   bit32   sgUpper;  /**< Upper 32 bits of data area physical address */
27404e1bc9a0SAchim Leubner   bit32   len;      /**< Total data length in bytes */
27414e1bc9a0SAchim Leubner } SASG_DESCRIPTOR, * PSASG_DESCRIPTOR;
27424e1bc9a0SAchim Leubner 
27434e1bc9a0SAchim Leubner /** \brief data structure used to pass information about the scatter-gather list to the LL Layer
27444e1bc9a0SAchim Leubner  *
27454e1bc9a0SAchim Leubner  * The ESGL pages are uncached, have a configurable number of SGL
27464e1bc9a0SAchim Leubner  * of (min, max) = (1, 10), and are 16-byte aligned. Although
27474e1bc9a0SAchim Leubner  * the application can configure the page size, the size must be
27484e1bc9a0SAchim Leubner  * incremented in TBD-byte increments. Refer the hardware
27494e1bc9a0SAchim Leubner  * documentation for more detail on the format of ESGL
27504e1bc9a0SAchim Leubner  * structure.
27514e1bc9a0SAchim Leubner  *
27524e1bc9a0SAchim Leubner  */
27534e1bc9a0SAchim Leubner typedef struct agsaSgl_s
27544e1bc9a0SAchim Leubner {
27554e1bc9a0SAchim Leubner   bit32             sgLower;     /**< Lower 32 bits of data area physical address */
27564e1bc9a0SAchim Leubner   bit32             sgUpper;     /**< Upper 32 bits of data area physical address */
27574e1bc9a0SAchim Leubner   bit32             len;         /**< Total data length in bytes */
27584e1bc9a0SAchim Leubner   bit32             extReserved; /**< bit31 is for extended sgl list */
27594e1bc9a0SAchim Leubner } agsaSgl_t;
27604e1bc9a0SAchim Leubner 
27614e1bc9a0SAchim Leubner /** \brief data structure is used to pass information about the extended
27624e1bc9a0SAchim Leubner  *  scatter-gather list (ESGL) to the LL Layer
27634e1bc9a0SAchim Leubner  *
27644e1bc9a0SAchim Leubner  * The agsaEsgl_t data structure is used to pass information about the
27654e1bc9a0SAchim Leubner  * extended scatter-gather list (ESGL) to the LL Layer.
27664e1bc9a0SAchim Leubner  *
27674e1bc9a0SAchim Leubner  * When ESGL is used, its starting address is specified the first descriptor
27684e1bc9a0SAchim Leubner  * entry (i.e. descriptor[0]) in agsaSgl_t structure.
27694e1bc9a0SAchim Leubner  *
27704e1bc9a0SAchim Leubner  * The ESGL pages are uncached, have a fixed number of SGL of 10, and are
27714e1bc9a0SAchim Leubner  * 16-byte aligned. Refer the hardware documentation for more
27724e1bc9a0SAchim Leubner  * detail on ESGL.
27734e1bc9a0SAchim Leubner  *
27744e1bc9a0SAchim Leubner  */
27754e1bc9a0SAchim Leubner typedef struct agsaEsgl_s
27764e1bc9a0SAchim Leubner {
27774e1bc9a0SAchim Leubner   agsaSgl_t descriptor[MAX_ESGL_ENTRIES];
27784e1bc9a0SAchim Leubner } agsaEsgl_t;
27794e1bc9a0SAchim Leubner 
27804e1bc9a0SAchim Leubner /** \brief data structure describes an SSP Command INFORMATION UNIT
27814e1bc9a0SAchim Leubner  *
27824e1bc9a0SAchim Leubner  * data structure describes an SSP Command INFORMATION UNIT used for SSP command and is part of
27834e1bc9a0SAchim Leubner  * the SSP frame.
27844e1bc9a0SAchim Leubner  *
27854e1bc9a0SAchim Leubner  * Currently, Additional CDB length is supported to 16 bytes
27864e1bc9a0SAchim Leubner  *
27874e1bc9a0SAchim Leubner  */
27884e1bc9a0SAchim Leubner #define MAX_CDB_LEN 32
27894e1bc9a0SAchim Leubner typedef struct agsaSSPCmdInfoUnitExt_s
27904e1bc9a0SAchim Leubner {
27914e1bc9a0SAchim Leubner   bit8  lun[8];
27924e1bc9a0SAchim Leubner   bit8  reserved1;
27934e1bc9a0SAchim Leubner   bit8  efb_tp_taskAttribute;
27944e1bc9a0SAchim Leubner   bit8  reserved2;
27954e1bc9a0SAchim Leubner   bit8  additionalCdbLen;
27964e1bc9a0SAchim Leubner   bit8  cdb[MAX_CDB_LEN];
27974e1bc9a0SAchim Leubner } agsaSSPCmdInfoUnitExt_t ;
27984e1bc9a0SAchim Leubner 
27994e1bc9a0SAchim Leubner #define DIF_UDT_SIZE                6
28004e1bc9a0SAchim Leubner 
28014e1bc9a0SAchim Leubner /* difAction in agsaDif_t */
28024e1bc9a0SAchim Leubner #define AGSA_DIF_INSERT                     0
28034e1bc9a0SAchim Leubner #define AGSA_DIF_VERIFY_FORWARD             1
28044e1bc9a0SAchim Leubner #define AGSA_DIF_VERIFY_DELETE              2
28054e1bc9a0SAchim Leubner #define AGSA_DIF_VERIFY_REPLACE             3
28064e1bc9a0SAchim Leubner #define AGSA_DIF_VERIFY_UDT_REPLACE_CRC     5
28074e1bc9a0SAchim Leubner #define AGSA_DIF_REPLACE_UDT_REPLACE_CRC    7
28084e1bc9a0SAchim Leubner 
28094e1bc9a0SAchim Leubner #define agsaDIFSectorSize512                0
28104e1bc9a0SAchim Leubner #define agsaDIFSectorSize520                1
28114e1bc9a0SAchim Leubner #define agsaDIFSectorSize4096               2
28124e1bc9a0SAchim Leubner #define agsaDIFSectorSize4160               3
28134e1bc9a0SAchim Leubner 
28144e1bc9a0SAchim Leubner 
28154e1bc9a0SAchim Leubner 
28164e1bc9a0SAchim Leubner typedef struct agsaDif_s
28174e1bc9a0SAchim Leubner {
28184e1bc9a0SAchim Leubner   agBOOLEAN enableDIFPerLA;
28194e1bc9a0SAchim Leubner   bit32 flags;
28204e1bc9a0SAchim Leubner   bit16 initialIOSeed;
28214e1bc9a0SAchim Leubner   bit16 reserved;
28224e1bc9a0SAchim Leubner   bit32 DIFPerLAAddrLo;
28234e1bc9a0SAchim Leubner   bit32 DIFPerLAAddrHi;
28244e1bc9a0SAchim Leubner   bit16 DIFPerLARegion0SecCount;
28254e1bc9a0SAchim Leubner   bit16 Reserved2;
28264e1bc9a0SAchim Leubner   bit8 udtArray[DIF_UDT_SIZE];
28274e1bc9a0SAchim Leubner   bit8 udrtArray[DIF_UDT_SIZE];
28284e1bc9a0SAchim Leubner } agsaDif_t;
28294e1bc9a0SAchim Leubner 
28304e1bc9a0SAchim Leubner 
28314e1bc9a0SAchim Leubner /* From LL SDK2 */
28324e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_ACTION            0x00000007  /* 0-2*/
28334e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_CRC_VER           0x00000008  /* 3 */
28344e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_CRC_INV           0x00000010  /* 4 */
28354e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_CRC_SEED          0x00000020  /* 5 */
28364e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDT_REF_TAG       0x00000040  /* 6 */
28374e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDT_APP_TAG       0x00000080  /* 7 */
28384e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTR_REF_BLKCOUNT 0x00000100  /* 8 */
28394e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTR_APP_BLKCOUNT 0x00000200  /* 9 */
28404e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_CUST_APP_TAG      0x00000C00  /* 10 11*/
28414e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_EPRC              0x00001000  /* 12 */
28424e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_Reserved          0x0000E000  /* 13 14 15*/
28434e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_MASK    0x00070000  /* 16 17 18 */
28444e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_SHIFT   16
28454e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_512     0x00000000  /* */
28464e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_520     0x00010000  /* 16 */
28474e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_4096    0x00020000  /* 17 */
28484e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_BLOCKSIZE_4160    0x00030000  /* 16 17 */
28494e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTVMASK          0x03F00000  /* 20 21 22 23 24 25 */
28504e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTV_SHIFT        20
28514e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTUPMASK         0xF6000000  /* 26 27 28 29 30 31  */
28524e1bc9a0SAchim Leubner #define DIF_FLAG_BITS_UDTUPSHIFT        26
28534e1bc9a0SAchim Leubner 
28544e1bc9a0SAchim Leubner typedef struct agsaEncryptDek_s
28554e1bc9a0SAchim Leubner {
28564e1bc9a0SAchim Leubner     bit32          dekTable;
28574e1bc9a0SAchim Leubner     bit32          dekIndex;
28584e1bc9a0SAchim Leubner } agsaEncryptDek_t;
28594e1bc9a0SAchim Leubner 
28604e1bc9a0SAchim Leubner typedef struct agsaEncrypt_s
28614e1bc9a0SAchim Leubner {
28624e1bc9a0SAchim Leubner     agsaEncryptDek_t dekInfo;
28634e1bc9a0SAchim Leubner     bit32           kekIndex;
28644e1bc9a0SAchim Leubner     agBOOLEAN       keyTagCheck;
28654e1bc9a0SAchim Leubner     agBOOLEAN       enableEncryptionPerLA; /* new */
28664e1bc9a0SAchim Leubner     bit32           sectorSizeIndex;
28674e1bc9a0SAchim Leubner     bit32           cipherMode;
28684e1bc9a0SAchim Leubner     bit32           keyTag_W0;
28694e1bc9a0SAchim Leubner     bit32           keyTag_W1;
28704e1bc9a0SAchim Leubner     bit32           tweakVal_W0;
28714e1bc9a0SAchim Leubner     bit32           tweakVal_W1;
28724e1bc9a0SAchim Leubner     bit32           tweakVal_W2;
28734e1bc9a0SAchim Leubner     bit32           tweakVal_W3;
28744e1bc9a0SAchim Leubner     bit32           EncryptionPerLAAddrLo; /* new */
28754e1bc9a0SAchim Leubner     bit32           EncryptionPerLAAddrHi; /* new */
28764e1bc9a0SAchim Leubner     bit16           EncryptionPerLRegion0SecCount; /* new */
28774e1bc9a0SAchim Leubner     bit16           reserved;
28784e1bc9a0SAchim Leubner } agsaEncrypt_t;
28794e1bc9a0SAchim Leubner 
28804e1bc9a0SAchim Leubner /** \brief data structure describes a SAS SSP command request to be sent to the target device
28814e1bc9a0SAchim Leubner  *
28824e1bc9a0SAchim Leubner  * data structure describes a SAS SSP command request to be sent to the
28834e1bc9a0SAchim Leubner  * target device. This structure limits the CDB length in SSP
28844e1bc9a0SAchim Leubner  * command up to 16 bytes long.
28854e1bc9a0SAchim Leubner  *
28864e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued to
28874e1bc9a0SAchim Leubner  * saSSPStart() and is passed as an agsaSASRequestBody_t .
28884e1bc9a0SAchim Leubner  *
28894e1bc9a0SAchim Leubner  */
28904e1bc9a0SAchim Leubner typedef struct agsaSSPInitiatorRequest_s
28914e1bc9a0SAchim Leubner {
28924e1bc9a0SAchim Leubner   agsaSgl_t              agSgl;             /**< This structure is used to define either
28934e1bc9a0SAchim Leubner                                                  an ESGL list or a single SGL for the SSP
28944e1bc9a0SAchim Leubner                                                  command operation */
28954e1bc9a0SAchim Leubner   bit32                  dataLength;        /**< Total data length in bytes */
28964e1bc9a0SAchim Leubner   bit16                  firstBurstSize;    /**< First Burst Size field as defined by
28974e1bc9a0SAchim Leubner                                                  SAS specification */
28984e1bc9a0SAchim Leubner   bit16                  flag;              /**< bit1-0 TLR as SAS specification
28994e1bc9a0SAchim Leubner                                                  bit31-2 reserved */
29004e1bc9a0SAchim Leubner   agsaSSPCmdInfoUnit_t   sspCmdIU;          /**< Structure containing SSP Command
29014e1bc9a0SAchim Leubner                                                  INFORMATION UNIT */
29024e1bc9a0SAchim Leubner   agsaDif_t               dif;
29034e1bc9a0SAchim Leubner   agsaEncrypt_t           encrypt;
29044e1bc9a0SAchim Leubner #ifdef SA_TESTBASE_EXTRA
29054e1bc9a0SAchim Leubner   /* Added by TestBase */
29064e1bc9a0SAchim Leubner   bit16                   bstIndex;
29074e1bc9a0SAchim Leubner #endif /*  SA_TESTBASE_EXTRA */
29084e1bc9a0SAchim Leubner } agsaSSPInitiatorRequest_t;
29094e1bc9a0SAchim Leubner 
29104e1bc9a0SAchim Leubner /** \brief data structure describes a SAS SSP command request Ext to be sent to the target device
29114e1bc9a0SAchim Leubner  *
29124e1bc9a0SAchim Leubner  * data structure describes a SAS SSP command request to be sent to the
29134e1bc9a0SAchim Leubner  * target device. This structure support the CDB length in SSP
29144e1bc9a0SAchim Leubner  * command more than 16 bytes long.
29154e1bc9a0SAchim Leubner  *
29164e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued to
29174e1bc9a0SAchim Leubner  * saSSPStart() and is passed as an agsaSASRequestBody_t .
29184e1bc9a0SAchim Leubner  *
29194e1bc9a0SAchim Leubner  */
29204e1bc9a0SAchim Leubner typedef struct agsaSSPInitiatorRequestExt_s
29214e1bc9a0SAchim Leubner {
29224e1bc9a0SAchim Leubner   agsaSgl_t              agSgl;             /**< This structure is used to define either
29234e1bc9a0SAchim Leubner                                                  an ESGL list or a single SGL for the SSP
29244e1bc9a0SAchim Leubner                                                  command operation */
29254e1bc9a0SAchim Leubner   bit32                   dataLength;
29264e1bc9a0SAchim Leubner   bit16                   firstBurstSize;
29274e1bc9a0SAchim Leubner   bit16                   flag;
29284e1bc9a0SAchim Leubner   agsaSSPCmdInfoUnitExt_t sspCmdIUExt;
29294e1bc9a0SAchim Leubner   agsaDif_t               dif;
29304e1bc9a0SAchim Leubner   agsaEncrypt_t           encrypt;
29314e1bc9a0SAchim Leubner } agsaSSPInitiatorRequestExt_t;
29324e1bc9a0SAchim Leubner 
29334e1bc9a0SAchim Leubner 
29344e1bc9a0SAchim Leubner typedef struct agsaSSPInitiatorRequestIndirect_s
29354e1bc9a0SAchim Leubner {
29364e1bc9a0SAchim Leubner   agsaSgl_t              agSgl;             /**< This structure is used to define either
29374e1bc9a0SAchim Leubner                                                  an ESGL list or a single SGL for the SSP
29384e1bc9a0SAchim Leubner                                                  command operation */
29394e1bc9a0SAchim Leubner   bit32                   dataLength;
29404e1bc9a0SAchim Leubner   bit16                   firstBurstSize;
29414e1bc9a0SAchim Leubner   bit16                   flag;
29424e1bc9a0SAchim Leubner   bit32                   sspInitiatorReqAddrUpper32; /**< The upper 32 bits of the 64-bit physical  DMA address of the SSP initiator request buffer */
29434e1bc9a0SAchim Leubner   bit32                   sspInitiatorReqAddrLower32; /**< The lower 32 bits of the 64-bit physical  DMA address of the SSP initiator request buffer */
29444e1bc9a0SAchim Leubner   bit32                   sspInitiatorReqLen;         /**< Specifies the length of the SSP initiator request in bytes */
29454e1bc9a0SAchim Leubner   agsaDif_t               dif;
29464e1bc9a0SAchim Leubner   agsaEncrypt_t           encrypt;
29474e1bc9a0SAchim Leubner 
29484e1bc9a0SAchim Leubner }agsaSSPInitiatorRequestIndirect_t;
29494e1bc9a0SAchim Leubner 
29504e1bc9a0SAchim Leubner 
29514e1bc9a0SAchim Leubner 
29524e1bc9a0SAchim Leubner 
29534e1bc9a0SAchim Leubner /** \brief data structure describes a SAS SSP target read and write request
29544e1bc9a0SAchim Leubner  *
29554e1bc9a0SAchim Leubner  * The agsaSSPTargetRequest_t data structure describes a SAS SSP target read
29564e1bc9a0SAchim Leubner  * and write request to be issued on the port. It includes the
29574e1bc9a0SAchim Leubner  * length of the data to be received or sent, an offset into the
29584e1bc9a0SAchim Leubner  * data block where the transfer is to start, and a list of
29594e1bc9a0SAchim Leubner  * scatter-gather buffers.
29604e1bc9a0SAchim Leubner  *
29614e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued
29624e1bc9a0SAchim Leubner  * to saSSPStart() and is passed as an agsaSASRequestBody_t .
29634e1bc9a0SAchim Leubner  *
29644e1bc9a0SAchim Leubner  */
29654e1bc9a0SAchim Leubner /** bit definitions for sspOption
29664e1bc9a0SAchim Leubner     Bit 0-1: Transport Layer Retry setting for other phase:
29674e1bc9a0SAchim Leubner     00b: No retry
29684e1bc9a0SAchim Leubner     01b: Retry on ACK/NAK timeout
29694e1bc9a0SAchim Leubner     10b: Retry on NAK received
29704e1bc9a0SAchim Leubner     11b: Retry on both ACK/NAK timeout and NAK received
29714e1bc9a0SAchim Leubner     Bit 2-3: Transport Layer Retry setting for data phase:
29724e1bc9a0SAchim Leubner     00b: No retry
29734e1bc9a0SAchim Leubner     01b: Retry on ACK/NAK timeout
29744e1bc9a0SAchim Leubner     10b: Retry on NAK received
29754e1bc9a0SAchim Leubner     11b: Retry on both ACK/NAK timeout and NAK received
29764e1bc9a0SAchim Leubner     Bit 4:  Retry Data Frame. Valid only on write command. Indicates whether Target supports RTL for this particular IO.
29774e1bc9a0SAchim Leubner     1b: enabled
29784e1bc9a0SAchim Leubner     0b: disabled
29794e1bc9a0SAchim Leubner     Bit 5: Auto good response on successful read (data transfer from target to initiator) request.
29804e1bc9a0SAchim Leubner     1b: Enabled
29814e1bc9a0SAchim Leubner     0b: Disabled
29824e1bc9a0SAchim Leubner     Bits 6-15 : Reserved.
29834e1bc9a0SAchim Leubner  */
29844e1bc9a0SAchim Leubner typedef struct agsaSSPTargetRequest_s
29854e1bc9a0SAchim Leubner {
29864e1bc9a0SAchim Leubner   agsaSgl_t     agSgl;        /**< This structure is used to define either an ESGL list or
29874e1bc9a0SAchim Leubner                                  a single SGL for the target read or write operation */
29884e1bc9a0SAchim Leubner   bit32         dataLength;   /**< Specifies the amount of data to be sent in this data phase */
29894e1bc9a0SAchim Leubner   bit32         offset;       /**< Specifies the offset into the overall data block
29904e1bc9a0SAchim Leubner                                  where this data phase is to begin */
29914e1bc9a0SAchim Leubner   bit16         agTag;        /**< Tag from ossaSSPReqReceived(). */
29924e1bc9a0SAchim Leubner   bit16         sspOption;    /**< SSP option for retry */
29934e1bc9a0SAchim Leubner   agsaDif_t     dif;
29944e1bc9a0SAchim Leubner } agsaSSPTargetRequest_t;
29954e1bc9a0SAchim Leubner 
29964e1bc9a0SAchim Leubner #define SSP_OPTION_BITS 0x3F  /**< bit5-AGR, bit4-RDF bit3,2-RTE, bit1,0-AN */
29974e1bc9a0SAchim Leubner #define SSP_OPTION_ODS 0x8000 /**< bit15-ODS */
29984e1bc9a0SAchim Leubner 
29994e1bc9a0SAchim Leubner #define SSP_OPTION_OTHR_NO_RETRY                  0
30004e1bc9a0SAchim Leubner #define SSP_OPTION_OTHR_RETRY_ON_ACK_NAK_TIMEOUT  1
30014e1bc9a0SAchim Leubner #define SSP_OPTION_OTHR_RETRY_ON_NAK_RECEIVED     2
30024e1bc9a0SAchim Leubner #define SSP_OPTION_OTHR_RETRY_ON_BOTH_ACK_NAK_TIMEOUT_AND_NAK_RECEIVED  3
30034e1bc9a0SAchim Leubner 
30044e1bc9a0SAchim Leubner #define SSP_OPTION_DATA_NO_RETRY                   0
30054e1bc9a0SAchim Leubner #define SSP_OPTION_DATA_RETRY_ON_ACK_NAK_TIMEOUT   1
30064e1bc9a0SAchim Leubner #define SSP_OPTION_DATA_RETRY_ON_NAK_RECEIVED      2
30074e1bc9a0SAchim Leubner #define SSP_OPTION_DATA_RETRY_ON_BOTH_ACK_NAK_TIMEOUT_AND_NAK_RECEIVED  3
30084e1bc9a0SAchim Leubner 
30094e1bc9a0SAchim Leubner #define SSP_OPTION_RETRY_DATA_FRAME_ENABLED (1 << SHIFT4)
30104e1bc9a0SAchim Leubner #define SSP_OPTION_AUTO_GOOD_RESPONSE       (1 << SHIFT5)
30114e1bc9a0SAchim Leubner #define SSP_OPTION_ENCRYPT                  (1 << SHIFT6)
30124e1bc9a0SAchim Leubner #define SSP_OPTION_DIF                      (1 << SHIFT7)
30134e1bc9a0SAchim Leubner #define SSP_OPTION_OVERRIDE_DEVICE_STATE     (1 << SHIFT15)
30144e1bc9a0SAchim Leubner 
30154e1bc9a0SAchim Leubner 
30164e1bc9a0SAchim Leubner /** \brief data structure describes a SAS SSP target response to be issued
30174e1bc9a0SAchim Leubner  *  on the port
30184e1bc9a0SAchim Leubner  *
30194e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued to
30204e1bc9a0SAchim Leubner  * saSSPStart() and is passed as an agsaSASRequestBody_t
30214e1bc9a0SAchim Leubner  *
30224e1bc9a0SAchim Leubner  */
30234e1bc9a0SAchim Leubner typedef struct agsaSSPTargetResponse_s
30244e1bc9a0SAchim Leubner {
30254e1bc9a0SAchim Leubner   bit32       agTag;            /**< Tag from ossaSSPReqReceived(). */
30264e1bc9a0SAchim Leubner   void        *frameBuf;
30274e1bc9a0SAchim Leubner   bit32       respBufLength;    /**< Specifies the length of the Response buffer */
30284e1bc9a0SAchim Leubner   bit32       respBufUpper;     /**< Upper 32 bit of physical address of OS Layer
30294e1bc9a0SAchim Leubner                                      allocated the Response buffer
30304e1bc9a0SAchim Leubner                                      (agsaSSPResponseInfoUnit_t).
30314e1bc9a0SAchim Leubner                                      Valid only when respBufLength is not zero  */
30324e1bc9a0SAchim Leubner   bit32       respBufLower;     /**< Lower 32 bit of physical address of OS Layer
30334e1bc9a0SAchim Leubner                                      allocated the Response buffer
30344e1bc9a0SAchim Leubner                                      (agsaSSPResponseInfoUnit_t).
30354e1bc9a0SAchim Leubner                                      Valid only when respBufLength is not zero  */
30364e1bc9a0SAchim Leubner   bit32       respOption;       /**< Bit 0-1: ACK and NAK retry option:
30374e1bc9a0SAchim Leubner                                      00b: No retry
30384e1bc9a0SAchim Leubner                                      01b: Retry on ACK/NAK timeout
30394e1bc9a0SAchim Leubner                                      10b: Retry on NAK received
30404e1bc9a0SAchim Leubner                                      11b: Retry on both ACK/NAK timeout and NAK received */
30414e1bc9a0SAchim Leubner } agsaSSPTargetResponse_t;
30424e1bc9a0SAchim Leubner 
30434e1bc9a0SAchim Leubner #define RESP_OPTION_BITS 0x3    /** bit0-1 */
30444e1bc9a0SAchim Leubner #define RESP_OPTION_ODS 0x8000  /** bit15 */
30454e1bc9a0SAchim Leubner 
30464e1bc9a0SAchim Leubner /** \brief data structure describes a SMP request or response frame to be sent on the SAS port
30474e1bc9a0SAchim Leubner  *
30484e1bc9a0SAchim Leubner  * The agsaSMPFrame_t data structure describes a SMP request or response
30494e1bc9a0SAchim Leubner  * frame to be issued or sent on the SAS port.
30504e1bc9a0SAchim Leubner  *
30514e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued to
30524e1bc9a0SAchim Leubner  * saSMPStart() and is passed as an agsaSASRequestBody_t .
30534e1bc9a0SAchim Leubner  *
30544e1bc9a0SAchim Leubner  */
30554e1bc9a0SAchim Leubner typedef struct agsaSMPFrame_s
30564e1bc9a0SAchim Leubner {
30574e1bc9a0SAchim Leubner   void                  *outFrameBuf;        /**< if payload is less than 32 bytes,A virtual
30584e1bc9a0SAchim Leubner                                                frameBuf can be used. instead of physical
30594e1bc9a0SAchim Leubner                                                address. Set to NULL and use physical
30604e1bc9a0SAchim Leubner                                                address if payload is > 32 bytes */
30614e1bc9a0SAchim Leubner   bit32                 outFrameAddrUpper32; /**< The upper 32 bits of the 64-bit physical
30624e1bc9a0SAchim Leubner                                                DMA address of the SMP frame buffer */
30634e1bc9a0SAchim Leubner   bit32                 outFrameAddrLower32; /**< The lower 32 bits of the 64-bit physical
30644e1bc9a0SAchim Leubner                                                DMA address of the SMP frame buffer */
30654e1bc9a0SAchim Leubner   bit32                 outFrameLen;         /**< Specifies the length of the SMP request
30664e1bc9a0SAchim Leubner                                                frame excluding the CRC field in bytes */
30674e1bc9a0SAchim Leubner   bit32                 inFrameAddrUpper32;  /**< The upper 32 bits of the 64-bit phsical address
30684e1bc9a0SAchim Leubner                                                of DMA address of response SMP Frame buffer */
30694e1bc9a0SAchim Leubner   bit32                 inFrameAddrLower32;  /**< The lower 32 bits of the 64-bit phsical address
30704e1bc9a0SAchim Leubner                                                of DMA address of response SMP Frame buffer */
30714e1bc9a0SAchim Leubner   bit32                 inFrameLen;          /**< Specifies the length of the SMP response
30724e1bc9a0SAchim Leubner                                                frame excluding the CRC field in bytes */
30734e1bc9a0SAchim Leubner   bit32                 expectedRespLen;     /**< Specifies the length of SMP Response */
30744e1bc9a0SAchim Leubner   bit32                 flag;                /** For the SPCv controller:
30754e1bc9a0SAchim Leubner                                                  Bit 0: Indirect Response (IR). This indicates
30764e1bc9a0SAchim Leubner                                                         direct or indirect mode for SMP response frame
30774e1bc9a0SAchim Leubner                                                         to be received.
30784e1bc9a0SAchim Leubner                                                     0b: Direct mode
30794e1bc9a0SAchim Leubner                                                     1b: Indirect mode
30804e1bc9a0SAchim Leubner 
30814e1bc9a0SAchim Leubner                                                  Bit 1: Indirect Payload (IP). This indicates
30824e1bc9a0SAchim Leubner                                                         direct or indirect mode for SMP request frame
30834e1bc9a0SAchim Leubner                                                         to be sent.
30844e1bc9a0SAchim Leubner                                                     0b: Direct mode
30854e1bc9a0SAchim Leubner                                                     1b: Indirect mode
30864e1bc9a0SAchim Leubner 
30874e1bc9a0SAchim Leubner                                                  Bits 2-31: Reserved
30884e1bc9a0SAchim Leubner                                                 For the SPC controller: This is not applicable.
30894e1bc9a0SAchim Leubner                                                 */
30904e1bc9a0SAchim Leubner 
30914e1bc9a0SAchim Leubner } agsaSMPFrame_t;
30924e1bc9a0SAchim Leubner 
30934e1bc9a0SAchim Leubner #define smpFrameFlagDirectResponse   0
30944e1bc9a0SAchim Leubner #define smpFrameFlagIndirectResponse 1
30954e1bc9a0SAchim Leubner #define smpFrameFlagDirectPayload    0
30964e1bc9a0SAchim Leubner #define smpFrameFlagIndirectPayload  2
30974e1bc9a0SAchim Leubner 
30984e1bc9a0SAchim Leubner /** \brief union data structure specifies a request
30994e1bc9a0SAchim Leubner  *
31004e1bc9a0SAchim Leubner  * union data structure specifies a request
31014e1bc9a0SAchim Leubner  */
31024e1bc9a0SAchim Leubner typedef union agsaSASRequestBody_u
31034e1bc9a0SAchim Leubner {
31044e1bc9a0SAchim Leubner   agsaSSPInitiatorRequest_t                 sspInitiatorReq;  /**< Structure containing the SSP initiator request, Support up to 16 bytes CDB */
31054e1bc9a0SAchim Leubner   agsaSSPInitiatorRequestExt_t           sspInitiatorReqExt;  /**< Structure containing the SSP initiator request for CDB > 16 bytes */
31064e1bc9a0SAchim Leubner   agsaSSPInitiatorRequestIndirect_t sspInitiatorReqIndirect;  /**< Structure containing the SSP indirect initiator request */
31074e1bc9a0SAchim Leubner   agsaSSPTargetRequest_t                       sspTargetReq;  /**< Structure containing the SSP Target request */
31084e1bc9a0SAchim Leubner   agsaSSPScsiTaskMgntReq_t                   sspTaskMgntReq;  /**< Structure containing the SSP SCSI Task Management request */
31094e1bc9a0SAchim Leubner   agsaSSPTargetResponse_t                 sspTargetResponse;  /**< Structure containing the SSP Target response. */
31104e1bc9a0SAchim Leubner   agsaSMPFrame_t                                   smpFrame;  /**< Structure containing SMP request or response frame */
31114e1bc9a0SAchim Leubner }agsaSASRequestBody_t;
31124e1bc9a0SAchim Leubner 
31134e1bc9a0SAchim Leubner 
31144e1bc9a0SAchim Leubner 
31154e1bc9a0SAchim Leubner 
31164e1bc9a0SAchim Leubner /** \brief data structure describes an STP or direct connect SATA command
31174e1bc9a0SAchim Leubner  *
31184e1bc9a0SAchim Leubner  * The agsaSATAInitiatorRequest_t data structure describes an STP or direct
31194e1bc9a0SAchim Leubner  * connect SATA command request to be sent to the device and
31204e1bc9a0SAchim Leubner  * passed as a parameter to saSATAStart() function.
31214e1bc9a0SAchim Leubner  *
31224e1bc9a0SAchim Leubner  * This structure is an encapsulation of SATA FIS (Frame Information
31234e1bc9a0SAchim Leubner  * Structures), which enables the execution of ATA command
31244e1bc9a0SAchim Leubner  * descriptor using SATA transport
31254e1bc9a0SAchim Leubner  *
31264e1bc9a0SAchim Leubner  */
31274e1bc9a0SAchim Leubner typedef struct agsaSATAInitiatorRequest_s
31284e1bc9a0SAchim Leubner {
31294e1bc9a0SAchim Leubner   agsaSgl_t         agSgl;      /**< This structure is used to define either an ESGL
31304e1bc9a0SAchim Leubner                                      list or a single SGL for operation that involves
31314e1bc9a0SAchim Leubner                                      DMA transfer */
31324e1bc9a0SAchim Leubner 
31334e1bc9a0SAchim Leubner   bit32             dataLength; /**< Total data length in bytes */
31344e1bc9a0SAchim Leubner 
31354e1bc9a0SAchim Leubner   bit32             option;     /**< Operational option, defined using the bit field.
31364e1bc9a0SAchim Leubner                                      b7-1: reserved
31374e1bc9a0SAchim Leubner                                      b0:   AGSA-STP-CLOSE-CLEAR-AFFILIATION */
31384e1bc9a0SAchim Leubner 
31394e1bc9a0SAchim Leubner   agsaSATAHostFis_t fis;        /**< The FIS request */
31404e1bc9a0SAchim Leubner   agsaDif_t         dif;
31414e1bc9a0SAchim Leubner   agsaEncrypt_t     encrypt;
31424e1bc9a0SAchim Leubner   bit8              scsiCDB[16];
31434e1bc9a0SAchim Leubner #ifdef SA_TESTBASE_EXTRA
31444e1bc9a0SAchim Leubner   /* Added by TestBase */
31454e1bc9a0SAchim Leubner   bit16             bstIndex;
31464e1bc9a0SAchim Leubner #endif /*  SA_TESTBASE_EXTRA */
31474e1bc9a0SAchim Leubner } agsaSATAInitiatorRequest_t;
31484e1bc9a0SAchim Leubner 
31494e1bc9a0SAchim Leubner 
31504e1bc9a0SAchim Leubner /* controller Configuration page */
31514e1bc9a0SAchim Leubner #define AGSA_SAS_PROTOCOL_TIMER_CONFIG_PAGE   0x04
31524e1bc9a0SAchim Leubner #define AGSA_INTERRUPT_CONFIGURATION_PAGE     0x05
31534e1bc9a0SAchim Leubner #define AGSA_IO_GENERAL_CONFIG_PAGE           0x06
31544e1bc9a0SAchim Leubner #define AGSA_ENCRYPTION_GENERAL_CONFIG_PAGE   0x20
31554e1bc9a0SAchim Leubner #define AGSA_ENCRYPTION_DEK_CONFIG_PAGE       0x21
31564e1bc9a0SAchim Leubner #define AGSA_ENCRYPTION_CONTROL_PARM_PAGE     0x22
31574e1bc9a0SAchim Leubner #define AGSA_ENCRYPTION_HMAC_CONFIG_PAGE      0x23
31584e1bc9a0SAchim Leubner 
31594e1bc9a0SAchim Leubner #ifdef HIALEAH_ENCRYPTION
31604e1bc9a0SAchim Leubner typedef struct agsaEncryptGeneralPage_s {
31614e1bc9a0SAchim Leubner   bit32             numberOfKeksPageCode;           /* 0x20 */
31624e1bc9a0SAchim Leubner   bit32             KeyCardIdKekIndex;
31634e1bc9a0SAchim Leubner   bit32             KeyCardId3_0;
31644e1bc9a0SAchim Leubner   bit32             KeyCardId7_4;
31654e1bc9a0SAchim Leubner   bit32             KeyCardId11_8;
31664e1bc9a0SAchim Leubner } agsaEncryptGeneralPage_t;
31674e1bc9a0SAchim Leubner #else
31684e1bc9a0SAchim Leubner typedef struct agsaEncryptGeneralPage_s {
31694e1bc9a0SAchim Leubner   bit32             pageCode;           /* 0x20 */
31704e1bc9a0SAchim Leubner   bit32             numberOfDeks;
31714e1bc9a0SAchim Leubner } agsaEncryptGeneralPage_t;
31724e1bc9a0SAchim Leubner #endif /* HIALEAH_ENCRYPTION */
31734e1bc9a0SAchim Leubner 
31744e1bc9a0SAchim Leubner #define AGSA_ENC_CONFIG_PAGE_KEK_NUMBER 0x0000FF00
31754e1bc9a0SAchim Leubner #define AGSA_ENC_CONFIG_PAGE_KEK_SHIFT  8
31764e1bc9a0SAchim Leubner 
31774e1bc9a0SAchim Leubner /* sTSDK 4.14   */
31784e1bc9a0SAchim Leubner typedef struct agsaEncryptDekConfigPage_s {
31794e1bc9a0SAchim Leubner   bit32             pageCode;
31804e1bc9a0SAchim Leubner   bit32             table0AddrLo;
31814e1bc9a0SAchim Leubner   bit32             table0AddrHi;
31824e1bc9a0SAchim Leubner   bit32             table0Entries;
31834e1bc9a0SAchim Leubner   bit32             table0BFES;
31844e1bc9a0SAchim Leubner   bit32             table1AddrLo;
31854e1bc9a0SAchim Leubner   bit32             table1AddrHi;
31864e1bc9a0SAchim Leubner   bit32             table1Entries;
31874e1bc9a0SAchim Leubner   bit32             table1BFES;
31884e1bc9a0SAchim Leubner } agsaEncryptDekConfigPage_t;
31894e1bc9a0SAchim Leubner 
31904e1bc9a0SAchim Leubner #define AGSA_ENC_DEK_CONFIG_PAGE_DEK_TABLE_NUMBER 0xF0000000
31914e1bc9a0SAchim Leubner #define AGSA_ENC_DEK_CONFIG_PAGE_DEK_TABLE_SHIFT SHIFT28
31924e1bc9a0SAchim Leubner #define AGSA_ENC_DEK_CONFIG_PAGE_DEK_CACHE_WAY    0x0F000000
31934e1bc9a0SAchim Leubner #define AGSA_ENC_DEK_CONFIG_PAGE_DEK_CACHE_SHIFT SHIFT24
31944e1bc9a0SAchim Leubner 
31954e1bc9a0SAchim Leubner /*sTSDK 4.18   */
31964e1bc9a0SAchim Leubner /* CCS (Current Crypto Services)  and NOPR (Number of Operators) are valid only in GET_CONTROLLER_CONFIG */
31974e1bc9a0SAchim Leubner /* NAR, CORCAP and USRCAP are valid only when AUT==1 */
31984e1bc9a0SAchim Leubner typedef struct agsaEncryptControlParamPage_s {
31994e1bc9a0SAchim Leubner   bit32          pageCode;           /* 0x22 */
32004e1bc9a0SAchim Leubner   bit32          CORCAP;             /* Crypto Officer Role Capabilities */
32014e1bc9a0SAchim Leubner   bit32          USRCAP;             /* User Role Capabilities */
32024e1bc9a0SAchim Leubner   bit32          CCS;                /* Current Crypto Services */
32034e1bc9a0SAchim Leubner   bit32          NOPR;               /* Number of Operators */
32044e1bc9a0SAchim Leubner } agsaEncryptControlParamPage_t;
32054e1bc9a0SAchim Leubner 
32064e1bc9a0SAchim Leubner typedef struct agsaEncryptInfo_s {
32074e1bc9a0SAchim Leubner   bit32          encryptionCipherMode;
32084e1bc9a0SAchim Leubner   bit32          encryptionSecurityMode;
32094e1bc9a0SAchim Leubner   bit32          status;
32104e1bc9a0SAchim Leubner   bit32          flag;
32114e1bc9a0SAchim Leubner } agsaEncryptInfo_t;
32124e1bc9a0SAchim Leubner 
32134e1bc9a0SAchim Leubner 
32144e1bc9a0SAchim Leubner #define OperatorAuthenticationEnable_AUT 1
32154e1bc9a0SAchim Leubner #define ReturnToFactoryMode_ARF          2
32164e1bc9a0SAchim Leubner 
32174e1bc9a0SAchim Leubner /*sTSDK 4.19   */
32184e1bc9a0SAchim Leubner typedef struct agsaEncryptSelfTestBitMap_s {
32194e1bc9a0SAchim Leubner 	bit32		AES_Test;
32204e1bc9a0SAchim Leubner 	bit32		KEY_WRAP_Test;
32214e1bc9a0SAchim Leubner 	bit32		HMAC_Test;
32224e1bc9a0SAchim Leubner } agsaEncryptSelfTestBitMap_t;
32234e1bc9a0SAchim Leubner 
32244e1bc9a0SAchim Leubner typedef struct  agsaEncryptSelfTestStatusBitMap_s{
32254e1bc9a0SAchim Leubner 	bit32		AES_Status;
32264e1bc9a0SAchim Leubner 	bit32		KEY_WRAP_Status;
32274e1bc9a0SAchim Leubner 	bit32		HMAC_Status;
32284e1bc9a0SAchim Leubner } agsaEncryptSelfTestStatusBitMap_t;
32294e1bc9a0SAchim Leubner 
32304e1bc9a0SAchim Leubner typedef struct agsaEncryptHMACTestDescriptor_s
32314e1bc9a0SAchim Leubner {
32324e1bc9a0SAchim Leubner   bit32   Dword0;
32334e1bc9a0SAchim Leubner   bit32   MsgAddrLo;
32344e1bc9a0SAchim Leubner   bit32   MsgAddrHi;
32354e1bc9a0SAchim Leubner   bit32   MsgLen;
32364e1bc9a0SAchim Leubner   bit32   DigestAddrLo;
32374e1bc9a0SAchim Leubner   bit32   DigestAddrHi;
32384e1bc9a0SAchim Leubner   bit32   KeyAddrLo;
32394e1bc9a0SAchim Leubner   bit32   KeyAddrHi;
32404e1bc9a0SAchim Leubner   bit32   KeyLen;
32414e1bc9a0SAchim Leubner } agsaEncryptHMACTestDescriptor_t;
32424e1bc9a0SAchim Leubner 
32434e1bc9a0SAchim Leubner typedef struct agsaEncryptHMACTestResult_s
32444e1bc9a0SAchim Leubner {
32454e1bc9a0SAchim Leubner   bit32   Dword0;
32464e1bc9a0SAchim Leubner   bit32   Dword[12];
32474e1bc9a0SAchim Leubner } agsaEncryptHMACTestResult_t;
32484e1bc9a0SAchim Leubner 
32494e1bc9a0SAchim Leubner typedef struct agsaEncryptSHATestDescriptor_s
32504e1bc9a0SAchim Leubner {
32514e1bc9a0SAchim Leubner   bit32   Dword0;
32524e1bc9a0SAchim Leubner   bit32   MsgAddrLo;
32534e1bc9a0SAchim Leubner   bit32   MsgAddrHi;
32544e1bc9a0SAchim Leubner   bit32   MsgLen;
32554e1bc9a0SAchim Leubner   bit32   DigestAddrLo;
32564e1bc9a0SAchim Leubner   bit32   DigestAddrHi;
32574e1bc9a0SAchim Leubner } agsaEncryptSHATestDescriptor_t;
32584e1bc9a0SAchim Leubner 
32594e1bc9a0SAchim Leubner typedef struct agsaEncryptSHATestResult_s
32604e1bc9a0SAchim Leubner {
32614e1bc9a0SAchim Leubner   bit32   Dword0;
32624e1bc9a0SAchim Leubner   bit32   Dword[12];
32634e1bc9a0SAchim Leubner } agsaEncryptSHATestResult_t;
32644e1bc9a0SAchim Leubner 
32654e1bc9a0SAchim Leubner /* types of self test */
32664e1bc9a0SAchim Leubner #define AGSA_BIST_TEST      0x1
32674e1bc9a0SAchim Leubner #define AGSA_HMAC_TEST      0x2
32684e1bc9a0SAchim Leubner #define AGSA_SHA_TEST       0x3
32694e1bc9a0SAchim Leubner 
32704e1bc9a0SAchim Leubner 
32714e1bc9a0SAchim Leubner /*sTSDK  4.13  */
32724e1bc9a0SAchim Leubner typedef struct agsaEncryptDekBlob_s {
32734e1bc9a0SAchim Leubner     bit8           dekBlob[80];
32744e1bc9a0SAchim Leubner } agsaEncryptDekBlob_t;
32754e1bc9a0SAchim Leubner 
32764e1bc9a0SAchim Leubner typedef struct agsaEncryptKekBlob_s {
32774e1bc9a0SAchim Leubner     bit8           kekBlob[48];
32784e1bc9a0SAchim Leubner } agsaEncryptKekBlob_t;
32794e1bc9a0SAchim Leubner 
32804e1bc9a0SAchim Leubner /*sTSDK  4.45  */
32814e1bc9a0SAchim Leubner typedef struct agsaEncryptHMACConfigPage_s
32824e1bc9a0SAchim Leubner {
32834e1bc9a0SAchim Leubner   bit32  PageCode;
32844e1bc9a0SAchim Leubner   bit32  CustomerTag;
32854e1bc9a0SAchim Leubner   bit32  KeyAddrLo;
32864e1bc9a0SAchim Leubner   bit32  KeyAddrHi;
32874e1bc9a0SAchim Leubner } agsaEncryptHMACConfigPage_t;
32884e1bc9a0SAchim Leubner 
32894e1bc9a0SAchim Leubner /*sTSDK  4.38  */
32904e1bc9a0SAchim Leubner #define AGSA_ID_SIZE 31
32914e1bc9a0SAchim Leubner typedef struct agsaID_s {
32924e1bc9a0SAchim Leubner    bit8   ID[AGSA_ID_SIZE];
32934e1bc9a0SAchim Leubner }agsaID_t;
32944e1bc9a0SAchim Leubner 
32954e1bc9a0SAchim Leubner 
32964e1bc9a0SAchim Leubner #define SA_OPR_MGMNT_FLAG_MASK  0x00003000
32974e1bc9a0SAchim Leubner #define SA_OPR_MGMNT_FLAG_SHIFT 12
32984e1bc9a0SAchim Leubner 
32994e1bc9a0SAchim Leubner /* */
33004e1bc9a0SAchim Leubner typedef struct agsaSASPhyMiscPage_s {
33014e1bc9a0SAchim Leubner   bit32 Dword0;
33024e1bc9a0SAchim Leubner   bit32 Dword1;
33034e1bc9a0SAchim Leubner } agsaSASPhyMiscPage_t ;
33044e1bc9a0SAchim Leubner 
33054e1bc9a0SAchim Leubner 
33064e1bc9a0SAchim Leubner typedef struct agsaHWEventEncrypt_s {
33074e1bc9a0SAchim Leubner     bit32          encryptOperation;
33084e1bc9a0SAchim Leubner     bit32          status;
33094e1bc9a0SAchim Leubner     bit32          eq; /* error qualifier */
33104e1bc9a0SAchim Leubner     bit32          info;
33114e1bc9a0SAchim Leubner     void           *handle;
33124e1bc9a0SAchim Leubner     void           *param;
33134e1bc9a0SAchim Leubner } agsaHWEventEncrypt_t;
33144e1bc9a0SAchim Leubner 
33154e1bc9a0SAchim Leubner /*sTSDK  4.32  */
33164e1bc9a0SAchim Leubner typedef struct agsaHWEventMode_s {
33174e1bc9a0SAchim Leubner     bit32          modePageOperation;
33184e1bc9a0SAchim Leubner     bit32          status;
33194e1bc9a0SAchim Leubner     bit32          modePageLen;
33204e1bc9a0SAchim Leubner     void           *modePage;
33214e1bc9a0SAchim Leubner     void           *context;
33224e1bc9a0SAchim Leubner } agsaHWEventMode_t;
33234e1bc9a0SAchim Leubner 
33244e1bc9a0SAchim Leubner /*sTSDK  4.33  */
33254e1bc9a0SAchim Leubner typedef struct agsaInterruptConfigPage_s {
33264e1bc9a0SAchim Leubner   bit32 pageCode;
33274e1bc9a0SAchim Leubner   bit32 vectorMask0;
33284e1bc9a0SAchim Leubner   bit32 vectorMask1;
33294e1bc9a0SAchim Leubner   bit32 ICTC0;
33304e1bc9a0SAchim Leubner   bit32 ICTC1;
33314e1bc9a0SAchim Leubner   bit32 ICTC2;
33324e1bc9a0SAchim Leubner   bit32 ICTC3;
33334e1bc9a0SAchim Leubner   bit32 ICTC4;
33344e1bc9a0SAchim Leubner   bit32 ICTC5;
33354e1bc9a0SAchim Leubner   bit32 ICTC6;
33364e1bc9a0SAchim Leubner   bit32 ICTC7;
33374e1bc9a0SAchim Leubner } agsaInterruptConfigPage_t;
33384e1bc9a0SAchim Leubner typedef struct agsaIoGeneralPage_s {
33394e1bc9a0SAchim Leubner   bit32 pageCode;           /* 0x06 */
33404e1bc9a0SAchim Leubner   bit32 ActiveMask;
33414e1bc9a0SAchim Leubner   bit32 QrntTime;
33424e1bc9a0SAchim Leubner } agsaIoGeneralPage_t;
33434e1bc9a0SAchim Leubner 
33444e1bc9a0SAchim Leubner /* \brief data structure defines detail information about Agilent Error
33454e1bc9a0SAchim Leubner * Detection Code (DIF) errors.
33464e1bc9a0SAchim Leubner *
33474e1bc9a0SAchim Leubner * The  agsaDifDetails_t data structure defines detail information about
33484e1bc9a0SAchim Leubner * PMC Error Detection Code (DIF) error.  Please refer to the latest T10 SBC
33494e1bc9a0SAchim Leubner * and SPC draft/specification for the definition of the Protection
33504e1bc9a0SAchim Leubner * Information.
33514e1bc9a0SAchim Leubner *
33524e1bc9a0SAchim Leubner * This structure is filled by the function saGetDifErrorDetails().
33534e1bc9a0SAchim Leubner */
33544e1bc9a0SAchim Leubner 
33554e1bc9a0SAchim Leubner typedef struct agsaDifDetails_s {
33564e1bc9a0SAchim Leubner     bit32               UpperLBA;
33574e1bc9a0SAchim Leubner     bit32               LowerLBA;
33584e1bc9a0SAchim Leubner     bit8                sasAddressHi[4];
33594e1bc9a0SAchim Leubner     bit8                sasAddressLo[4];
33604e1bc9a0SAchim Leubner     bit32               ExpectedCRCUDT01;
33614e1bc9a0SAchim Leubner     bit32               ExpectedUDT2345;
33624e1bc9a0SAchim Leubner     bit32               ActualCRCUDT01;
33634e1bc9a0SAchim Leubner     bit32               ActualUDT2345;
33644e1bc9a0SAchim Leubner     bit32               DIFErrDevID;
33654e1bc9a0SAchim Leubner     bit32               ErrBoffsetEDataLen;
33664e1bc9a0SAchim Leubner     void * frame;
33674e1bc9a0SAchim Leubner } agsaDifDetails_t;
33684e1bc9a0SAchim Leubner 
33694e1bc9a0SAchim Leubner /** \brief data structure for SAS protocol timer configuration page.
33704e1bc9a0SAchim Leubner  *
33714e1bc9a0SAchim Leubner  */
33724e1bc9a0SAchim Leubner typedef struct  agsaSASProtocolTimerConfigurationPage_s{
33734e1bc9a0SAchim Leubner   bit32 pageCode;                        /* 0 */
33744e1bc9a0SAchim Leubner   bit32 MST_MSI;                         /* 1 */
33754e1bc9a0SAchim Leubner   bit32 STP_SSP_MCT_TMO;                 /* 2 */
33764e1bc9a0SAchim Leubner   bit32 STP_FRM_TMO;                     /* 3 */
33774e1bc9a0SAchim Leubner   bit32 STP_IDLE_TMO;                    /* 4 */
33784e1bc9a0SAchim Leubner   bit32 OPNRJT_RTRY_INTVL;               /* 5 */
33794e1bc9a0SAchim Leubner   bit32 Data_Cmd_OPNRJT_RTRY_TMO;        /* 6 */
33804e1bc9a0SAchim Leubner   bit32 Data_Cmd_OPNRJT_RTRY_THR;        /* 7 */
33814e1bc9a0SAchim Leubner   bit32 MAX_AIP;                         /* 8 */
33824e1bc9a0SAchim Leubner } agsaSASProtocolTimerConfigurationPage_t;
33834e1bc9a0SAchim Leubner 
33844e1bc9a0SAchim Leubner 
33854e1bc9a0SAchim Leubner /** \brief data structure for firmware flash update saFwFlashUpdate().
33864e1bc9a0SAchim Leubner  *
33874e1bc9a0SAchim Leubner  * The agsaUpdateFwFlash data structure specifies a request to saFwFlashUpdate()
33884e1bc9a0SAchim Leubner  */
33894e1bc9a0SAchim Leubner typedef struct agsaUpdateFwFlash_s
33904e1bc9a0SAchim Leubner {
33914e1bc9a0SAchim Leubner   bit32     currentImageOffset;
33924e1bc9a0SAchim Leubner   bit32     currentImageLen;
33934e1bc9a0SAchim Leubner   bit32     totalImageLen;
33944e1bc9a0SAchim Leubner   agsaSgl_t agSgl;
33954e1bc9a0SAchim Leubner } agsaUpdateFwFlash_t;
33964e1bc9a0SAchim Leubner 
33974e1bc9a0SAchim Leubner 
33984e1bc9a0SAchim Leubner 
33994e1bc9a0SAchim Leubner /** \brief data structure for extended firmware flash update saFwFlashExtUpdate().
34004e1bc9a0SAchim Leubner  *
34014e1bc9a0SAchim Leubner  * The agsaFlashExtExecute_s data structure specifies a request to saFwFlashExtUpdate()
34024e1bc9a0SAchim Leubner  */
34034e1bc9a0SAchim Leubner typedef struct agsaFlashExtExecute_s
34044e1bc9a0SAchim Leubner {
34054e1bc9a0SAchim Leubner   bit32     command;
34064e1bc9a0SAchim Leubner   bit32     partOffset;
34074e1bc9a0SAchim Leubner   bit32     dataLen;
34084e1bc9a0SAchim Leubner   agsaSgl_t *agSgl;
34094e1bc9a0SAchim Leubner } agsaFlashExtExecute_t;
34104e1bc9a0SAchim Leubner 
34114e1bc9a0SAchim Leubner 
34124e1bc9a0SAchim Leubner /** \brief data structure for firmware flash update saFwFlashUpdate().
34134e1bc9a0SAchim Leubner  *
34144e1bc9a0SAchim Leubner  * The agsaFlashExtResponse_t data structure specifies a request to ossaFlashExtExecuteCB().()
34154e1bc9a0SAchim Leubner  */
34164e1bc9a0SAchim Leubner typedef struct agsaFlashExtResponse_s
34174e1bc9a0SAchim Leubner {
34184e1bc9a0SAchim Leubner   bit32     epart_size;
34194e1bc9a0SAchim Leubner   bit32     epart_sect_size;
34204e1bc9a0SAchim Leubner } agsaFlashExtResponse_t;
34214e1bc9a0SAchim Leubner 
34224e1bc9a0SAchim Leubner 
34234e1bc9a0SAchim Leubner /** \brief data structure for set fields in MPI table.
34244e1bc9a0SAchim Leubner  *  The agsaMPIContext_t data structure is used to set fields in MPI table.
34254e1bc9a0SAchim Leubner  *  For details of MPI table, refer to PM8001 Tachyon SPC 8x6G Programmers'
34264e1bc9a0SAchim Leubner  *  Manual PMC-2080222 or PM8008/PM8009/PM8018 Tachyon SPCv/SPCve/SPCv+ Programmers Manual
34274e1bc9a0SAchim Leubner  *  PMC-2091148/PMC-2102373.
34284e1bc9a0SAchim Leubner     sTSDK  section 4.39
34294e1bc9a0SAchim Leubner  */
34304e1bc9a0SAchim Leubner 
34314e1bc9a0SAchim Leubner typedef struct agsaMPIContext_s
34324e1bc9a0SAchim Leubner {
34334e1bc9a0SAchim Leubner   bit32   MPITableType;
34344e1bc9a0SAchim Leubner   bit32   offset;
34354e1bc9a0SAchim Leubner   bit32   value;
34364e1bc9a0SAchim Leubner } agsaMPIContext_t;
34374e1bc9a0SAchim Leubner 
34384e1bc9a0SAchim Leubner #define AGSA_MPI_MAIN_CONFIGURATION_TABLE             1
34394e1bc9a0SAchim Leubner #define AGSA_MPI_GENERAL_STATUS_TABLE                 2
34404e1bc9a0SAchim Leubner #define AGSA_MPI_INBOUND_QUEUE_CONFIGURATION_TABLE    3
34414e1bc9a0SAchim Leubner #define AGSA_MPI_OUTBOUND_QUEUE_CONFIGURATION_TABLE   4
34424e1bc9a0SAchim Leubner #define AGSA_MPI_SAS_PHY_ANALOG_SETUP_TABLE           5
34434e1bc9a0SAchim Leubner #define AGSA_MPI_INTERRUPT_VECTOR_TABLE               6
34444e1bc9a0SAchim Leubner #define AGSA_MPI_PER_SAS_PHY_ATTRIBUTE_TABLE          7
34454e1bc9a0SAchim Leubner #define AGSA_MPI_OUTBOUND_QUEUE_FAILOVER_TABLE        8
34464e1bc9a0SAchim Leubner 
34474e1bc9a0SAchim Leubner 
34484e1bc9a0SAchim Leubner /************************************************************/
34494e1bc9a0SAchim Leubner /*This flag and datastructure are specific for fw profiling, Now defined as compiler flag*/
34504e1bc9a0SAchim Leubner //#define SPC_ENABLE_PROFILE
34514e1bc9a0SAchim Leubner 
34524e1bc9a0SAchim Leubner #ifdef SPC_ENABLE_PROFILE
34534e1bc9a0SAchim Leubner typedef struct agsaFwProfile_s
34544e1bc9a0SAchim Leubner {
34554e1bc9a0SAchim Leubner   bit32     tcid;
34564e1bc9a0SAchim Leubner   bit32     processor;
34574e1bc9a0SAchim Leubner   bit32     cmd;
34584e1bc9a0SAchim Leubner   bit32     len;
34594e1bc9a0SAchim Leubner   bit32     codeStartAdd;
34604e1bc9a0SAchim Leubner   bit32     codeEndAdd;
34614e1bc9a0SAchim Leubner   agsaSgl_t agSgl;
34624e1bc9a0SAchim Leubner } agsaFwProfile_t;
34634e1bc9a0SAchim Leubner #endif
34644e1bc9a0SAchim Leubner /************************************************************/
34654e1bc9a0SAchim Leubner /** \brief Callback definition for .ossaDeviceRegistration
34664e1bc9a0SAchim Leubner  *
34674e1bc9a0SAchim Leubner  */
34684e1bc9a0SAchim Leubner typedef  void (*ossaDeviceRegistrationCB_t)(
34694e1bc9a0SAchim Leubner   agsaRoot_t          *agRoot,
34704e1bc9a0SAchim Leubner   agsaContext_t       *agContext,
34714e1bc9a0SAchim Leubner   bit32               status,
34724e1bc9a0SAchim Leubner   agsaDevHandle_t     *agDevHandle,
34734e1bc9a0SAchim Leubner   bit32               deviceID
34744e1bc9a0SAchim Leubner   );
34754e1bc9a0SAchim Leubner 
34764e1bc9a0SAchim Leubner /** \brief Callback definition for
34774e1bc9a0SAchim Leubner  *
34784e1bc9a0SAchim Leubner  */
34794e1bc9a0SAchim Leubner typedef void (*ossaDeregisterDeviceHandleCB_t)(
34804e1bc9a0SAchim Leubner   agsaRoot_t          *agRoot,
34814e1bc9a0SAchim Leubner   agsaContext_t       *agContext,
34824e1bc9a0SAchim Leubner   agsaDevHandle_t     *agDevHandle,
34834e1bc9a0SAchim Leubner   bit32               status
34844e1bc9a0SAchim Leubner   );
34854e1bc9a0SAchim Leubner 
34864e1bc9a0SAchim Leubner /** \brief Callback definition for
34874e1bc9a0SAchim Leubner  *
34884e1bc9a0SAchim Leubner  */
34894e1bc9a0SAchim Leubner typedef void (*ossaGenericCB_t)(void);
34904e1bc9a0SAchim Leubner 
34914e1bc9a0SAchim Leubner 
34924e1bc9a0SAchim Leubner /** \brief Callback definition for abort SMP SSP SATA callback
34934e1bc9a0SAchim Leubner  *
34944e1bc9a0SAchim Leubner  */
34954e1bc9a0SAchim Leubner typedef void (*ossaGenericAbortCB_t)(
34964e1bc9a0SAchim Leubner   agsaRoot_t        *agRoot,
34974e1bc9a0SAchim Leubner   agsaIORequest_t   *agIORequest,
34984e1bc9a0SAchim Leubner   bit32             flag,
34994e1bc9a0SAchim Leubner   bit32             status
35004e1bc9a0SAchim Leubner   );
35014e1bc9a0SAchim Leubner 
35024e1bc9a0SAchim Leubner 
35034e1bc9a0SAchim Leubner typedef void (*ossaLocalPhyControlCB_t)(
35044e1bc9a0SAchim Leubner   agsaRoot_t      *agRoot,
35054e1bc9a0SAchim Leubner   agsaContext_t   *agContext,
35064e1bc9a0SAchim Leubner   bit32           phyId,
35074e1bc9a0SAchim Leubner   bit32           phyOperation,
35084e1bc9a0SAchim Leubner   bit32           status,
35094e1bc9a0SAchim Leubner   void            *parm
35104e1bc9a0SAchim Leubner   );
35114e1bc9a0SAchim Leubner 
35124e1bc9a0SAchim Leubner 
35134e1bc9a0SAchim Leubner /** \brief Callback definition for
35144e1bc9a0SAchim Leubner  *
35154e1bc9a0SAchim Leubner  */
35164e1bc9a0SAchim Leubner typedef void (*ossaSATACompletedCB_t)(
35174e1bc9a0SAchim Leubner   agsaRoot_t          *agRoot,
35184e1bc9a0SAchim Leubner   agsaIORequest_t     *agIORequest,
35194e1bc9a0SAchim Leubner   bit32               agIOStatus,
35204e1bc9a0SAchim Leubner   void                *agFirstDword,
35214e1bc9a0SAchim Leubner   bit32               agIOInfoLen,
35224e1bc9a0SAchim Leubner   void                *agParam
35234e1bc9a0SAchim Leubner   );
35244e1bc9a0SAchim Leubner 
35254e1bc9a0SAchim Leubner 
35264e1bc9a0SAchim Leubner /** \brief Callback definition for
35274e1bc9a0SAchim Leubner  *
35284e1bc9a0SAchim Leubner  */
35294e1bc9a0SAchim Leubner typedef void (*ossaSMPCompletedCB_t)(
35304e1bc9a0SAchim Leubner   agsaRoot_t            *agRoot,
35314e1bc9a0SAchim Leubner   agsaIORequest_t       *agIORequest,
35324e1bc9a0SAchim Leubner   bit32                 agIOStatus,
35334e1bc9a0SAchim Leubner   bit32                 agIOInfoLen,
35344e1bc9a0SAchim Leubner   agsaFrameHandle_t     agFrameHandle
35354e1bc9a0SAchim Leubner   );
35364e1bc9a0SAchim Leubner 
35374e1bc9a0SAchim Leubner 
35384e1bc9a0SAchim Leubner /** \brief Callback definition for
35394e1bc9a0SAchim Leubner  *
35404e1bc9a0SAchim Leubner  */
35414e1bc9a0SAchim Leubner typedef  void (*ossaSSPCompletedCB_t)(
35424e1bc9a0SAchim Leubner   agsaRoot_t            *agRoot,
35434e1bc9a0SAchim Leubner   agsaIORequest_t       *agIORequest,
35444e1bc9a0SAchim Leubner   bit32                 agIOStatus,
35454e1bc9a0SAchim Leubner   bit32                 agIOInfoLen,
35464e1bc9a0SAchim Leubner   void                  *agParam,
35474e1bc9a0SAchim Leubner   bit16                 sspTag,
35484e1bc9a0SAchim Leubner   bit32                 agOtherInfo
35494e1bc9a0SAchim Leubner   );
35504e1bc9a0SAchim Leubner 
35514e1bc9a0SAchim Leubner /** \brief Callback definition for
35524e1bc9a0SAchim Leubner  *
35534e1bc9a0SAchim Leubner  */
35544e1bc9a0SAchim Leubner typedef void (*ossaSetDeviceInfoCB_t) (
35554e1bc9a0SAchim Leubner                                 agsaRoot_t        *agRoot,
35564e1bc9a0SAchim Leubner                                 agsaContext_t     *agContext,
35574e1bc9a0SAchim Leubner                                 agsaDevHandle_t   *agDevHandle,
35584e1bc9a0SAchim Leubner                                 bit32             status,
35594e1bc9a0SAchim Leubner                                 bit32             option,
35604e1bc9a0SAchim Leubner                                 bit32             param
35614e1bc9a0SAchim Leubner                                 );
35624e1bc9a0SAchim Leubner 
35634e1bc9a0SAchim Leubner typedef struct agsaOffloadDifDetails_s
35644e1bc9a0SAchim Leubner {
35654e1bc9a0SAchim Leubner   bit32 ExpectedCRCUDT01;
35664e1bc9a0SAchim Leubner   bit32 ExpectedUDT2345;
35674e1bc9a0SAchim Leubner   bit32 ActualCRCUDT01;
35684e1bc9a0SAchim Leubner   bit32 ActualUDT2345;
35694e1bc9a0SAchim Leubner   bit32 DIFErr;
35704e1bc9a0SAchim Leubner   bit32 ErrBoffset;
35714e1bc9a0SAchim Leubner } agsaOffloadDifDetails_t;
35724e1bc9a0SAchim Leubner 
35734e1bc9a0SAchim Leubner typedef struct agsaDifEncPayload_s
35744e1bc9a0SAchim Leubner {
35754e1bc9a0SAchim Leubner   agsaSgl_t      SrcSgl;
35764e1bc9a0SAchim Leubner   bit32          SrcDL;
35774e1bc9a0SAchim Leubner   agsaSgl_t      DstSgl;
35784e1bc9a0SAchim Leubner   bit32          DstDL;
35794e1bc9a0SAchim Leubner   agsaDif_t      dif;
35804e1bc9a0SAchim Leubner   agsaEncrypt_t  encrypt;
35814e1bc9a0SAchim Leubner } agsaDifEncPayload_t;
35824e1bc9a0SAchim Leubner 
35834e1bc9a0SAchim Leubner typedef void (*ossaVhistCaptureCB_t) (
35844e1bc9a0SAchim Leubner         agsaRoot_t    *agRoot,
35854e1bc9a0SAchim Leubner         agsaContext_t *agContext,
35864e1bc9a0SAchim Leubner         bit32         status,
35874e1bc9a0SAchim Leubner         bit32         len);
35884e1bc9a0SAchim Leubner 
35894e1bc9a0SAchim Leubner typedef void (*ossaDIFEncryptionOffloadStartCB_t) (
35904e1bc9a0SAchim Leubner   agsaRoot_t                *agRoot,
35914e1bc9a0SAchim Leubner   agsaContext_t             *agContext,
35924e1bc9a0SAchim Leubner   bit32                     status,
35934e1bc9a0SAchim Leubner   agsaOffloadDifDetails_t   *agsaOffloadDifDetails
35944e1bc9a0SAchim Leubner   );
35954e1bc9a0SAchim Leubner 
35964e1bc9a0SAchim Leubner #define SA_RESERVED_REQUEST_COUNT 16
35974e1bc9a0SAchim Leubner 
35984e1bc9a0SAchim Leubner #ifdef SA_FW_TIMER_READS_STATUS
35994e1bc9a0SAchim Leubner #define SA_FW_TIMER_READS_STATUS_INTERVAL 20
36004e1bc9a0SAchim Leubner #endif /* SA_FW_TIMER_READS_STATUS */
36014e1bc9a0SAchim Leubner 
36024e1bc9a0SAchim Leubner #define SIZE_DW                         4     /**< Size in bytes */
36034e1bc9a0SAchim Leubner #define SIZE_QW                         8     /**< Size in bytes */
36044e1bc9a0SAchim Leubner 
36054e1bc9a0SAchim Leubner #define PCIBAR0                         0     /**< PCI Base Address 0 */
36064e1bc9a0SAchim Leubner #define PCIBAR1                         1     /**< PCI Base Address 1 */
36074e1bc9a0SAchim Leubner #define PCIBAR2                         2     /**< PCI Base Address 2 */
36084e1bc9a0SAchim Leubner #define PCIBAR3                         3     /**< PCI Base Address 3 */
36094e1bc9a0SAchim Leubner #define PCIBAR4                         4     /**< PCI Base Address 4 */
36104e1bc9a0SAchim Leubner #define PCIBAR5                         5     /**< PCI Base Address 5 */
36114e1bc9a0SAchim Leubner 
36124e1bc9a0SAchim Leubner /** \brief describe an element of SPC-SPCV converter
36134e1bc9a0SAchim Leubner  *
36144e1bc9a0SAchim Leubner  * This structure is used
36154e1bc9a0SAchim Leubner  *
36164e1bc9a0SAchim Leubner  */
36174e1bc9a0SAchim Leubner typedef struct agsaBarOffset_s
36184e1bc9a0SAchim Leubner {
36194e1bc9a0SAchim Leubner   bit32 Generic;    /* */
36204e1bc9a0SAchim Leubner   bit32 Bar;        /* */
36214e1bc9a0SAchim Leubner   bit32 Offset;     /* */
36224e1bc9a0SAchim Leubner   bit32 Length;     /* */
36234e1bc9a0SAchim Leubner } agsaBarOffset_t;
36244e1bc9a0SAchim Leubner 
36254e1bc9a0SAchim Leubner typedef union agsabit32bit64_U
36264e1bc9a0SAchim Leubner {
36274e1bc9a0SAchim Leubner   bit32 S32[2];
36284e1bc9a0SAchim Leubner   bit64 B64;
36294e1bc9a0SAchim Leubner } agsabit32bit64;
36304e1bc9a0SAchim Leubner 
36314e1bc9a0SAchim Leubner /*
36324e1bc9a0SAchim Leubner The agsaIOErrorEventStats_t data structure is used as parameter in ossaGetIOErrorStatsCB(),ossaGetIOEventStatsCB().
36334e1bc9a0SAchim Leubner This data structure contains the number of IO error and event.
36344e1bc9a0SAchim Leubner */
36354e1bc9a0SAchim Leubner typedef struct agsaIOErrorEventStats_s
36364e1bc9a0SAchim Leubner {
36374e1bc9a0SAchim Leubner    bit32  agOSSA_IO_COMPLETED_ERROR_SCSI_STATUS;
36384e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ABORTED;
36394e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OVERFLOW;
36404e1bc9a0SAchim Leubner    bit32  agOSSA_IO_UNDERFLOW;
36414e1bc9a0SAchim Leubner    bit32  agOSSA_IO_FAILED;
36424e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ABORT_RESET;
36434e1bc9a0SAchim Leubner    bit32  agOSSA_IO_NOT_VALID;
36444e1bc9a0SAchim Leubner    bit32  agOSSA_IO_NO_DEVICE;
36454e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ILLEGAL_PARAMETER;
36464e1bc9a0SAchim Leubner    bit32  agOSSA_IO_LINK_FAILURE;
36474e1bc9a0SAchim Leubner    bit32  agOSSA_IO_PROG_ERROR;
36484e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DIF_IN_ERROR;
36494e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DIF_OUT_ERROR;
36504e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ERROR_HW_TIMEOUT;
36514e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_BREAK;
36524e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_PHY_NOT_READY;
36534e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_PROTOCOL_NOT_SUPPORTED;
36544e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_ZONE_VIOLATION;
36554e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_BREAK;
36564e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS;
36574e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_BAD_DESTINATION;
36584e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_CONNECTION_RATE_NOT_SUPPORTED;
36594e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY;
36604e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_WRONG_DESTINATION;
36614e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_UNKNOWN_ERROR;
36624e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_NAK_RECEIVED;
36634e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_ACK_NAK_TIMEOUT;
36644e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_PEER_ABORTED;
36654e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_RX_FRAME;
36664e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_DMA;
36674e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_CREDIT_TIMEOUT;
36684e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_SATA_LINK_TIMEOUT;
36694e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_SATA;
36704e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_ABORTED_DUE_TO_SRST;
36714e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_REJECTED_NCQ_MODE;
36724e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_ABORTED_NCQ_MODE;
36734e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_OPEN_RETRY_TIMEOUT;
36744e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_SMP_RESP_CONNECTION_ERROR;
36754e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_UNEXPECTED_PHASE;
36764e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN;
36774e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_XFER_RDY_NOT_EXPECTED;
36784e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT;
36794e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_CMD_ISSUE_BREAK_BEFORE_ACK_NAK;
36804e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_CMD_ISSUE_PHY_DOWN_BEFORE_ACK_NAK;
36814e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_OFFSET_MISMATCH;
36824e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_XFER_ZERO_DATA_LEN;
36834e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_CMD_FRAME_ISSUED;
36844e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ERROR_INTERNAL_SMP_RESOURCE;
36854e1bc9a0SAchim Leubner    bit32  agOSSA_IO_PORT_IN_RESET;
36864e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DS_NON_OPERATIONAL;
36874e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DS_IN_RECOVERY;
36884e1bc9a0SAchim Leubner    bit32  agOSSA_IO_TM_TAG_NOT_FOUND;
36894e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_PIO_SETUP_ERROR;
36904e1bc9a0SAchim Leubner    bit32  agOSSA_IO_SSP_EXT_IU_ZERO_LEN_ERROR;
36914e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DS_IN_ERROR;
36924e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY;
36934e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ABORT_IN_PROGRESS;
36944e1bc9a0SAchim Leubner    bit32  agOSSA_IO_ABORT_DELAYED;
36954e1bc9a0SAchim Leubner    bit32  agOSSA_IO_INVALID_LENGTH;
36964e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_HW_RESOURCE_BUSY_ALT;
36974e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED;
36984e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO;
36994e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST;
37004e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE;
37014e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED;
37024e1bc9a0SAchim Leubner    bit32  agOSSA_IO_DS_INVALID;
37034e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_READ_COMPL_ERR;
37044e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERR_LAST_PIO_DATAIN_CRC_ERR;
37054e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_INTERNAL_CRC_ERROR;
37064e1bc9a0SAchim Leubner    bit32  agOSSA_MPI_IO_RQE_BUSY_FULL;
37074e1bc9a0SAchim Leubner    bit32  agOSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE;
37084e1bc9a0SAchim Leubner    bit32  agOSSA_MPI_ERR_ATAPI_DEVICE_BUSY;
37094e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS;
37104e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH;
37114e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_CIPHER_MODE_INVALID;
37124e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_IV_MISMATCH;
37134e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_RAM_INTERFACE_ERROR;
37144e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_INTERNAL_RAM;
37154e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DIF_MISMATCH;
37164e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH;
37174e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH;
37184e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH;
37194e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_INVALID_SSP_RSP_FRAME;
37204e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERR_EOB_DATA_OVERRUN;
37214e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_INDEX_OUT_OF_BOUNDS;
37224e1bc9a0SAchim Leubner    bit32  agOSSA_IO_OPEN_CNX_ERROR_OPEN_PREEMPTED;
37234e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFR_ERROR_DEK_ILLEGAL_TABLE;
37244e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_DIF_INTERNAL_ERROR;
37254e1bc9a0SAchim Leubner    bit32  agOSSA_MPI_ERR_OFFLOAD_DIF_OR_ENC_NOT_ENABLED;
37264e1bc9a0SAchim Leubner    bit32  agOSSA_IO_XFER_ERROR_DMA_ACTIVATE_TIMEOUT;
37274e1bc9a0SAchim Leubner    bit32  agOSSA_IO_UNKNOWN_ERROR;
37284e1bc9a0SAchim Leubner } agsaIOErrorEventStats_t;
37294e1bc9a0SAchim Leubner 
37304e1bc9a0SAchim Leubner 
37314e1bc9a0SAchim Leubner /************************************************************************************
37324e1bc9a0SAchim Leubner  *                                                                                  *
37334e1bc9a0SAchim Leubner  *               Data Structures Defined for LL API ends                            *
37344e1bc9a0SAchim Leubner  *                                                                                  *
37354e1bc9a0SAchim Leubner  ************************************************************************************/
37364e1bc9a0SAchim Leubner #ifdef SALL_API_TEST
37374e1bc9a0SAchim Leubner typedef struct agsaIOCountInfo_s
37384e1bc9a0SAchim Leubner {
37394e1bc9a0SAchim Leubner   bit32 numSSPStarted;    // saSSPStart()
37404e1bc9a0SAchim Leubner   bit32 numSSPAborted;    // saSSPAbort()
37414e1bc9a0SAchim Leubner   bit32 numSSPAbortedCB;  // ossaSSPAbortCB()
37424e1bc9a0SAchim Leubner   bit32 numSSPCompleted;  // includes success and aborted IOs
37434e1bc9a0SAchim Leubner   bit32 numSMPStarted;    // saSMPStart()
37444e1bc9a0SAchim Leubner   bit32 numSMPAborted;    // saSMPAbort()
37454e1bc9a0SAchim Leubner   bit32 numSMPAbortedCB;  // ossaSMPAbortCB()
37464e1bc9a0SAchim Leubner   bit32 numSMPCompleted;  // includes success and aborted IOs
37474e1bc9a0SAchim Leubner   bit32 numSataStarted;   // saSATAStart()
37484e1bc9a0SAchim Leubner   bit32 numSataAborted;   // saSATAAbort()
37494e1bc9a0SAchim Leubner   bit32 numSataAbortedCB; // ossaSATAAbortCB()
37504e1bc9a0SAchim Leubner   bit32 numSataCompleted; // includes success and aborted IOs
37514e1bc9a0SAchim Leubner   bit32 numEchoSent;      // saEchoCommand()
37524e1bc9a0SAchim Leubner   bit32 numEchoCB;        // ossaEchoCB()
37534e1bc9a0SAchim Leubner   bit32 numUNKNWRespIOMB; // unknow Response IOMB received
37544e1bc9a0SAchim Leubner   bit32 numOurIntCount;   //InterruptHandler() counter
37554e1bc9a0SAchim Leubner   bit32 numSpuriousInt;   //spurious interrupts
37564e1bc9a0SAchim Leubner //  bit32 numSpInts[64];    //spuriours interrupts count for each OBQ (PI=CI)
37574e1bc9a0SAchim Leubner //  bit32 numSpInts1[64];   //spuriours interrupts count for each OBQ (PI!=CI)
37584e1bc9a0SAchim Leubner } agsaIOCountInfo_t;
37594e1bc9a0SAchim Leubner 
37604e1bc9a0SAchim Leubner /* Total IO Counter */
37614e1bc9a0SAchim Leubner #define LL_COUNTERS 17
37624e1bc9a0SAchim Leubner /* Counter Bit Map */
37634e1bc9a0SAchim Leubner #define COUNTER_SSP_START       0x000001
37644e1bc9a0SAchim Leubner #define COUNTER_SSP_ABORT       0x000002
37654e1bc9a0SAchim Leubner #define COUNTER_SSPABORT_CB     0x000004
37664e1bc9a0SAchim Leubner #define COUNTER_SSP_COMPLETEED  0x000008
37674e1bc9a0SAchim Leubner #define COUNTER_SMP_START       0x000010
37684e1bc9a0SAchim Leubner #define COUNTER_SMP_ABORT       0x000020
37694e1bc9a0SAchim Leubner #define COUNTER_SMPABORT_CB     0x000040
37704e1bc9a0SAchim Leubner #define COUNTER_SMP_COMPLETEED  0x000080
37714e1bc9a0SAchim Leubner #define COUNTER_SATA_START      0x000100
37724e1bc9a0SAchim Leubner #define COUNTER_SATA_ABORT      0x000200
37734e1bc9a0SAchim Leubner #define COUNTER_SATAABORT_CB    0x000400
37744e1bc9a0SAchim Leubner #define COUNTER_SATA_COMPLETEED 0x000800
37754e1bc9a0SAchim Leubner #define COUNTER_ECHO_SENT       0x001000
37764e1bc9a0SAchim Leubner #define COUNTER_ECHO_CB         0x002000
37774e1bc9a0SAchim Leubner #define COUNTER_UNKWN_IOMB      0x004000
37784e1bc9a0SAchim Leubner #define COUNTER_OUR_INT         0x008000
37794e1bc9a0SAchim Leubner #define COUNTER_SPUR_INT        0x010000
37804e1bc9a0SAchim Leubner #define ALL_COUNTERS            0xFFFFFF
37814e1bc9a0SAchim Leubner 
37824e1bc9a0SAchim Leubner typedef union agsaLLCountInfo_s
37834e1bc9a0SAchim Leubner {
37844e1bc9a0SAchim Leubner   agsaIOCountInfo_t IOCounter;
37854e1bc9a0SAchim Leubner   bit32 arrayIOCounter[LL_COUNTERS];
37864e1bc9a0SAchim Leubner } agsaLLCountInfo_t;
37874e1bc9a0SAchim Leubner 
37884e1bc9a0SAchim Leubner #endif /* SALL_API_TEST */
37894e1bc9a0SAchim Leubner 
37904e1bc9a0SAchim Leubner #define MAX_IO_DEVICE_ENTRIES  4096            /**< Maximum Device Entries */
37914e1bc9a0SAchim Leubner 
37924e1bc9a0SAchim Leubner 
37934e1bc9a0SAchim Leubner #ifdef SA_ENABLE_POISION_TLP
37944e1bc9a0SAchim Leubner #define SA_PTNFE_POISION_TLP 1 /* Enable if one  */
37954e1bc9a0SAchim Leubner #else /* SA_ENABLE_POISION_TLP */
37964e1bc9a0SAchim Leubner #define SA_PTNFE_POISION_TLP 0 /* Disable if zero default setting */
37974e1bc9a0SAchim Leubner #endif /* SA_ENABLE_POISION_TLP */
37984e1bc9a0SAchim Leubner 
37994e1bc9a0SAchim Leubner #ifdef SA_DISABLE_MDFD
38004e1bc9a0SAchim Leubner #define SA_MDFD_MULTI_DATA_FETCH 1 /* Disable if one  */
38014e1bc9a0SAchim Leubner #else /* SA_DISABLE_MDFD */
38024e1bc9a0SAchim Leubner #define SA_MDFD_MULTI_DATA_FETCH 0 /* Enable if zero default setting */
38034e1bc9a0SAchim Leubner #endif /* SA_DISABLE_MDFD */
38044e1bc9a0SAchim Leubner 
38054e1bc9a0SAchim Leubner #ifdef SA_ENABLE_ARBTE
38064e1bc9a0SAchim Leubner #define SA_ARBTE 1  /* Enable if one  */
38074e1bc9a0SAchim Leubner #else /* SA_ENABLE_ARBTE */
38084e1bc9a0SAchim Leubner #define SA_ARBTE 0  /* Disable if zero default setting */
38094e1bc9a0SAchim Leubner #endif /* SA_ENABLE_ARBTE */
38104e1bc9a0SAchim Leubner 
38114e1bc9a0SAchim Leubner #ifdef SA_DISABLE_OB_COAL
38124e1bc9a0SAchim Leubner #define SA_OUTBOUND_COALESCE 0 /* Disable if zero */
38134e1bc9a0SAchim Leubner #else /* SA_DISABLE_OB_COAL */
38144e1bc9a0SAchim Leubner #define SA_OUTBOUND_COALESCE 1 /* Enable if one default setting */
38154e1bc9a0SAchim Leubner #endif /* SA_DISABLE_OB_COAL */
38164e1bc9a0SAchim Leubner 
38174e1bc9a0SAchim Leubner 
38184e1bc9a0SAchim Leubner /***********************************************************************************
38194e1bc9a0SAchim Leubner  *                                                                                 *
38204e1bc9a0SAchim Leubner  *              The OS Layer Functions Declarations start                          *
38214e1bc9a0SAchim Leubner  *                                                                                 *
38224e1bc9a0SAchim Leubner  ***********************************************************************************/
38234e1bc9a0SAchim Leubner #include "saosapi.h"
38244e1bc9a0SAchim Leubner /***********************************************************************************
38254e1bc9a0SAchim Leubner  *                                                                                 *
38264e1bc9a0SAchim Leubner  *              The OS Layer Functions Declarations end                            *
38274e1bc9a0SAchim Leubner  *                                                                                 *
38284e1bc9a0SAchim Leubner  ***********************************************************************************/
38294e1bc9a0SAchim Leubner 
38304e1bc9a0SAchim Leubner /***********************************************************************************
38314e1bc9a0SAchim Leubner  *                                                                                 *
38324e1bc9a0SAchim Leubner  *              The LL Layer Functions Declarations start                          *
38334e1bc9a0SAchim Leubner  *                                                                                 *
38344e1bc9a0SAchim Leubner  ***********************************************************************************/
38354e1bc9a0SAchim Leubner 
38364e1bc9a0SAchim Leubner #ifdef FAST_IO_TEST
38374e1bc9a0SAchim Leubner /* needs to be allocated by the xPrepare() caller, one struct per IO */
38384e1bc9a0SAchim Leubner typedef struct agsaFastCBBuf_s
38394e1bc9a0SAchim Leubner {
38404e1bc9a0SAchim Leubner   void  *cb;
38414e1bc9a0SAchim Leubner   void  *cbArg;
38424e1bc9a0SAchim Leubner   void  *pSenseData;
38434e1bc9a0SAchim Leubner   bit8  *senseLen;
38444e1bc9a0SAchim Leubner   /* internal */
38454e1bc9a0SAchim Leubner   void  *oneDeviceData; /* tdsaDeviceData_t */
38464e1bc9a0SAchim Leubner } agsaFastCBBuf_t;
38474e1bc9a0SAchim Leubner 
38484e1bc9a0SAchim Leubner typedef struct agsaFastCommand_s
38494e1bc9a0SAchim Leubner {
38504e1bc9a0SAchim Leubner   /* in */
38514e1bc9a0SAchim Leubner   void        *agRoot;
38524e1bc9a0SAchim Leubner   /* modified by TD tiFastPrepare() */
38534e1bc9a0SAchim Leubner   void        *devHandle;    /* agsaDevHandle_t* */
38544e1bc9a0SAchim Leubner   void        *agSgl;        /* agsaSgl_t* */
38554e1bc9a0SAchim Leubner   bit32       dataLength;
38564e1bc9a0SAchim Leubner   bit32       extDataLength;
38574e1bc9a0SAchim Leubner   bit8        additionalCdbLen;
38584e1bc9a0SAchim Leubner   bit8        *cdb;
38594e1bc9a0SAchim Leubner   bit8        *lun;
38604e1bc9a0SAchim Leubner   /* modified by TD tiFastPrepare() */
38614e1bc9a0SAchim Leubner   bit8        taskAttribute; /* TD_xxx */
38624e1bc9a0SAchim Leubner   bit16       flag;          /* TLR_MASK */
38634e1bc9a0SAchim Leubner   bit32       agRequestType;
38644e1bc9a0SAchim Leubner   bit32       queueNum;
38654e1bc9a0SAchim Leubner   agsaFastCBBuf_t *safb;
38664e1bc9a0SAchim Leubner } agsaFastCommand_t;
38674e1bc9a0SAchim Leubner #endif
38684e1bc9a0SAchim Leubner 
38694e1bc9a0SAchim Leubner 
38704e1bc9a0SAchim Leubner 
38714e1bc9a0SAchim Leubner /* Enable test by setting bits in gFPGA_TEST */
38724e1bc9a0SAchim Leubner 
38734e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_ICCcontrol            0x01
38744e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_ReadDEV               0x02
38754e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_WriteCALAll           0x04
38764e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_ReconfigSASParams     0x08
38774e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_LocalPhyControl       0x10
38784e1bc9a0SAchim Leubner #define  EnableFPGA_TEST_PortControl           0x20
38794e1bc9a0SAchim Leubner 
38804e1bc9a0SAchim Leubner 
38814e1bc9a0SAchim Leubner /*
38824e1bc9a0SAchim Leubner PM8001/PM8008/PM8009/PM8018 sTSDK Low-Level Architecture Specification
38834e1bc9a0SAchim Leubner SDK2
38844e1bc9a0SAchim Leubner 3.3 Encryption Status Definitions
38854e1bc9a0SAchim Leubner Encryption engine generated errors.
38864e1bc9a0SAchim Leubner Table 7 Encryption Engine Generated Errors
38874e1bc9a0SAchim Leubner Error Definition
38884e1bc9a0SAchim Leubner */
38894e1bc9a0SAchim Leubner 
38904e1bc9a0SAchim Leubner /*
38914e1bc9a0SAchim Leubner PM 1.01
38924e1bc9a0SAchim Leubner section 4.26.12.6 Encryption Errors
38934e1bc9a0SAchim Leubner Table 51 lists initialization errors related to encryption functionality. For information on errors reported
38944e1bc9a0SAchim Leubner for inbound IOMB commands, refer to the corresponding outbound response sections. The error codes
38954e1bc9a0SAchim Leubner listed in Table 51 are reported in the Scratchpad 3 Register.
38964e1bc9a0SAchim Leubner */
38974e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_ENGINE_FAILURE_MASK        0x00FF0000    /* Encrypt Engine failed the BIST Test */
38984e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_SEEPROM_NOT_FOUND          0x01  /* SEEPROM is not installed. This condition is reported based on the bootstrap pin setting. */
38994e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_SEEPROM_IPW_RD_ACCESS_TMO  0x02  /* SEEPROM access timeout detected while reading initialization password or Allowable Cipher Modes. */
39004e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_SEEPROM_IPW_RD_CRC_ERR     0x03  /* CRC Error detected when reading initialization password or Allowable Cipher Modes.  */
39014e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_SEEPROM_IPW_INVALID        0x04  /* Initialization password read from SEEPROM doesn't match any valid password value. This could also mean SEEPROM is blank.  */
39024e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_SEEPROM_WR_ACCESS_TMO      0x05  /* access timeout detected while writing initialization password or Allowable Cipher Modes.  */
39034e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_FLASH_ACCESS_TMO           0x20  /* Timeout while reading flash memory. */
39044e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_FLASH_SECTOR_ERASE_TMO     0x21  /* Flash sector erase timeout while writing to flash memory. */
39054e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_FLASH_SECTOR_ERASE_ERR     0x22  /* Flash sector erase failure while writing to flash memory. */
39064e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_FLASH_ECC_CHECK_ERR        0x23  /* Flash ECC check failure. */
39074e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_FLASH_NOT_INSTALLED        0x24  /* Flash memory not installed, this error is only detected in Security Mode B.  */
39084e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_INITIAL_KEK_NOT_FOUND      0x40  /* Initial KEK is not found in the flash memory. This error is only detected in Security Mode B. */
39094e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_AES_BIST_ERR               0x41  /* Built-In Test Failure */
39104e1bc9a0SAchim Leubner #define OSSA_ENCRYPT_KWP_BIST_FAILURE           0x42  /* Built-In Test Failed on Key Wrap Engine */
39114e1bc9a0SAchim Leubner 
39124e1bc9a0SAchim Leubner /* 0x01:ENC_ERR_SEEPROM_NOT_INSTALLED */
39134e1bc9a0SAchim Leubner /* 0x02:ENC_ERR_SEEPROM_IPW_RD_ACCESS_TMO */
39144e1bc9a0SAchim Leubner /* 0x03:ENC_ERR_SEEPROM_IPW_RD_CRC_ERR */
39154e1bc9a0SAchim Leubner /* 0x04:ENC_ERR_SEEPROM_IPW_INVALID */
39164e1bc9a0SAchim Leubner /* 0x05:ENC_ERR_SEEPROM_WR_ACCESS_TMO */
39174e1bc9a0SAchim Leubner /* 0x20:ENC_ERR_FLASH_ACCESS_TMO */
39184e1bc9a0SAchim Leubner /* 0x21:ENC_ERR_FLASH_SECTOR_ERASE_TMO */
39194e1bc9a0SAchim Leubner /* 0x22:ENC_ERR_FLASH_SECTOR_ERASE_FAILURE */
39204e1bc9a0SAchim Leubner /* 0x23:ENC_ERR_FLASH_ECC_CHECK_FAILURE */
39214e1bc9a0SAchim Leubner /* 0x24:ENC_ERR_FLASH_NOT_INSTALLED */
39224e1bc9a0SAchim Leubner /* 0x40:ENC_ERR_INITIAL_KEK_NOT_FOUND */
39234e1bc9a0SAchim Leubner /* 0x41:ENC_ERR_AES_BIST_FAILURE */
39244e1bc9a0SAchim Leubner /* 0x42:ENC_ERR_KWP_BIST_FAILURE */
39254e1bc9a0SAchim Leubner 
39264e1bc9a0SAchim Leubner /*
39274e1bc9a0SAchim Leubner This field indicates self test failure in DIF engine bits [27:24].
39284e1bc9a0SAchim Leubner */
39294e1bc9a0SAchim Leubner 
39304e1bc9a0SAchim Leubner #define OSSA_DIF_ENGINE_FAILURE_MASK        0x0F000000    /* DIF Engine failed the BIST Test */
39314e1bc9a0SAchim Leubner 
39324e1bc9a0SAchim Leubner #define OSSA_DIF_ENGINE_0_BIST_FAILURE           0x1  /* DIF Engine 0 failed the BIST Test */
39334e1bc9a0SAchim Leubner #define OSSA_DIF_ENGINE_1_BIST_FAILURE           0x2  /* DIF Engine 1 failed the BIST Test */
39344e1bc9a0SAchim Leubner #define OSSA_DIF_ENGINE_2_BIST_FAILURE           0x4  /* DIF Engine 2 failed the BIST Test */
39354e1bc9a0SAchim Leubner #define OSSA_DIF_ENGINE_3_BIST_FAILURE           0x8  /* DIF Engine 3 failed the BIST Test */
39364e1bc9a0SAchim Leubner 
39374e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_CSP 0x001
39384e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_OPR 0x002
39394e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_SCO 0x004
39404e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_STS 0x008
39414e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_TST 0x010
39424e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_KEK 0x020
39434e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_DEK 0x040
39444e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_IOS 0x080
39454e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_FWU 0x100
39464e1bc9a0SAchim Leubner #define SA_ROLE_CAPABILITIES_PRM 0x200
39474e1bc9a0SAchim Leubner 
39484e1bc9a0SAchim Leubner 
39494e1bc9a0SAchim Leubner #include "saapi.h"
39504e1bc9a0SAchim Leubner /***********************************************************************************
39514e1bc9a0SAchim Leubner  *                                                                                 *
39524e1bc9a0SAchim Leubner  *              The LL Layer Functions Declarations end                            *
39534e1bc9a0SAchim Leubner  *                                                                                 *
39544e1bc9a0SAchim Leubner  ***********************************************************************************/
39554e1bc9a0SAchim Leubner 
39564e1bc9a0SAchim Leubner #endif  /*__SA_H__ */
3957