public IOMonitorViewModel() { _name = "IOMonitor"; iOGroupList = new ObservableCollection <IOGroup>(); iOGroupList.Add(iogroup = new IOGroup("IOGroup1")); iogroup.IOCells.Add(iocell = new IOCell("IOCell1")); iogroup.IOCells.Add(iocell = new IOCell("IOCell2")); iogroup.IOCells.Add(iocell = new IOCell("IOCell3")); iogroup.IOCells.Add(iocell = new IOCell("IOCell4")); iOGroupList.Add(iogroup = new IOGroup("IOGroup2")); iogroup.IOCells.Add(iocell = new IOCell("IOCell1")); iogroup.IOCells.Add(iocell = new IOCell("IOCell2")); iogroup.IOCells.Add(iocell = new IOCell("IOCell3")); iogroup.IOCells.Add(iocell = new IOCell("IOCell4")); iOGroupList.Add(iogroup = new IOGroup("IOGroup3")); iogroup.IOCells.Add(iocell = new IOCell("IOCell1")); iogroup.IOCells.Add(iocell = new IOCell("IOCell2")); iogroup.IOCells.Add(iocell = new IOCell("IOCell3")); iogroup.IOCells.Add(iocell = new IOCell("IOCell4")); }
protected void Init(IOGroup.PIC aPIC, byte aBase, byte aIDunno, byte aMask){ // We need to remap the PIC interrupt lines to the CPU. The BIOS sets // them in a way compatible for 16 bit mode, but in a way that causes problems // for 32 bit mode. // The only way to remap them however is to completely reinitialize the PICs. byte xOldMask = aPIC.Data.Byte; //#define ICW1_ICW4 0x01 /* ICW4 (not) needed */ //#define ICW1_SINGLE 0x02 /* Single (cascade) mode */ //#define ICW1_INTERVAL4 0x04 /* Call address interval 4 (8) */ //#define ICW1_LEVEL 0x08 /* Level triggered (edge) mode */ Master.Cmd.Byte = (byte)Cmd.Init | 0x01; IOPort.Wait(); // ICW2 Master.Data.Byte = aBase; IOPort.Wait(); // ICW3 // Somehow tells them about master/slave relationship Master.Data.Byte = aIDunno; IOPort.Wait(); //#define ICW4_AUTO 0x02 /C:\Data\Cosmos\source2\Kernel\System\Hardware\Core\Cosmos.Core\CPU.cs* Auto (normal) EOI */ //#define ICW4_BUF_SLAVE 0x08 /* Buffered mode/slave */ //#define ICW4_BUF_MASTER 0x0C /* Buffered mode/master */ //#define ICW4_SFNM 0x10 /* Special fully nested (not) */ //0x01 8086/88 (MCS-80/85) mode Master.Data.Byte = 0x01; IOPort.Wait(); // Set mask Master.Data.Byte = aMask; IOPort.Wait(); }
public AMDPCNetII(PCIDeviceNormal device) : base() { if (device == null) { throw new ArgumentException("PCI Device is null. Unable to get AMD PCNet card"); } this.pciCard = device; this.pciCard.Claimed = true; this.pciCard.EnableDevice(); this.io = new IOGroup(this.pciCard); this.io.RegisterData.DWord = 0; // Get the EEPROM MAC Address and set it as the devices MAC byte[] eeprom_mac = new byte[6]; UInt32 result = io.MAC1.DWord; eeprom_mac[0] = BinaryHelper.GetByteFrom32bit(result, 0); eeprom_mac[1] = BinaryHelper.GetByteFrom32bit(result, 8); eeprom_mac[2] = BinaryHelper.GetByteFrom32bit(result, 16); eeprom_mac[3] = BinaryHelper.GetByteFrom32bit(result, 24); result = io.MAC2.DWord; eeprom_mac[4] = BinaryHelper.GetByteFrom32bit(result, 0); eeprom_mac[5] = BinaryHelper.GetByteFrom32bit(result, 8); mac = new MACAddress(eeprom_mac); mInitBlock = new ManagedMemoryBlock(28, 4); mRxDescriptor = new ManagedMemoryBlock(256, 16); mTxDescriptor = new ManagedMemoryBlock(256, 16); mInitBlock.Write32(0x00, (0x4 << 28) | (0x4 << 20)); mInitBlock.Write32(0x04, (UInt32)(eeprom_mac[0] | (eeprom_mac[1] << 8) | (eeprom_mac[2] << 16) | (eeprom_mac[3] << 24))); mInitBlock.Write32(0x08, (UInt32)(eeprom_mac[4] | (eeprom_mac[5] << 8))); mInitBlock.Write32(0x0C, 0x0); mInitBlock.Write32(0x10, 0x0); mInitBlock.Write32(0x14, mRxDescriptor.Offset); mInitBlock.Write32(0x18, mTxDescriptor.Offset); InitializationBlockAddress = mInitBlock.Offset; SoftwareStyleRegister = 0x03; mRxBuffers = new List<ManagedMemoryBlock>(); mTxBuffers = new List<ManagedMemoryBlock>(); for (uint rxd = 0; rxd < 16; rxd++) { uint xOffset = rxd * 16; ManagedMemoryBlock buffer = new ManagedMemoryBlock(2048); mRxDescriptor.Write32(xOffset + 8, buffer.Offset); UInt16 buffer_len = (UInt16)(~buffer.Size); buffer_len++; UInt32 flags = (UInt32)(buffer_len & 0x0FFF) | 0xF000 | 0x80000000; mRxDescriptor.Write32(xOffset + 4, flags); mRxBuffers.Add(buffer); } for (uint txd = 0; txd < 16; txd++) { uint xOffset = txd * 16; ManagedMemoryBlock buffer = new ManagedMemoryBlock(2048); mTxDescriptor.Write32(xOffset + 8, buffer.Offset); mTxBuffers.Add(buffer); } mNextTXDesc = 0; // Setup our Receive and Transmit Queues mTransmitBuffer = new Queue<byte[]>(); mRecvBuffer = new Queue<byte[]>(); INTs.SetIrqHandler(device.InterruptLine, HandleNetworkInterrupt); }
public AMDPCNetII(PCIDeviceNormal device) : base() { if (device == null) { throw new ArgumentException("PCI Device is null. Unable to get AMD PCNet card"); } this.pciCard = device; this.pciCard.Claimed = true; this.pciCard.EnableDevice(); this.io = new IOGroup(this.pciCard); this.io.RegisterData.DWord = 0; // Get the EEPROM MAC Address and set it as the devices MAC byte[] eeprom_mac = new byte[6]; UInt32 result = io.MAC1.DWord; eeprom_mac[0] = BinaryHelper.GetByteFrom32bit(result, 0); eeprom_mac[1] = BinaryHelper.GetByteFrom32bit(result, 8); eeprom_mac[2] = BinaryHelper.GetByteFrom32bit(result, 16); eeprom_mac[3] = BinaryHelper.GetByteFrom32bit(result, 24); result = io.MAC2.DWord; eeprom_mac[4] = BinaryHelper.GetByteFrom32bit(result, 0); eeprom_mac[5] = BinaryHelper.GetByteFrom32bit(result, 8); mac = new MACAddress(eeprom_mac); mInitBlock = new ManagedMemoryBlock(28, 4); mRxDescriptor = new ManagedMemoryBlock(256, 16); mTxDescriptor = new ManagedMemoryBlock(256, 16); mInitBlock.Write32(0x00, (0x4 << 28) | (0x4 << 20)); mInitBlock.Write32(0x04, (UInt32)(eeprom_mac[0] | (eeprom_mac[1] << 8) | (eeprom_mac[2] << 16) | (eeprom_mac[3] << 24))); mInitBlock.Write32(0x08, (UInt32)(eeprom_mac[4] | (eeprom_mac[5] << 8))); mInitBlock.Write32(0x0C, 0x0); mInitBlock.Write32(0x10, 0x0); mInitBlock.Write32(0x14, mRxDescriptor.Offset); mInitBlock.Write32(0x18, mTxDescriptor.Offset); InitializationBlockAddress = mInitBlock.Offset; SoftwareStyleRegister = 0x03; mRxBuffers = new List <ManagedMemoryBlock>(); mTxBuffers = new List <ManagedMemoryBlock>(); for (uint rxd = 0; rxd < 16; rxd++) { uint xOffset = rxd * 16; ManagedMemoryBlock buffer = new ManagedMemoryBlock(2048); mRxDescriptor.Write32(xOffset + 8, buffer.Offset); UInt16 buffer_len = (UInt16)(~buffer.Size); buffer_len++; UInt32 flags = (UInt32)(buffer_len & 0x0FFF) | 0xF000 | 0x80000000; mRxDescriptor.Write32(xOffset + 4, flags); mRxBuffers.Add(buffer); } for (uint txd = 0; txd < 16; txd++) { uint xOffset = txd * 16; ManagedMemoryBlock buffer = new ManagedMemoryBlock(2048); mTxDescriptor.Write32(xOffset + 8, buffer.Offset); mTxBuffers.Add(buffer); } mNextTXDesc = 0; // Setup our Receive and Transmit Queues mTransmitBuffer = new Queue <byte[]>(); mRecvBuffer = new Queue <byte[]>(); INTs.SetIrqHandler(device.InterruptLine, HandleNetworkInterrupt); }