summaryrefslogtreecommitdiff
path: root/Chipset
diff options
context:
space:
mode:
Diffstat (limited to 'Chipset')
-rw-r--r--Chipset/NB/hsw_1039.datbin65536 -> 65536 bytes
-rw-r--r--Chipset/NB/hsw_1039.ssf2
-rw-r--r--Chipset/SB/RTEG263.LOMbin0 -> 71680 bytes
-rw-r--r--Chipset/SB/SleepSmi.c135
4 files changed, 135 insertions, 2 deletions
diff --git a/Chipset/NB/hsw_1039.dat b/Chipset/NB/hsw_1039.dat
index 718b10a..eeb5cd3 100644
--- a/Chipset/NB/hsw_1039.dat
+++ b/Chipset/NB/hsw_1039.dat
Binary files differ
diff --git a/Chipset/NB/hsw_1039.ssf b/Chipset/NB/hsw_1039.ssf
index 8add22a..5e293fa 100644
--- a/Chipset/NB/hsw_1039.ssf
+++ b/Chipset/NB/hsw_1039.ssf
@@ -22,7 +22,7 @@ $Hotplug_Support_Enb 00
$Enable_Panel_Timing 00
PAGE Boot Display Algorithm
-TABLE $Dev_Boot_Table 09 08 01 0C 08 04 48 08 40 28 08 20 05 01 04 41 01 40 21 01 20 44 04 40 0D 01 04 45 01 04 64 04 40 49 01 40 29 01 20 4C 04 40 24 04 20 2C 04 20
+TABLE $Dev_Boot_Table 09 08 01 0C 08 04 48 08 40 28 08 20 05 04 01 41 01 40 21 01 20 44 04 40 0D 01 04 45 01 04 64 04 40 49 01 40 29 01 20 4C 04 40 24 04 20 2C 04 20
PAGE System BIOS Hooks
$H14_Get_Misc_Status 00
diff --git a/Chipset/SB/RTEG263.LOM b/Chipset/SB/RTEG263.LOM
new file mode 100644
index 0000000..7b96161
--- /dev/null
+++ b/Chipset/SB/RTEG263.LOM
Binary files differ
diff --git a/Chipset/SB/SleepSmi.c b/Chipset/SB/SleepSmi.c
index 6f17597..86debbe 100644
--- a/Chipset/SB/SleepSmi.c
+++ b/Chipset/SB/SleepSmi.c
@@ -120,8 +120,89 @@ EFI_GUID gThisFileGuid = \
// External Declaration(s)
// Function Definition(s)
-
+// DW01_Custom_Support_RTC_Wake >>
+typedef struct {
+ UINT8 AaeonRTCWakeupTimeHour ;
+ UINT8 AaeonRTCWakeupTimeMinute ;
+ UINT8 AaeonRTCWakeupTimeSecond ;
+ UINT8 AaeonRTCWakeupDateDay;
+} SMMData ;
+
+SMMData gSmmData ;
+
+EFI_GUID gSetupGuid = SETUP_GUID;
+SETUP_DATA SetupData;
//---------------------------------------------------------------------------
+UINT8 DecToBCD(UINT8 Dec)
+{
+ UINT8 FirstDigit = Dec % 10;
+ UINT8 SecondDigit = Dec / 10;
+
+ return (SecondDigit << 4) + FirstDigit;
+}
+UINT8 BCDToDec(UINT8 BCD)
+{
+ UINT8 FirstDigit = BCD & 0xf;
+ UINT8 SecondDigit = BCD >> 4;;
+
+ return SecondDigit * 10 + FirstDigit;
+}
+UINT8 ReadRtcIndex(IN UINT8 Index)
+{
+ UINT8 volatile Value;
+
+ // Check if Data Time is valid
+ if(Index <= 9) do {
+ IoWrite8(0x70, 0x0A | 0x80);
+ Value = IoRead8(0x71);
+ } while (Value & 0x80);
+
+ IoWrite8(0x70, Index | 0x80);
+ // Read register
+ Value = IoRead8(0x71);
+ if (Index <= 9) Value = BCDToDec(Value);
+ return (UINT8)Value;
+}
+void WriteRtcIndex(IN UINT8 Index, IN UINT8 Value)
+{
+ IoWrite8(0x70,Index | 0x80);
+ if (Index <= 9 ) Value = DecToBCD(Value);
+ // Write Register
+ IoWrite8(0x71,Value);
+}
+void SetWakeupTime (
+ IN EFI_TIME *Time
+)
+{
+ UINT8 Value;
+
+ WriteRtcIndex(5,Time->Hour);
+ WriteRtcIndex(3,Time->Minute);
+ WriteRtcIndex(1,Time->Second);
+ Value = ReadRtcIndex(0x0D) & 0xC0;
+ WriteRtcIndex(0x0D,(Value|DecToBCD(Time->Day)));
+
+ //Set Enable
+ Value = ReadRtcIndex(0xB);
+ Value |= 1 << 5;
+ WriteRtcIndex(0xB,Value);
+}
+VOID RTCWakeFunc(){
+ UINT32 i = 0;
+ EFI_TIME Time;
+
+ Time.Hour = gSmmData.AaeonRTCWakeupTimeHour;
+ Time.Minute = gSmmData.AaeonRTCWakeupTimeMinute;
+ Time.Second = gSmmData.AaeonRTCWakeupTimeSecond;
+ Time.Day = gSmmData.AaeonRTCWakeupDateDay;
+
+ SetWakeupTime(&Time);
+ //Clear RTC PM1 status
+ IoWrite16(PM_BASE_ADDRESS , ( IoRead16(PM_BASE_ADDRESS) | (1 << 10) ));
+ //set RTC_EN bit to wake up from the alarm
+ IoWrite32(PM_BASE_ADDRESS, ( IoRead32(PM_BASE_ADDRESS) | (1 << 26) ));
+}
+// DW01_Custom_Support_RTC_Wake <<
//<AMI_PHDR_START>
//----------------------------------------------------------------------------
@@ -311,6 +392,49 @@ VOID S5SleepSmiOccurred (
if (gPchWakeOnLan) Enable_GbE_PME();
+// DW01_Custom_Support_RTC_Wake >>
+ {
+ EFI_STATUS Status = EFI_SUCCESS;
+ UINT8 Value;
+
+ //Disable RTC alarm and clear RTC PM1 status
+ Value = ReadRtcIndex(0xB);
+ Value &= ~((UINT8)1 << 5);
+ WriteRtcIndex(0xB,Value);
+ //Clear Alarm Flag (AF) by reading RTC Reg C
+ Value = ReadRtcIndex(0xC);
+ IoWrite16(PM_BASE_ADDRESS , ( IoRead16(PM_BASE_ADDRESS) | (1 << 10) ));
+
+ if(!EFI_ERROR(Status)){
+ //if(gSetupData.FixedWakeOnRTCS5 == 1){
+ if(SetupData.AaeonWakeOnRtc == 1){
+ gSmmData.AaeonRTCWakeupTimeHour = SetupData.AaeonRTCWakeupTimeHour ;
+ gSmmData.AaeonRTCWakeupTimeMinute = SetupData.AaeonRTCWakeupTimeMinute ;
+ gSmmData.AaeonRTCWakeupTimeSecond = SetupData.AaeonRTCWakeupTimeSecond ;
+ gSmmData.AaeonRTCWakeupDateDay = SetupData.AaeonRTCWakeupTimeDay;
+ }
+
+ //if(gSetupData.DynamicWakeOnRTCS5 == 1){
+ if(SetupData.AaeonWakeOnRtc == 2){
+ gSmmData.AaeonRTCWakeupTimeHour = ReadRtcIndex(4);
+ gSmmData.AaeonRTCWakeupTimeMinute = ReadRtcIndex(2);
+ gSmmData.AaeonRTCWakeupTimeSecond = ReadRtcIndex(0);
+ gSmmData.AaeonRTCWakeupTimeMinute += SetupData.AaeonRTCWakeupTimeMinuteIncrease;
+ if (gSmmData.AaeonRTCWakeupTimeMinute >= 60)
+ {
+ gSmmData.AaeonRTCWakeupTimeMinute = 0;
+ ++gSmmData.AaeonRTCWakeupTimeHour;
+ if (gSmmData.AaeonRTCWakeupTimeHour == 24)
+ gSmmData.AaeonRTCWakeupTimeHour = 0;
+ }
+ }
+ }
+
+ if(SetupData.AaeonWakeOnRtc == 1 || SetupData.AaeonWakeOnRtc == 2)
+ RTCWakeFunc();
+ }
+// DW01_Custom_Support_RTC_Wake <<
+
// Program AfterG3 bit depend the setup question.
ProgramAfterG3Bit();
@@ -439,6 +563,15 @@ EFI_STATUS InitSleepSmi (
gPchWakeOnLan = (SbSetupData->PchWakeOnLan == 1) ? TRUE : FALSE;
Status = pBS->FreePool( SbSetupData );
+// DW01_Custom_Support_RTC_Wake >>
+ VariableSize = sizeof(SETUP_DATA);
+ Status = pRS->GetVariable( L"Setup", \
+ &gSetupGuid, \
+ NULL, \
+ &VariableSize, \
+ &SetupData );
+
+// DW01_Custom_Support_RTC_Wake <<
// Porting End
return InitSmmHandler( ImageHandle, SystemTable, InSmmFunction, NULL );