1252265Sjimharris/*-
2252265Sjimharris * Copyright (C) 2012-2013 Intel Corporation
3252265Sjimharris * All rights reserved.
4252265Sjimharris *
5252265Sjimharris * Redistribution and use in source and binary forms, with or without
6252265Sjimharris * modification, are permitted provided that the following conditions
7252265Sjimharris * are met:
8252265Sjimharris * 1. Redistributions of source code must retain the above copyright
9252265Sjimharris *    notice, this list of conditions and the following disclaimer.
10252265Sjimharris * 2. Redistributions in binary form must reproduce the above copyright
11252265Sjimharris *    notice, this list of conditions and the following disclaimer in the
12252265Sjimharris *    documentation and/or other materials provided with the distribution.
13252265Sjimharris *
14252265Sjimharris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15252265Sjimharris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16252265Sjimharris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17252265Sjimharris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18252265Sjimharris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19252265Sjimharris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20252265Sjimharris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21252265Sjimharris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22252265Sjimharris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23252265Sjimharris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24252265Sjimharris * SUCH DAMAGE.
25252265Sjimharris *
26252265Sjimharris * $FreeBSD$
27252265Sjimharris */
28252265Sjimharris
29252265Sjimharris#ifndef __NVMECONTROL_H__
30252265Sjimharris#define __NVMECONTROL_H__
31252265Sjimharris
32252265Sjimharris#include <dev/nvme/nvme.h>
33252265Sjimharris
34252270Sjimharris#define NVME_CTRLR_PREFIX	"nvme"
35252270Sjimharris#define NVME_NS_PREFIX		"ns"
36252270Sjimharris
37252265Sjimharris#define DEVLIST_USAGE							       \
38252265Sjimharris"       nvmecontrol devlist\n"
39252265Sjimharris
40252265Sjimharris#define IDENTIFY_USAGE							       \
41253116Sjimharris"       nvmecontrol identify [-x [-v]] <controller id|namespace id>\n"
42252265Sjimharris
43252265Sjimharris#define PERFTEST_USAGE							       \
44252265Sjimharris"       nvmecontrol perftest <-n num_threads> <-o read|write>\n"	       \
45252265Sjimharris"                            <-s size_in_bytes> <-t time_in_seconds>\n"	       \
46252265Sjimharris"                            <-i intr|wait> [-f refthread] [-p]\n"	       \
47252265Sjimharris"                            <namespace id>\n"
48252265Sjimharris
49252265Sjimharris#define RESET_USAGE							       \
50252265Sjimharris"       nvmecontrol reset <controller id>\n"
51252265Sjimharris
52252277Sjimharris#define LOGPAGE_USAGE							       \
53252277Sjimharris"       nvmecontrol logpage <-p page_id> [-x] <controller id|namespace id>\n"  \
54252277Sjimharris
55252278Sjimharris#define FIRMWARE_USAGE							       \
56252278Sjimharris"       nvmecontrol firmware [-s slot] [-f path_to_firmware] [-a] <controller id>\n"
57252278Sjimharris
58252265Sjimharrisvoid devlist(int argc, char *argv[]);
59252266Sjimharrisvoid identify(int argc, char *argv[]);
60252267Sjimharrisvoid perftest(int argc, char *argv[]);
61252268Sjimharrisvoid reset(int argc, char *argv[]);
62252277Sjimharrisvoid logpage(int argc, char *argv[]);
63252278Sjimharrisvoid firmware(int argc, char *argv[]);
64252265Sjimharris
65252269Sjimharrisint open_dev(const char *str, int *fd, int show_error, int exit_on_error);
66253114Sjimharrisvoid parse_ns_str(const char *ns_str, char *ctrlr_str, int *nsid);
67252269Sjimharrisvoid read_controller_data(int fd, struct nvme_controller_data *cdata);
68252269Sjimharrisvoid read_namespace_data(int fd, int nsid, struct nvme_namespace_data *nsdata);
69252275Sjimharrisvoid print_hex(void *data, uint32_t length);
70252277Sjimharrisvoid read_logpage(int fd, uint8_t log_page, int nsid, void *payload,
71252277Sjimharris    uint32_t payload_size);
72252269Sjimharris
73252265Sjimharris#endif
74252265Sjimharris
75