1d86edc18SJohn Baldwin /*- 2d86edc18SJohn Baldwin * SPDX-License-Identifier: BSD-2-Clause 3d86edc18SJohn Baldwin * 4d86edc18SJohn Baldwin * Copyright (c) 2022-2024 Chelsio Communications, Inc. 5d86edc18SJohn Baldwin * Written by: John Baldwin <jhb@FreeBSD.org> 6d86edc18SJohn Baldwin */ 7d86edc18SJohn Baldwin 8d86edc18SJohn Baldwin #ifndef __NVMF_H__ 9d86edc18SJohn Baldwin #define __NVMF_H__ 10d86edc18SJohn Baldwin 11d86edc18SJohn Baldwin #include <sys/ioccom.h> 12d86edc18SJohn Baldwin #ifndef _KERNEL 13d86edc18SJohn Baldwin #include <stdbool.h> 14d86edc18SJohn Baldwin #endif 15d86edc18SJohn Baldwin 16d86edc18SJohn Baldwin /* 17d86edc18SJohn Baldwin * Default settings in Fabrics controllers. These match values used by the 18d86edc18SJohn Baldwin * Linux target. 19d86edc18SJohn Baldwin */ 20d86edc18SJohn Baldwin #define NVMF_MAX_IO_ENTRIES (1024) 21d86edc18SJohn Baldwin #define NVMF_CC_EN_TIMEOUT (15) /* In 500ms units */ 22d86edc18SJohn Baldwin 23d86edc18SJohn Baldwin /* Allows for a 16k data buffer + SQE */ 24d86edc18SJohn Baldwin #define NVMF_IOCCSZ (sizeof(struct nvme_command) + 16 * 1024) 25d86edc18SJohn Baldwin #define NVMF_IORCSZ (sizeof(struct nvme_completion)) 26d86edc18SJohn Baldwin 27d86edc18SJohn Baldwin #define NVMF_NN (1024) 28d86edc18SJohn Baldwin 29365b89e8SJohn Baldwin /* 30365b89e8SJohn Baldwin * (data, size) is the userspace buffer for a packed nvlist. 31365b89e8SJohn Baldwin * 32365b89e8SJohn Baldwin * For requests that copyout an nvlist, len is the amount of data 33365b89e8SJohn Baldwin * copied out to *data. If size is zero, no data is copied and len is 34365b89e8SJohn Baldwin * set to the required buffer size. 35365b89e8SJohn Baldwin */ 36365b89e8SJohn Baldwin struct nvmf_ioc_nv { 37365b89e8SJohn Baldwin void *data; 38365b89e8SJohn Baldwin size_t len; 39365b89e8SJohn Baldwin size_t size; 40d86edc18SJohn Baldwin }; 41d86edc18SJohn Baldwin 42365b89e8SJohn Baldwin /* 43365b89e8SJohn Baldwin * The fields in a qpair handoff nvlist are: 44365b89e8SJohn Baldwin * 45365b89e8SJohn Baldwin * Transport independent: 46365b89e8SJohn Baldwin * 47365b89e8SJohn Baldwin * bool admin 48365b89e8SJohn Baldwin * bool sq_flow_control 49365b89e8SJohn Baldwin * number qsize 50365b89e8SJohn Baldwin * number sqhd 51365b89e8SJohn Baldwin * number sqtail host only 52365b89e8SJohn Baldwin * 53365b89e8SJohn Baldwin * TCP transport: 54365b89e8SJohn Baldwin * 55365b89e8SJohn Baldwin * number fd 56365b89e8SJohn Baldwin * number rxpda 57365b89e8SJohn Baldwin * number txpda 58365b89e8SJohn Baldwin * bool header_digests 59365b89e8SJohn Baldwin * bool data_digests 60365b89e8SJohn Baldwin * number maxr2t 61365b89e8SJohn Baldwin * number maxh2cdata 62365b89e8SJohn Baldwin * number max_icd 63365b89e8SJohn Baldwin */ 64d86edc18SJohn Baldwin 65365b89e8SJohn Baldwin /* 66365b89e8SJohn Baldwin * The fields in the nvlist for NVMF_HANDOFF_HOST and 67365b89e8SJohn Baldwin * NVMF_RECONNECT_HOST are: 68365b89e8SJohn Baldwin * 69365b89e8SJohn Baldwin * number trtype 70365b89e8SJohn Baldwin * number kato (optional) 71365b89e8SJohn Baldwin * qpair handoff nvlist admin 72365b89e8SJohn Baldwin * qpair handoff nvlist array io 73365b89e8SJohn Baldwin * binary cdata struct nvme_controller_data 74*8bba2c0fSJohn Baldwin * NVMF_RECONNECT_PARAMS nvlist rparams 75365b89e8SJohn Baldwin */ 76d86edc18SJohn Baldwin 77365b89e8SJohn Baldwin /* 78365b89e8SJohn Baldwin * The fields in the nvlist for NVMF_RECONNECT_PARAMS are: 79365b89e8SJohn Baldwin * 80*8bba2c0fSJohn Baldwin * binary dle struct nvme_discovery_log_entry 81*8bba2c0fSJohn Baldwin * string hostnqn 82*8bba2c0fSJohn Baldwin * number num_io_queues 83*8bba2c0fSJohn Baldwin * number kato (optional) 84*8bba2c0fSJohn Baldwin * number io_qsize 85*8bba2c0fSJohn Baldwin * bool sq_flow_control 86*8bba2c0fSJohn Baldwin * 87*8bba2c0fSJohn Baldwin * TCP transport: 88*8bba2c0fSJohn Baldwin * 89*8bba2c0fSJohn Baldwin * bool header_digests 90*8bba2c0fSJohn Baldwin * bool data_digests 91365b89e8SJohn Baldwin */ 92365b89e8SJohn Baldwin 93365b89e8SJohn Baldwin /* 94365b89e8SJohn Baldwin * The fields in the nvlist for handing off a controller qpair are: 95365b89e8SJohn Baldwin * 96365b89e8SJohn Baldwin * number trtype 97365b89e8SJohn Baldwin * qpair handoff nvlist params 98365b89e8SJohn Baldwin * binary cmd struct nvmf_fabric_connect_cmd 99365b89e8SJohn Baldwin * binary data struct nvmf_fabric_connect_data 100365b89e8SJohn Baldwin */ 101d86edc18SJohn Baldwin 102d86edc18SJohn Baldwin /* Operations on /dev/nvmf */ 103365b89e8SJohn Baldwin #define NVMF_HANDOFF_HOST _IOW('n', 200, struct nvmf_ioc_nv) 104d86edc18SJohn Baldwin #define NVMF_DISCONNECT_HOST _IOW('n', 201, const char *) 105d86edc18SJohn Baldwin #define NVMF_DISCONNECT_ALL _IO('n', 202) 106d86edc18SJohn Baldwin 107d86edc18SJohn Baldwin /* Operations on /dev/nvmeX */ 108365b89e8SJohn Baldwin #define NVMF_RECONNECT_PARAMS _IOWR('n', 203, struct nvmf_ioc_nv) 109365b89e8SJohn Baldwin #define NVMF_RECONNECT_HOST _IOW('n', 204, struct nvmf_ioc_nv) 110d86edc18SJohn Baldwin 111d86edc18SJohn Baldwin #endif /* !__NVMF_H__ */ 112