struct lun_map {
__u8 id:5,
chan:3;
__u8 lun;
};
typedef struct emul_pp {
__u8 p_code:6,
null:1,
p_save:1;
__u8 p_length;
__u16 cylinder;
__u8 heads;
__u8 sectors;
__u8 null2;
__u8 s_lunmap:4,
ems:1;
__u16 drive_type; /* In Little Endian ! */
struct lun_map lunmap[4];
}emulpp;
/* Log Sense pages */
typedef struct log_sheader {
__u8 page_code,
reserved;
__u16 length;
}logsh;
/* Log Sense Statistics */
typedef struct read_command_statistics {
__u16 code; /* 0x01 */
__u8 flags;
__u8 length; /* 0x24 */
__u32 h_commands,
uncached,
la_cmds,
la_blks,
la_hits,
missed,
hits,
seq_la_blks,
seq_la_hits;
}r_cmd_stat;
typedef struct write_command_statistics {
__u16 code; /* 0x03 */
__u8 flags;
__u8 length; /* 0x28 */
__u32 h_commands,
uncached,
thru,
bypass,
soft_err,
hits,
b_idle,
b_activ,
b_blks,
b_blks_clean;
}w_cmd_stat;
typedef struct host_command_statistics {
__u16 code; /* 0x02, 0x04 */
__u8 flags;
__u8 length; /* 0x30 */
__u32 sizes[12];
}hst_cmd_stat;
typedef struct physical_command_statistics {
__u16 code; /* 0x06, 0x07 */
__u8 flags;
__u8 length; /* 0x34 */
__u32 sizes[13];
}phy_cmd_stat;
typedef struct misc_device_statistics {
__u16 code; /* 0x05 */
__u8 flags;
__u8 length; /* 0x10 */
__u32 disconnect,
pass_thru,
sg_commands,
stripe_boundary_crosses;
}msc_stats;
/* Configuration Pages */
typedef struct controller_configuration {
__u16 code; /* 0x01 */
__u8 flags;
__u8 length; /* 0x02 */
__u8 intt:1,
sec:1,
csh:1,
key:1,
tmr:1,
srs:1,
nvr:1;
__u8 interrupt;
}coco;
typedef struct controller_hardware_errors {
__u16 code; /* 0x02 */
__u8 flags;
__u8 length; /* 0x02 */
__u8 unused:1,
per:1;
__u8 interrupt;
}coher;
typedef struct memory_map {
__u16 code; /* 0x03, 0x04 */
__u8 flags;
__u8 length; /* 0x04 */
__u32 memory_map;
}mema;
typedef struct scsi_transfer {
__u16 code; /* 0x05 */
__u8 flags;
__u8 length; /* 0x04 */
__u8 offset,
period;
__u16 speed;
}scsitrans;
typedef struct scsi_modes {
__u16 code; /* 0x06 */
__u8 flags;
__u8 length; /* 0x02 */
__u8 que:1,
cdis:1,
wtru:1,
dasd:1,
ncr:1,
awre:1;
__u8 reserved;
}scsimod;
typedef struct host_bus {
__u16 code; /* 0x07 */
__u8 flags;
__u8 length; /* 0x02 */
__u8 speed:6,
pci:1,
eisa:1;
__u8 reserved;
}hobu;
typedef struct scsi_bus {
__u16 code; /* 0x08 */
__u8 flags;
__u8 length; /* 0x02 */
__u8 speed:4,
res:1,
ext:1,
wide:1,
dif:1;
__u8 busnum;
}scbu;
typedef struct board_type {
__u16 code; /* 0x09 */
__u8 flags;
__u8 length; /* 0x04 */
__u8 unused:1,
cmi:1,
dmi:1,
cm4k:1,
cm4:1,
dm4k:1,
dm4:1,
hba:1;
__u8 cpu_type,
cpu_speed;
__u8 sx1:1,
sx2:1,
unused2:4,
alrm:1,
srom:1;
}boty;
typedef struct memory_config {
__u16 code; /* 0x0a */
__u8 flags;
__u8 length; /* 0x04 */
__u8 banksize[4];
}memco;
typedef struct firmware_info {
__u16 code; /* 0x0b */
__u8 flags;
__u8 length; /* 0x04 */
__u8 dnld:1,
bs528:1,
fmt:1,
fw528:1;
__u8 unused1,
fw_type,
unused;
}firm;
typedef struct subsystem_info {
__u16 code; /* 0x0c */
__u8 flags;
__u8 length; /* 0x02 */
__u8 shlf:1,
swap:1,
noss:1;
__u8 reserved;
}subinf;
typedef struct per_channel_info {
__u16 code; /* 0x0d */
__u8 flags;
__u8 length; /* 0x02 */
__u8 channel;
__u8 shlf:1,
swap:1,
noss:1,
srs:1,
que:1,
ext:1,
wide:1,
diff:1;
}pcinf;
typedef struct array_limits {
__u16 code; /* 0x0e */
__u8 flags;
__u8 length; /* 0x04 */
__u8 max_groups,
raid0_drv,
raid35_drv,
unused;
}arrlim;
/*
* Overrides for Emacs so that we follow Linus's tabbing style.
* Emacs will notice this stuff at the end of the file and automatically
* adjust the settings for this buffer only. This must remain at the end
* of the file.
* ---------------------------------------------------------------------------
* Local variables:
* c-indent-level: 4
* c-brace-imaginary-offset: 0
* c-brace-offset: -4
* c-argdecl-indent: 4
* c-label-offset: -4
* c-continued-statement-offset: 4
* c-continued-brace-offset: 0
* indent-tabs-mode: nil
* tab-width: 8
* End:
*/