void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s, VirtIOSCSIReq *req)

{

    VirtIODevice *vdev = (VirtIODevice *)s;

    uint32_t type;

    int r = 0;



    if (iov_to_buf(req->elem.out_sg, req->elem.out_num, 0,

                &type, sizeof(type)) < sizeof(type)) {

        virtio_scsi_bad_req();

        return;

    }



    virtio_tswap32s(vdev, &type);

    if (type == VIRTIO_SCSI_T_TMF) {

        if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlTMFReq),

                    sizeof(VirtIOSCSICtrlTMFResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            r = virtio_scsi_do_tmf(s, req);

        }



    } else if (type == VIRTIO_SCSI_T_AN_QUERY ||

               type == VIRTIO_SCSI_T_AN_SUBSCRIBE) {

        if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlANReq),

                    sizeof(VirtIOSCSICtrlANResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            req->resp.an.event_actual = 0;

            req->resp.an.response = VIRTIO_SCSI_S_OK;

        }

    }

    if (r == 0) {

        virtio_scsi_complete_req(req);

    } else {

        assert(r == -EINPROGRESS);

    }

}

void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s, VirtIOSCSIReq *req)

{

    VirtIODevice *vdev = (VirtIODevice *)s;

    uint32_t type;

    int r = 0;



    if (iov_to_buf(req->elem.out_sg, req->elem.out_num, 0,

                &type, sizeof(type)) < sizeof(type)) {

        virtio_scsi_bad_req();

        return;

    }



    virtio_tswap32s(vdev, &type);

    if (type == VIRTIO_SCSI_T_TMF) {

        if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlTMFReq),

                    sizeof(VirtIOSCSICtrlTMFResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            r = virtio_scsi_do_tmf(s, req);

        }



    } else if (type == VIRTIO_SCSI_T_AN_QUERY ||

               type == VIRTIO_SCSI_T_AN_SUBSCRIBE) {

        if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlANReq),

                    sizeof(VirtIOSCSICtrlANResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            req->resp.an.event_actual = 0;

            req->resp.an.response = VIRTIO_SCSI_S_OK;

        }

    }

    if (r == 0) {

        virtio_scsi_complete_req(req);

    } else {

        assert(r == -EINPROGRESS);

    }

}

void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s, VirtIOSCSIReq *req)
void FUNC_0(VirtIOSCSI *VAR_0, VirtIOSCSIReq *VAR_1)

{

    VirtIODevice *vdev = (VirtIODevice *)VAR_0;

    uint32_t type;

    int VAR_2 = 0;



    if (iov_to_buf(VAR_1->elem.out_sg, VAR_1->elem.out_num, 0,

                &type, sizeof(type)) < sizeof(type)) {

        virtio_scsi_bad_req();

        return;

    }



    virtio_tswap32s(vdev, &type);

    if (type == VIRTIO_SCSI_T_TMF) {

        if (virtio_scsi_parse_req(VAR_1, sizeof(VirtIOSCSICtrlTMFReq),

                    sizeof(VirtIOSCSICtrlTMFResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            VAR_2 = virtio_scsi_do_tmf(VAR_0, VAR_1);

        }



    } else if (type == VIRTIO_SCSI_T_AN_QUERY ||

               type == VIRTIO_SCSI_T_AN_SUBSCRIBE) {

        if (virtio_scsi_parse_req(VAR_1, sizeof(VirtIOSCSICtrlANReq),

                    sizeof(VirtIOSCSICtrlANResp)) < 0) {

            virtio_scsi_bad_req();

        } else {

            VAR_1->resp.an.event_actual = 0;

            VAR_1->resp.an.response = VIRTIO_SCSI_S_OK;

        }

    }

    if (VAR_2 == 0) {

        virtio_scsi_complete_req(VAR_1);

    } else {

        assert(VAR_2 == -EINPROGRESS);

    }

}

void FUNC_0(VirtIOSCSI *VAR_0, VirtIOSCSIReq *VAR_1)
{ VirtIODevice *vdev = (VirtIODevice *)VAR_0; uint32_t type; int VAR_2 = 0; if (iov_to_buf(VAR_1->elem.out_sg, VAR_1->elem.out_num, 0,
&type, sizeof(type)) < sizeof(type)) { virtio_scsi_bad_req(); return; } virtio_tswap32s(vdev, &type); if (type == VIRTIO_SCSI_T_TMF) { if (virtio_scsi_parse_req(VAR_1, sizeof(VirtIOSCSICtrlTMFReq),
sizeof(VirtIOSCSICtrlTMFResp)) < 0) { virtio_scsi_bad_req(); } else { VAR_2 = virtio_scsi_do_tmf(VAR_0, VAR_1); } } else if (type == VIRTIO_SCSI_T_AN_QUERY || type == VIRTIO_SCSI_T_AN_SUBSCRIBE) { if (virtio_scsi_parse_req(VAR_1, sizeof(VirtIOSCSICtrlANReq),
sizeof(VirtIOSCSICtrlANResp)) < 0) { virtio_scsi_bad_req(); } else { VAR_1->resp.an.event_actual = 0; VAR_1->resp.an.response = VIRTIO_SCSI_S_OK; } } if (VAR_2 == 0) { virtio_scsi_complete_req(VAR_1); } else { assert(VAR_2 == -EINPROGRESS); } }