/* SPDX-License-Identifier: BSD-3-Clause * Copyright (c) Intel Corporation. * All rights reserved. */ /** \file * VMD driver public interface */ #ifndef SPDK_VMD_H #define SPDK_VMD_H #include "spdk/stdinc.h" #ifdef __cplusplus extern "C" { #endif #include "spdk/env.h" /* Maximum VMD devices - up to 6 per cpu */ #define MAX_VMD_TARGET 24 /** * Enumerate VMD devices and hook them into the spdk pci subsystem * * \return 0 on success, -1 on failure */ int spdk_vmd_init(void); /** * Release any resources allocated by the VMD library via spdk_vmd_init(). */ void spdk_vmd_fini(void); /** * Returns a list of nvme devices found on the given vmd pci BDF. * * \param vmd_addr pci BDF of the vmd device to return end device list * \param nvme_list buffer of exactly MAX_VMD_TARGET to return spdk_pci_device array. * * \return Returns count of nvme device attached to input VMD. */ int spdk_vmd_pci_device_list(struct spdk_pci_addr vmd_addr, struct spdk_pci_device *nvme_list); /** State of the LEDs */ enum spdk_vmd_led_state { SPDK_VMD_LED_STATE_OFF, SPDK_VMD_LED_STATE_IDENTIFY, SPDK_VMD_LED_STATE_FAULT, SPDK_VMD_LED_STATE_REBUILD, SPDK_VMD_LED_STATE_UNKNOWN, }; /** * Sets the state of the LED on specified PCI device. The device needs to be behind VMD. * * \param pci_device PCI device * \param state LED state to set * * \return 0 on success, negative errno otherwise */ int spdk_vmd_set_led_state(struct spdk_pci_device *pci_device, enum spdk_vmd_led_state state); /** * Retrieves the state of the LED on specified PCI device. The device needs to be behind VMD. * * \param pci_device PCI device * \param state current LED state * * \return 0 on success, negative errno otherwise */ int spdk_vmd_get_led_state(struct spdk_pci_device *pci_device, enum spdk_vmd_led_state *state); /** * Checks for hotplug/hotremove events of the devices behind the VMD. Needs to be called * periodically to detect them. * * \return number of hotplug events detected or negative errno in case of errors */ int spdk_vmd_hotplug_monitor(void); #ifdef __cplusplus } #endif #endif /* SPDK_VMD_H */