Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-2.6-microblaze.git] / include / scsi / scsi_proto.h
index 07d65c1..843106e 100644 (file)
@@ -10,6 +10,7 @@
 #ifndef _SCSI_PROTO_H_
 #define _SCSI_PROTO_H_
 
+#include <linux/build_bug.h>
 #include <linux/types.h>
 
 /*
 #define        SAI_READ_CAPACITY_16  0x10
 #define SAI_GET_LBA_STATUS    0x12
 #define SAI_REPORT_REFERRALS  0x13
+#define SAI_GET_STREAM_STATUS 0x16
 /* values for maintenance in */
 #define MI_REPORT_IDENTIFYING_INFORMATION 0x05
 #define MI_REPORT_TARGET_PGS  0x0a
@@ -275,6 +277,82 @@ 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
+       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);
+
+/* SCSI stream status descriptor */
+struct scsi_stream_status {
+#if defined(__BIG_ENDIAN)
+       u8 perm: 1;
+       u8 reserved1: 7;
+#elif defined(__LITTLE_ENDIAN)
+       u8 reserved1: 7;
+       u8 perm: 1;
+#else
+#error
+#endif
+       u8 reserved2;
+       __be16 stream_identifier;
+#if defined(__BIG_ENDIAN)
+       u8 reserved3: 2;
+       u8 rel_lifetime: 6;
+#elif defined(__LITTLE_ENDIAN)
+       u8 rel_lifetime: 6;
+       u8 reserved3: 2;
+#else
+#error
+#endif
+       u8 reserved4[3];
+};
+
+static_assert(sizeof(struct scsi_stream_status) == 8);
+
+/* GET STREAM STATUS parameter data */
+struct scsi_stream_status_header {
+       __be32 len;     /* length in bytes of stream_status[] array. */
+       u16 reserved;
+       __be16 number_of_open_streams;
+       DECLARE_FLEX_ARRAY(struct scsi_stream_status, stream_status);
+};
+
+static_assert(sizeof(struct scsi_stream_status_header) == 8);
+
 /* SPC asymmetric access states */
 #define SCSI_ACCESS_STATE_OPTIMAL     0x00
 #define SCSI_ACCESS_STATE_ACTIVE      0x01