1*4e1bc9a0SAchim Leubner /****************************************************************************** 2*4e1bc9a0SAchim Leubner *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3*4e1bc9a0SAchim Leubner * 4*4e1bc9a0SAchim Leubner *Redistribution and use in source and binary forms, with or without modification, are permitted provided 5*4e1bc9a0SAchim Leubner *that the following conditions are met: 6*4e1bc9a0SAchim Leubner *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7*4e1bc9a0SAchim Leubner *following disclaimer. 8*4e1bc9a0SAchim Leubner *2. Redistributions in binary form must reproduce the above copyright notice, 9*4e1bc9a0SAchim Leubner *this list of conditions and the following disclaimer in the documentation and/or other materials provided 10*4e1bc9a0SAchim Leubner *with the distribution. 11*4e1bc9a0SAchim Leubner * 12*4e1bc9a0SAchim Leubner *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13*4e1bc9a0SAchim Leubner *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14*4e1bc9a0SAchim Leubner *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15*4e1bc9a0SAchim Leubner *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16*4e1bc9a0SAchim Leubner *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17*4e1bc9a0SAchim Leubner *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18*4e1bc9a0SAchim Leubner *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19*4e1bc9a0SAchim Leubner *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20*4e1bc9a0SAchim Leubner * 21*4e1bc9a0SAchim Leubner * 22*4e1bc9a0SAchim Leubner ******************************************************************************/ 23*4e1bc9a0SAchim Leubner /*****************************************************************************/ 24*4e1bc9a0SAchim Leubner /*! \file sa_spec.h 25*4e1bc9a0SAchim Leubner * \brief The file defines the constants defined by sas spec 26*4e1bc9a0SAchim Leubner */ 27*4e1bc9a0SAchim Leubner 28*4e1bc9a0SAchim Leubner /*****************************************************************************/ 29*4e1bc9a0SAchim Leubner 30*4e1bc9a0SAchim Leubner #ifndef __SA_SPEC_H__ 31*4e1bc9a0SAchim Leubner #define __SA_SPEC_H__ 32*4e1bc9a0SAchim Leubner 33*4e1bc9a0SAchim Leubner /**************************************************************** 34*4e1bc9a0SAchim Leubner * SAS Specification related defines * 35*4e1bc9a0SAchim Leubner ****************************************************************/ 36*4e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_SMP 0x00 37*4e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_SSP 0x01 38*4e1bc9a0SAchim Leubner #define SA_SAS_PROTOCOL_STP 0x02 39*4e1bc9a0SAchim Leubner 40*4e1bc9a0SAchim Leubner #define SA_OPENFRM_SIZE (28) 41*4e1bc9a0SAchim Leubner #define SA_IDENTIFY_FRAME_SIZE (28) 42*4e1bc9a0SAchim Leubner //#define SAS_IDENTIFY_FRM_SIZE SA_IDENTIFY_FRAME_SIZE 43*4e1bc9a0SAchim Leubner 44*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_DATA 0x01 45*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_XRDY 0x05 46*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_CMD 0x06 47*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_RSP 0x07 48*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SSP_TASK 0x16 49*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SMP_REQ 0x40 50*4e1bc9a0SAchim Leubner #define SA_SAS_FRAME_TYPE_SMP_RSP 0x41 51*4e1bc9a0SAchim Leubner 52*4e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_1_5G 0x08 53*4e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_3_0G 0x09 54*4e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_6_0G 0x0A 55*4e1bc9a0SAchim Leubner #define SA_SAS_CONNECTION_RATE_12_0G 0x0B 56*4e1bc9a0SAchim Leubner 57*4e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_NO_DEVICE 0x00 58*4e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_END_DEVICE 0x01 59*4e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_EDGE_EXPANDER 0x02 60*4e1bc9a0SAchim Leubner #define SA_SAS_DEV_TYPE_FANOUT_EXPANDER 0x03 61*4e1bc9a0SAchim Leubner 62*4e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_END_DEVICE (SA_SAS_DEV_TYPE_END_DEVICE << 4) 63*4e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_EDGE_EXPANDER (SA_SAS_DEV_TYPE_EDGE_EXPANDER << 4) 64*4e1bc9a0SAchim Leubner #define AGSA_DEV_TYPE_FAN_EXPANDER (SA_SAS_DEV_TYPE_FANOUT_EXPANDER << 4) 65*4e1bc9a0SAchim Leubner 66*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_GENERAL 0x00 67*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_MANUFACTURE_INFORMATION 0x01 68*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_READ_GPIO_REGISTER 0x02 69*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_DISCOVER 0x10 70*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_PHY_ERROR_LOG 0x11 71*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_PHY_SATA 0x12 72*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_REPORT_ROUTING_INFORMATION 0x13 73*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_WRITE_GPIO_REGISTER 0x82 74*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_CONFIGURE_ROUTING_INFORMATION 0x90 75*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_CONTROL 0x91 76*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_TEST 0x92 77*4e1bc9a0SAchim Leubner 78*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_ACCEPTED 0x00 79*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_UNKNOWN 0x01 80*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_FUNCTION_FAILED 0x02 81*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_INVALID_REQ_FRAME_LENGTH 0x03 82*4e1bc9a0SAchim Leubner #define SA_SAS_SMP_PHY_NOT_EXIST 0x10 83*4e1bc9a0SAchim Leubner 84*4e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_DIRECT 0x00 85*4e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_SUBTRACTIVE 0x01 86*4e1bc9a0SAchim Leubner #define SA_SAS_ROUTING_TABLE 0x02 87*4e1bc9a0SAchim Leubner 88*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_LINK_RESET 0x01 89*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_HARD_RESET 0x02 90*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_DISABLE 0x03 91*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_CLEAR_ERROR_LOG 0x05 92*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_CLEAR_AFFILIATION 0x06 93*4e1bc9a0SAchim Leubner #define SA_SAS_PHYCTL_TRANSMIT_PS_SIGNAL 0x07 94*4e1bc9a0SAchim Leubner 95*4e1bc9a0SAchim Leubner #define SA_SSP_CMDIU_LEN_BYTES 28 96*4e1bc9a0SAchim Leubner #define SA_SSP_TMIU_LEN_BYTES 28 97*4e1bc9a0SAchim Leubner 98*4e1bc9a0SAchim Leubner 99*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_MASK 0xF0 100*4e1bc9a0SAchim Leubner #define SASD_DEV_SAS_MASK 0x0F 101*4e1bc9a0SAchim Leubner 102*4e1bc9a0SAchim Leubner #define SASD_DEV_SAS_END_DEVICE 0x01 /* SAS end device type */ 103*4e1bc9a0SAchim Leubner #define SASD_DEV_SAS_EDGE_EXPANDER 0x02 /* SAS edge expander device type */ 104*4e1bc9a0SAchim Leubner #define SASD_DEV_SAS_FAN_EXPANDER 0x03 /* SAS fan out expander device type */ 105*4e1bc9a0SAchim Leubner 106*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_ATA_DEVICE 0x10 /* SATA ATA device type */ 107*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_ATAPI_DEVICE 0x20 /* SATA ATAPI device type */ 108*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_PM_DEVICE 0x30 /* SATA PM device type */ 109*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_SEMB_DEVICE 0x40 /* SATA SEMB device type */ 110*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_SEMB_WO_SEP_DEVICE 0x50 /* SATA SEMB without SEP device type */ 111*4e1bc9a0SAchim Leubner 112*4e1bc9a0SAchim Leubner #define SASD_DEV_SATA_UNKNOWN_DEVICE 0xFF /* SAS SATA unknown device type */ 113*4e1bc9a0SAchim Leubner 114*4e1bc9a0SAchim Leubner 115*4e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_SIMPLE 0x0 116*4e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_HEAD_OF_QUEUE 0x1 117*4e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_ORDERED 0x2 118*4e1bc9a0SAchim Leubner #define SASD_TASK_ATTR_ACA 0x4 119*4e1bc9a0SAchim Leubner 120*4e1bc9a0SAchim Leubner 121*4e1bc9a0SAchim Leubner /***************************************************************************** 122*4e1bc9a0SAchim Leubner ** SAS TM Function definitions 123*4e1bc9a0SAchim Leubner *****************************************************************************/ 124*4e1bc9a0SAchim Leubner #define SASD_SAS_ABORT_TASK 0x01 125*4e1bc9a0SAchim Leubner #define SASD_SAS_ABORT_TASK_SET 0x02 126*4e1bc9a0SAchim Leubner #define SASD_SAS_CLEAR_TASK_SET 0x04 127*4e1bc9a0SAchim Leubner #define SASD_SAS_LOGICAL_UNIT_RESET 0x08 128*4e1bc9a0SAchim Leubner #define SASD_SAS_CLEAR_ACA 0x40 129*4e1bc9a0SAchim Leubner #define SASD_SAS_QUARY_TASK 0x80 130*4e1bc9a0SAchim Leubner 131*4e1bc9a0SAchim Leubner /**************************************************************** 132*4e1bc9a0SAchim Leubner * SATA Specification related defines * 133*4e1bc9a0SAchim Leubner ****************************************************************/ 134*4e1bc9a0SAchim Leubner #define SA_SATA_MAX_QUEUED_COMMANDS 32 135*4e1bc9a0SAchim Leubner #define SA_SATA_MAX_PM_PORTS 15 136*4e1bc9a0SAchim Leubner 137*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_HOST_2_DEV 0x27 138*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_DEV_2_HOST 0x34 139*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_SET_DEVICE 0xA1 140*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_DMA_ACTIVE 0x39 141*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_FDMA_SETUP 0x41 142*4e1bc9a0SAchim Leubner #define SA_SATA_FIS_TYPE_BIST 0x58 143*4e1bc9a0SAchim Leubner 144*4e1bc9a0SAchim Leubner #define SA_SATA_CMD_IDENTIFY_DEVICE 0xEC 145*4e1bc9a0SAchim Leubner #define SA_SATA_CMD_EXEC_DEV_DIAG 0x90 146*4e1bc9a0SAchim Leubner 147*4e1bc9a0SAchim Leubner #define SA_SATA_CONTROL_SRST 0x04 148*4e1bc9a0SAchim Leubner 149*4e1bc9a0SAchim Leubner #define SA_SATA_H2DREG_LEN_BYTES 20 150*4e1bc9a0SAchim Leubner #define SA_SATA_H2D_BIST_LEN_BYTES 12 151*4e1bc9a0SAchim Leubner /**************************************************************** 152*4e1bc9a0SAchim Leubner * SAS Specification related structures * 153*4e1bc9a0SAchim Leubner ****************************************************************/ 154*4e1bc9a0SAchim Leubner 155*4e1bc9a0SAchim Leubner 156*4e1bc9a0SAchim Leubner 157*4e1bc9a0SAchim Leubner /** \brief Structure for SATA BIST FIS 158*4e1bc9a0SAchim Leubner * 159*4e1bc9a0SAchim Leubner * The agsaFisBIST_t data structure describes a SATA FIS (Frame Information Structures) 160*4e1bc9a0SAchim Leubner * for FIS type BIST (Built In Self Test) Activate Bidirectional. 161*4e1bc9a0SAchim Leubner * 162*4e1bc9a0SAchim Leubner * This data structure is one instance of the SATA request structure agsaSATAInitiatorRequest_t, 163*4e1bc9a0SAchim Leubner * which is one instance of the generic request, issued to saSATAStart(). 164*4e1bc9a0SAchim Leubner */ 165*4e1bc9a0SAchim Leubner 166*4e1bc9a0SAchim Leubner 167*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_T_BIT 0x80 168*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_A_BIT 0x40 169*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_S_BIT 0x20 170*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_L_BIT 0x10 171*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_F_BIT 0x08 172*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_P_BIT 0x04 173*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_R_BIT 0x02 174*4e1bc9a0SAchim Leubner #define SA_SATA_BIST_PATTERN_V_BIT 0x01 175*4e1bc9a0SAchim Leubner 176*4e1bc9a0SAchim Leubner /* 177*4e1bc9a0SAchim Leubner * The first SATA DWORD types. 178*4e1bc9a0SAchim Leubner */ 179*4e1bc9a0SAchim Leubner typedef struct agsaFisBISTHeader_s 180*4e1bc9a0SAchim Leubner { 181*4e1bc9a0SAchim Leubner bit8 fisType; /* fisType, set to 58h for BIST */ 182*4e1bc9a0SAchim Leubner bit8 pmPort; 183*4e1bc9a0SAchim Leubner /* b7-b4 reserved */ 184*4e1bc9a0SAchim Leubner /* b3-b0 PM Port. device port address that the PM should deliver the FIS to */ 185*4e1bc9a0SAchim Leubner bit8 patternDefinition; 186*4e1bc9a0SAchim Leubner /* b7 : T Far end transmit only mode */ 187*4e1bc9a0SAchim Leubner /* b6 : A ALIGN Bypass (Do not Transmit Align Primitives) (valid only in combination with T Bit) (optional behavior) */ 188*4e1bc9a0SAchim Leubner /* b5 : S Bypass Scrambling (valid only in combination with T Bit) (optional behavior) */ 189*4e1bc9a0SAchim Leubner /* b4 : L Far End Retimed Loopback. Transmitter shall insert additional ALIGNS) */ 190*4e1bc9a0SAchim Leubner /* b3 : F Far End Analog (AFE) Loopback (Optional) */ 191*4e1bc9a0SAchim Leubner /* b2 : P Primitive bit. (valid only in combination with the T Bit) (optional behavior) */ 192*4e1bc9a0SAchim Leubner /* b1 : R Reserved */ 193*4e1bc9a0SAchim Leubner /* b0 : V Vendor Specific Test Mode. Causes all other bits to be ignored */ 194*4e1bc9a0SAchim Leubner bit8 reserved5; /* Reserved */ 195*4e1bc9a0SAchim Leubner } agsaFisBISTHeader_t; 196*4e1bc9a0SAchim Leubner 197*4e1bc9a0SAchim Leubner 198*4e1bc9a0SAchim Leubner typedef struct agsaFisRegD2HHeader_s 199*4e1bc9a0SAchim Leubner { 200*4e1bc9a0SAchim Leubner bit8 fisType; /* fisType, set to 34h for DeviceToHostReg */ 201*4e1bc9a0SAchim Leubner bit8 i_pmPort; 202*4e1bc9a0SAchim Leubner /* b7 : reserved */ 203*4e1bc9a0SAchim Leubner /* b6 : I Interrupt bit */ 204*4e1bc9a0SAchim Leubner /* b5-b4 : reserved */ 205*4e1bc9a0SAchim Leubner /* b3-b0 : PM Port */ 206*4e1bc9a0SAchim Leubner bit8 status; /* Contains the contents to be placed in the Status(and Alternate status) 207*4e1bc9a0SAchim Leubner Register of the Shadow Command Block */ 208*4e1bc9a0SAchim Leubner bit8 error; /* Contains the contents to be placed in the Error register of the Shadow Command Block */ 209*4e1bc9a0SAchim Leubner } agsaFisRegD2HHeader_t; 210*4e1bc9a0SAchim Leubner 211*4e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBitsHeader_s 212*4e1bc9a0SAchim Leubner { 213*4e1bc9a0SAchim Leubner bit8 fisType; /* fisType, set to A1h for SetDeviceBit */ 214*4e1bc9a0SAchim Leubner bit8 n_i_pmPort; 215*4e1bc9a0SAchim Leubner /* b7 : n Bit. Notification bit. If set device needs attention. */ 216*4e1bc9a0SAchim Leubner /* b6 : i Bit. Interrupt Bit */ 217*4e1bc9a0SAchim Leubner /* b5-b4: reserved2 */ 218*4e1bc9a0SAchim Leubner /* b3-b0: PM Port */ 219*4e1bc9a0SAchim Leubner bit8 statusHi_Lo; 220*4e1bc9a0SAchim Leubner /* b7 : reserved */ 221*4e1bc9a0SAchim Leubner /* b6-b4: Status Hi. Contains the contents to be placed in bits 6, 5, and 4 of 222*4e1bc9a0SAchim Leubner the Status register of the Shadow Command Block */ 223*4e1bc9a0SAchim Leubner /* b3 : Reserved */ 224*4e1bc9a0SAchim Leubner /* b2-b0: Status Lo Contains the contents to be placed in bits 2,1, and 0 of the 225*4e1bc9a0SAchim Leubner Status register of the Shadow Command Block */ 226*4e1bc9a0SAchim Leubner bit8 error; /* Contains the contents to be placed in the Error register of 227*4e1bc9a0SAchim Leubner the Shadow Command Block */ 228*4e1bc9a0SAchim Leubner } agsaFisSetDevBitsHeader_t; 229*4e1bc9a0SAchim Leubner 230*4e1bc9a0SAchim Leubner typedef struct agsaFisRegH2DHeader_s 231*4e1bc9a0SAchim Leubner { 232*4e1bc9a0SAchim Leubner bit8 fisType; /* fisType, set to 27h for DeviceToHostReg */ 233*4e1bc9a0SAchim Leubner bit8 c_pmPort; 234*4e1bc9a0SAchim Leubner /* b7 : C_bit This bit is set to one when the register transfer is 235*4e1bc9a0SAchim Leubner due to an update of the Command register */ 236*4e1bc9a0SAchim Leubner /* b6-b4: reserved */ 237*4e1bc9a0SAchim Leubner /* b3-b0: PM Port */ 238*4e1bc9a0SAchim Leubner bit8 command; /* Contains the contents of the Command register of 239*4e1bc9a0SAchim Leubner the Shadow Command Block */ 240*4e1bc9a0SAchim Leubner bit8 features; /* Contains the contents of the Features register of 241*4e1bc9a0SAchim Leubner the Shadow Command Block */ 242*4e1bc9a0SAchim Leubner } agsaFisRegH2DHeader_t; 243*4e1bc9a0SAchim Leubner 244*4e1bc9a0SAchim Leubner typedef struct agsaFisPioSetupHeader_s 245*4e1bc9a0SAchim Leubner { 246*4e1bc9a0SAchim Leubner bit8 fisType; /* set to 5F */ 247*4e1bc9a0SAchim Leubner bit8 i_d_pmPort; 248*4e1bc9a0SAchim Leubner /* b7 : reserved */ 249*4e1bc9a0SAchim Leubner /* b6 : i bit. Interrupt bit */ 250*4e1bc9a0SAchim Leubner /* b5 : d bit. data transfer direction. set to 1 for device to host xfer */ 251*4e1bc9a0SAchim Leubner /* b4 : reserved */ 252*4e1bc9a0SAchim Leubner /* b3-b0: PM Port */ 253*4e1bc9a0SAchim Leubner bit8 status; 254*4e1bc9a0SAchim Leubner bit8 error; 255*4e1bc9a0SAchim Leubner } agsaFisPioSetupHeader_t; 256*4e1bc9a0SAchim Leubner 257*4e1bc9a0SAchim Leubner typedef union agsaFisHeader_s 258*4e1bc9a0SAchim Leubner { 259*4e1bc9a0SAchim Leubner agsaFisBISTHeader_t Bist; 260*4e1bc9a0SAchim Leubner agsaFisRegD2HHeader_t D2H; 261*4e1bc9a0SAchim Leubner agsaFisRegH2DHeader_t H2D; 262*4e1bc9a0SAchim Leubner agsaFisSetDevBitsHeader_t SetDevBits; 263*4e1bc9a0SAchim Leubner agsaFisPioSetupHeader_t PioSetup; 264*4e1bc9a0SAchim Leubner } agsaFisHeader_t; 265*4e1bc9a0SAchim Leubner 266*4e1bc9a0SAchim Leubner 267*4e1bc9a0SAchim Leubner typedef struct agsaFisBISTData_s 268*4e1bc9a0SAchim Leubner { 269*4e1bc9a0SAchim Leubner bit8 data[8]; /* BIST data */ 270*4e1bc9a0SAchim Leubner } agsaFisBISTData_t; 271*4e1bc9a0SAchim Leubner 272*4e1bc9a0SAchim Leubner 273*4e1bc9a0SAchim Leubner typedef struct agsaFisBIST_s 274*4e1bc9a0SAchim Leubner { 275*4e1bc9a0SAchim Leubner agsaFisBISTHeader_t h; 276*4e1bc9a0SAchim Leubner agsaFisBISTData_t d; 277*4e1bc9a0SAchim Leubner } agsaFisBIST_t; 278*4e1bc9a0SAchim Leubner 279*4e1bc9a0SAchim Leubner /** \brief Structure for SATA Device to Host Register FIS 280*4e1bc9a0SAchim Leubner * 281*4e1bc9a0SAchim Leubner * The agsaFisRegDeviceToHost_t data structure describes a SATA FIS (Frame Information 282*4e1bc9a0SAchim Leubner * Structures) for FIS type Register Device to Host. 283*4e1bc9a0SAchim Leubner * 284*4e1bc9a0SAchim Leubner * This structure is used only as inbound data (device to host) to describe device to 285*4e1bc9a0SAchim Leubner * host response. 286*4e1bc9a0SAchim Leubner */ 287*4e1bc9a0SAchim Leubner 288*4e1bc9a0SAchim Leubner #define SA_SATA_RD2H_I_BIT 0x40 289*4e1bc9a0SAchim Leubner 290*4e1bc9a0SAchim Leubner typedef struct agsaFisRegD2HData_s 291*4e1bc9a0SAchim Leubner { 292*4e1bc9a0SAchim Leubner bit8 lbaLow; /* Contains the contents to be placed in the LBA Low register 293*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 294*4e1bc9a0SAchim Leubner bit8 lbaMid; /* Contains the contents to be placed in the LBA Mid register 295*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 296*4e1bc9a0SAchim Leubner 297*4e1bc9a0SAchim Leubner bit8 lbaHigh; /* Contains the contents to be placed in the LBA High register 298*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 299*4e1bc9a0SAchim Leubner bit8 device; /* Contains the contents to be placed in the Device register of the Shadow Command Block */ 300*4e1bc9a0SAchim Leubner 301*4e1bc9a0SAchim Leubner bit8 lbaLowExp; /* Contains the contents of the expanded address field 302*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 303*4e1bc9a0SAchim Leubner bit8 lbaMidExp; /* Contains the contents of the expanded address field 304*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 305*4e1bc9a0SAchim Leubner bit8 lbaHighExp; /* Contains the contents of the expanded address field 306*4e1bc9a0SAchim Leubner of the Shadow Command Block */ 307*4e1bc9a0SAchim Leubner bit8 reserved4; /** reserved */ 308*4e1bc9a0SAchim Leubner 309*4e1bc9a0SAchim Leubner bit8 sectorCount; /* Contains the contents to be placed in the Sector 310*4e1bc9a0SAchim Leubner Count register of the Shadow Command Block */ 311*4e1bc9a0SAchim Leubner bit8 sectorCountExp; /* Contains the contents of the expanded address 312*4e1bc9a0SAchim Leubner field of the Shadow Command Block */ 313*4e1bc9a0SAchim Leubner bit8 reserved6; /* Reserved */ 314*4e1bc9a0SAchim Leubner bit8 reserved5; /* Reserved */ 315*4e1bc9a0SAchim Leubner bit32 reserved7; /* Reserved */ 316*4e1bc9a0SAchim Leubner } agsaFisRegD2HData_t; 317*4e1bc9a0SAchim Leubner 318*4e1bc9a0SAchim Leubner 319*4e1bc9a0SAchim Leubner typedef struct agsaFisRegDeviceToHost_s 320*4e1bc9a0SAchim Leubner { 321*4e1bc9a0SAchim Leubner agsaFisRegD2HHeader_t h; 322*4e1bc9a0SAchim Leubner agsaFisRegD2HData_t d; 323*4e1bc9a0SAchim Leubner } agsaFisRegDeviceToHost_t; 324*4e1bc9a0SAchim Leubner 325*4e1bc9a0SAchim Leubner 326*4e1bc9a0SAchim Leubner 327*4e1bc9a0SAchim Leubner /** \brief Structure for SATA Host to Device Register FIS 328*4e1bc9a0SAchim Leubner * 329*4e1bc9a0SAchim Leubner * The agsaFisRegHostToDevice_t data structure describes a SATA FIS 330*4e1bc9a0SAchim Leubner * (Frame Information Structures) for FIS type Register Host to Device. 331*4e1bc9a0SAchim Leubner 332*4e1bc9a0SAchim Leubner * This data structure is one instance of the SATA request structure 333*4e1bc9a0SAchim Leubner * agsaSATAInitiatorRequest_t, which is one instance of the generic request, 334*4e1bc9a0SAchim Leubner * issued to saSATAStart(). 335*4e1bc9a0SAchim Leubner */ 336*4e1bc9a0SAchim Leubner typedef struct agsaFisRegH2DData_s 337*4e1bc9a0SAchim Leubner { 338*4e1bc9a0SAchim Leubner bit8 lbaLow; /* Contains the contents of the LBA Low register of the Shadow Command Block */ 339*4e1bc9a0SAchim Leubner bit8 lbaMid; /* Contains the contents of the LBA Mid register of the Shadow Command Block */ 340*4e1bc9a0SAchim Leubner bit8 lbaHigh; /* Contains the contents of the LBA High register of the Shadow Command Block */ 341*4e1bc9a0SAchim Leubner bit8 device; /* Contains the contents of the Device register of the Shadow Command Block */ 342*4e1bc9a0SAchim Leubner 343*4e1bc9a0SAchim Leubner bit8 lbaLowExp; /* Contains the contents of the expanded address field of the 344*4e1bc9a0SAchim Leubner Shadow Command Block */ 345*4e1bc9a0SAchim Leubner bit8 lbaMidExp; /* Contains the contents of the expanded address field of the 346*4e1bc9a0SAchim Leubner Shadow Command Block */ 347*4e1bc9a0SAchim Leubner bit8 lbaHighExp; /* Contains the contents of the expanded address field of the 348*4e1bc9a0SAchim Leubner Shadow Command Block */ 349*4e1bc9a0SAchim Leubner bit8 featuresExp; /* Contains the contents of the expanded address field of the 350*4e1bc9a0SAchim Leubner Shadow Command Block */ 351*4e1bc9a0SAchim Leubner 352*4e1bc9a0SAchim Leubner bit8 sectorCount; /* Contains the contents of the Sector Count register of the 353*4e1bc9a0SAchim Leubner Shadow Command Block */ 354*4e1bc9a0SAchim Leubner bit8 sectorCountExp; /* Contains the contents of the expanded address field of 355*4e1bc9a0SAchim Leubner the Shadow Command Block */ 356*4e1bc9a0SAchim Leubner bit8 reserved4; /* Reserved */ 357*4e1bc9a0SAchim Leubner bit8 control; /* Contains the contents of the Device Control register of the 358*4e1bc9a0SAchim Leubner Shadow Command Block */ 359*4e1bc9a0SAchim Leubner bit32 reserved5; /* Reserved */ 360*4e1bc9a0SAchim Leubner } agsaFisRegH2DData_t; 361*4e1bc9a0SAchim Leubner 362*4e1bc9a0SAchim Leubner typedef struct agsaFisRegHostToDevice_s 363*4e1bc9a0SAchim Leubner { 364*4e1bc9a0SAchim Leubner agsaFisRegH2DHeader_t h; 365*4e1bc9a0SAchim Leubner agsaFisRegH2DData_t d; 366*4e1bc9a0SAchim Leubner } agsaFisRegHostToDevice_t; 367*4e1bc9a0SAchim Leubner 368*4e1bc9a0SAchim Leubner 369*4e1bc9a0SAchim Leubner /** \brief Structure for SATA SetDeviceBit FIS 370*4e1bc9a0SAchim Leubner * 371*4e1bc9a0SAchim Leubner * The agsaFisSetDevBits_t data structure describes a SATA FIS (Frame Information Structures) 372*4e1bc9a0SAchim Leubner * for FIS type Set Device Bits - Device to Host. 373*4e1bc9a0SAchim Leubner * 374*4e1bc9a0SAchim Leubner * This structure is used only as inbound data (device to host) to describe device to host 375*4e1bc9a0SAchim Leubner * response. 376*4e1bc9a0SAchim Leubner */ 377*4e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBitsData_s 378*4e1bc9a0SAchim Leubner { 379*4e1bc9a0SAchim Leubner bit32 reserved6; /* Reserved */ 380*4e1bc9a0SAchim Leubner } agsaFisSetDevBitsData_t; 381*4e1bc9a0SAchim Leubner 382*4e1bc9a0SAchim Leubner 383*4e1bc9a0SAchim Leubner typedef struct agsaFisSetDevBits_s 384*4e1bc9a0SAchim Leubner { 385*4e1bc9a0SAchim Leubner agsaFisSetDevBitsHeader_t h; 386*4e1bc9a0SAchim Leubner agsaFisSetDevBitsData_t d; 387*4e1bc9a0SAchim Leubner } agsaFisSetDevBits_t; 388*4e1bc9a0SAchim Leubner 389*4e1bc9a0SAchim Leubner 390*4e1bc9a0SAchim Leubner /** \brief union data structure specifies a FIS from host software 391*4e1bc9a0SAchim Leubner * 392*4e1bc9a0SAchim Leubner * union data structure specifies a FIS from host software 393*4e1bc9a0SAchim Leubner */ 394*4e1bc9a0SAchim Leubner typedef union agsaSATAHostFis_u 395*4e1bc9a0SAchim Leubner { 396*4e1bc9a0SAchim Leubner agsaFisRegHostToDevice_t fisRegHostToDev; /* Structure containing the FIS request 397*4e1bc9a0SAchim Leubner for Register - Host to Device */ 398*4e1bc9a0SAchim Leubner agsaFisBIST_t fisBIST; /* Structure containing the FIS request for BIST */ 399*4e1bc9a0SAchim Leubner } agsaSATAHostFis_t; 400*4e1bc9a0SAchim Leubner 401*4e1bc9a0SAchim Leubner /** \brief 402*4e1bc9a0SAchim Leubner * 403*4e1bc9a0SAchim Leubner * This structure is used 404*4e1bc9a0SAchim Leubner * 405*4e1bc9a0SAchim Leubner */ 406*4e1bc9a0SAchim Leubner typedef struct agsaFisPioSetupData_s 407*4e1bc9a0SAchim Leubner { 408*4e1bc9a0SAchim Leubner bit8 lbaLow; /* Contains the contents of the LBA Low register of the Shadow Command Block */ 409*4e1bc9a0SAchim Leubner bit8 lbaMid; /* Contains the contents of the LBA Mid register of the Shadow Command Block */ 410*4e1bc9a0SAchim Leubner bit8 lbaHigh; /* Contains the contents of the LBA High register of the Shadow Command Block */ 411*4e1bc9a0SAchim Leubner bit8 device; /* Contains the contents of the Device register of the Shadow Command Block */ 412*4e1bc9a0SAchim Leubner 413*4e1bc9a0SAchim Leubner bit8 lbaLowExp; /* Contains the contents of the expanded address field of the 414*4e1bc9a0SAchim Leubner Shadow Command Block */ 415*4e1bc9a0SAchim Leubner bit8 lbaMidExp; /* Contains the contents of the expanded address field of the 416*4e1bc9a0SAchim Leubner Shadow Command Block */ 417*4e1bc9a0SAchim Leubner bit8 lbaHighExp; /* Contains the contents of the expanded address field of the 418*4e1bc9a0SAchim Leubner Shadow Command Block */ 419*4e1bc9a0SAchim Leubner bit8 reserved1; /* reserved */ 420*4e1bc9a0SAchim Leubner 421*4e1bc9a0SAchim Leubner bit8 sectorCount; /* Contains the contents of the Sector Count register of the 422*4e1bc9a0SAchim Leubner Shadow Command Block */ 423*4e1bc9a0SAchim Leubner bit8 sectorCountExp; /* Contains the contents of the expanded address field of 424*4e1bc9a0SAchim Leubner the Shadow Command Block */ 425*4e1bc9a0SAchim Leubner bit8 reserved2; /* Reserved */ 426*4e1bc9a0SAchim Leubner bit8 e_status; /* Contains the new value of Status Reg of the Command block 427*4e1bc9a0SAchim Leubner at the conclusion of the subsequent Data FIS */ 428*4e1bc9a0SAchim Leubner bit8 reserved4[2]; /* Reserved */ 429*4e1bc9a0SAchim Leubner bit8 transferCount[2]; /* the number of bytes to be xfered in the subsequent Data FiS */ 430*4e1bc9a0SAchim Leubner } agsaFisPioSetupData_t; 431*4e1bc9a0SAchim Leubner 432*4e1bc9a0SAchim Leubner 433*4e1bc9a0SAchim Leubner typedef struct agsaFisPioSetup_s 434*4e1bc9a0SAchim Leubner { 435*4e1bc9a0SAchim Leubner agsaFisPioSetupHeader_t h; 436*4e1bc9a0SAchim Leubner agsaFisPioSetupData_t d; 437*4e1bc9a0SAchim Leubner } agsaFisPioSetup_t; 438*4e1bc9a0SAchim Leubner 439*4e1bc9a0SAchim Leubner 440*4e1bc9a0SAchim Leubner 441*4e1bc9a0SAchim Leubner /** \brief describe SAS IDENTIFY address frame 442*4e1bc9a0SAchim Leubner * 443*4e1bc9a0SAchim Leubner * describe SAS IDENTIFY address frame, the CRC field is not included in the structure 444*4e1bc9a0SAchim Leubner * 445*4e1bc9a0SAchim Leubner */ 446*4e1bc9a0SAchim Leubner typedef struct agsaSASIdentify_s 447*4e1bc9a0SAchim Leubner { 448*4e1bc9a0SAchim Leubner bit8 deviceType_addressFrameType; 449*4e1bc9a0SAchim Leubner /* b7 : reserved */ 450*4e1bc9a0SAchim Leubner /* b6-4 : device type */ 451*4e1bc9a0SAchim Leubner /* b3-0 : address frame type */ 452*4e1bc9a0SAchim Leubner bit8 reason; /* reserved */ 453*4e1bc9a0SAchim Leubner /* b7-4 : reserved */ 454*4e1bc9a0SAchim Leubner /* b3-0 : reason SAS2 */ 455*4e1bc9a0SAchim Leubner bit8 initiator_ssp_stp_smp; 456*4e1bc9a0SAchim Leubner /* b8-4 : reserved */ 457*4e1bc9a0SAchim Leubner /* b3 : SSP initiator port */ 458*4e1bc9a0SAchim Leubner /* b2 : STP initiator port */ 459*4e1bc9a0SAchim Leubner /* b1 : SMP initiator port */ 460*4e1bc9a0SAchim Leubner /* b0 : reserved */ 461*4e1bc9a0SAchim Leubner bit8 target_ssp_stp_smp; 462*4e1bc9a0SAchim Leubner /* b8-4 : reserved */ 463*4e1bc9a0SAchim Leubner /* b3 : SSP target port */ 464*4e1bc9a0SAchim Leubner /* b2 : STP target port */ 465*4e1bc9a0SAchim Leubner /* b1 : SMP target port */ 466*4e1bc9a0SAchim Leubner /* b0 : reserved */ 467*4e1bc9a0SAchim Leubner bit8 deviceName[8]; /* reserved */ 468*4e1bc9a0SAchim Leubner 469*4e1bc9a0SAchim Leubner bit8 sasAddressHi[4]; /* BE SAS address Lo */ 470*4e1bc9a0SAchim Leubner bit8 sasAddressLo[4]; /* BE SAS address Hi */ 471*4e1bc9a0SAchim Leubner 472*4e1bc9a0SAchim Leubner bit8 phyIdentifier; /* phy identifier of the phy transmitting the IDENTIFY address frame */ 473*4e1bc9a0SAchim Leubner bit8 zpsds_breakReplyCap; 474*4e1bc9a0SAchim Leubner /* b7-3 : reserved */ 475*4e1bc9a0SAchim Leubner /* b2 : Inside ZPSDS Persistent */ 476*4e1bc9a0SAchim Leubner /* b1 : Requested Inside ZPSDS */ 477*4e1bc9a0SAchim Leubner /* b0 : Break Reply Capable */ 478*4e1bc9a0SAchim Leubner bit8 reserved3[6]; /* reserved */ 479*4e1bc9a0SAchim Leubner } agsaSASIdentify_t; 480*4e1bc9a0SAchim Leubner 481*4e1bc9a0SAchim Leubner #define SA_IDFRM_GET_SAS_ADDRESSLO(identFrame) \ 482*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(identFrame)->sasAddressLo) 483*4e1bc9a0SAchim Leubner 484*4e1bc9a0SAchim Leubner #define SA_IDFRM_GET_SAS_ADDRESSHI(identFrame) \ 485*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(identFrame)->sasAddressHi) 486*4e1bc9a0SAchim Leubner 487*4e1bc9a0SAchim Leubner #define SA_IDFRM_GET_DEVICETTYPE(identFrame) \ 488*4e1bc9a0SAchim Leubner (((identFrame)->deviceType_addressFrameType & 0x70) >> 4) 489*4e1bc9a0SAchim Leubner 490*4e1bc9a0SAchim Leubner #define SA_IDFRM_PUT_SAS_ADDRESSLO(identFrame, src32) \ 491*4e1bc9a0SAchim Leubner ((*(bit32 *)((identFrame)->sasAddressLo)) = BIT32_TO_DMA_BEBIT32(src32)) 492*4e1bc9a0SAchim Leubner 493*4e1bc9a0SAchim Leubner #define SA_IDFRM_PUT_SAS_ADDRESSHI(identFrame, src32) \ 494*4e1bc9a0SAchim Leubner ((*(bit32 *)((identFrame)->sasAddressHi)) = BIT32_TO_DMA_BEBIT32(src32)) 495*4e1bc9a0SAchim Leubner 496*4e1bc9a0SAchim Leubner #define SA_IDFRM_SSP_BIT 0x8 /* SSP Initiator port */ 497*4e1bc9a0SAchim Leubner #define SA_IDFRM_STP_BIT 0x4 /* STP Initiator port */ 498*4e1bc9a0SAchim Leubner #define SA_IDFRM_SMP_BIT 0x2 /* SMP Initiator port */ 499*4e1bc9a0SAchim Leubner #define SA_IDFRM_SATA_BIT 0x1 /* SATA device, valid in the discovery response only */ 500*4e1bc9a0SAchim Leubner 501*4e1bc9a0SAchim Leubner 502*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SSP_INITIATOR(identFrame) \ 503*4e1bc9a0SAchim Leubner (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_SSP_BIT) == SA_IDFRM_SSP_BIT) 504*4e1bc9a0SAchim Leubner 505*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_STP_INITIATOR(identFrame) \ 506*4e1bc9a0SAchim Leubner (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_STP_BIT) == SA_IDFRM_STP_BIT) 507*4e1bc9a0SAchim Leubner 508*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SMP_INITIATOR(identFrame) \ 509*4e1bc9a0SAchim Leubner (((identFrame)->initiator_ssp_stp_smp & SA_IDFRM_SMP_BIT) == SA_IDFRM_SMP_BIT) 510*4e1bc9a0SAchim Leubner 511*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SSP_TARGET(identFrame) \ 512*4e1bc9a0SAchim Leubner (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SSP_BIT) == SA_IDFRM_SSP_BIT) 513*4e1bc9a0SAchim Leubner 514*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_STP_TARGET(identFrame) \ 515*4e1bc9a0SAchim Leubner (((identFrame)->target_ssp_stp_smp & SA_IDFRM_STP_BIT) == SA_IDFRM_STP_BIT) 516*4e1bc9a0SAchim Leubner 517*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SMP_TARGET(identFrame) \ 518*4e1bc9a0SAchim Leubner (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SMP_BIT) == SA_IDFRM_SMP_BIT) 519*4e1bc9a0SAchim Leubner 520*4e1bc9a0SAchim Leubner #define SA_IDFRM_IS_SATA_DEVICE(identFrame) \ 521*4e1bc9a0SAchim Leubner (((identFrame)->target_ssp_stp_smp & SA_IDFRM_SATA_BIT) == SA_IDFRM_SATA_BIT) 522*4e1bc9a0SAchim Leubner 523*4e1bc9a0SAchim Leubner /** \brief data structure provides the identify data of the SATA device 524*4e1bc9a0SAchim Leubner * 525*4e1bc9a0SAchim Leubner * data structure provides the identify data of the SATA device 526*4e1bc9a0SAchim Leubner * 527*4e1bc9a0SAchim Leubner */ 528*4e1bc9a0SAchim Leubner typedef struct agsaSATAIdentifyData_s 529*4e1bc9a0SAchim Leubner { 530*4e1bc9a0SAchim Leubner bit16 rm_ataDevice; 531*4e1bc9a0SAchim Leubner /* b15-b9 : */ 532*4e1bc9a0SAchim Leubner /* b8 : ataDevice */ 533*4e1bc9a0SAchim Leubner /* b7-b1 : */ 534*4e1bc9a0SAchim Leubner /* b0 : removableMedia */ 535*4e1bc9a0SAchim Leubner bit16 word1_9[9]; /**< word 1 to 9 of identify device information */ 536*4e1bc9a0SAchim Leubner bit8 serialNumber[20]; /**< word 10 to 19 of identify device information, 20 ASCII chars */ 537*4e1bc9a0SAchim Leubner bit16 word20_22[3]; /**< word 20 to 22 of identify device information */ 538*4e1bc9a0SAchim Leubner bit8 firmwareVersion[8]; /**< word 23 to 26 of identify device information, 4 ASCII chars */ 539*4e1bc9a0SAchim Leubner bit8 modelNumber[40]; /**< word 27 to 46 of identify device information, 40 ASCII chars */ 540*4e1bc9a0SAchim Leubner bit16 word47_48[2]; /**< word 47 to 48 of identify device information, 40 ASCII chars */ 541*4e1bc9a0SAchim Leubner bit16 dma_lba_iod_ios_stimer; 542*4e1bc9a0SAchim Leubner /* b15-b14:word49_bit14_15 */ 543*4e1bc9a0SAchim Leubner /* b13 : standbyTimerSupported */ 544*4e1bc9a0SAchim Leubner /* b12 : word49_bit12 */ 545*4e1bc9a0SAchim Leubner /* b11 : IORDYSupported */ 546*4e1bc9a0SAchim Leubner /* b10 : IORDYDisabled */ 547*4e1bc9a0SAchim Leubner /* b9 : lbaSupported */ 548*4e1bc9a0SAchim Leubner /* b8 : dmaSupported */ 549*4e1bc9a0SAchim Leubner /* b7-b0 : retired */ 550*4e1bc9a0SAchim Leubner bit16 word50_52[3]; /**< word 50 to 52 of identify device information, 40 ASCII chars */ 551*4e1bc9a0SAchim Leubner bit16 valid_w88_w70; 552*4e1bc9a0SAchim Leubner /* b15-3 : word53_bit3_15 */ 553*4e1bc9a0SAchim Leubner /* b2 : validWord88 */ 554*4e1bc9a0SAchim Leubner /* b1 : validWord70_64 */ 555*4e1bc9a0SAchim Leubner /* b0 : word53_bit0 */ 556*4e1bc9a0SAchim Leubner bit16 word54_59[6]; /**< word54-59 of identify device information */ 557*4e1bc9a0SAchim Leubner bit16 numOfUserAddressableSectorsLo; /**< word60 of identify device information */ 558*4e1bc9a0SAchim Leubner bit16 numOfUserAddressableSectorsHi; /**< word61 of identify device information */ 559*4e1bc9a0SAchim Leubner bit16 word62_74[13]; /**< word62-74 of identify device information */ 560*4e1bc9a0SAchim Leubner bit16 queueDepth; 561*4e1bc9a0SAchim Leubner /* b15-5 : word75_bit5_15 */ 562*4e1bc9a0SAchim Leubner /* b4-0 : queueDepth */ 563*4e1bc9a0SAchim Leubner bit16 sataCapabilities; 564*4e1bc9a0SAchim Leubner /* b15-b11: word76_bit11_15 */ 565*4e1bc9a0SAchim Leubner /* b10 : phyEventCountersSupport */ 566*4e1bc9a0SAchim Leubner /* b9 : hostInitPowerMangment */ 567*4e1bc9a0SAchim Leubner /* b8 : nativeCommandQueuing */ 568*4e1bc9a0SAchim Leubner /* b7-b3 : word76_bit4_7 */ 569*4e1bc9a0SAchim Leubner /* b2 : sataGen2Supported (3.0 Gbps) */ 570*4e1bc9a0SAchim Leubner /* b1 : sataGen1Supported (1.5 Gbps) */ 571*4e1bc9a0SAchim Leubner /* b0 :word76_bit0 */ 572*4e1bc9a0SAchim Leubner bit16 word77; /**< word77 of identify device information */ 573*4e1bc9a0SAchim Leubner /* b15-b6 : word77 bit6_15, Reserved */ 574*4e1bc9a0SAchim Leubner /* b5 : DMA Setup Auto-Activate support */ 575*4e1bc9a0SAchim Leubner /* b4 : NCQ streaming support */ 576*4e1bc9a0SAchim Leubner /* b3-b1 : coded value indicating current negotiated SATA signal speed */ 577*4e1bc9a0SAchim Leubner /* b0 : shall be zero */ 578*4e1bc9a0SAchim Leubner bit16 sataFeaturesSupported; 579*4e1bc9a0SAchim Leubner /* b15-b7 : word78_bit7_15 */ 580*4e1bc9a0SAchim Leubner /* b6 : softSettingPreserveSupported */ 581*4e1bc9a0SAchim Leubner /* b5 : word78_bit5 */ 582*4e1bc9a0SAchim Leubner /* b4 : inOrderDataDeliverySupported */ 583*4e1bc9a0SAchim Leubner /* b3 : devInitPowerManagementSupported */ 584*4e1bc9a0SAchim Leubner /* b2 : autoActiveDMASupported */ 585*4e1bc9a0SAchim Leubner /* b1 : nonZeroBufOffsetSupported */ 586*4e1bc9a0SAchim Leubner /* b0 : word78_bit0 */ 587*4e1bc9a0SAchim Leubner bit16 sataFeaturesEnabled; 588*4e1bc9a0SAchim Leubner /* b15-7 : word79_bit7_15 */ 589*4e1bc9a0SAchim Leubner /* b6 : softSettingPreserveEnabled */ 590*4e1bc9a0SAchim Leubner /* b5 : word79_bit5 */ 591*4e1bc9a0SAchim Leubner /* b4 : inOrderDataDeliveryEnabled */ 592*4e1bc9a0SAchim Leubner /* b3 : devInitPowerManagementEnabled */ 593*4e1bc9a0SAchim Leubner /* b2 : autoActiveDMAEnabled */ 594*4e1bc9a0SAchim Leubner /* b1 : nonZeroBufOffsetEnabled */ 595*4e1bc9a0SAchim Leubner /* b0 : word79_bit0 */ 596*4e1bc9a0SAchim Leubner bit16 majorVersionNumber; 597*4e1bc9a0SAchim Leubner /* b15 : word80_bit15 */ 598*4e1bc9a0SAchim Leubner /* b14 : supportATA_ATAPI14 */ 599*4e1bc9a0SAchim Leubner /* b13 : supportATA_ATAPI13 */ 600*4e1bc9a0SAchim Leubner /* b12 : supportATA_ATAPI12 */ 601*4e1bc9a0SAchim Leubner /* b11 : supportATA_ATAPI11 */ 602*4e1bc9a0SAchim Leubner /* b10 : supportATA_ATAPI10 */ 603*4e1bc9a0SAchim Leubner /* b9 : supportATA_ATAPI9 */ 604*4e1bc9a0SAchim Leubner /* b8 : supportATA_ATAPI8 */ 605*4e1bc9a0SAchim Leubner /* b7 : supportATA_ATAPI7 */ 606*4e1bc9a0SAchim Leubner /* b6 : supportATA_ATAPI6 */ 607*4e1bc9a0SAchim Leubner /* b5 : supportATA_ATAPI5 */ 608*4e1bc9a0SAchim Leubner /* b4 : supportATA_ATAPI4 */ 609*4e1bc9a0SAchim Leubner /* b3 : supportATA3 */ 610*4e1bc9a0SAchim Leubner /* b2-0 : word80_bit0_2 */ 611*4e1bc9a0SAchim Leubner bit16 minorVersionNumber; /**< word81 of identify device information */ 612*4e1bc9a0SAchim Leubner bit16 commandSetSupported; 613*4e1bc9a0SAchim Leubner /* b15 : word82_bit15 */ 614*4e1bc9a0SAchim Leubner /* b14 : NOPSupported */ 615*4e1bc9a0SAchim Leubner /* b13 : READ_BUFFERSupported */ 616*4e1bc9a0SAchim Leubner /* b12 : WRITE_BUFFERSupported */ 617*4e1bc9a0SAchim Leubner /* b11 : word82_bit11 */ 618*4e1bc9a0SAchim Leubner /* b10 : hostProtectedAreaSupported */ 619*4e1bc9a0SAchim Leubner /* b9 : DEVICE_RESETSupported */ 620*4e1bc9a0SAchim Leubner /* b8 : SERVICEInterruptSupported */ 621*4e1bc9a0SAchim Leubner /* b7 : releaseInterruptSupported */ 622*4e1bc9a0SAchim Leubner /* b6 : lookAheadSupported */ 623*4e1bc9a0SAchim Leubner /* b5 : writeCacheSupported */ 624*4e1bc9a0SAchim Leubner /* b4 : word82_bit4 */ 625*4e1bc9a0SAchim Leubner /* b3 : mandPowerManagmentSupported */ 626*4e1bc9a0SAchim Leubner /* b2 : removableMediaSupported */ 627*4e1bc9a0SAchim Leubner /* b1 : securityModeSupported */ 628*4e1bc9a0SAchim Leubner /* b0 : SMARTSupported */ 629*4e1bc9a0SAchim Leubner bit16 commandSetSupported1; 630*4e1bc9a0SAchim Leubner /* b15-b14: word83_bit14_15 */ 631*4e1bc9a0SAchim Leubner /* b13 : FLUSH_CACHE_EXTSupported */ 632*4e1bc9a0SAchim Leubner /* b12 : mandatoryFLUSH_CACHESupported */ 633*4e1bc9a0SAchim Leubner /* b11 : devConfOverlaySupported */ 634*4e1bc9a0SAchim Leubner /* b10 : address48BitsSupported */ 635*4e1bc9a0SAchim Leubner /* b9 : autoAcousticManageSupported */ 636*4e1bc9a0SAchim Leubner /* b8 : SET_MAX_SecurityExtSupported */ 637*4e1bc9a0SAchim Leubner /* b7 : word83_bit7 */ 638*4e1bc9a0SAchim Leubner /* b6 : SET_FEATUREReqSpinupSupported */ 639*4e1bc9a0SAchim Leubner /* b5 : powerUpInStandyBySupported */ 640*4e1bc9a0SAchim Leubner /* b4 : removableMediaStNotifSupported */ 641*4e1bc9a0SAchim Leubner /* b3 : advanPowerManagmentSupported */ 642*4e1bc9a0SAchim Leubner /* b2 : CFASupported */ 643*4e1bc9a0SAchim Leubner /* b1 : DMAQueuedSupported */ 644*4e1bc9a0SAchim Leubner /* b0 : DOWNLOAD_MICROCODESupported */ 645*4e1bc9a0SAchim Leubner bit16 commandSetFeatureSupportedExt; 646*4e1bc9a0SAchim Leubner /* b15-b13: word84_bit13_15 */ 647*4e1bc9a0SAchim Leubner /* b12 : timeLimitRWContSupported */ 648*4e1bc9a0SAchim Leubner /* b11 : timeLimitRWSupported */ 649*4e1bc9a0SAchim Leubner /* b10 : writeURGBitSupported */ 650*4e1bc9a0SAchim Leubner /* b9 : readURGBitSupported */ 651*4e1bc9a0SAchim Leubner /* b8 : wwwNameSupported */ 652*4e1bc9a0SAchim Leubner /* b7 : WRITE_DMAQ_FUA_EXTSupported */ 653*4e1bc9a0SAchim Leubner /* b6 : WRITE_FUA_EXTSupported */ 654*4e1bc9a0SAchim Leubner /* b5 : generalPurposeLogSupported */ 655*4e1bc9a0SAchim Leubner /* b4 : streamingSupported */ 656*4e1bc9a0SAchim Leubner /* b3 : mediaCardPassThroughSupported */ 657*4e1bc9a0SAchim Leubner /* b2 : mediaSerialNoSupported */ 658*4e1bc9a0SAchim Leubner /* b1 : SMARTSelfRestSupported */ 659*4e1bc9a0SAchim Leubner /* b0 : SMARTErrorLogSupported */ 660*4e1bc9a0SAchim Leubner bit16 commandSetFeatureEnabled; 661*4e1bc9a0SAchim Leubner /* b15 : word85_bit15 */ 662*4e1bc9a0SAchim Leubner /* b14 : NOPEnabled */ 663*4e1bc9a0SAchim Leubner /* b13 : READ_BUFFEREnabled */ 664*4e1bc9a0SAchim Leubner /* b12 : WRITE_BUFFEREnabled */ 665*4e1bc9a0SAchim Leubner /* b11 : word85_bit11 */ 666*4e1bc9a0SAchim Leubner /* b10 : hostProtectedAreaEnabled */ 667*4e1bc9a0SAchim Leubner /* b9 : DEVICE_RESETEnabled */ 668*4e1bc9a0SAchim Leubner /* b8 : SERVICEInterruptEnabled */ 669*4e1bc9a0SAchim Leubner /* b7 : releaseInterruptEnabled */ 670*4e1bc9a0SAchim Leubner /* b6 : lookAheadEnabled */ 671*4e1bc9a0SAchim Leubner /* b5 : writeCacheEnabled */ 672*4e1bc9a0SAchim Leubner /* b4 : word85_bit4 */ 673*4e1bc9a0SAchim Leubner /* b3 : mandPowerManagmentEnabled */ 674*4e1bc9a0SAchim Leubner /* b2 : removableMediaEnabled */ 675*4e1bc9a0SAchim Leubner /* b1 : securityModeEnabled */ 676*4e1bc9a0SAchim Leubner /* b0 : SMARTEnabled */ 677*4e1bc9a0SAchim Leubner bit16 commandSetFeatureEnabled1; 678*4e1bc9a0SAchim Leubner /* b15-b14: word86_bit14_15 */ 679*4e1bc9a0SAchim Leubner /* b13 : FLUSH_CACHE_EXTEnabled */ 680*4e1bc9a0SAchim Leubner /* b12 : mandatoryFLUSH_CACHEEnabled */ 681*4e1bc9a0SAchim Leubner /* b11 : devConfOverlayEnabled */ 682*4e1bc9a0SAchim Leubner /* b10 : address48BitsEnabled */ 683*4e1bc9a0SAchim Leubner /* b9 : autoAcousticManageEnabled */ 684*4e1bc9a0SAchim Leubner /* b8 : SET_MAX_SecurityExtEnabled */ 685*4e1bc9a0SAchim Leubner /* b7 : word86_bit7 */ 686*4e1bc9a0SAchim Leubner /* b6 : SET_FEATUREReqSpinupEnabled */ 687*4e1bc9a0SAchim Leubner /* b5 : powerUpInStandyByEnabled */ 688*4e1bc9a0SAchim Leubner /* b4 : removableMediaStNotifEnabled */ 689*4e1bc9a0SAchim Leubner /* b3 : advanPowerManagmentEnabled */ 690*4e1bc9a0SAchim Leubner /* b2 : CFAEnabled */ 691*4e1bc9a0SAchim Leubner /* b1 : DMAQueuedEnabled */ 692*4e1bc9a0SAchim Leubner /* b0 : DOWNLOAD_MICROCODEEnabled */ 693*4e1bc9a0SAchim Leubner bit16 commandSetFeatureDefault; 694*4e1bc9a0SAchim Leubner /* b15-b13: word87_bit13_15 */ 695*4e1bc9a0SAchim Leubner /* b12 : timeLimitRWContEnabled */ 696*4e1bc9a0SAchim Leubner /* b11 : timeLimitRWEnabled */ 697*4e1bc9a0SAchim Leubner /* b10 : writeURGBitEnabled */ 698*4e1bc9a0SAchim Leubner /* b9 : readURGBitEnabled */ 699*4e1bc9a0SAchim Leubner /* b8 : wwwNameEnabled */ 700*4e1bc9a0SAchim Leubner /* b7 : WRITE_DMAQ_FUA_EXTEnabled */ 701*4e1bc9a0SAchim Leubner /* b6 : WRITE_FUA_EXTEnabled */ 702*4e1bc9a0SAchim Leubner /* b5 : generalPurposeLogEnabled */ 703*4e1bc9a0SAchim Leubner /* b4 : streamingEnabled */ 704*4e1bc9a0SAchim Leubner /* b3 : mediaCardPassThroughEnabled */ 705*4e1bc9a0SAchim Leubner /* b2 : mediaSerialNoEnabled */ 706*4e1bc9a0SAchim Leubner /* b1 : SMARTSelfRestEnabled */ 707*4e1bc9a0SAchim Leubner /* b0 : SMARTErrorLogEnabled */ 708*4e1bc9a0SAchim Leubner bit16 ultraDMAModes; 709*4e1bc9a0SAchim Leubner /* b15 : word88_bit15 */ 710*4e1bc9a0SAchim Leubner /* b14 : ultraDMAMode6Selected */ 711*4e1bc9a0SAchim Leubner /* b13 : ultraDMAMode5Selected */ 712*4e1bc9a0SAchim Leubner /* b12 : ultraDMAMode4Selected */ 713*4e1bc9a0SAchim Leubner /* b11 : ultraDMAMode3Selected */ 714*4e1bc9a0SAchim Leubner /* b10 : ultraDMAMode2Selected */ 715*4e1bc9a0SAchim Leubner /* b9 : ultraDMAMode1Selected */ 716*4e1bc9a0SAchim Leubner /* b8 : ultraDMAMode0Selected */ 717*4e1bc9a0SAchim Leubner /* b7 : word88_bit7 */ 718*4e1bc9a0SAchim Leubner /* b6 : ultraDMAMode6Supported */ 719*4e1bc9a0SAchim Leubner /* b5 : ultraDMAMode5Supported */ 720*4e1bc9a0SAchim Leubner /* b4 : ultraDMAMode4Supported */ 721*4e1bc9a0SAchim Leubner /* b3 : ultraDMAMode3Supported */ 722*4e1bc9a0SAchim Leubner /* b2 : ultraDMAMode2Supported */ 723*4e1bc9a0SAchim Leubner /* b1 : ultraDMAMode1Supported */ 724*4e1bc9a0SAchim Leubner /* b0 : ultraDMAMode0Supported */ 725*4e1bc9a0SAchim Leubner bit16 timeToSecurityErase; 726*4e1bc9a0SAchim Leubner bit16 timeToEnhhancedSecurityErase; 727*4e1bc9a0SAchim Leubner bit16 currentAPMValue; 728*4e1bc9a0SAchim Leubner bit16 masterPasswordRevCode; 729*4e1bc9a0SAchim Leubner bit16 hardwareResetResult; 730*4e1bc9a0SAchim Leubner /* b15-b14: word93_bit15_14 */ 731*4e1bc9a0SAchim Leubner /* b13 : deviceDetectedCBLIBbelow Vil */ 732*4e1bc9a0SAchim Leubner /* b12-b8 : device1 HardwareResetResult */ 733*4e1bc9a0SAchim Leubner /* b7-b0 : device0 HardwareResetResult */ 734*4e1bc9a0SAchim Leubner bit16 currentAutoAccousticManagementValue; 735*4e1bc9a0SAchim Leubner /* b15-b8 : Vendor recommended value */ 736*4e1bc9a0SAchim Leubner /* b7-b0 : current value */ 737*4e1bc9a0SAchim Leubner bit16 word95_99[5]; /**< word85-99 of identify device information */ 738*4e1bc9a0SAchim Leubner bit16 maxLBA0_15; /**< word100 of identify device information */ 739*4e1bc9a0SAchim Leubner bit16 maxLBA16_31; /**< word101 of identify device information */ 740*4e1bc9a0SAchim Leubner bit16 maxLBA32_47; /**< word102 of identify device information */ 741*4e1bc9a0SAchim Leubner bit16 maxLBA48_63; /**< word103 of identify device information */ 742*4e1bc9a0SAchim Leubner bit16 word104_107[4]; /**< word104-107 of identify device information */ 743*4e1bc9a0SAchim Leubner bit16 namingAuthority; 744*4e1bc9a0SAchim Leubner /* b15-b12: NAA_bit0_3 */ 745*4e1bc9a0SAchim Leubner /* b11-b0 : IEEE_OUI_bit12_23*/ 746*4e1bc9a0SAchim Leubner bit16 namingAuthority1; 747*4e1bc9a0SAchim Leubner /* b15-b4 : IEEE_OUI_bit0_11 */ 748*4e1bc9a0SAchim Leubner /* b3-b0 : uniqueID_bit32_35 */ 749*4e1bc9a0SAchim Leubner bit16 uniqueID_bit16_31; /**< word110 of identify device information */ 750*4e1bc9a0SAchim Leubner bit16 uniqueID_bit0_15; /**< word111 of identify device information */ 751*4e1bc9a0SAchim Leubner bit16 word112_126[15]; 752*4e1bc9a0SAchim Leubner bit16 removableMediaStatusNotificationFeature; 753*4e1bc9a0SAchim Leubner /* b15-b2 : word127_b16_2 */ 754*4e1bc9a0SAchim Leubner /* b1-b0 : supported set see ATAPI6 spec */ 755*4e1bc9a0SAchim Leubner bit16 securityStatus; 756*4e1bc9a0SAchim Leubner /* b15-b9 : word128_b15_9 */ 757*4e1bc9a0SAchim Leubner /* b8 : securityLevel */ 758*4e1bc9a0SAchim Leubner /* b7-b6 : word128_b7_6 */ 759*4e1bc9a0SAchim Leubner /* b5 : enhancedSecurityEraseSupported */ 760*4e1bc9a0SAchim Leubner /* b4 : securityCountExpired */ 761*4e1bc9a0SAchim Leubner /* b3 : securityFrozen */ 762*4e1bc9a0SAchim Leubner /* b2 : securityLocked */ 763*4e1bc9a0SAchim Leubner /* b1 : securityEnabled */ 764*4e1bc9a0SAchim Leubner /* b0 : securitySupported */ 765*4e1bc9a0SAchim Leubner bit16 vendorSpecific[31]; 766*4e1bc9a0SAchim Leubner bit16 cfaPowerMode1; 767*4e1bc9a0SAchim Leubner /* b15 : word 160 supported */ 768*4e1bc9a0SAchim Leubner /* b14 : word160_b14 */ 769*4e1bc9a0SAchim Leubner /* b13 : cfaPowerRequired */ 770*4e1bc9a0SAchim Leubner /* b12 : cfaPowerModeDisabled */ 771*4e1bc9a0SAchim Leubner /* b11-b0 : maxCurrentInMa */ 772*4e1bc9a0SAchim Leubner bit16 word161_175[15]; 773*4e1bc9a0SAchim Leubner bit16 currentMediaSerialNumber[30]; 774*4e1bc9a0SAchim Leubner bit16 word206_254[49]; /**< word206-254 of identify device information */ 775*4e1bc9a0SAchim Leubner bit16 integrityWord; 776*4e1bc9a0SAchim Leubner /* b15-b8 : cheksum */ 777*4e1bc9a0SAchim Leubner /* b7-b0 : signature */ 778*4e1bc9a0SAchim Leubner } agsaSATAIdentifyData_t; 779*4e1bc9a0SAchim Leubner 780*4e1bc9a0SAchim Leubner 781*4e1bc9a0SAchim Leubner 782*4e1bc9a0SAchim Leubner 783*4e1bc9a0SAchim Leubner /** \brief data structure describes an SSP Command INFORMATION UNIT 784*4e1bc9a0SAchim Leubner * 785*4e1bc9a0SAchim Leubner * data structure describes an SSP Command INFORMATION UNIT used for SSP command and is part of 786*4e1bc9a0SAchim Leubner * the SSP frame. 787*4e1bc9a0SAchim Leubner * 788*4e1bc9a0SAchim Leubner * Currently, only CDB up to 16 bytes is supported. Additional CDB length is supported to 0 bytes.. 789*4e1bc9a0SAchim Leubner * 790*4e1bc9a0SAchim Leubner */ 791*4e1bc9a0SAchim Leubner typedef struct agsaSSPCmdInfoUnit_s 792*4e1bc9a0SAchim Leubner { 793*4e1bc9a0SAchim Leubner bit8 lun[8]; /* SCSI Logical Unit Number */ 794*4e1bc9a0SAchim Leubner bit8 reserved1; /* reserved */ 795*4e1bc9a0SAchim Leubner bit8 efb_tp_taskAttribute; 796*4e1bc9a0SAchim Leubner /* B7 : enabledFirstBurst */ 797*4e1bc9a0SAchim Leubner /* B6-3 : taskPriority */ 798*4e1bc9a0SAchim Leubner /* B2-0 : taskAttribute */ 799*4e1bc9a0SAchim Leubner bit8 reserved2; /* reserved */ 800*4e1bc9a0SAchim Leubner bit8 additionalCdbLen; 801*4e1bc9a0SAchim Leubner /* B7-2 : additionalCdbLen */ 802*4e1bc9a0SAchim Leubner /* B1-0 : reserved */ 803*4e1bc9a0SAchim Leubner bit8 cdb[16]; /* The SCSI CDB up to 16 bytes length */ 804*4e1bc9a0SAchim Leubner } agsaSSPCmdInfoUnit_t; 805*4e1bc9a0SAchim Leubner 806*4e1bc9a0SAchim Leubner #define SA_SSPCMD_GET_TASKATTRIB(pCmd) ((pCmd)->efb_tp_taskAttribute & 0x7) 807*4e1bc9a0SAchim Leubner 808*4e1bc9a0SAchim Leubner 809*4e1bc9a0SAchim Leubner /** \brief structure describes an SSP Response INFORMATION UNIT 810*4e1bc9a0SAchim Leubner * 811*4e1bc9a0SAchim Leubner * data structure describes an SSP Response INFORMATION UNIT used for SSP response to Command IU 812*4e1bc9a0SAchim Leubner * or Task IU and is part of the SSP frame 813*4e1bc9a0SAchim Leubner * 814*4e1bc9a0SAchim Leubner */ 815*4e1bc9a0SAchim Leubner 816*4e1bc9a0SAchim Leubner typedef struct agsaSSPResponseInfoUnit_s 817*4e1bc9a0SAchim Leubner { 818*4e1bc9a0SAchim Leubner bit8 reserved1[10]; /* reserved */ 819*4e1bc9a0SAchim Leubner 820*4e1bc9a0SAchim Leubner bit8 dataPres; /* which data is present */ 821*4e1bc9a0SAchim Leubner /* B7-2 : reserved */ 822*4e1bc9a0SAchim Leubner /* B1-0 : data Present */ 823*4e1bc9a0SAchim Leubner bit8 status; /* SCSI status as define by SAM-3 */ 824*4e1bc9a0SAchim Leubner bit8 reserved4[4]; /* reserved */ 825*4e1bc9a0SAchim Leubner bit8 senseDataLen[4]; /* SCSI Sense Data length */ 826*4e1bc9a0SAchim Leubner bit8 responsedataLen[4]; /* Response data length */ 827*4e1bc9a0SAchim Leubner /* Follow by Response Data if any */ 828*4e1bc9a0SAchim Leubner /* Follow by Sense Data if any */ 829*4e1bc9a0SAchim Leubner } agsaSSPResponseInfoUnit_t; 830*4e1bc9a0SAchim Leubner 831*4e1bc9a0SAchim Leubner 832*4e1bc9a0SAchim Leubner typedef struct agsaSSPFrameFormat_s 833*4e1bc9a0SAchim Leubner { 834*4e1bc9a0SAchim Leubner bit8 frameType; /* frame type */ 835*4e1bc9a0SAchim Leubner bit8 hdsa[3]; /* Hashed destination SAS Address */ 836*4e1bc9a0SAchim Leubner bit8 reserved1; 837*4e1bc9a0SAchim Leubner bit8 hssa[3]; /* Hashed source SAS Address */ 838*4e1bc9a0SAchim Leubner bit8 reserved2; 839*4e1bc9a0SAchim Leubner bit8 reserved3; 840*4e1bc9a0SAchim Leubner bit8 tlr_rdf; 841*4e1bc9a0SAchim Leubner /* B7-5 : reserved */ 842*4e1bc9a0SAchim Leubner /* B4-3 : TLR control*/ 843*4e1bc9a0SAchim Leubner /* B2 : Retry Data Frames */ 844*4e1bc9a0SAchim Leubner /* B1 : Retransmit */ 845*4e1bc9a0SAchim Leubner /* B0 : Changing Data Pointer */ 846*4e1bc9a0SAchim Leubner bit8 fill_bytes; 847*4e1bc9a0SAchim Leubner /* B7-2 : reserved */ 848*4e1bc9a0SAchim Leubner /* B1-0 : Number of Fill bytes*/ 849*4e1bc9a0SAchim Leubner bit8 reserved5; 850*4e1bc9a0SAchim Leubner bit8 reserved6[3]; 851*4e1bc9a0SAchim Leubner bit8 tag[2]; /* CMD or TM tag */ 852*4e1bc9a0SAchim Leubner bit8 tptt[2]; /* target port transfer tag */ 853*4e1bc9a0SAchim Leubner bit8 dataOffset[4]; /* data offset */ 854*4e1bc9a0SAchim Leubner /* Follow by IU */ 855*4e1bc9a0SAchim Leubner } agsaSSPFrameFormat_t; 856*4e1bc9a0SAchim Leubner 857*4e1bc9a0SAchim Leubner 858*4e1bc9a0SAchim Leubner typedef struct agsaSSPOpenFrame_s 859*4e1bc9a0SAchim Leubner { 860*4e1bc9a0SAchim Leubner bit8 frameType; /* frame type */ 861*4e1bc9a0SAchim Leubner /* B7 : Initiator Port */ 862*4e1bc9a0SAchim Leubner /* B6-4 : Protocol */ 863*4e1bc9a0SAchim Leubner /* B3-0 : Address Frame Type */ 864*4e1bc9a0SAchim Leubner bit8 feat_connrate; 865*4e1bc9a0SAchim Leubner /* B7-4 : features */ 866*4e1bc9a0SAchim Leubner /* B3-0 : connection rate */ 867*4e1bc9a0SAchim Leubner bit8 initiatorConnTag[2]; /* Initiator connection tag */ 868*4e1bc9a0SAchim Leubner bit8 dstSasAddr[8]; /* Destination SAS Address */ 869*4e1bc9a0SAchim Leubner bit8 srcSasAddr[8]; /* Source SAS Address */ 870*4e1bc9a0SAchim Leubner bit8 zoneSrcGroup; /* Zone source group */ 871*4e1bc9a0SAchim Leubner bit8 pathwayBlockCount; /* pathway block count */ 872*4e1bc9a0SAchim Leubner bit8 arbWaitTime[2]; /* Arbitration Wait Time */ 873*4e1bc9a0SAchim Leubner bit8 moreCompatFeat[4]; /* More Compatibility Features */ 874*4e1bc9a0SAchim Leubner /* Follow by CRC */ 875*4e1bc9a0SAchim Leubner } agsaSSPOpenFrame_t; 876*4e1bc9a0SAchim Leubner 877*4e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_SENSEDATALEN(pSSPResp) \ 878*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32*)(pSSPResp)->senseDataLen) 879*4e1bc9a0SAchim Leubner 880*4e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_RESPONSEDATALEN(pSSPResp) \ 881*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32*)(pSSPResp)->responsedataLen) 882*4e1bc9a0SAchim Leubner 883*4e1bc9a0SAchim Leubner #define SA_SSPRESP_GET_DATAPRES(pSSPResp) ((pSSPResp)->dataPres & 0x3) 884*4e1bc9a0SAchim Leubner 885*4e1bc9a0SAchim Leubner /** \brief structure describes a SAS SSP Task Management command request 886*4e1bc9a0SAchim Leubner * 887*4e1bc9a0SAchim Leubner * The agsaSSPScsiTaskMgntReq_t data structure describes a SAS SSP Task Management command request sent by the 888*4e1bc9a0SAchim Leubner * initiator or received by the target. 889*4e1bc9a0SAchim Leubner * 890*4e1bc9a0SAchim Leubner * The response to Task Management is specified by agsaSSPResponseInfoUnit_t. 891*4e1bc9a0SAchim Leubner * 892*4e1bc9a0SAchim Leubner * This data structure is one instance of the generic request issued to saSSPStart() and is passed 893*4e1bc9a0SAchim Leubner * as an agsaSASRequestBody_t 894*4e1bc9a0SAchim Leubner * 895*4e1bc9a0SAchim Leubner */ 896*4e1bc9a0SAchim Leubner typedef struct agsaSSPScsiTaskMgntReq_s 897*4e1bc9a0SAchim Leubner { 898*4e1bc9a0SAchim Leubner bit8 lun[8]; /* SCSI Logical Unit Number */ 899*4e1bc9a0SAchim Leubner bit16 reserved1; /* reserved */ 900*4e1bc9a0SAchim Leubner bit8 taskMgntFunction; /* task management function code */ 901*4e1bc9a0SAchim Leubner bit8 reserved2; /* reserved */ 902*4e1bc9a0SAchim Leubner bit16 tagOfTaskToBeManaged; /* Tag/context of task to be managed */ 903*4e1bc9a0SAchim Leubner bit16 reserved3; /* reserved */ 904*4e1bc9a0SAchim Leubner bit32 reserved4[3]; /* reserved */ 905*4e1bc9a0SAchim Leubner bit32 tmOption; /* Not part of SSP TMF IU */ 906*4e1bc9a0SAchim Leubner /* B7-2 : reserved */ 907*4e1bc9a0SAchim Leubner /* B1 : DS_OPTION */ 908*4e1bc9a0SAchim Leubner /* B0 : ADS_OPTION */ 909*4e1bc9a0SAchim Leubner } agsaSSPScsiTaskMgntReq_t; 910*4e1bc9a0SAchim Leubner 911*4e1bc9a0SAchim Leubner 912*4e1bc9a0SAchim Leubner /** \brief data structure describes the first four bytes of the SMP frame. 913*4e1bc9a0SAchim Leubner * 914*4e1bc9a0SAchim Leubner * The agsaSMPFrameHeader_t data structure describes the first four bytes of the SMP frame. 915*4e1bc9a0SAchim Leubner * 916*4e1bc9a0SAchim Leubner * 917*4e1bc9a0SAchim Leubner */ 918*4e1bc9a0SAchim Leubner 919*4e1bc9a0SAchim Leubner typedef struct agsaSMPFrameHeader_s 920*4e1bc9a0SAchim Leubner { 921*4e1bc9a0SAchim Leubner bit8 smpFrameType; /* The first byte of SMP frame represents the SMP FRAME TYPE */ 922*4e1bc9a0SAchim Leubner bit8 smpFunction; /* The second byte of the SMP frame represents the SMP FUNCTION */ 923*4e1bc9a0SAchim Leubner bit8 smpFunctionResult; /* The third byte of SMP frame represents FUNCTION RESULT of the SMP response. */ 924*4e1bc9a0SAchim Leubner bit8 smpReserved; /* reserved */ 925*4e1bc9a0SAchim Leubner } agsaSMPFrameHeader_t; 926*4e1bc9a0SAchim Leubner 927*4e1bc9a0SAchim Leubner /**************************************************************** 928*4e1bc9a0SAchim Leubner * report general response 929*4e1bc9a0SAchim Leubner ****************************************************************/ 930*4e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_CONFIGURING_BIT 0x2 931*4e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_CONFIGURABLE_BIT 0x1 932*4e1bc9a0SAchim Leubner 933*4e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportGeneral_s 934*4e1bc9a0SAchim Leubner { 935*4e1bc9a0SAchim Leubner bit8 expanderChangeCount16[2]; 936*4e1bc9a0SAchim Leubner bit8 expanderRouteIndexes16[2]; 937*4e1bc9a0SAchim Leubner bit8 reserved1; 938*4e1bc9a0SAchim Leubner bit8 numOfPhys; 939*4e1bc9a0SAchim Leubner bit8 configuring_configurable; 940*4e1bc9a0SAchim Leubner /* B7-2 : reserved */ 941*4e1bc9a0SAchim Leubner /* B1 : configuring */ 942*4e1bc9a0SAchim Leubner /* B0 : configurable */ 943*4e1bc9a0SAchim Leubner bit8 reserved4[17]; 944*4e1bc9a0SAchim Leubner } agsaSmpRespReportGeneral_t; 945*4e1bc9a0SAchim Leubner 946*4e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_IS_CONFIGURING(pResp) \ 947*4e1bc9a0SAchim Leubner (((pResp)->configuring_configurable & SA_REPORT_GENERAL_CONFIGURING_BIT) == \ 948*4e1bc9a0SAchim Leubner SA_REPORT_GENERAL_CONFIGURING_BIT) 949*4e1bc9a0SAchim Leubner 950*4e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_IS_CONFIGURABLE(pResp) \ 951*4e1bc9a0SAchim Leubner (((pResp)->configuring_configurable & SA_REPORT_GENERAL_CONFIGURABLE_BIT) == \ 952*4e1bc9a0SAchim Leubner SA_REPORT_GENERAL_CONFIGURABLE_BIT) 953*4e1bc9a0SAchim Leubner 954*4e1bc9a0SAchim Leubner #define SA_REPORT_GENERAL_GET_ROUTEINDEXES(pResp) \ 955*4e1bc9a0SAchim Leubner DMA_BEBIT16_TO_BIT16(*(bit16 *)((pResp)->expanderRouteIndexes16)) 956*4e1bc9a0SAchim Leubner 957*4e1bc9a0SAchim Leubner /**************************************************************** 958*4e1bc9a0SAchim Leubner * report manufacturer info response 959*4e1bc9a0SAchim Leubner ****************************************************************/ 960*4e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportManufactureInfo_s 961*4e1bc9a0SAchim Leubner { 962*4e1bc9a0SAchim Leubner bit8 reserved1[8]; 963*4e1bc9a0SAchim Leubner bit8 vendorIdentification[8]; 964*4e1bc9a0SAchim Leubner bit8 productIdentification[16]; 965*4e1bc9a0SAchim Leubner bit8 productRevisionLevel[4]; 966*4e1bc9a0SAchim Leubner bit8 vendorSpecific[20]; 967*4e1bc9a0SAchim Leubner } agsaSmpRespReportManufactureInfo_t; 968*4e1bc9a0SAchim Leubner 969*4e1bc9a0SAchim Leubner /**************************************************************** 970*4e1bc9a0SAchim Leubner * discover request 971*4e1bc9a0SAchim Leubner ****************************************************************/ 972*4e1bc9a0SAchim Leubner typedef struct agsaSmpReqDiscover_s 973*4e1bc9a0SAchim Leubner { 974*4e1bc9a0SAchim Leubner bit32 reserved1; 975*4e1bc9a0SAchim Leubner bit8 reserved2; 976*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 977*4e1bc9a0SAchim Leubner bit8 ignored; 978*4e1bc9a0SAchim Leubner bit8 reserved3; 979*4e1bc9a0SAchim Leubner } agsaSmpReqDiscover_t; 980*4e1bc9a0SAchim Leubner 981*4e1bc9a0SAchim Leubner /**************************************************************** 982*4e1bc9a0SAchim Leubner * discover response 983*4e1bc9a0SAchim Leubner ****************************************************************/ 984*4e1bc9a0SAchim Leubner typedef struct agsaSmpRespDiscover_s 985*4e1bc9a0SAchim Leubner { 986*4e1bc9a0SAchim Leubner bit8 reserved1[4]; 987*4e1bc9a0SAchim Leubner bit8 reserved2; 988*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 989*4e1bc9a0SAchim Leubner bit8 reserved3[2]; 990*4e1bc9a0SAchim Leubner bit8 attachedDeviceType; 991*4e1bc9a0SAchim Leubner /* B7 : reserved */ 992*4e1bc9a0SAchim Leubner /* B6-4 : attachedDeviceType */ 993*4e1bc9a0SAchim Leubner /* B3-0 : reserved */ 994*4e1bc9a0SAchim Leubner bit8 negotiatedPhyLinkRate; 995*4e1bc9a0SAchim Leubner /* B7-4 : reserved */ 996*4e1bc9a0SAchim Leubner /* B3-0 : negotiatedPhyLinkRate */ 997*4e1bc9a0SAchim Leubner bit8 attached_Ssp_Stp_Smp_Sata_Initiator; 998*4e1bc9a0SAchim Leubner /* B7-4 : reserved */ 999*4e1bc9a0SAchim Leubner /* B3 : attachedSspInitiator */ 1000*4e1bc9a0SAchim Leubner /* B2 : attachedStpInitiator */ 1001*4e1bc9a0SAchim Leubner /* B1 : attachedSmpInitiator */ 1002*4e1bc9a0SAchim Leubner /* B0 : attachedSataHost */ 1003*4e1bc9a0SAchim Leubner bit8 attached_SataPS_Ssp_Stp_Smp_Sata_Target; 1004*4e1bc9a0SAchim Leubner /* B7 : attachedSataPortSelector */ 1005*4e1bc9a0SAchim Leubner /* B6-4 : reserved */ 1006*4e1bc9a0SAchim Leubner /* B3 : attachedSspTarget */ 1007*4e1bc9a0SAchim Leubner /* B2 : attachedStpTarget */ 1008*4e1bc9a0SAchim Leubner /* B1 : attachedSmpTarget */ 1009*4e1bc9a0SAchim Leubner /* B0 : attachedSatadevice */ 1010*4e1bc9a0SAchim Leubner bit8 sasAddressHi[4]; 1011*4e1bc9a0SAchim Leubner bit8 sasAddressLo[4]; 1012*4e1bc9a0SAchim Leubner bit8 attachedSasAddressHi[4]; 1013*4e1bc9a0SAchim Leubner bit8 attachedSasAddressLo[4]; 1014*4e1bc9a0SAchim Leubner bit8 attachedPhyIdentifier; 1015*4e1bc9a0SAchim Leubner bit8 reserved9[7]; 1016*4e1bc9a0SAchim Leubner bit8 programmedAndHardware_MinPhyLinkRate; 1017*4e1bc9a0SAchim Leubner /* B7-4 : programmedMinPhyLinkRate */ 1018*4e1bc9a0SAchim Leubner /* B3-0 : hardwareMinPhyLinkRate */ 1019*4e1bc9a0SAchim Leubner bit8 programmedAndHardware_MaxPhyLinkRate; 1020*4e1bc9a0SAchim Leubner /* B7-4 : programmedMaxPhyLinkRate */ 1021*4e1bc9a0SAchim Leubner /* B3-0 : hardwareMaxPhyLinkRate */ 1022*4e1bc9a0SAchim Leubner bit8 phyChangeCount; 1023*4e1bc9a0SAchim Leubner bit8 virtualPhy_partialPathwayTimeout; 1024*4e1bc9a0SAchim Leubner /* B7 : virtualPhy*/ 1025*4e1bc9a0SAchim Leubner /* B6-4 : reserved */ 1026*4e1bc9a0SAchim Leubner /* B3-0 : partialPathwayTimeout */ 1027*4e1bc9a0SAchim Leubner bit8 routingAttribute; 1028*4e1bc9a0SAchim Leubner /* B7-4 : reserved */ 1029*4e1bc9a0SAchim Leubner /* B3-0 : routingAttribute */ 1030*4e1bc9a0SAchim Leubner bit8 reserved13[5]; 1031*4e1bc9a0SAchim Leubner bit8 vendorSpecific[2]; 1032*4e1bc9a0SAchim Leubner } agsaSmpRespDiscover_t; 1033*4e1bc9a0SAchim Leubner 1034*4e1bc9a0SAchim Leubner #define SA_DISCRSP_SSP_BIT 0x08 1035*4e1bc9a0SAchim Leubner #define SA_DISCRSP_STP_BIT 0x04 1036*4e1bc9a0SAchim Leubner #define SA_DISCRSP_SMP_BIT 0x02 1037*4e1bc9a0SAchim Leubner #define SA_DISCRSP_SATA_BIT 0x01 1038*4e1bc9a0SAchim Leubner 1039*4e1bc9a0SAchim Leubner #define SA_DISCRSP_SATA_PS_BIT 0x80 1040*4e1bc9a0SAchim Leubner 1041*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_DEVTYPE(pResp) \ 1042*4e1bc9a0SAchim Leubner (((pResp)->attachedDeviceType & 0x70) >> 4) 1043*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_LINKRATE(pResp) \ 1044*4e1bc9a0SAchim Leubner ((pResp)->negotiatedPhyLinkRate & 0x0F) 1045*4e1bc9a0SAchim Leubner 1046*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SSP_INITIATOR(pResp) \ 1047*4e1bc9a0SAchim Leubner (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SSP_BIT) == SA_DISCRSP_SSP_BIT) 1048*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_STP_INITIATOR(pResp) \ 1049*4e1bc9a0SAchim Leubner (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_STP_BIT) == SA_DISCRSP_STP_BIT) 1050*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SMP_INITIATOR(pResp) \ 1051*4e1bc9a0SAchim Leubner (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SMP_BIT) == SA_DISCRSP_SMP_BIT) 1052*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_HOST(pResp) \ 1053*4e1bc9a0SAchim Leubner (((pResp)->attached_Ssp_Stp_Smp_Sata_Initiator & SA_DISCRSP_SATA_BIT) == SA_DISCRSP_SATA_BIT) 1054*4e1bc9a0SAchim Leubner 1055*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SSP_TARGET(pResp) \ 1056*4e1bc9a0SAchim Leubner (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SSP_BIT) == SA_DISCRSP_SSP_BIT) 1057*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_STP_TARGET(pResp) \ 1058*4e1bc9a0SAchim Leubner (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_STP_BIT) == SA_DISCRSP_STP_BIT) 1059*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SMP_TARGET(pResp) \ 1060*4e1bc9a0SAchim Leubner (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SMP_BIT) == SA_DISCRSP_SMP_BIT) 1061*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_DEVICE(pResp) \ 1062*4e1bc9a0SAchim Leubner (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SATA_BIT) == SA_DISCRSP_SATA_BIT) 1063*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_SATA_PORTSELECTOR(pResp) \ 1064*4e1bc9a0SAchim Leubner (((pResp)->attached_SataPS_Ssp_Stp_Smp_Sata_Target & SA_DISCRSP_SATA_PS_BIT) == SA_DISCRSP_SATA_PS_BIT) 1065*4e1bc9a0SAchim Leubner 1066*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_SAS_ADDRESSHI(pResp) \ 1067*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->sasAddressHi) 1068*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_SAS_ADDRESSLO(pResp) \ 1069*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->sasAddressLo) 1070*4e1bc9a0SAchim Leubner 1071*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_SAS_ADDRESSHI(pResp) \ 1072*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->attachedSasAddressHi) 1073*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ATTACHED_SAS_ADDRESSLO(pResp) \ 1074*4e1bc9a0SAchim Leubner DMA_BEBIT32_TO_BIT32(*(bit32 *)(pResp)->attachedSasAddressLo) 1075*4e1bc9a0SAchim Leubner 1076*4e1bc9a0SAchim Leubner #define SA_DISCRSP_VIRTUALPHY_BIT 0x80 1077*4e1bc9a0SAchim Leubner #define SA_DISCRSP_IS_VIRTUALPHY(pResp) \ 1078*4e1bc9a0SAchim Leubner (((pResp)->virtualPhy_partialPathwayTimeout & SA_DISCRSP_VIRTUALPHY_BIT) == SA_DISCRSP_VIRTUALPHY_BIT) 1079*4e1bc9a0SAchim Leubner 1080*4e1bc9a0SAchim Leubner #define SA_DISCRSP_GET_ROUTINGATTRIB(pResp) \ 1081*4e1bc9a0SAchim Leubner ((pResp)->routingAttribute & 0x0F) 1082*4e1bc9a0SAchim Leubner 1083*4e1bc9a0SAchim Leubner /**************************************************************** 1084*4e1bc9a0SAchim Leubner * report route table request 1085*4e1bc9a0SAchim Leubner ****************************************************************/ 1086*4e1bc9a0SAchim Leubner typedef struct agsaSmpReqReportRouteTable_s 1087*4e1bc9a0SAchim Leubner { 1088*4e1bc9a0SAchim Leubner bit8 reserved1[2]; 1089*4e1bc9a0SAchim Leubner bit8 expanderRouteIndex16[20]; 1090*4e1bc9a0SAchim Leubner bit8 reserved2; 1091*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1092*4e1bc9a0SAchim Leubner bit8 reserved3[2]; 1093*4e1bc9a0SAchim Leubner } agsaSmpReqReportRouteTable_t; 1094*4e1bc9a0SAchim Leubner 1095*4e1bc9a0SAchim Leubner /**************************************************************** 1096*4e1bc9a0SAchim Leubner * report route response 1097*4e1bc9a0SAchim Leubner ****************************************************************/ 1098*4e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportRouteTable_s 1099*4e1bc9a0SAchim Leubner { 1100*4e1bc9a0SAchim Leubner bit8 reserved1[2]; 1101*4e1bc9a0SAchim Leubner bit8 expanderRouteIndex16[2]; 1102*4e1bc9a0SAchim Leubner bit8 reserved2; 1103*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1104*4e1bc9a0SAchim Leubner bit8 reserved3[2]; 1105*4e1bc9a0SAchim Leubner bit8 disabled; 1106*4e1bc9a0SAchim Leubner /* B7 : expander route entry disabled */ 1107*4e1bc9a0SAchim Leubner /* B6-0 : reserved */ 1108*4e1bc9a0SAchim Leubner bit8 reserved5[3]; 1109*4e1bc9a0SAchim Leubner bit8 routedSasAddressHi32[4]; 1110*4e1bc9a0SAchim Leubner bit8 routedSasAddressLo32[4]; 1111*4e1bc9a0SAchim Leubner bit8 reserved6[16]; 1112*4e1bc9a0SAchim Leubner } agsaSmpRespReportRouteTable_t; 1113*4e1bc9a0SAchim Leubner 1114*4e1bc9a0SAchim Leubner /**************************************************************** 1115*4e1bc9a0SAchim Leubner * configure route information request 1116*4e1bc9a0SAchim Leubner ****************************************************************/ 1117*4e1bc9a0SAchim Leubner typedef struct agsaSmpReqConfigureRouteInformation_s 1118*4e1bc9a0SAchim Leubner { 1119*4e1bc9a0SAchim Leubner bit8 reserved1[2]; 1120*4e1bc9a0SAchim Leubner bit8 expanderRouteIndex[2]; 1121*4e1bc9a0SAchim Leubner bit8 reserved2; 1122*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1123*4e1bc9a0SAchim Leubner bit8 reserved3[2]; 1124*4e1bc9a0SAchim Leubner bit8 disabledBit_reserved4; 1125*4e1bc9a0SAchim Leubner bit8 reserved5[3]; 1126*4e1bc9a0SAchim Leubner bit8 routedSasAddressHi[4]; 1127*4e1bc9a0SAchim Leubner bit8 routedSasAddressLo[4]; 1128*4e1bc9a0SAchim Leubner bit8 reserved6[16]; 1129*4e1bc9a0SAchim Leubner } agsaSmpReqConfigureRouteInformation_t; 1130*4e1bc9a0SAchim Leubner 1131*4e1bc9a0SAchim Leubner /**************************************************************** 1132*4e1bc9a0SAchim Leubner * report Phy Sata request 1133*4e1bc9a0SAchim Leubner ****************************************************************/ 1134*4e1bc9a0SAchim Leubner typedef struct agsaSmpReqReportPhySata_s 1135*4e1bc9a0SAchim Leubner { 1136*4e1bc9a0SAchim Leubner bit8 reserved1[4]; 1137*4e1bc9a0SAchim Leubner bit8 reserved2; 1138*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1139*4e1bc9a0SAchim Leubner bit8 reserved3[2]; 1140*4e1bc9a0SAchim Leubner } agsaSmpReqReportPhySata_t; 1141*4e1bc9a0SAchim Leubner 1142*4e1bc9a0SAchim Leubner /**************************************************************** 1143*4e1bc9a0SAchim Leubner * report Phy Sata response 1144*4e1bc9a0SAchim Leubner ****************************************************************/ 1145*4e1bc9a0SAchim Leubner typedef struct agsaSmpRespReportPhySata_s 1146*4e1bc9a0SAchim Leubner { 1147*4e1bc9a0SAchim Leubner bit8 reserved1[4]; 1148*4e1bc9a0SAchim Leubner bit8 reserved2; 1149*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1150*4e1bc9a0SAchim Leubner bit8 reserved3; 1151*4e1bc9a0SAchim Leubner bit8 affiliations_sup_valid; 1152*4e1bc9a0SAchim Leubner /* b7-2 : reserved */ 1153*4e1bc9a0SAchim Leubner /* b1 : Affiliations supported */ 1154*4e1bc9a0SAchim Leubner /* b0 : Affiliation valid */ 1155*4e1bc9a0SAchim Leubner bit8 reserved5[4]; 1156*4e1bc9a0SAchim Leubner bit8 stpSasAddressHi[4]; 1157*4e1bc9a0SAchim Leubner bit8 stpSasAddressLo[4]; 1158*4e1bc9a0SAchim Leubner bit8 regDevToHostFis[20]; 1159*4e1bc9a0SAchim Leubner bit8 reserved6[4]; 1160*4e1bc9a0SAchim Leubner bit8 affiliatedStpInitiatorSasAddressHi[4]; 1161*4e1bc9a0SAchim Leubner bit8 affiliatedStpInitiatorSasAddressLo[4]; 1162*4e1bc9a0SAchim Leubner } agsaSmpRespReportPhySata_t; 1163*4e1bc9a0SAchim Leubner 1164*4e1bc9a0SAchim Leubner /**************************************************************** 1165*4e1bc9a0SAchim Leubner * Phy Control request 1166*4e1bc9a0SAchim Leubner ****************************************************************/ 1167*4e1bc9a0SAchim Leubner typedef struct agsaSmpReqPhyControl_s 1168*4e1bc9a0SAchim Leubner { 1169*4e1bc9a0SAchim Leubner bit8 reserved1[4]; 1170*4e1bc9a0SAchim Leubner bit8 reserved2; 1171*4e1bc9a0SAchim Leubner bit8 phyIdentifier; 1172*4e1bc9a0SAchim Leubner bit8 phyOperation; 1173*4e1bc9a0SAchim Leubner bit8 updatePartialPathwayTOValue; 1174*4e1bc9a0SAchim Leubner /* b7-1 : reserved */ 1175*4e1bc9a0SAchim Leubner /* b0 : update partial pathway timeout value */ 1176*4e1bc9a0SAchim Leubner bit8 reserved3[20]; 1177*4e1bc9a0SAchim Leubner bit8 programmedMinPhysicalLinkRate; 1178*4e1bc9a0SAchim Leubner /* b7-4 : programmed Minimum Physical Link Rate*/ 1179*4e1bc9a0SAchim Leubner /* b3-0 : reserved */ 1180*4e1bc9a0SAchim Leubner bit8 programmedMaxPhysicalLinkRate; 1181*4e1bc9a0SAchim Leubner /* b7-4 : programmed Maximum Physical Link Rate*/ 1182*4e1bc9a0SAchim Leubner /* b3-0 : reserved */ 1183*4e1bc9a0SAchim Leubner bit8 reserved4[2]; 1184*4e1bc9a0SAchim Leubner bit8 partialPathwayTOValue; 1185*4e1bc9a0SAchim Leubner /* b7-4 : reserved */ 1186*4e1bc9a0SAchim Leubner /* b3-0 : partial Pathway TO Value */ 1187*4e1bc9a0SAchim Leubner bit8 reserved5[3]; 1188*4e1bc9a0SAchim Leubner } agsaSmpReqPhyControl_t; 1189*4e1bc9a0SAchim Leubner 1190*4e1bc9a0SAchim Leubner 1191*4e1bc9a0SAchim Leubner 1192*4e1bc9a0SAchim Leubner 1193*4e1bc9a0SAchim Leubner #endif /*__SASPEC_H__ */ 1194