17#include "pedigree/kernel/Log.h"
18#include "pedigree/kernel/linker/KernelElf.h"
19#include "pedigree/kernel/machine/Machine.h"
20#include "pedigree/kernel/utilities/List.h"
21#include "pedigree/kernel/utilities/new"
23#include "AhciController.h"
24#include "modules/Module.h"
30void collect(
Device* device) {
31 for (
size_t i = 0; i < device->getNumChildren(); ++i) {
32 if (device->getChild(i)->getSpecificType() ==
String(
"ahci-controller"))
38Module::UnloadAdmission admitUnload(
bool) {
39 for (
auto* controller : controllers) {
40 if (!controller->prepareDiskRemoval()) {
41 for (
auto* rollback : controllers)
42 rollback->cancelDiskRemoval();
43 return Module::UnloadAdmission::Busy;
46 return Module::UnloadAdmission::Ready;
50 Device::searchByClassSubclassAndProgInterface(0x01, 0x06, 0x01, collect);
51 while (candidates.
count()) {
54 if (!controller->initialiseController()) {
55 controller->shutdown();
61 controller->setParent(pci);
66 if (!controllers.
count()) {
67 NOTICE(
"AHCI: no supported SATA disks found");
74 while (controllers.
count()) {
76 controller->shutdown();
89MODULE_INFO(
"ahci", &entry, &exit,
"pci",
"scsi");
void addChild(Device *pDevice)
Device * getParent() const
void setParent(Device *p)
void removeChild(size_t n)
bool registerUnloadAdmission(ModuleEntry ownerEntry, Module::UnloadAdmissionHook hook)
static KernelElf & instance()
static void setShutdownDetail(const char *detail)
void pushBack(const T &value)