uboot/arch/x86/lib/bios.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * From Coreboot file device/oprom/realmode/x86.h
   4 *
   5 * Copyright (C) 2007 Advanced Micro Devices, Inc.
   6 * Copyright (C) 2009-2010 coresystems GmbH
   7 */
   8
   9#ifndef _X86_LIB_BIOS_H
  10#define _X86_LIB_BIOS_H
  11
  12#include <linux/linkage.h>
  13
  14#define REALMODE_BASE           0x600
  15
  16#ifdef __ASSEMBLY__
  17
  18#define PTR_TO_REAL_MODE(x)     (x - asm_realmode_code + REALMODE_BASE)
  19
  20#else
  21
  22/* Convert a symbol address to our real mode area */
  23#define PTR_TO_REAL_MODE(sym)\
  24        (void *)(REALMODE_BASE + ((char *)&(sym) - (char *)&asm_realmode_code))
  25
  26/*
  27 * The following symbols cannot be used directly. They need to be fixed up
  28 * to point to the correct address location after the code has been copied
  29 * to REALMODE_BASE. Absolute symbols are not used because those symbols are
  30 * relocated by U-Boot.
  31 */
  32extern unsigned char asm_realmode_call, __realmode_interrupt;
  33extern unsigned char asm_realmode_buffer;
  34
  35#define DOWNTO8(A) \
  36        union { \
  37                struct { \
  38                        union { \
  39                                struct { \
  40                                        uint8_t A##l; \
  41                                        uint8_t A##h; \
  42                                } __packed; \
  43                                uint16_t A##x; \
  44                        } __packed; \
  45                        uint16_t h##A##x; \
  46                } __packed; \
  47                uint32_t e##A##x; \
  48        } __packed;
  49
  50#define DOWNTO16(A) \
  51        union { \
  52                struct { \
  53                        uint16_t A; \
  54                        uint16_t h##A; \
  55                } __packed; \
  56                uint32_t e##A; \
  57        } __packed;
  58
  59struct eregs {
  60        DOWNTO8(a);
  61        DOWNTO8(c);
  62        DOWNTO8(d);
  63        DOWNTO8(b);
  64        DOWNTO16(sp);
  65        DOWNTO16(bp);
  66        DOWNTO16(si);
  67        DOWNTO16(di);
  68        uint32_t vector;
  69        uint32_t error_code;
  70        uint32_t eip;
  71        uint32_t cs;
  72        uint32_t eflags;
  73};
  74
  75struct realmode_idt {
  76        u16 offset, cs;
  77};
  78
  79void x86_exception(struct eregs *info);
  80
  81/* From x86_asm.S */
  82extern unsigned char __idt_handler;
  83extern unsigned int __idt_handler_size;
  84extern unsigned char asm_realmode_code;
  85extern unsigned int asm_realmode_code_size;
  86
  87asmlinkage void (*realmode_call)(u32 addr, u32 eax, u32 ebx, u32 ecx, u32 edx,
  88                                 u32 esi, u32 edi);
  89
  90asmlinkage void (*realmode_interrupt)(u32 intno, u32 eax, u32 ebx, u32 ecx,
  91                                      u32 edx, u32 esi, u32 edi);
  92
  93int int10_handler(void);
  94int int12_handler(void);
  95int int16_handler(void);
  96int int1a_handler(void);
  97#endif /*__ASSEMBLY__ */
  98
  99#endif
 100