git-svn-id: https://spexeah.com:8443/svn/Asuro@352 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
91d6c8a608
commit
78910b6fcc
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/AHCI.ppu
Normal file
BIN
lib/AHCI.ppu
Normal file
Binary file not shown.
BIN
lib/ATA.ppu
Normal file
BIN
lib/ATA.ppu
Normal file
Binary file not shown.
BIN
lib/E1000.ppu
Normal file
BIN
lib/E1000.ppu
Normal file
Binary file not shown.
BIN
lib/PCI.ppu
BIN
lib/PCI.ppu
Binary file not shown.
BIN
lib/USB.ppu
Normal file
BIN
lib/USB.ppu
Normal file
Binary file not shown.
BIN
lib/drivermanagement.ppu
Normal file
BIN
lib/drivermanagement.ppu
Normal file
Binary file not shown.
BIN
lib/drivertypes.ppu
Normal file
BIN
lib/drivertypes.ppu
Normal file
Binary file not shown.
BIN
lib/isr76.ppu
Normal file
BIN
lib/isr76.ppu
Normal file
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
BIN
lib/keyboard.ppu
BIN
lib/keyboard.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.
BIN
lib/mouse.ppu
BIN
lib/mouse.ppu
Binary file not shown.
BIN
lib/strings.ppu
Normal file
BIN
lib/strings.ppu
Normal file
Binary file not shown.
BIN
lib/testdriver.ppu
Normal file
BIN
lib/testdriver.ppu
Normal file
Binary file not shown.
227
src/driver/E1000.pas
Normal file
227
src/driver/E1000.pas
Normal file
@ -0,0 +1,227 @@
|
||||
unit E1000;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
console,
|
||||
strings,
|
||||
vmemorymanager,
|
||||
lmemorymanager,
|
||||
drivermanagement;
|
||||
|
||||
const
|
||||
INTEL_VEND = $8086;
|
||||
E1000_DEV = $100E;
|
||||
I217_DEV = $153A;
|
||||
LM82577_DEV = $10EA;
|
||||
|
||||
REG_CTRL = $0000;
|
||||
REG_STATUS = $0008;
|
||||
REG_EEPROM = $0014;
|
||||
REG_CTRL_EXT = $0018;
|
||||
REG_IMASK = $00D0;
|
||||
REG_RCTRL = $0100;
|
||||
REG_RXDESCLO = $2800;
|
||||
REG_RXDESCHI = $2804;
|
||||
REG_RXDESCLEN = $2808;
|
||||
REG_RXDESCHEAD = $2810;
|
||||
REG_RXDESCTAIL = $2818;
|
||||
|
||||
REG_TCTRL = $0400;
|
||||
REG_TXDESCLO = $3800;
|
||||
REG_TXDESCHI = $3804;
|
||||
REG_TXDESCLEN = $3808;
|
||||
REG_TXDESCHEAD = $3810;
|
||||
REG_TXDESCTAIL = $3818;
|
||||
|
||||
REG_RDTR = $2820; // RX Delay Timer Register
|
||||
REG_RXDCTL = $3828; // RX Descriptor Control
|
||||
REG_RADV = $282C; // RX Int. Absolute Delay Timer
|
||||
REG_RSRPD = $2C00; // RX Small Packet Detect Interrupt
|
||||
|
||||
REG_TIPG = $0410; // Transmit Inter Packet Gap
|
||||
ECTRL_SLU = $40; //set link up
|
||||
|
||||
RCTL_EN = (1 SHL 1); // Receiver Enable
|
||||
RCTL_SBP = (1 SHL 2); // Store Bad Packets
|
||||
RCTL_UPE = (1 SHL 3); // Unicast Promiscuous Enabled
|
||||
RCTL_MPE = (1 SHL 4); // Multicast Promiscuous Enabled
|
||||
RCTL_LPE = (1 SHL 5); // Long Packet Reception Enable
|
||||
RCTL_LBM_NONE = (0 SHL 6); // No Loopback
|
||||
RCTL_LBM_PHY = (3 SHL 6); // PHY or external SerDesc loopback
|
||||
RTCL_RDMTS_HALF = (0 SHL 8); // Free Buffer Threshold is 1/2 of RDLEN
|
||||
RTCL_RDMTS_QUARTER = (1 SHL 8); // Free Buffer Threshold is 1/4 of RDLEN
|
||||
RTCL_RDMTS_EIGHTH = (2 SHL 8); // Free Buffer Threshold is 1/8 of RDLEN
|
||||
RCTL_MO_36 = (0 SHL 12); // Multicast Offset - bits 47:36
|
||||
RCTL_MO_35 = (1 SHL 12); // Multicast Offset - bits 46:35
|
||||
RCTL_MO_34 = (2 SHL 12); // Multicast Offset - bits 45:34
|
||||
RCTL_MO_32 = (3 SHL 12); // Multicast Offset - bits 43:32
|
||||
RCTL_BAM = (1 SHL 15); // Broadcast Accept Mode
|
||||
RCTL_VFE = (1 SHL 18); // VLAN Filter Enable
|
||||
RCTL_CFIEN = (1 SHL 19); // Canonical Form Indicator Enable
|
||||
RCTL_CFI = (1 SHL 20); // Canonical Form Indicator Bit Value
|
||||
RCTL_DPF = (1 SHL 22); // Discard Pause Frames
|
||||
RCTL_PMCF = (1 SHL 23); // Pass MAC Control Frames
|
||||
RCTL_SECRC = (1 SHL 26); // Strip Ethernet CRC
|
||||
|
||||
// Buffer Sizes
|
||||
RCTL_BSIZE_256 = (3 SHL 16);
|
||||
RCTL_BSIZE_512 = (2 SHL 16);
|
||||
RCTL_BSIZE_1024 = (1 SHL 16);
|
||||
RCTL_BSIZE_2048 = (0 SHL 16);
|
||||
RCTL_BSIZE_4096 = ((3 SHL 16) OR (1 SHL 25));
|
||||
RCTL_BSIZE_8192 = ((2 SHL 16) OR (1 SHL 25));
|
||||
RCTL_BSIZE_16384 = ((1 SHL 16) OR (1 SHL 25));
|
||||
|
||||
// Transmit Command
|
||||
CMD_EOP = (1 SHL 0); // End of Packet
|
||||
CMD_IFCS = (1 SHL 1); // Insert FCS
|
||||
CMD_IC = (1 SHL 2); // Insert Checksum
|
||||
CMD_RS = (1 SHL 3); // Report Status
|
||||
CMD_RPS = (1 SHL 4); // Report Packet Sent
|
||||
CMD_VLE = (1 SHL 6); // VLAN Packet Enable
|
||||
CMD_IDE = (1 SHL 7); // Interrupt Delay Enable
|
||||
|
||||
// TCTL Register
|
||||
TCTL_EN = (1 SHL 1); // Transmit Enable
|
||||
TCTL_PSP = (1 SHL 3); // Pad Short Packets
|
||||
TCTL_CT_SHIFT = 4; // Collision Threshold
|
||||
TCTL_COLD_SHIFT = 12; // Collision Distance
|
||||
TCTL_SWXOFF = (1 SHL 22); // Software XOFF Transmission
|
||||
TCTL_RTLC = (1 SHL 24); // Re-transmit on Late Collision
|
||||
|
||||
TSTA_DD = (1 SHL 0); // Descriptor Done
|
||||
TSTA_EC = (1 SHL 1); // Excess Collisions
|
||||
TSTA_LC = (1 SHL 2); // Late Collision
|
||||
LSTA_TU = (1 SHL 3); // Transmit Underrun
|
||||
|
||||
type
|
||||
PE1000_rx_desc = ^TE1000_rx_desc;
|
||||
TE1000_rx_desc = bitpacked record
|
||||
address : uint64;
|
||||
length : uint16;
|
||||
checksum : uint16;
|
||||
status : uint8;
|
||||
errors : uint8;
|
||||
special : uint16;
|
||||
end;
|
||||
|
||||
PE1000_tx_desc = ^TE1000_tx_desc;
|
||||
TE1000_tx_desc = bitpacked record
|
||||
address : uint64;
|
||||
length : uint16;
|
||||
cso : uint8;
|
||||
cmd : uint8;
|
||||
status : uint8;
|
||||
css : uint8;
|
||||
special : uint16;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
procedure fire();
|
||||
function getMACAddress : uint8;
|
||||
function sendPacket(p_data : void; p_len : uint16) : sint32;
|
||||
|
||||
implementation
|
||||
|
||||
var
|
||||
bar_type : uint8;
|
||||
io_base : uint16;
|
||||
mem_base : uint64;
|
||||
eeprom_exists : boolean;
|
||||
mac : array[0..5] of uint8;
|
||||
rx_descs : array[0..65535] of TE1000_rx_desc;
|
||||
tx_descs : array[0..65535] of TE1000_tx_desc;
|
||||
rx_curr : uint16;
|
||||
tx_curr : uint16;
|
||||
|
||||
procedure writeCommand(p_address : uint16; p_value : uint32);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function readCommand(p_address : uint16) : uint32;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function detectEEPROM() : boolean;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function EEPROMRead( address : uint8 ) : uint32;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function readMACAddress() : boolean;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure startLink();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure rxinit();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure txinit();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure enableInturrupt();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
procedure handleReceive();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function load(ptr : void) : boolean;
|
||||
begin
|
||||
load:= true;
|
||||
end;
|
||||
|
||||
procedure init();
|
||||
var
|
||||
dev : TDeviceIdentifier;
|
||||
|
||||
begin
|
||||
dev.Bus:= biPCI;
|
||||
dev.id0:= E1000_DEV;
|
||||
dev.id1:= idANY;
|
||||
dev.id2:= idANY;
|
||||
dev.id3:= idANY;
|
||||
dev.id4:= INTEL_VEND;
|
||||
dev.ex:= nil;
|
||||
drivermanagement.register_driver('E1000 Ethernet Driver', @dev, @load);
|
||||
dev.id0:= I217_DEV;
|
||||
drivermanagement.register_driver('I217 Ethernet Driver', @dev, @load);
|
||||
dev.id0:= LM82577_DEV;
|
||||
drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load);
|
||||
end;
|
||||
|
||||
procedure fire();
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function getMACAddress : uint8;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function sendPacket(p_data : void; p_len : uint16) : sint32;
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
end.
|
@ -313,6 +313,7 @@ begin
|
||||
DevID^.id1:= device.class_code;
|
||||
DevID^.id2:= device.subclass_class;
|
||||
DevID^.id3:= device.prog_if;
|
||||
DevID^.id4:= device.vendor_id;
|
||||
DevID^.ex:= nil;
|
||||
|
||||
console.writestring('PCI: Found Device: ');
|
||||
|
@ -110,6 +110,7 @@ begin
|
||||
UHCI_ID.id1:= $0000000C;
|
||||
UHCI_ID.id2:= $00000003;
|
||||
UHCI_ID.id3:= $00000000;
|
||||
UHCI_ID.id4:= $FFFFFFFF;
|
||||
UHCI_ID.ex:= nil;
|
||||
|
||||
OHCI_ID.Bus:= biPCI;
|
||||
@ -117,6 +118,7 @@ begin
|
||||
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);
|
||||
|
@ -78,6 +78,7 @@ begin
|
||||
devid.id1:= 0;
|
||||
devid.id2:= 0;
|
||||
devid.id3:= 0;
|
||||
devid.id4:= 0;
|
||||
devid.ex:= nil;
|
||||
drivermanagement.register_driver_ex('PS/2 Keyboard', @devid, @load, true);
|
||||
console.writestringln('PS/2 KEYBOARD: INIT END.');
|
||||
|
@ -122,6 +122,7 @@ begin
|
||||
devid.id1:= 0;
|
||||
devid.id2:= 0;
|
||||
devid.id3:= 0;
|
||||
devid.id4:= 0;
|
||||
devid.ex:= nil;
|
||||
drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true);
|
||||
console.writestringln('PS/2 MOUSE: INIT END.');
|
||||
|
@ -24,6 +24,7 @@ begin
|
||||
devID.id1:= $00000006; { CLASS }
|
||||
devID.id2:= $00000000; { SUBCLASS }
|
||||
devID.id3:= $00000000; { PROGIF }
|
||||
devID.id4:= idANY;
|
||||
devID.ex:= nil; { NO EXTENDED INFO }
|
||||
drivermanagement.register_driver('DUMMY DRIVER', @devID, @load);
|
||||
end;
|
||||
|
@ -26,12 +26,13 @@ type
|
||||
TBusIdentifier = (biUnknown, biPCI, biUSB, bii2c, biPCIe, biANY);
|
||||
|
||||
PDeviceIdentifier = ^TDeviceIdentifier;
|
||||
TDeviceIdentifier = record
|
||||
TDeviceIdentifier = record
|
||||
Bus : TBusIdentifier;
|
||||
id0 : uInt32;
|
||||
id1 : uInt32;
|
||||
id2 : uInt32;
|
||||
id3 : uint32;
|
||||
id4 : uint32;
|
||||
ex : PDevEx;
|
||||
end;
|
||||
|
||||
@ -93,8 +94,8 @@ begin
|
||||
if Drv^.Loaded then begin
|
||||
console.writeint(i);
|
||||
console.writestring(') ');
|
||||
console.writestring(Drv^.Driver_Name);
|
||||
console.writestring(' [');
|
||||
console.writestringln(Drv^.Driver_Name);
|
||||
console.writestring('[');
|
||||
writeBusType(Drv^.Identifier^.Bus);
|
||||
console.writestring(' - ID:');
|
||||
console.writeHex(Drv^.Identifier^.id0);
|
||||
@ -104,6 +105,8 @@ begin
|
||||
console.writeHex(Drv^.Identifier^.id2);
|
||||
console.writestring('-');
|
||||
console.writeHex(Drv^.Identifier^.id3);
|
||||
console.writestring('-');
|
||||
console.writeHex(Drv^.Identifier^.id4);
|
||||
ex:= Drv^.Identifier^.ex;
|
||||
while ex <> nil do begin
|
||||
console.writestring('-');
|
||||
@ -130,8 +133,8 @@ begin
|
||||
console.writeint(i);
|
||||
if Drv^.Loaded then console.writestring('L');
|
||||
console.writestring(') ');
|
||||
console.writestring(Drv^.Driver_Name);
|
||||
console.writestring(' [');
|
||||
console.writestringln(Drv^.Driver_Name);
|
||||
console.writestring('[');
|
||||
writeBusType(Drv^.Identifier^.Bus);
|
||||
console.writestring(' - ID:');
|
||||
console.writeHex(Drv^.Identifier^.id0);
|
||||
@ -141,6 +144,8 @@ begin
|
||||
console.writeHex(Drv^.Identifier^.id2);
|
||||
console.writestring('-');
|
||||
console.writeHex(Drv^.Identifier^.id3);
|
||||
console.writestring('-');
|
||||
console.writeHex(Drv^.Identifier^.id4);
|
||||
ex:= Drv^.Identifier^.ex;
|
||||
while ex <> nil do begin
|
||||
console.writestring('-');
|
||||
@ -165,8 +170,8 @@ begin
|
||||
while Dv <> nil do begin
|
||||
console.writeint(i);
|
||||
console.writestring(') ');
|
||||
console.writestring(Dv^.Device_Name);
|
||||
console.writestring(' [');
|
||||
console.writestringln(Dv^.Device_Name);
|
||||
console.writestring('[');
|
||||
writeBusType(Dv^.Identifier^.Bus);
|
||||
console.writestring(' - ID:');
|
||||
console.writeHex(Dv^.Identifier^.id0);
|
||||
@ -176,6 +181,8 @@ begin
|
||||
console.writeHex(Dv^.Identifier^.id2);
|
||||
console.writestring('-');
|
||||
console.writeHex(Dv^.Identifier^.id3);
|
||||
console.writestring('-');
|
||||
console.writeHex(Dv^.Identifier^.id4);
|
||||
ex:= Dv^.Identifier^.ex;
|
||||
while ex <> nil do begin
|
||||
console.writestring('-');
|
||||
@ -212,6 +219,7 @@ begin
|
||||
New_DevID^.id1:= DeviceID^.id1;
|
||||
New_DevID^.id2:= DeviceID^.id2;
|
||||
New_DevID^.id3:= DeviceID^.id3;
|
||||
New_DevID^.id4:= DeviceID^.id4;
|
||||
root_ex:= nil;
|
||||
if DeviceID^.ex <> nil then begin
|
||||
root_ex:= PDevEx(kalloc(sizeof(TDevEx)));
|
||||
@ -243,6 +251,7 @@ begin
|
||||
identifiers_match:= identifiers_match and ((i1^.id1 = i2^.id1) OR (i1^.id1 = $FFFFFFFF) OR (i2^.id1 = $FFFFFFFF));
|
||||
identifiers_match:= identifiers_match and ((i1^.id2 = i2^.id2) OR (i1^.id2 = $FFFFFFFF) OR (i2^.id2 = $FFFFFFFF));
|
||||
identifiers_match:= identifiers_match and ((i1^.id3 = i2^.id3) OR (i1^.id3 = $FFFFFFFF) OR (i2^.id3 = $FFFFFFFF));
|
||||
identifiers_match:= identifiers_match and ((i1^.id4 = i2^.id4) OR (i1^.id4 = $FFFFFFFF) OR (i2^.id4 = $FFFFFFFF));
|
||||
ll1:= i1^.ex;
|
||||
ll2:= i2^.ex;
|
||||
while true do begin
|
||||
|
@ -34,7 +34,8 @@ uses
|
||||
strings,
|
||||
AHCI,
|
||||
USB,
|
||||
testdriver;
|
||||
testdriver,
|
||||
E1000;
|
||||
|
||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||
|
||||
@ -128,7 +129,7 @@ begin
|
||||
pci.init();
|
||||
console.writestringln('DRIVERS: INIT END.');
|
||||
|
||||
console.writestring('AHCI TEST');
|
||||
{console.writestring('AHCI TEST');
|
||||
console.writestringln('A');
|
||||
atmp:= puint32(kalloc(sizeof(1024*128)));
|
||||
console.writestringln('B');
|
||||
@ -141,7 +142,7 @@ begin
|
||||
AHCI.read(0, $5, $1, 32, atmp);
|
||||
console.writestringln('F');
|
||||
console.writeint(atmp^);
|
||||
console.writestringln('G');
|
||||
console.writestringln('G');}
|
||||
|
||||
console.writestringln('');
|
||||
console.setdefaultattribute(console.combinecolors(Green, Black));
|
||||
|
Loading…
x
Reference in New Issue
Block a user