//\r
/// EFI Component Name 2 Protocol\r
///\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2 = {\r
- (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) IdeControllerComponentNameGetDriverName,\r
- (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) IdeControllerComponentNameGetControllerName,\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)IdeControllerComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)IdeControllerComponentNameGetControllerName,\r
"en"\r
};\r
\r
//\r
/// Driver Name Strings\r
///\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerDriverNameTable[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerDriverNameTable[] = {\r
{\r
"eng;en",\r
(CHAR16 *)L"IDE Controller Init Driver"\r
///\r
/// Controller Name Strings\r
///\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerControllerNameTable[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIdeControllerControllerNameTable[] = {\r
{\r
"eng;en",\r
(CHAR16 *)L"PCAT IDE Controller"\r
EFI_STATUS\r
EFIAPI\r
IdeControllerComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// Make sure this driver is currently managing ControllHandle\r
}\r
\r
return LookupUnicodeString2 (\r
- Language,\r
- This->SupportedLanguages,\r
- mIdeControllerControllerNameTable,\r
- ControllerName,\r
- (BOOLEAN)(This == &gIdeControllerComponentName)\r
- );\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mIdeControllerControllerNameTable,\r
+ ControllerName,\r
+ (BOOLEAN)(This == &gIdeControllerComponentName)\r
+ );\r
}\r
///\r
/// EFI_DRIVER_BINDING_PROTOCOL instance\r
///\r
-EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding = {\r
IdeControllerSupported,\r
IdeControllerStart,\r
IdeControllerStop,\r
EFI_STATUS\r
EFIAPI\r
InitializeIdeControllerDriver (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_STATUS Status;\r
EFI_STATUS\r
EFIAPI\r
IdeControllerSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINT8 PciClass;\r
- UINT8 PciSubClass;\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINT8 PciClass;\r
+ UINT8 PciSubClass;\r
\r
//\r
// Attempt to Open PCI I/O Protocol\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo,\r
+ (VOID **)&PciIo,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
\r
Done:\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
\r
return Status;\r
}\r
EFI_STATUS\r
EFIAPI\r
IdeControllerStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
EFI_STATUS Status;\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo,\r
+ (VOID **)&PciIo,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
//\r
return gBS->InstallMultipleProtocolInterfaces (\r
&Controller,\r
- &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit,\r
+ &gEfiIdeControllerInitProtocolGuid,\r
+ &gEfiIdeControllerInit,\r
NULL\r
);\r
}\r
EFI_STATUS\r
EFIAPI\r
IdeControllerStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
EFI_STATUS Status;\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiIdeControllerInitProtocolGuid,\r
- (VOID **) &IdeControllerInit,\r
+ (VOID **)&IdeControllerInit,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
if (EFI_ERROR (Status)) {\r
- return EFI_UNSUPPORTED;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
//\r
//\r
Status = gBS->UninstallMultipleProtocolInterfaces (\r
Controller,\r
- &gEfiIdeControllerInitProtocolGuid, &gEfiIdeControllerInit,\r
+ &gEfiIdeControllerInitProtocolGuid,\r
+ &gEfiIdeControllerInit,\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
//\r
// Interface functions of IDE_CONTROLLER_INIT protocol\r
//\r
+\r
/**\r
Returns the information about the specified IDE channel.\r
\r
EFI_STATUS\r
EFIAPI\r
IdeInitGetChannelInfo (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- OUT BOOLEAN *Enabled,\r
- OUT UINT8 *MaxDevices\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ OUT BOOLEAN *Enabled,\r
+ OUT UINT8 *MaxDevices\r
)\r
{\r
//\r
EFI_STATUS\r
EFIAPI\r
IdeInitNotifyPhase (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase,\r
- IN UINT8 Channel\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase,\r
+ IN UINT8 Channel\r
)\r
{\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
IdeInitSubmitData (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- IN UINT8 Device,\r
- IN EFI_IDENTIFY_DATA *IdentifyData\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ IN UINT8 Device,\r
+ IN EFI_IDENTIFY_DATA *IdentifyData\r
)\r
{\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
IdeInitDisqualifyMode (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- IN UINT8 Device,\r
- IN EFI_ATA_COLLECTIVE_MODE *BadModes\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ IN UINT8 Device,\r
+ IN EFI_ATA_COLLECTIVE_MODE *BadModes\r
)\r
{\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
IdeInitCalculateMode (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- IN UINT8 Device,\r
- OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ IN UINT8 Device,\r
+ OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes\r
)\r
{\r
- if (Channel >= ICH_IDE_MAX_CHANNEL || Device >= ICH_IDE_MAX_DEVICES) {\r
+ if ((Channel >= ICH_IDE_MAX_CHANNEL) || (Device >= ICH_IDE_MAX_DEVICES)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
IdeInitSetTiming (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- IN UINT8 Device,\r
- IN EFI_ATA_COLLECTIVE_MODE *Modes\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ IN UINT8 Device,\r
+ IN EFI_ATA_COLLECTIVE_MODE *Modes\r
)\r
{\r
return EFI_SUCCESS;\r
//\r
// Global Variables definitions\r
//\r
-extern EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gIdeControllerComponentName;\r
-extern EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2;\r
+extern EFI_DRIVER_BINDING_PROTOCOL gIdeControllerDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gIdeControllerComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gIdeControllerComponentName2;\r
\r
///\r
/// Supports 2 channel max\r
///\r
-#define ICH_IDE_MAX_CHANNEL 0x02\r
+#define ICH_IDE_MAX_CHANNEL 0x02\r
\r
///\r
/// Supports 2 devices max\r
///\r
-#define ICH_IDE_MAX_DEVICES 0x02\r
-#define ICH_IDE_ENUMER_ALL FALSE\r
+#define ICH_IDE_MAX_DEVICES 0x02\r
+#define ICH_IDE_ENUMER_ALL FALSE\r
\r
//\r
// Driver binding functions declaration\r
//\r
+\r
/**\r
Register Driver Binding protocol for this driver.\r
\r
EFI_STATUS\r
EFIAPI\r
IdeControllerSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
IdeControllerStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
IdeControllerStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
;\r
\r
//\r
// IDE controller init functions declaration\r
//\r
+\r
/**\r
Returns the information about the specified IDE channel.\r
\r
EFI_STATUS\r
EFIAPI\r
IdeInitGetChannelInfo (\r
- IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
- IN UINT8 Channel,\r
- OUT BOOLEAN *Enabled,\r
- OUT UINT8 *MaxDevices\r
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,\r
+ IN UINT8 Channel,\r
+ OUT BOOLEAN *Enabled,\r
+ OUT UINT8 *MaxDevices\r
)\r
;\r
\r
//\r
// Forward reference declaration\r
//\r
+\r
/**\r
Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
\r
EFI_STATUS\r
EFIAPI\r
IdeControllerComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
TimerDriverGetTimerPeriod (\r
- IN EFI_TIMER_ARCH_PROTOCOL *This,\r
- OUT UINT64 *TimerPeriod\r
+ IN EFI_TIMER_ARCH_PROTOCOL *This,\r
+ OUT UINT64 *TimerPeriod\r
);\r
\r
/**\r
///\r
/// The handle onto which the Timer Architectural Protocol will be installed.\r
///\r
-EFI_HANDLE mTimerHandle = NULL;\r
+EFI_HANDLE mTimerHandle = NULL;\r
\r
///\r
/// The Timer Architectural Protocol that this driver produces.\r
VOID\r
EFIAPI\r
TimerInterruptHandler (\r
- IN EFI_EXCEPTION_TYPE InterruptType,\r
- IN EFI_SYSTEM_CONTEXT SystemContext\r
+ IN EFI_EXCEPTION_TYPE InterruptType,\r
+ IN EFI_SYSTEM_CONTEXT SystemContext\r
)\r
{\r
UINT64 MainCounter;\r
//\r
// Count number of ticks\r
//\r
- DEBUG_CODE (mNumTicks++;);\r
+ DEBUG_CODE (\r
+ mNumTicks++;\r
+ );\r
\r
//\r
// Clear HPET timer interrupt status\r
//\r
Delta = (mCounterMask - mPreviousMainCounter) + MainCounter;\r
}\r
+\r
TimerPeriod = DivU64x32 (\r
MultU64x32 (\r
Delta & mCounterMask,\r
//\r
// Check for invalid parameters\r
//\r
- if (NotifyFunction == NULL && mTimerNotifyFunction == NULL) {\r
+ if ((NotifyFunction == NULL) && (mTimerNotifyFunction == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
- if (NotifyFunction != NULL && mTimerNotifyFunction != NULL) {\r
+\r
+ if ((NotifyFunction != NULL) && (mTimerNotifyFunction != NULL)) {\r
return EFI_ALREADY_STARTED;\r
}\r
\r
} else {\r
Delta = MainCounter - mPreviousMainCounter;\r
}\r
+\r
if ((Delta & mCounterMask) >= mTimerCount) {\r
//\r
// Interrupt still happens after disable HPET, wait to be processed\r
CurrentComparator = HpetRead (HPET_TIMER_COMPARATOR_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
while (CurrentComparator == mPreviousComparator) {\r
CurrentComparator = HpetRead (HPET_TIMER_COMPARATOR_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
- CpuPause();\r
+ CpuPause ();\r
}\r
}\r
}\r
// If TimerPeriod is 0, then mask HPET Timer interrupts\r
//\r
\r
- if (mTimerConfiguration.Bits.MsiInterruptCapability != 0 && FeaturePcdGet (PcdHpetMsiEnable)) {\r
+ if ((mTimerConfiguration.Bits.MsiInterruptCapability != 0) && FeaturePcdGet (PcdHpetMsiEnable)) {\r
//\r
// Disable HPET MSI interrupt generation\r
//\r
} else {\r
Delta = (mCounterMask - mPreviousMainCounter) + MainCounter;\r
}\r
+\r
if ((Delta & mCounterMask) >= mTimerCount) {\r
HpetWrite (HPET_TIMER_COMPARATOR_OFFSET + mTimerIndex * HPET_TIMER_STRIDE, (MainCounter + 1) & mCounterMask);\r
} else {\r
//\r
// Enable HPET Timer interrupt generation\r
//\r
- if (mTimerConfiguration.Bits.MsiInterruptCapability != 0 && FeaturePcdGet (PcdHpetMsiEnable)) {\r
+ if ((mTimerConfiguration.Bits.MsiInterruptCapability != 0) && FeaturePcdGet (PcdHpetMsiEnable)) {\r
//\r
// Program MSI Address and MSI Data values in the selected HPET Timer\r
// Program HPET register with APIC ID of current BSP in case BSP has been switched\r
EFI_STATUS\r
EFIAPI\r
TimerDriverGetTimerPeriod (\r
- IN EFI_TIMER_ARCH_PROTOCOL *This,\r
- OUT UINT64 *TimerPeriod\r
+ IN EFI_TIMER_ARCH_PROTOCOL *This,\r
+ OUT UINT64 *TimerPeriod\r
)\r
{\r
if (TimerPeriod == NULL) {\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN TimerIndex;\r
- UINTN MsiTimerIndex;\r
- HPET_TIMER_MSI_ROUTE_REGISTER HpetTimerMsiRoute;\r
+ EFI_STATUS Status;\r
+ UINTN TimerIndex;\r
+ UINTN MsiTimerIndex;\r
+ HPET_TIMER_MSI_ROUTE_REGISTER HpetTimerMsiRoute;\r
\r
DEBUG ((DEBUG_INFO, "Init HPET Timer Driver\n"));\r
\r
//\r
// Find the CPU architectural protocol.\r
//\r
- Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &mCpu);\r
+ Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&mCpu);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
//\r
ASSERT (mHpetGeneralCapabilities.Uint64 != 0);\r
ASSERT (mHpetGeneralCapabilities.Uint64 != 0xFFFFFFFFFFFFFFFFULL);\r
- if (mHpetGeneralCapabilities.Uint64 == 0 || mHpetGeneralCapabilities.Uint64 == 0xFFFFFFFFFFFFFFFFULL) {\r
+ if ((mHpetGeneralCapabilities.Uint64 == 0) || (mHpetGeneralCapabilities.Uint64 == 0xFFFFFFFFFFFFFFFFULL)) {\r
DEBUG ((DEBUG_ERROR, "HPET device is not present. Unload HPET driver.\n"));\r
return EFI_DEVICE_ERROR;\r
}\r
// Dump HPET Configuration Information\r
//\r
DEBUG_CODE_BEGIN ();\r
- DEBUG ((DEBUG_INFO, "HPET Base Address = 0x%08x\n", PcdGet32 (PcdHpetBaseAddress)));\r
- DEBUG ((DEBUG_INFO, " HPET_GENERAL_CAPABILITIES_ID = 0x%016lx\n", mHpetGeneralCapabilities));\r
- DEBUG ((DEBUG_INFO, " HPET_GENERAL_CONFIGURATION = 0x%016lx\n", mHpetGeneralConfiguration.Uint64));\r
- DEBUG ((DEBUG_INFO, " HPET_GENERAL_INTERRUPT_STATUS = 0x%016lx\n", HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET)));\r
- DEBUG ((DEBUG_INFO, " HPET_MAIN_COUNTER = 0x%016lx\n", HpetRead (HPET_MAIN_COUNTER_OFFSET)));\r
- DEBUG ((DEBUG_INFO, " HPET Main Counter Period = %d (fs)\n", mHpetGeneralCapabilities.Bits.CounterClockPeriod));\r
- for (TimerIndex = 0; TimerIndex <= mHpetGeneralCapabilities.Bits.NumberOfTimers; TimerIndex++) {\r
- DEBUG ((DEBUG_INFO, " HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
- DEBUG ((DEBUG_INFO, " HPET_TIMER%d_COMPARATOR = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
- DEBUG ((DEBUG_INFO, " HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
- }\r
+ DEBUG ((DEBUG_INFO, "HPET Base Address = 0x%08x\n", PcdGet32 (PcdHpetBaseAddress)));\r
+ DEBUG ((DEBUG_INFO, " HPET_GENERAL_CAPABILITIES_ID = 0x%016lx\n", mHpetGeneralCapabilities));\r
+ DEBUG ((DEBUG_INFO, " HPET_GENERAL_CONFIGURATION = 0x%016lx\n", mHpetGeneralConfiguration.Uint64));\r
+ DEBUG ((DEBUG_INFO, " HPET_GENERAL_INTERRUPT_STATUS = 0x%016lx\n", HpetRead (HPET_GENERAL_INTERRUPT_STATUS_OFFSET)));\r
+ DEBUG ((DEBUG_INFO, " HPET_MAIN_COUNTER = 0x%016lx\n", HpetRead (HPET_MAIN_COUNTER_OFFSET)));\r
+ DEBUG ((DEBUG_INFO, " HPET Main Counter Period = %d (fs)\n", mHpetGeneralCapabilities.Bits.CounterClockPeriod));\r
+ for (TimerIndex = 0; TimerIndex <= mHpetGeneralCapabilities.Bits.NumberOfTimers; TimerIndex++) {\r
+ DEBUG ((DEBUG_INFO, " HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
+ DEBUG ((DEBUG_INFO, " HPET_TIMER%d_COMPARATOR = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_COMPARATOR_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
+ DEBUG ((DEBUG_INFO, " HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", TimerIndex, HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + TimerIndex * HPET_TIMER_STRIDE)));\r
+ }\r
+\r
DEBUG_CODE_END ();\r
\r
//\r
}\r
}\r
\r
- if (FeaturePcdGet (PcdHpetMsiEnable) && MsiTimerIndex != HPET_INVALID_TIMER_INDEX) {\r
+ if (FeaturePcdGet (PcdHpetMsiEnable) && (MsiTimerIndex != HPET_INVALID_TIMER_INDEX)) {\r
//\r
// Use MSI interrupt if supported\r
//\r
- mTimerIndex = MsiTimerIndex;\r
+ mTimerIndex = MsiTimerIndex;\r
\r
//\r
// Program MSI Address and MSI Data values in the selected HPET Timer\r
// Read the HPET Timer Capabilities and Configuration register and initialize for MSI mode\r
// Clear LevelTriggeredInterrupt to use edge triggered interrupts when in MSI mode\r
//\r
- mTimerConfiguration.Uint64 = HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
+ mTimerConfiguration.Uint64 = HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
mTimerConfiguration.Bits.LevelTriggeredInterrupt = 0;\r
} else {\r
//\r
// Set LevelTriggeredInterrupt to use level triggered interrupts when in I/O APIC mode\r
// Set InterruptRoute field based in mTimerIrq\r
//\r
- mTimerConfiguration.Uint64 = HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
+ mTimerConfiguration.Uint64 = HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE);\r
mTimerConfiguration.Bits.LevelTriggeredInterrupt = 1;\r
mTimerConfiguration.Bits.InterruptRoute = mTimerIrq;\r
}\r
// Show state of enabled HPET timer\r
//\r
DEBUG_CODE_BEGIN ();\r
- if (mTimerConfiguration.Bits.MsiInterruptCapability != 0 && FeaturePcdGet (PcdHpetMsiEnable)) {\r
- DEBUG ((DEBUG_INFO, "HPET Interrupt Mode MSI\n"));\r
- } else {\r
- DEBUG ((DEBUG_INFO, "HPET Interrupt Mode I/O APIC\n"));\r
- DEBUG ((DEBUG_INFO, "HPET I/O APIC IRQ = 0x%02x\n", mTimerIrq));\r
- }\r
- DEBUG ((DEBUG_INFO, "HPET Interrupt Vector = 0x%02x\n", PcdGet8 (PcdHpetLocalApicVector)));\r
- DEBUG ((DEBUG_INFO, "HPET Counter Mask = 0x%016lx\n", mCounterMask));\r
- DEBUG ((DEBUG_INFO, "HPET Timer Period = %d\n", mTimerPeriod));\r
- DEBUG ((DEBUG_INFO, "HPET Timer Count = 0x%016lx\n", mTimerCount));\r
- DEBUG ((DEBUG_INFO, "HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
- DEBUG ((DEBUG_INFO, "HPET_TIMER%d_COMPARATOR = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_COMPARATOR_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
- DEBUG ((DEBUG_INFO, "HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
+ if ((mTimerConfiguration.Bits.MsiInterruptCapability != 0) && FeaturePcdGet (PcdHpetMsiEnable)) {\r
+ DEBUG ((DEBUG_INFO, "HPET Interrupt Mode MSI\n"));\r
+ } else {\r
+ DEBUG ((DEBUG_INFO, "HPET Interrupt Mode I/O APIC\n"));\r
+ DEBUG ((DEBUG_INFO, "HPET I/O APIC IRQ = 0x%02x\n", mTimerIrq));\r
+ }\r
+\r
+ DEBUG ((DEBUG_INFO, "HPET Interrupt Vector = 0x%02x\n", PcdGet8 (PcdHpetLocalApicVector)));\r
+ DEBUG ((DEBUG_INFO, "HPET Counter Mask = 0x%016lx\n", mCounterMask));\r
+ DEBUG ((DEBUG_INFO, "HPET Timer Period = %d\n", mTimerPeriod));\r
+ DEBUG ((DEBUG_INFO, "HPET Timer Count = 0x%016lx\n", mTimerCount));\r
+ DEBUG ((DEBUG_INFO, "HPET_TIMER%d_CONFIGURATION = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_CONFIGURATION_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
+ DEBUG ((DEBUG_INFO, "HPET_TIMER%d_COMPARATOR = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_COMPARATOR_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
+ DEBUG ((DEBUG_INFO, "HPET_TIMER%d_MSI_ROUTE = 0x%016lx\n", mTimerIndex, HpetRead (HPET_TIMER_MSI_ROUTE_OFFSET + mTimerIndex * HPET_TIMER_STRIDE)));\r
+\r
+ //\r
+ // Wait for a few timer interrupts to fire before continuing\r
+ //\r
+ while (mNumTicks < 10) {\r
+ }\r
\r
- //\r
- // Wait for a few timer interrupts to fire before continuing\r
- //\r
- while (mNumTicks < 10);\r
DEBUG_CODE_END ();\r
\r
//\r
//\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&mTimerHandle,\r
- &gEfiTimerArchProtocolGuid, &mTimer,\r
+ &gEfiTimerArchProtocolGuid,\r
+ &mTimer,\r
NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
0x326ae723, 0xae32, 0x4589, { 0x98, 0xb8, 0xca, 0xc2, 0x3c, 0xdc, 0xc1, 0xb1 } \\r
}\r
\r
-extern EFI_GUID gPcAtChipsetPkgTokenSpaceGuid;\r
+extern EFI_GUID gPcAtChipsetPkgTokenSpaceGuid;\r
\r
#endif\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
+\r
#ifndef __IO_APIC_LIB_H__\r
#define __IO_APIC_LIB_H__\r
\r
IN BOOLEAN LevelTriggered,\r
IN BOOLEAN AssertionLevel\r
);\r
+\r
#endif\r
///\r
/// HPET Timer Register Offsets\r
///\r
-#define HPET_MAIN_COUNTER_OFFSET 0x0F0\r
-#define HPET_TIMER_CONFIGURATION_OFFSET 0x100\r
-#define HPET_TIMER_COMPARATOR_OFFSET 0x108\r
-#define HPET_TIMER_MSI_ROUTE_OFFSET 0x110\r
+#define HPET_MAIN_COUNTER_OFFSET 0x0F0\r
+#define HPET_TIMER_CONFIGURATION_OFFSET 0x100\r
+#define HPET_TIMER_COMPARATOR_OFFSET 0x108\r
+#define HPET_TIMER_MSI_ROUTE_OFFSET 0x110\r
\r
///\r
/// Stride between sets of HPET Timer Registers\r
///\r
-#define HPET_TIMER_STRIDE 0x20\r
+#define HPET_TIMER_STRIDE 0x20\r
\r
#pragma pack(1)\r
\r
///\r
typedef union {\r
struct {\r
- UINT32 Revision:8;\r
- UINT32 NumberOfTimers:5;\r
- UINT32 CounterSize:1;\r
- UINT32 Reserved0:1;\r
- UINT32 LegacyRoute:1;\r
- UINT32 VendorId:16;\r
- UINT32 CounterClockPeriod:32;\r
+ UINT32 Revision : 8;\r
+ UINT32 NumberOfTimers : 5;\r
+ UINT32 CounterSize : 1;\r
+ UINT32 Reserved0 : 1;\r
+ UINT32 LegacyRoute : 1;\r
+ UINT32 VendorId : 16;\r
+ UINT32 CounterClockPeriod : 32;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} HPET_GENERAL_CAPABILITIES_ID_REGISTER;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 MainCounterEnable:1;\r
- UINT32 LegacyRouteEnable:1;\r
- UINT32 Reserved0:30;\r
- UINT32 Reserved1:32;\r
+ UINT32 MainCounterEnable : 1;\r
+ UINT32 LegacyRouteEnable : 1;\r
+ UINT32 Reserved0 : 30;\r
+ UINT32 Reserved1 : 32;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} HPET_GENERAL_CONFIGURATION_REGISTER;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 Reserved0:1;\r
- UINT32 LevelTriggeredInterrupt:1;\r
- UINT32 InterruptEnable:1;\r
- UINT32 PeriodicInterruptEnable:1;\r
- UINT32 PeriodicInterruptCapability:1;\r
- UINT32 CounterSizeCapability:1;\r
- UINT32 ValueSetEnable:1;\r
- UINT32 Reserved1:1;\r
- UINT32 CounterSizeEnable:1;\r
- UINT32 InterruptRoute:5;\r
- UINT32 MsiInterruptEnable:1;\r
- UINT32 MsiInterruptCapability:1;\r
- UINT32 Reserved2:16;\r
- UINT32 InterruptRouteCapability;\r
+ UINT32 Reserved0 : 1;\r
+ UINT32 LevelTriggeredInterrupt : 1;\r
+ UINT32 InterruptEnable : 1;\r
+ UINT32 PeriodicInterruptEnable : 1;\r
+ UINT32 PeriodicInterruptCapability : 1;\r
+ UINT32 CounterSizeCapability : 1;\r
+ UINT32 ValueSetEnable : 1;\r
+ UINT32 Reserved1 : 1;\r
+ UINT32 CounterSizeEnable : 1;\r
+ UINT32 InterruptRoute : 5;\r
+ UINT32 MsiInterruptEnable : 1;\r
+ UINT32 MsiInterruptCapability : 1;\r
+ UINT32 Reserved2 : 16;\r
+ UINT32 InterruptRouteCapability;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} HPET_TIMER_CONFIGURATION_REGISTER;\r
\r
///\r
///\r
typedef union {\r
struct {\r
- UINT32 Value:32;\r
- UINT32 Address:32;\r
+ UINT32 Value : 32;\r
+ UINT32 Address : 32;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} HPET_TIMER_MSI_ROUTE_REGISTER;\r
\r
#pragma pack()\r
\r
typedef union {\r
struct {\r
- UINT32 Reserved0:24;\r
- UINT32 Identification:4;\r
- UINT32 Reserved1:4;\r
+ UINT32 Reserved0 : 24;\r
+ UINT32 Identification : 4;\r
+ UINT32 Reserved1 : 4;\r
} Bits;\r
- UINT32 Uint32;\r
+ UINT32 Uint32;\r
} IO_APIC_IDENTIFICATION_REGISTER;\r
\r
typedef union {\r
struct {\r
- UINT32 Version:8;\r
- UINT32 Reserved0:8;\r
- UINT32 MaximumRedirectionEntry:8;\r
- UINT32 Reserved1:8;\r
+ UINT32 Version : 8;\r
+ UINT32 Reserved0 : 8;\r
+ UINT32 MaximumRedirectionEntry : 8;\r
+ UINT32 Reserved1 : 8;\r
} Bits;\r
- UINT32 Uint32;\r
+ UINT32 Uint32;\r
} IO_APIC_VERSION_REGISTER;\r
\r
typedef union {\r
struct {\r
- UINT32 Vector: 8;\r
- UINT32 DeliveryMode: 3;\r
- UINT32 DestinationMode: 1;\r
- UINT32 DeliveryStatus: 1;\r
- UINT32 Polarity: 1;\r
- UINT32 RemoteIRR: 1;\r
- UINT32 TriggerMode: 1;\r
- UINT32 Mask: 1;\r
- UINT32 Reserved0: 15;\r
- UINT32 Reserved1: 24;\r
- UINT32 DestinationID: 8;\r
+ UINT32 Vector : 8;\r
+ UINT32 DeliveryMode : 3;\r
+ UINT32 DestinationMode : 1;\r
+ UINT32 DeliveryStatus : 1;\r
+ UINT32 Polarity : 1;\r
+ UINT32 RemoteIRR : 1;\r
+ UINT32 TriggerMode : 1;\r
+ UINT32 Mask : 1;\r
+ UINT32 Reserved0 : 15;\r
+ UINT32 Reserved1 : 24;\r
+ UINT32 DestinationID : 8;\r
} Bits;\r
struct {\r
- UINT32 Low;\r
- UINT32 High;\r
+ UINT32 Low;\r
+ UINT32 High;\r
} Uint32;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IO_APIC_REDIRECTION_TABLE_ENTRY;\r
\r
#pragma pack()\r
#include <Library/DebugLib.h>\r
#include <IndustryStandard/Acpi.h>\r
\r
-GUID mFrequencyHobGuid = { 0x3fca54f6, 0xe1a2, 0x4b20, { 0xbe, 0x76, 0x92, 0x6b, 0x4b, 0x48, 0xbf, 0xaa }};\r
+GUID mFrequencyHobGuid = {\r
+ 0x3fca54f6, 0xe1a2, 0x4b20, { 0xbe, 0x76, 0x92, 0x6b, 0x4b, 0x48, 0xbf, 0xaa }\r
+};\r
\r
/**\r
Internal function to retrieves the 64-bit frequency in Hz.\r
VOID\r
)\r
{\r
- UINTN Bus;\r
- UINTN Device;\r
- UINTN Function;\r
- UINTN EnableRegister;\r
- UINT8 EnableMask;\r
+ UINTN Bus;\r
+ UINTN Device;\r
+ UINTN Function;\r
+ UINTN EnableRegister;\r
+ UINT8 EnableMask;\r
\r
//\r
// ASSERT for the invalid PCD values. They must be configured to the real value.\r
//\r
// ASSERT for the invalid PCD values. They must be configured to the real value.\r
//\r
- ASSERT (PcdGet8 (PcdAcpiIoPciDeviceNumber) != 0xFF);\r
- ASSERT (PcdGet8 (PcdAcpiIoPciFunctionNumber) != 0xFF);\r
+ ASSERT (PcdGet8 (PcdAcpiIoPciDeviceNumber) != 0xFF);\r
+ ASSERT (PcdGet8 (PcdAcpiIoPciFunctionNumber) != 0xFF);\r
ASSERT (PcdGet16 (PcdAcpiIoPciEnableRegisterOffset) != 0xFFFF);\r
\r
//\r
// Retrieve the PCD values for the PCI configuration space required to program the ACPI I/O Port Base Address\r
//\r
- Bus = PcdGet8 (PcdAcpiIoPciBusNumber);\r
- Device = PcdGet8 (PcdAcpiIoPciDeviceNumber);\r
- Function = PcdGet8 (PcdAcpiIoPciFunctionNumber);\r
+ Bus = PcdGet8 (PcdAcpiIoPciBusNumber);\r
+ Device = PcdGet8 (PcdAcpiIoPciDeviceNumber);\r
+ Function = PcdGet8 (PcdAcpiIoPciFunctionNumber);\r
EnableRegister = PcdGet16 (PcdAcpiIoPciEnableRegisterOffset);\r
- EnableMask = PcdGet8 (PcdAcpiIoBarEnableMask);\r
+ EnableMask = PcdGet8 (PcdAcpiIoBarEnableMask);\r
\r
//\r
// If ACPI I/O space is not enabled yet, program ACPI I/O base address and enable it.\r
// value other than PcdAcpiIoPortBaseAddress\r
//\r
if (PcdGet16 (PcdAcpiIoPciBarRegisterOffset) != 0x0000) {\r
- Port = PciRead16 (PCI_LIB_ADDRESS (\r
- PcdGet8 (PcdAcpiIoPciBusNumber),\r
- PcdGet8 (PcdAcpiIoPciDeviceNumber),\r
- PcdGet8 (PcdAcpiIoPciFunctionNumber),\r
- PcdGet16 (PcdAcpiIoPciBarRegisterOffset)\r
- ));\r
+ Port = PciRead16 (\r
+ PCI_LIB_ADDRESS (\r
+ PcdGet8 (PcdAcpiIoPciBusNumber),\r
+ PcdGet8 (PcdAcpiIoPciDeviceNumber),\r
+ PcdGet8 (PcdAcpiIoPciFunctionNumber),\r
+ PcdGet16 (PcdAcpiIoPciBarRegisterOffset)\r
+ )\r
+ );\r
}\r
\r
return (Port & PcdGet16 (PcdAcpiIoPortBaseAddressMask)) + PcdGet16 (PcdAcpiPm1TmrOffset);\r
IN UINT32 Delay\r
)\r
{\r
- UINT16 Port;\r
- UINT32 Ticks;\r
- UINT32 Times;\r
+ UINT16 Port;\r
+ UINT32 Ticks;\r
+ UINT32 Times;\r
\r
Port = InternalAcpiGetAcpiTimerIoPort ();\r
Times = Delay >> 22;\r
if (EndValue != NULL) {\r
*EndValue = 0xffffffffffffffffULL;\r
}\r
+\r
return InternalGetPerformanceCounterFrequency ();\r
}\r
\r
// Since 2^29 < 1,000,000,000 = 0x3B9ACA00 < 2^30, Remainder should < 2^(64-30) = 2^34,\r
// i.e. highest bit set in Remainder should <= 33.\r
//\r
- Shift = MAX (0, HighBitSet64 (Remainder) - 33);\r
- Remainder = RShiftU64 (Remainder, (UINTN) Shift);\r
- Frequency = RShiftU64 (Frequency, (UINTN) Shift);\r
+ Shift = MAX (0, HighBitSet64 (Remainder) - 33);\r
+ Remainder = RShiftU64 (Remainder, (UINTN)Shift);\r
+ Frequency = RShiftU64 (Frequency, (UINTN)Shift);\r
NanoSeconds += DivU64x64Remainder (MultU64x32 (Remainder, 1000000000u), Frequency, NULL);\r
\r
return NanoSeconds;\r
VOID\r
)\r
{\r
- UINT64 StartTSC;\r
- UINT64 EndTSC;\r
- UINT16 TimerAddr;\r
- UINT32 Ticks;\r
- UINT64 TscFrequency;\r
- BOOLEAN InterruptState;\r
+ UINT64 StartTSC;\r
+ UINT64 EndTSC;\r
+ UINT16 TimerAddr;\r
+ UINT32 Ticks;\r
+ UINT64 TscFrequency;\r
+ BOOLEAN InterruptState;\r
\r
InterruptState = SaveAndDisableInterrupts ();\r
\r
// the while loop will exit.\r
//\r
while (((Ticks - IoBitFieldRead32 (TimerAddr, 0, 23)) & BIT23) == 0) {\r
- CpuPause();\r
+ CpuPause ();\r
}\r
+\r
EndTSC = AsmReadTsc (); // TSC value 101.4 us later\r
\r
TscFrequency = MultU64x32 (\r
#include <Library/BaseLib.h>\r
#include <Library/HobLib.h>\r
\r
-extern GUID mFrequencyHobGuid;\r
+extern GUID mFrequencyHobGuid;\r
\r
/**\r
The constructor function enables ACPI IO space.\r
VOID\r
)\r
{\r
- return mPerformanceCounterFrequency;\r
+ return mPerformanceCounterFrequency;\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
\r
//\r
// Enable ACPI IO space.\r
//\r
GuidHob = GetFirstGuidHob (&mFrequencyHobGuid);\r
if (GuidHob != NULL) {\r
- mPerformanceCounterFrequency = *(UINT64*)GET_GUID_HOB_DATA (GuidHob);\r
+ mPerformanceCounterFrequency = *(UINT64 *)GET_GUID_HOB_DATA (GuidHob);\r
} else {\r
mPerformanceCounterFrequency = InternalCalculateTscFrequency ();\r
}\r
\r
**/\r
\r
-\r
#ifndef _DXE_STANDALONE_MM_ACPI_TIMER_LIB_H_\r
#define _DXE_STANDALONE_MM_ACPI_TIMER_LIB_H_\r
\r
#include <Library/HobLib.h>\r
#include <Library/DebugLib.h>\r
\r
-extern GUID mFrequencyHobGuid;\r
+extern GUID mFrequencyHobGuid;\r
\r
/**\r
Calculate TSC frequency.\r
VOID\r
)\r
{\r
- UINT64 *PerformanceCounterFrequency;\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
+ UINT64 *PerformanceCounterFrequency;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
\r
PerformanceCounterFrequency = NULL;\r
- GuidHob = GetFirstGuidHob (&mFrequencyHobGuid);\r
+ GuidHob = GetFirstGuidHob (&mFrequencyHobGuid);\r
if (GuidHob == NULL) {\r
- PerformanceCounterFrequency = (UINT64*)BuildGuidHob(&mFrequencyHobGuid, sizeof (*PerformanceCounterFrequency));\r
+ PerformanceCounterFrequency = (UINT64 *)BuildGuidHob (&mFrequencyHobGuid, sizeof (*PerformanceCounterFrequency));\r
ASSERT (PerformanceCounterFrequency != NULL);\r
*PerformanceCounterFrequency = InternalCalculateTscFrequency ();\r
} else {\r
- PerformanceCounterFrequency = (UINT64*)GET_GUID_HOB_DATA (GuidHob);\r
+ PerformanceCounterFrequency = (UINT64 *)GET_GUID_HOB_DATA (GuidHob);\r
}\r
\r
- return *PerformanceCounterFrequency;\r
+ return *PerformanceCounterFrequency;\r
}\r
ASSERT (Irq <= Version.Bits.MaximumRedirectionEntry);\r
\r
Entry.Uint32.Low = IoApicRead (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2);\r
- Entry.Bits.Mask = Enable ? 0 : 1;\r
+ Entry.Bits.Mask = Enable ? 0 : 1;\r
IoApicWrite (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2, Entry.Uint32.Low);\r
}\r
\r
ASSERT (Vector <= 0xFF);\r
ASSERT (DeliveryMode < 8 && DeliveryMode != 6 && DeliveryMode != 3);\r
\r
- Entry.Uint32.Low = IoApicRead (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2);\r
+ Entry.Uint32.Low = IoApicRead (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2);\r
Entry.Bits.Vector = (UINT8)Vector;\r
Entry.Bits.DeliveryMode = (UINT32)DeliveryMode;\r
Entry.Bits.DestinationMode = 0;\r
Entry.Bits.Mask = 1;\r
IoApicWrite (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2, Entry.Uint32.Low);\r
\r
- Entry.Uint32.High = IoApicRead (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2 + 1);\r
+ Entry.Uint32.High = IoApicRead (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2 + 1);\r
Entry.Bits.DestinationID = GetApicId ();\r
IoApicWrite (IO_APIC_REDIRECTION_TABLE_ENTRY_INDEX + Irq * 2 + 1, Entry.Uint32.High);\r
}\r
VOID\r
)\r
{\r
- IoWrite8 ((UINTN) PcdGet64 (PcdResetControlRegister), PcdGet8 (PcdResetControlValueColdReset));\r
+ IoWrite8 ((UINTN)PcdGet64 (PcdResetControlRegister), PcdGet8 (PcdResetControlValueColdReset));\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- IoWrite8 ((UINTN) PcdGet64 (PcdResetControlRegister), PcdGet8 (PcdResetControlValueColdReset));\r
+ IoWrite8 ((UINTN)PcdGet64 (PcdResetControlRegister), PcdGet8 (PcdResetControlValueColdReset));\r
}\r
\r
/**\r
ASSERT (FALSE);\r
}\r
\r
-\r
/**\r
This function causes a systemwide reset. The exact type of the reset is\r
defined by the EFI_GUID that follows the Null-terminated Unicode string passed\r
VOID\r
EFIAPI\r
ResetPlatformSpecific (\r
- IN UINTN DataSize,\r
- IN VOID *ResetData\r
+ IN UINTN DataSize,\r
+ IN VOID *ResetData\r
)\r
{\r
ResetCold ();\r
VOID\r
EFIAPI\r
ResetSystem (\r
- IN EFI_RESET_TYPE ResetType,\r
- IN EFI_STATUS ResetStatus,\r
- IN UINTN DataSize,\r
- IN VOID *ResetData OPTIONAL\r
+ IN EFI_RESET_TYPE ResetType,\r
+ IN EFI_STATUS ResetStatus,\r
+ IN UINTN DataSize,\r
+ IN VOID *ResetData OPTIONAL\r
)\r
{\r
switch (ResetType) {\r
- case EfiResetWarm:\r
- ResetWarm ();\r
- break;\r
+ case EfiResetWarm:\r
+ ResetWarm ();\r
+ break;\r
\r
- case EfiResetCold:\r
- ResetCold ();\r
- break;\r
+ case EfiResetCold:\r
+ ResetCold ();\r
+ break;\r
\r
- case EfiResetShutdown:\r
- ResetShutdown ();\r
- return;\r
+ case EfiResetShutdown:\r
+ ResetShutdown ();\r
+ return;\r
\r
- case EfiResetPlatformSpecific:\r
- ResetPlatformSpecific (DataSize, ResetData);\r
- return;\r
+ case EfiResetPlatformSpecific:\r
+ ResetPlatformSpecific (DataSize, ResetData);\r
+ return;\r
\r
- default:\r
- return;\r
+ default:\r
+ return;\r
}\r
}\r
#include <Library/IoLib.h>\r
#include <Library/SerialPortLib.h>\r
\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
// UART Register Offsets\r
-//---------------------------------------------\r
-#define BAUD_LOW_OFFSET 0x00\r
-#define BAUD_HIGH_OFFSET 0x01\r
-#define IER_OFFSET 0x01\r
-#define LCR_SHADOW_OFFSET 0x01\r
-#define FCR_SHADOW_OFFSET 0x02\r
-#define IR_CONTROL_OFFSET 0x02\r
-#define FCR_OFFSET 0x02\r
-#define EIR_OFFSET 0x02\r
-#define BSR_OFFSET 0x03\r
-#define LCR_OFFSET 0x03\r
-#define MCR_OFFSET 0x04\r
-#define LSR_OFFSET 0x05\r
-#define MSR_OFFSET 0x06\r
-\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
+#define BAUD_LOW_OFFSET 0x00\r
+#define BAUD_HIGH_OFFSET 0x01\r
+#define IER_OFFSET 0x01\r
+#define LCR_SHADOW_OFFSET 0x01\r
+#define FCR_SHADOW_OFFSET 0x02\r
+#define IR_CONTROL_OFFSET 0x02\r
+#define FCR_OFFSET 0x02\r
+#define EIR_OFFSET 0x02\r
+#define BSR_OFFSET 0x03\r
+#define LCR_OFFSET 0x03\r
+#define MCR_OFFSET 0x04\r
+#define LSR_OFFSET 0x05\r
+#define MSR_OFFSET 0x06\r
+\r
+// ---------------------------------------------\r
// UART Register Bit Defines\r
-//---------------------------------------------\r
-#define LSR_TXRDY 0x20\r
-#define LSR_RXDA 0x01\r
-#define DLAB 0x01\r
-#define MCR_DTRC 0x01\r
-#define MCR_RTS 0x02\r
-#define MSR_CTS 0x10\r
-#define MSR_DSR 0x20\r
-#define MSR_RI 0x40\r
-#define MSR_DCD 0x80\r
-\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
+#define LSR_TXRDY 0x20\r
+#define LSR_RXDA 0x01\r
+#define DLAB 0x01\r
+#define MCR_DTRC 0x01\r
+#define MCR_RTS 0x02\r
+#define MSR_CTS 0x10\r
+#define MSR_DSR 0x20\r
+#define MSR_RI 0x40\r
+#define MSR_DCD 0x80\r
+\r
+// ---------------------------------------------\r
// UART Settings\r
-//---------------------------------------------\r
+// ---------------------------------------------\r
UINT16 gUartBase = 0x3F8;\r
UINTN gBps = 115200;\r
UINT8 gData = 8;\r
//\r
// Map 5..8 to 0..3\r
//\r
- Data = (UINT8) (gData - (UINT8) 5);\r
+ Data = (UINT8)(gData - (UINT8)5);\r
\r
//\r
// Calculate divisor for baud generator\r
//\r
// Set communications format\r
//\r
- OutputData = (UINT8) ((DLAB << 7) | (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
+ OutputData = (UINT8)((DLAB << 7) | (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
//\r
// Configure baud rate\r
//\r
- IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));\r
- IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));\r
+ IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8)(Divisor >> 8));\r
+ IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8)(Divisor & 0xff));\r
\r
//\r
// Switch back to bank 0\r
//\r
- OutputData = (UINT8) ( (gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
+ OutputData = (UINT8)((gBreakSet << 6) | (gParity << 3) | (gStop << 2) | Data);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
return RETURN_SUCCESS;\r
UINTN\r
EFIAPI\r
SerialPortWrite (\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
-)\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
+ )\r
{\r
UINTN Result;\r
UINT8 Data;\r
// Wait for the serial port to be ready.\r
//\r
do {\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
} while ((Data & LSR_TXRDY) == 0);\r
- IoWrite8 ((UINT16) gUartBase, *Buffer++);\r
+\r
+ IoWrite8 ((UINT16)gUartBase, *Buffer++);\r
}\r
\r
return Result;\r
}\r
\r
-\r
/**\r
Reads data from a serial device into a buffer.\r
\r
UINTN\r
EFIAPI\r
SerialPortRead (\r
- OUT UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
-)\r
+ OUT UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
+ )\r
{\r
UINTN Result;\r
UINT8 Data;\r
// Wait for the serial port to be ready.\r
//\r
do {\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
} while ((Data & LSR_RXDA) == 0);\r
\r
- *Buffer++ = IoRead8 ((UINT16) gUartBase);\r
+ *Buffer++ = IoRead8 ((UINT16)gUartBase);\r
}\r
\r
return Result;\r
//\r
// Read the serial port status.\r
//\r
- Data = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Data = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
\r
- return (BOOLEAN) ((Data & LSR_RXDA) != 0);\r
+ return (BOOLEAN)((Data & LSR_RXDA) != 0);\r
}\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
SerialPortSetControl (\r
- IN UINT32 Control\r
+ IN UINT32 Control\r
)\r
{\r
- UINT8 Mcr;\r
+ UINT8 Mcr;\r
\r
//\r
// First determine the parameter is invalid.\r
//\r
// Read the Modem Control Register.\r
//\r
- Mcr = IoRead8 ((UINT16) gUartBase + MCR_OFFSET);\r
+ Mcr = IoRead8 ((UINT16)gUartBase + MCR_OFFSET);\r
Mcr &= (~(MCR_DTRC | MCR_RTS));\r
\r
if ((Control & EFI_SERIAL_DATA_TERMINAL_READY) == EFI_SERIAL_DATA_TERMINAL_READY) {\r
//\r
// Write the Modem Control Register.\r
//\r
- IoWrite8 ((UINT16) gUartBase + MCR_OFFSET, Mcr);\r
+ IoWrite8 ((UINT16)gUartBase + MCR_OFFSET, Mcr);\r
\r
return RETURN_SUCCESS;\r
}\r
RETURN_STATUS\r
EFIAPI\r
SerialPortGetControl (\r
- OUT UINT32 *Control\r
+ OUT UINT32 *Control\r
)\r
{\r
- UINT8 Msr;\r
- UINT8 Mcr;\r
- UINT8 Lsr;\r
+ UINT8 Msr;\r
+ UINT8 Mcr;\r
+ UINT8 Lsr;\r
\r
*Control = 0;\r
\r
//\r
// Read the Modem Status Register.\r
//\r
- Msr = IoRead8 ((UINT16) gUartBase + MSR_OFFSET);\r
+ Msr = IoRead8 ((UINT16)gUartBase + MSR_OFFSET);\r
\r
if ((Msr & MSR_CTS) == MSR_CTS) {\r
*Control |= EFI_SERIAL_CLEAR_TO_SEND;\r
//\r
// Read the Modem Control Register.\r
//\r
- Mcr = IoRead8 ((UINT16) gUartBase + MCR_OFFSET);\r
+ Mcr = IoRead8 ((UINT16)gUartBase + MCR_OFFSET);\r
\r
if ((Mcr & MCR_DTRC) == MCR_DTRC) {\r
*Control |= EFI_SERIAL_DATA_TERMINAL_READY;\r
//\r
// Read the Line Status Register.\r
//\r
- Lsr = IoRead8 ((UINT16) gUartBase + LSR_OFFSET);\r
+ Lsr = IoRead8 ((UINT16)gUartBase + LSR_OFFSET);\r
\r
if ((Lsr & LSR_TXRDY) == LSR_TXRDY) {\r
*Control |= EFI_SERIAL_OUTPUT_BUFFER_EMPTY;\r
RETURN_STATUS\r
EFIAPI\r
SerialPortSetAttributes (\r
- IN OUT UINT64 *BaudRate,\r
- IN OUT UINT32 *ReceiveFifoDepth,\r
- IN OUT UINT32 *Timeout,\r
- IN OUT EFI_PARITY_TYPE *Parity,\r
- IN OUT UINT8 *DataBits,\r
- IN OUT EFI_STOP_BITS_TYPE *StopBits\r
+ IN OUT UINT64 *BaudRate,\r
+ IN OUT UINT32 *ReceiveFifoDepth,\r
+ IN OUT UINT32 *Timeout,\r
+ IN OUT EFI_PARITY_TYPE *Parity,\r
+ IN OUT UINT8 *DataBits,\r
+ IN OUT EFI_STOP_BITS_TYPE *StopBits\r
)\r
{\r
- UINTN Divisor;\r
- UINT8 OutputData;\r
- UINT8 LcrData;\r
- UINT8 LcrParity;\r
- UINT8 LcrStop;\r
+ UINTN Divisor;\r
+ UINT8 OutputData;\r
+ UINT8 LcrData;\r
+ UINT8 LcrParity;\r
+ UINT8 LcrStop;\r
\r
//\r
// Check for default settings and fill in actual values.\r
//\r
// Map 5..8 to 0..3\r
//\r
- LcrData = (UINT8) (*DataBits - (UINT8) 5);\r
+ LcrData = (UINT8)(*DataBits - (UINT8)5);\r
\r
switch (*Parity) {\r
case NoParity:\r
//\r
// Calculate divisor for baud generator\r
//\r
- Divisor = 115200 / (UINTN) *BaudRate;\r
+ Divisor = 115200 / (UINTN)*BaudRate;\r
\r
//\r
// Set communications format\r
//\r
- OutputData = (UINT8) ((DLAB << 7) | (gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
+ OutputData = (UINT8)((DLAB << 7) | (gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
//\r
// Configure baud rate\r
//\r
- IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8) (Divisor >> 8));\r
- IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8) (Divisor & 0xff));\r
+ IoWrite8 (gUartBase + BAUD_HIGH_OFFSET, (UINT8)(Divisor >> 8));\r
+ IoWrite8 (gUartBase + BAUD_LOW_OFFSET, (UINT8)(Divisor & 0xff));\r
\r
//\r
// Switch back to bank 0\r
//\r
- OutputData = (UINT8) ((gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
+ OutputData = (UINT8)((gBreakSet << 6) | (LcrParity << 3) | (LcrStop << 2) | LcrData);\r
IoWrite8 (gUartBase + LCR_OFFSET, OutputData);\r
\r
return RETURN_SUCCESS;\r
}\r
-\r
//\r
// Days of month.\r
//\r
-UINTN mDayOfMonth[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };\r
+UINTN mDayOfMonth[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };\r
\r
//\r
// The name of NV variable to store the timezone and daylight saving information.\r
//\r
-CHAR16 mTimeZoneVariableName[] = L"RTC";\r
+CHAR16 mTimeZoneVariableName[] = L"RTC";\r
\r
/**\r
Compare the Hour, Minute and Second of the From time and the To time.\r
**/\r
INTN\r
CompareHMS (\r
- IN EFI_TIME *From,\r
- IN EFI_TIME *To\r
+ IN EFI_TIME *From,\r
+ IN EFI_TIME *To\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsWithinOneDay (\r
- IN EFI_TIME *From,\r
- IN EFI_TIME *To\r
+ IN EFI_TIME *From,\r
+ IN EFI_TIME *To\r
);\r
\r
/**\r
STATIC\r
UINT8\r
IoRtcRead (\r
- IN UINTN Address\r
+ IN UINTN Address\r
)\r
{\r
IoWrite8 (\r
STATIC\r
VOID\r
IoRtcWrite (\r
- IN UINTN Address,\r
- IN UINT8 Data\r
+ IN UINTN Address,\r
+ IN UINT8 Data\r
)\r
{\r
IoWrite8 (\r
STATIC\r
UINT8\r
MmioRtcRead (\r
- IN UINTN Address\r
+ IN UINTN Address\r
)\r
{\r
MmioWrite8 (\r
STATIC\r
VOID\r
MmioRtcWrite (\r
- IN UINTN Address,\r
- IN UINT8 Data\r
+ IN UINTN Address,\r
+ IN UINT8 Data\r
)\r
{\r
MmioWrite8 (\r
STATIC\r
UINT8\r
RtcRead (\r
- IN UINTN Address\r
+ IN UINTN Address\r
)\r
{\r
if (FeaturePcdGet (PcdRtcUseMmio)) {\r
STATIC\r
VOID\r
RtcWrite (\r
- IN UINTN Address,\r
- IN UINT8 Data\r
+ IN UINTN Address,\r
+ IN UINT8 Data\r
)\r
{\r
if (FeaturePcdGet (PcdRtcUseMmio)) {\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Initialize RTC Register\r
//\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
//\r
// Get the Time/Date/Daylight Savings values.\r
//\r
// stored in NV variable during previous boot.\r
//\r
DataSize = sizeof (UINT32);\r
- Status = EfiGetVariable (\r
- mTimeZoneVariableName,\r
- &gEfiCallerIdGuid,\r
- NULL,\r
- &DataSize,\r
- &TimerVar\r
- );\r
+ Status = EfiGetVariable (\r
+ mTimeZoneVariableName,\r
+ &gEfiCallerIdGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &TimerVar\r
+ );\r
if (!EFI_ERROR (Status)) {\r
- Time.TimeZone = (INT16) TimerVar;\r
- Time.Daylight = (UINT8) (TimerVar >> 16);\r
+ Time.TimeZone = (INT16)TimerVar;\r
+ Time.Daylight = (UINT8)(TimerVar >> 16);\r
} else {\r
Time.TimeZone = EFI_UNSPECIFIED_TIMEZONE;\r
Time.Daylight = 0;\r
if (!EFI_ERROR (Status)) {\r
Status = RtcTimeFieldsValid (&Time);\r
}\r
+\r
if (EFI_ERROR (Status)) {\r
//\r
// Report Status Code to indicate that the RTC has bad date and time\r
EFI_ERROR_CODE | EFI_ERROR_MINOR,\r
(EFI_SOFTWARE_DXE_RT_DRIVER | EFI_SW_EC_BAD_DATE_TIME)\r
);\r
- Time.Second = RTC_INIT_SECOND;\r
- Time.Minute = RTC_INIT_MINUTE;\r
- Time.Hour = RTC_INIT_HOUR;\r
- Time.Day = RTC_INIT_DAY;\r
- Time.Month = RTC_INIT_MONTH;\r
- Time.Year = PcdGet16 (PcdMinimalValidYear);\r
- Time.Nanosecond = 0;\r
- Time.TimeZone = EFI_UNSPECIFIED_TIMEZONE;\r
- Time.Daylight = 0;\r
+ Time.Second = RTC_INIT_SECOND;\r
+ Time.Minute = RTC_INIT_MINUTE;\r
+ Time.Hour = RTC_INIT_HOUR;\r
+ Time.Day = RTC_INIT_DAY;\r
+ Time.Month = RTC_INIT_MONTH;\r
+ Time.Year = PcdGet16 (PcdMinimalValidYear);\r
+ Time.Nanosecond = 0;\r
+ Time.TimeZone = EFI_UNSPECIFIED_TIMEZONE;\r
+ Time.Daylight = 0;\r
}\r
\r
//\r
// When wakeup time is disabled and invalid, reset wakeup time register to valid state\r
// but keep wakeup alarm disabled.\r
//\r
- Time.Second = RTC_INIT_SECOND;\r
- Time.Minute = RTC_INIT_MINUTE;\r
- Time.Hour = RTC_INIT_HOUR;\r
- Time.Day = RTC_INIT_DAY;\r
- Time.Month = RTC_INIT_MONTH;\r
- Time.Year = PcdGet16 (PcdMinimalValidYear);\r
- Time.Nanosecond = 0;\r
- Time.TimeZone = Global->SavedTimeZone;\r
- Time.Daylight = Global->Daylight;;\r
+ Time.Second = RTC_INIT_SECOND;\r
+ Time.Minute = RTC_INIT_MINUTE;\r
+ Time.Hour = RTC_INIT_HOUR;\r
+ Time.Day = RTC_INIT_DAY;\r
+ Time.Month = RTC_INIT_MONTH;\r
+ Time.Year = PcdGet16 (PcdMinimalValidYear);\r
+ Time.Nanosecond = 0;\r
+ Time.TimeZone = Global->SavedTimeZone;\r
+ Time.Daylight = Global->Daylight;\r
\r
//\r
// Acquire RTC Lock to make access to RTC atomic\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be updated\r
//\r
Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
if (EFI_ERROR (Status)) {\r
if (!EfiAtRuntime ()) {\r
- EfiReleaseLock (&Global->RtcLock);\r
+ EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
\r
//\r
// Inhibit updates of the RTC\r
//\r
- RegisterB.Bits.Set = 1;\r
+ RegisterB.Bits.Set = 1;\r
RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
\r
//\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
//\r
if (Time == NULL) {\r
return EFI_INVALID_PARAMETER;\r
-\r
}\r
+\r
//\r
// Acquire RTC Lock to make access to RTC atomic\r
//\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be updated\r
//\r
Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
if (EFI_ERROR (Status)) {\r
- if (!EfiAtRuntime ()) {\r
- EfiReleaseLock (&Global->RtcLock);\r
- }\r
+ if (!EfiAtRuntime ()) {\r
+ EfiReleaseLock (&Global->RtcLock);\r
+ }\r
+\r
return Status;\r
}\r
+\r
//\r
// Read Register B\r
//\r
//\r
// Get the Time/Date/Daylight Savings values.\r
//\r
- Time->Second = RtcRead (RTC_ADDRESS_SECONDS);\r
- Time->Minute = RtcRead (RTC_ADDRESS_MINUTES);\r
- Time->Hour = RtcRead (RTC_ADDRESS_HOURS);\r
- Time->Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
- Time->Month = RtcRead (RTC_ADDRESS_MONTH);\r
- Time->Year = RtcRead (RTC_ADDRESS_YEAR);\r
+ Time->Second = RtcRead (RTC_ADDRESS_SECONDS);\r
+ Time->Minute = RtcRead (RTC_ADDRESS_MINUTES);\r
+ Time->Hour = RtcRead (RTC_ADDRESS_HOURS);\r
+ Time->Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
+ Time->Month = RtcRead (RTC_ADDRESS_MONTH);\r
+ Time->Year = RtcRead (RTC_ADDRESS_YEAR);\r
\r
//\r
// Release RTC Lock.\r
//\r
// Get the variable that contains the TimeZone and Daylight fields\r
//\r
- Time->TimeZone = Global->SavedTimeZone;\r
- Time->Daylight = Global->Daylight;\r
+ Time->TimeZone = Global->SavedTimeZone;\r
+ Time->Daylight = Global->Daylight;\r
\r
//\r
// Make sure all field values are in correct range\r
if (!EFI_ERROR (Status)) {\r
Status = RtcTimeFieldsValid (Time);\r
}\r
+\r
if (EFI_ERROR (Status)) {\r
return EFI_DEVICE_ERROR;\r
}\r
**/\r
EFI_STATUS\r
PcRtcSetTime (\r
- IN EFI_TIME *Time,\r
- IN PC_RTC_MODULE_GLOBALS *Global\r
+ IN EFI_TIME *Time,\r
+ IN PC_RTC_MODULE_GLOBALS *Global\r
)\r
{\r
EFI_STATUS Status;\r
if (Time == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// Make sure that the time fields are valid\r
//\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be updated\r
//\r
Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
if (EFI_ERROR (Status)) {\r
- if (!EfiAtRuntime ()) {\r
- EfiReleaseLock (&Global->RtcLock);\r
- }\r
+ if (!EfiAtRuntime ()) {\r
+ EfiReleaseLock (&Global->RtcLock);\r
+ }\r
+\r
return Status;\r
}\r
\r
}\r
} else {\r
TimerVar = Time->Daylight;\r
- TimerVar = (UINT32) ((TimerVar << 16) | (UINT16)(Time->TimeZone));\r
- Status = EfiSetVariable (\r
- mTimeZoneVariableName,\r
- &gEfiCallerIdGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
- sizeof (TimerVar),\r
- &TimerVar\r
- );\r
+ TimerVar = (UINT32)((TimerVar << 16) | (UINT16)(Time->TimeZone));\r
+ Status = EfiSetVariable (\r
+ mTimeZoneVariableName,\r
+ &gEfiCallerIdGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ sizeof (TimerVar),\r
+ &TimerVar\r
+ );\r
}\r
\r
if (EFI_ERROR (Status)) {\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
\r
//\r
// Read Register B, and inhibit updates of the RTC\r
//\r
- RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);\r
- RegisterB.Bits.Set = 1;\r
+ RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);\r
+ RegisterB.Bits.Set = 1;\r
RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
\r
//\r
// Store the century value to RTC before converting to BCD format.\r
//\r
if (Global->CenturyRtcAddress != 0) {\r
- RtcWrite (Global->CenturyRtcAddress, DecimalToBcd8 ((UINT8) (RtcTime.Year / 100)));\r
+ RtcWrite (Global->CenturyRtcAddress, DecimalToBcd8 ((UINT8)(RtcTime.Year / 100)));\r
}\r
\r
ConvertEfiTimeToRtcTime (&RtcTime, RegisterB);\r
RtcWrite (RTC_ADDRESS_HOURS, RtcTime.Hour);\r
RtcWrite (RTC_ADDRESS_DAY_OF_THE_MONTH, RtcTime.Day);\r
RtcWrite (RTC_ADDRESS_MONTH, RtcTime.Month);\r
- RtcWrite (RTC_ADDRESS_YEAR, (UINT8) RtcTime.Year);\r
+ RtcWrite (RTC_ADDRESS_YEAR, (UINT8)RtcTime.Year);\r
\r
//\r
// Allow updates of the RTC registers\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Set the variable that contains the TimeZone and Daylight fields\r
//\r
//\r
if ((Enabled == NULL) || (Pending == NULL) || (Time == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
-\r
}\r
+\r
//\r
// Acquire RTC Lock to make access to RTC atomic\r
//\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be updated\r
//\r
Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
if (EFI_ERROR (Status)) {\r
if (!EfiAtRuntime ()) {\r
- EfiReleaseLock (&Global->RtcLock);\r
+ EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
//\r
// Read Register B and Register C\r
//\r
- RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);\r
- RegisterC.Data = RtcRead (RTC_ADDRESS_REGISTER_C);\r
+ RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);\r
+ RegisterC.Data = RtcRead (RTC_ADDRESS_REGISTER_C);\r
\r
//\r
// Get the Time/Date/Daylight Savings values.\r
*Enabled = RegisterB.Bits.Aie;\r
*Pending = RegisterC.Bits.Af;\r
\r
- Time->Second = RtcRead (RTC_ADDRESS_SECONDS_ALARM);\r
- Time->Minute = RtcRead (RTC_ADDRESS_MINUTES_ALARM);\r
- Time->Hour = RtcRead (RTC_ADDRESS_HOURS_ALARM);\r
- Time->Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
- Time->Month = RtcRead (RTC_ADDRESS_MONTH);\r
- Time->Year = RtcRead (RTC_ADDRESS_YEAR);\r
+ Time->Second = RtcRead (RTC_ADDRESS_SECONDS_ALARM);\r
+ Time->Minute = RtcRead (RTC_ADDRESS_MINUTES_ALARM);\r
+ Time->Hour = RtcRead (RTC_ADDRESS_HOURS_ALARM);\r
+ Time->Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
+ Time->Month = RtcRead (RTC_ADDRESS_MONTH);\r
+ Time->Year = RtcRead (RTC_ADDRESS_YEAR);\r
Time->TimeZone = Global->SavedTimeZone;\r
Time->Daylight = Global->Daylight;\r
\r
// Get the alarm info from variable\r
//\r
DataSize = sizeof (EFI_TIME);\r
- Status = EfiGetVariable (\r
- L"RTCALARM",\r
- &gEfiCallerIdGuid,\r
- NULL,\r
- &DataSize,\r
- &RtcTime\r
- );\r
+ Status = EfiGetVariable (\r
+ L"RTCALARM",\r
+ &gEfiCallerIdGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &RtcTime\r
+ );\r
if (!EFI_ERROR (Status)) {\r
//\r
// The alarm variable exists. In this case, we read variable to get info.\r
if (!EFI_ERROR (Status)) {\r
Status = RtcTimeFieldsValid (Time);\r
}\r
+\r
if (EFI_ERROR (Status)) {\r
return EFI_DEVICE_ERROR;\r
}\r
IN PC_RTC_MODULE_GLOBALS *Global\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_TIME RtcTime;\r
- RTC_REGISTER_B RegisterB;\r
- EFI_TIME_CAPABILITIES Capabilities;\r
+ EFI_STATUS Status;\r
+ EFI_TIME RtcTime;\r
+ RTC_REGISTER_B RegisterB;\r
+ EFI_TIME_CAPABILITIES Capabilities;\r
\r
ZeroMem (&RtcTime, sizeof (RtcTime));\r
\r
if (Enable) {\r
-\r
if (Time == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// Make sure that the time fields are valid\r
//\r
if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
//\r
// Just support set alarm time within 24 hours\r
//\r
if (EFI_ERROR (Status)) {\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
if (!IsWithinOneDay (&RtcTime, Time)) {\r
return EFI_UNSUPPORTED;\r
}\r
+\r
//\r
// Make a local copy of the time and date\r
//\r
CopyMem (&RtcTime, Time, sizeof (EFI_TIME));\r
-\r
}\r
+\r
//\r
// Acquire RTC Lock to make access to RTC atomic\r
//\r
if (!EfiAtRuntime ()) {\r
EfiAcquireLock (&Global->RtcLock);\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be updated\r
//\r
Status = RtcWaitToUpdate (PcdGet32 (PcdRealTimeClockUpdateTimeout));\r
if (EFI_ERROR (Status)) {\r
if (!EfiAtRuntime ()) {\r
- EfiReleaseLock (&Global->RtcLock);\r
+ EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
//\r
// Read Register B\r
//\r
//\r
// if the alarm is disable, record the current setting.\r
//\r
- RtcTime.Second = RtcRead (RTC_ADDRESS_SECONDS_ALARM);\r
- RtcTime.Minute = RtcRead (RTC_ADDRESS_MINUTES_ALARM);\r
- RtcTime.Hour = RtcRead (RTC_ADDRESS_HOURS_ALARM);\r
- RtcTime.Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
- RtcTime.Month = RtcRead (RTC_ADDRESS_MONTH);\r
- RtcTime.Year = RtcRead (RTC_ADDRESS_YEAR);\r
+ RtcTime.Second = RtcRead (RTC_ADDRESS_SECONDS_ALARM);\r
+ RtcTime.Minute = RtcRead (RTC_ADDRESS_MINUTES_ALARM);\r
+ RtcTime.Hour = RtcRead (RTC_ADDRESS_HOURS_ALARM);\r
+ RtcTime.Day = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);\r
+ RtcTime.Month = RtcRead (RTC_ADDRESS_MONTH);\r
+ RtcTime.Year = RtcRead (RTC_ADDRESS_YEAR);\r
RtcTime.TimeZone = Global->SavedTimeZone;\r
RtcTime.Daylight = Global->Daylight;\r
}\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_DEVICE_ERROR;\r
}\r
\r
//\r
// Inhibit updates of the RTC\r
//\r
- RegisterB.Bits.Set = 1;\r
+ RegisterB.Bits.Set = 1;\r
RtcWrite (RTC_ADDRESS_REGISTER_B, RegisterB.Data);\r
\r
if (Enable) {\r
RtcWrite (RTC_ADDRESS_HOURS_ALARM, RtcTime.Hour);\r
\r
RegisterB.Bits.Aie = 1;\r
-\r
} else {\r
RegisterB.Bits.Aie = 0;\r
}\r
+\r
//\r
// Allow updates of the RTC registers\r
//\r
if (!EfiAtRuntime ()) {\r
EfiReleaseLock (&Global->RtcLock);\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Checks an 8-bit BCD value, and converts to an 8-bit value if valid.\r
\r
IN RTC_REGISTER_B RegisterB\r
)\r
{\r
- BOOLEAN IsPM;\r
- UINT8 Century;\r
+ BOOLEAN IsPM;\r
+ UINT8 Century;\r
\r
if ((Time->Hour & 0x80) != 0) {\r
IsPM = TRUE;\r
IsPM = FALSE;\r
}\r
\r
- Time->Hour = (UINT8) (Time->Hour & 0x7f);\r
+ Time->Hour = (UINT8)(Time->Hour & 0x7f);\r
\r
if (RegisterB.Bits.Dm == 0) {\r
- Time->Year = CheckAndConvertBcd8ToDecimal8 ((UINT8) Time->Year);\r
- Time->Month = CheckAndConvertBcd8ToDecimal8 (Time->Month);\r
- Time->Day = CheckAndConvertBcd8ToDecimal8 (Time->Day);\r
- Time->Hour = CheckAndConvertBcd8ToDecimal8 (Time->Hour);\r
- Time->Minute = CheckAndConvertBcd8ToDecimal8 (Time->Minute);\r
- Time->Second = CheckAndConvertBcd8ToDecimal8 (Time->Second);\r
+ Time->Year = CheckAndConvertBcd8ToDecimal8 ((UINT8)Time->Year);\r
+ Time->Month = CheckAndConvertBcd8ToDecimal8 (Time->Month);\r
+ Time->Day = CheckAndConvertBcd8ToDecimal8 (Time->Day);\r
+ Time->Hour = CheckAndConvertBcd8ToDecimal8 (Time->Hour);\r
+ Time->Minute = CheckAndConvertBcd8ToDecimal8 (Time->Minute);\r
+ Time->Second = CheckAndConvertBcd8ToDecimal8 (Time->Second);\r
}\r
\r
- if (Time->Year == 0xff || Time->Month == 0xff || Time->Day == 0xff ||\r
- Time->Hour == 0xff || Time->Minute == 0xff || Time->Second == 0xff) {\r
+ if ((Time->Year == 0xff) || (Time->Month == 0xff) || (Time->Day == 0xff) ||\r
+ (Time->Hour == 0xff) || (Time->Minute == 0xff) || (Time->Second == 0xff))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Century is 19 if RTC year >= 70,\r
// Century is 20 otherwise.\r
//\r
- Century = (UINT8) (PcdGet16 (PcdMinimalValidYear) / 100);\r
+ Century = (UINT8)(PcdGet16 (PcdMinimalValidYear) / 100);\r
if (Time->Year < PcdGet16 (PcdMinimalValidYear) % 100) {\r
Century++;\r
}\r
- Time->Year = (UINT16) (Century * 100 + Time->Year);\r
+\r
+ Time->Year = (UINT16)(Century * 100 + Time->Year);\r
\r
//\r
// If time is in 12 hour format, convert it to 24 hour format\r
//\r
if (RegisterB.Bits.Mil == 0) {\r
- if (IsPM && Time->Hour < 12) {\r
- Time->Hour = (UINT8) (Time->Hour + 12);\r
+ if (IsPM && (Time->Hour < 12)) {\r
+ Time->Hour = (UINT8)(Time->Hour + 12);\r
}\r
\r
- if (!IsPM && Time->Hour == 12) {\r
+ if (!IsPM && (Time->Hour == 12)) {\r
Time->Hour = 0;\r
}\r
}\r
\r
- Time->Nanosecond = 0;\r
+ Time->Nanosecond = 0;\r
\r
return EFI_SUCCESS;\r
}\r
**/\r
EFI_STATUS\r
RtcWaitToUpdate (\r
- UINTN Timeout\r
+ UINTN Timeout\r
)\r
{\r
RTC_REGISTER_A RegisterA;\r
if (RegisterD.Bits.Vrt == 0) {\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
//\r
// Wait for up to 0.1 seconds for the RTC to be ready.\r
//\r
- Timeout = (Timeout / 10) + 1;\r
- RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);\r
+ Timeout = (Timeout / 10) + 1;\r
+ RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);\r
while (RegisterA.Bits.Uip == 1 && Timeout > 0) {\r
MicroSecondDelay (10);\r
RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);\r
}\r
\r
RegisterD.Data = RtcRead (RTC_ADDRESS_REGISTER_D);\r
- if (Timeout == 0 || RegisterD.Bits.Vrt == 0) {\r
+ if ((Timeout == 0) || (RegisterD.Bits.Vrt == 0)) {\r
return EFI_DEVICE_ERROR;\r
}\r
\r
**/\r
EFI_STATUS\r
RtcTimeFieldsValid (\r
- IN EFI_TIME *Time\r
+ IN EFI_TIME *Time\r
)\r
{\r
- if (Time->Year < PcdGet16 (PcdMinimalValidYear) ||\r
- Time->Year > PcdGet16 (PcdMaximalValidYear) ||\r
- Time->Month < 1 ||\r
- Time->Month > 12 ||\r
+ if ((Time->Year < PcdGet16 (PcdMinimalValidYear)) ||\r
+ (Time->Year > PcdGet16 (PcdMaximalValidYear)) ||\r
+ (Time->Month < 1) ||\r
+ (Time->Month > 12) ||\r
(!DayValid (Time)) ||\r
- Time->Hour > 23 ||\r
- Time->Minute > 59 ||\r
- Time->Second > 59 ||\r
- Time->Nanosecond > 999999999 ||\r
- (!(Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE || (Time->TimeZone >= -1440 && Time->TimeZone <= 1440))) ||\r
- ((Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT))) != 0)) {\r
+ (Time->Hour > 23) ||\r
+ (Time->Minute > 59) ||\r
+ (Time->Second > 59) ||\r
+ (Time->Nanosecond > 999999999) ||\r
+ (!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone >= -1440) && (Time->TimeZone <= 1440)))) ||\r
+ ((Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT))) != 0))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// The validity of Time->Month field should be checked before\r
//\r
- ASSERT (Time->Month >=1);\r
- ASSERT (Time->Month <=12);\r
- if (Time->Day < 1 ||\r
- Time->Day > mDayOfMonth[Time->Month - 1] ||\r
- (Time->Month == 2 && (!IsLeapYear (Time) && Time->Day > 28))\r
- ) {\r
+ ASSERT (Time->Month >= 1);\r
+ ASSERT (Time->Month <= 12);\r
+ if ((Time->Day < 1) ||\r
+ (Time->Day > mDayOfMonth[Time->Month - 1]) ||\r
+ ((Time->Month == 2) && (!IsLeapYear (Time) && (Time->Day > 28)))\r
+ )\r
+ {\r
return FALSE;\r
}\r
\r
**/\r
BOOLEAN\r
IsLeapYear (\r
- IN EFI_TIME *Time\r
+ IN EFI_TIME *Time\r
)\r
{\r
if (Time->Year % 4 == 0) {\r
IN RTC_REGISTER_B RegisterB\r
)\r
{\r
- BOOLEAN IsPM;\r
+ BOOLEAN IsPM;\r
\r
IsPM = TRUE;\r
//\r
}\r
\r
if (Time->Hour >= 13) {\r
- Time->Hour = (UINT8) (Time->Hour - 12);\r
+ Time->Hour = (UINT8)(Time->Hour - 12);\r
} else if (Time->Hour == 0) {\r
Time->Hour = 12;\r
}\r
}\r
+\r
//\r
// Set the Time/Date values.\r
//\r
- Time->Year = (UINT16) (Time->Year % 100);\r
+ Time->Year = (UINT16)(Time->Year % 100);\r
\r
if (RegisterB.Bits.Dm == 0) {\r
- Time->Year = DecimalToBcd8 ((UINT8) Time->Year);\r
- Time->Month = DecimalToBcd8 (Time->Month);\r
- Time->Day = DecimalToBcd8 (Time->Day);\r
- Time->Hour = DecimalToBcd8 (Time->Hour);\r
- Time->Minute = DecimalToBcd8 (Time->Minute);\r
- Time->Second = DecimalToBcd8 (Time->Second);\r
+ Time->Year = DecimalToBcd8 ((UINT8)Time->Year);\r
+ Time->Month = DecimalToBcd8 (Time->Month);\r
+ Time->Day = DecimalToBcd8 (Time->Day);\r
+ Time->Hour = DecimalToBcd8 (Time->Hour);\r
+ Time->Minute = DecimalToBcd8 (Time->Minute);\r
+ Time->Second = DecimalToBcd8 (Time->Second);\r
}\r
+\r
//\r
// If we are in 12 hour mode and PM is set, then set bit 7 of the Hour field.\r
//\r
- if (RegisterB.Bits.Mil == 0 && IsPM) {\r
- Time->Hour = (UINT8) (Time->Hour | 0x80);\r
+ if ((RegisterB.Bits.Mil == 0) && IsPM) {\r
+ Time->Hour = (UINT8)(Time->Hour | 0x80);\r
}\r
}\r
\r
**/\r
INTN\r
CompareHMS (\r
- IN EFI_TIME *From,\r
- IN EFI_TIME *To\r
+ IN EFI_TIME *From,\r
+ IN EFI_TIME *To\r
)\r
{\r
if ((From->Hour > To->Hour) ||\r
- ((From->Hour == To->Hour) && (From->Minute > To->Minute)) ||\r
- ((From->Hour == To->Hour) && (From->Minute == To->Minute) && (From->Second > To->Second))) {\r
+ ((From->Hour == To->Hour) && (From->Minute > To->Minute)) ||\r
+ ((From->Hour == To->Hour) && (From->Minute == To->Minute) && (From->Second > To->Second)))\r
+ {\r
return 1;\r
} else if ((From->Hour == To->Hour) && (From->Minute == To->Minute) && (From->Second == To->Second)) {\r
return 0;\r
IN EFI_TIME *To\r
)\r
{\r
- BOOLEAN Adjacent;\r
+ BOOLEAN Adjacent;\r
\r
Adjacent = FALSE;\r
\r
//\r
// The validity of From->Month field should be checked before\r
//\r
- ASSERT (From->Month >=1);\r
- ASSERT (From->Month <=12);\r
+ ASSERT (From->Month >= 1);\r
+ ASSERT (From->Month <= 12);\r
\r
if (From->Year == To->Year) {\r
if (From->Month == To->Month) {\r
if ((From->Day + 1) == To->Day) {\r
- if ((CompareHMS(From, To) >= 0)) {\r
+ if ((CompareHMS (From, To) >= 0)) {\r
Adjacent = TRUE;\r
}\r
} else if (From->Day == To->Day) {\r
- if ((CompareHMS(From, To) <= 0)) {\r
+ if ((CompareHMS (From, To) <= 0)) {\r
Adjacent = TRUE;\r
}\r
}\r
} else if (((From->Month + 1) == To->Month) && (To->Day == 1)) {\r
- if ((From->Month == 2) && !IsLeapYear(From)) {\r
+ if ((From->Month == 2) && !IsLeapYear (From)) {\r
if (From->Day == 28) {\r
- if ((CompareHMS(From, To) >= 0)) {\r
+ if ((CompareHMS (From, To) >= 0)) {\r
Adjacent = TRUE;\r
}\r
}\r
} else if (From->Day == mDayOfMonth[From->Month - 1]) {\r
- if ((CompareHMS(From, To) >= 0)) {\r
- Adjacent = TRUE;\r
+ if ((CompareHMS (From, To) >= 0)) {\r
+ Adjacent = TRUE;\r
}\r
}\r
}\r
(From->Month == 12) &&\r
(From->Day == 31) &&\r
(To->Month == 1) &&\r
- (To->Day == 1)) {\r
- if ((CompareHMS(From, To) >= 0)) {\r
+ (To->Day == 1))\r
+ {\r
+ if ((CompareHMS (From, To) >= 0)) {\r
Adjacent = TRUE;\r
}\r
}\r
VOID\r
)\r
{\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt;\r
+ EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt;\r
\r
- Fadt = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) EfiLocateFirstAcpiTable (\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE\r
- );\r
+ Fadt = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *)EfiLocateFirstAcpiTable (\r
+ EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE\r
+ );\r
\r
if ((Fadt != NULL) &&\r
(Fadt->Century > RTC_ADDRESS_REGISTER_D) && (Fadt->Century < 0x80)\r
- ) {\r
+ )\r
+ {\r
return Fadt->Century;\r
} else {\r
return 0;\r
VOID\r
EFIAPI\r
PcRtcAcpiTableChangeCallback (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_TIME Time;\r
- UINT8 CenturyRtcAddress;\r
- UINT8 Century;\r
+ EFI_STATUS Status;\r
+ EFI_TIME Time;\r
+ UINT8 CenturyRtcAddress;\r
+ UINT8 Century;\r
\r
CenturyRtcAddress = GetCenturyRtcAddress ();\r
if ((CenturyRtcAddress != 0) && (mModuleGlobal.CenturyRtcAddress != CenturyRtcAddress)) {\r
mModuleGlobal.CenturyRtcAddress = CenturyRtcAddress;\r
- Status = PcRtcGetTime (&Time, NULL, &mModuleGlobal);\r
+ Status = PcRtcGetTime (&Time, NULL, &mModuleGlobal);\r
if (!EFI_ERROR (Status)) {\r
- Century = (UINT8) (Time.Year / 100);\r
+ Century = (UINT8)(Time.Year / 100);\r
Century = DecimalToBcd8 (Century);\r
DEBUG ((DEBUG_INFO, "PcRtc: Write 0x%x to CMOS location 0x%x\n", Century, mModuleGlobal.CenturyRtcAddress));\r
RtcWrite (mModuleGlobal.CenturyRtcAddress, Century);\r
\r
**/\r
\r
-\r
#ifndef _RTC_H_\r
#define _RTC_H_\r
\r
-\r
#include <Uefi.h>\r
\r
#include <Guid/Acpi.h>\r
#include <Library/ReportStatusCodeLib.h>\r
\r
typedef struct {\r
- EFI_LOCK RtcLock;\r
- INT16 SavedTimeZone;\r
- UINT8 Daylight;\r
- UINT8 CenturyRtcAddress;\r
+ EFI_LOCK RtcLock;\r
+ INT16 SavedTimeZone;\r
+ UINT8 Daylight;\r
+ UINT8 CenturyRtcAddress;\r
} PC_RTC_MODULE_GLOBALS;\r
\r
extern PC_RTC_MODULE_GLOBALS mModuleGlobal;\r
// Date and time initial values.\r
// They are used if the RTC values are invalid during driver initialization\r
//\r
-#define RTC_INIT_SECOND 0\r
-#define RTC_INIT_MINUTE 0\r
-#define RTC_INIT_HOUR 0\r
-#define RTC_INIT_DAY 1\r
-#define RTC_INIT_MONTH 1\r
+#define RTC_INIT_SECOND 0\r
+#define RTC_INIT_MINUTE 0\r
+#define RTC_INIT_HOUR 0\r
+#define RTC_INIT_DAY 1\r
+#define RTC_INIT_MONTH 1\r
\r
#pragma pack(1)\r
//\r
// Register A\r
//\r
typedef struct {\r
- UINT8 Rs : 4; // Rate Selection Bits\r
- UINT8 Dv : 3; // Divisor\r
- UINT8 Uip : 1; // Update in progress\r
+ UINT8 Rs : 4; // Rate Selection Bits\r
+ UINT8 Dv : 3; // Divisor\r
+ UINT8 Uip : 1; // Update in progress\r
} RTC_REGISTER_A_BITS;\r
\r
typedef union {\r
- RTC_REGISTER_A_BITS Bits;\r
- UINT8 Data;\r
+ RTC_REGISTER_A_BITS Bits;\r
+ UINT8 Data;\r
} RTC_REGISTER_A;\r
\r
//\r
// Register B\r
//\r
typedef struct {\r
- UINT8 Dse : 1; // 0 - Daylight saving disabled 1 - Daylight savings enabled\r
- UINT8 Mil : 1; // 0 - 12 hour mode 1 - 24 hour mode\r
- UINT8 Dm : 1; // 0 - BCD Format 1 - Binary Format\r
- UINT8 Sqwe : 1; // 0 - Disable SQWE output 1 - Enable SQWE output\r
- UINT8 Uie : 1; // 0 - Update INT disabled 1 - Update INT enabled\r
- UINT8 Aie : 1; // 0 - Alarm INT disabled 1 - Alarm INT Enabled\r
- UINT8 Pie : 1; // 0 - Periodic INT disabled 1 - Periodic INT Enabled\r
- UINT8 Set : 1; // 0 - Normal operation. 1 - Updates inhibited\r
+ UINT8 Dse : 1; // 0 - Daylight saving disabled 1 - Daylight savings enabled\r
+ UINT8 Mil : 1; // 0 - 12 hour mode 1 - 24 hour mode\r
+ UINT8 Dm : 1; // 0 - BCD Format 1 - Binary Format\r
+ UINT8 Sqwe : 1; // 0 - Disable SQWE output 1 - Enable SQWE output\r
+ UINT8 Uie : 1; // 0 - Update INT disabled 1 - Update INT enabled\r
+ UINT8 Aie : 1; // 0 - Alarm INT disabled 1 - Alarm INT Enabled\r
+ UINT8 Pie : 1; // 0 - Periodic INT disabled 1 - Periodic INT Enabled\r
+ UINT8 Set : 1; // 0 - Normal operation. 1 - Updates inhibited\r
} RTC_REGISTER_B_BITS;\r
\r
typedef union {\r
- RTC_REGISTER_B_BITS Bits;\r
- UINT8 Data;\r
+ RTC_REGISTER_B_BITS Bits;\r
+ UINT8 Data;\r
} RTC_REGISTER_B;\r
\r
//\r
// Register C\r
//\r
typedef struct {\r
- UINT8 Reserved : 4; // Read as zero. Can not be written.\r
- UINT8 Uf : 1; // Update End Interrupt Flag\r
- UINT8 Af : 1; // Alarm Interrupt Flag\r
- UINT8 Pf : 1; // Periodic Interrupt Flag\r
- UINT8 Irqf : 1; // Interrupt Request Flag = PF & PIE | AF & AIE | UF & UIE\r
+ UINT8 Reserved : 4; // Read as zero. Can not be written.\r
+ UINT8 Uf : 1; // Update End Interrupt Flag\r
+ UINT8 Af : 1; // Alarm Interrupt Flag\r
+ UINT8 Pf : 1; // Periodic Interrupt Flag\r
+ UINT8 Irqf : 1; // Interrupt Request Flag = PF & PIE | AF & AIE | UF & UIE\r
} RTC_REGISTER_C_BITS;\r
\r
typedef union {\r
- RTC_REGISTER_C_BITS Bits;\r
- UINT8 Data;\r
+ RTC_REGISTER_C_BITS Bits;\r
+ UINT8 Data;\r
} RTC_REGISTER_C;\r
\r
//\r
// Register D\r
//\r
typedef struct {\r
- UINT8 Reserved : 7; // Read as zero. Can not be written.\r
- UINT8 Vrt : 1; // Valid RAM and Time\r
+ UINT8 Reserved : 7; // Read as zero. Can not be written.\r
+ UINT8 Vrt : 1; // Valid RAM and Time\r
} RTC_REGISTER_D_BITS;\r
\r
typedef union {\r
- RTC_REGISTER_D_BITS Bits;\r
- UINT8 Data;\r
+ RTC_REGISTER_D_BITS Bits;\r
+ UINT8 Data;\r
} RTC_REGISTER_D;\r
\r
#pragma pack()\r
**/\r
EFI_STATUS\r
PcRtcGetTime (\r
- OUT EFI_TIME *Time,\r
- OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL,\r
- IN PC_RTC_MODULE_GLOBALS *Global\r
+ OUT EFI_TIME *Time,\r
+ OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL,\r
+ IN PC_RTC_MODULE_GLOBALS *Global\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
PcRtcGetWakeupTime (\r
- OUT BOOLEAN *Enabled,\r
- OUT BOOLEAN *Pending,\r
- OUT EFI_TIME *Time,\r
- IN PC_RTC_MODULE_GLOBALS *Global\r
+ OUT BOOLEAN *Enabled,\r
+ OUT BOOLEAN *Pending,\r
+ OUT EFI_TIME *Time,\r
+ IN PC_RTC_MODULE_GLOBALS *Global\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
InitializePcRtc (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
RtcTimeFieldsValid (\r
- IN EFI_TIME *Time\r
+ IN EFI_TIME *Time\r
);\r
\r
/**\r
IN RTC_REGISTER_B RegisterB\r
);\r
\r
-\r
/**\r
Converts time read from RTC to EFI_TIME format defined by UEFI spec.\r
\r
**/\r
EFI_STATUS\r
RtcWaitToUpdate (\r
- UINTN Timeout\r
+ UINTN Timeout\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsLeapYear (\r
- IN EFI_TIME *Time\r
+ IN EFI_TIME *Time\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
PcRtcAcpiTableChangeCallback (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
+\r
#endif\r
\r
PC_RTC_MODULE_GLOBALS mModuleGlobal;\r
\r
-EFI_HANDLE mHandle = NULL;\r
+EFI_HANDLE mHandle = NULL;\r
\r
-STATIC EFI_EVENT mVirtualAddrChangeEvent;\r
+STATIC EFI_EVENT mVirtualAddrChangeEvent;\r
\r
-UINTN mRtcIndexRegister;\r
-UINTN mRtcTargetRegister;\r
+UINTN mRtcIndexRegister;\r
+UINTN mRtcTargetRegister;\r
\r
/**\r
Returns the current time and date information, and the time-keeping capabilities\r
EFI_STATUS\r
EFIAPI\r
PcRtcEfiGetTime (\r
- OUT EFI_TIME *Time,\r
- OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL\r
+ OUT EFI_TIME *Time,\r
+ OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL\r
)\r
{\r
return PcRtcGetTime (Time, Capabilities, &mModuleGlobal);\r
EFI_STATUS\r
EFIAPI\r
PcRtcEfiSetTime (\r
- IN EFI_TIME *Time\r
+ IN EFI_TIME *Time\r
)\r
{\r
return PcRtcSetTime (Time, &mModuleGlobal);\r
EFI_STATUS\r
EFIAPI\r
PcRtcEfiGetWakeupTime (\r
- OUT BOOLEAN *Enabled,\r
- OUT BOOLEAN *Pending,\r
- OUT EFI_TIME *Time\r
+ OUT BOOLEAN *Enabled,\r
+ OUT BOOLEAN *Pending,\r
+ OUT EFI_TIME *Time\r
)\r
{\r
return PcRtcGetWakeupTime (Enabled, Pending, Time, &mModuleGlobal);\r
}\r
\r
-\r
/**\r
Sets the system wakeup alarm clock time.\r
\r
EFI_STATUS\r
EFIAPI\r
PcRtcEfiSetWakeupTime (\r
- IN BOOLEAN Enabled,\r
- IN EFI_TIME *Time OPTIONAL\r
+ IN BOOLEAN Enabled,\r
+ IN EFI_TIME *Time OPTIONAL\r
)\r
{\r
return PcRtcSetWakeupTime (Enabled, Time, &mModuleGlobal);\r
VOID\r
EFIAPI\r
LibRtcVirtualNotifyEvent (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
// Only needed if you are going to support the OS calling RTC functions in\r
// stored physical addresses to virtual address. After the OS transitions to\r
// calling in virtual mode, all future runtime calls will be made in virtual\r
// mode.\r
- EfiConvertPointer (0x0, (VOID**)&mRtcIndexRegister);\r
- EfiConvertPointer (0x0, (VOID**)&mRtcTargetRegister);\r
+ EfiConvertPointer (0x0, (VOID **)&mRtcIndexRegister);\r
+ EfiConvertPointer (0x0, (VOID **)&mRtcTargetRegister);\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
InitializePcRtc (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_STATUS Status;\r
mModuleGlobal.CenturyRtcAddress = GetCenturyRtcAddress ();\r
\r
if (FeaturePcdGet (PcdRtcUseMmio)) {\r
- mRtcIndexRegister = (UINTN)PcdGet64 (PcdRtcIndexRegister64);\r
+ mRtcIndexRegister = (UINTN)PcdGet64 (PcdRtcIndexRegister64);\r
mRtcTargetRegister = (UINTN)PcdGet64 (PcdRtcTargetRegister64);\r
}\r
\r