1/*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2023-2024 Chelsio Communications, Inc.
5 * Written by: John Baldwin <jhb@FreeBSD.org>
6 */
7
8#ifndef __INTERNAL_H__
9#define	__INTERNAL_H__
10
11#include <stdbool.h>
12
13struct controller;
14struct nvme_command;
15struct nvme_controller_data;
16struct nvme_ns_list;
17struct nvmf_capsule;
18struct nvmf_qpair;
19
20typedef bool handle_command(const struct nvmf_capsule *,
21    const struct nvme_command *, void *);
22
23extern bool data_digests;
24extern bool header_digests;
25extern bool flow_control_disable;
26extern bool kernel_io;
27
28/* controller.c */
29void	controller_handle_admin_commands(struct controller *c,
30    handle_command *cb, void *cb_arg);
31struct controller *init_controller(struct nvmf_qpair *qp,
32    const struct nvme_controller_data *cdata);
33void	free_controller(struct controller *c);
34
35/* discovery.c */
36void	init_discovery(void);
37void	handle_discovery_socket(int s);
38void	discovery_add_io_controller(int s, const char *subnqn);
39
40/* io.c */
41void	init_io(const char *subnqn);
42void	handle_io_socket(int s);
43void	shutdown_io(void);
44
45/* devices.c */
46void	register_devices(int ac, char **av);
47u_int	device_count(void);
48void	device_active_nslist(uint32_t nsid, struct nvme_ns_list *nslist);
49bool	device_identification_descriptor(uint32_t nsid, void *buf);
50bool	device_namespace_data(uint32_t nsid, struct nvme_namespace_data *nsdata);
51void	device_read(uint32_t nsid, uint64_t lba, u_int nlb,
52    const struct nvmf_capsule *nc);
53void	device_write(uint32_t nsid, uint64_t lba, u_int nlb,
54    const struct nvmf_capsule *nc);
55void	device_flush(uint32_t nsid, const struct nvmf_capsule *nc);
56
57/* ctl.c */
58void	init_ctl_port(const char *subnqn,
59    const struct nvmf_association_params *params);
60void	ctl_handoff_qpair(struct nvmf_qpair *qp,
61    const struct nvmf_fabric_connect_cmd *cmd,
62    const struct nvmf_fabric_connect_data *data);
63void	shutdown_ctl_port(const char *subnqn);
64
65#endif /* !__INTERNAL_H__ */
66