.TH "nvme_mi_admin_xfer" 2 "nvme_mi_admin_xfer" "February 2024" "libnvme API manual" LINUX .SH NAME nvme_mi_admin_xfer \- Raw admin transfer interface. .SH SYNOPSIS .B "int" nvme_mi_admin_xfer .BI "(nvme_mi_ctrl_t ctrl " "," .BI "struct nvme_mi_admin_req_hdr *admin_req " "," .BI "size_t req_data_size " "," .BI "struct nvme_mi_admin_resp_hdr *admin_resp " "," .BI "off_t resp_data_offset " "," .BI "size_t *resp_data_size " ");" .SH ARGUMENTS .IP "ctrl" 12 controller to send the admin command to .IP "admin_req" 12 request data .IP "req_data_size" 12 size of request data payload .IP "admin_resp" 12 buffer for response data .IP "resp_data_offset" 12 offset into request data to retrieve from controller .IP "resp_data_size" 12 size of response data buffer, updated to received size .SH "DESCRIPTION" Performs an arbitrary NVMe Admin command, using the provided request data, in \fIadmin_req\fP. The size of the request data *payload* is specified in \fIreq_data_size\fP - this does not include the standard header length (so a header-only request would have a size of 0). On success, response data is stored in \fIadmin_resp\fP, which has an optional appended payload buffer of \fIresp_data_size\fP bytes. The actual payload transferred will be stored in \fIresp_data_size\fP. These sizes do not include the Admin request header, so 0 represents no payload. As with all Admin commands, we can request partial data from the Admin Response payload, offset by \fIresp_data_offset\fP. See: \fIstruct nvme_mi_admin_req_hdr\fP and \fIstruct nvme_mi_admin_resp_hdr\fP. .SH "RETURN" The nvme command status if a response was received (see \fIenum nvme_status_field\fP) or -1 with errno set otherwise..