123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /** @file
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
- Module Name:
- LegacySpeaker.c
- Abstract:
- This file implements DXE for Legacy Speaker.
- --*/
- #include "LegacySpeaker.h"
- /**
- This function will enable the speaker to generate beep
- @retval EFI_STATUS
- **/
- EFI_STATUS
- TurnOnSpeaker (
- )
- {
- UINT8 Data;
- Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);
- Data |= 0x03;
- IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);
- return EFI_SUCCESS;
- }
- /**
- This function will stop beep from speaker.
- @retval Status
- **/
- EFI_STATUS
- TurnOffSpeaker (
- )
- {
- UINT8 Data;
- Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);
- Data &= 0xFC;
- IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);
- return EFI_SUCCESS;
- }
- /**
- Generate beep sound based upon number of beeps and duration of the beep
- @param NumberOfBeeps Number of beeps which user want to produce
- @param BeepDuration Duration for speaker gate need to be enabled
- @param TimeInterval Interval between each beep
- @retval Does not return if the reset takes place.
- EFI_INVALID_PARAMETER If ResetType is invalid.
- **/
- EFI_STATUS
- OutputBeep (
- IN UINTN NumberOfBeep,
- IN UINTN BeepDuration,
- IN UINTN TimeInterval
- )
- {
- UINTN Num;
- for (Num=0; Num < NumberOfBeep; Num++) {
- TurnOnSpeaker ();
- //
- // wait some time,at least 120us
- //
- gBS->Stall (BeepDuration);
- TurnOffSpeaker();
- gBS->Stall (TimeInterval);
- }
- return EFI_SUCCESS;
- }
- /**
- This function will program the speaker tone frequency. The value should be with 64k
- boundary since it takes only 16 bit value which gets programmed in two step IO opearattion
- @param Frequency A value which should be 16 bit only.
- @retval EFI_SUCESS
- **/
- EFI_STATUS
- EFIAPI
- ProgramToneFrequency (
- IN EFI_SPEAKER_IF_PROTOCOL * This,
- IN UINT16 Frequency
- )
- {
- UINT8 Data;
- Data = 0xB6;
- IoWrite8(EFI_TIMER_CONTROL_PORT, Data);
- Data = (UINT8)(Frequency & 0x00FF);
- IoWrite8(EFI_TIMER_2_PORT, Data);
- Data = (UINT8)((Frequency & 0xFF00) >> 8);
- IoWrite8(EFI_TIMER_2_PORT, Data);
- return EFI_SUCCESS;
- }
- /**
- This function will generate the beep for specified duration.
- @param NumberOfBeeps Number of beeps which user want to produce
- @param BeepDuration Duration for speaker gate need to be enabled
- @param TimeInterval Interval between each beep
- @retval EFI_STATUS
- **/
- EFI_STATUS
- EFIAPI
- GenerateBeepTone (
- IN EFI_SPEAKER_IF_PROTOCOL * This,
- IN UINTN NumberOfBeeps,
- IN UINTN BeepDuration,
- IN UINTN TimeInterval
- )
- {
- if ((NumberOfBeeps == 1) && (BeepDuration == 0) && (TimeInterval == 0)) {
- TurnOnSpeaker ();
- return EFI_SUCCESS;
- }
- if ((NumberOfBeeps == 0) && (BeepDuration == 0) && (TimeInterval == 0)) {
- TurnOffSpeaker ();
- return EFI_SUCCESS;
- }
- if (BeepDuration == 0) {
- BeepDuration = EFI_DEFAULT_SHORT_BEEP_DURATION;
- }
- if (TimeInterval == 0) {
- TimeInterval = EFI_DEFAULT_BEEP_TIME_INTERVAL;
- }
- OutputBeep (NumberOfBeeps, BeepDuration, TimeInterval);
- return EFI_SUCCESS;
- }
|