---
name: "libnvme_mi_mi_xfer-libnvme3"
section: "2"
platform: "linux"
package: "nvme-cli"
version: "3.2-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libnvme_mi_mi_xfer-libnvme3"
---

# libnvme\_mi\_mi\_xfer-libnvme3(2)

Raw mi transfer interface.

## NAME

libnvme\_mi\_mi\_xfer - Raw mi transfer interface.

## SYNOPSIS

**int libnvme\_mi\_mi\_xfer** **(struct libnvme\_mi\_ep \*ep** *,* **struct nvme\_mi\_mi\_req\_hdr \*mi\_req** *,* **size\_t req\_data\_size** *,* **struct nvme\_mi\_mi\_resp\_hdr \*mi\_resp** *,* **size\_t \*resp\_data\_size** *);*

## ARGUMENTS

- ep

  endpoint to send the MI command to

- mi\_req

  request data

- req\_data\_size

  size of request data payload

- mi\_resp

  buffer for response data

- resp\_data\_size

  size of response data buffer, updated to received size

## DESCRIPTION

Performs an arbitrary NVMe MI command, using the provided request data, in *mi\_req*. The size of the request data \*payload\* is specified in *req\_data\_size* - this does not include the standard header length (so a header-only request would have a size of 0). Note that the Management Request Doublewords are considered part of the header data.

On success, response data is stored in *mi\_resp*, which has an optional appended payload buffer of *resp\_data\_size* bytes. The actual payload size transferred will be stored in *resp\_data\_size*. This size does not include the MI response header, so 0 represents no payload.

See: *struct nvme\_mi\_mi\_req\_hdr* and *struct nvme\_mi\_mi\_resp\_hdr*.

## RETURN

The nvme command status if a response was received (see *enum nvme\_status\_field*) or negative error code otherwise.
