2 * Copyright (c) 2011-2014, Intel Corporation.
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.
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
17 #include <linux/nvme.h>
18 #include <linux/pci.h>
19 #include <linux/kref.h>
20 #include <linux/blk-mq.h>
22 struct nvme_passthru_cmd
;
24 extern unsigned char nvme_io_timeout
;
25 #define NVME_IO_TIMEOUT (nvme_io_timeout * HZ)
27 extern unsigned char admin_timeout
;
28 #define ADMIN_TIMEOUT (admin_timeout * HZ)
30 extern unsigned char shutdown_timeout
;
31 #define SHUTDOWN_TIMEOUT (shutdown_timeout * HZ)
39 * List of workarounds for devices that required behavior not specified in
44 * Prefers I/O aligned to a stripe size specified in a vendor
45 * specific Identify field.
47 NVME_QUIRK_STRIPE_SIZE
= (1 << 0),
51 const struct nvme_ctrl_ops
*ops
;
52 struct request_queue
*admin_q
;
73 * An NVM Express namespace is equivalent to a SCSI LUN
76 struct list_head list
;
78 struct nvme_ctrl
*ctrl
;
79 struct request_queue
*queue
;
89 u64 mode_select_num_blocks
;
90 u32 mode_select_block_len
;
93 struct nvme_ctrl_ops
{
94 int (*reg_read32
)(struct nvme_ctrl
*ctrl
, u32 off
, u32
*val
);
95 int (*reg_write32
)(struct nvme_ctrl
*ctrl
, u32 off
, u32 val
);
96 void (*free_ctrl
)(struct nvme_ctrl
*ctrl
);
99 static inline bool nvme_ctrl_ready(struct nvme_ctrl
*ctrl
)
103 if (ctrl
->ops
->reg_read32(ctrl
, NVME_REG_CSTS
, &val
))
105 return val
& NVME_CSTS_RDY
;
108 static inline u64
nvme_block_nr(struct nvme_ns
*ns
, sector_t sector
)
110 return (sector
>> (ns
->lba_shift
- 9));
113 static inline void nvme_setup_flush(struct nvme_ns
*ns
,
114 struct nvme_command
*cmnd
)
116 memset(cmnd
, 0, sizeof(*cmnd
));
117 cmnd
->common
.opcode
= nvme_cmd_flush
;
118 cmnd
->common
.nsid
= cpu_to_le32(ns
->ns_id
);
121 static inline void nvme_setup_rw(struct nvme_ns
*ns
, struct request
*req
,
122 struct nvme_command
*cmnd
)
127 if (req
->cmd_flags
& REQ_FUA
)
128 control
|= NVME_RW_FUA
;
129 if (req
->cmd_flags
& (REQ_FAILFAST_DEV
| REQ_RAHEAD
))
130 control
|= NVME_RW_LR
;
132 if (req
->cmd_flags
& REQ_RAHEAD
)
133 dsmgmt
|= NVME_RW_DSM_FREQ_PREFETCH
;
135 memset(cmnd
, 0, sizeof(*cmnd
));
136 cmnd
->rw
.opcode
= (rq_data_dir(req
) ? nvme_cmd_write
: nvme_cmd_read
);
137 cmnd
->rw
.command_id
= req
->tag
;
138 cmnd
->rw
.nsid
= cpu_to_le32(ns
->ns_id
);
139 cmnd
->rw
.slba
= cpu_to_le64(nvme_block_nr(ns
, blk_rq_pos(req
)));
140 cmnd
->rw
.length
= cpu_to_le16((blk_rq_bytes(req
) >> ns
->lba_shift
) - 1);
143 switch (ns
->pi_type
) {
144 case NVME_NS_DPS_PI_TYPE3
:
145 control
|= NVME_RW_PRINFO_PRCHK_GUARD
;
147 case NVME_NS_DPS_PI_TYPE1
:
148 case NVME_NS_DPS_PI_TYPE2
:
149 control
|= NVME_RW_PRINFO_PRCHK_GUARD
|
150 NVME_RW_PRINFO_PRCHK_REF
;
151 cmnd
->rw
.reftag
= cpu_to_le32(
152 nvme_block_nr(ns
, blk_rq_pos(req
)));
155 if (!blk_integrity_rq(req
))
156 control
|= NVME_RW_PRINFO_PRACT
;
159 cmnd
->rw
.control
= cpu_to_le16(control
);
160 cmnd
->rw
.dsmgmt
= cpu_to_le32(dsmgmt
);
164 static inline int nvme_error_status(u16 status
)
166 switch (status
& 0x7ff) {
167 case NVME_SC_SUCCESS
:
169 case NVME_SC_CAP_EXCEEDED
:
176 int nvme_disable_ctrl(struct nvme_ctrl
*ctrl
, u64 cap
);
177 int nvme_enable_ctrl(struct nvme_ctrl
*ctrl
, u64 cap
);
178 int nvme_shutdown_ctrl(struct nvme_ctrl
*ctrl
);
179 void nvme_put_ctrl(struct nvme_ctrl
*ctrl
);
180 void nvme_put_ns(struct nvme_ns
*ns
);
182 struct request
*nvme_alloc_request(struct request_queue
*q
,
183 struct nvme_command
*cmd
, unsigned int flags
);
184 int nvme_submit_sync_cmd(struct request_queue
*q
, struct nvme_command
*cmd
,
185 void *buf
, unsigned bufflen
);
186 int __nvme_submit_sync_cmd(struct request_queue
*q
, struct nvme_command
*cmd
,
187 void *buffer
, unsigned bufflen
, u32
*result
, unsigned timeout
);
188 int nvme_submit_user_cmd(struct request_queue
*q
, struct nvme_command
*cmd
,
189 void __user
*ubuffer
, unsigned bufflen
, u32
*result
,
191 int __nvme_submit_user_cmd(struct request_queue
*q
, struct nvme_command
*cmd
,
192 void __user
*ubuffer
, unsigned bufflen
,
193 void __user
*meta_buffer
, unsigned meta_len
, u32 meta_seed
,
194 u32
*result
, unsigned timeout
);
195 int nvme_identify_ctrl(struct nvme_ctrl
*dev
, struct nvme_id_ctrl
**id
);
196 int nvme_identify_ns(struct nvme_ctrl
*dev
, unsigned nsid
,
197 struct nvme_id_ns
**id
);
198 int nvme_get_log_page(struct nvme_ctrl
*dev
, struct nvme_smart_log
**log
);
199 int nvme_get_features(struct nvme_ctrl
*dev
, unsigned fid
, unsigned nsid
,
200 dma_addr_t dma_addr
, u32
*result
);
201 int nvme_set_features(struct nvme_ctrl
*dev
, unsigned fid
, unsigned dword11
,
202 dma_addr_t dma_addr
, u32
*result
);
204 extern const struct block_device_operations nvme_fops
;
205 extern spinlock_t dev_list_lock
;
207 int nvme_revalidate_disk(struct gendisk
*disk
);
208 int nvme_user_cmd(struct nvme_ctrl
*ctrl
, struct nvme_ns
*ns
,
209 struct nvme_passthru_cmd __user
*ucmd
);
213 int nvme_sg_io(struct nvme_ns
*ns
, struct sg_io_hdr __user
*u_hdr
);
214 int nvme_sg_io32(struct nvme_ns
*ns
, unsigned long arg
);
215 int nvme_sg_get_version_num(int __user
*ip
);
217 int nvme_nvm_ns_supported(struct nvme_ns
*ns
, struct nvme_id_ns
*id
);
218 int nvme_nvm_register(struct request_queue
*q
, char *disk_name
);
219 void nvme_nvm_unregister(struct request_queue
*q
, char *disk_name
);