1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2022-2024 Chelsio Communications, Inc. 5 * Written by: John Baldwin <jhb@FreeBSD.org> 6 */ 7 8 #ifndef __NVMF_H__ 9 #define __NVMF_H__ 10 11 #include <sys/ioccom.h> 12 #ifndef _KERNEL 13 #include <stdbool.h> 14 #endif 15 16 /* 17 * Default settings in Fabrics controllers. These match values used by the 18 * Linux target. 19 */ 20 #define NVMF_MAX_IO_ENTRIES (1024) 21 #define NVMF_CC_EN_TIMEOUT (15) /* In 500ms units */ 22 23 /* Allows for a 16k data buffer + SQE */ 24 #define NVMF_IOCCSZ (sizeof(struct nvme_command) + 16 * 1024) 25 #define NVMF_IORCSZ (sizeof(struct nvme_completion)) 26 27 #define NVMF_NN (1024) 28 29 /* 30 * Default settings for Fabrics hosts. These match values used by 31 * Linux. 32 */ 33 #define NVMF_DEFAULT_RECONNECT_DELAY 10 34 #define NVMF_DEFAULT_CONTROLLER_LOSS 600 35 #define NVMF_DEFAULT_IO_ENTRIES 128 36 37 /* 38 * (data, size) is the userspace buffer for a packed nvlist. 39 * 40 * For requests that copyout an nvlist, len is the amount of data 41 * copied out to *data. If size is zero, no data is copied and len is 42 * set to the required buffer size. 43 */ 44 struct nvmf_ioc_nv { 45 void *data; 46 size_t len; 47 size_t size; 48 }; 49 50 /* 51 * The fields in a qpair handoff nvlist are: 52 * 53 * Transport independent: 54 * 55 * bool admin 56 * bool sq_flow_control 57 * number qsize 58 * number sqhd 59 * number sqtail host only 60 * 61 * TCP transport: 62 * 63 * number fd 64 * number rxpda 65 * number txpda 66 * bool header_digests 67 * bool data_digests 68 * number maxr2t 69 * number maxh2cdata 70 * number max_icd 71 */ 72 73 /* 74 * The fields in the nvlist for NVMF_HANDOFF_HOST and 75 * NVMF_RECONNECT_HOST are: 76 * 77 * number trtype 78 * number kato (optional) 79 * number reconnect_delay (optional) 80 * number controller_loss_timeout (optional) 81 * qpair handoff nvlist admin 82 * qpair handoff nvlist array io 83 * binary cdata struct nvme_controller_data 84 * NVMF_RECONNECT_PARAMS nvlist rparams 85 */ 86 87 /* 88 * The fields in the nvlist for NVMF_RECONNECT_PARAMS are: 89 * 90 * binary dle struct nvme_discovery_log_entry 91 * string hostnqn 92 * number num_io_queues 93 * number kato (optional) 94 * number reconnect_delay (optional) 95 * number controller_loss_timeout (optional) 96 * number io_qsize 97 * bool sq_flow_control 98 * 99 * TCP transport: 100 * 101 * bool header_digests 102 * bool data_digests 103 */ 104 105 /* 106 * The fields in the nvlist for NVMF_CONNECTION_STATUS are: 107 * 108 * bool connected 109 * timespec nvlist last_disconnect 110 * number tv_sec 111 * number tv_nsec 112 */ 113 114 /* 115 * The fields in the nvlist for handing off a controller qpair are: 116 * 117 * number trtype 118 * qpair handoff nvlist params 119 * binary cmd struct nvmf_fabric_connect_cmd 120 * binary data struct nvmf_fabric_connect_data 121 */ 122 123 /* Operations on /dev/nvmf */ 124 #define NVMF_HANDOFF_HOST _IOW('n', 200, struct nvmf_ioc_nv) 125 #define NVMF_DISCONNECT_HOST _IOW('n', 201, const char *) 126 #define NVMF_DISCONNECT_ALL _IO('n', 202) 127 128 /* Operations on /dev/nvmeX */ 129 #define NVMF_RECONNECT_PARAMS _IOWR('n', 203, struct nvmf_ioc_nv) 130 #define NVMF_RECONNECT_HOST _IOW('n', 204, struct nvmf_ioc_nv) 131 #define NVMF_CONNECTION_STATUS _IOWR('n', 205, struct nvmf_ioc_nv) 132 133 #endif /* !__NVMF_H__ */ 134