return -ENODEV; if (nvme_remap_bar(dev, NVME_REG_DBS + 4096)) goto release; return 0; release: pci_release_mem_regions(pdev); return -ENODEV; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 具体步骤: 1.to_pci_dev通过nvme_dev中的通用device找到nvme_dev在pci ...
->dbs = dev->bar + 4096; nvme_map_cmb(dev); pci_enable_pcie_error_reporting(pdev); pci_save_state(pdev); return 0; disable: pci_disable_device(pdev); return result; } //2.2 nvme_reset_work-->nvme_pci_configure_admin_queue介绍 ...
NVME_REG_PMRCTL=0x0e04,/* Persistent Memory Region Control */ NVME_REG_PMRSTS=0x0e08,/* Persistent Memory Region Status */ NVME_REG_DBS=0x1000,/* SQ 0 Tail Doorbell */ }; Expand DownExpand Up@@ -1441,6 +1444,7 @@ enum { ...
.flags = NVME_F_METADATA_SUPPORTED, .reg_read32 = nvme_pci_reg_read32, .reg_write32 = nvme_pci_reg_write32, .reg_read64 = nvme_pci_reg_read64, .free_ctrl = nvme_pci_free_ctrl, .submit_async_event = nvme_pci_submit_async_event, }; 另外NVMe磁盘的操作函数集,例如打开,释放等,结...
u32 __iomem *dbs; structdevice *dev; structdma_pool *prp_page_pool; structdma_pool *prp_small_pool; unsignedonline_queues; unsignedmax_qid; intq_depth; u32 db_stride; void__iomem *bar; unsignedlongbar_mapped_size; structwork_struct remove_work; ...
NVME_REG_PMRMSCL= 0x0e14, /* Persistent Memory Region Controller Memory Space Control Lower */ NVME_REG_PMRMSCU= 0x0e18, /* Persistent Memory Region Controller Memory Space Control Upper*/ NVME_REG_DBS = 0x1000, /* SQ 0 Tail Doorbell */ };45...
u32 __iomem *dbs; structdevice *dev; structdma_pool *prp_page_pool; structdma_pool *prp_small_pool; unsignedonline_queues; unsignedmax_qid; intq_depth; u32 db_stride; void__iomem *bar; unsignedlongbar_mapped_size; structwork_struct remove_work; ...
首先用nvme_remap_bar这个函数完成了bar的映射,这次映射的size是NVME_REG_DBS + 一个queue的大小,这个queue就是admin queue. 再读取NVME_REG_VS寄存器,完成设置dev的subsystem值和写NVME_REG_CSTS寄存器;调用nvme_disable_ctrl关闭nvme设备,这样后面才能开始配置admin queue; ...
(dev->bar + NVME_REG_CAP); dev->q_depth = min_t(int, NVME_CAP_MQES(cap) + 1, NVME_Q_DEPTH); dev->db_stride = 1 << NVME_CAP_STRIDE(cap); dev->dbs = dev->bar + 4096; /* * Temporary fix for the Apple controller found in the MacBook8,1 and * some MacBook7,1 to...
u32 __iomem *dbs; struct device *dev; struct dma_pool *prp_page_pool; struct dma_pool *prp_small_pool; unsigned online_queues; unsigned max_qid; unsigned io_queues[HCTX_MAX_TYPES]; unsigned int num_vecs; u32 q_depth; int io_sqes; ...