xref: /freebsd/sys/dev/nvme/nvme_if.m (revision aed44717a1606e4c5c79f7c8831de49cba64d7e6)
1e5c770dcSWarner Losh# Copyright (c) 2025 Netlix, Inc
2e5c770dcSWarner Losh#
3e5c770dcSWarner Losh# SPDX-License-Identifier: BSD-2-Clause
4e5c770dcSWarner Losh#
5e5c770dcSWarner Losh
6e5c770dcSWarner Losh# Interface from the NVME controller to its children to notify it of certain
7e5c770dcSWarner Losh# interesting events.
8e5c770dcSWarner Losh
9e5c770dcSWarner LoshINTERFACE nvme;
10e5c770dcSWarner Losh
11e5c770dcSWarner LoshHEADER {
12e5c770dcSWarner Losh	#include "dev/nvme/nvme_private.h"
13e5c770dcSWarner Losh};
14e5c770dcSWarner Losh
15e5c770dcSWarner Losh#
16e5c770dcSWarner Losh# A new namespace is now available
17e5c770dcSWarner Losh#
18e5c770dcSWarner LoshMETHOD int ns_added {
19e5c770dcSWarner Losh	device_t	dev;		/* nvme device */
20e5c770dcSWarner Losh	struct nvme_namespace *ns;	/* information about the namespace */
21e5c770dcSWarner Losh};
22e5c770dcSWarner Losh
23e5c770dcSWarner Losh#
24e5c770dcSWarner Losh# A namespace has been removed
25e5c770dcSWarner Losh#
26e5c770dcSWarner LoshMETHOD int ns_removed {
27e5c770dcSWarner Losh	device_t	dev;		/* nvme device */
28e5c770dcSWarner Losh	struct nvme_namespace *ns;	/* information about the namespace */
29e5c770dcSWarner Losh};
30e5c770dcSWarner Losh
31e5c770dcSWarner Losh#
32e5c770dcSWarner Losh# A namespace has been changed somehow
33e5c770dcSWarner Losh#
34e5c770dcSWarner LoshMETHOD int ns_changed {
35e5c770dcSWarner Losh	device_t	dev;		/* nvme device */
36*aed44717SWarner Losh	uint32_t	nsid;		/* nsid that just changed */
37e5c770dcSWarner Losh};
38e5c770dcSWarner Losh
39e5c770dcSWarner Losh#
40e5c770dcSWarner Losh# The controller has failed
41e5c770dcSWarner Losh#
42e5c770dcSWarner LoshMETHOD int controller_failed {
43e5c770dcSWarner Losh	device_t	dev;		/* nvme device */
44e5c770dcSWarner Losh};
45e5c770dcSWarner Losh
46e5c770dcSWarner Losh#
47e5c770dcSWarner Losh# Async completion
48e5c770dcSWarner Losh#
49e5c770dcSWarner LoshMETHOD int handle_aen {
50e5c770dcSWarner Losh	device_t	dev;		/* nvme device */
51e5c770dcSWarner Losh	const struct nvme_completion *cpl; /* Completion for this async event */
52e5c770dcSWarner Losh	uint32_t	pg_nr;		/* Page number reported by async event */
53e5c770dcSWarner Losh	void		*page;		/* Contents of the page */
54e5c770dcSWarner Losh	uint32_t	page_len;	/* Length of the page */
55e5c770dcSWarner Losh};
56