1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 1996-1999 SciTech Software, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _BIOS_EMUL_H 8*4882a593Smuzhiyun #define _BIOS_EMUL_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* Include the register header directly here */ 11*4882a593Smuzhiyun #include "../drivers/bios_emulator/include/x86emu/regs.h" 12*4882a593Smuzhiyun #include <pci.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /**************************************************************************** 15*4882a593Smuzhiyun REMARKS: 16*4882a593Smuzhiyun Data structure used to describe the details for the BIOS emulator system 17*4882a593Smuzhiyun environment as used by the X86 emulator library. 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun HEADER: 20*4882a593Smuzhiyun biosemu.h 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun MEMBERS: 23*4882a593Smuzhiyun vgaInfo - VGA BIOS information structure 24*4882a593Smuzhiyun biosmem_base - Base of the BIOS image 25*4882a593Smuzhiyun biosmem_limit - Limit of the BIOS image 26*4882a593Smuzhiyun busmem_base - Base of the VGA bus memory 27*4882a593Smuzhiyun ****************************************************************************/ 28*4882a593Smuzhiyun typedef struct { 29*4882a593Smuzhiyun int function; 30*4882a593Smuzhiyun int device; 31*4882a593Smuzhiyun int bus; 32*4882a593Smuzhiyun u32 VendorID; 33*4882a593Smuzhiyun u32 DeviceID; 34*4882a593Smuzhiyun #ifdef CONFIG_DM_PCI 35*4882a593Smuzhiyun struct udevice *pcidev; 36*4882a593Smuzhiyun #else 37*4882a593Smuzhiyun pci_dev_t pcidev; 38*4882a593Smuzhiyun #endif 39*4882a593Smuzhiyun void *BIOSImage; 40*4882a593Smuzhiyun u32 BIOSImageLen; 41*4882a593Smuzhiyun u8 LowMem[1536]; 42*4882a593Smuzhiyun } BE_VGAInfo; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun struct vbe_mode_info; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #ifdef CONFIG_DM_PCI 47*4882a593Smuzhiyun int BootVideoCardBIOS(struct udevice *pcidev, BE_VGAInfo **pVGAInfo, 48*4882a593Smuzhiyun int clean_up); 49*4882a593Smuzhiyun #else 50*4882a593Smuzhiyun int BootVideoCardBIOS(pci_dev_t pcidev, BE_VGAInfo **pVGAInfo, int clean_up); 51*4882a593Smuzhiyun #endif 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* Run a BIOS ROM natively (only supported on x86 machines) */ 54*4882a593Smuzhiyun void bios_run_on_x86(struct udevice *dev, unsigned long addr, int vesa_mode, 55*4882a593Smuzhiyun struct vbe_mode_info *mode_info); 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /** 58*4882a593Smuzhiyun * bios_set_interrupt_handler() - Install an interrupt handler for the BIOS 59*4882a593Smuzhiyun * 60*4882a593Smuzhiyun * This installs an interrupt handler that the BIOS will call when needed. 61*4882a593Smuzhiyun * 62*4882a593Smuzhiyun * @intnum: Interrupt number to install a handler for 63*4882a593Smuzhiyun * @int_handler_func: Function to call to handle interrupt 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun void bios_set_interrupt_handler(int intnum, int (*int_handler_func)(void)); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun void biosemu_set_interrupt_handler(int intnum, int (*int_func)(void)); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #ifdef CONFIG_DM_PCI 70*4882a593Smuzhiyun int biosemu_setup(struct udevice *pcidev, BE_VGAInfo **pVGAInfo); 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun int biosemu_run(struct udevice *dev, uchar *bios_rom, int bios_len, 73*4882a593Smuzhiyun BE_VGAInfo *vga_info, int clean_up, int vesa_mode, 74*4882a593Smuzhiyun struct vbe_mode_info *mode_info); 75*4882a593Smuzhiyun #else 76*4882a593Smuzhiyun int biosemu_setup(pci_dev_t pcidev, BE_VGAInfo **pVGAInfo); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun int biosemu_run(pci_dev_t pcidev, uchar *bios_rom, int bios_len, 79*4882a593Smuzhiyun BE_VGAInfo *vga_info, int clean_up, int vesa_mode, 80*4882a593Smuzhiyun struct vbe_mode_info *mode_info); 81*4882a593Smuzhiyun #endif 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #endif 84