1*2f7b0de1SJohn Baldwin /*- 2*2f7b0de1SJohn Baldwin * SPDX-License-Identifier: BSD-2-Clause 3*2f7b0de1SJohn Baldwin * 4*2f7b0de1SJohn Baldwin * Copyright (c) 2023-2024 Chelsio Communications, Inc. 5*2f7b0de1SJohn Baldwin * Written by: John Baldwin <jhb@FreeBSD.org> 6*2f7b0de1SJohn Baldwin */ 7*2f7b0de1SJohn Baldwin 8*2f7b0de1SJohn Baldwin #ifndef __NVMFT_SUBR_H__ 9*2f7b0de1SJohn Baldwin #define __NVMFT_SUBR_H__ 10*2f7b0de1SJohn Baldwin 11*2f7b0de1SJohn Baldwin /* 12*2f7b0de1SJohn Baldwin * Lower-level controller-specific routines shared between the kernel 13*2f7b0de1SJohn Baldwin * and userland. 14*2f7b0de1SJohn Baldwin */ 15*2f7b0de1SJohn Baldwin 16*2f7b0de1SJohn Baldwin /* Validate a NVMe Qualified Name. */ 17*2f7b0de1SJohn Baldwin bool nvmf_nqn_valid(const char *nqn); 18*2f7b0de1SJohn Baldwin 19*2f7b0de1SJohn Baldwin /* Compute the initial state of CAP for a controller. */ 20*2f7b0de1SJohn Baldwin uint64_t _nvmf_controller_cap(uint32_t max_io_qsize, uint8_t enable_timeout); 21*2f7b0de1SJohn Baldwin 22*2f7b0de1SJohn Baldwin /* 23*2f7b0de1SJohn Baldwin * Validate if a new value for CC is legal given the existing values of 24*2f7b0de1SJohn Baldwin * CAP and CC. 25*2f7b0de1SJohn Baldwin */ 26*2f7b0de1SJohn Baldwin bool _nvmf_validate_cc(uint32_t max_io_qsize, uint64_t cap, uint32_t old_cc, 27*2f7b0de1SJohn Baldwin uint32_t new_cc); 28*2f7b0de1SJohn Baldwin 29*2f7b0de1SJohn Baldwin /* Generate a serial number string from a host ID. */ 30*2f7b0de1SJohn Baldwin void nvmf_controller_serial(char *buf, size_t len, u_long hostid); 31*2f7b0de1SJohn Baldwin 32*2f7b0de1SJohn Baldwin /* 33*2f7b0de1SJohn Baldwin * Copy an ASCII string into the destination buffer but pad the end of 34*2f7b0de1SJohn Baldwin * the buffer with spaces and no terminating nul. 35*2f7b0de1SJohn Baldwin */ 36*2f7b0de1SJohn Baldwin void nvmf_strpad(char *dst, const char *src, size_t len); 37*2f7b0de1SJohn Baldwin 38*2f7b0de1SJohn Baldwin /* 39*2f7b0de1SJohn Baldwin * Populate an Identify Controller data structure for an I/O 40*2f7b0de1SJohn Baldwin * controller. 41*2f7b0de1SJohn Baldwin */ 42*2f7b0de1SJohn Baldwin void _nvmf_init_io_controller_data(uint16_t cntlid, uint32_t max_io_qsize, 43*2f7b0de1SJohn Baldwin const char *serial, const char *model, const char *firmware_version, 44*2f7b0de1SJohn Baldwin const char *subnqn, int nn, uint32_t ioccsz, uint32_t iorcsz, 45*2f7b0de1SJohn Baldwin struct nvme_controller_data *cdata); 46*2f7b0de1SJohn Baldwin 47*2f7b0de1SJohn Baldwin #endif /* !__NVMFT_SUBR_H__ */ 48