123 UINTN TimerCounter1 = 0;
132 DEBUG ((DEBUG_INFO,
"=== Test UEFI Event System ===\n"));
137 Status =
gBS->CreateEvent (
141 (VOID *)&SignalNotifyContext1,
145 if (EFI_ERROR (Status) || (Signal1 == NULL)) {
146 DEBUG ((DEBUG_INFO,
"FAIL: Signal1 event creation (Status: %r)\n", Status));
148 DEBUG ((DEBUG_INFO,
"PASS: Signal1 event created\n"));
151 Status =
gBS->CreateEvent (
155 (VOID *)&SignalNotifyContext2,
159 if (EFI_ERROR (Status) || (Signal2 == NULL)) {
160 DEBUG ((DEBUG_INFO,
"FAIL: Signal2 event creation (Status: %r)\n", Status));
162 DEBUG ((DEBUG_INFO,
"PASS: Signal2 event created\n"));
165 Status =
gBS->CreateEvent (
169 (VOID *)&SignalNotifyContext3,
173 if (EFI_ERROR (Status) || (Signal3 == NULL)) {
174 DEBUG ((DEBUG_INFO,
"FAIL: Signal3 event creation (Status: %r)\n", Status));
176 DEBUG ((DEBUG_INFO,
"PASS: Signal3 event created\n"));
179 Status =
gBS->CreateEvent (
180 EVT_TIMER | EVT_NOTIFY_WAIT,
183 (VOID *)&WaitNotifyContext1,
187 if (EFI_ERROR (Status) || (Wait1 == NULL)) {
188 DEBUG ((DEBUG_INFO,
"FAIL: Wait1 event creation (Status: %r)\n", Status));
190 DEBUG ((DEBUG_INFO,
"PASS: Wait1 event created\n"));
193 Status =
gBS->CreateEvent (
201 if (EFI_ERROR (Status) || (Timer1 == NULL)) {
202 DEBUG ((DEBUG_INFO,
"FAIL: Timer1 event creation (Status: %r)\n", Status));
204 DEBUG ((DEBUG_INFO,
"PASS: Timer1 event created\n"));
207 Status =
gBS->CreateEvent (
208 EVT_TIMER | EVT_NOTIFY_SIGNAL,
211 (VOID *)&SelfDestroyContext1,
215 if (EFI_ERROR (Status) || (SelfD1 == NULL)) {
216 DEBUG ((DEBUG_INFO,
"FAIL: SelfD1 event creation (Status: %r)\n", Status));
218 DEBUG ((DEBUG_INFO,
"PASS: SelfD event created\n"));
232 Status =
gBS->SetTimer (Wait1, TimerPeriodic, 100*10000);
234 if (EFI_ERROR (Status)) {
235 DEBUG ((DEBUG_INFO,
"FAIL: Set timer for Wait1 (Status: %r)\n", Status));
237 DEBUG ((DEBUG_INFO,
"PASS: Wait1 set to 100*10000 periodic\n"));
240 Status =
gBS->SetTimer (Timer1, TimerPeriodic, 10*10000);
242 if (EFI_ERROR (Status)) {
243 DEBUG ((DEBUG_INFO,
"FAIL: Set timer for Timer1 (Status: %r)\n", Status));
245 DEBUG ((DEBUG_INFO,
"PASS: Timer1 set to 10*10000 periodic\n"));
248 Status =
gBS->SetTimer (SelfD1, TimerRelative, 30*10000);
250 if (EFI_ERROR (Status)) {
251 DEBUG ((DEBUG_INFO,
"FAIL: Set timer for SelfD1 (Status: %r)\n", Status));
253 DEBUG ((DEBUG_INFO,
"PASS: SelfD1 set to 30*10000 relative\n"));
259 gBS->SignalEvent (Signal1);
267 for (Jndex = 0; Jndex < 10; Jndex++) {
268 Status =
gBS->WaitForEvent (2, Events, &Index);
269 if (!EFI_ERROR (Status)) {
270 DEBUG ((DEBUG_INFO,
"Event %u triggered\n", Index));
272 DEBUG ((DEBUG_INFO,
"PASS: Timer1 event wait succeeded\n"));
276 DEBUG ((DEBUG_INFO,
"Event Error %u (Status: %r)\n", Index, Status));
283 Status =
gBS->CheckEvent (Signal1);
284 if (Status == EFI_SUCCESS) {
285 DEBUG ((DEBUG_INFO,
"FAIL: Event check succeeded\n"));
287 DEBUG ((DEBUG_INFO,
"PASS: Event check error (Status: %r)\n", Status));
293 OriginalTPL =
gBS->RaiseTPL (TPL_HIGH_LEVEL);
295 DEBUG ((DEBUG_INFO,
"TPL raised from %u to %d\n", OriginalTPL, TPL_HIGH_LEVEL));
297 gBS->SignalEvent (Signal1);
298 DEBUG ((DEBUG_INFO,
"EVENT SIGANL1 NEED PRINTF AFTER THIS LINE:\n"));
300 gBS->RestoreTPL (OriginalTPL);
301 DEBUG ((DEBUG_INFO,
"TPL restored to %u\n", OriginalTPL));
306 gBS->CloseEvent (Signal1);
307 gBS->CloseEvent (Timer1);
314 DEBUG ((DEBUG_INFO,
"\n=== Test Summary ===\n"));
315 DEBUG ((DEBUG_INFO,
"Signal1 callbacks: %u\n", SignalNotifyContext1.
Counter));
316 DEBUG ((DEBUG_INFO,
"Signal2 callbacks: %u\n", SignalNotifyContext2.
Counter));
317 DEBUG ((DEBUG_INFO,
"Signal3 callbacks: %u\n", SignalNotifyContext3.
Counter));
318 DEBUG ((DEBUG_INFO,
"Wait1 callbacks: %u\n", WaitNotifyContext1.
Counter));
319 DEBUG ((DEBUG_INFO,
"SelfD1 callbacks: %u\n", SelfDestroyContext1.
Counter));
320 DEBUG ((DEBUG_INFO,
"Timer1 callbacks: %u\n", TimerCounter1));
322 gBS->CloseEvent (Signal2);
323 gBS->CloseEvent (Signal3);
324 gBS->CloseEvent (Wait1);