xref: /freebsd/sys/dev/nvmf/controller/nvmft_subr.h (revision 2f7b0de1de4749e24608fc89a2db63e723c253d2)
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