Asuro/src/driver/bus/USB.pas

137 lines
3.5 KiB
ObjectPascal

unit USB;
interface
uses
tracer,
Console,
PCI,
drivertypes,
pmemorymanager,
vmemorymanager,
util,
drivermanagement;
type
POHCI_MMR = ^TOHCI_MMR;
TOHCI_MMR = packed record
HcRevision : uint32;
HcControl : uint32;
HcCommandStatus : uint32;
HcIntStatus : uint32;
HcIntEnable : uint32;
HcIntDisable : uint32;
HcHCCA : uint32;
HcPeriodCurrentED : uint32;
HcControlHeadED : uint32;
HcControlCurrentED : uint32;
HcBulkHeadED : uint32;
HcBulkCurrentED : uint32;
HcDoneHead : uint32;
HcFmRemaining : uint32;
HcFmNumber : uint32;
HcPeriodicStart : uint32;
HcLSThreshold : uint32;
HcRhDescriptorA : uint32;
HcRhDescriptorB : uint32;
HcRhStatus : uint32;
end;
procedure init;
implementation
function loadOHCI(ptr : void) : boolean;
var
devices : TDeviceArray;
count : uint32;
i : uint32;
block : uint32;
MMR : POHCI_MMR;
begin
push_trace('USB.loadOHCI');
devices:= PCI.getDeviceInfo($0C, $03, $10, count);
console.output('USB-OHCI Driver', 'Found ');
console.writeint(count);
console.writestringln(' USB Controller(s).');
if count > 0 then begin
for i:=0 to count-1 do begin
console.output('USB-OHCI Driver', 'Controller[');
console.writeint(i);
console.writestring(']: ');
console.writehex(devices[i].device_id);
console.writestring(' ');
console.writehex(devices[i].vendor_id);
console.writestring(' ');
console.writehexln(devices[i].prog_if);
block:= devices[i].address0 SHR 22;
force_alloc_block(block, 0);
map_page(block, block);
MMR:= POHCI_MMR(devices[i].address0);
end;
end;
loadOHCI:= true;
pop_trace;
end;
function loadUHCI(ptr : void) : boolean;
var
devices : TDeviceArray;
count : uint32;
i : uint32;
begin
push_trace('USB.loadUHCI');
devices:= PCI.getDeviceInfo($0C, $03, $00, count);
console.output('USB-UHCI Driver','Found ');
console.writeint(count);
console.writestringln(' USB Controller(s).');
if count > 0 then begin
for i:=0 to count-1 do begin
console.output('USB-UHCI Driver','Controller[');
console.writeint(i);
console.writestring(']: ');
console.writehex(devices[i].device_id);
console.writestring(' ');
console.writehex(devices[i].vendor_id);
console.writestring(' ');
console.writehexln(devices[i].prog_if);
end;
end;
loadUHCI:= true;
pop_trace;
end;
procedure init;
var
UHCI_ID, OHCI_ID : TDeviceIdentifier;
begin
push_trace('USB.init');
console.outputln('USB Driver', 'INIT BEGIN.');
UHCI_ID.Bus:= biPCI;
UHCI_ID.id0:= idANY;
UHCI_ID.id1:= $0000000C;
UHCI_ID.id2:= $00000003;
UHCI_ID.id3:= $00000000;
UHCI_ID.id4:= $FFFFFFFF;
UHCI_ID.ex:= nil;
OHCI_ID.Bus:= biPCI;
OHCI_ID.id0:= idANY;
OHCI_ID.id1:= $0000000C;
OHCI_ID.id2:= $00000003;
OHCI_ID.id3:= $00000010;
OHCI_ID.id4:= $FFFFFFFF;
OHCI_ID.ex:= nil;
drivermanagement.register_driver('USB-UHCI Driver', @UHCI_ID, @loadUHCI);
drivermanagement.register_driver('USB-OHCI Driver', @OHCI_ID, @loadOHCI);
console.outputln('USB Driver', 'INIT END.');
pop_trace;
end;
end.