blob: 8375d61e022f8227cd8ba70f93071113f99c2e67 [file] [log] [blame]
Zhikang Zhang982388e2017-08-03 02:30:57 -07001/*
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
11struct 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 */
26int 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 */
42int 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 */
58int 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 */
69int nvme_scan_namespace(void);
70
Zhikang Zhangf6aa61d2017-08-03 02:30:58 -070071/**
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 */
80int nvme_print_info(struct udevice *udev);
81
Zhikang Zhang982388e2017-08-03 02:30:57 -070082#endif /* __NVME_H__ */