efidelay.c revision 1.2
11.2Snonaka/* $NetBSD: efidelay.c,v 1.2 2018/03/27 14:15:05 nonaka Exp $ */ 21.1Snonaka 31.1Snonaka/*- 41.1Snonaka * Copyright (c) 2016 Kimihiro Nonaka <nonaka@netbsd.org> 51.1Snonaka * All rights reserved. 61.1Snonaka * 71.1Snonaka * Redistribution and use in source and binary forms, with or without 81.1Snonaka * modification, are permitted provided that the following conditions 91.1Snonaka * are met: 101.1Snonaka * 1. Redistributions of source code must retain the above copyright 111.1Snonaka * notice, this list of conditions and the following disclaimer. 121.1Snonaka * 2. Redistributions in binary form must reproduce the above copyright 131.1Snonaka * notice, this list of conditions and the following disclaimer in the 141.1Snonaka * documentation and/or other materials provided with the distribution. 151.1Snonaka * 161.1Snonaka * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 171.1Snonaka * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 181.1Snonaka * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 191.1Snonaka * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 201.1Snonaka * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 211.1Snonaka * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 221.1Snonaka * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 231.1Snonaka * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 241.1Snonaka * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 251.1Snonaka * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261.1Snonaka * SUCH DAMAGE. 271.1Snonaka */ 281.1Snonaka 291.1Snonaka#include "efiboot.h" 301.1Snonaka 311.1Snonakavoid 321.1Snonakadelay(int us) 331.1Snonaka{ 341.1Snonaka EFI_STATUS status; 351.2Snonaka CHAR16 errmsg[128]; 361.2Snonaka char *uerrmsg; 371.2Snonaka int rv; 381.1Snonaka 391.1Snonaka status = uefi_call_wrapper(BS->Stall, 1, us); 401.2Snonaka if (EFI_ERROR(status)) { 411.2Snonaka StatusToString(errmsg, status); 421.2Snonaka uerrmsg = NULL; 431.2Snonaka rv = ucs2_to_utf8(errmsg, &uerrmsg); 441.2Snonaka if (rv) 451.2Snonaka uerrmsg = ""; 461.2Snonaka panic("couldn't delay %d us: %s(%" PRIxMAX ")\n", us, uerrmsg, 471.2Snonaka (uintmax_t)status); 481.2Snonaka if (rv == 0) 491.2Snonaka FreePool(uerrmsg); 501.2Snonaka } 511.1Snonaka} 521.1Snonaka 531.1Snonakavoid 541.1Snonakawait_sec(int sec) 551.1Snonaka{ 561.1Snonaka while (sec-- > 0) 571.1Snonaka delay(1000 * 1000); 581.1Snonaka} 59