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 struct nvmf_handoff_qpair_params { 30 bool admin; 31 bool sq_flow_control; 32 u_int qsize; 33 uint16_t sqhd; 34 uint16_t sqtail; /* host only */ 35 union { 36 struct { 37 int fd; 38 uint8_t rxpda; 39 uint8_t txpda; 40 bool header_digests; 41 bool data_digests; 42 uint32_t maxr2t; 43 uint32_t maxh2cdata; 44 uint32_t max_icd; 45 } tcp; 46 }; 47 }; 48 49 struct nvmf_handoff_host { 50 u_int trtype; 51 u_int num_io_queues; 52 u_int kato; 53 struct nvmf_handoff_qpair_params admin; 54 struct nvmf_handoff_qpair_params *io; 55 const struct nvme_controller_data *cdata; 56 }; 57 58 struct nvmf_reconnect_params { 59 uint16_t cntlid; 60 char subnqn[256]; 61 }; 62 63 struct nvmf_handoff_controller_qpair { 64 u_int trtype; 65 struct nvmf_handoff_qpair_params params; 66 const struct nvmf_fabric_connect_cmd *cmd; 67 const struct nvmf_fabric_connect_data *data; 68 }; 69 70 /* Operations on /dev/nvmf */ 71 #define NVMF_HANDOFF_HOST _IOW('n', 200, struct nvmf_handoff_host) 72 #define NVMF_DISCONNECT_HOST _IOW('n', 201, const char *) 73 #define NVMF_DISCONNECT_ALL _IO('n', 202) 74 75 /* Operations on /dev/nvmeX */ 76 #define NVMF_RECONNECT_PARAMS _IOR('n', 203, struct nvmf_reconnect_params) 77 #define NVMF_RECONNECT_HOST _IOW('n', 204, struct nvmf_handoff_host) 78 79 #endif /* !__NVMF_H__ */ 80