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