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