+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
- \r\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
- \r\r
-\r
-Module Name:\r
-\r
-\r
- LegacySpeaker.c\r
-\r
-Abstract:\r
-\r
- This file implements PEIM for Legacy Speaker. This file is valid for platforms both\r
- on IA32 and Itanium Product Family\r
-\r
---*/\r
-\r
-#include "PlatformEarlyInit.h"\r
-\r
-EFI_STATUS\r
-OutputBeep (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
- IN UINTN NumberOfBeep,\r
- IN UINTN BeepDuration,\r
- IN UINTN TimerInterval\r
- );\r
-\r
-/**\r
- This function will enable the speaker to generate beep\r
-\r
- @param PeiServices PeiServices to locate PPI\r
-\r
- @retval EFI_STATUS\r
-\r
-**/\r
-EFI_STATUS\r
-TurnOnSpeaker (\r
- IN CONST EFI_PEI_SERVICES **PeiServices\r
- )\r
-{\r
- UINT8 Data;\r
- Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);\r
- Data |= 0x03;\r
- IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- This function will stop beep from speaker.\r
-\r
- @param PeiServices PeiServices to locate PPI\r
-\r
- @retval Status\r
-\r
-**/\r
-EFI_STATUS\r
-TurnOffSpeaker (\r
- IN CONST EFI_PEI_SERVICES **PeiServices\r
- )\r
-{\r
- UINT8 Data;\r
-\r
- Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);\r
- Data &= 0xFC;\r
- IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-EFI_STATUS\r
-OutputBeep (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
- IN UINTN NumberOfBeep,\r
- IN UINTN BeepDuration,\r
- IN UINTN TimeInterval\r
- )\r
-{\r
- UINTN Num;\r
- EFI_PEI_STALL_PPI* StallPpi;\r
-\r
- (**PeiServices).LocatePpi (PeiServices, &gEfiPeiStallPpiGuid, 0, NULL, (void **)&StallPpi);\r
-\r
- for (Num=0; Num < NumberOfBeep; Num++) {\r
- TurnOnSpeaker (PeiServices);\r
- StallPpi->Stall(PeiServices, StallPpi, BeepDuration);\r
- TurnOffSpeaker(PeiServices);\r
- StallPpi->Stall(PeiServices, StallPpi, TimeInterval);\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- This function will program the speaker tone frequency. The value should be with 64k\r
- boundary since it takes only 16 bit value which gets programmed in two step IO opearattion\r
-\r
- Frequency - A value which should be 16 bit only.\r
-\r
- EFI_SUCESS\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ProgramToneFrequency (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
- IN UINT16 Frequency\r
- )\r
-{\r
- UINT8 Data;\r
-\r
- Data = 0xB6;\r
- IoWrite8(EFI_TIMER_CONTROL_PORT, Data);\r
-\r
- Data = (UINT8)(Frequency & 0x00FF);\r
- IoWrite8(EFI_TIMER_2_PORT, Data);\r
- Data = (UINT8)((Frequency & 0xFF00) >> 8);\r
- IoWrite8(EFI_TIMER_2_PORT, Data);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- This function will generate the beep for specified duration.\r
-\r
- @param PeiServices PeiServices to locate various PPIs\r
- @param NumberOfBeeps Number of beeps which user want to produce\r
- @param BeepDuration Duration for speaker gate need to be enabled\r
- @param TimeInterval Interval between each beep\r
-\r
- @retval EFI_STATUS\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-GenerateBeepTone (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
- IN UINTN NumberOfBeeps,\r
- IN UINTN BeepDuration,\r
- IN UINTN TimeInterval\r
- )\r
-{\r
-\r
- if ((NumberOfBeeps == 1) && (BeepDuration == 0) && (TimeInterval == 0)) {\r
- TurnOnSpeaker (PeiServices);\r
- return EFI_SUCCESS;\r
- }\r
-\r
- if ((NumberOfBeeps == 0) && (BeepDuration == 0) && (TimeInterval == 0)) {\r
- TurnOffSpeaker (PeiServices);\r
- return EFI_SUCCESS;\r
- }\r
-\r
- if (BeepDuration == 0) {\r
- BeepDuration = EFI_DEFAULT_SHORT_BEEP_DURATION;\r
- }\r
-\r
- if (TimeInterval == 0) {\r
- TimeInterval = EFI_DEFAULT_BEEP_TIME_INTERVAL;\r
- }\r
-\r
- OutputBeep (PeiServices, NumberOfBeeps, BeepDuration, TimeInterval);\r
- return EFI_SUCCESS;\r
-\r
-\r
-}\r
-\r