linux/drivers/nvme/host/nvme.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2011-2014, Intel Corporation.
   3 *
   4 * This program is free software; you can redistribute it and/or modify it
   5 * under the terms and conditions of the GNU General Public License,
   6 * version 2, as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope it will be useful, but WITHOUT
   9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  11 * more details.
  12 */
  13
  14#ifndef _NVME_H
  15#define _NVME_H
  16
  17#include <linux/nvme.h>
  18#include <linux/pci.h>
  19#include <linux/kref.h>
  20#include <linux/blk-mq.h>
  21#include <linux/lightnvm.h>
  22
  23enum {
  24        /*
  25         * Driver internal status code for commands that were cancelled due
  26         * to timeouts or controller shutdown.  The value is negative so
  27         * that it a) doesn't overlap with the unsigned hardware error codes,
  28         * and b) can easily be tested for.
  29         */
  30        NVME_SC_CANCELLED               = -EINTR,
  31};
  32
  33extern unsigned char nvme_io_timeout;
  34#define NVME_IO_TIMEOUT (nvme_io_timeout * HZ)
  35
  36extern unsigned char admin_timeout;
  37#define ADMIN_TIMEOUT   (admin_timeout * HZ)
  38
  39extern unsigned char shutdown_timeout;
  40#define SHUTDOWN_TIMEOUT        (shutdown_timeout * HZ)
  41
  42#define NVME_DEFAULT_KATO       5
  43#define NVME_KATO_GRACE         10
  44
  45extern unsigned int nvme_max_retries;
  46
  47enum {
  48        NVME_NS_LBA             = 0,
  49        NVME_NS_LIGHTNVM        = 1,
  50};
  51
  52/*
  53 * List of workarounds for devices that required behavior not specified in
  54 * the standard.
  55 */
  56enum nvme_quirks {
  57        /*
  58         * Prefers I/O aligned to a stripe size specified in a vendor
  59         * specific Identify field.
  60         */
  61        NVME_QUIRK_STRIPE_SIZE                  = (1 << 0),
  62
  63        /*
  64         * The controller doesn't handle Identify value others than 0 or 1
  65         * correctly.
  66         */
  67        NVME_QUIRK_IDENTIFY_CNS                 = (1 << 1),
  68
  69        /*
  70         * The controller deterministically returns O's on reads to discarded
  71         * logical blocks.
  72         */
  73        NVME_QUIRK_DISCARD_ZEROES               = (1 << 2),
  74
  75        /*
  76         * The controller needs a delay before starts checking the device
  77         * readiness, which is done by reading the NVME_CSTS_RDY bit.
  78         */
  79        NVME_QUIRK_DELAY_BEFORE_CHK_RDY         = (1 << 3),
  80};
  81
  82/* The below value is the specific amount of delay needed before checking
  83 * readiness in case of the PCI_DEVICE(0x1c58, 0x0003), which needs the
  84 * NVME_QUIRK_DELAY_BEFORE_CHK_RDY quirk enabled. The value (in ms) was
  85 * found empirically.
  86 */
  87#define NVME_QUIRK_DELAY_AMOUNT         2000
  88
  89enum nvme_ctrl_state {
  90        NVME_CTRL_NEW,
  91        NVME_CTRL_LIVE,
  92        NVME_CTRL_RESETTING,
  93        NVME_CTRL_RECONNECTING,
  94        NVME_CTRL_DELETING,
  95        NVME_CTRL_DEAD,
  96};
  97
  98struct nvme_ctrl {
  99        enum nvme_ctrl_state state;
 100        spinlock_t lock;
 101        const struct nvme_ctrl_ops *ops;
 102        struct request_queue *admin_q;
 103        struct request_queue *connect_q;
 104        struct device *dev;
 105        struct kref kref;
 106        int instance;
 107        struct blk_mq_tag_set *tagset;
 108        struct list_head namespaces;
 109        struct mutex namespaces_mutex;
 110        struct device *device;  /* char device */
 111        struct list_head node;
 112        struct ida ns_ida;
 113
 114        char name[12];
 115        char serial[20];
 116        char model[40];
 117        char firmware_rev[8];
 118        u16 cntlid;
 119
 120        u32 ctrl_config;
 121
 122        u32 page_size;
 123        u32 max_hw_sectors;
 124        u32 stripe_size;
 125        u16 oncs;
 126        u16 vid;
 127        atomic_t abort_limit;
 128        u8 event_limit;
 129        u8 vwc;
 130        u32 vs;
 131        u32 sgls;
 132        u16 kas;
 133        unsigned int kato;
 134        bool subsystem;
 135        unsigned long quirks;
 136        struct work_struct scan_work;
 137        struct work_struct async_event_work;
 138        struct delayed_work ka_work;
 139
 140        /* Fabrics only */
 141        u16 sqsize;
 142        u32 ioccsz;
 143        u32 iorcsz;
 144        u16 icdoff;
 145        u16 maxcmd;
 146        struct nvmf_ctrl_options *opts;
 147};
 148
 149/*
 150 * An NVM Express namespace is equivalent to a SCSI LUN
 151 */
 152struct nvme_ns {
 153        struct list_head list;
 154
 155        struct nvme_ctrl *ctrl;
 156        struct request_queue *queue;
 157        struct gendisk *disk;
 158        struct nvm_dev *ndev;
 159        struct kref kref;
 160        int instance;
 161
 162        u8 eui[8];
 163        u8 uuid[16];
 164
 165        unsigned ns_id;
 166        int lba_shift;
 167        u16 ms;
 168        bool ext;
 169        u8 pi_type;
 170        unsigned long flags;
 171
 172#define NVME_NS_REMOVING 0
 173#define NVME_NS_DEAD     1
 174
 175        u64 mode_select_num_blocks;
 176        u32 mode_select_block_len;
 177};
 178
 179struct nvme_ctrl_ops {
 180        const char *name;
 181        struct module *module;
 182        bool is_fabrics;
 183        int (*reg_read32)(struct nvme_ctrl *ctrl, u32 off, u32 *val);
 184        int (*reg_write32)(struct nvme_ctrl *ctrl, u32 off, u32 val);
 185        int (*reg_read64)(struct nvme_ctrl *ctrl, u32 off, u64 *val);
 186        int (*reset_ctrl)(struct nvme_ctrl *ctrl);
 187        void (*free_ctrl)(struct nvme_ctrl *ctrl);
 188        void (*submit_async_event)(struct nvme_ctrl *ctrl, int aer_idx);
 189        int (*delete_ctrl)(struct nvme_ctrl *ctrl);
 190        const char *(*get_subsysnqn)(struct nvme_ctrl *ctrl);
 191        int (*get_address)(struct nvme_ctrl *ctrl, char *buf, int size);
 192};
 193
 194static inline bool nvme_ctrl_ready(struct nvme_ctrl *ctrl)
 195{
 196        u32 val = 0;
 197
 198        if (ctrl->ops->reg_read32(ctrl, NVME_REG_CSTS, &val))
 199                return false;
 200        return val & NVME_CSTS_RDY;
 201}
 202
 203static inline int nvme_reset_subsystem(struct nvme_ctrl *ctrl)
 204{
 205        if (!ctrl->subsystem)
 206                return -ENOTTY;
 207        return ctrl->ops->reg_write32(ctrl, NVME_REG_NSSR, 0x4E564D65);
 208}
 209
 210static inline u64 nvme_block_nr(struct nvme_ns *ns, sector_t sector)
 211{
 212        return (sector >> (ns->lba_shift - 9));
 213}
 214
 215static inline unsigned nvme_map_len(struct request *rq)
 216{
 217        if (req_op(rq) == REQ_OP_DISCARD)
 218                return sizeof(struct nvme_dsm_range);
 219        else
 220                return blk_rq_bytes(rq);
 221}
 222
 223static inline void nvme_cleanup_cmd(struct request *req)
 224{
 225        if (req_op(req) == REQ_OP_DISCARD)
 226                kfree(req->completion_data);
 227}
 228
 229static inline int nvme_error_status(u16 status)
 230{
 231        switch (status & 0x7ff) {
 232        case NVME_SC_SUCCESS:
 233                return 0;
 234        case NVME_SC_CAP_EXCEEDED:
 235                return -ENOSPC;
 236        default:
 237                return -EIO;
 238        }
 239}
 240
 241static inline bool nvme_req_needs_retry(struct request *req, u16 status)
 242{
 243        return !(status & NVME_SC_DNR || blk_noretry_request(req)) &&
 244                (jiffies - req->start_time) < req->timeout &&
 245                req->retries < nvme_max_retries;
 246}
 247
 248void nvme_cancel_request(struct request *req, void *data, bool reserved);
 249bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl,
 250                enum nvme_ctrl_state new_state);
 251int nvme_disable_ctrl(struct nvme_ctrl *ctrl, u64 cap);
 252int nvme_enable_ctrl(struct nvme_ctrl *ctrl, u64 cap);
 253int nvme_shutdown_ctrl(struct nvme_ctrl *ctrl);
 254int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev,
 255                const struct nvme_ctrl_ops *ops, unsigned long quirks);
 256void nvme_uninit_ctrl(struct nvme_ctrl *ctrl);
 257void nvme_put_ctrl(struct nvme_ctrl *ctrl);
 258int nvme_init_identify(struct nvme_ctrl *ctrl);
 259
 260void nvme_queue_scan(struct nvme_ctrl *ctrl);
 261void nvme_remove_namespaces(struct nvme_ctrl *ctrl);
 262
 263#define NVME_NR_AERS    1
 264void nvme_complete_async_event(struct nvme_ctrl *ctrl,
 265                struct nvme_completion *cqe);
 266void nvme_queue_async_events(struct nvme_ctrl *ctrl);
 267
 268void nvme_stop_queues(struct nvme_ctrl *ctrl);
 269void nvme_start_queues(struct nvme_ctrl *ctrl);
 270void nvme_kill_queues(struct nvme_ctrl *ctrl);
 271
 272#define NVME_QID_ANY -1
 273struct request *nvme_alloc_request(struct request_queue *q,
 274                struct nvme_command *cmd, unsigned int flags, int qid);
 275void nvme_requeue_req(struct request *req);
 276int nvme_setup_cmd(struct nvme_ns *ns, struct request *req,
 277                struct nvme_command *cmd);
 278int nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
 279                void *buf, unsigned bufflen);
 280int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
 281                struct nvme_completion *cqe, void *buffer, unsigned bufflen,
 282                unsigned timeout, int qid, int at_head, int flags);
 283int nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd,
 284                void __user *ubuffer, unsigned bufflen, u32 *result,
 285                unsigned timeout);
 286int __nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd,
 287                void __user *ubuffer, unsigned bufflen,
 288                void __user *meta_buffer, unsigned meta_len, u32 meta_seed,
 289                u32 *result, unsigned timeout);
 290int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id);
 291int nvme_identify_ns(struct nvme_ctrl *dev, unsigned nsid,
 292                struct nvme_id_ns **id);
 293int nvme_get_log_page(struct nvme_ctrl *dev, struct nvme_smart_log **log);
 294int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
 295                      void *buffer, size_t buflen, u32 *result);
 296int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11,
 297                      void *buffer, size_t buflen, u32 *result);
 298int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count);
 299void nvme_start_keep_alive(struct nvme_ctrl *ctrl);
 300void nvme_stop_keep_alive(struct nvme_ctrl *ctrl);
 301
 302struct sg_io_hdr;
 303
 304int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr);
 305int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg);
 306int nvme_sg_get_version_num(int __user *ip);
 307
 308#ifdef CONFIG_NVM
 309int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id);
 310int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node,
 311                      const struct attribute_group *attrs);
 312void nvme_nvm_unregister(struct nvme_ns *ns);
 313
 314static inline struct nvme_ns *nvme_get_ns_from_dev(struct device *dev)
 315{
 316        if (dev->type->devnode)
 317                return dev_to_disk(dev)->private_data;
 318
 319        return (container_of(dev, struct nvm_dev, dev))->private_data;
 320}
 321#else
 322static inline int nvme_nvm_register(struct nvme_ns *ns, char *disk_name,
 323                                    int node,
 324                                    const struct attribute_group *attrs)
 325{
 326        return 0;
 327}
 328
 329static inline void nvme_nvm_unregister(struct nvme_ns *ns) {};
 330
 331static inline int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id)
 332{
 333        return 0;
 334}
 335static inline struct nvme_ns *nvme_get_ns_from_dev(struct device *dev)
 336{
 337        return dev_to_disk(dev)->private_data;
 338}
 339#endif /* CONFIG_NVM */
 340
 341int __init nvme_core_init(void);
 342void nvme_core_exit(void);
 343
 344#endif /* _NVME_H */
 345