Improve logs on AHCI boot prototyping, update IDE DVD boot function order documentation.

This commit is contained in:
TomAwezome 2021-05-25 16:20:40 -04:00
parent 6dbaae46f5
commit 24853fa765
3 changed files with 75 additions and 18 deletions

View file

@ -6,23 +6,62 @@ $WW$
- ATAPI RW
$FG,7$ZenithOS DVD IDE Boot function order$FG$
$FG,7$ZenithOS IDE DVD Boot function order list and summary$FG$
$HL,1$
KMain // Kernel/KMain.CC
KMain // $LK+PU,"Kernel/KMain.CC",A="FF:::/Kernel/KMain.CC,KMain"$
...
BlkDevsInitAll // Kernel/BlkDev/DiskAddDev.CC
[KConfigAddDev] // Kernel/KConfig.CC
Mount2 // Zenith/ZBlkDev/Mount.CC
BlkDevNextFreeSlot // Kernel/BlkDev/DiskBlkDev.CC
BlkDevsInitAll // $LK+PU,"Kernel/BlkDev/DiskAddDev.CC",A="FF:::/Kernel/BlkDev/DiskAddDev.CC,BlkDevsInitAll"$
[KConfigAddDev] // $LK+PU,"Kernel/KConfig.CC",A="FF:::/Kernel/KConfig.CC,KConfigAddDev"$
Mount2 // $LK+PU,"Zenith/ZBlkDev/Mount.CC",A="FF:::/Zenith/ZBlkDev/Mount.CC,Mount2"$
BlkDevNextFreeSlot // $LK+PU,"Kernel/BlkDev/DiskBlkDev.CC",A="FF:::/Kernel/BlkDev/DiskBlkDev.CC,BlkDevNextFreeSlot"$
...
GetBaseUnit // Kernel/BlkDev/DiskAddDev.CC
BootDVDProbeAll // Kernel/BlkDev/DiskATAId.CC
GetBaseUnit // $LK+PU,"Kernel/BlkDev/DiskAddDev.CC",A="FF:::/Kernel/BlkDev/DiskAddDev.CC,GetBaseUnit"$
BootDVDProbeAll // $LK+PU,"Kernel/BlkDev/DiskATAId.CC",A="FF:::/Kernel/BlkDev/DiskATAId.CC,BootDVDProbeAll"$
j = PCIClassFind(0x010100 + k, ++i);
...
BootDVDProbe // Kernel/BlkDev/DiskATAId.CC
ATAProbe // Kernel/BlkDev/DiskATA.CC
ATAPIStartStop // Kernel/BlkDev/DiskATA.CC
ATAPIReadBlks2 // Kernel/BlkDev/DiskATA.CC
BlkDevAdd // Kernel/BlkDev/DiskAddDev.CC
BootDVDProbe // $LK+PU,"Kernel/BlkDev/DiskATAId.CC",A="FF:::/Kernel/BlkDev/DiskATAId.CC,BootDVDProbe"$
ATAProbe // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAProbe"$
ATAGetDevId // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAGetDevId"$
ATAPIStartStop // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIStartStop"$
ATAPIWritePacketWord // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIWritePacketWord"$
ATAPIReadBlks2 // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIReadBlks2"$
ATAInit // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAInit"$
ATAReadNativeMax // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAReadNativeMax"$
ATAGetDevId // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAGetDevId"$
ATABlkSel // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATABlkSel"$
ATAPIStartStop // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIStartStop"$
ATAPIWritePacketWord// $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIWritePacketWord"$
BlkDevAdd // $LK+PU,"Kernel/BlkDev/DiskAddDev.CC",A="FF:::/Kernel/BlkDev/DiskAddDev.CC,BlkDevAdd"$
DriveMakeFreeSlot // $LK+PU,"Kernel/BlkDev/DiskDrive.CC",A="FF:::/Kernel/BlkDev/DiskDrive.CC,DriveMakeFreeSlot"$
DiskChange // $LK+PU,"Kernel/BlkDev/DiskDrive.CC",A="FF:::/Kernel/BlkDev/DiskDrive.CC,U0 DiskChange"$
BlkDevInit // $LK+PU,"Kernel/BlkDev/DiskBlkDev.CC",A="FF:::/Kernel/BlkDev/DiskBlkDev.CC,BlkDevInit"$
ATAInit // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAInit"$
ATAReadNativeMax // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAReadNativeMax"$
ATAGetDevId // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAGetDevId"$
ATABlkSel // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATABlkSel"$
ATAPIStartStop // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIStartStop"$
ATAPIWritePacketWord // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIWritePacketWord"$
DiskCacheInvalidate // $LK+PU,"Kernel/BlkDev/DiskDrive.CC",A="FF:::/Kernel/BlkDev/DiskDrive.CC,U0 DiskCacheInvalidate"$
DiskCheck // $LK+PU,"Zenith/ZBlkDev/DiskCheck.CC",A="FF:::/Zenith/ZBlkDev/DiskCheck.CC,DiskCheck"$
BlkDevInit // $LK+PU,"Kernel/BlkDev/DiskBlkDev.CC",A="FF:::/Kernel/BlkDev/DiskBlkDev.CC,BlkDevInit"$
...
ISOInit // $LK+PU,"Kernel/BlkDev/DiskCDDVD.CC",A="FF:::/Kernel/BlkDev/DiskCDDVD.CC,ISOInit"$
BlkRead // $LK+PU,"Kernel/BlkDev/DiskBlk.CC",A="FF:::/Kernel/BlkDev/DiskBlk.CC,BlkRead"$
ATARBlks // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATARBlks"$
ATAPIReadBlks // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIReadBlks:2"$
ATAPIReadBlks2 // $LK+PU,"Kernel/BlkDev/DiskATA.CC",A="FF:::/Kernel/BlkDev/DiskATA.CC,ATAPIReadBlks2"$
...
Drive // $LK+PU,"Kernel/BlkDev/DiskDrive.CC",A="FF:::/Kernel/BlkDev/DiskDrive.CC,Bool Drive("$
BlkDevCheck // $LK+PU,"Kernel/BlkDev/DiskBlkDev.CC",A="FF:::/Kernel/BlkDev/DiskBlkDev.CC,CBlkDev *BlkDevCheck("$
...$HL,0$
$HL,0$

View file

@ -53,23 +53,41 @@ Bool BootDVDProbeAll(CBlkDev *bd)
Bts(&hba->ghc, AHCI_GHCf_HBA_RESET);
while (Bt(&hba->ghc, AHCI_GHCf_HBA_RESET));
Bts(&hba->ghc, AHCI_GHCf_AHCI_ENABLE);
if (Bt(&hba->caps_ext, AHCI_CAPSEXTf_BOH))
{
"Transferring AHCI ownership from BIOS.\n\n";
Bt(&hba->bohc, AHCI_BOHCf_OOS);
while (Bt(&hba->bohc, AHCI_BOHCf_BOS));
Sleep(25);
if (Bt(&hba->bohc, AHCI_BOHCf_BB)) //if Bios Busy is still set after 25 mS, wait 2 seconds.
Sleep(2000);
}
blkdev.ahci64 = Bt(&hba->caps, AHCI_CAPSf_S64A);
blkdev.cmd_slot_count = (hba->caps & 0x1F00) >> 8;
blkdev.ahci_hba = hba;
"ahci64: %Z\n", blkdev.ahci64, "ST_FALSE_TRUE";
"ahci cmd slots: %d\n\n", blkdev.cmd_slot_count;
for (i = 0; i < AHCI_MAX_PORTS; i++)
{
if (Bt(&hba->ports_implemented, i))
{
"AHCI Port %d implemented.\n", i;
port = &hba->ports[i];
"Port Signature: 0x%08X\n", port->signature;
if (port->signature == AHCI_PxSIG_ATAPI)
"ATAPI drive detected on AHCI Port %d\n", i;
"ATAPI drive detected on AHCI Port %d.\n", i;
else if (port->signature == AHCI_PxSIG_ATA)
"ATA drive detected on AHCI Port %d\n", i;
"ATA drive detected on AHCI Port %d.\n", i;
"\n";
}
}
"\n\nReboot with IDE Compatibility mode set in the BIOS.\n";
"Reboot with IDE Compatibility mode set in the BIOS.\n";
SysHlt;
}
/********************/
bd->base1 = 0;
for (k = 0; k < 256; k++)
{