xref: /freebsd/sys/dev/pms/RefTisa/sallsdk/api/sa_spec.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_spec.h
254e1bc9a0SAchim Leubner  *  \brief The file defines the constants defined by sas spec
264e1bc9a0SAchim Leubner  */
274e1bc9a0SAchim Leubner 
284e1bc9a0SAchim Leubner /*****************************************************************************/
294e1bc9a0SAchim Leubner 
304e1bc9a0SAchim Leubner #ifndef  __SA_SPEC_H__
314e1bc9a0SAchim Leubner #define __SA_SPEC_H__
324e1bc9a0SAchim Leubner 
334e1bc9a0SAchim Leubner /****************************************************************
344e1bc9a0SAchim Leubner  *            SAS Specification related defines                 *
354e1bc9a0SAchim Leubner  ****************************************************************/
364e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_SMP                               0x00
374e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_SSP                               0x01
384e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_STP                               0x02
394e1bc9a0SAchim Leubner 
404e1bc9a0SAchim Leubner #define SA_OPENFRM_SIZE                                   (28)
414e1bc9a0SAchim Leubner #define SA_IDENTIFY_FRAME_SIZE                            (28)
424e1bc9a0SAchim Leubner //#define SAS_IDENTIFY_FRM_SIZE                             SA_IDENTIFY_FRAME_SIZE
434e1bc9a0SAchim Leubner 
444e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_DATA                        0x01
454e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_XRDY                        0x05
464e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_CMD                         0x06
474e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_RSP                         0x07
484e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_TASK                        0x16
494e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SMP_REQ                         0x40
504e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SMP_RSP                         0x41
514e1bc9a0SAchim Leubner 
524e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_1_5G                       0x08
534e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_3_0G                       0x09
544e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_6_0G                       0x0A
554e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_12_0G                      0x0B
564e1bc9a0SAchim Leubner 
574e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_NO_DEVICE                         0x00
584e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_END_DEVICE                        0x01
594e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_EDGE_EXPANDER                     0x02
604e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_FANOUT_EXPANDER                   0x03
614e1bc9a0SAchim Leubner 
624e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_END_DEVICE                          (SA_SAS_DEV_TYPE_END_DEVICE << 4)
634e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_EDGE_EXPANDER                       (SA_SAS_DEV_TYPE_EDGE_EXPANDER << 4)
644e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_FAN_EXPANDER                        (SA_SAS_DEV_TYPE_FANOUT_EXPANDER << 4)
654e1bc9a0SAchim Leubner 
664e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_GENERAL                         0x00
674e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_MANUFACTURE_INFORMATION         0x01
684e1bc9a0SAchim Leubner #define SA_SAS_SMP_READ_GPIO_REGISTER                     0x02
694e1bc9a0SAchim Leubner #define SA_SAS_SMP_DISCOVER                               0x10
704e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_PHY_ERROR_LOG                   0x11
714e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_PHY_SATA                        0x12
724e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_ROUTING_INFORMATION             0x13
734e1bc9a0SAchim Leubner #define SA_SAS_SMP_WRITE_GPIO_REGISTER                    0x82
744e1bc9a0SAchim Leubner #define SA_SAS_SMP_CONFIGURE_ROUTING_INFORMATION          0x90
754e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_CONTROL                            0x91
764e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_TEST                               0x92
774e1bc9a0SAchim Leubner 
784e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_ACCEPTED                      0x00
794e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_UNKNOWN                       0x01
804e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_FAILED                        0x02
814e1bc9a0SAchim Leubner #define SA_SAS_SMP_INVALID_REQ_FRAME_LENGTH               0x03
824e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_NOT_EXIST                          0x10
834e1bc9a0SAchim Leubner 
844e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_DIRECT                             0x00
854e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_SUBTRACTIVE                        0x01
864e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_TABLE                              0x02
874e1bc9a0SAchim Leubner 
884e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_LINK_RESET                          0x01
894e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_HARD_RESET                          0x02
904e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_DISABLE                             0x03
914e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_CLEAR_ERROR_LOG                     0x05
924e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_CLEAR_AFFILIATION                   0x06
934e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_TRANSMIT_PS_SIGNAL                  0x07
944e1bc9a0SAchim Leubner 
954e1bc9a0SAchim Leubner #define SA_SSP_CMDIU_LEN_BYTES                            28
964e1bc9a0SAchim Leubner #define SA_SSP_TMIU_LEN_BYTES                             28
974e1bc9a0SAchim Leubner 
984e1bc9a0SAchim Leubner 
994e1bc9a0SAchim Leubner #define SASD_DEV_SATA_MASK                                0xF0
1004e1bc9a0SAchim Leubner #define SASD_DEV_SAS_MASK                                 0x0F
1014e1bc9a0SAchim Leubner 
1024e1bc9a0SAchim Leubner #define SASD_DEV_SAS_END_DEVICE                           0x01 /* SAS end device type */
1034e1bc9a0SAchim Leubner #define SASD_DEV_SAS_EDGE_EXPANDER                        0x02 /* SAS edge expander device type */
1044e1bc9a0SAchim Leubner #define SASD_DEV_SAS_FAN_EXPANDER                         0x03 /* SAS fan out expander device type */
1054e1bc9a0SAchim Leubner 
1064e1bc9a0SAchim Leubner #define SASD_DEV_SATA_ATA_DEVICE                          0x10 /* SATA ATA device type */
1074e1bc9a0SAchim Leubner #define SASD_DEV_SATA_ATAPI_DEVICE                        0x20 /* SATA ATAPI device type */
1084e1bc9a0SAchim Leubner #define SASD_DEV_SATA_PM_DEVICE                           0x30 /* SATA PM device type */
1094e1bc9a0SAchim Leubner #define SASD_DEV_SATA_SEMB_DEVICE                         0x40 /* SATA SEMB device type */
1104e1bc9a0SAchim Leubner #define SASD_DEV_SATA_SEMB_WO_SEP_DEVICE                  0x50 /* SATA SEMB without SEP device type */
1114e1bc9a0SAchim Leubner 
1124e1bc9a0SAchim Leubner #define SASD_DEV_SATA_UNKNOWN_DEVICE                      0xFF /* SAS SATA unknown device type */
1134e1bc9a0SAchim Leubner 
1144e1bc9a0SAchim Leubner 
1154e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_SIMPLE                             0x0
1164e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_HEAD_OF_QUEUE                      0x1
1174e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_ORDERED                            0x2
1184e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_ACA                                0x4
1194e1bc9a0SAchim Leubner 
1204e1bc9a0SAchim Leubner 
1214e1bc9a0SAchim Leubner /*****************************************************************************
1224e1bc9a0SAchim Leubner ** SAS TM Function definitions
1234e1bc9a0SAchim Leubner *****************************************************************************/
1244e1bc9a0SAchim Leubner #define SASD_SAS_ABORT_TASK                               0x01
1254e1bc9a0SAchim Leubner #define SASD_SAS_ABORT_TASK_SET                           0x02
1264e1bc9a0SAchim Leubner #define SASD_SAS_CLEAR_TASK_SET                           0x04
1274e1bc9a0SAchim Leubner #define SASD_SAS_LOGICAL_UNIT_RESET                       0x08
1284e1bc9a0SAchim Leubner #define SASD_SAS_CLEAR_ACA                                0x40
1294e1bc9a0SAchim Leubner #define SASD_SAS_QUARY_TASK                               0x80
1304e1bc9a0SAchim Leubner 
1314e1bc9a0SAchim Leubner /****************************************************************
1324e1bc9a0SAchim Leubner  *            SATA Specification related defines                *
1334e1bc9a0SAchim Leubner  ****************************************************************/
1344e1bc9a0SAchim Leubner #define SA_SATA_MAX_QUEUED_COMMANDS                       32
1354e1bc9a0SAchim Leubner #define SA_SATA_MAX_PM_PORTS                              15
1364e1bc9a0SAchim Leubner 
1374e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_HOST_2_DEV                       0x27
1384e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_DEV_2_HOST                       0x34
1394e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_SET_DEVICE                       0xA1
1404e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_DMA_ACTIVE                       0x39
1414e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_FDMA_SETUP                       0x41
1424e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_BIST                             0x58
1434e1bc9a0SAchim Leubner 
1444e1bc9a0SAchim Leubner #define SA_SATA_CMD_IDENTIFY_DEVICE                       0xEC
1454e1bc9a0SAchim Leubner #define SA_SATA_CMD_EXEC_DEV_DIAG                         0x90
1464e1bc9a0SAchim Leubner 
1474e1bc9a0SAchim Leubner #define SA_SATA_CONTROL_SRST                              0x04
1484e1bc9a0SAchim Leubner 
1494e1bc9a0SAchim Leubner #define SA_SATA_H2DREG_LEN_BYTES                          20
1504e1bc9a0SAchim Leubner #define SA_SATA_H2D_BIST_LEN_BYTES                        12
1514e1bc9a0SAchim Leubner /****************************************************************
1524e1bc9a0SAchim Leubner  *            SAS Specification related structures              *
1534e1bc9a0SAchim Leubner  ****************************************************************/
1544e1bc9a0SAchim Leubner 
1554e1bc9a0SAchim Leubner 
1564e1bc9a0SAchim Leubner 
1574e1bc9a0SAchim Leubner /** \brief Structure for SATA BIST FIS
1584e1bc9a0SAchim Leubner  *
1594e1bc9a0SAchim Leubner  * The agsaFisBIST_t data structure describes a SATA FIS (Frame Information Structures)
1604e1bc9a0SAchim Leubner  * for FIS type BIST (Built In Self Test) Activate Bidirectional.
1614e1bc9a0SAchim Leubner  *
1624e1bc9a0SAchim Leubner  * This data structure is one instance of the SATA request structure agsaSATAInitiatorRequest_t,
1634e1bc9a0SAchim Leubner  * which is one instance of the generic request, issued to saSATAStart().
1644e1bc9a0SAchim Leubner  */
1654e1bc9a0SAchim Leubner 
1664e1bc9a0SAchim Leubner 
1674e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_T_BIT  0x80
1684e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_A_BIT  0x40
1694e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_S_BIT  0x20
1704e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_L_BIT  0x10
1714e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_F_BIT  0x08
1724e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_P_BIT  0x04
1734e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_R_BIT  0x02
1744e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_V_BIT  0x01
1754e1bc9a0SAchim Leubner 
1764e1bc9a0SAchim Leubner /*
1774e1bc9a0SAchim Leubner  * The first SATA DWORD types.
1784e1bc9a0SAchim Leubner  */
1794e1bc9a0SAchim Leubner typedef struct agsaFisBISTHeader_s
1804e1bc9a0SAchim Leubner {
1814e1bc9a0SAchim Leubner     bit8    fisType; /* fisType, set to 58h for BIST */
1824e1bc9a0SAchim Leubner     bit8    pmPort;
1834e1bc9a0SAchim Leubner     /* b7-b4  reserved */
1844e1bc9a0SAchim Leubner     /* b3-b0  PM Port. device port address that the PM should deliver the FIS to */
1854e1bc9a0SAchim Leubner     bit8   patternDefinition;
1864e1bc9a0SAchim Leubner     /* b7 : T Far end transmit only mode */
1874e1bc9a0SAchim Leubner     /* b6 : A ALIGN Bypass (Do not Transmit Align Primitives) (valid only in combination with T Bit) (optional behavior) */
1884e1bc9a0SAchim Leubner     /* b5 : S Bypass Scrambling (valid only in combination with T Bit) (optional behavior) */
1894e1bc9a0SAchim Leubner     /* b4 : L Far End Retimed Loopback. Transmitter shall insert additional ALIGNS) */
1904e1bc9a0SAchim Leubner     /* b3 : F Far End Analog (AFE) Loopback (Optional) */
1914e1bc9a0SAchim Leubner     /* b2 : P Primitive bit. (valid only in combination with the T Bit) (optional behavior) */
1924e1bc9a0SAchim Leubner     /* b1 : R Reserved */
1934e1bc9a0SAchim Leubner     /* b0 : V Vendor Specific Test Mode. Causes all other bits to be ignored */
1944e1bc9a0SAchim Leubner     bit8   reserved5;       /* Reserved */
1954e1bc9a0SAchim Leubner } agsaFisBISTHeader_t;
1964e1bc9a0SAchim Leubner 
1974e1bc9a0SAchim Leubner 
1984e1bc9a0SAchim Leubner typedef struct agsaFisRegD2HHeader_s
1994e1bc9a0SAchim Leubner {
2004e1bc9a0SAchim Leubner     bit8    fisType; /* fisType, set to 34h for DeviceToHostReg */
2014e1bc9a0SAchim Leubner     bit8    i_pmPort;
2024e1bc9a0SAchim Leubner     /* b7     : reserved */
2034e1bc9a0SAchim Leubner     /* b6     : I Interrupt bit */
2044e1bc9a0SAchim Leubner     /* b5-b4  : reserved */
2054e1bc9a0SAchim Leubner     /* b3-b0  : PM Port */
2064e1bc9a0SAchim Leubner     bit8    status; /* Contains the contents to be placed in the Status(and Alternate status)
2074e1bc9a0SAchim Leubner                        Register of the Shadow Command Block */
2084e1bc9a0SAchim Leubner     bit8    error;  /* Contains the contents to be placed in the Error register of the Shadow Command Block */
2094e1bc9a0SAchim Leubner } agsaFisRegD2HHeader_t;
2104e1bc9a0SAchim Leubner 
2114e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBitsHeader_s
2124e1bc9a0SAchim Leubner {
2134e1bc9a0SAchim Leubner     bit8    fisType;    /* fisType, set to A1h for SetDeviceBit */
2144e1bc9a0SAchim Leubner     bit8    n_i_pmPort;
2154e1bc9a0SAchim Leubner     /* b7   : n Bit. Notification bit. If set device needs attention. */
2164e1bc9a0SAchim Leubner     /* b6   : i Bit. Interrupt Bit */
2174e1bc9a0SAchim Leubner     /* b5-b4: reserved2 */
2184e1bc9a0SAchim Leubner     /* b3-b0: PM Port */
2194e1bc9a0SAchim Leubner     bit8    statusHi_Lo;
2204e1bc9a0SAchim Leubner     /* b7   : reserved */
2214e1bc9a0SAchim Leubner     /* b6-b4: Status Hi. Contains the contents to be placed in bits 6, 5, and 4 of
2224e1bc9a0SAchim Leubner        the Status register of the Shadow Command Block */
2234e1bc9a0SAchim Leubner     /* b3   : Reserved */
2244e1bc9a0SAchim Leubner     /* b2-b0: Status Lo  Contains the contents to be placed in bits 2,1, and 0 of the
2254e1bc9a0SAchim Leubner        Status register of the Shadow Command Block */
2264e1bc9a0SAchim Leubner     bit8    error;    /* Contains the contents to be placed in the Error register of
2274e1bc9a0SAchim Leubner                          the Shadow Command Block */
2284e1bc9a0SAchim Leubner } agsaFisSetDevBitsHeader_t;
2294e1bc9a0SAchim Leubner 
2304e1bc9a0SAchim Leubner typedef struct agsaFisRegH2DHeader_s
2314e1bc9a0SAchim Leubner {
2324e1bc9a0SAchim Leubner     bit8    fisType;      /* fisType, set to 27h for DeviceToHostReg */
2334e1bc9a0SAchim Leubner     bit8    c_pmPort;
2344e1bc9a0SAchim Leubner     /* b7   : C_bit This bit is set to one when the register transfer is
2354e1bc9a0SAchim Leubner        due to an update of the Command register */
2364e1bc9a0SAchim Leubner     /* b6-b4: reserved */
2374e1bc9a0SAchim Leubner     /* b3-b0: PM Port */
2384e1bc9a0SAchim Leubner     bit8    command;  /* Contains the contents of the Command register of
2394e1bc9a0SAchim Leubner                          the Shadow Command Block */
2404e1bc9a0SAchim Leubner     bit8    features; /* Contains the contents of the Features register of
2414e1bc9a0SAchim Leubner                          the Shadow Command Block */
2424e1bc9a0SAchim Leubner } agsaFisRegH2DHeader_t;
2434e1bc9a0SAchim Leubner 
2444e1bc9a0SAchim Leubner typedef struct agsaFisPioSetupHeader_s
2454e1bc9a0SAchim Leubner {
2464e1bc9a0SAchim Leubner     bit8    fisType;  /* set to 5F */
2474e1bc9a0SAchim Leubner     bit8    i_d_pmPort;
2484e1bc9a0SAchim Leubner     /* b7   : reserved */
2494e1bc9a0SAchim Leubner     /* b6   : i bit. Interrupt bit */
2504e1bc9a0SAchim Leubner     /* b5   : d bit. data transfer direction. set to 1 for device to host xfer */
2514e1bc9a0SAchim Leubner     /* b4   : reserved */
2524e1bc9a0SAchim Leubner     /* b3-b0: PM Port */
2534e1bc9a0SAchim Leubner     bit8    status;
2544e1bc9a0SAchim Leubner     bit8    error;
2554e1bc9a0SAchim Leubner } agsaFisPioSetupHeader_t;
2564e1bc9a0SAchim Leubner 
2574e1bc9a0SAchim Leubner typedef union agsaFisHeader_s
2584e1bc9a0SAchim Leubner {
2594e1bc9a0SAchim Leubner     agsaFisBISTHeader_t       Bist;
2604e1bc9a0SAchim Leubner     agsaFisRegD2HHeader_t     D2H;
2614e1bc9a0SAchim Leubner     agsaFisRegH2DHeader_t     H2D;
2624e1bc9a0SAchim Leubner     agsaFisSetDevBitsHeader_t SetDevBits;
2634e1bc9a0SAchim Leubner     agsaFisPioSetupHeader_t   PioSetup;
2644e1bc9a0SAchim Leubner } agsaFisHeader_t;
2654e1bc9a0SAchim Leubner 
2664e1bc9a0SAchim Leubner 
2674e1bc9a0SAchim Leubner typedef struct agsaFisBISTData_s
2684e1bc9a0SAchim Leubner {
2694e1bc9a0SAchim Leubner     bit8    data[8]; /* BIST data */
2704e1bc9a0SAchim Leubner } agsaFisBISTData_t;
2714e1bc9a0SAchim Leubner 
2724e1bc9a0SAchim Leubner 
2734e1bc9a0SAchim Leubner typedef struct agsaFisBIST_s
2744e1bc9a0SAchim Leubner {
2754e1bc9a0SAchim Leubner     agsaFisBISTHeader_t   h;
2764e1bc9a0SAchim Leubner     agsaFisBISTData_t     d;
2774e1bc9a0SAchim Leubner } agsaFisBIST_t;
2784e1bc9a0SAchim Leubner 
2794e1bc9a0SAchim Leubner /** \brief Structure for SATA Device to Host Register FIS
2804e1bc9a0SAchim Leubner  *
2814e1bc9a0SAchim Leubner  * The agsaFisRegDeviceToHost_t data structure describes a SATA FIS (Frame Information
2824e1bc9a0SAchim Leubner  * Structures) for FIS type Register Device to Host.
2834e1bc9a0SAchim Leubner  *
2844e1bc9a0SAchim Leubner  * This structure is used only as inbound data (device to host) to describe device to
2854e1bc9a0SAchim Leubner  * host response.
2864e1bc9a0SAchim Leubner  */
2874e1bc9a0SAchim Leubner 
2884e1bc9a0SAchim Leubner #define SA_SATA_RD2H_I_BIT  0x40
2894e1bc9a0SAchim Leubner 
2904e1bc9a0SAchim Leubner typedef struct agsaFisRegD2HData_s
2914e1bc9a0SAchim Leubner {
2924e1bc9a0SAchim Leubner     bit8    lbaLow;     /* Contains the contents to be placed in the LBA Low register
2934e1bc9a0SAchim Leubner                            of the Shadow Command Block */
2944e1bc9a0SAchim Leubner     bit8    lbaMid;     /* Contains the contents to be placed in the LBA Mid register
2954e1bc9a0SAchim Leubner                            of the Shadow Command Block */
2964e1bc9a0SAchim Leubner 
2974e1bc9a0SAchim Leubner     bit8    lbaHigh;    /* Contains the contents to be placed in the LBA High register
2984e1bc9a0SAchim Leubner                            of the Shadow Command Block */
2994e1bc9a0SAchim Leubner     bit8    device;     /* Contains the contents to be placed in the Device register of the Shadow Command Block */
3004e1bc9a0SAchim Leubner 
3014e1bc9a0SAchim Leubner     bit8    lbaLowExp;  /* Contains the contents of the expanded address field
3024e1bc9a0SAchim Leubner                            of the Shadow Command Block */
3034e1bc9a0SAchim Leubner     bit8    lbaMidExp;  /* Contains the contents of the expanded address field
3044e1bc9a0SAchim Leubner                            of the Shadow Command Block */
3054e1bc9a0SAchim Leubner     bit8    lbaHighExp; /* Contains the contents of the expanded address field
3064e1bc9a0SAchim Leubner                            of the Shadow Command Block */
3074e1bc9a0SAchim Leubner     bit8    reserved4;  /** reserved */
3084e1bc9a0SAchim Leubner 
3094e1bc9a0SAchim Leubner     bit8    sectorCount; /* Contains the contents to be placed in the Sector
3104e1bc9a0SAchim Leubner                             Count register of the Shadow Command Block */
3114e1bc9a0SAchim Leubner     bit8    sectorCountExp;  /* Contains the contents of the expanded address
3124e1bc9a0SAchim Leubner                                 field of the Shadow Command Block */
3134e1bc9a0SAchim Leubner     bit8    reserved6;  /* Reserved */
3144e1bc9a0SAchim Leubner     bit8    reserved5;  /* Reserved */
3154e1bc9a0SAchim Leubner     bit32   reserved7; /* Reserved */
3164e1bc9a0SAchim Leubner } agsaFisRegD2HData_t;
3174e1bc9a0SAchim Leubner 
3184e1bc9a0SAchim Leubner 
3194e1bc9a0SAchim Leubner typedef struct agsaFisRegDeviceToHost_s
3204e1bc9a0SAchim Leubner {
3214e1bc9a0SAchim Leubner     agsaFisRegD2HHeader_t     h;
3224e1bc9a0SAchim Leubner     agsaFisRegD2HData_t       d;
3234e1bc9a0SAchim Leubner } agsaFisRegDeviceToHost_t;
3244e1bc9a0SAchim Leubner 
3254e1bc9a0SAchim Leubner 
3264e1bc9a0SAchim Leubner 
3274e1bc9a0SAchim Leubner /** \brief Structure for SATA Host to Device Register FIS
3284e1bc9a0SAchim Leubner  *
3294e1bc9a0SAchim Leubner  * The agsaFisRegHostToDevice_t data structure describes a SATA FIS
3304e1bc9a0SAchim Leubner  * (Frame Information Structures) for FIS type Register Host to Device.
3314e1bc9a0SAchim Leubner 
3324e1bc9a0SAchim Leubner  * This data structure is one instance of the SATA request structure
3334e1bc9a0SAchim Leubner  * agsaSATAInitiatorRequest_t, which is one instance of the generic request,
3344e1bc9a0SAchim Leubner  * issued to saSATAStart().
3354e1bc9a0SAchim Leubner  */
3364e1bc9a0SAchim Leubner typedef struct agsaFisRegH2DData_s
3374e1bc9a0SAchim Leubner {
3384e1bc9a0SAchim Leubner     bit8    lbaLow;       /* Contains the contents of the LBA Low register of the Shadow Command Block */
3394e1bc9a0SAchim Leubner     bit8    lbaMid;       /* Contains the contents of the LBA Mid register of the Shadow Command Block */
3404e1bc9a0SAchim Leubner     bit8    lbaHigh;      /* Contains the contents of the LBA High register of the Shadow Command Block */
3414e1bc9a0SAchim Leubner     bit8    device;       /* Contains the contents of the Device register of the Shadow Command Block */
3424e1bc9a0SAchim Leubner 
3434e1bc9a0SAchim Leubner     bit8    lbaLowExp;    /* Contains the contents of the expanded address field of the
3444e1bc9a0SAchim Leubner                              Shadow Command Block */
3454e1bc9a0SAchim Leubner     bit8    lbaMidExp;    /* Contains the contents of the expanded address field of the
3464e1bc9a0SAchim Leubner                              Shadow Command Block */
3474e1bc9a0SAchim Leubner     bit8    lbaHighExp;   /* Contains the contents of the expanded address field of the
3484e1bc9a0SAchim Leubner                              Shadow Command Block */
3494e1bc9a0SAchim Leubner     bit8    featuresExp;  /* Contains the contents of the expanded address field of the
3504e1bc9a0SAchim Leubner                              Shadow Command Block */
3514e1bc9a0SAchim Leubner 
3524e1bc9a0SAchim Leubner     bit8    sectorCount;    /* Contains the contents of the Sector Count register of the
3534e1bc9a0SAchim Leubner                                Shadow Command Block */
3544e1bc9a0SAchim Leubner     bit8    sectorCountExp; /* Contains the contents of the expanded address field of
3554e1bc9a0SAchim Leubner                                the Shadow Command Block */
3564e1bc9a0SAchim Leubner     bit8    reserved4;    /* Reserved */
3574e1bc9a0SAchim Leubner     bit8    control;      /* Contains the contents of the Device Control register of the
3584e1bc9a0SAchim Leubner                              Shadow Command Block */
3594e1bc9a0SAchim Leubner     bit32   reserved5;      /* Reserved */
3604e1bc9a0SAchim Leubner } agsaFisRegH2DData_t;
3614e1bc9a0SAchim Leubner 
3624e1bc9a0SAchim Leubner typedef struct agsaFisRegHostToDevice_s
3634e1bc9a0SAchim Leubner {
3644e1bc9a0SAchim Leubner     agsaFisRegH2DHeader_t   h;
3654e1bc9a0SAchim Leubner     agsaFisRegH2DData_t     d;
3664e1bc9a0SAchim Leubner } agsaFisRegHostToDevice_t;
3674e1bc9a0SAchim Leubner 
3684e1bc9a0SAchim Leubner 
3694e1bc9a0SAchim Leubner /** \brief Structure for SATA SetDeviceBit FIS
3704e1bc9a0SAchim Leubner  *
3714e1bc9a0SAchim Leubner  * The agsaFisSetDevBits_t data structure describes a SATA FIS (Frame Information Structures)
3724e1bc9a0SAchim Leubner  * for FIS type Set Device Bits - Device to Host.
3734e1bc9a0SAchim Leubner  *
3744e1bc9a0SAchim Leubner  * This structure is used only as inbound data (device to host) to describe device to host
3754e1bc9a0SAchim Leubner  * response.
3764e1bc9a0SAchim Leubner  */
3774e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBitsData_s
3784e1bc9a0SAchim Leubner {
3794e1bc9a0SAchim Leubner     bit32   reserved6; /* Reserved */
3804e1bc9a0SAchim Leubner } agsaFisSetDevBitsData_t;
3814e1bc9a0SAchim Leubner 
3824e1bc9a0SAchim Leubner 
3834e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBits_s
3844e1bc9a0SAchim Leubner {
3854e1bc9a0SAchim Leubner     agsaFisSetDevBitsHeader_t   h;
3864e1bc9a0SAchim Leubner     agsaFisSetDevBitsData_t     d;
3874e1bc9a0SAchim Leubner } agsaFisSetDevBits_t;
3884e1bc9a0SAchim Leubner 
3894e1bc9a0SAchim Leubner 
3904e1bc9a0SAchim Leubner /** \brief union data structure specifies a FIS from host software
3914e1bc9a0SAchim Leubner  *
3924e1bc9a0SAchim Leubner  * union data structure specifies a FIS from host software
3934e1bc9a0SAchim Leubner  */
3944e1bc9a0SAchim Leubner typedef union agsaSATAHostFis_u
3954e1bc9a0SAchim Leubner {
3964e1bc9a0SAchim Leubner     agsaFisRegHostToDevice_t    fisRegHostToDev; /* Structure containing the FIS request
3974e1bc9a0SAchim Leubner                                                     for Register - Host to Device */
3984e1bc9a0SAchim Leubner     agsaFisBIST_t               fisBIST; /* Structure containing the FIS request for BIST */
3994e1bc9a0SAchim Leubner } agsaSATAHostFis_t;
4004e1bc9a0SAchim Leubner 
4014e1bc9a0SAchim Leubner /** \brief
4024e1bc9a0SAchim Leubner  *
4034e1bc9a0SAchim Leubner  * This structure is used
4044e1bc9a0SAchim Leubner  *
4054e1bc9a0SAchim Leubner  */
4064e1bc9a0SAchim Leubner typedef struct agsaFisPioSetupData_s
4074e1bc9a0SAchim Leubner {
4084e1bc9a0SAchim Leubner     bit8    lbaLow;       /* Contains the contents of the LBA Low register of the Shadow Command Block */
4094e1bc9a0SAchim Leubner     bit8    lbaMid;       /* Contains the contents of the LBA Mid register of the Shadow Command Block */
4104e1bc9a0SAchim Leubner     bit8    lbaHigh;      /* Contains the contents of the LBA High register of the Shadow Command Block */
4114e1bc9a0SAchim Leubner     bit8    device;       /* Contains the contents of the Device register of the Shadow Command Block */
4124e1bc9a0SAchim Leubner 
4134e1bc9a0SAchim Leubner     bit8    lbaLowExp;    /* Contains the contents of the expanded address field of the
4144e1bc9a0SAchim Leubner                              Shadow Command Block */
4154e1bc9a0SAchim Leubner     bit8    lbaMidExp;    /* Contains the contents of the expanded address field of the
4164e1bc9a0SAchim Leubner                              Shadow Command Block */
4174e1bc9a0SAchim Leubner     bit8    lbaHighExp;   /* Contains the contents of the expanded address field of the
4184e1bc9a0SAchim Leubner                              Shadow Command Block */
4194e1bc9a0SAchim Leubner     bit8    reserved1;    /* reserved */
4204e1bc9a0SAchim Leubner 
4214e1bc9a0SAchim Leubner     bit8    sectorCount;    /* Contains the contents of the Sector Count register of the
4224e1bc9a0SAchim Leubner                                Shadow Command Block */
4234e1bc9a0SAchim Leubner     bit8    sectorCountExp; /* Contains the contents of the expanded address field of
4244e1bc9a0SAchim Leubner                                the Shadow Command Block */
4254e1bc9a0SAchim Leubner     bit8    reserved2;    /* Reserved */
4264e1bc9a0SAchim Leubner     bit8    e_status;     /* Contains the new value of Status Reg of the Command block
4274e1bc9a0SAchim Leubner                              at the conclusion of the subsequent Data FIS */
4284e1bc9a0SAchim Leubner     bit8    reserved4[2];    /* Reserved */
4294e1bc9a0SAchim Leubner     bit8    transferCount[2]; /* the number of bytes to be xfered in the subsequent Data FiS */
4304e1bc9a0SAchim Leubner } agsaFisPioSetupData_t;
4314e1bc9a0SAchim Leubner 
4324e1bc9a0SAchim Leubner 
4334e1bc9a0SAchim Leubner typedef struct agsaFisPioSetup_s
4344e1bc9a0SAchim Leubner {
4354e1bc9a0SAchim Leubner     agsaFisPioSetupHeader_t h;
4364e1bc9a0SAchim Leubner     agsaFisPioSetupData_t   d;
4374e1bc9a0SAchim Leubner } agsaFisPioSetup_t;
4384e1bc9a0SAchim Leubner 
4394e1bc9a0SAchim Leubner 
4404e1bc9a0SAchim Leubner 
4414e1bc9a0SAchim Leubner /** \brief describe SAS IDENTIFY address frame
4424e1bc9a0SAchim Leubner  *
4434e1bc9a0SAchim Leubner  * describe SAS IDENTIFY address frame, the CRC field is not included in the structure
4444e1bc9a0SAchim Leubner  *
4454e1bc9a0SAchim Leubner  */
4464e1bc9a0SAchim Leubner typedef struct agsaSASIdentify_s
4474e1bc9a0SAchim Leubner {
4484e1bc9a0SAchim Leubner     bit8  deviceType_addressFrameType;
4494e1bc9a0SAchim Leubner     /* b7   : reserved */
4504e1bc9a0SAchim Leubner     /* b6-4 : device type */
4514e1bc9a0SAchim Leubner     /* b3-0 : address frame type */
4524e1bc9a0SAchim Leubner     bit8  reason;  /* reserved */
4534e1bc9a0SAchim Leubner     /* b7-4 : reserved */
4544e1bc9a0SAchim Leubner     /* b3-0 : reason SAS2 */
4554e1bc9a0SAchim Leubner     bit8  initiator_ssp_stp_smp;
4564e1bc9a0SAchim Leubner     /* b8-4 : reserved */
4574e1bc9a0SAchim Leubner     /* b3   : SSP initiator port */
4584e1bc9a0SAchim Leubner     /* b2   : STP initiator port */
4594e1bc9a0SAchim Leubner     /* b1   : SMP initiator port */
4604e1bc9a0SAchim Leubner     /* b0   : reserved */
4614e1bc9a0SAchim Leubner     bit8  target_ssp_stp_smp;
4624e1bc9a0SAchim Leubner     /* b8-4 : reserved */
4634e1bc9a0SAchim Leubner     /* b3   : SSP target port */
4644e1bc9a0SAchim Leubner     /* b2   : STP target port */
4654e1bc9a0SAchim Leubner     /* b1   : SMP target port */
4664e1bc9a0SAchim Leubner     /* b0   : reserved */
4674e1bc9a0SAchim Leubner     bit8  deviceName[8];            /* reserved */
4684e1bc9a0SAchim Leubner 
4694e1bc9a0SAchim Leubner     bit8  sasAddressHi[4];          /* BE SAS address Lo */
4704e1bc9a0SAchim Leubner     bit8  sasAddressLo[4];          /* BE SAS address Hi */
4714e1bc9a0SAchim Leubner 
4724e1bc9a0SAchim Leubner     bit8  phyIdentifier;            /* phy identifier of the phy transmitting the IDENTIFY address frame */
4734e1bc9a0SAchim Leubner     bit8  zpsds_breakReplyCap;
4744e1bc9a0SAchim Leubner     /* b7-3 : reserved */
4754e1bc9a0SAchim Leubner     /* b2   : Inside ZPSDS Persistent */
4764e1bc9a0SAchim Leubner     /* b1   : Requested Inside ZPSDS */
4774e1bc9a0SAchim Leubner     /* b0   : Break Reply Capable */
4784e1bc9a0SAchim Leubner     bit8  reserved3[6];             /* reserved */
4794e1bc9a0SAchim Leubner } agsaSASIdentify_t;
4804e1bc9a0SAchim Leubner 
4814e1bc9a0SAchim Leubner #define SA_IDFRM_GET_SAS_ADDRESSLO(identFrame)                  \
4824e1bc9a0SAchim Leubner     DMA_BEBIT32_TO_BIT32(*(bit32 *)(identFrame)->sasAddressLo)
4834e1bc9a0SAchim Leubner 
4844e1bc9a0SAchim Leubner #define SA_IDFRM_GET_SAS_ADDRESSHI(identFrame)                  \
4854e1bc9a0SAchim Leubner     DMA_BEBIT32_TO_BIT32(*(bit32 *)(identFrame)->sasAddressHi)
4864e1bc9a0SAchim Leubner 
4874e1bc9a0SAchim Leubner #define SA_IDFRM_GET_DEVICETTYPE(identFrame)                    \
4884e1bc9a0SAchim Leubner     (((identFrame)->deviceType_addressFrameType & 0x70) >> 4)
4894e1bc9a0SAchim Leubner 
4904e1bc9a0SAchim Leubner #define SA_IDFRM_PUT_SAS_ADDRESSLO(identFrame, src32)                   \
4914e1bc9a0SAchim Leubner     ((*(bit32 *)((identFrame)->sasAddressLo)) = BIT32_TO_DMA_BEBIT32(src32))
4924e1bc9a0SAchim Leubner 
4934e1bc9a0SAchim Leubner #define SA_IDFRM_PUT_SAS_ADDRESSHI(identFrame, src32)                   \
4944e1bc9a0SAchim Leubner     ((*(bit32 *)((identFrame)->sasAddressHi)) = BIT32_TO_DMA_BEBIT32(src32))
4954e1bc9a0SAchim Leubner 
4964e1bc9a0SAchim Leubner #define SA_IDFRM_SSP_BIT         0x8   /* SSP Initiator port */
4974e1bc9a0SAchim Leubner #define SA_IDFRM_STP_BIT         0x4   /* STP Initiator port */
4984e1bc9a0SAchim Leubner #define SA_IDFRM_SMP_BIT         0x2   /* SMP Initiator port */
4994e1bc9a0SAchim Leubner #define SA_IDFRM_SATA_BIT        0x1   /* SATA device, valid in the discovery response only */
5004e1bc9a0SAchim Leubner 
5014e1bc9a0SAchim Leubner 
5024e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SSP_INITIATOR(identFrame)                           \
5034e1bc9a0SAchim Leubner     (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_SSP_BIT) == SA_IDFRM_SSP_BIT)
5044e1bc9a0SAchim Leubner 
5054e1bc9a0SAchim Leubner #define SA_IDFRM_IS_STP_INITIATOR(identFrame)                           \
5064e1bc9a0SAchim Leubner     (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_STP_BIT) == SA_IDFRM_STP_BIT)
5074e1bc9a0SAchim Leubner 
5084e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SMP_INITIATOR(identFrame)                           \
5094e1bc9a0SAchim Leubner     (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_SMP_BIT) == SA_IDFRM_SMP_BIT)
5104e1bc9a0SAchim Leubner 
5114e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SSP_TARGET(identFrame)                              \
5124e1bc9a0SAchim Leubner     (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SSP_BIT) == SA_IDFRM_SSP_BIT)
5134e1bc9a0SAchim Leubner 
5144e1bc9a0SAchim Leubner #define SA_IDFRM_IS_STP_TARGET(identFrame)                              \
5154e1bc9a0SAchim Leubner     (((identFrame)->target_ssp_stp_smp & SA_IDFRM_STP_BIT) == SA_IDFRM_STP_BIT)
5164e1bc9a0SAchim Leubner 
5174e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SMP_TARGET(identFrame)                              \
5184e1bc9a0SAchim Leubner     (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SMP_BIT) == SA_IDFRM_SMP_BIT)
5194e1bc9a0SAchim Leubner 
5204e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SATA_DEVICE(identFrame)                             \
5214e1bc9a0SAchim Leubner     (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SATA_BIT) == SA_IDFRM_SATA_BIT)
5224e1bc9a0SAchim Leubner 
5234e1bc9a0SAchim Leubner /** \brief data structure provides the identify data of the SATA device
5244e1bc9a0SAchim Leubner  *
5254e1bc9a0SAchim Leubner  * data structure provides the identify data of the SATA device
5264e1bc9a0SAchim Leubner  *
5274e1bc9a0SAchim Leubner  */
5284e1bc9a0SAchim Leubner typedef struct agsaSATAIdentifyData_s
5294e1bc9a0SAchim Leubner {
5304e1bc9a0SAchim Leubner   bit16   rm_ataDevice;
5314e1bc9a0SAchim Leubner     /* b15-b9 :  */
5324e1bc9a0SAchim Leubner     /* b8     :  ataDevice */
5334e1bc9a0SAchim Leubner     /* b7-b1  : */
5344e1bc9a0SAchim Leubner     /* b0     :  removableMedia */
5354e1bc9a0SAchim Leubner   bit16   word1_9[9];                    /**< word 1 to 9 of identify device information */
5364e1bc9a0SAchim Leubner   bit8    serialNumber[20];              /**< word 10 to 19 of identify device information, 20 ASCII chars */
5374e1bc9a0SAchim Leubner   bit16   word20_22[3];                  /**< word 20 to 22 of identify device information */
5384e1bc9a0SAchim Leubner   bit8    firmwareVersion[8];            /**< word 23 to 26 of identify device information, 4 ASCII chars */
5394e1bc9a0SAchim Leubner   bit8    modelNumber[40];               /**< word 27 to 46 of identify device information, 40 ASCII chars */
5404e1bc9a0SAchim Leubner   bit16   word47_48[2];                  /**< word 47 to 48 of identify device information, 40 ASCII chars */
5414e1bc9a0SAchim Leubner   bit16   dma_lba_iod_ios_stimer;
5424e1bc9a0SAchim Leubner     /* b15-b14:word49_bit14_15 */
5434e1bc9a0SAchim Leubner     /* b13    : standbyTimerSupported */
5444e1bc9a0SAchim Leubner     /* b12    : word49_bit12 */
5454e1bc9a0SAchim Leubner     /* b11    : IORDYSupported */
5464e1bc9a0SAchim Leubner     /* b10     : IORDYDisabled */
5474e1bc9a0SAchim Leubner     /* b9     : lbaSupported */
5484e1bc9a0SAchim Leubner     /* b8     : dmaSupported */
5494e1bc9a0SAchim Leubner     /* b7-b0  : retired */
5504e1bc9a0SAchim Leubner   bit16   word50_52[3];                  /**< word 50 to 52 of identify device information, 40 ASCII chars */
5514e1bc9a0SAchim Leubner   bit16   valid_w88_w70;
5524e1bc9a0SAchim Leubner     /* b15-3  : word53_bit3_15 */
5534e1bc9a0SAchim Leubner     /* b2     : validWord88  */
5544e1bc9a0SAchim Leubner     /* b1     : validWord70_64  */
5554e1bc9a0SAchim Leubner     /* b0     : word53_bit0  */
5564e1bc9a0SAchim Leubner   bit16   word54_59[6];                  /**< word54-59 of identify device information  */
5574e1bc9a0SAchim Leubner   bit16   numOfUserAddressableSectorsLo; /**< word60 of identify device information  */
5584e1bc9a0SAchim Leubner   bit16   numOfUserAddressableSectorsHi; /**< word61 of identify device information  */
5594e1bc9a0SAchim Leubner   bit16   word62_74[13];                 /**< word62-74 of identify device information  */
5604e1bc9a0SAchim Leubner   bit16   queueDepth;
5614e1bc9a0SAchim Leubner     /* b15-5  : word75_bit5_15 */
5624e1bc9a0SAchim Leubner     /* b4-0   : queueDepth */
5634e1bc9a0SAchim Leubner   bit16   sataCapabilities;
5644e1bc9a0SAchim Leubner     /* b15-b11: word76_bit11_15  */
5654e1bc9a0SAchim Leubner     /* b10    : phyEventCountersSupport */
5664e1bc9a0SAchim Leubner     /* b9     : hostInitPowerMangment */
5674e1bc9a0SAchim Leubner     /* b8     : nativeCommandQueuing */
5684e1bc9a0SAchim Leubner     /* b7-b3  : word76_bit4_7 */
5694e1bc9a0SAchim Leubner     /* b2     : sataGen2Supported (3.0 Gbps) */
5704e1bc9a0SAchim Leubner     /* b1     : sataGen1Supported (1.5 Gbps) */
5714e1bc9a0SAchim Leubner     /* b0      :word76_bit0 */
5724e1bc9a0SAchim Leubner   bit16   word77;                        /**< word77 of identify device information */
5734e1bc9a0SAchim Leubner     /* b15-b6 : word77 bit6_15, Reserved */
5744e1bc9a0SAchim Leubner     /* b5     : DMA Setup Auto-Activate support */
5754e1bc9a0SAchim Leubner     /* b4     : NCQ streaming support */
5764e1bc9a0SAchim Leubner     /* b3-b1  : coded value indicating current negotiated SATA signal speed */
5774e1bc9a0SAchim Leubner     /* b0     : shall be zero */
5784e1bc9a0SAchim Leubner   bit16   sataFeaturesSupported;
5794e1bc9a0SAchim Leubner     /* b15-b7 : word78_bit7_15 */
5804e1bc9a0SAchim Leubner     /* b6     : softSettingPreserveSupported */
5814e1bc9a0SAchim Leubner     /* b5     : word78_bit5 */
5824e1bc9a0SAchim Leubner     /* b4     : inOrderDataDeliverySupported */
5834e1bc9a0SAchim Leubner     /* b3     : devInitPowerManagementSupported */
5844e1bc9a0SAchim Leubner     /* b2     : autoActiveDMASupported */
5854e1bc9a0SAchim Leubner     /* b1     : nonZeroBufOffsetSupported */
5864e1bc9a0SAchim Leubner     /* b0     : word78_bit0  */
5874e1bc9a0SAchim Leubner   bit16   sataFeaturesEnabled;
5884e1bc9a0SAchim Leubner     /* b15-7  : word79_bit7_15  */
5894e1bc9a0SAchim Leubner     /* b6     : softSettingPreserveEnabled */
5904e1bc9a0SAchim Leubner     /* b5     : word79_bit5  */
5914e1bc9a0SAchim Leubner     /* b4     : inOrderDataDeliveryEnabled */
5924e1bc9a0SAchim Leubner     /* b3     : devInitPowerManagementEnabled */
5934e1bc9a0SAchim Leubner     /* b2     : autoActiveDMAEnabled */
5944e1bc9a0SAchim Leubner     /* b1     : nonZeroBufOffsetEnabled */
5954e1bc9a0SAchim Leubner     /* b0     : word79_bit0 */
5964e1bc9a0SAchim Leubner   bit16   majorVersionNumber;
5974e1bc9a0SAchim Leubner     /* b15    : word80_bit15 */
5984e1bc9a0SAchim Leubner     /* b14    : supportATA_ATAPI14 */
5994e1bc9a0SAchim Leubner     /* b13    : supportATA_ATAPI13 */
6004e1bc9a0SAchim Leubner     /* b12    : supportATA_ATAPI12 */
6014e1bc9a0SAchim Leubner     /* b11    : supportATA_ATAPI11 */
6024e1bc9a0SAchim Leubner     /* b10    : supportATA_ATAPI10 */
6034e1bc9a0SAchim Leubner     /* b9     : supportATA_ATAPI9  */
6044e1bc9a0SAchim Leubner     /* b8     : supportATA_ATAPI8  */
6054e1bc9a0SAchim Leubner     /* b7     : supportATA_ATAPI7  */
6064e1bc9a0SAchim Leubner     /* b6     : supportATA_ATAPI6  */
6074e1bc9a0SAchim Leubner     /* b5     : supportATA_ATAPI5  */
6084e1bc9a0SAchim Leubner     /* b4     : supportATA_ATAPI4 */
6094e1bc9a0SAchim Leubner     /* b3     : supportATA3 */
6104e1bc9a0SAchim Leubner     /* b2-0   : word80_bit0_2 */
6114e1bc9a0SAchim Leubner   bit16   minorVersionNumber;            /**< word81 of identify device information */
6124e1bc9a0SAchim Leubner   bit16   commandSetSupported;
6134e1bc9a0SAchim Leubner     /* b15    : word82_bit15 */
6144e1bc9a0SAchim Leubner     /* b14    : NOPSupported */
6154e1bc9a0SAchim Leubner     /* b13    : READ_BUFFERSupported */
6164e1bc9a0SAchim Leubner     /* b12    : WRITE_BUFFERSupported */
6174e1bc9a0SAchim Leubner     /* b11    : word82_bit11 */
6184e1bc9a0SAchim Leubner     /* b10    : hostProtectedAreaSupported */
6194e1bc9a0SAchim Leubner     /* b9     : DEVICE_RESETSupported */
6204e1bc9a0SAchim Leubner     /* b8     : SERVICEInterruptSupported */
6214e1bc9a0SAchim Leubner     /* b7     : releaseInterruptSupported */
6224e1bc9a0SAchim Leubner     /* b6     : lookAheadSupported */
6234e1bc9a0SAchim Leubner     /* b5     : writeCacheSupported */
6244e1bc9a0SAchim Leubner     /* b4     : word82_bit4 */
6254e1bc9a0SAchim Leubner     /* b3     : mandPowerManagmentSupported */
6264e1bc9a0SAchim Leubner     /* b2     : removableMediaSupported */
6274e1bc9a0SAchim Leubner     /* b1     : securityModeSupported */
6284e1bc9a0SAchim Leubner     /* b0     : SMARTSupported */
6294e1bc9a0SAchim Leubner   bit16   commandSetSupported1;
6304e1bc9a0SAchim Leubner     /* b15-b14: word83_bit14_15  */
6314e1bc9a0SAchim Leubner     /* b13    : FLUSH_CACHE_EXTSupported  */
6324e1bc9a0SAchim Leubner     /* b12    : mandatoryFLUSH_CACHESupported */
6334e1bc9a0SAchim Leubner     /* b11    : devConfOverlaySupported */
6344e1bc9a0SAchim Leubner     /* b10    : address48BitsSupported */
6354e1bc9a0SAchim Leubner     /* b9     : autoAcousticManageSupported */
6364e1bc9a0SAchim Leubner     /* b8     : SET_MAX_SecurityExtSupported */
6374e1bc9a0SAchim Leubner     /* b7     : word83_bit7 */
6384e1bc9a0SAchim Leubner     /* b6     : SET_FEATUREReqSpinupSupported */
6394e1bc9a0SAchim Leubner     /* b5     : powerUpInStandyBySupported */
6404e1bc9a0SAchim Leubner     /* b4     : removableMediaStNotifSupported */
6414e1bc9a0SAchim Leubner     /* b3     : advanPowerManagmentSupported */
6424e1bc9a0SAchim Leubner     /* b2     : CFASupported */
6434e1bc9a0SAchim Leubner     /* b1     : DMAQueuedSupported */
6444e1bc9a0SAchim Leubner     /* b0     : DOWNLOAD_MICROCODESupported */
6454e1bc9a0SAchim Leubner   bit16   commandSetFeatureSupportedExt;
6464e1bc9a0SAchim Leubner     /* b15-b13: word84_bit13_15 */
6474e1bc9a0SAchim Leubner     /* b12    : timeLimitRWContSupported */
6484e1bc9a0SAchim Leubner     /* b11    : timeLimitRWSupported */
6494e1bc9a0SAchim Leubner     /* b10    : writeURGBitSupported */
6504e1bc9a0SAchim Leubner     /* b9     : readURGBitSupported */
6514e1bc9a0SAchim Leubner     /* b8     : wwwNameSupported */
6524e1bc9a0SAchim Leubner     /* b7     : WRITE_DMAQ_FUA_EXTSupported */
6534e1bc9a0SAchim Leubner     /* b6     : WRITE_FUA_EXTSupported */
6544e1bc9a0SAchim Leubner     /* b5     : generalPurposeLogSupported */
6554e1bc9a0SAchim Leubner     /* b4     : streamingSupported  */
6564e1bc9a0SAchim Leubner     /* b3     : mediaCardPassThroughSupported */
6574e1bc9a0SAchim Leubner     /* b2     : mediaSerialNoSupported */
6584e1bc9a0SAchim Leubner     /* b1     : SMARTSelfRestSupported */
6594e1bc9a0SAchim Leubner     /* b0     : SMARTErrorLogSupported */
6604e1bc9a0SAchim Leubner   bit16   commandSetFeatureEnabled;
6614e1bc9a0SAchim Leubner     /* b15    : word85_bit15 */
6624e1bc9a0SAchim Leubner     /* b14    : NOPEnabled */
6634e1bc9a0SAchim Leubner     /* b13    : READ_BUFFEREnabled  */
6644e1bc9a0SAchim Leubner     /* b12    : WRITE_BUFFEREnabled */
6654e1bc9a0SAchim Leubner     /* b11    : word85_bit11 */
6664e1bc9a0SAchim Leubner     /* b10    : hostProtectedAreaEnabled  */
6674e1bc9a0SAchim Leubner     /* b9     : DEVICE_RESETEnabled */
6684e1bc9a0SAchim Leubner     /* b8     : SERVICEInterruptEnabled */
6694e1bc9a0SAchim Leubner     /* b7     : releaseInterruptEnabled */
6704e1bc9a0SAchim Leubner     /* b6     : lookAheadEnabled */
6714e1bc9a0SAchim Leubner     /* b5     : writeCacheEnabled */
6724e1bc9a0SAchim Leubner     /* b4     : word85_bit4 */
6734e1bc9a0SAchim Leubner     /* b3     : mandPowerManagmentEnabled */
6744e1bc9a0SAchim Leubner     /* b2     : removableMediaEnabled */
6754e1bc9a0SAchim Leubner     /* b1     : securityModeEnabled */
6764e1bc9a0SAchim Leubner     /* b0     : SMARTEnabled */
6774e1bc9a0SAchim Leubner   bit16   commandSetFeatureEnabled1;
6784e1bc9a0SAchim Leubner     /* b15-b14: word86_bit14_15 */
6794e1bc9a0SAchim Leubner     /* b13    : FLUSH_CACHE_EXTEnabled */
6804e1bc9a0SAchim Leubner     /* b12    : mandatoryFLUSH_CACHEEnabled */
6814e1bc9a0SAchim Leubner     /* b11    : devConfOverlayEnabled */
6824e1bc9a0SAchim Leubner     /* b10    : address48BitsEnabled */
6834e1bc9a0SAchim Leubner     /* b9     : autoAcousticManageEnabled */
6844e1bc9a0SAchim Leubner     /* b8     : SET_MAX_SecurityExtEnabled */
6854e1bc9a0SAchim Leubner     /* b7     : word86_bit7 */
6864e1bc9a0SAchim Leubner     /* b6     : SET_FEATUREReqSpinupEnabled */
6874e1bc9a0SAchim Leubner     /* b5     : powerUpInStandyByEnabled  */
6884e1bc9a0SAchim Leubner     /* b4     : removableMediaStNotifEnabled */
6894e1bc9a0SAchim Leubner     /* b3     : advanPowerManagmentEnabled */
6904e1bc9a0SAchim Leubner     /* b2     : CFAEnabled */
6914e1bc9a0SAchim Leubner     /* b1     : DMAQueuedEnabled */
6924e1bc9a0SAchim Leubner     /* b0     : DOWNLOAD_MICROCODEEnabled */
6934e1bc9a0SAchim Leubner   bit16   commandSetFeatureDefault;
6944e1bc9a0SAchim Leubner     /* b15-b13: word87_bit13_15 */
6954e1bc9a0SAchim Leubner     /* b12    : timeLimitRWContEnabled */
6964e1bc9a0SAchim Leubner     /* b11    : timeLimitRWEnabled */
6974e1bc9a0SAchim Leubner     /* b10    : writeURGBitEnabled */
6984e1bc9a0SAchim Leubner     /* b9     : readURGBitEnabled */
6994e1bc9a0SAchim Leubner     /* b8     : wwwNameEnabled */
7004e1bc9a0SAchim Leubner     /* b7     : WRITE_DMAQ_FUA_EXTEnabled */
7014e1bc9a0SAchim Leubner     /* b6     : WRITE_FUA_EXTEnabled */
7024e1bc9a0SAchim Leubner     /* b5     : generalPurposeLogEnabled */
7034e1bc9a0SAchim Leubner     /* b4     : streamingEnabled */
7044e1bc9a0SAchim Leubner     /* b3     : mediaCardPassThroughEnabled */
7054e1bc9a0SAchim Leubner     /* b2     : mediaSerialNoEnabled */
7064e1bc9a0SAchim Leubner     /* b1     : SMARTSelfRestEnabled */
7074e1bc9a0SAchim Leubner     /* b0     : SMARTErrorLogEnabled */
7084e1bc9a0SAchim Leubner   bit16   ultraDMAModes;
7094e1bc9a0SAchim Leubner     /* b15    : word88_bit15 */
7104e1bc9a0SAchim Leubner     /* b14    : ultraDMAMode6Selected */
7114e1bc9a0SAchim Leubner     /* b13    : ultraDMAMode5Selected */
7124e1bc9a0SAchim Leubner     /* b12    : ultraDMAMode4Selected */
7134e1bc9a0SAchim Leubner     /* b11    : ultraDMAMode3Selected */
7144e1bc9a0SAchim Leubner     /* b10    : ultraDMAMode2Selected */
7154e1bc9a0SAchim Leubner     /* b9     : ultraDMAMode1Selected */
7164e1bc9a0SAchim Leubner     /* b8     : ultraDMAMode0Selected */
7174e1bc9a0SAchim Leubner     /* b7     : word88_bit7  */
7184e1bc9a0SAchim Leubner     /* b6     : ultraDMAMode6Supported */
7194e1bc9a0SAchim Leubner     /* b5     : ultraDMAMode5Supported */
7204e1bc9a0SAchim Leubner     /* b4     : ultraDMAMode4Supported */
7214e1bc9a0SAchim Leubner     /* b3     : ultraDMAMode3Supported */
7224e1bc9a0SAchim Leubner     /* b2     : ultraDMAMode2Supported */
7234e1bc9a0SAchim Leubner     /* b1     : ultraDMAMode1Supported */
7244e1bc9a0SAchim Leubner     /* b0     : ultraDMAMode0Supported */
7254e1bc9a0SAchim Leubner   bit16   timeToSecurityErase;
7264e1bc9a0SAchim Leubner   bit16   timeToEnhhancedSecurityErase;
7274e1bc9a0SAchim Leubner   bit16   currentAPMValue;
7284e1bc9a0SAchim Leubner   bit16   masterPasswordRevCode;
7294e1bc9a0SAchim Leubner   bit16   hardwareResetResult;
7304e1bc9a0SAchim Leubner     /* b15-b14: word93_bit15_14 */
7314e1bc9a0SAchim Leubner     /* b13    : deviceDetectedCBLIBbelow Vil */
7324e1bc9a0SAchim Leubner     /* b12-b8 : device1 HardwareResetResult */
7334e1bc9a0SAchim Leubner     /* b7-b0  : device0 HardwareResetResult */
7344e1bc9a0SAchim Leubner   bit16   currentAutoAccousticManagementValue;
7354e1bc9a0SAchim Leubner     /* b15-b8 : Vendor recommended value */
7364e1bc9a0SAchim Leubner     /* b7-b0  : current value */
7374e1bc9a0SAchim Leubner   bit16   word95_99[5];                  /**< word85-99 of identify device information  */
7384e1bc9a0SAchim Leubner   bit16   maxLBA0_15;                    /**< word100 of identify device information  */
7394e1bc9a0SAchim Leubner   bit16   maxLBA16_31;                   /**< word101 of identify device information  */
7404e1bc9a0SAchim Leubner   bit16   maxLBA32_47;                   /**< word102 of identify device information  */
7414e1bc9a0SAchim Leubner   bit16   maxLBA48_63;                   /**< word103 of identify device information  */
7424e1bc9a0SAchim Leubner   bit16   word104_107[4];                /**< word104-107 of identify device information  */
7434e1bc9a0SAchim Leubner   bit16   namingAuthority;
7444e1bc9a0SAchim Leubner     /* b15-b12: NAA_bit0_3  */
7454e1bc9a0SAchim Leubner     /* b11-b0 : IEEE_OUI_bit12_23*/
7464e1bc9a0SAchim Leubner   bit16   namingAuthority1;
7474e1bc9a0SAchim Leubner     /* b15-b4 : IEEE_OUI_bit0_11 */
7484e1bc9a0SAchim Leubner     /* b3-b0  : uniqueID_bit32_35 */
7494e1bc9a0SAchim Leubner   bit16   uniqueID_bit16_31;                      /**< word110 of identify device information  */
7504e1bc9a0SAchim Leubner   bit16   uniqueID_bit0_15;                       /**< word111 of identify device information  */
7514e1bc9a0SAchim Leubner   bit16   word112_126[15];
7524e1bc9a0SAchim Leubner   bit16   removableMediaStatusNotificationFeature;
7534e1bc9a0SAchim Leubner     /* b15-b2 : word127_b16_2 */
7544e1bc9a0SAchim Leubner     /* b1-b0  : supported set see ATAPI6 spec */
7554e1bc9a0SAchim Leubner   bit16   securityStatus;
7564e1bc9a0SAchim Leubner     /* b15-b9 : word128_b15_9 */
7574e1bc9a0SAchim Leubner     /* b8     : securityLevel */
7584e1bc9a0SAchim Leubner     /* b7-b6  : word128_b7_6 */
7594e1bc9a0SAchim Leubner     /* b5     : enhancedSecurityEraseSupported */
7604e1bc9a0SAchim Leubner     /* b4     : securityCountExpired */
7614e1bc9a0SAchim Leubner     /* b3     : securityFrozen */
7624e1bc9a0SAchim Leubner     /* b2     : securityLocked */
7634e1bc9a0SAchim Leubner     /* b1     : securityEnabled */
7644e1bc9a0SAchim Leubner     /* b0     : securitySupported */
7654e1bc9a0SAchim Leubner   bit16   vendorSpecific[31];
7664e1bc9a0SAchim Leubner   bit16   cfaPowerMode1;
7674e1bc9a0SAchim Leubner     /* b15    : word 160 supported */
7684e1bc9a0SAchim Leubner     /* b14    : word160_b14 */
7694e1bc9a0SAchim Leubner     /* b13    : cfaPowerRequired */
7704e1bc9a0SAchim Leubner     /* b12    : cfaPowerModeDisabled */
7714e1bc9a0SAchim Leubner     /* b11-b0 : maxCurrentInMa */
7724e1bc9a0SAchim Leubner   bit16   word161_175[15];
7734e1bc9a0SAchim Leubner   bit16   currentMediaSerialNumber[30];
7744e1bc9a0SAchim Leubner   bit16   word206_254[49];              /**< word206-254 of identify device information  */
7754e1bc9a0SAchim Leubner   bit16   integrityWord;
7764e1bc9a0SAchim Leubner     /* b15-b8 : cheksum */
7774e1bc9a0SAchim Leubner     /* b7-b0  : signature */
7784e1bc9a0SAchim Leubner } agsaSATAIdentifyData_t;
7794e1bc9a0SAchim Leubner 
7804e1bc9a0SAchim Leubner 
7814e1bc9a0SAchim Leubner 
7824e1bc9a0SAchim Leubner 
7834e1bc9a0SAchim Leubner /** \brief data structure describes an SSP Command INFORMATION UNIT
7844e1bc9a0SAchim Leubner  *
7854e1bc9a0SAchim Leubner  * data structure describes an SSP Command INFORMATION UNIT used for SSP command and is part of
7864e1bc9a0SAchim Leubner  * the SSP frame.
7874e1bc9a0SAchim Leubner  *
7884e1bc9a0SAchim Leubner  * Currently, only CDB up to 16 bytes is supported. Additional CDB length is supported to 0 bytes..
7894e1bc9a0SAchim Leubner  *
7904e1bc9a0SAchim Leubner  */
7914e1bc9a0SAchim Leubner typedef struct agsaSSPCmdInfoUnit_s
7924e1bc9a0SAchim Leubner {
7934e1bc9a0SAchim Leubner     bit8    lun[8];                /* SCSI Logical Unit Number */
7944e1bc9a0SAchim Leubner     bit8    reserved1;             /* reserved */
7954e1bc9a0SAchim Leubner     bit8    efb_tp_taskAttribute;
7964e1bc9a0SAchim Leubner     /* B7   : enabledFirstBurst */
7974e1bc9a0SAchim Leubner     /* B6-3 : taskPriority */
7984e1bc9a0SAchim Leubner     /* B2-0 : taskAttribute */
7994e1bc9a0SAchim Leubner     bit8    reserved2;             /* reserved */
8004e1bc9a0SAchim Leubner     bit8    additionalCdbLen;
8014e1bc9a0SAchim Leubner     /* B7-2 : additionalCdbLen */
8024e1bc9a0SAchim Leubner     /* B1-0 : reserved */
8034e1bc9a0SAchim Leubner     bit8    cdb[16];      /* The SCSI CDB up to 16 bytes length */
8044e1bc9a0SAchim Leubner } agsaSSPCmdInfoUnit_t;
8054e1bc9a0SAchim Leubner 
8064e1bc9a0SAchim Leubner #define SA_SSPCMD_GET_TASKATTRIB(pCmd) ((pCmd)->efb_tp_taskAttribute & 0x7)
8074e1bc9a0SAchim Leubner 
8084e1bc9a0SAchim Leubner 
8094e1bc9a0SAchim Leubner /** \brief structure describes an SSP Response INFORMATION UNIT
8104e1bc9a0SAchim Leubner  *
8114e1bc9a0SAchim Leubner  * data structure describes an SSP Response INFORMATION UNIT used for SSP response to Command IU
8124e1bc9a0SAchim Leubner  * or Task IU and is part of the SSP frame
8134e1bc9a0SAchim Leubner  *
8144e1bc9a0SAchim Leubner  */
8154e1bc9a0SAchim Leubner 
8164e1bc9a0SAchim Leubner typedef struct agsaSSPResponseInfoUnit_s
8174e1bc9a0SAchim Leubner {
8184e1bc9a0SAchim Leubner     bit8    reserved1[10];      /* reserved */
8194e1bc9a0SAchim Leubner 
8204e1bc9a0SAchim Leubner     bit8    dataPres;           /* which data is present */
8214e1bc9a0SAchim Leubner     /* B7-2 : reserved */
8224e1bc9a0SAchim Leubner     /* B1-0 : data Present */
8234e1bc9a0SAchim Leubner     bit8    status;             /* SCSI status as define by SAM-3 */
8244e1bc9a0SAchim Leubner     bit8    reserved4[4];       /* reserved */
8254e1bc9a0SAchim Leubner     bit8    senseDataLen[4];    /* SCSI Sense Data length */
8264e1bc9a0SAchim Leubner     bit8    responsedataLen[4]; /* Response data length */
8274e1bc9a0SAchim Leubner     /* Follow by Response Data if any */
8284e1bc9a0SAchim Leubner     /* Follow by Sense Data if any */
8294e1bc9a0SAchim Leubner } agsaSSPResponseInfoUnit_t;
8304e1bc9a0SAchim Leubner 
8314e1bc9a0SAchim Leubner 
8324e1bc9a0SAchim Leubner typedef struct agsaSSPFrameFormat_s
8334e1bc9a0SAchim Leubner {
8344e1bc9a0SAchim Leubner     bit8    frameType;             /* frame type */
8354e1bc9a0SAchim Leubner     bit8    hdsa[3];               /* Hashed destination SAS Address */
8364e1bc9a0SAchim Leubner     bit8    reserved1;
8374e1bc9a0SAchim Leubner     bit8    hssa[3];               /* Hashed source SAS Address */
8384e1bc9a0SAchim Leubner     bit8    reserved2;
8394e1bc9a0SAchim Leubner     bit8    reserved3;
8404e1bc9a0SAchim Leubner     bit8    tlr_rdf;
8414e1bc9a0SAchim Leubner     /* B7-5 : reserved */
8424e1bc9a0SAchim Leubner     /* B4-3 : TLR control*/
8434e1bc9a0SAchim Leubner     /* B2   : Retry Data Frames */
8444e1bc9a0SAchim Leubner     /* B1   : Retransmit */
8454e1bc9a0SAchim Leubner     /* B0   : Changing Data Pointer */
8464e1bc9a0SAchim Leubner     bit8    fill_bytes;
8474e1bc9a0SAchim Leubner     /* B7-2 : reserved */
8484e1bc9a0SAchim Leubner     /* B1-0 : Number of Fill bytes*/
8494e1bc9a0SAchim Leubner     bit8    reserved5;
8504e1bc9a0SAchim Leubner     bit8    reserved6[3];
8514e1bc9a0SAchim Leubner     bit8    tag[2];               /* CMD or TM tag */
8524e1bc9a0SAchim Leubner     bit8    tptt[2];              /* target port transfer tag */
8534e1bc9a0SAchim Leubner     bit8    dataOffset[4];        /* data offset */
8544e1bc9a0SAchim Leubner     /* Follow by IU  */
8554e1bc9a0SAchim Leubner } agsaSSPFrameFormat_t;
8564e1bc9a0SAchim Leubner 
8574e1bc9a0SAchim Leubner 
8584e1bc9a0SAchim Leubner typedef struct agsaSSPOpenFrame_s
8594e1bc9a0SAchim Leubner {
8604e1bc9a0SAchim Leubner     bit8    frameType;             /* frame type */
8614e1bc9a0SAchim Leubner     /* B7   : Initiator Port */
8624e1bc9a0SAchim Leubner     /* B6-4 : Protocol */
8634e1bc9a0SAchim Leubner     /* B3-0 : Address Frame Type */
8644e1bc9a0SAchim Leubner     bit8    feat_connrate;
8654e1bc9a0SAchim Leubner     /* B7-4 : features */
8664e1bc9a0SAchim Leubner     /* B3-0 : connection rate */
8674e1bc9a0SAchim Leubner     bit8    initiatorConnTag[2];    /* Initiator connection tag */
8684e1bc9a0SAchim Leubner     bit8    dstSasAddr[8];          /* Destination SAS Address */
8694e1bc9a0SAchim Leubner     bit8    srcSasAddr[8];          /* Source SAS Address */
8704e1bc9a0SAchim Leubner     bit8    zoneSrcGroup;           /* Zone source group */
8714e1bc9a0SAchim Leubner     bit8    pathwayBlockCount;      /* pathway block count */
8724e1bc9a0SAchim Leubner     bit8    arbWaitTime[2];         /* Arbitration Wait Time */
8734e1bc9a0SAchim Leubner     bit8    moreCompatFeat[4];      /* More Compatibility Features */
8744e1bc9a0SAchim Leubner     /* Follow by CRC  */
8754e1bc9a0SAchim Leubner } agsaSSPOpenFrame_t;
8764e1bc9a0SAchim Leubner 
8774e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_SENSEDATALEN(pSSPResp)                   \
8784e1bc9a0SAchim Leubner     DMA_BEBIT32_TO_BIT32(*(bit32*)(pSSPResp)->senseDataLen)
8794e1bc9a0SAchim Leubner 
8804e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_RESPONSEDATALEN(pSSPResp)                \
8814e1bc9a0SAchim Leubner     DMA_BEBIT32_TO_BIT32(*(bit32*)(pSSPResp)->responsedataLen)
8824e1bc9a0SAchim Leubner 
8834e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_DATAPRES(pSSPResp) ((pSSPResp)->dataPres & 0x3)
8844e1bc9a0SAchim Leubner 
8854e1bc9a0SAchim Leubner /** \brief structure describes a SAS SSP Task Management command request
8864e1bc9a0SAchim Leubner  *
8874e1bc9a0SAchim Leubner  * The agsaSSPScsiTaskMgntReq_t data structure describes a SAS SSP Task Management command request sent by the
8884e1bc9a0SAchim Leubner  * initiator or received by the target.
8894e1bc9a0SAchim Leubner  *
8904e1bc9a0SAchim Leubner  * The response to Task Management is specified by agsaSSPResponseInfoUnit_t.
8914e1bc9a0SAchim Leubner  *
8924e1bc9a0SAchim Leubner  * This data structure is one instance of the generic request issued to saSSPStart() and is passed
8934e1bc9a0SAchim Leubner  * as an agsaSASRequestBody_t
8944e1bc9a0SAchim Leubner  *
8954e1bc9a0SAchim Leubner  */
8964e1bc9a0SAchim Leubner typedef struct agsaSSPScsiTaskMgntReq_s
8974e1bc9a0SAchim Leubner {
8984e1bc9a0SAchim Leubner     bit8    lun[8];               /* SCSI Logical Unit Number */
8994e1bc9a0SAchim Leubner     bit16   reserved1;            /* reserved */
9004e1bc9a0SAchim Leubner     bit8    taskMgntFunction;     /* task management function code */
9014e1bc9a0SAchim Leubner     bit8    reserved2;            /* reserved */
9024e1bc9a0SAchim Leubner     bit16   tagOfTaskToBeManaged; /* Tag/context of task to be managed */
9034e1bc9a0SAchim Leubner     bit16   reserved3;            /* reserved */
9044e1bc9a0SAchim Leubner     bit32   reserved4[3];         /* reserved */
9054e1bc9a0SAchim Leubner     bit32   tmOption;             /* Not part of SSP TMF IU */
9064e1bc9a0SAchim Leubner     /* B7-2 : reserved */
9074e1bc9a0SAchim Leubner     /* B1   : DS_OPTION */
9084e1bc9a0SAchim Leubner     /* B0   : ADS_OPTION */
9094e1bc9a0SAchim Leubner } agsaSSPScsiTaskMgntReq_t;
9104e1bc9a0SAchim Leubner 
9114e1bc9a0SAchim Leubner 
9124e1bc9a0SAchim Leubner /** \brief data structure describes the first four bytes of the SMP frame.
9134e1bc9a0SAchim Leubner  *
9144e1bc9a0SAchim Leubner  * The agsaSMPFrameHeader_t data structure describes the first four bytes of the SMP frame.
9154e1bc9a0SAchim Leubner  *
9164e1bc9a0SAchim Leubner  *
9174e1bc9a0SAchim Leubner  */
9184e1bc9a0SAchim Leubner 
9194e1bc9a0SAchim Leubner typedef struct agsaSMPFrameHeader_s
9204e1bc9a0SAchim Leubner {
9214e1bc9a0SAchim Leubner     bit8   smpFrameType;      /* The first byte of SMP frame represents the SMP FRAME TYPE */
9224e1bc9a0SAchim Leubner     bit8   smpFunction;       /* The second byte of the SMP frame represents the SMP FUNCTION */
9234e1bc9a0SAchim Leubner     bit8   smpFunctionResult; /* The third byte of SMP frame represents FUNCTION RESULT of the SMP response. */
9244e1bc9a0SAchim Leubner     bit8   smpReserved;       /* reserved */
9254e1bc9a0SAchim Leubner } agsaSMPFrameHeader_t;
9264e1bc9a0SAchim Leubner 
9274e1bc9a0SAchim Leubner /****************************************************************
9284e1bc9a0SAchim Leubner  *            report general response
9294e1bc9a0SAchim Leubner  ****************************************************************/
9304e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_CONFIGURING_BIT     0x2
9314e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_CONFIGURABLE_BIT    0x1
9324e1bc9a0SAchim Leubner 
9334e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportGeneral_s
9344e1bc9a0SAchim Leubner {
9354e1bc9a0SAchim Leubner   bit8   expanderChangeCount16[2];
9364e1bc9a0SAchim Leubner   bit8   expanderRouteIndexes16[2];
9374e1bc9a0SAchim Leubner   bit8   reserved1;
9384e1bc9a0SAchim Leubner   bit8   numOfPhys;
9394e1bc9a0SAchim Leubner   bit8   configuring_configurable;
9404e1bc9a0SAchim Leubner     /* B7-2 : reserved */
9414e1bc9a0SAchim Leubner     /* B1   : configuring */
9424e1bc9a0SAchim Leubner     /* B0   : configurable */
9434e1bc9a0SAchim Leubner   bit8   reserved4[17];
9444e1bc9a0SAchim Leubner } agsaSmpRespReportGeneral_t;
9454e1bc9a0SAchim Leubner 
9464e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_IS_CONFIGURING(pResp) \
9474e1bc9a0SAchim Leubner   (((pResp)->configuring_configurable & SA_REPORT_GENERAL_CONFIGURING_BIT) == \
9484e1bc9a0SAchim Leubner       SA_REPORT_GENERAL_CONFIGURING_BIT)
9494e1bc9a0SAchim Leubner 
9504e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_IS_CONFIGURABLE(pResp) \
9514e1bc9a0SAchim Leubner   (((pResp)->configuring_configurable & SA_REPORT_GENERAL_CONFIGURABLE_BIT) == \
9524e1bc9a0SAchim Leubner       SA_REPORT_GENERAL_CONFIGURABLE_BIT)
9534e1bc9a0SAchim Leubner 
9544e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_GET_ROUTEINDEXES(pResp) \
9554e1bc9a0SAchim Leubner   DMA_BEBIT16_TO_BIT16(*(bit16 *)((pResp)->expanderRouteIndexes16))
9564e1bc9a0SAchim Leubner 
9574e1bc9a0SAchim Leubner /****************************************************************
9584e1bc9a0SAchim Leubner  *            report manufacturer info response
9594e1bc9a0SAchim Leubner  ****************************************************************/
9604e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportManufactureInfo_s
9614e1bc9a0SAchim Leubner {
9624e1bc9a0SAchim Leubner   bit8    reserved1[8];
9634e1bc9a0SAchim Leubner   bit8    vendorIdentification[8];
9644e1bc9a0SAchim Leubner   bit8    productIdentification[16];
9654e1bc9a0SAchim Leubner   bit8    productRevisionLevel[4];
9664e1bc9a0SAchim Leubner   bit8    vendorSpecific[20];
9674e1bc9a0SAchim Leubner } agsaSmpRespReportManufactureInfo_t;
9684e1bc9a0SAchim Leubner 
9694e1bc9a0SAchim Leubner /****************************************************************
9704e1bc9a0SAchim Leubner  *           discover request
9714e1bc9a0SAchim Leubner  ****************************************************************/
9724e1bc9a0SAchim Leubner typedef struct agsaSmpReqDiscover_s
9734e1bc9a0SAchim Leubner {
9744e1bc9a0SAchim Leubner   bit32   reserved1;
9754e1bc9a0SAchim Leubner   bit8    reserved2;
9764e1bc9a0SAchim Leubner   bit8    phyIdentifier;
9774e1bc9a0SAchim Leubner   bit8    ignored;
9784e1bc9a0SAchim Leubner   bit8    reserved3;
9794e1bc9a0SAchim Leubner } agsaSmpReqDiscover_t;
9804e1bc9a0SAchim Leubner 
9814e1bc9a0SAchim Leubner /****************************************************************
9824e1bc9a0SAchim Leubner  *           discover response
9834e1bc9a0SAchim Leubner  ****************************************************************/
9844e1bc9a0SAchim Leubner typedef struct agsaSmpRespDiscover_s
9854e1bc9a0SAchim Leubner {
9864e1bc9a0SAchim Leubner   bit8   reserved1[4];
9874e1bc9a0SAchim Leubner   bit8   reserved2;
9884e1bc9a0SAchim Leubner   bit8   phyIdentifier;
9894e1bc9a0SAchim Leubner   bit8   reserved3[2];
9904e1bc9a0SAchim Leubner   bit8   attachedDeviceType;
9914e1bc9a0SAchim Leubner     /* B7   : reserved */
9924e1bc9a0SAchim Leubner     /* B6-4 : attachedDeviceType */
9934e1bc9a0SAchim Leubner     /* B3-0 : reserved */
9944e1bc9a0SAchim Leubner   bit8   negotiatedPhyLinkRate;
9954e1bc9a0SAchim Leubner     /* B7-4 : reserved */
9964e1bc9a0SAchim Leubner     /* B3-0 : negotiatedPhyLinkRate */
9974e1bc9a0SAchim Leubner   bit8   attached_Ssp_Stp_Smp_Sata_Initiator;
9984e1bc9a0SAchim Leubner     /* B7-4 : reserved */
9994e1bc9a0SAchim Leubner     /* B3   : attachedSspInitiator */
10004e1bc9a0SAchim Leubner     /* B2   : attachedStpInitiator */
10014e1bc9a0SAchim Leubner     /* B1   : attachedSmpInitiator */
10024e1bc9a0SAchim Leubner     /* B0   : attachedSataHost */
10034e1bc9a0SAchim Leubner   bit8   attached_SataPS_Ssp_Stp_Smp_Sata_Target;
10044e1bc9a0SAchim Leubner     /* B7   : attachedSataPortSelector */
10054e1bc9a0SAchim Leubner     /* B6-4 : reserved */
10064e1bc9a0SAchim Leubner     /* B3   : attachedSspTarget */
10074e1bc9a0SAchim Leubner     /* B2   : attachedStpTarget */
10084e1bc9a0SAchim Leubner     /* B1   : attachedSmpTarget */
10094e1bc9a0SAchim Leubner     /* B0   : attachedSatadevice */
10104e1bc9a0SAchim Leubner   bit8   sasAddressHi[4];
10114e1bc9a0SAchim Leubner   bit8   sasAddressLo[4];
10124e1bc9a0SAchim Leubner   bit8   attachedSasAddressHi[4];
10134e1bc9a0SAchim Leubner   bit8   attachedSasAddressLo[4];
10144e1bc9a0SAchim Leubner   bit8   attachedPhyIdentifier;
10154e1bc9a0SAchim Leubner   bit8   reserved9[7];
10164e1bc9a0SAchim Leubner   bit8   programmedAndHardware_MinPhyLinkRate;
10174e1bc9a0SAchim Leubner     /* B7-4 : programmedMinPhyLinkRate */
10184e1bc9a0SAchim Leubner     /* B3-0 : hardwareMinPhyLinkRate */
10194e1bc9a0SAchim Leubner   bit8   programmedAndHardware_MaxPhyLinkRate;
10204e1bc9a0SAchim Leubner     /* B7-4 : programmedMaxPhyLinkRate */
10214e1bc9a0SAchim Leubner     /* B3-0 : hardwareMaxPhyLinkRate */
10224e1bc9a0SAchim Leubner   bit8   phyChangeCount;
10234e1bc9a0SAchim Leubner   bit8   virtualPhy_partialPathwayTimeout;
10244e1bc9a0SAchim Leubner     /* B7   : virtualPhy*/
10254e1bc9a0SAchim Leubner     /* B6-4 : reserved */
10264e1bc9a0SAchim Leubner     /* B3-0 : partialPathwayTimeout */
10274e1bc9a0SAchim Leubner   bit8   routingAttribute;
10284e1bc9a0SAchim Leubner     /* B7-4 : reserved */
10294e1bc9a0SAchim Leubner     /* B3-0 : routingAttribute */
10304e1bc9a0SAchim Leubner   bit8   reserved13[5];
10314e1bc9a0SAchim Leubner   bit8   vendorSpecific[2];
10324e1bc9a0SAchim Leubner } agsaSmpRespDiscover_t;
10334e1bc9a0SAchim Leubner 
10344e1bc9a0SAchim Leubner #define SA_DISCRSP_SSP_BIT    0x08
10354e1bc9a0SAchim Leubner #define SA_DISCRSP_STP_BIT    0x04
10364e1bc9a0SAchim Leubner #define SA_DISCRSP_SMP_BIT    0x02
10374e1bc9a0SAchim Leubner #define SA_DISCRSP_SATA_BIT   0x01
10384e1bc9a0SAchim Leubner 
10394e1bc9a0SAchim Leubner #define SA_DISCRSP_SATA_PS_BIT   0x80
10404e1bc9a0SAchim Leubner 
10414e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_DEVTYPE(pResp) \
10424e1bc9a0SAchim Leubner   (((pResp)->attachedDeviceType & 0x70) >> 4)
10434e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_LINKRATE(pResp) \
10444e1bc9a0SAchim Leubner   ((pResp)->negotiatedPhyLinkRate & 0x0F)
10454e1bc9a0SAchim Leubner 
10464e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SSP_INITIATOR(pResp) \
10474e1bc9a0SAchim Leubner   (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SSP_BIT) == SA_DISCRSP_SSP_BIT)
10484e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_STP_INITIATOR(pResp) \
10494e1bc9a0SAchim Leubner   (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_STP_BIT) == SA_DISCRSP_STP_BIT)
10504e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SMP_INITIATOR(pResp) \
10514e1bc9a0SAchim Leubner   (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SMP_BIT) == SA_DISCRSP_SMP_BIT)
10524e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_HOST(pResp) \
10534e1bc9a0SAchim Leubner   (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SATA_BIT) == SA_DISCRSP_SATA_BIT)
10544e1bc9a0SAchim Leubner 
10554e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SSP_TARGET(pResp) \
10564e1bc9a0SAchim Leubner   (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SSP_BIT) == SA_DISCRSP_SSP_BIT)
10574e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_STP_TARGET(pResp) \
10584e1bc9a0SAchim Leubner   (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_STP_BIT) == SA_DISCRSP_STP_BIT)
10594e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SMP_TARGET(pResp) \
10604e1bc9a0SAchim Leubner   (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SMP_BIT) == SA_DISCRSP_SMP_BIT)
10614e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_DEVICE(pResp) \
10624e1bc9a0SAchim Leubner   (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SATA_BIT) == SA_DISCRSP_SATA_BIT)
10634e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_PORTSELECTOR(pResp) \
10644e1bc9a0SAchim Leubner   (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SATA_PS_BIT) == SA_DISCRSP_SATA_PS_BIT)
10654e1bc9a0SAchim Leubner 
10664e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_SAS_ADDRESSHI(pResp) \
10674e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->sasAddressHi)
10684e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_SAS_ADDRESSLO(pResp) \
10694e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->sasAddressLo)
10704e1bc9a0SAchim Leubner 
10714e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_SAS_ADDRESSHI(pResp) \
10724e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->attachedSasAddressHi)
10734e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_SAS_ADDRESSLO(pResp) \
10744e1bc9a0SAchim Leubner   DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->attachedSasAddressLo)
10754e1bc9a0SAchim Leubner 
10764e1bc9a0SAchim Leubner #define SA_DISCRSP_VIRTUALPHY_BIT 0x80
10774e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_VIRTUALPHY(pResp) \
10784e1bc9a0SAchim Leubner   (((pResp)->virtualPhy_partialPathwayTimeout & SA_DISCRSP_VIRTUALPHY_BIT) == SA_DISCRSP_VIRTUALPHY_BIT)
10794e1bc9a0SAchim Leubner 
10804e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ROUTINGATTRIB(pResp) \
10814e1bc9a0SAchim Leubner   ((pResp)->routingAttribute & 0x0F)
10824e1bc9a0SAchim Leubner 
10834e1bc9a0SAchim Leubner /****************************************************************
10844e1bc9a0SAchim Leubner  *            report route table request
10854e1bc9a0SAchim Leubner  ****************************************************************/
10864e1bc9a0SAchim Leubner typedef struct agsaSmpReqReportRouteTable_s
10874e1bc9a0SAchim Leubner {
10884e1bc9a0SAchim Leubner   bit8   reserved1[2];
10894e1bc9a0SAchim Leubner   bit8   expanderRouteIndex16[20];
10904e1bc9a0SAchim Leubner   bit8   reserved2;
10914e1bc9a0SAchim Leubner   bit8   phyIdentifier;
10924e1bc9a0SAchim Leubner   bit8   reserved3[2];
10934e1bc9a0SAchim Leubner } agsaSmpReqReportRouteTable_t;
10944e1bc9a0SAchim Leubner 
10954e1bc9a0SAchim Leubner /****************************************************************
10964e1bc9a0SAchim Leubner  *            report route response
10974e1bc9a0SAchim Leubner  ****************************************************************/
10984e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportRouteTable_s
10994e1bc9a0SAchim Leubner {
11004e1bc9a0SAchim Leubner   bit8   reserved1[2];
11014e1bc9a0SAchim Leubner   bit8   expanderRouteIndex16[2];
11024e1bc9a0SAchim Leubner   bit8   reserved2;
11034e1bc9a0SAchim Leubner   bit8   phyIdentifier;
11044e1bc9a0SAchim Leubner   bit8   reserved3[2];
11054e1bc9a0SAchim Leubner   bit8   disabled;
11064e1bc9a0SAchim Leubner     /* B7   : expander route entry disabled */
11074e1bc9a0SAchim Leubner     /* B6-0 : reserved */
11084e1bc9a0SAchim Leubner   bit8   reserved5[3];
11094e1bc9a0SAchim Leubner   bit8   routedSasAddressHi32[4];
11104e1bc9a0SAchim Leubner   bit8   routedSasAddressLo32[4];
11114e1bc9a0SAchim Leubner   bit8   reserved6[16];
11124e1bc9a0SAchim Leubner } agsaSmpRespReportRouteTable_t;
11134e1bc9a0SAchim Leubner 
11144e1bc9a0SAchim Leubner /****************************************************************
11154e1bc9a0SAchim Leubner  *            configure route information request
11164e1bc9a0SAchim Leubner  ****************************************************************/
11174e1bc9a0SAchim Leubner typedef struct agsaSmpReqConfigureRouteInformation_s
11184e1bc9a0SAchim Leubner {
11194e1bc9a0SAchim Leubner   bit8   reserved1[2];
11204e1bc9a0SAchim Leubner   bit8   expanderRouteIndex[2];
11214e1bc9a0SAchim Leubner   bit8   reserved2;
11224e1bc9a0SAchim Leubner   bit8   phyIdentifier;
11234e1bc9a0SAchim Leubner   bit8   reserved3[2];
11244e1bc9a0SAchim Leubner   bit8   disabledBit_reserved4;
11254e1bc9a0SAchim Leubner   bit8   reserved5[3];
11264e1bc9a0SAchim Leubner   bit8   routedSasAddressHi[4];
11274e1bc9a0SAchim Leubner   bit8   routedSasAddressLo[4];
11284e1bc9a0SAchim Leubner   bit8   reserved6[16];
11294e1bc9a0SAchim Leubner } agsaSmpReqConfigureRouteInformation_t;
11304e1bc9a0SAchim Leubner 
11314e1bc9a0SAchim Leubner /****************************************************************
11324e1bc9a0SAchim Leubner  *            report Phy Sata request
11334e1bc9a0SAchim Leubner  ****************************************************************/
11344e1bc9a0SAchim Leubner typedef struct agsaSmpReqReportPhySata_s
11354e1bc9a0SAchim Leubner {
11364e1bc9a0SAchim Leubner   bit8   reserved1[4];
11374e1bc9a0SAchim Leubner   bit8   reserved2;
11384e1bc9a0SAchim Leubner   bit8   phyIdentifier;
11394e1bc9a0SAchim Leubner   bit8   reserved3[2];
11404e1bc9a0SAchim Leubner } agsaSmpReqReportPhySata_t;
11414e1bc9a0SAchim Leubner 
11424e1bc9a0SAchim Leubner /****************************************************************
11434e1bc9a0SAchim Leubner  *            report Phy Sata response
11444e1bc9a0SAchim Leubner  ****************************************************************/
11454e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportPhySata_s
11464e1bc9a0SAchim Leubner {
11474e1bc9a0SAchim Leubner   bit8   reserved1[4];
11484e1bc9a0SAchim Leubner   bit8   reserved2;
11494e1bc9a0SAchim Leubner   bit8   phyIdentifier;
11504e1bc9a0SAchim Leubner   bit8   reserved3;
11514e1bc9a0SAchim Leubner   bit8   affiliations_sup_valid;
11524e1bc9a0SAchim Leubner     /* b7-2 : reserved */
11534e1bc9a0SAchim Leubner     /* b1   : Affiliations supported */
11544e1bc9a0SAchim Leubner     /* b0   : Affiliation valid */
11554e1bc9a0SAchim Leubner   bit8   reserved5[4];
11564e1bc9a0SAchim Leubner   bit8   stpSasAddressHi[4];
11574e1bc9a0SAchim Leubner   bit8   stpSasAddressLo[4];
11584e1bc9a0SAchim Leubner   bit8   regDevToHostFis[20];
11594e1bc9a0SAchim Leubner   bit8   reserved6[4];
11604e1bc9a0SAchim Leubner   bit8   affiliatedStpInitiatorSasAddressHi[4];
11614e1bc9a0SAchim Leubner   bit8   affiliatedStpInitiatorSasAddressLo[4];
11624e1bc9a0SAchim Leubner } agsaSmpRespReportPhySata_t;
11634e1bc9a0SAchim Leubner 
11644e1bc9a0SAchim Leubner /****************************************************************
11654e1bc9a0SAchim Leubner  *            Phy Control request
11664e1bc9a0SAchim Leubner  ****************************************************************/
11674e1bc9a0SAchim Leubner typedef struct agsaSmpReqPhyControl_s
11684e1bc9a0SAchim Leubner {
11694e1bc9a0SAchim Leubner   bit8   reserved1[4];
11704e1bc9a0SAchim Leubner   bit8   reserved2;
11714e1bc9a0SAchim Leubner   bit8   phyIdentifier;
11724e1bc9a0SAchim Leubner   bit8   phyOperation;
11734e1bc9a0SAchim Leubner   bit8   updatePartialPathwayTOValue;
11744e1bc9a0SAchim Leubner     /* b7-1 : reserved */
11754e1bc9a0SAchim Leubner     /* b0   : update partial pathway timeout value */
11764e1bc9a0SAchim Leubner   bit8   reserved3[20];
11774e1bc9a0SAchim Leubner   bit8   programmedMinPhysicalLinkRate;
11784e1bc9a0SAchim Leubner     /* b7-4 : programmed Minimum Physical Link Rate*/
11794e1bc9a0SAchim Leubner     /* b3-0 : reserved */
11804e1bc9a0SAchim Leubner   bit8   programmedMaxPhysicalLinkRate;
11814e1bc9a0SAchim Leubner     /* b7-4 : programmed Maximum Physical Link Rate*/
11824e1bc9a0SAchim Leubner     /* b3-0 : reserved */
11834e1bc9a0SAchim Leubner   bit8   reserved4[2];
11844e1bc9a0SAchim Leubner   bit8   partialPathwayTOValue;
11854e1bc9a0SAchim Leubner     /* b7-4 : reserved */
11864e1bc9a0SAchim Leubner     /* b3-0 : partial Pathway TO Value */
11874e1bc9a0SAchim Leubner   bit8   reserved5[3];
11884e1bc9a0SAchim Leubner } agsaSmpReqPhyControl_t;
11894e1bc9a0SAchim Leubner 
11904e1bc9a0SAchim Leubner 
11914e1bc9a0SAchim Leubner 
11924e1bc9a0SAchim Leubner 
11934e1bc9a0SAchim Leubner #endif  /*__SASPEC_H__ */
1194