303 static int nvme_fill_prp(nvme_cmd_t *, bd_xfer_t *);
304
305 static void nvme_bd_xfer_done(void *);
306 static void nvme_bd_driveinfo(void *, bd_drive_t *);
307 static int nvme_bd_mediainfo(void *, bd_media_t *);
308 static int nvme_bd_cmd(nvme_namespace_t *, bd_xfer_t *, uint8_t);
309 static int nvme_bd_read(void *, bd_xfer_t *);
310 static int nvme_bd_write(void *, bd_xfer_t *);
311 static int nvme_bd_sync(void *, bd_xfer_t *);
312 static int nvme_bd_devid(void *, dev_info_t *, ddi_devid_t *);
313
314 static int nvme_prp_dma_constructor(void *, void *, int);
315 static void nvme_prp_dma_destructor(void *, void *);
316
317 static void nvme_prepare_devid(nvme_t *, uint32_t);
318
319 static int nvme_open(dev_t *, int, int, cred_t *);
320 static int nvme_close(dev_t, int, int, cred_t *);
321 static int nvme_ioctl(dev_t, int, intptr_t, int, cred_t *, int *);
322
323 #define NVME_MINOR_INST_SHIFT 14
324 #define NVME_MINOR(inst, nsid) (((inst) << NVME_MINOR_INST_SHIFT) | (nsid))
325 #define NVME_MINOR_INST(minor) ((minor) >> NVME_MINOR_INST_SHIFT)
326 #define NVME_MINOR_NSID(minor) ((minor) & ((1 << NVME_MINOR_INST_SHIFT) - 1))
327 #define NVME_MINOR_MAX (NVME_MINOR(1, 0) - 2)
328
329 static void *nvme_state;
330 static kmem_cache_t *nvme_cmd_cache;
331
332 /*
333 * DMA attributes for queue DMA memory
334 *
335 * Queue DMA memory must be page aligned. The maximum length of a queue is
336 * 65536 entries, and an entry can be 64 bytes long.
337 */
338 static ddi_dma_attr_t nvme_queue_dma_attr = {
339 .dma_attr_version = DMA_ATTR_V0,
340 .dma_attr_addr_lo = 0,
341 .dma_attr_addr_hi = 0xffffffffffffffffULL,
342 .dma_attr_count_max = (UINT16_MAX + 1) * sizeof (nvme_sqe_t) - 1,
343 .dma_attr_align = 0x1000,
|
303 static int nvme_fill_prp(nvme_cmd_t *, bd_xfer_t *);
304
305 static void nvme_bd_xfer_done(void *);
306 static void nvme_bd_driveinfo(void *, bd_drive_t *);
307 static int nvme_bd_mediainfo(void *, bd_media_t *);
308 static int nvme_bd_cmd(nvme_namespace_t *, bd_xfer_t *, uint8_t);
309 static int nvme_bd_read(void *, bd_xfer_t *);
310 static int nvme_bd_write(void *, bd_xfer_t *);
311 static int nvme_bd_sync(void *, bd_xfer_t *);
312 static int nvme_bd_devid(void *, dev_info_t *, ddi_devid_t *);
313
314 static int nvme_prp_dma_constructor(void *, void *, int);
315 static void nvme_prp_dma_destructor(void *, void *);
316
317 static void nvme_prepare_devid(nvme_t *, uint32_t);
318
319 static int nvme_open(dev_t *, int, int, cred_t *);
320 static int nvme_close(dev_t, int, int, cred_t *);
321 static int nvme_ioctl(dev_t, int, intptr_t, int, cred_t *, int *);
322
323 #define NVME_MINOR_INST_SHIFT 9
324 #define NVME_MINOR(inst, nsid) (((inst) << NVME_MINOR_INST_SHIFT) | (nsid))
325 #define NVME_MINOR_INST(minor) ((minor) >> NVME_MINOR_INST_SHIFT)
326 #define NVME_MINOR_NSID(minor) ((minor) & ((1 << NVME_MINOR_INST_SHIFT) - 1))
327 #define NVME_MINOR_MAX (NVME_MINOR(1, 0) - 2)
328
329 static void *nvme_state;
330 static kmem_cache_t *nvme_cmd_cache;
331
332 /*
333 * DMA attributes for queue DMA memory
334 *
335 * Queue DMA memory must be page aligned. The maximum length of a queue is
336 * 65536 entries, and an entry can be 64 bytes long.
337 */
338 static ddi_dma_attr_t nvme_queue_dma_attr = {
339 .dma_attr_version = DMA_ATTR_V0,
340 .dma_attr_addr_lo = 0,
341 .dma_attr_addr_hi = 0xffffffffffffffffULL,
342 .dma_attr_count_max = (UINT16_MAX + 1) * sizeof (nvme_sqe_t) - 1,
343 .dma_attr_align = 0x1000,
|