libnvme(9) API Manual libnvme(9)

# [NAME](#NAME)

enum nvme\_id\_ctrl\_frmw - Flags and values indicates capabilities regarding firmware updates from &struct nvme\_id\_ctrl.frmw.

# [SYNOPSIS](#SYNOPSIS)

enum nvme\_id\_ctrl\_frmw {  
**NVME\_CTRL\_FRMW\_FFSRO\_SHIFT** ,  
**NVME\_CTRL\_FRMW\_NOFS\_SHIFT** ,  
**NVME\_CTRL\_FRMW\_FAWR\_SHIFT** ,  
**NVME\_CTRL\_FRMW\_SMUD\_SHIFT** ,  
**NVME\_CTRL\_FRMW\_FFSRO\_MASK** ,  
**NVME\_CTRL\_FRMW\_NOFS\_MASK** ,  
**NVME\_CTRL\_FRMW\_FAWR\_MASK** ,  
**NVME\_CTRL\_FRMW\_SMUD\_MASK** ,  
**NVME\_CTRL\_FRMW\_FFSRO** ,  
**NVME\_CTRL\_FRMW\_NOFS** ,  
**NVME\_CTRL\_FRMW\_FAWR** ,  
**NVME\_CTRL\_FRMW\_SMUD**

};

# [Constants](#Constants)

[NVME\_CTRL\_FRMW\_FFSRO\_SHIFT](#NVME_CTRL_FRMW_FFSRO_SHIFT)

FFSRO shift

[NVME\_CTRL\_FRMW\_NOFS\_SHIFT](#NVME_CTRL_FRMW_NOFS_SHIFT)

NOFS shift

[NVME\_CTRL\_FRMW\_FAWR\_SHIFT](#NVME_CTRL_FRMW_FAWR_SHIFT)

FAWR shift

[NVME\_CTRL\_FRMW\_SMUD\_SHIFT](#NVME_CTRL_FRMW_SMUD_SHIFT)

SMUD shift

[NVME\_CTRL\_FRMW\_FFSRO\_MASK](#NVME_CTRL_FRMW_FFSRO_MASK)

FFSRO mask

[NVME\_CTRL\_FRMW\_NOFS\_MASK](#NVME_CTRL_FRMW_NOFS_MASK)

NOFS mask

[NVME\_CTRL\_FRMW\_FAWR\_MASK](#NVME_CTRL_FRMW_FAWR_MASK)

FAWR mask

[NVME\_CTRL\_FRMW\_SMUD\_MASK](#NVME_CTRL_FRMW_SMUD_MASK)

SMUD mask

[NVME\_CTRL\_FRMW\_FFSRO](#NVME_CTRL_FRMW_FFSRO)

If set, the first firmware slot is readonly

[NVME\_CTRL\_FRMW\_NOFS](#NVME_CTRL_FRMW_NOFS)

Mask to get the value of the number of firmware slots that the controller supports.

[NVME\_CTRL\_FRMW\_FAWR](#NVME_CTRL_FRMW_FAWR)

If set, the controller supports firmware activation without a reset.

[NVME\_CTRL\_FRMW\_SMUD](#NVME_CTRL_FRMW_SMUD)

If set, the controller is able to detect overlapping firmware/boot partition image update.

enum nvme\_id\_ctrl\_frmw October 2026

---

Document: nvme_id_ctrl_frmw-libnvme3(2) from nvme-cli 3.2-r0 (Chainguard OS)
Source: https://github.com/linux-nvme/nvme-cli
