18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * SAS structures and definitions header file
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2005 Adaptec, Inc.  All rights reserved.
68c2ecf20Sopenharmony_ci * Copyright (C) 2005 Luben Tuikov <luben_tuikov@adaptec.com>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef _SAS_H_
108c2ecf20Sopenharmony_ci#define _SAS_H_
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/types.h>
138c2ecf20Sopenharmony_ci#include <asm/byteorder.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define SAS_ADDR_SIZE        8
168c2ecf20Sopenharmony_ci#define HASHED_SAS_ADDR_SIZE 3
178c2ecf20Sopenharmony_ci#define SAS_ADDR(_sa) ((unsigned long long) be64_to_cpu(*(__be64 *)(_sa)))
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#define SMP_REQUEST             0x40
208c2ecf20Sopenharmony_ci#define SMP_RESPONSE            0x41
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#define SSP_DATA                0x01
238c2ecf20Sopenharmony_ci#define SSP_XFER_RDY            0x05
248c2ecf20Sopenharmony_ci#define SSP_COMMAND             0x06
258c2ecf20Sopenharmony_ci#define SSP_RESPONSE            0x07
268c2ecf20Sopenharmony_ci#define SSP_TASK                0x16
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#define SMP_REPORT_GENERAL       0x00
298c2ecf20Sopenharmony_ci#define SMP_REPORT_MANUF_INFO    0x01
308c2ecf20Sopenharmony_ci#define SMP_READ_GPIO_REG        0x02
318c2ecf20Sopenharmony_ci#define SMP_DISCOVER             0x10
328c2ecf20Sopenharmony_ci#define SMP_REPORT_PHY_ERR_LOG   0x11
338c2ecf20Sopenharmony_ci#define SMP_REPORT_PHY_SATA      0x12
348c2ecf20Sopenharmony_ci#define SMP_REPORT_ROUTE_INFO    0x13
358c2ecf20Sopenharmony_ci#define SMP_WRITE_GPIO_REG       0x82
368c2ecf20Sopenharmony_ci#define SMP_CONF_ROUTE_INFO      0x90
378c2ecf20Sopenharmony_ci#define SMP_PHY_CONTROL          0x91
388c2ecf20Sopenharmony_ci#define SMP_PHY_TEST_FUNCTION    0x92
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci#define SMP_RESP_FUNC_ACC        0x00
418c2ecf20Sopenharmony_ci#define SMP_RESP_FUNC_UNK        0x01
428c2ecf20Sopenharmony_ci#define SMP_RESP_FUNC_FAILED     0x02
438c2ecf20Sopenharmony_ci#define SMP_RESP_INV_FRM_LEN     0x03
448c2ecf20Sopenharmony_ci#define SMP_RESP_NO_PHY          0x10
458c2ecf20Sopenharmony_ci#define SMP_RESP_NO_INDEX        0x11
468c2ecf20Sopenharmony_ci#define SMP_RESP_PHY_NO_SATA     0x12
478c2ecf20Sopenharmony_ci#define SMP_RESP_PHY_UNK_OP      0x13
488c2ecf20Sopenharmony_ci#define SMP_RESP_PHY_UNK_TESTF   0x14
498c2ecf20Sopenharmony_ci#define SMP_RESP_PHY_TEST_INPROG 0x15
508c2ecf20Sopenharmony_ci#define SMP_RESP_PHY_VACANT      0x16
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci/* SAM TMFs */
538c2ecf20Sopenharmony_ci#define TMF_ABORT_TASK      0x01
548c2ecf20Sopenharmony_ci#define TMF_ABORT_TASK_SET  0x02
558c2ecf20Sopenharmony_ci#define TMF_CLEAR_TASK_SET  0x04
568c2ecf20Sopenharmony_ci#define TMF_LU_RESET        0x08
578c2ecf20Sopenharmony_ci#define TMF_CLEAR_ACA       0x40
588c2ecf20Sopenharmony_ci#define TMF_QUERY_TASK      0x80
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci/* SAS TMF responses */
618c2ecf20Sopenharmony_ci#define TMF_RESP_FUNC_COMPLETE   0x00
628c2ecf20Sopenharmony_ci#define TMF_RESP_INVALID_FRAME   0x02
638c2ecf20Sopenharmony_ci#define TMF_RESP_FUNC_ESUPP      0x04
648c2ecf20Sopenharmony_ci#define TMF_RESP_FUNC_FAILED     0x05
658c2ecf20Sopenharmony_ci#define TMF_RESP_FUNC_SUCC       0x08
668c2ecf20Sopenharmony_ci#define TMF_RESP_NO_LUN          0x09
678c2ecf20Sopenharmony_ci#define TMF_RESP_OVERLAPPED_TAG  0x0A
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_cienum sas_oob_mode {
708c2ecf20Sopenharmony_ci	OOB_NOT_CONNECTED,
718c2ecf20Sopenharmony_ci	SATA_OOB_MODE,
728c2ecf20Sopenharmony_ci	SAS_OOB_MODE
738c2ecf20Sopenharmony_ci};
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci/* See sas_discover.c if you plan on changing these */
768c2ecf20Sopenharmony_cienum sas_device_type {
778c2ecf20Sopenharmony_ci	/* these are SAS protocol defined (attached device type field) */
788c2ecf20Sopenharmony_ci	SAS_PHY_UNUSED = 0,
798c2ecf20Sopenharmony_ci	SAS_END_DEVICE = 1,
808c2ecf20Sopenharmony_ci	SAS_EDGE_EXPANDER_DEVICE = 2,
818c2ecf20Sopenharmony_ci	SAS_FANOUT_EXPANDER_DEVICE = 3,
828c2ecf20Sopenharmony_ci	/* these are internal to libsas */
838c2ecf20Sopenharmony_ci	SAS_HA = 4,
848c2ecf20Sopenharmony_ci	SAS_SATA_DEV = 5,
858c2ecf20Sopenharmony_ci	SAS_SATA_PM = 7,
868c2ecf20Sopenharmony_ci	SAS_SATA_PM_PORT = 8,
878c2ecf20Sopenharmony_ci	SAS_SATA_PENDING = 9,
888c2ecf20Sopenharmony_ci};
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_cienum sas_protocol {
918c2ecf20Sopenharmony_ci	SAS_PROTOCOL_NONE		= 0,
928c2ecf20Sopenharmony_ci	SAS_PROTOCOL_SATA		= 0x01,
938c2ecf20Sopenharmony_ci	SAS_PROTOCOL_SMP		= 0x02,
948c2ecf20Sopenharmony_ci	SAS_PROTOCOL_STP		= 0x04,
958c2ecf20Sopenharmony_ci	SAS_PROTOCOL_SSP		= 0x08,
968c2ecf20Sopenharmony_ci	SAS_PROTOCOL_ALL		= 0x0E,
978c2ecf20Sopenharmony_ci	SAS_PROTOCOL_STP_ALL		= SAS_PROTOCOL_STP|SAS_PROTOCOL_SATA,
988c2ecf20Sopenharmony_ci};
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci/* From the spec; local phys only */
1018c2ecf20Sopenharmony_cienum phy_func {
1028c2ecf20Sopenharmony_ci	PHY_FUNC_NOP,
1038c2ecf20Sopenharmony_ci	PHY_FUNC_LINK_RESET,		  /* Enables the phy */
1048c2ecf20Sopenharmony_ci	PHY_FUNC_HARD_RESET,
1058c2ecf20Sopenharmony_ci	PHY_FUNC_DISABLE,
1068c2ecf20Sopenharmony_ci	PHY_FUNC_CLEAR_ERROR_LOG = 5,
1078c2ecf20Sopenharmony_ci	PHY_FUNC_CLEAR_AFFIL,
1088c2ecf20Sopenharmony_ci	PHY_FUNC_TX_SATA_PS_SIGNAL,
1098c2ecf20Sopenharmony_ci	PHY_FUNC_RELEASE_SPINUP_HOLD = 0x10, /* LOCAL PORT ONLY! */
1108c2ecf20Sopenharmony_ci	PHY_FUNC_SET_LINK_RATE,
1118c2ecf20Sopenharmony_ci	PHY_FUNC_GET_EVENTS,
1128c2ecf20Sopenharmony_ci};
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci/* SAS LLDD would need to report only _very_few_ of those, like BROADCAST.
1158c2ecf20Sopenharmony_ci * Most of those are here for completeness.
1168c2ecf20Sopenharmony_ci */
1178c2ecf20Sopenharmony_cienum sas_prim {
1188c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_NORMAL = 1,
1198c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_R0     = 2,
1208c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_R1     = 3,
1218c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_R2     = 4,
1228c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_WC     = 5,
1238c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_WD     = 6,
1248c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_WP     = 7,
1258c2ecf20Sopenharmony_ci	SAS_PRIM_AIP_RWP    = 8,
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci	SAS_PRIM_BC_CH      = 9,
1288c2ecf20Sopenharmony_ci	SAS_PRIM_BC_RCH0    = 10,
1298c2ecf20Sopenharmony_ci	SAS_PRIM_BC_RCH1    = 11,
1308c2ecf20Sopenharmony_ci	SAS_PRIM_BC_R0      = 12,
1318c2ecf20Sopenharmony_ci	SAS_PRIM_BC_R1      = 13,
1328c2ecf20Sopenharmony_ci	SAS_PRIM_BC_R2      = 14,
1338c2ecf20Sopenharmony_ci	SAS_PRIM_BC_R3      = 15,
1348c2ecf20Sopenharmony_ci	SAS_PRIM_BC_R4      = 16,
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ci	SAS_PRIM_NOTIFY_ENSP= 17,
1378c2ecf20Sopenharmony_ci	SAS_PRIM_NOTIFY_R0  = 18,
1388c2ecf20Sopenharmony_ci	SAS_PRIM_NOTIFY_R1  = 19,
1398c2ecf20Sopenharmony_ci	SAS_PRIM_NOTIFY_R2  = 20,
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci	SAS_PRIM_CLOSE_CLAF = 21,
1428c2ecf20Sopenharmony_ci	SAS_PRIM_CLOSE_NORM = 22,
1438c2ecf20Sopenharmony_ci	SAS_PRIM_CLOSE_R0   = 23,
1448c2ecf20Sopenharmony_ci	SAS_PRIM_CLOSE_R1   = 24,
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_ci	SAS_PRIM_OPEN_RTRY  = 25,
1478c2ecf20Sopenharmony_ci	SAS_PRIM_OPEN_RJCT  = 26,
1488c2ecf20Sopenharmony_ci	SAS_PRIM_OPEN_ACPT  = 27,
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ci	SAS_PRIM_DONE       = 28,
1518c2ecf20Sopenharmony_ci	SAS_PRIM_BREAK      = 29,
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci	SATA_PRIM_DMAT      = 33,
1548c2ecf20Sopenharmony_ci	SATA_PRIM_PMNAK     = 34,
1558c2ecf20Sopenharmony_ci	SATA_PRIM_PMACK     = 35,
1568c2ecf20Sopenharmony_ci	SATA_PRIM_PMREQ_S   = 36,
1578c2ecf20Sopenharmony_ci	SATA_PRIM_PMREQ_P   = 37,
1588c2ecf20Sopenharmony_ci	SATA_SATA_R_ERR     = 38,
1598c2ecf20Sopenharmony_ci};
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_cienum sas_open_rej_reason {
1628c2ecf20Sopenharmony_ci	/* Abandon open */
1638c2ecf20Sopenharmony_ci	SAS_OREJ_UNKNOWN   = 0,
1648c2ecf20Sopenharmony_ci	SAS_OREJ_BAD_DEST  = 1,
1658c2ecf20Sopenharmony_ci	SAS_OREJ_CONN_RATE = 2,
1668c2ecf20Sopenharmony_ci	SAS_OREJ_EPROTO    = 3,
1678c2ecf20Sopenharmony_ci	SAS_OREJ_RESV_AB0  = 4,
1688c2ecf20Sopenharmony_ci	SAS_OREJ_RESV_AB1  = 5,
1698c2ecf20Sopenharmony_ci	SAS_OREJ_RESV_AB2  = 6,
1708c2ecf20Sopenharmony_ci	SAS_OREJ_RESV_AB3  = 7,
1718c2ecf20Sopenharmony_ci	SAS_OREJ_WRONG_DEST= 8,
1728c2ecf20Sopenharmony_ci	SAS_OREJ_STP_NORES = 9,
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ci	/* Retry open */
1758c2ecf20Sopenharmony_ci	SAS_OREJ_NO_DEST   = 10,
1768c2ecf20Sopenharmony_ci	SAS_OREJ_PATH_BLOCKED = 11,
1778c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_CONT0 = 12,
1788c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_CONT1 = 13,
1798c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_INIT0 = 14,
1808c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_INIT1 = 15,
1818c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_STOP0 = 16,
1828c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_STOP1 = 17,
1838c2ecf20Sopenharmony_ci	SAS_OREJ_RSVD_RETRY = 18,
1848c2ecf20Sopenharmony_ci};
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_cienum sas_gpio_reg_type {
1878c2ecf20Sopenharmony_ci	SAS_GPIO_REG_CFG   = 0,
1888c2ecf20Sopenharmony_ci	SAS_GPIO_REG_RX    = 1,
1898c2ecf20Sopenharmony_ci	SAS_GPIO_REG_RX_GP = 2,
1908c2ecf20Sopenharmony_ci	SAS_GPIO_REG_TX    = 3,
1918c2ecf20Sopenharmony_ci	SAS_GPIO_REG_TX_GP = 4,
1928c2ecf20Sopenharmony_ci};
1938c2ecf20Sopenharmony_ci
1948c2ecf20Sopenharmony_cistruct  dev_to_host_fis {
1958c2ecf20Sopenharmony_ci	u8     fis_type;	  /* 0x34 */
1968c2ecf20Sopenharmony_ci	u8     flags;
1978c2ecf20Sopenharmony_ci	u8     status;
1988c2ecf20Sopenharmony_ci	u8     error;
1998c2ecf20Sopenharmony_ci
2008c2ecf20Sopenharmony_ci	u8     lbal;
2018c2ecf20Sopenharmony_ci	union { u8 lbam; u8 byte_count_low; };
2028c2ecf20Sopenharmony_ci	union { u8 lbah; u8 byte_count_high; };
2038c2ecf20Sopenharmony_ci	u8     device;
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_ci	u8     lbal_exp;
2068c2ecf20Sopenharmony_ci	u8     lbam_exp;
2078c2ecf20Sopenharmony_ci	u8     lbah_exp;
2088c2ecf20Sopenharmony_ci	u8     _r_a;
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci	union { u8  sector_count; u8 interrupt_reason; };
2118c2ecf20Sopenharmony_ci	u8     sector_count_exp;
2128c2ecf20Sopenharmony_ci	u8     _r_b;
2138c2ecf20Sopenharmony_ci	u8     _r_c;
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ci	u32    _r_d;
2168c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_cistruct host_to_dev_fis {
2198c2ecf20Sopenharmony_ci	u8     fis_type;	  /* 0x27 */
2208c2ecf20Sopenharmony_ci	u8     flags;
2218c2ecf20Sopenharmony_ci	u8     command;
2228c2ecf20Sopenharmony_ci	u8     features;
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci	u8     lbal;
2258c2ecf20Sopenharmony_ci	union { u8 lbam; u8 byte_count_low; };
2268c2ecf20Sopenharmony_ci	union { u8 lbah; u8 byte_count_high; };
2278c2ecf20Sopenharmony_ci	u8     device;
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ci	u8     lbal_exp;
2308c2ecf20Sopenharmony_ci	u8     lbam_exp;
2318c2ecf20Sopenharmony_ci	u8     lbah_exp;
2328c2ecf20Sopenharmony_ci	u8     features_exp;
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci	union { u8  sector_count; u8 interrupt_reason; };
2358c2ecf20Sopenharmony_ci	u8     sector_count_exp;
2368c2ecf20Sopenharmony_ci	u8     _r_a;
2378c2ecf20Sopenharmony_ci	u8     control;
2388c2ecf20Sopenharmony_ci
2398c2ecf20Sopenharmony_ci	u32    _r_b;
2408c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2418c2ecf20Sopenharmony_ci
2428c2ecf20Sopenharmony_ci/* Prefer to have code clarity over header file clarity.
2438c2ecf20Sopenharmony_ci */
2448c2ecf20Sopenharmony_ci#ifdef __LITTLE_ENDIAN_BITFIELD
2458c2ecf20Sopenharmony_cistruct sas_identify_frame {
2468c2ecf20Sopenharmony_ci	/* Byte 0 */
2478c2ecf20Sopenharmony_ci	u8  frame_type:4;
2488c2ecf20Sopenharmony_ci	u8  dev_type:3;
2498c2ecf20Sopenharmony_ci	u8  _un0:1;
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ci	/* Byte 1 */
2528c2ecf20Sopenharmony_ci	u8  _un1;
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_ci	/* Byte 2 */
2558c2ecf20Sopenharmony_ci	union {
2568c2ecf20Sopenharmony_ci		struct {
2578c2ecf20Sopenharmony_ci			u8  _un20:1;
2588c2ecf20Sopenharmony_ci			u8  smp_iport:1;
2598c2ecf20Sopenharmony_ci			u8  stp_iport:1;
2608c2ecf20Sopenharmony_ci			u8  ssp_iport:1;
2618c2ecf20Sopenharmony_ci			u8  _un247:4;
2628c2ecf20Sopenharmony_ci		};
2638c2ecf20Sopenharmony_ci		u8 initiator_bits;
2648c2ecf20Sopenharmony_ci	};
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci	/* Byte 3 */
2678c2ecf20Sopenharmony_ci	union {
2688c2ecf20Sopenharmony_ci		struct {
2698c2ecf20Sopenharmony_ci			u8  _un30:1;
2708c2ecf20Sopenharmony_ci			u8 smp_tport:1;
2718c2ecf20Sopenharmony_ci			u8 stp_tport:1;
2728c2ecf20Sopenharmony_ci			u8 ssp_tport:1;
2738c2ecf20Sopenharmony_ci			u8 _un347:4;
2748c2ecf20Sopenharmony_ci		};
2758c2ecf20Sopenharmony_ci		u8 target_bits;
2768c2ecf20Sopenharmony_ci	};
2778c2ecf20Sopenharmony_ci
2788c2ecf20Sopenharmony_ci	/* Byte 4 - 11 */
2798c2ecf20Sopenharmony_ci	u8 _un4_11[8];
2808c2ecf20Sopenharmony_ci
2818c2ecf20Sopenharmony_ci	/* Byte 12 - 19 */
2828c2ecf20Sopenharmony_ci	u8 sas_addr[SAS_ADDR_SIZE];
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci	/* Byte 20 */
2858c2ecf20Sopenharmony_ci	u8 phy_id;
2868c2ecf20Sopenharmony_ci
2878c2ecf20Sopenharmony_ci	u8 _un21_27[7];
2888c2ecf20Sopenharmony_ci
2898c2ecf20Sopenharmony_ci	__be32 crc;
2908c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_cistruct ssp_frame_hdr {
2938c2ecf20Sopenharmony_ci	u8     frame_type;
2948c2ecf20Sopenharmony_ci	u8     hashed_dest_addr[HASHED_SAS_ADDR_SIZE];
2958c2ecf20Sopenharmony_ci	u8     _r_a;
2968c2ecf20Sopenharmony_ci	u8     hashed_src_addr[HASHED_SAS_ADDR_SIZE];
2978c2ecf20Sopenharmony_ci	__be16 _r_b;
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_ci	u8     changing_data_ptr:1;
3008c2ecf20Sopenharmony_ci	u8     retransmit:1;
3018c2ecf20Sopenharmony_ci	u8     retry_data_frames:1;
3028c2ecf20Sopenharmony_ci	u8     _r_c:5;
3038c2ecf20Sopenharmony_ci
3048c2ecf20Sopenharmony_ci	u8     num_fill_bytes:2;
3058c2ecf20Sopenharmony_ci	u8     _r_d:6;
3068c2ecf20Sopenharmony_ci
3078c2ecf20Sopenharmony_ci	u32    _r_e;
3088c2ecf20Sopenharmony_ci	__be16 tag;
3098c2ecf20Sopenharmony_ci	__be16 tptt;
3108c2ecf20Sopenharmony_ci	__be32 data_offs;
3118c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3128c2ecf20Sopenharmony_ci
3138c2ecf20Sopenharmony_cistruct ssp_response_iu {
3148c2ecf20Sopenharmony_ci	u8     _r_a[10];
3158c2ecf20Sopenharmony_ci
3168c2ecf20Sopenharmony_ci	u8     datapres:2;
3178c2ecf20Sopenharmony_ci	u8     _r_b:6;
3188c2ecf20Sopenharmony_ci
3198c2ecf20Sopenharmony_ci	u8     status;
3208c2ecf20Sopenharmony_ci
3218c2ecf20Sopenharmony_ci	u32    _r_c;
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_ci	__be32 sense_data_len;
3248c2ecf20Sopenharmony_ci	__be32 response_data_len;
3258c2ecf20Sopenharmony_ci
3268c2ecf20Sopenharmony_ci	u8     resp_data[0];
3278c2ecf20Sopenharmony_ci	u8     sense_data[];
3288c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_cistruct ssp_command_iu {
3318c2ecf20Sopenharmony_ci	u8     lun[8];
3328c2ecf20Sopenharmony_ci	u8     _r_a;
3338c2ecf20Sopenharmony_ci
3348c2ecf20Sopenharmony_ci	union {
3358c2ecf20Sopenharmony_ci		struct {
3368c2ecf20Sopenharmony_ci			u8  attr:3;
3378c2ecf20Sopenharmony_ci			u8  prio:4;
3388c2ecf20Sopenharmony_ci			u8  efb:1;
3398c2ecf20Sopenharmony_ci		};
3408c2ecf20Sopenharmony_ci		u8 efb_prio_attr;
3418c2ecf20Sopenharmony_ci	};
3428c2ecf20Sopenharmony_ci
3438c2ecf20Sopenharmony_ci	u8    _r_b;
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ci	u8    _r_c:2;
3468c2ecf20Sopenharmony_ci	u8    add_cdb_len:6;
3478c2ecf20Sopenharmony_ci
3488c2ecf20Sopenharmony_ci	u8    cdb[16];
3498c2ecf20Sopenharmony_ci	u8    add_cdb[];
3508c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3518c2ecf20Sopenharmony_ci
3528c2ecf20Sopenharmony_cistruct xfer_rdy_iu {
3538c2ecf20Sopenharmony_ci	__be32 requested_offset;
3548c2ecf20Sopenharmony_ci	__be32 write_data_len;
3558c2ecf20Sopenharmony_ci	__be32 _r_a;
3568c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3578c2ecf20Sopenharmony_ci
3588c2ecf20Sopenharmony_cistruct ssp_tmf_iu {
3598c2ecf20Sopenharmony_ci	u8     lun[8];
3608c2ecf20Sopenharmony_ci	u16    _r_a;
3618c2ecf20Sopenharmony_ci	u8     tmf;
3628c2ecf20Sopenharmony_ci	u8     _r_b;
3638c2ecf20Sopenharmony_ci	__be16 tag;
3648c2ecf20Sopenharmony_ci	u8     _r_c[14];
3658c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3668c2ecf20Sopenharmony_ci
3678c2ecf20Sopenharmony_ci/* ---------- SMP ---------- */
3688c2ecf20Sopenharmony_ci
3698c2ecf20Sopenharmony_cistruct report_general_resp {
3708c2ecf20Sopenharmony_ci	__be16  change_count;
3718c2ecf20Sopenharmony_ci	__be16  route_indexes;
3728c2ecf20Sopenharmony_ci	u8      _r_a;
3738c2ecf20Sopenharmony_ci	u8      num_phys;
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ci	u8      conf_route_table:1;
3768c2ecf20Sopenharmony_ci	u8      configuring:1;
3778c2ecf20Sopenharmony_ci	u8	config_others:1;
3788c2ecf20Sopenharmony_ci	u8	orej_retry_supp:1;
3798c2ecf20Sopenharmony_ci	u8	stp_cont_awt:1;
3808c2ecf20Sopenharmony_ci	u8	self_config:1;
3818c2ecf20Sopenharmony_ci	u8	zone_config:1;
3828c2ecf20Sopenharmony_ci	u8	t2t_supp:1;
3838c2ecf20Sopenharmony_ci
3848c2ecf20Sopenharmony_ci	u8      _r_c;
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ci	u8      enclosure_logical_id[8];
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_ci	u8      _r_d[12];
3898c2ecf20Sopenharmony_ci} __attribute__ ((packed));
3908c2ecf20Sopenharmony_ci
3918c2ecf20Sopenharmony_cistruct discover_resp {
3928c2ecf20Sopenharmony_ci	u8    _r_a[5];
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_ci	u8    phy_id;
3958c2ecf20Sopenharmony_ci	__be16 _r_b;
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci	u8    _r_c:4;
3988c2ecf20Sopenharmony_ci	u8    attached_dev_type:3;
3998c2ecf20Sopenharmony_ci	u8    _r_d:1;
4008c2ecf20Sopenharmony_ci
4018c2ecf20Sopenharmony_ci	u8    linkrate:4;
4028c2ecf20Sopenharmony_ci	u8    _r_e:4;
4038c2ecf20Sopenharmony_ci
4048c2ecf20Sopenharmony_ci	u8    attached_sata_host:1;
4058c2ecf20Sopenharmony_ci	u8    iproto:3;
4068c2ecf20Sopenharmony_ci	u8    _r_f:4;
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_ci	u8    attached_sata_dev:1;
4098c2ecf20Sopenharmony_ci	u8    tproto:3;
4108c2ecf20Sopenharmony_ci	u8    _r_g:3;
4118c2ecf20Sopenharmony_ci	u8    attached_sata_ps:1;
4128c2ecf20Sopenharmony_ci
4138c2ecf20Sopenharmony_ci	u8    sas_addr[8];
4148c2ecf20Sopenharmony_ci	u8    attached_sas_addr[8];
4158c2ecf20Sopenharmony_ci	u8    attached_phy_id;
4168c2ecf20Sopenharmony_ci
4178c2ecf20Sopenharmony_ci	u8    _r_h[7];
4188c2ecf20Sopenharmony_ci
4198c2ecf20Sopenharmony_ci	u8    hmin_linkrate:4;
4208c2ecf20Sopenharmony_ci	u8    pmin_linkrate:4;
4218c2ecf20Sopenharmony_ci	u8    hmax_linkrate:4;
4228c2ecf20Sopenharmony_ci	u8    pmax_linkrate:4;
4238c2ecf20Sopenharmony_ci
4248c2ecf20Sopenharmony_ci	u8    change_count;
4258c2ecf20Sopenharmony_ci
4268c2ecf20Sopenharmony_ci	u8    pptv:4;
4278c2ecf20Sopenharmony_ci	u8    _r_i:3;
4288c2ecf20Sopenharmony_ci	u8    virtual:1;
4298c2ecf20Sopenharmony_ci
4308c2ecf20Sopenharmony_ci	u8    routing_attr:4;
4318c2ecf20Sopenharmony_ci	u8    _r_j:4;
4328c2ecf20Sopenharmony_ci
4338c2ecf20Sopenharmony_ci	u8    conn_type;
4348c2ecf20Sopenharmony_ci	u8    conn_el_index;
4358c2ecf20Sopenharmony_ci	u8    conn_phy_link;
4368c2ecf20Sopenharmony_ci
4378c2ecf20Sopenharmony_ci	u8    _r_k[8];
4388c2ecf20Sopenharmony_ci} __attribute__ ((packed));
4398c2ecf20Sopenharmony_ci
4408c2ecf20Sopenharmony_cistruct report_phy_sata_resp {
4418c2ecf20Sopenharmony_ci	u8    _r_a[5];
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ci	u8    phy_id;
4448c2ecf20Sopenharmony_ci	u8    _r_b;
4458c2ecf20Sopenharmony_ci
4468c2ecf20Sopenharmony_ci	u8    affil_valid:1;
4478c2ecf20Sopenharmony_ci	u8    affil_supp:1;
4488c2ecf20Sopenharmony_ci	u8    _r_c:6;
4498c2ecf20Sopenharmony_ci
4508c2ecf20Sopenharmony_ci	u32    _r_d;
4518c2ecf20Sopenharmony_ci
4528c2ecf20Sopenharmony_ci	u8    stp_sas_addr[8];
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_ci	struct dev_to_host_fis fis;
4558c2ecf20Sopenharmony_ci
4568c2ecf20Sopenharmony_ci	u32   _r_e;
4578c2ecf20Sopenharmony_ci
4588c2ecf20Sopenharmony_ci	u8    affil_stp_ini_addr[8];
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_ci	__be32 crc;
4618c2ecf20Sopenharmony_ci} __attribute__ ((packed));
4628c2ecf20Sopenharmony_ci
4638c2ecf20Sopenharmony_cistruct smp_resp {
4648c2ecf20Sopenharmony_ci	u8    frame_type;
4658c2ecf20Sopenharmony_ci	u8    function;
4668c2ecf20Sopenharmony_ci	u8    result;
4678c2ecf20Sopenharmony_ci	u8    reserved;
4688c2ecf20Sopenharmony_ci	union {
4698c2ecf20Sopenharmony_ci		struct report_general_resp  rg;
4708c2ecf20Sopenharmony_ci		struct discover_resp        disc;
4718c2ecf20Sopenharmony_ci		struct report_phy_sata_resp rps;
4728c2ecf20Sopenharmony_ci	};
4738c2ecf20Sopenharmony_ci} __attribute__ ((packed));
4748c2ecf20Sopenharmony_ci
4758c2ecf20Sopenharmony_ci#elif defined(__BIG_ENDIAN_BITFIELD)
4768c2ecf20Sopenharmony_cistruct sas_identify_frame {
4778c2ecf20Sopenharmony_ci	/* Byte 0 */
4788c2ecf20Sopenharmony_ci	u8  _un0:1;
4798c2ecf20Sopenharmony_ci	u8  dev_type:3;
4808c2ecf20Sopenharmony_ci	u8  frame_type:4;
4818c2ecf20Sopenharmony_ci
4828c2ecf20Sopenharmony_ci	/* Byte 1 */
4838c2ecf20Sopenharmony_ci	u8  _un1;
4848c2ecf20Sopenharmony_ci
4858c2ecf20Sopenharmony_ci	/* Byte 2 */
4868c2ecf20Sopenharmony_ci	union {
4878c2ecf20Sopenharmony_ci		struct {
4888c2ecf20Sopenharmony_ci			u8  _un247:4;
4898c2ecf20Sopenharmony_ci			u8  ssp_iport:1;
4908c2ecf20Sopenharmony_ci			u8  stp_iport:1;
4918c2ecf20Sopenharmony_ci			u8  smp_iport:1;
4928c2ecf20Sopenharmony_ci			u8  _un20:1;
4938c2ecf20Sopenharmony_ci		};
4948c2ecf20Sopenharmony_ci		u8 initiator_bits;
4958c2ecf20Sopenharmony_ci	};
4968c2ecf20Sopenharmony_ci
4978c2ecf20Sopenharmony_ci	/* Byte 3 */
4988c2ecf20Sopenharmony_ci	union {
4998c2ecf20Sopenharmony_ci		struct {
5008c2ecf20Sopenharmony_ci			u8 _un347:4;
5018c2ecf20Sopenharmony_ci			u8 ssp_tport:1;
5028c2ecf20Sopenharmony_ci			u8 stp_tport:1;
5038c2ecf20Sopenharmony_ci			u8 smp_tport:1;
5048c2ecf20Sopenharmony_ci			u8 _un30:1;
5058c2ecf20Sopenharmony_ci		};
5068c2ecf20Sopenharmony_ci		u8 target_bits;
5078c2ecf20Sopenharmony_ci	};
5088c2ecf20Sopenharmony_ci
5098c2ecf20Sopenharmony_ci	/* Byte 4 - 11 */
5108c2ecf20Sopenharmony_ci	u8 _un4_11[8];
5118c2ecf20Sopenharmony_ci
5128c2ecf20Sopenharmony_ci	/* Byte 12 - 19 */
5138c2ecf20Sopenharmony_ci	u8 sas_addr[SAS_ADDR_SIZE];
5148c2ecf20Sopenharmony_ci
5158c2ecf20Sopenharmony_ci	/* Byte 20 */
5168c2ecf20Sopenharmony_ci	u8 phy_id;
5178c2ecf20Sopenharmony_ci
5188c2ecf20Sopenharmony_ci	u8 _un21_27[7];
5198c2ecf20Sopenharmony_ci
5208c2ecf20Sopenharmony_ci	__be32 crc;
5218c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_cistruct ssp_frame_hdr {
5248c2ecf20Sopenharmony_ci	u8     frame_type;
5258c2ecf20Sopenharmony_ci	u8     hashed_dest_addr[HASHED_SAS_ADDR_SIZE];
5268c2ecf20Sopenharmony_ci	u8     _r_a;
5278c2ecf20Sopenharmony_ci	u8     hashed_src_addr[HASHED_SAS_ADDR_SIZE];
5288c2ecf20Sopenharmony_ci	__be16 _r_b;
5298c2ecf20Sopenharmony_ci
5308c2ecf20Sopenharmony_ci	u8     _r_c:5;
5318c2ecf20Sopenharmony_ci	u8     retry_data_frames:1;
5328c2ecf20Sopenharmony_ci	u8     retransmit:1;
5338c2ecf20Sopenharmony_ci	u8     changing_data_ptr:1;
5348c2ecf20Sopenharmony_ci
5358c2ecf20Sopenharmony_ci	u8     _r_d:6;
5368c2ecf20Sopenharmony_ci	u8     num_fill_bytes:2;
5378c2ecf20Sopenharmony_ci
5388c2ecf20Sopenharmony_ci	u32    _r_e;
5398c2ecf20Sopenharmony_ci	__be16 tag;
5408c2ecf20Sopenharmony_ci	__be16 tptt;
5418c2ecf20Sopenharmony_ci	__be32 data_offs;
5428c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5438c2ecf20Sopenharmony_ci
5448c2ecf20Sopenharmony_cistruct ssp_response_iu {
5458c2ecf20Sopenharmony_ci	u8     _r_a[10];
5468c2ecf20Sopenharmony_ci
5478c2ecf20Sopenharmony_ci	u8     _r_b:6;
5488c2ecf20Sopenharmony_ci	u8     datapres:2;
5498c2ecf20Sopenharmony_ci
5508c2ecf20Sopenharmony_ci	u8     status;
5518c2ecf20Sopenharmony_ci
5528c2ecf20Sopenharmony_ci	u32    _r_c;
5538c2ecf20Sopenharmony_ci
5548c2ecf20Sopenharmony_ci	__be32 sense_data_len;
5558c2ecf20Sopenharmony_ci	__be32 response_data_len;
5568c2ecf20Sopenharmony_ci
5578c2ecf20Sopenharmony_ci	u8     resp_data[0];
5588c2ecf20Sopenharmony_ci	u8     sense_data[];
5598c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5608c2ecf20Sopenharmony_ci
5618c2ecf20Sopenharmony_cistruct ssp_command_iu {
5628c2ecf20Sopenharmony_ci	u8     lun[8];
5638c2ecf20Sopenharmony_ci	u8     _r_a;
5648c2ecf20Sopenharmony_ci
5658c2ecf20Sopenharmony_ci	union {
5668c2ecf20Sopenharmony_ci		struct {
5678c2ecf20Sopenharmony_ci			u8  efb:1;
5688c2ecf20Sopenharmony_ci			u8  prio:4;
5698c2ecf20Sopenharmony_ci			u8  attr:3;
5708c2ecf20Sopenharmony_ci		};
5718c2ecf20Sopenharmony_ci		u8 efb_prio_attr;
5728c2ecf20Sopenharmony_ci	};
5738c2ecf20Sopenharmony_ci
5748c2ecf20Sopenharmony_ci	u8    _r_b;
5758c2ecf20Sopenharmony_ci
5768c2ecf20Sopenharmony_ci	u8    add_cdb_len:6;
5778c2ecf20Sopenharmony_ci	u8    _r_c:2;
5788c2ecf20Sopenharmony_ci
5798c2ecf20Sopenharmony_ci	u8    cdb[16];
5808c2ecf20Sopenharmony_ci	u8    add_cdb[];
5818c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5828c2ecf20Sopenharmony_ci
5838c2ecf20Sopenharmony_cistruct xfer_rdy_iu {
5848c2ecf20Sopenharmony_ci	__be32 requested_offset;
5858c2ecf20Sopenharmony_ci	__be32 write_data_len;
5868c2ecf20Sopenharmony_ci	__be32 _r_a;
5878c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5888c2ecf20Sopenharmony_ci
5898c2ecf20Sopenharmony_cistruct ssp_tmf_iu {
5908c2ecf20Sopenharmony_ci	u8     lun[8];
5918c2ecf20Sopenharmony_ci	u16    _r_a;
5928c2ecf20Sopenharmony_ci	u8     tmf;
5938c2ecf20Sopenharmony_ci	u8     _r_b;
5948c2ecf20Sopenharmony_ci	__be16 tag;
5958c2ecf20Sopenharmony_ci	u8     _r_c[14];
5968c2ecf20Sopenharmony_ci} __attribute__ ((packed));
5978c2ecf20Sopenharmony_ci
5988c2ecf20Sopenharmony_ci/* ---------- SMP ---------- */
5998c2ecf20Sopenharmony_ci
6008c2ecf20Sopenharmony_cistruct report_general_resp {
6018c2ecf20Sopenharmony_ci	__be16  change_count;
6028c2ecf20Sopenharmony_ci	__be16  route_indexes;
6038c2ecf20Sopenharmony_ci	u8      _r_a;
6048c2ecf20Sopenharmony_ci	u8      num_phys;
6058c2ecf20Sopenharmony_ci
6068c2ecf20Sopenharmony_ci	u8	t2t_supp:1;
6078c2ecf20Sopenharmony_ci	u8	zone_config:1;
6088c2ecf20Sopenharmony_ci	u8	self_config:1;
6098c2ecf20Sopenharmony_ci	u8	stp_cont_awt:1;
6108c2ecf20Sopenharmony_ci	u8	orej_retry_supp:1;
6118c2ecf20Sopenharmony_ci	u8	config_others:1;
6128c2ecf20Sopenharmony_ci	u8      configuring:1;
6138c2ecf20Sopenharmony_ci	u8      conf_route_table:1;
6148c2ecf20Sopenharmony_ci
6158c2ecf20Sopenharmony_ci	u8      _r_c;
6168c2ecf20Sopenharmony_ci
6178c2ecf20Sopenharmony_ci	u8      enclosure_logical_id[8];
6188c2ecf20Sopenharmony_ci
6198c2ecf20Sopenharmony_ci	u8      _r_d[12];
6208c2ecf20Sopenharmony_ci} __attribute__ ((packed));
6218c2ecf20Sopenharmony_ci
6228c2ecf20Sopenharmony_cistruct discover_resp {
6238c2ecf20Sopenharmony_ci	u8    _r_a[5];
6248c2ecf20Sopenharmony_ci
6258c2ecf20Sopenharmony_ci	u8    phy_id;
6268c2ecf20Sopenharmony_ci	__be16 _r_b;
6278c2ecf20Sopenharmony_ci
6288c2ecf20Sopenharmony_ci	u8    _r_d:1;
6298c2ecf20Sopenharmony_ci	u8    attached_dev_type:3;
6308c2ecf20Sopenharmony_ci	u8    _r_c:4;
6318c2ecf20Sopenharmony_ci
6328c2ecf20Sopenharmony_ci	u8    _r_e:4;
6338c2ecf20Sopenharmony_ci	u8    linkrate:4;
6348c2ecf20Sopenharmony_ci
6358c2ecf20Sopenharmony_ci	u8    _r_f:4;
6368c2ecf20Sopenharmony_ci	u8    iproto:3;
6378c2ecf20Sopenharmony_ci	u8    attached_sata_host:1;
6388c2ecf20Sopenharmony_ci
6398c2ecf20Sopenharmony_ci	u8    attached_sata_ps:1;
6408c2ecf20Sopenharmony_ci	u8    _r_g:3;
6418c2ecf20Sopenharmony_ci	u8    tproto:3;
6428c2ecf20Sopenharmony_ci	u8    attached_sata_dev:1;
6438c2ecf20Sopenharmony_ci
6448c2ecf20Sopenharmony_ci	u8    sas_addr[8];
6458c2ecf20Sopenharmony_ci	u8    attached_sas_addr[8];
6468c2ecf20Sopenharmony_ci	u8    attached_phy_id;
6478c2ecf20Sopenharmony_ci
6488c2ecf20Sopenharmony_ci	u8    _r_h[7];
6498c2ecf20Sopenharmony_ci
6508c2ecf20Sopenharmony_ci	u8    pmin_linkrate:4;
6518c2ecf20Sopenharmony_ci	u8    hmin_linkrate:4;
6528c2ecf20Sopenharmony_ci	u8    pmax_linkrate:4;
6538c2ecf20Sopenharmony_ci	u8    hmax_linkrate:4;
6548c2ecf20Sopenharmony_ci
6558c2ecf20Sopenharmony_ci	u8    change_count;
6568c2ecf20Sopenharmony_ci
6578c2ecf20Sopenharmony_ci	u8    virtual:1;
6588c2ecf20Sopenharmony_ci	u8    _r_i:3;
6598c2ecf20Sopenharmony_ci	u8    pptv:4;
6608c2ecf20Sopenharmony_ci
6618c2ecf20Sopenharmony_ci	u8    _r_j:4;
6628c2ecf20Sopenharmony_ci	u8    routing_attr:4;
6638c2ecf20Sopenharmony_ci
6648c2ecf20Sopenharmony_ci	u8    conn_type;
6658c2ecf20Sopenharmony_ci	u8    conn_el_index;
6668c2ecf20Sopenharmony_ci	u8    conn_phy_link;
6678c2ecf20Sopenharmony_ci
6688c2ecf20Sopenharmony_ci	u8    _r_k[8];
6698c2ecf20Sopenharmony_ci} __attribute__ ((packed));
6708c2ecf20Sopenharmony_ci
6718c2ecf20Sopenharmony_cistruct report_phy_sata_resp {
6728c2ecf20Sopenharmony_ci	u8    _r_a[5];
6738c2ecf20Sopenharmony_ci
6748c2ecf20Sopenharmony_ci	u8    phy_id;
6758c2ecf20Sopenharmony_ci	u8    _r_b;
6768c2ecf20Sopenharmony_ci
6778c2ecf20Sopenharmony_ci	u8    _r_c:6;
6788c2ecf20Sopenharmony_ci	u8    affil_supp:1;
6798c2ecf20Sopenharmony_ci	u8    affil_valid:1;
6808c2ecf20Sopenharmony_ci
6818c2ecf20Sopenharmony_ci	u32   _r_d;
6828c2ecf20Sopenharmony_ci
6838c2ecf20Sopenharmony_ci	u8    stp_sas_addr[8];
6848c2ecf20Sopenharmony_ci
6858c2ecf20Sopenharmony_ci	struct dev_to_host_fis fis;
6868c2ecf20Sopenharmony_ci
6878c2ecf20Sopenharmony_ci	u32   _r_e;
6888c2ecf20Sopenharmony_ci
6898c2ecf20Sopenharmony_ci	u8    affil_stp_ini_addr[8];
6908c2ecf20Sopenharmony_ci
6918c2ecf20Sopenharmony_ci	__be32 crc;
6928c2ecf20Sopenharmony_ci} __attribute__ ((packed));
6938c2ecf20Sopenharmony_ci
6948c2ecf20Sopenharmony_cistruct smp_resp {
6958c2ecf20Sopenharmony_ci	u8    frame_type;
6968c2ecf20Sopenharmony_ci	u8    function;
6978c2ecf20Sopenharmony_ci	u8    result;
6988c2ecf20Sopenharmony_ci	u8    reserved;
6998c2ecf20Sopenharmony_ci	union {
7008c2ecf20Sopenharmony_ci		struct report_general_resp  rg;
7018c2ecf20Sopenharmony_ci		struct discover_resp        disc;
7028c2ecf20Sopenharmony_ci		struct report_phy_sata_resp rps;
7038c2ecf20Sopenharmony_ci	};
7048c2ecf20Sopenharmony_ci} __attribute__ ((packed));
7058c2ecf20Sopenharmony_ci
7068c2ecf20Sopenharmony_ci#else
7078c2ecf20Sopenharmony_ci#error "Bitfield order not defined!"
7088c2ecf20Sopenharmony_ci#endif
7098c2ecf20Sopenharmony_ci
7108c2ecf20Sopenharmony_ci#endif /* _SAS_H_ */
711