1 /* 2 * Copyright (C) 2017 NXP Semiconductors 3 * Copyright (C) 2017 Bin Meng <bmeng.cn@gmail.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 #ifndef __NVME_H__ 9 #define __NVME_H__ 10 11 struct nvme_dev; 12 13 /** 14 * nvme_identify - identify controller or namespace capabilities and status 15 * 16 * This issues an identify command to the NVMe controller to return a data 17 * buffer that describes the controller or namespace capabilities and status. 18 * 19 * @dev: NVMe controller device 20 * @nsid: 0 for controller, namespace id for namespace to identify 21 * @cns: 1 for controller, 0 for namespace 22 * @dma_addr: dma buffer address to store the identify result 23 * @return: 0 on success, -ETIMEDOUT on command execution timeout, 24 * -EIO on command execution fails 25 */ 26 int nvme_identify(struct nvme_dev *dev, unsigned nsid, 27 unsigned cns, dma_addr_t dma_addr); 28 29 /** 30 * nvme_get_features - retrieve the attributes of the feature specified 31 * 32 * This retrieves the attributes of the feature specified. 33 * 34 * @dev: NVMe controller device 35 * @fid: feature id to provide data 36 * @nsid: namespace id the command applies to 37 * @dma_addr: data structure used as part of the specified feature 38 * @result: command-specific result in the completion queue entry 39 * @return: 0 on success, -ETIMEDOUT on command execution timeout, 40 * -EIO on command execution fails 41 */ 42 int nvme_get_features(struct nvme_dev *dev, unsigned fid, unsigned nsid, 43 dma_addr_t dma_addr, u32 *result); 44 45 /** 46 * nvme_set_features - specify the attributes of the feature indicated 47 * 48 * This specifies the attributes of the feature indicated. 49 * 50 * @dev: NVMe controller device 51 * @fid: feature id to provide data 52 * @dword11: command-specific input parameter 53 * @dma_addr: data structure used as part of the specified feature 54 * @result: command-specific result in the completion queue entry 55 * @return: 0 on success, -ETIMEDOUT on command execution timeout, 56 * -EIO on command execution fails 57 */ 58 int nvme_set_features(struct nvme_dev *dev, unsigned fid, unsigned dword11, 59 dma_addr_t dma_addr, u32 *result); 60 61 /** 62 * nvme_scan_namespace - scan all namespaces attached to NVMe controllers 63 * 64 * This probes all registered NVMe uclass device drivers in the system, 65 * and tries to find all namespaces attached to the NVMe controllers. 66 * 67 * @return: 0 on success, -ve on error 68 */ 69 int nvme_scan_namespace(void); 70 71 /** 72 * nvme_print_info - print detailed NVMe controller and namespace information 73 * 74 * This prints out detailed human readable NVMe controller and namespace 75 * information which is very useful for debugging. 76 * 77 * @udev: NVMe controller device 78 * @return: 0 on success, -EIO if NVMe identify command fails 79 */ 80 int nvme_print_info(struct udevice *udev); 81 82 #endif /* __NVME_H__ */ 83