2#include "pedigree/kernel/ServiceManager.h"
3#include "pedigree/kernel/linker/KernelElf.h"
4#include "pedigree/kernel/machine/Disk.h"
5#include "pedigree/kernel/machine/PciDrivers.h"
6#include "pedigree/kernel/panic.h"
7#include "pedigree/kernel/utilities/new"
9#include "NvmeController.h"
10#include "modules/Module.h"
17 if (!controller->initialiseController()) {
18 controller->shutdown();
24 controller->setParent(pci);
27 auto& services = ServiceManager::instance();
28 for (
size_t i = 0; i < controller->getNumChildren(); ++i) {
29 auto* disk =
static_cast<Disk*
>(controller->getChild(i));
35bool prepareRemove(
Device* controller) {
36 return static_cast<NvmeController*
>(controller)->prepareDiskRemoval();
39void cancelRemove(
Device* controller) {
43void remove(
Device* device) {
45 controller->shutdown();
56Module::UnloadAdmission admitUnload(
bool) {
57 return PciDrivers::prepareUnregisterDriver(&driver) ? Module::UnloadAdmission::Ready
58 : Module::UnloadAdmission::Busy;
65 return PciDrivers::registerDriver(&driver);
69 if (!PciDrivers::unregisterDriver(&driver)) {
70 panic(
"NVMe: PCI driver registration still owns live bindings during unload");
74MODULE_INFO(
"nvme", &entry, &exit,
"pci",
"scsi");
void addChild(Device *pDevice)
Device * getParent() const
void setParent(Device *p)
void removeChild(size_t n)
static KernelElf & instance()
void EXPORTED_PUBLIC panic(const char *msg) NORETURN