Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / include / linux / nvme.h
index c0d94ed8ce9aabde3d5c140c93948ede3d462546..b5812c395351a54d4eff5bacb3ed94528b9d25e1 100644 (file)
@@ -28,18 +28,32 @@ struct nvme_bar {
        __u32                   cc;     /* Controller Configuration */
        __u32                   rsvd1;  /* Reserved */
        __u32                   csts;   /* Controller Status */
-       __u32                   rsvd2;  /* Reserved */
+       __u32                   nssr;   /* Subsystem Reset */
        __u32                   aqa;    /* Admin Queue Attributes */
        __u64                   asq;    /* Admin SQ Base Address */
        __u64                   acq;    /* Admin CQ Base Address */
+       __u32                   cmbloc; /* Controller Memory Buffer Location */
+       __u32                   cmbsz;  /* Controller Memory Buffer Size */
 };
 
 #define NVME_CAP_MQES(cap)     ((cap) & 0xffff)
 #define NVME_CAP_TIMEOUT(cap)  (((cap) >> 24) & 0xff)
 #define NVME_CAP_STRIDE(cap)   (((cap) >> 32) & 0xf)
+#define NVME_CAP_NSSRC(cap)    (((cap) >> 36) & 0x1)
 #define NVME_CAP_MPSMIN(cap)   (((cap) >> 48) & 0xf)
 #define NVME_CAP_MPSMAX(cap)   (((cap) >> 52) & 0xf)
 
+#define NVME_CMB_BIR(cmbloc)   ((cmbloc) & 0x7)
+#define NVME_CMB_OFST(cmbloc)  (((cmbloc) >> 12) & 0xfffff)
+#define NVME_CMB_SZ(cmbsz)     (((cmbsz) >> 12) & 0xfffff)
+#define NVME_CMB_SZU(cmbsz)    (((cmbsz) >> 8) & 0xf)
+
+#define NVME_CMB_WDS(cmbsz)    ((cmbsz) & 0x10)
+#define NVME_CMB_RDS(cmbsz)    ((cmbsz) & 0x8)
+#define NVME_CMB_LISTS(cmbsz)  ((cmbsz) & 0x4)
+#define NVME_CMB_CQS(cmbsz)    ((cmbsz) & 0x2)
+#define NVME_CMB_SQS(cmbsz)    ((cmbsz) & 0x1)
+
 enum {
        NVME_CC_ENABLE          = 1 << 0,
        NVME_CC_CSS_NVM         = 0 << 4,
@@ -55,6 +69,7 @@ enum {
        NVME_CC_IOCQES          = 4 << 20,
        NVME_CSTS_RDY           = 1 << 0,
        NVME_CSTS_CFS           = 1 << 1,
+       NVME_CSTS_NSSRO         = 1 << 4,
        NVME_CSTS_SHST_NORMAL   = 0 << 2,
        NVME_CSTS_SHST_OCCUR    = 1 << 2,
        NVME_CSTS_SHST_CMPLT    = 2 << 2,
@@ -97,9 +112,14 @@ struct nvme_dev {
        char serial[20];
        char model[40];
        char firmware_rev[8];
+       bool subsystem;
        u32 max_hw_sectors;
        u32 stripe_size;
        u32 page_size;
+       void __iomem *cmb;
+       dma_addr_t cmb_dma_addr;
+       u64 cmb_size;
+       u32 cmbsz;
        u16 oncs;
        u16 abort_limit;
        u8 event_limit;