FFS.
git-svn-id: https://spexeah.com:8443/svn/Asuro@388 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
4eb04ec8ef
commit
df1fbd44b0
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/E1000.ppu
BIN
lib/E1000.ppu
Binary file not shown.
BIN
lib/PCI.ppu
BIN
lib/PCI.ppu
Binary file not shown.
BIN
lib/USB.ppu
BIN
lib/USB.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libpsystem.a
BIN
lib/libpsystem.a
Binary file not shown.
@ -19,6 +19,10 @@ uses
|
|||||||
vmemorymanager,
|
vmemorymanager,
|
||||||
drivermanagement;
|
drivermanagement;
|
||||||
|
|
||||||
|
const
|
||||||
|
PCI_PORT_CONF_ADDR = $CF8;
|
||||||
|
PCI_PORT_CONF_DATA = $CFC;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
TPCI_Device_Bridge = bitpacked record
|
TPCI_Device_Bridge = bitpacked record
|
||||||
@ -72,6 +76,8 @@ procedure init();
|
|||||||
procedure scanBus(bus : uint8);
|
procedure scanBus(bus : uint8);
|
||||||
function loadDeviceConfig(bus : uint8; slot : uint8; func : uint8) : boolean;
|
function loadDeviceConfig(bus : uint8; slot : uint8; func : uint8) : boolean;
|
||||||
function getDeviceInfo(class_code : uint8; subclass_code : uint8; prog_if : uint8; var count : uint32) : TdeviceArray; //(Will in future)returns TPCI_DEVICE.vendor_id := 0xFFFF if no device found.
|
function getDeviceInfo(class_code : uint8; subclass_code : uint8; prog_if : uint8; var count : uint32) : TdeviceArray; //(Will in future)returns TPCI_DEVICE.vendor_id := 0xFFFF if no device found.
|
||||||
|
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
|
||||||
|
procedure writeConfig(bus: uint8; slot : uint8; func : uint8; row : uint8; val : uint32);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -131,18 +137,47 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{
|
||||||
|
void pci_config_write_dword(uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint32_t val)
|
||||||
|
|
||||||
|
uint32_t addr;
|
||||||
|
uint32_t lbus = (uint32_t)bus;
|
||||||
|
uint32_t lslot = (uint32_t)slot;
|
||||||
|
uint32_t lfunc = (uint32_t)func;
|
||||||
|
|
||||||
|
addr = (uint32_t)((lbus<<16) | (lslot << 11) | (lfunc << 8) |
|
||||||
|
(offset & 0xfc) | ((uint32_t)0x80000000));
|
||||||
|
outl(PCI_PORT_CONF_ADDR, addr);
|
||||||
|
io_wait();
|
||||||
|
outl(PCI_PORT_CONF_DATA, val);
|
||||||
|
io_wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
procedure writeConfig(bus: uint8; slot : uint8; func : uint8; row : uint8; val : uint32);
|
||||||
|
var
|
||||||
|
addr : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
addr := ($1 shl 31);
|
||||||
|
addr := addr or (bus shl 16);
|
||||||
|
addr := addr or ((slot) shl 11);
|
||||||
|
addr := addr or ((func) shl 8);
|
||||||
|
addr := addr or ((row) shl 2);
|
||||||
|
outl(PCI_PORT_CONF_ADDR, addr);
|
||||||
|
outl(PCI_PORT_CONF_DATA, val);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
|
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
|
||||||
var
|
var
|
||||||
packet : uint32;
|
addr : uint32;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
packet := ($1 shl 31);
|
addr := ($1 shl 31);
|
||||||
packet := packet or (bus shl 16);
|
addr := addr or (bus shl 16);
|
||||||
packet := packet or ((slot) shl 11);
|
addr := addr or ((slot) shl 11);
|
||||||
packet := packet or ((func) shl 8);
|
addr := addr or ((func) shl 8);
|
||||||
packet := packet or ((row) shl 2);
|
addr := addr or ((row) shl 2);
|
||||||
|
outl(PCI_PORT_CONF_ADDR, addr);
|
||||||
outl($CF8, uint32(packet));
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure loadBusConfig(bus : uint8; slot : uint8; func : uint8; device : TPCI_Device);
|
procedure loadBusConfig(bus : uint8; slot : uint8; func : uint8; device : TPCI_Device);
|
||||||
@ -233,6 +268,10 @@ begin
|
|||||||
|
|
||||||
loadDeviceConfig := false;
|
loadDeviceConfig := false;
|
||||||
|
|
||||||
|
device.bus:= bus;
|
||||||
|
device.slot:= slot;
|
||||||
|
device.func:= func;
|
||||||
|
|
||||||
requestConfig(bus, slot, func, 0);
|
requestConfig(bus, slot, func, 0);
|
||||||
data := inl($CFC);
|
data := inl($CFC);
|
||||||
device.device_id := getword(data, false);
|
device.device_id := getword(data, false);
|
||||||
|
@ -14,6 +14,9 @@ type
|
|||||||
|
|
||||||
PPCI_Device = ^TPCI_Device;
|
PPCI_Device = ^TPCI_Device;
|
||||||
TPCI_Device = bitpacked record
|
TPCI_Device = bitpacked record
|
||||||
|
bus : uint8;
|
||||||
|
slot : uint8;
|
||||||
|
func : uint8;
|
||||||
device_id : uint16;
|
device_id : uint16;
|
||||||
vendor_id : uint16;
|
vendor_id : uint16;
|
||||||
status : uint16;
|
status : uint16;
|
||||||
|
@ -9,7 +9,9 @@ uses
|
|||||||
lmemorymanager,
|
lmemorymanager,
|
||||||
drivermanagement,
|
drivermanagement,
|
||||||
drivertypes,
|
drivertypes,
|
||||||
util;
|
util,
|
||||||
|
IDT,
|
||||||
|
PCI;
|
||||||
|
|
||||||
const
|
const
|
||||||
INTEL_VEND = $8086;
|
INTEL_VEND = $8086;
|
||||||
@ -125,7 +127,6 @@ type
|
|||||||
TCardType = (ctUnknown, ctE1000, ctI217, ct82577LM);
|
TCardType = (ctUnknown, ctE1000, ctI217, ct82577LM);
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
procedure fire();
|
|
||||||
function getMACAddress : puint8;
|
function getMACAddress : puint8;
|
||||||
function sendPacket(p_data : void; p_len : uint16) : sint32;
|
function sendPacket(p_data : void; p_len : uint16) : sint32;
|
||||||
|
|
||||||
@ -323,7 +324,9 @@ end;
|
|||||||
|
|
||||||
procedure enableInturrupt();
|
procedure enableInturrupt();
|
||||||
begin
|
begin
|
||||||
|
writeCommand(REG_IMASK, $1F6DC);
|
||||||
|
writeCommand(REG_IMASK, $FF AND NOT(4));
|
||||||
|
readCommand($C0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure handleReceive();
|
procedure handleReceive();
|
||||||
@ -355,9 +358,33 @@ begin
|
|||||||
console.writestringln(' ');
|
console.writestringln(' ');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure fire(); interrupt;
|
||||||
|
var
|
||||||
|
status : uint32;
|
||||||
|
begin
|
||||||
|
status:= readCommand($0C);
|
||||||
|
console.writehexln(status);
|
||||||
|
case status of
|
||||||
|
$04:begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
$10:begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
$80:begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
console.writestringln('Fired.');
|
||||||
|
end;
|
||||||
|
|
||||||
function load(ptr : void) : boolean;
|
function load(ptr : void) : boolean;
|
||||||
var
|
var
|
||||||
PCI_Info : PPCI_Device;
|
PCI_Info : PPCI_Device;
|
||||||
|
i : uint32;
|
||||||
|
data : uint32;
|
||||||
|
iline : uint8;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
console.outputln('E1000 Driver', 'Load Start.');
|
console.outputln('E1000 Driver', 'Load Start.');
|
||||||
|
|
||||||
@ -384,6 +411,16 @@ begin
|
|||||||
writeMACAddress();
|
writeMACAddress();
|
||||||
|
|
||||||
startLink();
|
startLink();
|
||||||
|
|
||||||
|
for i:=0 to $80 do begin
|
||||||
|
writeCommand($5200 + i*4, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0);
|
||||||
|
enableInturrupt();
|
||||||
|
rxinit();
|
||||||
|
txinit();
|
||||||
|
|
||||||
load:= true;
|
load:= true;
|
||||||
console.outputln('E1000 Driver', 'Load Finish.');
|
console.outputln('E1000 Driver', 'Load Finish.');
|
||||||
end;
|
end;
|
||||||
@ -435,11 +472,6 @@ begin
|
|||||||
drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load82577LM);
|
drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load82577LM);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure fire();
|
|
||||||
begin
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
function getMACAddress : puint8;
|
function getMACAddress : puint8;
|
||||||
begin
|
begin
|
||||||
getMACAddress:= puint8(@mac[0]);
|
getMACAddress:= puint8(@mac[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user