git-svn-id: https://spexeah.com:8443/svn/Asuro@401 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c

This commit is contained in:
kieron 2018-04-08 13:41:49 +00:00
parent 2f5f4a1173
commit 1eb4c3190e
12 changed files with 26 additions and 6 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -15,7 +15,7 @@ uses
util,
console,
drivertypes,
lmemorymanager,
lmemorymanager,
vmemorymanager,
drivermanagement;
@ -78,6 +78,7 @@ 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.
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
procedure writeConfig(bus: uint8; slot : uint8; func : uint8; row : uint8; val : uint32);
procedure setBusMaster(bus : uint8; slot : uint8; func : uint8; master : boolean);
implementation
@ -166,6 +167,23 @@ begin
outl(PCI_PORT_CONF_DATA, val);
end;
procedure setBusMaster(bus : uint8; slot : uint8; func : uint8; master : boolean);
var
data : uint32;
begin
requestConfig(bus, slot, func, 1);
data := inl($CFC);
if master then begin
data := data OR $00000004;
end else begin
data := data AND $FFFFFFFB;
end;
writeConfig(bus, slot, func, 1, data);
requestConfig(bus, slot, func, 1);
data := inl($CFC);
end;
procedure requestConfig(bus : uint8; slot : uint8; func : uint8; row : uint8);
var
addr : uint32;

View File

@ -308,7 +308,7 @@ var
i : uint32;
begin
ptr:= puint8(kalloc(sizeof(TE1000_tx_desc) * E1000_NUM_TX_DESC + 16));
ptr:= puint8(kalloc(sizeof(TE1000_tx_desc) * (E1000_NUM_TX_DESC + 16)));
descs:= PE1000_tx_desc(ptr);
for i:=0 to E1000_NUM_TX_DESC do begin
tx_descs[i]:= PE1000_tx_desc(uint32(descs + i*16));
@ -432,7 +432,9 @@ begin
kpalloc(io_base);
kpalloc(mem_base);
setBusMaster(PCI_Info^.bus, PCI_Info^.slot, PCI_Info^.func, true);
eeprom_exists:= false;
detectEEPROM();
if eeprom_exists then console.outputln('E1000 Driver', 'EEPROM Exists: YES.') else console.outputln('E1000 Driver', 'EEPROM Exists: NO.');
if not readMACAddress() then begin
@ -449,14 +451,14 @@ begin
writeCommand($5200 + i*4, 0);
end;
//IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0);
//enableInturrupt();
IDT.set_gate(32 + PCI_Info^.interrupt_line, uint32(@fire), $08, ISR_RING_0);
enableInturrupt();
rxinit();
txinit();
load:= true;
if load then registercommand('E1000_SEND_TEST', @console_command_sendtest, 'Test sending a ARP Request');
if load then registercommand('E1000', @console_command_sendtest, 'Test sending a ARP Request');
console.outputln('E1000 Driver', 'Load Finish.');
end;
@ -518,7 +520,7 @@ var
old_cur : uint8;
begin
tx_descs[tx_curr]^.address:= uint64(p_data - KERNEL_VIRTUAL_BASE);
tx_descs[tx_curr]^.address:= uint32(uint32(p_data) - KERNEL_VIRTUAL_BASE);
tx_descs[tx_curr]^.length:= p_len;
tx_descs[tx_curr]^.cmd:= CMD_EOP OR CMD_IFCS OR CMD_RS OR CMD_RPS;
tx_descs[tx_curr]^.status:= 0;