/// <summary> /// Sets the bit. /// </summary> /// <param name="bit">The bit.</param> protected void SetBit(byte bit) { switch (bits) { case 8: ioPort.Write8(SetBit(ioPort.Read8(), bit)); break; case 16: ioPort.Write16(SetBit(ioPort.Read16(), bit)); break; case 32: ioPort.Write32(SetBit(ioPort.Read32(), bit)); break; } }
/// <summary> /// Probes for this device. /// </summary> /// <returns></returns> public bool Probe() { configAddress.Write32(BaseValue); if (configAddress.Read32() != BaseValue) { return(false); } return(true); }
public uint ReadConfig(uint bus, uint slot, uint function, uint register) { uint address = BaseValue | ((bus & 0xFF) << 16) | ((slot & 0x0F) << 11) | ((function & 0x07) << 8) | (register & 0xFC); ConfigAddress.Write32(address); return(ConfigData.Read32()); }
/// <summary> /// Starts this hardware device. /// </summary> /// <returns></returns> public override DeviceDriverStartStatus Start() { // Enable the card hardwareResources.DeviceResource.EnableDevice(); // Do a 32-bit write to set 32-bit mode rdp.Write32(0); // Get the EEPROM MAC Address byte[] eepromMac = new byte[6]; uint data = ioProm1.Read32(); eepromMac[0] = (byte)(data & 0xFF); eepromMac[1] = (byte)((data >> 8) & 0xFF); eepromMac[2] = (byte)((data >> 16) & 0xFF); eepromMac[3] = (byte)((data >> 24) & 0xFF); data = ioProm4.Read32(); eepromMac[4] = (byte)(data & 0xFF); eepromMac[5] = (byte)((data >> 8) & 0xFF); macAddress = new MACAddress(eepromMac); // Fill in the initialization block initBlock.Write32(0, (0x4 << 28) | (0x4 << 30)); initBlock.Write32(4, (uint)(eepromMac[0] | (eepromMac[1] << 8) | (eepromMac[2] << 16) | (eepromMac[3] << 24))); initBlock.Write32(8, (uint)(eepromMac[4] | (eepromMac[5] << 8))); // Fill in the hardware MAC address initBlock.Write32(16, 0x0); initBlock.Write32(24, 0x0); initBlock.Write32(28, rxDescriptor.Address); initBlock.Write32(32, txDescriptor.Address); // Write the initialization blocks address to the registers on the card InitializationBlockAddress = HAL.GetPhysicalAddress(initBlock); // Set the device to PCNet-PCI II Controller mode (full 32-bit mode) SoftwareStyleRegister = 0x03; nextTXDesc = 0; return(DeviceDriverStartStatus.Started); }
public void Initialize() { spinLock.Enter(); TextMode.Write(base.name); TextMode.Write(": "); ConfigAddress.Write32(BaseValue); if (ConfigAddress.Read32() != BaseValue) { base.deviceStatus = DeviceStatus.NotFound; TextMode.WriteLine("PCI controller not found"); return; } TextMode.WriteLine("PCI controller found at 0x" + ((uint)PCIConfigAddress).ToString("X")); Setup(); base.deviceStatus = DeviceStatus.Online; }
/// <summary> /// Reads from configuration space /// </summary> /// <param name="bus">The bus.</param> /// <param name="slot">The slot.</param> /// <param name="function">The function.</param> /// <param name="register">The register.</param> /// <returns></returns> public uint ReadConfig32(byte bus, byte slot, byte function, byte register) { configAddress.Write32(GetIndex(bus, slot, function, register)); return(configData.Read32()); }
/// <summary> /// Gets the value. /// </summary> /// <param name="command">The command.</param> /// <returns></returns> protected uint ReadRegister(uint command) { indexPort.Write32(command); return(valuePort.Read32()); }
/// <summary> /// Gets the value. /// </summary> /// <param name="command">The command.</param> /// <returns></returns> protected uint GetValue(uint command) { indexPort.Write32(command); return(valuePort.Read32()); }