Merge pull request #50 from aura-systems/fix-networking

NETWORK FIX. FINALLY.
This commit is contained in:
valentinbreiz 2018-05-07 12:00:30 +02:00 committed by GitHub
commit 3da5facc69
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 24 deletions

View file

@ -95,8 +95,8 @@ namespace Cosmos.Core
// set masks:
Master.Data.Byte = masterMask;
IOPort.Wait();
Slave.Data.Byte = slaveMask;
IOPort.Wait();
//Slave.Data.Byte = slaveMask;
//IOPort.Wait();
}
protected void Init(IOGroup.PIC aPIC, byte aBase, byte aIDunno, byte aMask)

View file

@ -33,10 +33,10 @@ namespace Cosmos.HAL.Drivers.PCI.Network
}
this.pciCard = device;
// this.pciCard.Claimed = true;
//this.pciCard.EnableDevice();
this.pciCard.Claimed = true;
this.pciCard.EnableDevice();
//this.io = new AMDPCNetIIIOGroup((ushort) this.pciCard.BaseAddresses[0].BaseAddress());
this.io = new AMDPCNetIIIOGroup((ushort) this.pciCard.BaseAddressBar[0].BaseAddress);
this.io.RegisterData.DWord = 0;
// Get the EEPROM MAC Address and set it as the devices MAC
@ -97,7 +97,7 @@ namespace Cosmos.HAL.Drivers.PCI.Network
mTransmitBuffer = new Queue<byte[]>();
mRecvBuffer = new Queue<byte[]>();
//INTs.SetIrqHandler(device.InterruptLine, HandleNetworkInterrupt);
INTs.SetIrqHandler(device.InterruptLine, HandleNetworkInterrupt);
}
protected void HandleNetworkInterrupt(ref INTs.IRQContext aContext)
@ -135,16 +135,16 @@ namespace Cosmos.HAL.Drivers.PCI.Network
public static void FindAll()
{
Console.WriteLine("Scanning for AMD PCNetII cards...");
// PCIDevice device = Cosmos.HAL.PCI.GetDevice(VendorID.AMD, DeviceID.PCNETII);
// if (device != null)
// {
// AMDPCNetII nic = new AMDPCNetII((PCIDevice) device);
//
// Console.WriteLine("Found AMD PCNetII NIC on PCI " + device.bus + ":" + device.slot + ":" +
// device.function);
// Console.WriteLine("NIC IRQ: " + device.InterruptLine);
// Console.WriteLine("NIC MAC Address: " + nic.MACAddress.ToString());
// }
PCIDevice device = Cosmos.HAL.PCI.GetDevice(VendorID.AMD, DeviceID.PCNETII);
if (device != null)
{
AMDPCNetII nic = new AMDPCNetII((PCIDevice) device);
Console.WriteLine("Found AMD PCNetII NIC on PCI " + device.bus + ":" + device.slot + ":" +
device.function);
Console.WriteLine("NIC IRQ: " + device.InterruptLine);
Console.WriteLine("NIC MAC Address: " + nic.MACAddress.ToString());
}
}
#region Register Access Properties

View file

@ -21,10 +21,10 @@ namespace Cosmos.HAL
public enum PCIBist : byte
{
CocdMask = 0x0f,
Start = 0x40,
Capable = 0x80
};
CocdMask = 0x0f, /* Return result */
Start = 0x40, /* 1 to start BIST, 2 secs or less */
Capable = 0x80 /* 1 if BIST capable */
}
public enum PCIInterruptPIN : byte
{
@ -35,6 +35,20 @@ namespace Cosmos.HAL
INTD = 0x04
};
public enum PCICommand : short
{
IO = 0x1, /* Enable response in I/O space */
Memory = 0x2, /* Enable response in Memory space */
Master = 0x4, /* Enable bus mastering */
Special = 0x8, /* Enable response to special cycles */
Invalidate = 0x10, /* Use memory write and invalidate */
VGA_Pallete = 0x20, /* Enable palette snooping */
Parity = 0x40, /* Enable parity checking */
Wait = 0x80, /* Enable address/data stepping */
SERR = 0x100, /* Enable SERR */
Fast_Back = 0x200, /* Enable back-to-back writes */
}
public enum Config : byte
{
VendorID = 0, DeviceID = 2,
@ -63,7 +77,6 @@ namespace Cosmos.HAL
public readonly ushort VendorID;
public readonly ushort DeviceID;
public readonly ushort Command;
public readonly ushort Status;
public readonly byte RevisionID;
@ -85,6 +98,14 @@ namespace Cosmos.HAL
protected static Core.IOGroup.PCI IO = new Core.IOGroup.PCI();
public byte InterruptLine { get; private set; }
public PCICommand Command { get { return (PCICommand)ReadRegister16(0x04); } set { WriteRegister16(0x04, (ushort)value); } }
/// <summary>
/// Has this device been claimed by a driver
/// </summary>
public bool Claimed { get; set; }
public PCIDevice(uint bus, uint slot, uint function)
{
this.bus = bus;
@ -94,9 +115,8 @@ namespace Cosmos.HAL
VendorID = ReadRegister16((byte)Config.VendorID);
DeviceID = ReadRegister16((byte)Config.DeviceID);
Command = ReadRegister16((byte)Config.Command);
Status = ReadRegister16((byte)Config.Status);
//Command = ReadRegister16((byte)Config.Command);
//Status = ReadRegister16((byte)Config.Status);
RevisionID = ReadRegister8((byte)Config.RevisionID);
ProgIF = ReadRegister8((byte)Config.ProgIF);
@ -107,6 +127,8 @@ namespace Cosmos.HAL
HeaderType = (PCIHeaderType)ReadRegister8((byte)Config.HeaderType);
BIST = (PCIBist)ReadRegister8((byte)Config.BIST);
InterruptPIN = (PCIInterruptPIN)ReadRegister8((byte)Config.InterruptPIN);
InterruptLine = ReadRegister8((byte)Config.InterruptLine);
if ((uint)VendorID == 0xFF && (uint)DeviceID == 0xFFFF)
{
DeviceExists = false;
@ -127,6 +149,11 @@ namespace Cosmos.HAL
}
}
public void EnableDevice()
{
Command |= PCICommand.Master | PCICommand.IO | PCICommand.Memory;
}
public static ushort GetHeaderType(ushort Bus, ushort Slot, ushort Function)
{
UInt32 xAddr = GetAddressBase(Bus, Slot, Function) | 0xE & 0xFC;