nvme.h (818a23e3882b1bf65d1719e407be04716e69a4d5) | nvme.h (d09f2b45f346f0a9e5e1b5fcea531b1b393671dc) |
---|---|
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 --- 13 unchanged lines hidden (view full) --- 22#include <linux/sed-opal.h> 23 24extern unsigned char nvme_io_timeout; 25#define NVME_IO_TIMEOUT (nvme_io_timeout * HZ) 26 27extern unsigned char admin_timeout; 28#define ADMIN_TIMEOUT (admin_timeout * HZ) 29 | 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 --- 13 unchanged lines hidden (view full) --- 22#include <linux/sed-opal.h> 23 24extern unsigned char nvme_io_timeout; 25#define NVME_IO_TIMEOUT (nvme_io_timeout * HZ) 26 27extern unsigned char admin_timeout; 28#define ADMIN_TIMEOUT (admin_timeout * HZ) 29 |
30extern unsigned char shutdown_timeout; 31#define SHUTDOWN_TIMEOUT (shutdown_timeout * HZ) 32 | |
33#define NVME_DEFAULT_KATO 5 34#define NVME_KATO_GRACE 10 35 | 30#define NVME_DEFAULT_KATO 5 31#define NVME_KATO_GRACE 10 32 |
33extern struct workqueue_struct *nvme_wq; 34 |
|
36enum { 37 NVME_NS_LBA = 0, 38 NVME_NS_LIGHTNVM = 1, 39}; 40 41/* 42 * List of workarounds for devices that required behavior not specified in 43 * the standard. --- 82 unchanged lines hidden (view full) --- 126 struct kref kref; 127 int instance; 128 struct blk_mq_tag_set *tagset; 129 struct list_head namespaces; 130 struct mutex namespaces_mutex; 131 struct device *device; /* char device */ 132 struct list_head node; 133 struct ida ns_ida; | 35enum { 36 NVME_NS_LBA = 0, 37 NVME_NS_LIGHTNVM = 1, 38}; 39 40/* 41 * List of workarounds for devices that required behavior not specified in 42 * the standard. --- 82 unchanged lines hidden (view full) --- 125 struct kref kref; 126 int instance; 127 struct blk_mq_tag_set *tagset; 128 struct list_head namespaces; 129 struct mutex namespaces_mutex; 130 struct device *device; /* char device */ 131 struct list_head node; 132 struct ida ns_ida; |
133 struct work_struct reset_work; |
|
134 135 struct opal_dev *opal_dev; 136 137 char name[12]; 138 char serial[20]; 139 char model[40]; 140 char firmware_rev[8]; | 134 135 struct opal_dev *opal_dev; 136 137 char name[12]; 138 char serial[20]; 139 char model[40]; 140 char firmware_rev[8]; |
141 char subnqn[NVMF_NQN_SIZE]; |
|
141 u16 cntlid; 142 143 u32 ctrl_config; | 142 u16 cntlid; 143 144 u32 ctrl_config; |
145 u32 queue_count; |
|
144 | 146 |
147 u64 cap; |
|
145 u32 page_size; 146 u32 max_hw_sectors; 147 u16 oncs; 148 u16 vid; 149 u16 oacs; | 148 u32 page_size; 149 u32 max_hw_sectors; 150 u16 oncs; 151 u16 vid; 152 u16 oacs; |
153 u16 nssa; 154 u16 nr_streams; |
|
150 atomic_t abort_limit; 151 u8 event_limit; 152 u8 vwc; 153 u32 vs; 154 u32 sgls; 155 u16 kas; 156 u8 npss; 157 u8 apsta; 158 unsigned int kato; 159 bool subsystem; 160 unsigned long quirks; 161 struct nvme_id_power_state psd[32]; 162 struct work_struct scan_work; 163 struct work_struct async_event_work; 164 struct delayed_work ka_work; 165 166 /* Power saving configuration */ 167 u64 ps_max_latency_us; | 155 atomic_t abort_limit; 156 u8 event_limit; 157 u8 vwc; 158 u32 vs; 159 u32 sgls; 160 u16 kas; 161 u8 npss; 162 u8 apsta; 163 unsigned int kato; 164 bool subsystem; 165 unsigned long quirks; 166 struct nvme_id_power_state psd[32]; 167 struct work_struct scan_work; 168 struct work_struct async_event_work; 169 struct delayed_work ka_work; 170 171 /* Power saving configuration */ 172 u64 ps_max_latency_us; |
173 bool apst_enabled; |
|
168 | 174 |
175 u32 hmpre; 176 u32 hmmin; 177 |
|
169 /* Fabrics only */ 170 u16 sqsize; 171 u32 ioccsz; 172 u32 iorcsz; 173 u16 icdoff; 174 u16 maxcmd; | 178 /* Fabrics only */ 179 u16 sqsize; 180 u32 ioccsz; 181 u32 iorcsz; 182 u16 icdoff; 183 u16 maxcmd; |
184 int nr_reconnects; |
|
175 struct nvmf_ctrl_options *opts; 176}; 177 | 185 struct nvmf_ctrl_options *opts; 186}; 187 |
178/* 179 * An NVM Express namespace is equivalent to a SCSI LUN 180 */ | |
181struct nvme_ns { 182 struct list_head list; 183 184 struct nvme_ctrl *ctrl; 185 struct request_queue *queue; 186 struct gendisk *disk; 187 struct nvm_dev *ndev; 188 struct kref kref; 189 int instance; 190 191 u8 eui[8]; | 188struct nvme_ns { 189 struct list_head list; 190 191 struct nvme_ctrl *ctrl; 192 struct request_queue *queue; 193 struct gendisk *disk; 194 struct nvm_dev *ndev; 195 struct kref kref; 196 int instance; 197 198 u8 eui[8]; |
192 u8 uuid[16]; | 199 u8 nguid[16]; 200 uuid_t uuid; |
193 194 unsigned ns_id; 195 int lba_shift; 196 u16 ms; | 201 202 unsigned ns_id; 203 int lba_shift; 204 u16 ms; |
205 u16 sgs; 206 u32 sws; |
|
197 bool ext; 198 u8 pi_type; 199 unsigned long flags; | 207 bool ext; 208 u8 pi_type; 209 unsigned long flags; |
210 u16 noiob; |
|
200 201#define NVME_NS_REMOVING 0 202#define NVME_NS_DEAD 1 203 204 u64 mode_select_num_blocks; 205 u32 mode_select_block_len; 206}; 207 208struct nvme_ctrl_ops { 209 const char *name; 210 struct module *module; 211 unsigned int flags; 212#define NVME_F_FABRICS (1 << 0) 213#define NVME_F_METADATA_SUPPORTED (1 << 1) 214 int (*reg_read32)(struct nvme_ctrl *ctrl, u32 off, u32 *val); 215 int (*reg_write32)(struct nvme_ctrl *ctrl, u32 off, u32 val); 216 int (*reg_read64)(struct nvme_ctrl *ctrl, u32 off, u64 *val); | 211 212#define NVME_NS_REMOVING 0 213#define NVME_NS_DEAD 1 214 215 u64 mode_select_num_blocks; 216 u32 mode_select_block_len; 217}; 218 219struct nvme_ctrl_ops { 220 const char *name; 221 struct module *module; 222 unsigned int flags; 223#define NVME_F_FABRICS (1 << 0) 224#define NVME_F_METADATA_SUPPORTED (1 << 1) 225 int (*reg_read32)(struct nvme_ctrl *ctrl, u32 off, u32 *val); 226 int (*reg_write32)(struct nvme_ctrl *ctrl, u32 off, u32 val); 227 int (*reg_read64)(struct nvme_ctrl *ctrl, u32 off, u64 *val); |
217 int (*reset_ctrl)(struct nvme_ctrl *ctrl); | |
218 void (*free_ctrl)(struct nvme_ctrl *ctrl); 219 void (*submit_async_event)(struct nvme_ctrl *ctrl, int aer_idx); 220 int (*delete_ctrl)(struct nvme_ctrl *ctrl); | 228 void (*free_ctrl)(struct nvme_ctrl *ctrl); 229 void (*submit_async_event)(struct nvme_ctrl *ctrl, int aer_idx); 230 int (*delete_ctrl)(struct nvme_ctrl *ctrl); |
221 const char *(*get_subsysnqn)(struct nvme_ctrl *ctrl); | |
222 int (*get_address)(struct nvme_ctrl *ctrl, char *buf, int size); 223}; 224 225static inline bool nvme_ctrl_ready(struct nvme_ctrl *ctrl) 226{ 227 u32 val = 0; 228 229 if (ctrl->ops->reg_read32(ctrl, NVME_REG_CSTS, &val)) --- 36 unchanged lines hidden (view full) --- 266bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, 267 enum nvme_ctrl_state new_state); 268int nvme_disable_ctrl(struct nvme_ctrl *ctrl, u64 cap); 269int nvme_enable_ctrl(struct nvme_ctrl *ctrl, u64 cap); 270int nvme_shutdown_ctrl(struct nvme_ctrl *ctrl); 271int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, 272 const struct nvme_ctrl_ops *ops, unsigned long quirks); 273void nvme_uninit_ctrl(struct nvme_ctrl *ctrl); | 231 int (*get_address)(struct nvme_ctrl *ctrl, char *buf, int size); 232}; 233 234static inline bool nvme_ctrl_ready(struct nvme_ctrl *ctrl) 235{ 236 u32 val = 0; 237 238 if (ctrl->ops->reg_read32(ctrl, NVME_REG_CSTS, &val)) --- 36 unchanged lines hidden (view full) --- 275bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, 276 enum nvme_ctrl_state new_state); 277int nvme_disable_ctrl(struct nvme_ctrl *ctrl, u64 cap); 278int nvme_enable_ctrl(struct nvme_ctrl *ctrl, u64 cap); 279int nvme_shutdown_ctrl(struct nvme_ctrl *ctrl); 280int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev, 281 const struct nvme_ctrl_ops *ops, unsigned long quirks); 282void nvme_uninit_ctrl(struct nvme_ctrl *ctrl); |
283void nvme_start_ctrl(struct nvme_ctrl *ctrl); 284void nvme_stop_ctrl(struct nvme_ctrl *ctrl); |
|
274void nvme_put_ctrl(struct nvme_ctrl *ctrl); 275int nvme_init_identify(struct nvme_ctrl *ctrl); 276 277void nvme_queue_scan(struct nvme_ctrl *ctrl); 278void nvme_remove_namespaces(struct nvme_ctrl *ctrl); 279 280int nvme_sec_submit(void *data, u16 spsp, u8 secp, void *buffer, size_t len, 281 bool send); --- 9 unchanged lines hidden (view full) --- 291void nvme_unfreeze(struct nvme_ctrl *ctrl); 292void nvme_wait_freeze(struct nvme_ctrl *ctrl); 293void nvme_wait_freeze_timeout(struct nvme_ctrl *ctrl, long timeout); 294void nvme_start_freeze(struct nvme_ctrl *ctrl); 295 296#define NVME_QID_ANY -1 297struct request *nvme_alloc_request(struct request_queue *q, 298 struct nvme_command *cmd, unsigned int flags, int qid); | 285void nvme_put_ctrl(struct nvme_ctrl *ctrl); 286int nvme_init_identify(struct nvme_ctrl *ctrl); 287 288void nvme_queue_scan(struct nvme_ctrl *ctrl); 289void nvme_remove_namespaces(struct nvme_ctrl *ctrl); 290 291int nvme_sec_submit(void *data, u16 spsp, u8 secp, void *buffer, size_t len, 292 bool send); --- 9 unchanged lines hidden (view full) --- 302void nvme_unfreeze(struct nvme_ctrl *ctrl); 303void nvme_wait_freeze(struct nvme_ctrl *ctrl); 304void nvme_wait_freeze_timeout(struct nvme_ctrl *ctrl, long timeout); 305void nvme_start_freeze(struct nvme_ctrl *ctrl); 306 307#define NVME_QID_ANY -1 308struct request *nvme_alloc_request(struct request_queue *q, 309 struct nvme_command *cmd, unsigned int flags, int qid); |
299int nvme_setup_cmd(struct nvme_ns *ns, struct request *req, | 310blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req, |
300 struct nvme_command *cmd); 301int nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd, 302 void *buf, unsigned bufflen); 303int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd, 304 union nvme_result *result, void *buffer, unsigned bufflen, 305 unsigned timeout, int qid, int at_head, int flags); 306int nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd, 307 void __user *ubuffer, unsigned bufflen, u32 *result, 308 unsigned timeout); 309int __nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd, 310 void __user *ubuffer, unsigned bufflen, 311 void __user *meta_buffer, unsigned meta_len, u32 meta_seed, 312 u32 *result, unsigned timeout); | 311 struct nvme_command *cmd); 312int nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd, 313 void *buf, unsigned bufflen); 314int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd, 315 union nvme_result *result, void *buffer, unsigned bufflen, 316 unsigned timeout, int qid, int at_head, int flags); 317int nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd, 318 void __user *ubuffer, unsigned bufflen, u32 *result, 319 unsigned timeout); 320int __nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd, 321 void __user *ubuffer, unsigned bufflen, 322 void __user *meta_buffer, unsigned meta_len, u32 meta_seed, 323 u32 *result, unsigned timeout); |
313int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id); 314int nvme_identify_ns(struct nvme_ctrl *dev, unsigned nsid, 315 struct nvme_id_ns **id); 316int nvme_get_log_page(struct nvme_ctrl *dev, struct nvme_smart_log **log); 317int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid, 318 void *buffer, size_t buflen, u32 *result); 319int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11, 320 void *buffer, size_t buflen, u32 *result); | |
321int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count); 322void nvme_start_keep_alive(struct nvme_ctrl *ctrl); 323void nvme_stop_keep_alive(struct nvme_ctrl *ctrl); | 324int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count); 325void nvme_start_keep_alive(struct nvme_ctrl *ctrl); 326void nvme_stop_keep_alive(struct nvme_ctrl *ctrl); |
327int nvme_reset_ctrl(struct nvme_ctrl *ctrl); |
|
324 | 328 |
325struct sg_io_hdr; 326 327int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr); 328int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg); 329int nvme_sg_get_version_num(int __user *ip); 330 | |
331#ifdef CONFIG_NVM 332int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id); 333int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node); 334void nvme_nvm_unregister(struct nvme_ns *ns); 335int nvme_nvm_register_sysfs(struct nvme_ns *ns); 336void nvme_nvm_unregister_sysfs(struct nvme_ns *ns); 337int nvme_nvm_ioctl(struct nvme_ns *ns, unsigned int cmd, unsigned long arg); 338#else --- 32 unchanged lines hidden --- | 329#ifdef CONFIG_NVM 330int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id); 331int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node); 332void nvme_nvm_unregister(struct nvme_ns *ns); 333int nvme_nvm_register_sysfs(struct nvme_ns *ns); 334void nvme_nvm_unregister_sysfs(struct nvme_ns *ns); 335int nvme_nvm_ioctl(struct nvme_ns *ns, unsigned int cmd, unsigned long arg); 336#else --- 32 unchanged lines hidden --- |