From 34a5b4b1255b27875baacbeb2507b31c38621d74 Mon Sep 17 00:00:00 2001 From: raywu Date: Wed, 11 Sep 2019 14:04:13 +0800 Subject: Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection --- Board/EM/Platform/AcpiPlatform.c | 3 + .../Library/Protocol/GlobalNvsArea/GlobalNvsArea.h | 3 + Board/IO/F81866/F81866.ASL | 69 +++++++++++++++------ Board/IO/F81866/F81866.SD | 12 ++++ Board/IO/F81866/F81866.UNI | Bin 39562 -> 40354 bytes Board/IO/F81866/F81866DXE.C | 29 +++++++++ ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl | 3 + 7 files changed, 99 insertions(+), 20 deletions(-) diff --git a/Board/EM/Platform/AcpiPlatform.c b/Board/EM/Platform/AcpiPlatform.c index e7cbe97..8f0c261 100644 --- a/Board/EM/Platform/AcpiPlatform.c +++ b/Board/EM/Platform/AcpiPlatform.c @@ -1069,6 +1069,9 @@ AcpiPlatformInit ( { mGlobalNvsArea.Area->ComIrqShareMode = gSetupData->F81216ComIrqShareMode ; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified >> + mGlobalNvsArea.Area->F81866ComIrqShareMode = gSetupData->F81866ComIrqShareMode ; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified << } Status = pBS->InstallMultipleProtocolInterfaces (&ImageHandle, diff --git a/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h index 0734577..b181128 100644 --- a/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h +++ b/Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h @@ -523,6 +523,9 @@ typedef struct { UINT8 ECLP; // (689) EC Low Power Mode: 1 - Enabled, 0 - Disabled UINT8 INSC; // (690) Intel RMT Configuration UINT8 ComIrqShareMode; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified >> + UINT8 F81866ComIrqShareMode; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified << } EFI_GLOBAL_NVS_AREA; #pragma pack () diff --git a/Board/IO/F81866/F81866.ASL b/Board/IO/F81866/F81866.ASL index 3459f4d..7423aaf 100644 --- a/Board/IO/F81866/F81866.ASL +++ b/Board/IO/F81866/F81866.ASL @@ -614,7 +614,25 @@ CreateByteField(CRS3, IO04._LEN, LEN4) //Length 1 0x7 // Store(0x01, IRQS) // IRQ Type: Active-High-Edge-Triggered,No-Shared(default) // } // - Store(0x18, IRQS) +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified >> +// Store(0x18, IRQS) + If( And(OPT0,0x01) ) { // Shared + If( And(OPT0,0x02) ) { // Edge + Store(0x11, IRQS) // High, Edge, Share + } + Else { // Level + Store(0x18, IRQS) // Low, Level, Share + } + } + Else { // Non Shared + If( And(OPT0,0x02) ) { // Edge + Store(0x01, IRQS) // High, Edge, Non Share + } + Else { // Level + Store(0x08, IRQS) // Low, Level, Non Share + } + } +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified << }Else{ Store(0, IRQT) // No IRQ used } @@ -770,25 +788,36 @@ CreateByteField(CRS3, IO04._LEN, LEN4) //Length 1 0x7 Subtract(Local0, 1, INTR) //Set IRQ flag,AMI_TODO: //Set IRQ flag,AMI_TODO: - If(And(IRQS,0x10)){ - Or(OPT0, 0x01, OPT0) - If(LEqual(IRQS,0x18)){ // IRQ Type: Active-Low-Level-Triggered,Shared. - And(OPT0, 0xFD, OPT0) - And(OPT6, 0xF7, OPT6) - } - Else{ - If(LEqual(IRQS,0x11)){ // IRQ Type: Active-High-Edge-Triggered,Shared. - Or(OPT0, 0x01, OPT0) - And(OPT6, 0xF7, OPT6) - } - Else{ - If(LEqual(IRQS,0x10)){ // IRQ Type: Active-High-Level-Triggered,Shared. - And(OPT0, 0xFD, OPT0) - Or(OPT6, 0x08, OPT6) - } - } - } - } +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified >> +// If(And(IRQS,0x10)){ +// Or(OPT0, 0x01, OPT0) +// If(LEqual(IRQS,0x18)){ // IRQ Type: Active-Low-Level-Triggered,Shared. +// And(OPT0, 0xFD, OPT0) +// And(OPT6, 0xF7, OPT6) +// } +// Else{ +// If(LEqual(IRQS,0x11)){ // IRQ Type: Active-High-Edge-Triggered,Shared. +// Or(OPT0, 0x01, OPT0) +// And(OPT6, 0xF7, OPT6) +// } +// Else{ +// If(LEqual(IRQS,0x10)){ // IRQ Type: Active-High-Level-Triggered,Shared. +// And(OPT0, 0xFD, OPT0) +// Or(OPT6, 0x08, OPT6) +// } +// } +// } +// } + If( LEqual(CIS1, 0) ) { + And( OPT6, 0xF7, OPT6 ) + And( OPT0, 0xFC, OPT0 ) + } + Else { + And( OPT6, 0xF7, OPT6 ) + And( OPT0, 0xFC, OPT0 ) + Or( OPT0, 0x02, OPT0 ) + } +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified << }Else{ Store(0, INTR) //No IRQ used } diff --git a/Board/IO/F81866/F81866.SD b/Board/IO/F81866/F81866.SD index d48621d..42549ac 100644 --- a/Board/IO/F81866/F81866.SD +++ b/Board/IO/F81866/F81866.SD @@ -153,6 +153,9 @@ UINT8 F81866WdtEnable ; UINT8 F81866WdtTimer ; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added >> + UINT8 F81866ComIrqShareMode ; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added << #endif //SETUP_DATA_DEFINITION #if defined(VFRCOMPILE) && !defined(CONTROLS_ARE_DEFINED) @@ -1365,6 +1368,15 @@ help = STRING_TOKEN(STR_F81866_PARALLEL_FORM_HELP); endif; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added >> + SEPARATOR + oneof varid = SETUP_DATA.F81866ComIrqShareMode,\ + prompt = STRING_TOKEN (STR_IRQ_SHARE_MODE),\ + help = STRING_TOKEN (STR_IRQ_SHARE_MODE),\ + option text = STRING_TOKEN (STR_PCI_SHARE_MODE), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED, key = 0;\ + option text = STRING_TOKEN (STR_ISA_SHARE_MODE), value = 1, flags = RESET_REQUIRED, key = 0;\ + endoneof; +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added << endform;//SIO Form //////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Board/IO/F81866/F81866.UNI b/Board/IO/F81866/F81866.UNI index 7b45f2d..bbdf949 100644 Binary files a/Board/IO/F81866/F81866.UNI and b/Board/IO/F81866/F81866.UNI differ diff --git a/Board/IO/F81866/F81866DXE.C b/Board/IO/F81866/F81866DXE.C index ed434f5..fdf8534 100644 --- a/Board/IO/F81866/F81866DXE.C +++ b/Board/IO/F81866/F81866DXE.C @@ -702,6 +702,35 @@ static EFI_STATUS COM_Init( Status=AmiSio->Access(AmiSio, FALSE, FALSE, 0xF0, &rv); rv &= ~(BIT0) ; Status=AmiSio->Access(AmiSio,TRUE,FALSE,0xF0,&rv); + +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added >> + if ( dev->DeviceInfo->UID >= 2 && dev->DeviceInfo->UID <= 5 ) + { + EFI_GUID SetupGuid = SETUP_GUID; + UINTN Size = sizeof(SETUP_DATA); + SETUP_DATA SetupData; + + Status = pRS->GetVariable ( L"Setup", \ + &SetupGuid, \ + NULL,\ + &Size, \ + &SetupData ); + + // PCI Share Mode + if( SetupData.F81866ComIrqShareMode == 0 ) { + Status=AmiSio->Access(AmiSio,FALSE,FALSE,0xF0,&rv); + rv |= BIT0 ; + rv &= ~(BIT1); + Status=AmiSio->Access(AmiSio,TRUE,FALSE,0xF0,&rv); + } + else { // ISA Share Mode + Status=AmiSio->Access(AmiSio,FALSE,FALSE,0xF0,&rv); + rv |= BIT0 ; + rv |= BIT1; + Status=AmiSio->Access(AmiSio,TRUE,FALSE,0xF0,&rv); + } + } +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Added << break; case isAfterActivate: diff --git a/ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl b/ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl index 1c18c04..90c3216 100644 --- a/ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl +++ b/ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl @@ -425,6 +425,9 @@ ECLP, 8, // (689) EC Low Power Mode: 1 - Enabled, 0 - Disabled INSC, 8, // (690) Intel RMT Configuration CISM, 8, +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified >> + CIS1, 8, +//ray_override / Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection / Modified << } #if defined(ASL_Remove_SaSsdt_Data_To_Dsdt) && (ASL_Remove_SaSsdt_Data_To_Dsdt == 1) -- cgit v1.2.3