2#include "pedigree/kernel/Log.h"
3#include "pedigree/kernel/linker/KernelElf.h"
4#include "pedigree/kernel/utilities/List.h"
5#include "pedigree/kernel/utilities/new"
7#include "NvmeController.h"
8#include "modules/Module.h"
19Module::UnloadAdmission admitUnload(
bool) {
20 for (
auto* controller : controllers) {
21 if (!controller->prepareDiskRemoval()) {
22 for (
auto* rollback : controllers)
23 rollback->cancelDiskRemoval();
24 return Module::UnloadAdmission::Busy;
27 return Module::UnloadAdmission::Ready;
30 Device::searchByClassSubclassAndProgInterface(1, 8, 2, collect);
31 while (candidates.
count()) {
34 if (!controller->initialiseController()) {
35 controller->shutdown();
41 controller->setParent(pci);
46 if (!controllers.
count())
51 while (controllers.
count()) {
53 controller->shutdown();
63MODULE_INFO(
"nvme", &entry, &exit,
"pci",
"scsi");
Device * getChild(size_t n)
void addChild(Device *pDevice)
virtual const String & getSpecificType()
Device * getParent() const
void setParent(Device *p)
void removeChild(size_t n)
bool registerUnloadAdmission(ModuleEntry ownerEntry, Module::UnloadAdmissionHook hook)
static KernelElf & instance()
void pushBack(const T &value)