/* automatically generated by rust-bindgen 0.63.0 */

pub const VIRTIO_SCSI_CDB_DEFAULT_SIZE: u32 = 32;
pub const VIRTIO_SCSI_SENSE_DEFAULT_SIZE: u32 = 96;
pub const VIRTIO_SCSI_CDB_SIZE: u32 = 32;
pub const VIRTIO_SCSI_SENSE_SIZE: u32 = 96;
pub const VIRTIO_SCSI_F_INOUT: u32 = 0;
pub const VIRTIO_SCSI_F_HOTPLUG: u32 = 1;
pub const VIRTIO_SCSI_F_CHANGE: u32 = 2;
pub const VIRTIO_SCSI_F_T10_PI: u32 = 3;
pub const VIRTIO_SCSI_S_OK: u32 = 0;
pub const VIRTIO_SCSI_S_OVERRUN: u32 = 1;
pub const VIRTIO_SCSI_S_ABORTED: u32 = 2;
pub const VIRTIO_SCSI_S_BAD_TARGET: u32 = 3;
pub const VIRTIO_SCSI_S_RESET: u32 = 4;
pub const VIRTIO_SCSI_S_BUSY: u32 = 5;
pub const VIRTIO_SCSI_S_TRANSPORT_FAILURE: u32 = 6;
pub const VIRTIO_SCSI_S_TARGET_FAILURE: u32 = 7;
pub const VIRTIO_SCSI_S_NEXUS_FAILURE: u32 = 8;
pub const VIRTIO_SCSI_S_FAILURE: u32 = 9;
pub const VIRTIO_SCSI_S_FUNCTION_SUCCEEDED: u32 = 10;
pub const VIRTIO_SCSI_S_FUNCTION_REJECTED: u32 = 11;
pub const VIRTIO_SCSI_S_INCORRECT_LUN: u32 = 12;
pub const VIRTIO_SCSI_T_TMF: u32 = 0;
pub const VIRTIO_SCSI_T_AN_QUERY: u32 = 1;
pub const VIRTIO_SCSI_T_AN_SUBSCRIBE: u32 = 2;
pub const VIRTIO_SCSI_T_TMF_ABORT_TASK: u32 = 0;
pub const VIRTIO_SCSI_T_TMF_ABORT_TASK_SET: u32 = 1;
pub const VIRTIO_SCSI_T_TMF_CLEAR_ACA: u32 = 2;
pub const VIRTIO_SCSI_T_TMF_CLEAR_TASK_SET: u32 = 3;
pub const VIRTIO_SCSI_T_TMF_I_T_NEXUS_RESET: u32 = 4;
pub const VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET: u32 = 5;
pub const VIRTIO_SCSI_T_TMF_QUERY_TASK: u32 = 6;
pub const VIRTIO_SCSI_T_TMF_QUERY_TASK_SET: u32 = 7;
pub const VIRTIO_SCSI_T_EVENTS_MISSED: u32 = 2147483648;
pub const VIRTIO_SCSI_T_NO_EVENT: u32 = 0;
pub const VIRTIO_SCSI_T_TRANSPORT_RESET: u32 = 1;
pub const VIRTIO_SCSI_T_ASYNC_NOTIFY: u32 = 2;
pub const VIRTIO_SCSI_T_PARAM_CHANGE: u32 = 3;
pub const VIRTIO_SCSI_EVT_RESET_HARD: u32 = 0;
pub const VIRTIO_SCSI_EVT_RESET_RESCAN: u32 = 1;
pub const VIRTIO_SCSI_EVT_RESET_REMOVED: u32 = 2;
pub const VIRTIO_SCSI_S_SIMPLE: u32 = 0;
pub const VIRTIO_SCSI_S_ORDERED: u32 = 1;
pub const VIRTIO_SCSI_S_HEAD: u32 = 2;
pub const VIRTIO_SCSI_S_ACA: u32 = 3;
pub type __u8 = ::std::os::raw::c_uchar;
pub type __u16 = ::std::os::raw::c_ushort;
pub type __u32 = ::std::os::raw::c_uint;
pub type __u64 = ::std::os::raw::c_ulonglong;
pub type __virtio16 = __u16;
pub type __virtio32 = __u32;
pub type __virtio64 = __u64;
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_cmd_req {
    pub lun: [__u8; 8usize],
    pub tag: __virtio64,
    pub task_attr: __u8,
    pub prio: __u8,
    pub crn: __u8,
    pub cdb: [__u8; 32usize],
}
#[test]
fn bindgen_test_layout_virtio_scsi_cmd_req() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_cmd_req> = ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_cmd_req>(),
        51usize,
        concat!("Size of: ", stringify!(virtio_scsi_cmd_req))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_cmd_req>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_cmd_req))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).lun) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
        8usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(tag)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).task_attr) as usize - ptr as usize },
        16usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(task_attr)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).prio) as usize - ptr as usize },
        17usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(prio)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).crn) as usize - ptr as usize },
        18usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(crn)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).cdb) as usize - ptr as usize },
        19usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req),
            "::",
            stringify!(cdb)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_cmd_req_pi {
    pub lun: [__u8; 8usize],
    pub tag: __virtio64,
    pub task_attr: __u8,
    pub prio: __u8,
    pub crn: __u8,
    pub pi_bytesout: __virtio32,
    pub pi_bytesin: __virtio32,
    pub cdb: [__u8; 32usize],
}
#[test]
fn bindgen_test_layout_virtio_scsi_cmd_req_pi() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_cmd_req_pi> =
        ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_cmd_req_pi>(),
        59usize,
        concat!("Size of: ", stringify!(virtio_scsi_cmd_req_pi))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_cmd_req_pi>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_cmd_req_pi))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).lun) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
        8usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(tag)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).task_attr) as usize - ptr as usize },
        16usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(task_attr)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).prio) as usize - ptr as usize },
        17usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(prio)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).crn) as usize - ptr as usize },
        18usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(crn)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).pi_bytesout) as usize - ptr as usize },
        19usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(pi_bytesout)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).pi_bytesin) as usize - ptr as usize },
        23usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(pi_bytesin)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).cdb) as usize - ptr as usize },
        27usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_req_pi),
            "::",
            stringify!(cdb)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct virtio_scsi_cmd_resp {
    pub sense_len: __virtio32,
    pub resid: __virtio32,
    pub status_qualifier: __virtio16,
    pub status: __u8,
    pub response: __u8,
    pub sense: [__u8; 96usize],
}
#[test]
fn bindgen_test_layout_virtio_scsi_cmd_resp() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_cmd_resp> = ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_cmd_resp>(),
        108usize,
        concat!("Size of: ", stringify!(virtio_scsi_cmd_resp))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_cmd_resp>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_cmd_resp))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).sense_len) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(sense_len)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).resid) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(resid)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).status_qualifier) as usize - ptr as usize },
        8usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(status_qualifier)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).status) as usize - ptr as usize },
        10usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(status)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).response) as usize - ptr as usize },
        11usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(response)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).sense) as usize - ptr as usize },
        12usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_cmd_resp),
            "::",
            stringify!(sense)
        )
    );
}
impl Default for virtio_scsi_cmd_resp {
    fn default() -> Self {
        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_ctrl_tmf_req {
    pub type_: __virtio32,
    pub subtype: __virtio32,
    pub lun: [__u8; 8usize],
    pub tag: __virtio64,
}
#[test]
fn bindgen_test_layout_virtio_scsi_ctrl_tmf_req() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_ctrl_tmf_req> =
        ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_ctrl_tmf_req>(),
        24usize,
        concat!("Size of: ", stringify!(virtio_scsi_ctrl_tmf_req))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_ctrl_tmf_req>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_ctrl_tmf_req))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).type_) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_tmf_req),
            "::",
            stringify!(type_)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).subtype) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_tmf_req),
            "::",
            stringify!(subtype)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).lun) as usize - ptr as usize },
        8usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_tmf_req),
            "::",
            stringify!(lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
        16usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_tmf_req),
            "::",
            stringify!(tag)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_ctrl_tmf_resp {
    pub response: __u8,
}
#[test]
fn bindgen_test_layout_virtio_scsi_ctrl_tmf_resp() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_ctrl_tmf_resp> =
        ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_ctrl_tmf_resp>(),
        1usize,
        concat!("Size of: ", stringify!(virtio_scsi_ctrl_tmf_resp))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_ctrl_tmf_resp>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_ctrl_tmf_resp))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).response) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_tmf_resp),
            "::",
            stringify!(response)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_ctrl_an_req {
    pub type_: __virtio32,
    pub lun: [__u8; 8usize],
    pub event_requested: __virtio32,
}
#[test]
fn bindgen_test_layout_virtio_scsi_ctrl_an_req() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_ctrl_an_req> =
        ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_ctrl_an_req>(),
        16usize,
        concat!("Size of: ", stringify!(virtio_scsi_ctrl_an_req))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_ctrl_an_req>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_ctrl_an_req))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).type_) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_an_req),
            "::",
            stringify!(type_)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).lun) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_an_req),
            "::",
            stringify!(lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).event_requested) as usize - ptr as usize },
        12usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_an_req),
            "::",
            stringify!(event_requested)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_ctrl_an_resp {
    pub event_actual: __virtio32,
    pub response: __u8,
}
#[test]
fn bindgen_test_layout_virtio_scsi_ctrl_an_resp() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_ctrl_an_resp> =
        ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_ctrl_an_resp>(),
        5usize,
        concat!("Size of: ", stringify!(virtio_scsi_ctrl_an_resp))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_ctrl_an_resp>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_ctrl_an_resp))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).event_actual) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_an_resp),
            "::",
            stringify!(event_actual)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).response) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_ctrl_an_resp),
            "::",
            stringify!(response)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_event {
    pub event: __virtio32,
    pub lun: [__u8; 8usize],
    pub reason: __virtio32,
}
#[test]
fn bindgen_test_layout_virtio_scsi_event() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_event> = ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_event>(),
        16usize,
        concat!("Size of: ", stringify!(virtio_scsi_event))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_event>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_event))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).event) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_event),
            "::",
            stringify!(event)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).lun) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_event),
            "::",
            stringify!(lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).reason) as usize - ptr as usize },
        12usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_event),
            "::",
            stringify!(reason)
        )
    );
}
#[repr(C, packed)]
#[derive(Debug, Default, Copy, Clone, PartialEq)]
pub struct virtio_scsi_config {
    pub num_queues: __virtio32,
    pub seg_max: __virtio32,
    pub max_sectors: __virtio32,
    pub cmd_per_lun: __virtio32,
    pub event_info_size: __virtio32,
    pub sense_size: __virtio32,
    pub cdb_size: __virtio32,
    pub max_channel: __virtio16,
    pub max_target: __virtio16,
    pub max_lun: __virtio32,
}
#[test]
fn bindgen_test_layout_virtio_scsi_config() {
    const UNINIT: ::std::mem::MaybeUninit<virtio_scsi_config> = ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<virtio_scsi_config>(),
        36usize,
        concat!("Size of: ", stringify!(virtio_scsi_config))
    );
    assert_eq!(
        ::std::mem::align_of::<virtio_scsi_config>(),
        1usize,
        concat!("Alignment of ", stringify!(virtio_scsi_config))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).num_queues) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(num_queues)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).seg_max) as usize - ptr as usize },
        4usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(seg_max)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).max_sectors) as usize - ptr as usize },
        8usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(max_sectors)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).cmd_per_lun) as usize - ptr as usize },
        12usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(cmd_per_lun)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).event_info_size) as usize - ptr as usize },
        16usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(event_info_size)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).sense_size) as usize - ptr as usize },
        20usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(sense_size)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).cdb_size) as usize - ptr as usize },
        24usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(cdb_size)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).max_channel) as usize - ptr as usize },
        28usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(max_channel)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).max_target) as usize - ptr as usize },
        30usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(max_target)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).max_lun) as usize - ptr as usize },
        32usize,
        concat!(
            "Offset of field: ",
            stringify!(virtio_scsi_config),
            "::",
            stringify!(max_lun)
        )
    );
}
