#ifndef _G_SCSI_H
#define _G_SCSI_H
#ifdef __cplusplus
extern "C" {
#endif
#define MODEPAGE_GEOMETRY 0x04
#define SCMD_SYNC_CACHE 0x35
#define SCMD_LOG_SENSE 0x4d
#define SCMD_PERS_RESERV_IN 0x5e
#define SCMD_PERS_RESERV_OUT 0x5f
#define MAX_MODE_SENSE_LEN 0xffff
typedef struct mode_header_10_struct {
ushort_t length;
uchar_t medium_type;
uchar_t device_specific;
ushort_t rsvdl;
ushort_t bdesc_length;
} Mode_header_10;
typedef struct mode_page_04_struct {
struct mode_page mode_page;
uchar_t num_cylinders_hi;
uchar_t num_cylinders_mid;
uchar_t num_cylinders_lo;
uchar_t num_heads;
uchar_t write_precomp_hi;
uchar_t write_precomp_mid;
uchar_t write_precomp_lo;
uchar_t reduced_write_i_hi;
uchar_t reduced_write_i_mid;
uchar_t reduced_write_i_lo;
ushort_t step_rate;
uchar_t landing_zone_hi;
uchar_t landing_zone_mid;
uchar_t landing_zone_lo;
#if defined(_BIT_FIELDS_LTOH)
uchar_t rpl : 2,
: 6;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t : 6,
rpl : 2;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
uchar_t rot_offset;
uchar_t : 8;
ushort_t rpm;
uchar_t : 8;
uchar_t : 8;
} Mp_04;
typedef struct mode_page_01_struct {
struct mode_page mode_page;
#if defined(_BIT_FIELDS_LTOH)
uchar_t dcr : 1,
dte : 1,
per : 1,
eec : 1,
rc : 1,
tb : 1,
arre : 1,
awre : 1;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t awre : 1,
arre : 1,
tb : 1,
rc : 1,
eec : 1,
per : 1,
dte : 1,
dcr : 1;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
uchar_t read_retry_count;
uchar_t correction_span;
uchar_t head_offset_count;
uchar_t strobe_offset_count;
uchar_t : 8;
uchar_t write_retry_count;
uchar_t : 8;
ushort_t recovery_time_limit;
} Mp_01;
struct my_mode_caching {
struct mode_page mode_page;
#if defined(_BIT_FIELDS_LTOH)
uchar_t rcd : 1,
mf : 1,
wce : 1,
: 5;
uchar_t write_ret_prio : 4,
dmd_rd_ret_prio : 4;
#elif defined(_BIT_FIELDS_HTOL)
uchar_t : 5,
wce : 1,
mf : 1,
rcd : 1;
uchar_t dmd_rd_ret_prio : 4,
write_ret_prio : 4;
#else
#error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
#endif
ushort_t pf_dsbl_trans_len;
ushort_t min_prefetch;
ushort_t max_prefetch;
ushort_t max_prefetch_ceiling;
};
typedef struct my_cdb_g0 {
unsigned char cmd;
unsigned char lba_msb;
unsigned char lba;
unsigned char lba_lsb;
unsigned char count;
unsigned char control;
}my_cdb_g0;
typedef struct {
unsigned char cmd;
unsigned char byte1;
unsigned char byte2;
unsigned char byte3;
unsigned char byte4;
unsigned char byte5;
unsigned char byte6;
unsigned char byte7;
unsigned char byte8;
unsigned char byte9;
}my_cdb_g1;
typedef struct l_inquiry80_struct {
uchar_t inq_dtype;
uchar_t inq_page_code;
uchar_t reserved;
uchar_t inq_page_len;
uchar_t inq_serial[251];
} L_inquiry80;
typedef struct l_inquiry00_struct {
uchar_t qual :3,
dtype :5;
uchar_t page_code;
uchar_t reserved;
uchar_t len;
uchar_t page_list[251];
} L_inquiry00;
#ifdef __cplusplus
}
#endif
#endif