#ifndef _SYS_SCSI_IMPL_COMMANDS_H
#define _SYS_SCSI_IMPL_COMMANDS_H
#ifdef __cplusplus
extern "C" {
#endif
#define CDB_SIZE CDB_GROUP5
#define SCSI_CDB_SIZE CDB_GROUP4
union scsi_cdb {
struct {
uchar_t cmd;
#if defined(_BIT_FIELDS_LTOH)
uchar_t tag :5;
uchar_t lun :3;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t lun :3,
tag :5;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
union {
uchar_t scsi[SCSI_CDB_SIZE-2];
#define scc_cmd cdb_un.cmd
#define scc_lun cdb_un.lun
#define g0_addr2 cdb_un.tag
#define g0_addr1 cdb_un.sg.g0.addr1
#define g0_addr0 cdb_un.sg.g0.addr0
#define g0_count0 cdb_un.sg.g0.count0
#define g0_vu_1 cdb_un.sg.g0.vu_57
#define g0_vu_0 cdb_un.sg.g0.vu_56
#define g0_naca cdb_un.sg.g0.naca
#define g0_flag cdb_un.sg.g0.flag
#define g0_link cdb_un.sg.g0.link
#define t_code cdb_un.tag
#define high_count cdb_un.sg.g0.addr1
#define mid_count cdb_un.sg.g0.addr0
#define low_count cdb_un.sg.g0.count0
struct scsi_g0 {
uchar_t addr1;
uchar_t addr0;
uchar_t count0;
#if defined(_BIT_FIELDS_LTOH)
uchar_t link :1;
uchar_t flag :1;
uchar_t naca :1;
uchar_t rsvd :3;
uchar_t vu_56 :1;
uchar_t vu_57 :1;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t vu_57 :1;
uchar_t vu_56 :1;
uchar_t rsvd :3;
uchar_t naca :1;
uchar_t flag :1;
uchar_t link :1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
} g0;
#define g1_reladdr cdb_un.tag
#define g1_rsvd0 cdb_un.sg.g1.rsvd1
#define g1_addr3 cdb_un.sg.g1.addr3
#define g1_addr2 cdb_un.sg.g1.addr2
#define g1_addr1 cdb_un.sg.g1.addr1
#define g1_addr0 cdb_un.sg.g1.addr0
#define g1_count1 cdb_un.sg.g1.count1
#define g1_count0 cdb_un.sg.g1.count0
#define g1_vu_1 cdb_un.sg.g1.vu_97
#define g1_vu_0 cdb_un.sg.g1.vu_96
#define g1_naca cdb_un.sg.g1.naca
#define g1_flag cdb_un.sg.g1.flag
#define g1_link cdb_un.sg.g1.link
struct scsi_g1 {
uchar_t addr3;
uchar_t addr2;
uchar_t addr1;
uchar_t addr0;
uchar_t rsvd1;
uchar_t count1;
uchar_t count0;
#if defined(_BIT_FIELDS_LTOH)
uchar_t link :1;
uchar_t flag :1;
uchar_t naca :1;
uchar_t rsvd0 :3;
uchar_t vu_96 :1;
uchar_t vu_97 :1;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t vu_97 :1;
uchar_t vu_96 :1;
uchar_t rsvd0 :3;
uchar_t naca :1;
uchar_t flag :1;
uchar_t link :1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
} g1;
#define g4_reladdr cdb_un.tag
#define g4_addr3 cdb_un.sg.g4.addr3
#define g4_addr2 cdb_un.sg.g4.addr2
#define g4_addr1 cdb_un.sg.g4.addr1
#define g4_addr0 cdb_un.sg.g4.addr0
#define g4_addtl_cdb_data3 cdb_un.sg.g4.addtl_cdb_data3
#define g4_addtl_cdb_data2 cdb_un.sg.g4.addtl_cdb_data2
#define g4_addtl_cdb_data1 cdb_un.sg.g4.addtl_cdb_data1
#define g4_addtl_cdb_data0 cdb_un.sg.g4.addtl_cdb_data0
#define g4_count3 cdb_un.sg.g4.count3
#define g4_count2 cdb_un.sg.g4.count2
#define g4_count1 cdb_un.sg.g4.count1
#define g4_count0 cdb_un.sg.g4.count0
#define g4_rsvd0 cdb_un.sg.g4.rsvd1
#define g4_vu_1 cdb_un.sg.g4.vu_157
#define g4_vu_0 cdb_un.sg.g4.vu_156
#define g4_naca cdb_un.sg.g4.naca
#define g4_flag cdb_un.sg.g4.flag
#define g4_link cdb_un.sg.g4.link
struct scsi_g4 {
uchar_t addr3;
uchar_t addr2;
uchar_t addr1;
uchar_t addr0;
uchar_t addtl_cdb_data3;
uchar_t addtl_cdb_data2;
uchar_t addtl_cdb_data1;
uchar_t addtl_cdb_data0;
uchar_t count3;
uchar_t count2;
uchar_t count1;
uchar_t count0;
uchar_t rsvd1;
#if defined(_BIT_FIELDS_LTOH)
uchar_t link :1;
uchar_t flag :1;
uchar_t naca :1;
uchar_t rsvd0 :3;
uchar_t vu_156 :1;
uchar_t vu_157 :1;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t vu_157 :1;
uchar_t vu_156 :1;
uchar_t rsvd0 :3;
uchar_t naca :1;
uchar_t flag :1;
uchar_t link :1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
} g4;
#define scc5_reladdr cdb_un.tag
#define scc5_addr3 cdb_un.sg.g5.addr3
#define scc5_addr2 cdb_un.sg.g5.addr2
#define scc5_addr1 cdb_un.sg.g5.addr1
#define scc5_addr0 cdb_un.sg.g5.addr0
#define scc5_count3 cdb_un.sg.g5.count3
#define scc5_count2 cdb_un.sg.g5.count2
#define scc5_count1 cdb_un.sg.g5.count1
#define scc5_count0 cdb_un.sg.g5.count0
#define scc5_rsvd0 cdb_un.sg.g5.rsvd1
#define scc5_vu_1 cdb_un.sg.g5.v117
#define scc5_vu_0 cdb_un.sg.g5.v116
#define scc5_naca cdb_un.sg.g5.naca
#define scc5_flag cdb_un.sg.g5.flag
#define scc5_link cdb_un.sg.g5.link
struct scsi_g5 {
uchar_t addr3;
uchar_t addr2;
uchar_t addr1;
uchar_t addr0;
uchar_t count3;
uchar_t count2;
uchar_t count1;
uchar_t count0;
uchar_t rsvd1;
#if defined(_BIT_FIELDS_LTOH)
uchar_t link :1;
uchar_t flag :1;
uchar_t naca :1;
uchar_t rsvd0 :3;
uchar_t vu_116 :1;
uchar_t vu_117 :1;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t vu_117 :1;
uchar_t vu_116 :1;
uchar_t rsvd0 :3;
uchar_t naca :1;
uchar_t flag :1;
uchar_t link :1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
} g5;
}sg;
} cdb_un;
uchar_t cdb_opaque[SCSI_CDB_SIZE];
uint_t cdb_long[SCSI_CDB_SIZE / sizeof (uint_t)];
};
#define SCSI_READ16(Sr16_Addr) \
(((uint16_t)*((uint8_t *)(Sr16_Addr)) << 8) | \
((uint16_t)*((uint8_t *)(Sr16_Addr)+1)))
#define SCSI_READ24(Sr32_Addr) \
(((uint32_t)*((uint8_t *)(Sr32_Addr)) << 16) | \
((uint32_t)*((uint8_t *)(Sr32_Addr)+1) << 8) | \
((uint32_t)*((uint8_t *)(Sr32_Addr)+2)))
#define SCSI_READ32(Sr32_Addr) \
(((uint32_t)*((uint8_t *)(Sr32_Addr)) << 24) | \
((uint32_t)*((uint8_t *)(Sr32_Addr)+1) << 16) | \
((uint32_t)*((uint8_t *)(Sr32_Addr)+2) << 8) | \
((uint32_t)*((uint8_t *)(Sr32_Addr)+3)))
#define SCSI_READ40(Sr64_Addr) \
(((uint64_t)*((uint8_t *)(Sr64_Addr)) << 32) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+1) << 24) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+2) << 16) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+3) << 8) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+4)))
#define SCSI_READ48(Sr64_Addr) \
(((uint64_t)*((uint8_t *)(Sr64_Addr)) << 40) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+1) << 32) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+2) << 24) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+3) << 16) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+4) << 8) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+5)))
#define SCSI_READ64(Sr64_Addr) \
(((uint64_t)*((uint8_t *)(Sr64_Addr)) << 56) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+1) << 48) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+2) << 40) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+3) << 32) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+4) << 24) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+5) << 16) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+6) << 8) | \
((uint64_t)*((uint8_t *)(Sr64_Addr)+7)))
#define SCSI_WRITE16(Sr16_Addr, Sr16_Val) \
*((uint8_t *)(Sr16_Addr)) = (((uint16_t)(Sr16_Val) >> 8) & 0xff), \
*((uint8_t *)(Sr16_Addr)+1) = ((uint16_t)(Sr16_Val) & 0xff)
#define SCSI_WRITE24(Sr24_Addr, Sr24_Val) \
SCSI_WRITE16((Sr24_Addr), ((Sr24_Val) & 0xffff00) >> 8), \
*((uint8_t *)(Sr24_Addr)+2) = ((uint8_t)((Sr24_Val) & 0xff))
#define SCSI_WRITE32(Sr32_Addr, Sr32_Val) \
*(uint8_t *)(Sr32_Addr) = (((uint32_t)(Sr32_Val) >> 24) & 0xff), \
*((uint8_t *)(Sr32_Addr)+1) = \
(((uint32_t)(Sr32_Val) >> 16) & 0xff), \
*((uint8_t *)(Sr32_Addr)+2) = (((uint32_t)(Sr32_Val) >> 8) & 0xff), \
*((uint8_t *)(Sr32_Addr)+3) = (((uint32_t)(Sr32_Val)) & 0xff)
#define SCSI_WRITE40(Sr40_Addr, Sr40_Val) \
SCSI_WRITE32((Sr40_Addr), ((Sr40_Val) & 0xffffffff00ULL) >> 8), \
*((uint8_t *)(Sr40_Addr)+4) = ((uint8_t)(Sr40_Val) & 0xff)
#define SCSI_WRITE48(Sr48_Addr, Sr40_Val) \
SCSI_WRITE32((Sr48_Addr), ((Sr48_Val) & 0xffffffff0000ULL) >> 16), \
SCSI_WRITE16((uint8_t *)(Sr48_Addr)+4, (Sr40_Val) & 0xffff)
#define SCSI_WRITE64(Sr64_Addr, Sr64_Val) \
*(uint8_t *)(Sr64_Addr) = (((uint64_t)(Sr64_Val) >> 56) & 0xff), \
*((uint8_t *)(Sr64_Addr)+1) = \
(((uint64_t)(Sr64_Val) >> 48) & 0xff), \
*((uint8_t *)(Sr64_Addr)+2) = \
(((uint64_t)(Sr64_Val) >> 40) & 0xff), \
*((uint8_t *)(Sr64_Addr)+3) = \
(((uint64_t)(Sr64_Val) >> 32) & 0xff), \
*((uint8_t *)(Sr64_Addr)+4) = \
(((uint64_t)(Sr64_Val) >> 24) & 0xff), \
*((uint8_t *)(Sr64_Addr)+5) = \
(((uint64_t)(Sr64_Val) >> 16) & 0xff), \
*((uint8_t *)(Sr64_Addr)+6) = \
(((uint64_t)(Sr64_Val) >> 8) & 0xff), \
*((uint8_t *)(Sr64_Addr)+7) = (((uint64_t)(Sr64_Val)) & 0xff)
#define SCSI_MK8(ms, ls) \
(((uint8_t)(ms) << 4) | (uint8_t)ls)
#define SCSI_MK12_4_8(ms, ls) \
(((uint16_t)(ms) << 8) | (uint16_t)(ls))
#define SCSI_MK12_8_4(ms, ls) \
(((uint16_t)(ms) << 4) | (uint16_t)(ls))
#define SCSI_MK16_4_8_4(hi, mid, lo) \
(((uint16_t)(hi) << 12) | ((uint16_t)(mid) << 4) | (uint16_t)(lo))
#define SCSI_MK20_4_16(ms, ls) \
(((uint32_t)(ms) << 16) | ((uint32_t)(ls)))
#define SCSI_MK20_16_4(ms, ls) \
(((uint32_t)(ms) << 4) | ((uint32_t)(ls)))
#define SCSI_MK24_4_16_4(hi, mid, lo) \
(((uint32_t)(hi) << 20) | ((uint32_t)(mid) << 4) | (uint32_t)(lo))
#define SCSI_MK36_4_32(ms, ls) \
(((uint64_t)(ms) << 32) | (uint64_t)(ls))
#define SCSI_MK36_32_4(ms, ls) \
(((uint64_t)(ms) << 4) | (uint64_t)(ls))
#define GETCMD(cdb) ((cdb)->scc_cmd & 0x1F)
#define GETGROUP(cdb) (CDB_GROUPID((cdb)->scc_cmd))
#define FORMG0COUNT(cdb, cnt) (cdb)->g0_count0 = (cnt)
#define FORMG0ADDR(cdb, addr) (cdb)->g0_addr2 = (addr) >> 16; \
(cdb)->g0_addr1 = ((addr) >> 8) & 0xFF; \
(cdb)->g0_addr0 = (addr) & 0xFF
#define GETG0COUNT(cdb) (cdb)->g0_count0
#define GETG0ADDR(cdb) ((((cdb)->g0_addr2 & 0x1F) << 16) + \
((cdb)->g0_addr1 << 8) + ((cdb)->g0_addr0))
#define GETG0TAG(cdb) ((cdb)->g0_addr2)
#define FORMG0COUNT_S(cdb, cnt) (cdb)->high_count = (cnt) >> 16; \
(cdb)->mid_count = ((cnt) >> 8) & 0xFF; \
(cdb)->low_count = (cnt) & 0xFF
#define FORMG1COUNT(cdb, cnt) (cdb)->g1_count1 = ((cnt) >> 8); \
(cdb)->g1_count0 = (cnt) & 0xFF
#define FORMG1ADDR(cdb, addr) (cdb)->g1_addr3 = (addr) >> 24; \
(cdb)->g1_addr2 = ((addr) >> 16) & 0xFF; \
(cdb)->g1_addr1 = ((addr) >> 8) & 0xFF; \
(cdb)->g1_addr0 = (addr) & 0xFF
#define GETG1COUNT(cdb) (((cdb)->g1_count1 << 8) + ((cdb)->g1_count0))
#define GETG1ADDR(cdb) (((cdb)->g1_addr3 << 24) + \
((cdb)->g1_addr2 << 16) + \
((cdb)->g1_addr1 << 8) + \
((cdb)->g1_addr0))
#define GETG1TAG(cdb) (cdb)->g1_reladdr
#define FORMG4COUNT(cdb, cnt) (cdb)->g4_count3 = ((cnt) >> 24); \
(cdb)->g4_count2 = ((cnt) >> 16) & 0xFF; \
(cdb)->g4_count1 = ((cnt) >> 8) & 0xFF; \
(cdb)->g4_count0 = (cnt) & 0xFF
#define FORMG4LONGADDR(cdb, addr) (cdb)->g4_addr3 = (addr) >> 56; \
(cdb)->g4_addr2 = \
((addr) >> 48) & 0xFF; \
(cdb)->g4_addr1 = \
((addr) >> 40) & 0xFF; \
(cdb)->g4_addr0 = \
((addr) >> 32) & 0xFF; \
(cdb)->g4_addtl_cdb_data3 = \
((addr) >> 24) & 0xFF; \
(cdb)->g4_addtl_cdb_data2 = \
((addr) >> 16) & 0xFF; \
(cdb)->g4_addtl_cdb_data1 = \
((addr) >> 8) & 0xFF; \
(cdb)->g4_addtl_cdb_data0 = \
(addr) & 0xFF
#define GETG4COUNT(cdb) (((cdb)->g4_count3 << 24) + \
((cdb)->g4_count2 << 16) + \
((cdb)->g4_count1 << 8) + \
((cdb)->g4_count0))
#define GETG4LONGADDR(cdb) (((diskaddr_t)(cdb)->g4_addr3 << 56) + \
((diskaddr_t)(cdb)->g4_addr2 << 48) + \
((diskaddr_t)(cdb)->g4_addr1 << 40) + \
((diskaddr_t)(cdb)->g4_addr0 << 32) + \
((diskaddr_t)(cdb)->g4_addtl_cdb_data3 << 24) + \
((diskaddr_t)(cdb)->g4_addtl_cdb_data2 << 16) + \
((diskaddr_t)(cdb)->g4_addtl_cdb_data1 << 8) + \
((diskaddr_t)(cdb)->g4_addtl_cdb_data0))
#define FORMG4ADDR(cdb, addr) (cdb)->g4_addr3 = (addr) >> 24; \
(cdb)->g4_addr2 = ((addr) >> 16) & 0xFF; \
(cdb)->g4_addr1 = ((addr) >> 8) & 0xFF; \
(cdb)->g4_addr0 = (addr) & 0xFF
#define FORMG4ADDTL(cdb, addtl_cdb_data) (cdb)->g4_addtl_cdb_data3 = \
(addtl_cdb_data) >> 24; \
(cdb)->g4_addtl_cdb_data2 = \
((addtl_cdb_data) >> 16) & 0xFF; \
(cdb)->g4_addtl_cdb_data1 = \
((addtl_cdb_data) >> 8) & 0xFF; \
(cdb)->g4_addtl_cdb_data0 = \
(addtl_cdb_data) & 0xFF
#define GETG4ADDR(cdb) ((cdb)->g4_addr3 << 24) + \
((cdb)->g4_addr2 << 16) + \
((cdb)->g4_addr1 << 8) + \
((cdb)->g4_addr0)
#define GETG4ADDRTL(cdb) (((cdb)->g4_addtl_cdb_data3 << 24) + \
((cdb)->g4_addtl_cdb_data2 << 16) + \
((cdb)->g4_addtl_cdb_data1 << 8) + \
(cdb)->g4_addtl_cdb_data0)
#define GETG4TAG(cdb) (cdb)->g4_reladdr
#define FORMG5COUNT(cdb, cnt) (cdb)->scc5_count3 = ((cnt) >> 24); \
(cdb)->scc5_count2 = ((cnt) >> 16) & 0xFF; \
(cdb)->scc5_count1 = ((cnt) >> 8) & 0xFF; \
(cdb)->scc5_count0 = (cnt) & 0xFF
#define FORMG5ADDR(cdb, addr) (cdb)->scc5_addr3 = (addr) >> 24; \
(cdb)->scc5_addr2 = ((addr) >> 16) & 0xFF; \
(cdb)->scc5_addr1 = ((addr) >> 8) & 0xFF; \
(cdb)->scc5_addr0 = (addr) & 0xFF
#define GETG5ADDR(cdb) ((cdb)->scc5_addr3 << 24) + \
((cdb)->scc5_addr2 << 16) + \
((cdb)->scc5_addr1 << 8) + \
((cdb)->scc5_addr0)
#define GETG5COUNT(cdb) ((cdb)->scc5_count3 << 24) + \
((cdb)->scc5_count2 << 16) + \
((cdb)->scc5_count1 << 8) + \
((cdb)->scc5_count0)
#define GETG5TAG(cdb) (cdb)->scc5_reladdr
#define MAKECOM_COMMON(pktp, devp, flag, cmd) \
(pktp)->pkt_address = (devp)->sd_address, \
(pktp)->pkt_flags = (flag), \
((union scsi_cdb *)(pktp)->pkt_cdbp)->scc_cmd = (cmd), \
((union scsi_cdb *)(pktp)->pkt_cdbp)->scc_lun = \
(pktp)->pkt_address.a_lun
#define MAKECOM_G0(pktp, devp, flag, cmd, addr, cnt) \
MAKECOM_COMMON((pktp), (devp), (flag), (cmd)), \
FORMG0ADDR(((union scsi_cdb *)(pktp)->pkt_cdbp), (addr)), \
FORMG0COUNT(((union scsi_cdb *)(pktp)->pkt_cdbp), (cnt))
#define MAKECOM_G0_S(pktp, devp, flag, cmd, cnt, fixbit) \
MAKECOM_COMMON((pktp), (devp), (flag), (cmd)), \
FORMG0COUNT_S(((union scsi_cdb *)(pktp)->pkt_cdbp), (cnt)), \
((union scsi_cdb *)(pktp)->pkt_cdbp)->t_code = (fixbit)
#define MAKECOM_G1(pktp, devp, flag, cmd, addr, cnt) \
MAKECOM_COMMON((pktp), (devp), (flag), (cmd)), \
FORMG1ADDR(((union scsi_cdb *)(pktp)->pkt_cdbp), (addr)), \
FORMG1COUNT(((union scsi_cdb *)(pktp)->pkt_cdbp), (cnt))
#define MAKECOM_G5(pktp, devp, flag, cmd, addr, cnt) \
MAKECOM_COMMON((pktp), (devp), (flag), (cmd)), \
FORMG5ADDR(((union scsi_cdb *)(pktp)->pkt_cdbp), (addr)), \
FORMG5COUNT(((union scsi_cdb *)(pktp)->pkt_cdbp), (cnt))
#define fmt_parm_bits g0_addr2
#define fmt_interleave g0_count0
#define defect_list_descrip g1_addr3
#define FPB_BFI 0x04
#define FPB_CMPLT 0x08
#define FPB_DATA 0x10
#define DLD_MAN_DEF_LIST 0x10
#define DLD_GROWN_DEF_LIST 0x08
#define DLD_BLOCK_FORMAT 0x00
#define DLD_BFI_FORMAT 0x04
#define DLD_PS_FORMAT 0x05
#define CDB_FLAG_NACA 0x04
#define RDEF_ALL 0
#define RDEF_MANUF 1
#define RDEF_CKLEN 2
#define ST506_NDEFECT 127
#define ESDI_NDEFECT ST506_NDEFECT
struct scsi_bfi_defect {
unsigned cyl : 24;
unsigned head : 8;
int bytes_from_index;
};
struct scsi_format_params {
ushort_t reserved;
ushort_t length;
struct scsi_bfi_defect list[ESDI_NDEFECT];
};
struct scsi_defect_hdr {
uchar_t reserved;
uchar_t descriptor;
ushort_t length;
};
struct scsi_defect_list {
uchar_t reserved;
uchar_t descriptor;
ushort_t length;
struct scsi_bfi_defect list[ESDI_NDEFECT];
};
struct scsi_reassign_blk {
ushort_t reserved;
ushort_t length;
uint_t defect;
};
struct scsi_capacity {
uint_t capacity;
uint_t lbasize;
};
struct scsi_capacity_16 {
uint64_t sc_capacity;
uint_t sc_lbasize;
#if defined(_BIT_FIELDS_LTOH)
uchar_t sc_rto_en :1;
uchar_t sc_prot_en :1;
uchar_t sc_rsvd0 :6;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t sc_rsvd0 :6;
uchar_t sc_prot_en :1;
uchar_t sc_rto_en :1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
uchar_t sc_rsvd1[19];
};
#ifdef _KERNEL
extern void makecom_g0(struct scsi_pkt *pkt, struct scsi_device *devp,
int flag, int cmd, int addr, int cnt);
extern void makecom_g0_s(struct scsi_pkt *pkt, struct scsi_device *devp,
int flag, int cmd, int cnt, int fixbit);
extern void makecom_g1(struct scsi_pkt *pkt, struct scsi_device *devp,
int flag, int cmd, int addr, int cnt);
extern void makecom_g5(struct scsi_pkt *pkt, struct scsi_device *devp,
int flag, int cmd, int addr, int cnt);
extern int scsi_setup_cdb(union scsi_cdb *cdbp, uchar_t cmd, uint_t addr,
uint_t cnt, uint_t addtl_cdb_data);
#endif
#ifdef __cplusplus
}
#endif
#endif