Utilities and Helpers

uint64_t nvme_crc64(uint64_t crc, const unsigned char *buffer, size_t len)

Calculate NVMe CRC64

Parameters

uint64_t crc

starting value

const unsigned char *buffer

buffer to calculate CRC for

size_t len

length of buffer

Return

the NVMe CRC64 calculated over buffer

bool nvme_cqe_ok(struct nvme_cqe *cqe)

Check the status field of CQE

Parameters

struct nvme_cqe *cqe

Completion queue entry

Description

Check the Status Field of the CQE.

Return

true on no error, false otherwise.

int nvme_set_errno_from_cqe(struct nvme_cqe *cqe)

Set errno from CQE

Parameters

struct nvme_cqe *cqe

Completion queue entry

Description

Set errno to an error describing the NVMe status indicated by the Status Field in cqe.

Return

0 when no error in cqe, otherwise -1 and set errno.

int nvme_aer(struct nvme_ctrl *ctrl, void *opaque)

Submit an Asynchronous Event Request command

Parameters

struct nvme_ctrl *ctrl

Controller reference

void *opaque

Opaque data pointer

Description

Issue an Asynchronous Event Request command and associate opaque with the request tracker.

Return

On success, returns 0. On error, returns -1 and sets errno.

int nvme_sync(struct nvme_ctrl *ctrl, struct nvme_sq *sq, union nvme_cmd *sqe, void *buf, size_t len, struct nvme_cqe *cqe_copy)

Submit a command and wait for completion

Parameters

struct nvme_ctrl *ctrl

Controller reference

struct nvme_sq *sq

Submission queue

union nvme_cmd *sqe

Submission queue entry

void *buf

Command payload

size_t len

Command payload length

struct nvme_cqe *cqe_copy

Completion queue entry to fill

Description

Submit a command and wait for completion in a synchronous manner. If a spurious completion queue entry is posted (i.e., the command identifier is different from the one set in sqe), the CQE is ignored and an error message is logged.

Note: This function should only be used for synchronous commands where no spurious CQEs are expected to be posted on the completion queue. Any spurious CQEs will be logged and dropped.

Return

On success, returns 0. On error, returns -1 and sets errno.

int nvme_admin(struct nvme_ctrl *ctrl, union nvme_cmd *sqe, void *buf, size_t len, struct nvme_cqe *cqe_copy)

Submit an Admin command and wait for completion

Parameters

struct nvme_ctrl *ctrl

See struct nvme_ctrl

union nvme_cmd *sqe

Submission queue entry

void *buf

Command payload

size_t len

Command payload length

struct nvme_cqe *cqe_copy

Completion queue entry to fill

Description

Shortcut for nvme_sync(), submitting to the admin submission queue.

Return

On success, returns 0. On error, returnes -1 and sets errno.