> Prepare for adding code that will fill in and parse this data structure. > > Cc: Martin K. Petersen <martin.petersen@xxxxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > include/scsi/scsi_proto.h | 40 > +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > > diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h > index 07d65c1f59db..4e3691cb67da 100644 > --- a/include/scsi/scsi_proto.h > +++ b/include/scsi/scsi_proto.h > @@ -10,6 +10,7 @@ > #ifndef _SCSI_PROTO_H_ > #define _SCSI_PROTO_H_ > > +#include <linux/build_bug.h> > #include <linux/types.h> > > /* > @@ -275,6 +276,45 @@ struct scsi_lun { > __u8 scsi_lun[8]; > }; > > +/* SBC-5 IO advice hints group descriptor */ > +struct scsi_io_group_descriptor { > +#if defined(__BIG_ENDIAN) > + u8 io_advice_hints_mode: 2; > + u8 reserved1: 3; > + u8 st_enble: 1; > + u8 cs_enble: 1; > + u8 ic_enable: 1; > +#elif defined(__LITTLE_ENDIAN) > + u8 ic_enable: 1; > + u8 cs_enble: 1; > + u8 st_enble: 1; > + u8 reserved1: 3; > + u8 io_advice_hints_mode: 2; > +#else > +#error > +#endif Anything pass byte offset 0 is irrelevant for constrained streams. Why do we need that further drill down of the descriptor structure? Thanks, Avri > + u8 reserved2[3]; > + /* Logical block markup descriptor */ > +#if defined(__BIG_ENDIAN) > + u8 acdlu: 1; > + u8 reserved3: 1; > + u8 rlbsr: 2; > + u8 lbm_descriptor_type: 4; > +#elif defined(__LITTLE_ENDIAN) > + u8 lbm_descriptor_type: 4; > + u8 rlbsr: 2; > + u8 reserved3: 1; > + u8 acdlu: 1; > +#else > +#error > +#endif > + u8 params[2]; > + u8 reserved4; > + u8 reserved5[8]; > +}; > + > +static_assert(sizeof(struct scsi_io_group_descriptor) == 16); > + > /* SPC asymmetric access states */ > #define SCSI_ACCESS_STATE_OPTIMAL 0x00 > #define SCSI_ACCESS_STATE_ACTIVE 0x01