17#include "pedigree/kernel/Log.h"
18#include "pedigree/kernel/linker/KernelElf.h"
19#include "pedigree/kernel/utilities/List.h"
20#include "pedigree/kernel/utilities/new"
22#include "AhciController.h"
23#include "modules/Module.h"
29void collect(
Device* device) {
30 for (
size_t i = 0; i < device->getNumChildren(); ++i) {
31 if (device->getChild(i)->getSpecificType() ==
String(
"ahci-controller"))
37Module::UnloadAdmission admitUnload(
bool) {
38 for (
auto* controller : controllers) {
39 if (!controller->prepareDiskRemoval()) {
40 for (
auto* rollback : controllers)
41 rollback->cancelDiskRemoval();
42 return Module::UnloadAdmission::Busy;
45 return Module::UnloadAdmission::Ready;
49 Device::searchByClassSubclassAndProgInterface(0x01, 0x06, 0x01, collect);
50 while (candidates.
count()) {
53 if (!controller->initialiseController()) {
54 controller->shutdown();
60 controller->setParent(pci);
65 if (!controllers.
count()) {
66 NOTICE(
"AHCI: no supported SATA disks found");
73 while (controllers.
count()) {
75 controller->shutdown();
86MODULE_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()
void pushBack(const T &value)