GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* From Coreboot file device/oprom/realmode/x86.h
|
||||
*
|
||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
||||
* Copyright (C) 2009-2010 coresystems GmbH
|
||||
*/
|
||||
|
||||
#ifndef _X86_LIB_BIOS_H
|
||||
#define _X86_LIB_BIOS_H
|
||||
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#define REALMODE_BASE 0x600
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
#define PTR_TO_REAL_MODE(x) (x - asm_realmode_code + REALMODE_BASE)
|
||||
|
||||
#else
|
||||
|
||||
/* Convert a symbol address to our real mode area */
|
||||
#define PTR_TO_REAL_MODE(sym)\
|
||||
(void *)(REALMODE_BASE + ((char *)&(sym) - (char *)&asm_realmode_code))
|
||||
|
||||
/*
|
||||
* The following symbols cannot be used directly. They need to be fixed up
|
||||
* to point to the correct address location after the code has been copied
|
||||
* to REALMODE_BASE. Absolute symbols are not used because those symbols are
|
||||
* relocated by U-Boot.
|
||||
*/
|
||||
extern unsigned char asm_realmode_call, __realmode_interrupt;
|
||||
extern unsigned char asm_realmode_buffer;
|
||||
|
||||
#define DOWNTO8(A) \
|
||||
union { \
|
||||
struct { \
|
||||
union { \
|
||||
struct { \
|
||||
uint8_t A##l; \
|
||||
uint8_t A##h; \
|
||||
} __packed; \
|
||||
uint16_t A##x; \
|
||||
} __packed; \
|
||||
uint16_t h##A##x; \
|
||||
} __packed; \
|
||||
uint32_t e##A##x; \
|
||||
} __packed;
|
||||
|
||||
#define DOWNTO16(A) \
|
||||
union { \
|
||||
struct { \
|
||||
uint16_t A; \
|
||||
uint16_t h##A; \
|
||||
} __packed; \
|
||||
uint32_t e##A; \
|
||||
} __packed;
|
||||
|
||||
struct eregs {
|
||||
DOWNTO8(a);
|
||||
DOWNTO8(c);
|
||||
DOWNTO8(d);
|
||||
DOWNTO8(b);
|
||||
DOWNTO16(sp);
|
||||
DOWNTO16(bp);
|
||||
DOWNTO16(si);
|
||||
DOWNTO16(di);
|
||||
uint32_t vector;
|
||||
uint32_t error_code;
|
||||
uint32_t eip;
|
||||
uint32_t cs;
|
||||
uint32_t eflags;
|
||||
};
|
||||
|
||||
struct realmode_idt {
|
||||
u16 offset, cs;
|
||||
};
|
||||
|
||||
void x86_exception(struct eregs *info);
|
||||
|
||||
/* From x86_asm.S */
|
||||
extern unsigned char __idt_handler;
|
||||
extern unsigned int __idt_handler_size;
|
||||
extern unsigned char asm_realmode_code;
|
||||
extern unsigned int asm_realmode_code_size;
|
||||
|
||||
asmlinkage void (*realmode_call)(u32 addr, u32 eax, u32 ebx, u32 ecx, u32 edx,
|
||||
u32 esi, u32 edi);
|
||||
|
||||
asmlinkage void (*realmode_interrupt)(u32 intno, u32 eax, u32 ebx, u32 ecx,
|
||||
u32 edx, u32 esi, u32 edi);
|
||||
|
||||
int int10_handler(void);
|
||||
int int12_handler(void);
|
||||
int int16_handler(void);
|
||||
int int1a_handler(void);
|
||||
#endif /*__ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user