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