summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraywu <raywu@aaeon.com.tw>2019-09-11 14:04:13 +0800
committerraywu <raywu@aaeon.com.tw>2019-09-11 14:04:13 +0800
commit34a5b4b1255b27875baacbeb2507b31c38621d74 (patch)
tree11b6cd9b7ceb769f81f29936af668363ffd26d11
parentab678c2e19ca5ba6ce5347d62971cec2bc1fc935 (diff)
downloadzprj-34a5b4b1255b27875baacbeb2507b31c38621d74.tar.xz
Support F81866 COM3 ~ COM6 IRQ Sharing Mode Selection
-rw-r--r--Board/EM/Platform/AcpiPlatform.c3
-rw-r--r--Board/EM/Platform/Library/Protocol/GlobalNvsArea/GlobalNvsArea.h3
-rw-r--r--Board/IO/F81866/F81866.ASL69
-rw-r--r--Board/IO/F81866/F81866.SD12
-rw-r--r--Board/IO/F81866/F81866.UNIbin39562 -> 40354 bytes
-rw-r--r--Board/IO/F81866/F81866DXE.C29
-rw-r--r--ReferenceCode/AcpiTables/Dsdt/GloblNvs.asl3
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
--- a/Board/IO/F81866/F81866.UNI
+++ b/Board/IO/F81866/F81866.UNI
Binary files 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)