root/sys/arch/amd64/include/efivar.h
/*      $OpenBSD: efivar.h,v 1.1 2023/01/14 12:11:10 kettenis Exp $     */
/*
 * Copyright (c) 2022 Mark Kettenis <kettenis@openbsd.org>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _MACHINE_EFIVAR_H_
#define _MACHINE_EFIVAR_H_

#include <dev/clock_subr.h>

struct efi_softc {
        struct device   sc_dev;
        struct pmap     *sc_pm;
        EFI_RUNTIME_SERVICES *sc_rs;
        EFI_SYSTEM_RESOURCE_TABLE *sc_esrt;
        u_long          sc_psw;
        uint64_t        sc_cr3;

        struct todr_chip_handle sc_todr;
};

void    efi_enter(struct efi_softc *);
void    efi_leave(struct efi_softc *);

extern label_t efi_jmpbuf;

#define efi_enter_check(sc) (setjmp(&efi_jmpbuf) ? \
    (efi_leave(sc), EFAULT) : (efi_enter(sc), 0))

#endif /* _MACHINE_EFIVAR_H_ */