---
name: "nvme_mi_mi_xfer"
section: "2"
platform: "linux"
package: "libnvme-dev"
version: "1.13-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nvme_mi_mi_xfer"
---

# nvme\_mi\_mi\_xfer(2)

Raw mi transfer interface.

## NAME

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

## SYNOPSIS

**int nvme\_mi\_mi\_xfer** **(nvme\_mi\_ep\_t 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 -1 with errno set otherwise..
