+++ /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
- LegacySpeaker.c\r
-\r
-Abstract:\r
-\r
- This file implements DXE for Legacy Speaker.\r
-\r
---*/\r
-\r
-#include "LegacySpeaker.h"\r
-\r
-/**\r
-\r
- This function will enable the speaker to generate beep\r
-\r
- @retval EFI_STATUS\r
-\r
-**/\r
-EFI_STATUS\r
-TurnOnSpeaker (\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
-\r
- This function will stop beep from speaker.\r
-\r
- @retval Status\r
-\r
-**/\r
-EFI_STATUS\r
-TurnOffSpeaker (\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
- Generate beep sound based upon number of beeps and duration of the beep\r
-\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 Does not return if the reset takes place.\r
- EFI_INVALID_PARAMETER If ResetType is invalid.\r
-\r
-**/\r
-EFI_STATUS\r
-OutputBeep (\r
- IN UINTN NumberOfBeep,\r
- IN UINTN BeepDuration,\r
- IN UINTN TimeInterval\r
- )\r
-{\r
- UINTN Num;\r
-\r
- for (Num=0; Num < NumberOfBeep; Num++) {\r
- TurnOnSpeaker ();\r
- //\r
- // wait some time,at least 120us\r
- //\r
- gBS->Stall (BeepDuration);\r
- TurnOffSpeaker();\r
- gBS->Stall (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
- @param Frequency A value which should be 16 bit only.\r
-\r
- @retval EFI_SUCESS\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI \r
-ProgramToneFrequency (\r
- IN EFI_SPEAKER_IF_PROTOCOL * This,\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 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 EFI_SPEAKER_IF_PROTOCOL * This,\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 ();\r
- return EFI_SUCCESS;\r
- }\r
-\r
- if ((NumberOfBeeps == 0) && (BeepDuration == 0) && (TimeInterval == 0)) {\r
- TurnOffSpeaker ();\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 (NumberOfBeeps, BeepDuration, TimeInterval);\r
- return EFI_SUCCESS;\r
-\r
-\r
-}\r