test
This commit is contained in:
1 parent
232f6b5485
commit
8b80b6864b
6 files changed
+1295
-7
No files matched your search
+585
File diff suppressed because it is too large.
Load diff
@@ -108,7 +108,13 @@ begin
|
||||
|
||||
port^.sata_ctrl := port^.sata_ctrl or $FFFF0000;
|
||||
|
||||
timeout := 0;
|
||||
while (port^.sata_status and $F) <> 3 do begin
|
||||
timeout := timeout + 1; /////////////////////////////////
|
||||
if timeout > 1000 then begin
|
||||
console.writestringln('AHCI: Port reset timeout (waiting for device ready).');
|
||||
break;
|
||||
end;
|
||||
//wait for the port to be ready
|
||||
end;
|
||||
|
||||
@@ -187,6 +193,9 @@ begin
|
||||
device := PAHCI_Device(@controller^.devices[i]);
|
||||
device^.port := port;
|
||||
|
||||
console.writestring('AHCI: TFD: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
|
||||
//check if the port is active TODO
|
||||
|
||||
console.writestring('AHCI: signature: ');
|
||||
@@ -214,8 +223,11 @@ begin
|
||||
|
||||
//NEEED TO STOP the port before doing anything
|
||||
stop_port(port);
|
||||
console.writestringln('AHCI: Port stopped');
|
||||
reset_port(port);
|
||||
|
||||
console.writestringln('AHCI: Port stopped');
|
||||
console.writestring('AHCI: TFD: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
//allocate memory for the command list and ensure it is aligned to 1024 bytes
|
||||
cmd_list_base := kalloc(sizeof(THBA_CMD_HEADER) * 64);
|
||||
cmd_list_base := puint32((uint32(cmd_list_base) + 1023) and $FFFFFC00);
|
||||
@@ -260,10 +272,14 @@ begin
|
||||
command_header^.cmd_table_base := vtop(uint32(cmd_table_base)) + (ii * sizeof(THBA_CMD_TABLE));
|
||||
command_header^.cmd_table_baseu := 0;
|
||||
end;
|
||||
|
||||
console.writestring('AHCI: TFD aft mem: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
//reset the port
|
||||
reset_port(port);
|
||||
|
||||
console.writestring('AHCI: TFD aft res: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
|
||||
//print sata status
|
||||
console.writestring('AHCI: sata status: ');
|
||||
console.writehexln(port^.sata_status);
|
||||
@@ -299,6 +315,21 @@ begin
|
||||
console.writeintln(portIndex);
|
||||
device := PAHCI_Device(@controller^.devices[portIndex]);
|
||||
|
||||
console.writestring('AHCI: Error sata register: ');
|
||||
console.writehexln(device^.port^.sata_error);
|
||||
|
||||
//print out busy flag
|
||||
console.writestring('AHCI: Status: ');
|
||||
console.writehexln(device^.port^.sata_status);
|
||||
|
||||
//print sata active flag
|
||||
console.writestring('AHCI: Active flag: ');
|
||||
console.writehexln(device^.port^.sata_active);
|
||||
|
||||
//print tfd
|
||||
console.writestring('AHCI: TFD: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
|
||||
// (Optional) Print the device type if you store it:
|
||||
console.writestring('AHCI: Device type: ');
|
||||
// For example: if device^.device_type = SATA then ...
|
||||
@@ -349,7 +380,7 @@ begin
|
||||
end else begin
|
||||
fis^.command := ATA_CMD_IDENTIFY;
|
||||
end;
|
||||
fis^.device := $A0; // LBA mode 40?
|
||||
fis^.device := $40;
|
||||
|
||||
//waut for the port to be ready, bit 7 in the TFD register and bit 3 tfd
|
||||
while (device^.port^.tfd and $88) <> 0 do begin
|
||||
@@ -393,12 +424,24 @@ begin
|
||||
console.writestringln('AHCI: Command complete');
|
||||
|
||||
// Check for an error flag in the command register (bit 1)
|
||||
if (cmd and $2) <> 0 then begin
|
||||
if (cmd and $2 ) + 1 <> 0 then begin
|
||||
console.writestringln('AHCI: Error sending identify command');
|
||||
|
||||
// Check the error register for more information
|
||||
console.writestring('AHCI: Error register: ');
|
||||
console.writestring('AHCI: Error sata register: ');
|
||||
console.writehexln(device^.port^.sata_error);
|
||||
|
||||
//print out busy flag
|
||||
console.writestring('AHCI: Status: ');
|
||||
console.writehexln(device^.port^.sata_status);
|
||||
|
||||
//print sata active flag
|
||||
console.writestring('AHCI: Active flag: ');
|
||||
console.writehexln(device^.port^.sata_active);
|
||||
|
||||
//print tfd
|
||||
console.writestring('AHCI: TFD: ');
|
||||
console.writehexln(device^.port^.tfd);
|
||||
end;
|
||||
|
||||
// Dump the 512-byte IDENTIFY data for debugging (display 64 DWORDs)
|
||||
@@ -445,6 +488,31 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
// procedure controller_reset(controller : PAHCI_Controller);
|
||||
// begin
|
||||
// //check sam TODO
|
||||
// if (controller^.mio^.capabilites2 and $1) = 0 then begin
|
||||
// console.writestringln('AHCI: Controller does not support reset');
|
||||
// exit;
|
||||
// end;
|
||||
|
||||
// //check ghc.ae is set to 1
|
||||
// if (controller^.mio^.global_ctrl and $1) = 0 then begin
|
||||
// console.writestringln('AHCI: Controller is not enabled');
|
||||
// controller^.mio^.global_ctrl := controller^.mio^.global_ctrl or $1;
|
||||
// end;
|
||||
|
||||
// while (controller^.mio^.global_ctrl and $1) <> 0 do begin
|
||||
// //wait for the controller to be ready
|
||||
// end;
|
||||
|
||||
// //set the reset bit
|
||||
// controller^.mio^.global_ctrl := controller^.mio^.global_ctrl or $2;
|
||||
|
||||
|
||||
|
||||
// end;
|
||||
|
||||
function load(ptr : void) : boolean;
|
||||
var
|
||||
device : PPCI_Device;
|
||||
@@ -520,6 +588,12 @@ begin
|
||||
console.writestringln('AHCI: BIOS not holding controller or handoff already complete.');
|
||||
end;
|
||||
|
||||
//print ghc
|
||||
console.writestring('AHCI: GHC: ');
|
||||
console.writebin32ln(base^.global_ctrl);
|
||||
|
||||
base^.global_ctrl := base^.global_ctrl or AHCI_CONTROLLER_MODE;
|
||||
|
||||
base^.global_ctrl := base^.global_ctrl or 1;
|
||||
|
||||
while (base^.global_ctrl and 1) <> 0 do begin
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -109,7 +109,7 @@ type
|
||||
base : uint16;
|
||||
ctrl : uint16;
|
||||
bmide : uint16;
|
||||
noInter : uint8
|
||||
noInter : uint8;
|
||||
end;
|
||||
|
||||
TIDE_Status = bitpacked record
|
||||
@@ -122,6 +122,7 @@ type
|
||||
IDDEX : Boolean;
|
||||
ERROR : Boolean;
|
||||
end;
|
||||
|
||||
PIDE_Status = ^TIDE_Status;
|
||||
|
||||
TIDE_Device = record
|
||||
|
||||
@@ -47,6 +47,9 @@ var
|
||||
|
||||
function get_volume_list() : PDList;
|
||||
|
||||
//utility functions
|
||||
function controller_type_2_string(controllerType : TControllerType) : pchar;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
@@ -105,4 +108,33 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// UTILITY FUNCTIONS ///
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
{!!
|
||||
@function(controller_type_2_string)
|
||||
@desc(Converts a controller type to a string representation.)
|
||||
@param(controllerType : TControllerType)
|
||||
@return(pchar)
|
||||
!!}
|
||||
function controller_type_2_string(controllerType : TControllerType) : pchar;
|
||||
begin
|
||||
push_trace('VolumeManager.controller_type_2_string');
|
||||
|
||||
case controllerType of
|
||||
ControllerATA: controller_type_2_string := 'ATA';
|
||||
ControllerATAPI: controller_type_2_string := 'ATAPI';
|
||||
ControllerUSB: controller_type_2_string := 'USB';
|
||||
ControllerAHCI: controller_type_2_string := 'AHCI';
|
||||
ControllerAHCI_ATAPI: controller_type_2_string := 'AHCI_ATAPI';
|
||||
ControllerNVMe: controller_type_2_string := 'NVMe';
|
||||
ControllerNET: controller_type_2_string := 'NET';
|
||||
ControllerRAM: controller_type_2_string := 'RAM';
|
||||
ControllerSCSI: controller_type_2_string := 'SCSI';
|
||||
end;
|
||||
|
||||
pop_trace();
|
||||
end;
|
||||
|
||||
end.
|
||||
+3
-1
@@ -58,7 +58,8 @@ uses
|
||||
rand,
|
||||
terminal,
|
||||
hashmap, vfs,
|
||||
AHCI;
|
||||
AHCI,
|
||||
AHCITest;
|
||||
|
||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||
|
||||
@@ -231,6 +232,7 @@ begin
|
||||
E1000.init();
|
||||
// IDE.init();
|
||||
AHCI.init();
|
||||
AHCITest.init();
|
||||
console.outputln('KERNEL', 'DEVICE DRIVERS: INIT END.');
|
||||
|
||||
{ Bus Drivers }
|
||||
|
||||
Reference in new issue
Block a user