diff options
Diffstat (limited to 'EdkUnixPkg')
-rw-r--r-- | EdkUnixPkg/Sec/UgaX11.c | 4 | ||||
-rw-r--r-- | EdkUnixPkg/Sec/UnixThunk.c | 18 |
2 files changed, 15 insertions, 7 deletions
diff --git a/EdkUnixPkg/Sec/UgaX11.c b/EdkUnixPkg/Sec/UgaX11.c index b5719cf..47fb4fa 100644 --- a/EdkUnixPkg/Sec/UgaX11.c +++ b/EdkUnixPkg/Sec/UgaX11.c @@ -13,6 +13,8 @@ #include <stdio.h> #include <stdlib.h> +extern void msSleep (unsigned long Milliseconds); + /* XQueryPointer */ struct uga_drv_shift_mask @@ -347,7 +349,7 @@ UgaCheckKey(EFI_UNIX_UGA_IO_PROTOCOL *UgaIo) return EFI_SUCCESS; else { /* EFI is certainly polling. Be CPU-friendly. */ - usleep (50000); + msSleep (20); return EFI_NOT_READY; } } diff --git a/EdkUnixPkg/Sec/UnixThunk.c b/EdkUnixPkg/Sec/UnixThunk.c index 46b0e34..c1988fa 100644 --- a/EdkUnixPkg/Sec/UnixThunk.c +++ b/EdkUnixPkg/Sec/UnixThunk.c @@ -90,6 +90,18 @@ SetTimer (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs)) } void +msSleep (unsigned long Milliseconds) +{ + struct timespec ts; + + ts.tv_sec = Milliseconds / 1000; + ts.tv_nsec = (Milliseconds % 1000) * 1000000; + + while (nanosleep (&ts, &ts) != 0 && errno == EINTR) + ; +} + +void GetLocalTime (EFI_TIME *Time) { struct tm *tm; @@ -110,12 +122,6 @@ GetLocalTime (EFI_TIME *Time) | (tm->tm_isdst > 0 ? EFI_TIME_IN_DAYLIGHT : 0); } -void -msSleep (unsigned long Milliseconds) -{ - usleep (Milliseconds * 1000); -} - static void TzSet (void) { |