• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2 
3   Copyright (c) 2004  - 2014, Intel Corporation. All rights reserved.<BR>
4 
5 
6   This program and the accompanying materials are licensed and made available under
7 
8   the terms and conditions of the BSD License that accompanies this distribution.
9 
10   The full text of the license may be found at
11 
12   http://opensource.org/licenses/bsd-license.php.
13 
14 
15 
16   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
17 
18   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 
20 
21 
22 
23 Module Name:
24 
25  LegacySpeaker.c
26 
27 Abstract:
28 
29   This file implements DXE for Legacy Speaker.
30 
31 --*/
32 
33 #include "LegacySpeaker.h"
TurnOnSpeaker()34 
35 /**
36 
37   This function will enable the speaker to generate beep
38 
39   @retval EFI_STATUS
40 
41 **/
42 EFI_STATUS
43 TurnOnSpeaker (
44   )
45 {
46   UINT8                   Data;
47   Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);
48   Data |= 0x03;
49   IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);
50   return EFI_SUCCESS;
51 }
TurnOffSpeaker()52 
53 /**
54 
55   This function will stop beep from speaker.
56 
57   @retval Status
58 
59 **/
60 EFI_STATUS
61 TurnOffSpeaker (
62   )
63 {
64   UINT8                   Data;
65 
66   Data = IoRead8 (EFI_SPEAKER_CONTROL_PORT);
67   Data &= 0xFC;
68   IoWrite8(EFI_SPEAKER_CONTROL_PORT, Data);
69   return EFI_SUCCESS;
70 }
71 
72 /**
73   Generate beep sound based upon number of beeps and duration of the beep
74 
OutputBeep(IN UINTN NumberOfBeep,IN UINTN BeepDuration,IN UINTN TimeInterval)75   @param NumberOfBeeps     Number of beeps which user want to produce
76   @param BeepDuration      Duration for speaker gate need to be enabled
77   @param TimeInterval      Interval between each beep
78 
79   @retval      Does not return if the reset takes place.
80                EFI_INVALID_PARAMETER   If ResetType is invalid.
81 
82 **/
83 EFI_STATUS
84 OutputBeep (
85   IN     UINTN                              NumberOfBeep,
86   IN     UINTN                              BeepDuration,
87   IN     UINTN                              TimeInterval
88   )
89 {
90   UINTN           Num;
91 
92   for (Num=0; Num < NumberOfBeep; Num++) {
93     TurnOnSpeaker ();
94     //
95     // wait some time,at least 120us
96     //
97     gBS->Stall (BeepDuration);
98     TurnOffSpeaker();
99     gBS->Stall (TimeInterval);
100   }
101 
102   return EFI_SUCCESS;
103 }
104 
105 /**
106   This function will program the speaker tone frequency. The value should be with 64k
ProgramToneFrequency(IN EFI_SPEAKER_IF_PROTOCOL * This,IN UINT16 Frequency)107   boundary since it takes only 16 bit value which gets programmed in two step IO opearattion
108 
109   @param  Frequency     A value which should be 16 bit only.
110 
111   @retval EFI_SUCESS
112 
113 **/
114 EFI_STATUS
115 EFIAPI
116 ProgramToneFrequency (
117   IN EFI_SPEAKER_IF_PROTOCOL            * This,
118   IN  UINT16                            Frequency
119   )
120 {
121   UINT8                   Data;
122 
123   Data = 0xB6;
124   IoWrite8(EFI_TIMER_CONTROL_PORT, Data);
125 
126   Data = (UINT8)(Frequency & 0x00FF);
127   IoWrite8(EFI_TIMER_2_PORT, Data);
128   Data = (UINT8)((Frequency & 0xFF00) >> 8);
129   IoWrite8(EFI_TIMER_2_PORT, Data);
130   return EFI_SUCCESS;
131 }
132 
133 /**
134   This function will generate the beep for specified duration.
135 
GenerateBeepTone(IN EFI_SPEAKER_IF_PROTOCOL * This,IN UINTN NumberOfBeeps,IN UINTN BeepDuration,IN UINTN TimeInterval)136   @param NumberOfBeeps     Number of beeps which user want to produce
137   @param BeepDuration      Duration for speaker gate need to be enabled
138   @param TimeInterval      Interval between each beep
139 
140   @retval EFI_STATUS
141 
142 **/
143 EFI_STATUS
144 EFIAPI
145 GenerateBeepTone (
146   IN EFI_SPEAKER_IF_PROTOCOL            * This,
147   IN  UINTN                             NumberOfBeeps,
148   IN  UINTN                             BeepDuration,
149   IN  UINTN                             TimeInterval
150   )
151 {
152 
153   if ((NumberOfBeeps == 1) && (BeepDuration == 0) && (TimeInterval == 0)) {
154     TurnOnSpeaker ();
155     return EFI_SUCCESS;
156   }
157 
158   if ((NumberOfBeeps == 0) && (BeepDuration == 0) && (TimeInterval == 0)) {
159     TurnOffSpeaker ();
160     return EFI_SUCCESS;
161   }
162 
163   if (BeepDuration == 0) {
164     BeepDuration = EFI_DEFAULT_SHORT_BEEP_DURATION;
165   }
166 
167   if (TimeInterval == 0) {
168     TimeInterval = EFI_DEFAULT_BEEP_TIME_INTERVAL;
169   }
170 
171   OutputBeep (NumberOfBeeps, BeepDuration, TimeInterval);
172   return EFI_SUCCESS;
173 
174 
175 }
176