Proart x870e creator wifi (#1547)
* fix line endings to lf * add support for proart_x870e_creator_wifi --------- Co-authored-by: damesene <reg.sliva@hotmail.com> Co-authored-by: PhyxionNL <7643972+PhyxionNL@users.noreply.github.com>
This commit is contained in:
co-authored by
damesene
PhyxionNL
parent
09197be639
commit
7753ee91b9
@@ -607,6 +607,8 @@ internal class Identification
|
||||
return Model.X870E_AORUS_PRO;
|
||||
case var _ when name.Equals("X870E AORUS PRO ICE", StringComparison.OrdinalIgnoreCase):
|
||||
return Model.X870E_AORUS_PRO_ICE;
|
||||
case var _ when name.Equals("PROART X870E-CREATOR WIFI", StringComparison.OrdinalIgnoreCase):
|
||||
return Model.PROART_X870E_CREATOR_WIFI;
|
||||
case var _ when name.Equals("PRIME X870-P", StringComparison.OrdinalIgnoreCase):
|
||||
return Model.PRIME_X870_P;
|
||||
case var _ when name.Equals("ROG CROSSHAIR X870E HERO", StringComparison.OrdinalIgnoreCase):
|
||||
|
||||
@@ -403,9 +403,9 @@ internal class LpcIO
|
||||
chip = Chip.NCT6799D;
|
||||
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
|
||||
break;
|
||||
case 0x06:
|
||||
chip = Chip.NCT6701D;
|
||||
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
|
||||
case 0x06:
|
||||
chip = Chip.NCT6701D;
|
||||
logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -549,7 +549,7 @@ internal class LpcIO
|
||||
port.IT87Enter();
|
||||
chipId = port.ReadWord(CHIP_ID_REGISTER);
|
||||
}
|
||||
|
||||
|
||||
Chip chip = chipId switch
|
||||
{
|
||||
0x8613 => Chip.IT8613E,
|
||||
@@ -649,41 +649,41 @@ internal class LpcIO
|
||||
return false;
|
||||
}
|
||||
|
||||
private IGigabyteController FindGigabyteEC(LpcPort port, Chip chip, Motherboard motherboard)
|
||||
private IGigabyteController FindGigabyteEC(LpcPort port, Chip chip, Motherboard motherboard)
|
||||
{
|
||||
// The controller only affects the 2nd ITE chip if present, and only a few
|
||||
// models are known to use this controller.
|
||||
// IT8795E likely to need this too, but may use different registers.
|
||||
if (motherboard.Manufacturer != Manufacturer.Gigabyte || port.RegisterPort != 0x4E || chip is not (Chip.IT8790E or Chip.IT8792E or Chip.IT87952E))
|
||||
return null;
|
||||
|
||||
Vendor vendor = DetectVendor();
|
||||
|
||||
IGigabyteController gigabyteController = FindGigabyteECUsingSmfi(port, chip, vendor);
|
||||
if (gigabyteController != null)
|
||||
return gigabyteController;
|
||||
|
||||
// ECIO is only available on AMD motherboards with IT8791E/IT8792E/IT8795E.
|
||||
if (chip == Chip.IT8792E && vendor == Vendor.AMD)
|
||||
{
|
||||
gigabyteController = EcioPortGigabyteController.TryCreate();
|
||||
if (gigabyteController != null)
|
||||
return gigabyteController;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Vendor DetectVendor()
|
||||
{
|
||||
string manufacturer = motherboard.SMBios.Processors[0].ManufacturerName;
|
||||
if (manufacturer.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
return Vendor.Intel;
|
||||
|
||||
if (manufacturer.IndexOf("Advanced Micro Devices", StringComparison.OrdinalIgnoreCase) != -1 || manufacturer.StartsWith("AMD", StringComparison.OrdinalIgnoreCase))
|
||||
return Vendor.AMD;
|
||||
|
||||
return Vendor.Unknown;
|
||||
}
|
||||
return null;
|
||||
|
||||
Vendor vendor = DetectVendor();
|
||||
|
||||
IGigabyteController gigabyteController = FindGigabyteECUsingSmfi(port, chip, vendor);
|
||||
if (gigabyteController != null)
|
||||
return gigabyteController;
|
||||
|
||||
// ECIO is only available on AMD motherboards with IT8791E/IT8792E/IT8795E.
|
||||
if (chip == Chip.IT8792E && vendor == Vendor.AMD)
|
||||
{
|
||||
gigabyteController = EcioPortGigabyteController.TryCreate();
|
||||
if (gigabyteController != null)
|
||||
return gigabyteController;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Vendor DetectVendor()
|
||||
{
|
||||
string manufacturer = motherboard.SMBios.Processors[0].ManufacturerName;
|
||||
if (manufacturer.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
return Vendor.Intel;
|
||||
|
||||
if (manufacturer.IndexOf("Advanced Micro Devices", StringComparison.OrdinalIgnoreCase) != -1 || manufacturer.StartsWith("AMD", StringComparison.OrdinalIgnoreCase))
|
||||
return Vendor.AMD;
|
||||
|
||||
return Vendor.Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
private IGigabyteController FindGigabyteECUsingSmfi(LpcPort port, Chip chip, Vendor vendor)
|
||||
|
||||
@@ -820,33 +820,33 @@ internal class Nct677X : ISuperIO
|
||||
}
|
||||
|
||||
byte page = (byte)(address >> 8);
|
||||
byte index = (byte)(address & 0xFF);
|
||||
|
||||
//wait for access, access == EC_SPACE_PAGE_SELECT
|
||||
//timeout: after 500ms, abort and force access
|
||||
byte access;
|
||||
|
||||
DateTime timeout = DateTime.UtcNow.AddMilliseconds(500);
|
||||
while (true)
|
||||
{
|
||||
access = Ring0.ReadIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET);
|
||||
if (access == EC_SPACE_PAGE_SELECT || DateTime.UtcNow > timeout)
|
||||
break;
|
||||
|
||||
System.Threading.Thread.Sleep(1);
|
||||
}
|
||||
|
||||
if (access != EC_SPACE_PAGE_SELECT)
|
||||
{
|
||||
// Failed to gain access: force register access
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, EC_SPACE_PAGE_SELECT);
|
||||
}
|
||||
|
||||
byte index = (byte)(address & 0xFF);
|
||||
|
||||
//wait for access, access == EC_SPACE_PAGE_SELECT
|
||||
//timeout: after 500ms, abort and force access
|
||||
byte access;
|
||||
|
||||
DateTime timeout = DateTime.UtcNow.AddMilliseconds(500);
|
||||
while (true)
|
||||
{
|
||||
access = Ring0.ReadIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET);
|
||||
if (access == EC_SPACE_PAGE_SELECT || DateTime.UtcNow > timeout)
|
||||
break;
|
||||
|
||||
System.Threading.Thread.Sleep(1);
|
||||
}
|
||||
|
||||
if (access != EC_SPACE_PAGE_SELECT)
|
||||
{
|
||||
// Failed to gain access: force register access
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, EC_SPACE_PAGE_SELECT);
|
||||
}
|
||||
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, page);
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_INDEX_REGISTER_OFFSET, index);
|
||||
byte result = Ring0.ReadIoPort(_port + EC_SPACE_DATA_REGISTER_OFFSET);
|
||||
|
||||
//free access for other instances
|
||||
byte result = Ring0.ReadIoPort(_port + EC_SPACE_DATA_REGISTER_OFFSET);
|
||||
|
||||
//free access for other instances
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, EC_SPACE_PAGE_SELECT);
|
||||
|
||||
return result;
|
||||
@@ -866,26 +866,26 @@ internal class Nct677X : ISuperIO
|
||||
else
|
||||
{
|
||||
byte page = (byte)(address >> 8);
|
||||
byte index = (byte)(address & 0xFF);
|
||||
|
||||
//wait for access, access == EC_SPACE_PAGE_SELECT
|
||||
//timeout: after 500ms, abort and force access
|
||||
byte access;
|
||||
|
||||
DateTime timeout = DateTime.UtcNow.AddMilliseconds(500);
|
||||
while (true)
|
||||
{
|
||||
access = Ring0.ReadIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET);
|
||||
if (access == EC_SPACE_PAGE_SELECT || DateTime.UtcNow > timeout)
|
||||
break;
|
||||
|
||||
System.Threading.Thread.Sleep(1);
|
||||
}
|
||||
|
||||
if (access != EC_SPACE_PAGE_SELECT)
|
||||
{
|
||||
// Failed to gain access: force register access
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, EC_SPACE_PAGE_SELECT);
|
||||
byte index = (byte)(address & 0xFF);
|
||||
|
||||
//wait for access, access == EC_SPACE_PAGE_SELECT
|
||||
//timeout: after 500ms, abort and force access
|
||||
byte access;
|
||||
|
||||
DateTime timeout = DateTime.UtcNow.AddMilliseconds(500);
|
||||
while (true)
|
||||
{
|
||||
access = Ring0.ReadIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET);
|
||||
if (access == EC_SPACE_PAGE_SELECT || DateTime.UtcNow > timeout)
|
||||
break;
|
||||
|
||||
System.Threading.Thread.Sleep(1);
|
||||
}
|
||||
|
||||
if (access != EC_SPACE_PAGE_SELECT)
|
||||
{
|
||||
// Failed to gain access: force register access
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, EC_SPACE_PAGE_SELECT);
|
||||
}
|
||||
|
||||
Ring0.WriteIoPort(_port + EC_SPACE_PAGE_REGISTER_OFFSET, page);
|
||||
|
||||
@@ -254,6 +254,7 @@ public enum Model
|
||||
B650M_AORUS_ELITE_AX,
|
||||
X870E_AORUS_PRO,
|
||||
X870E_AORUS_PRO_ICE,
|
||||
PROART_X870E_CREATOR_WIFI,
|
||||
|
||||
// Shuttle
|
||||
FH67,
|
||||
|
||||
@@ -4430,6 +4430,34 @@ internal sealed class SuperIOHardware : Hardware
|
||||
|
||||
break;
|
||||
|
||||
case Model.PROART_X870E_CREATOR_WIFI: // ITE IT8696E
|
||||
v.Add(new Voltage("Vcore", 0));
|
||||
v.Add(new Voltage("Voltage #2", 1, true));
|
||||
v.Add(new Voltage("AVCC", 2, 34, 34));
|
||||
v.Add(new Voltage("+3.3V", 3, 34, 34));
|
||||
v.Add(new Voltage("Voltage #5", 4, true));
|
||||
v.Add(new Voltage("Voltage #6", 5, true));
|
||||
v.Add(new Voltage("Voltage #7", 6, true));
|
||||
v.Add(new Voltage("+3V Standby", 7, 34, 34));
|
||||
v.Add(new Voltage("CMOS Battery", 8, 34, 34));
|
||||
v.Add(new Voltage("CPU Termination", 9));
|
||||
v.Add(new Voltage("Voltage #11", 10, true));
|
||||
v.Add(new Voltage("Voltage #12", 11, true));
|
||||
v.Add(new Voltage("Voltage #13", 12, true));
|
||||
v.Add(new Voltage("Voltage #14", 13, true));
|
||||
v.Add(new Voltage("Voltage #15", 14, true));
|
||||
|
||||
t.Add(new Temperature("Motherboard", 2));
|
||||
t.Add(new Temperature("CPU", 22));
|
||||
|
||||
for (int i = 0; i < superIO.Fans.Length; i++)
|
||||
f.Add(new Fan("Fan #" + (i + 1), i));
|
||||
|
||||
for (int i = 0; i < superIO.Controls.Length; i++)
|
||||
c.Add(new Control("Fan #" + (i + 1), i));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
v.Add(new Voltage("Vcore", 0));
|
||||
v.Add(new Voltage("Voltage #2", 1, true));
|
||||
|
||||
Reference in New Issue
Block a user