net/mlx5e: Support RX multi-packet WQE (Striding RQ)
[cascardo/linux.git] / include / linux / lightnvm.h
index 2190419..cdcb2cc 100644 (file)
@@ -92,9 +92,9 @@ enum {
        NVM_ADDRMODE_CHANNEL    = 1,
 
        /* Plane programming mode for LUN */
-       NVM_PLANE_SINGLE        = 0,
-       NVM_PLANE_DOUBLE        = 1,
-       NVM_PLANE_QUAD          = 2,
+       NVM_PLANE_SINGLE        = 1,
+       NVM_PLANE_DOUBLE        = 2,
+       NVM_PLANE_QUAD          = 4,
 
        /* Status codes */
        NVM_RSP_SUCCESS         = 0x0,
@@ -242,6 +242,7 @@ struct nvm_rq {
        uint16_t nr_pages;
        uint16_t flags;
 
+       u64 ppa_status; /* ppa media status */
        int error;
 };
 
@@ -341,11 +342,12 @@ struct nvm_dev {
        int lps_per_blk;
        int *lptbl;
 
-       unsigned long total_pages;
        unsigned long total_blocks;
+       unsigned long total_secs;
        int nr_luns;
        unsigned max_pages_per_blk;
 
+       unsigned long *lun_map;
        void *ppalist_pool;
 
        struct nvm_id identity;
@@ -355,6 +357,7 @@ struct nvm_dev {
        char name[DISK_NAME_LEN];
 
        struct mutex mlock;
+       spinlock_t lock;
 };
 
 static inline struct ppa_addr generic_to_dev_addr(struct nvm_dev *dev,
@@ -465,8 +468,13 @@ typedef int (nvmm_submit_io_fn)(struct nvm_dev *, struct nvm_rq *);
 typedef int (nvmm_erase_blk_fn)(struct nvm_dev *, struct nvm_block *,
                                                                unsigned long);
 typedef struct nvm_lun *(nvmm_get_lun_fn)(struct nvm_dev *, int);
+typedef int (nvmm_reserve_lun)(struct nvm_dev *, int);
+typedef void (nvmm_release_lun)(struct nvm_dev *, int);
 typedef void (nvmm_lun_info_print_fn)(struct nvm_dev *);
 
+typedef int (nvmm_get_area_fn)(struct nvm_dev *, sector_t *, sector_t);
+typedef void (nvmm_put_area_fn)(struct nvm_dev *, sector_t);
+
 struct nvmm_type {
        const char *name;
        unsigned int version[3];
@@ -488,9 +496,15 @@ struct nvmm_type {
 
        /* Configuration management */
        nvmm_get_lun_fn *get_lun;
+       nvmm_reserve_lun *reserve_lun;
+       nvmm_release_lun *release_lun;
 
        /* Statistics */
        nvmm_lun_info_print_fn *lun_info_print;
+
+       nvmm_get_area_fn *get_area;
+       nvmm_put_area_fn *put_area;
+
        struct list_head list;
 };