1ece92f85SJason Jin /**************************************************************************** 2ece92f85SJason Jin * 3ece92f85SJason Jin * BIOS emulator and interface 4ece92f85SJason Jin * to Realmode X86 Emulator Library 5ece92f85SJason Jin * 64c2e3da8SKumar Gala * Copyright (C) 2007 Freescale Semiconductor, Inc. 7ece92f85SJason Jin * Jason Jin <Jason.jin@freescale.com> 8ece92f85SJason Jin * 9ece92f85SJason Jin * Copyright (C) 1996-1999 SciTech Software, Inc. 10ece92f85SJason Jin * 11ece92f85SJason Jin * ======================================================================== 12ece92f85SJason Jin * 13ece92f85SJason Jin * Permission to use, copy, modify, distribute, and sell this software and 14ece92f85SJason Jin * its documentation for any purpose is hereby granted without fee, 15ece92f85SJason Jin * provided that the above copyright notice appear in all copies and that 16ece92f85SJason Jin * both that copyright notice and this permission notice appear in 17ece92f85SJason Jin * supporting documentation, and that the name of the authors not be used 18ece92f85SJason Jin * in advertising or publicity pertaining to distribution of the software 19ece92f85SJason Jin * without specific, written prior permission. The authors makes no 20ece92f85SJason Jin * representations about the suitability of this software for any purpose. 21ece92f85SJason Jin * It is provided "as is" without express or implied warranty. 22ece92f85SJason Jin * 23ece92f85SJason Jin * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 24ece92f85SJason Jin * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 25ece92f85SJason Jin * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 26ece92f85SJason Jin * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF 27ece92f85SJason Jin * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 28ece92f85SJason Jin * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 29ece92f85SJason Jin * PERFORMANCE OF THIS SOFTWARE. 30ece92f85SJason Jin * 31ece92f85SJason Jin * ======================================================================== 32ece92f85SJason Jin * 33ece92f85SJason Jin * Language: ANSI C 34ece92f85SJason Jin * Environment: Any 35ece92f85SJason Jin * Developer: Kendall Bennett 36ece92f85SJason Jin * 37ece92f85SJason Jin * Description: Internal header file for the BIOS emulator library. 38ece92f85SJason Jin * 39ece92f85SJason Jin * Jason ported this file to u-boot, Added some architecture 40ece92f85SJason Jin * related Macro. 41ece92f85SJason Jin * 42ece92f85SJason Jin ****************************************************************************/ 43ece92f85SJason Jin 44ece92f85SJason Jin #ifndef __BIOSEMUI_H 45ece92f85SJason Jin #define __BIOSEMUI_H 46ece92f85SJason Jin 47ece92f85SJason Jin #include "biosemu.h" 48ece92f85SJason Jin #include <asm/io.h> 49ece92f85SJason Jin /*---------------------- Macros and type definitions ----------------------*/ 50ece92f85SJason Jin 51*b3521f2eSSimon Glass #ifdef CONFIG_X86EMU_DEBUG 52ece92f85SJason Jin #define DB(x) x 53ece92f85SJason Jin #else 54ece92f85SJason Jin #define DB(x) do{}while(0); 55ece92f85SJason Jin #endif 56ece92f85SJason Jin 57ece92f85SJason Jin #define BIOS_SEG 0xfff0 58ece92f85SJason Jin extern X86EMU_sysEnv _X86EMU_env; 59ece92f85SJason Jin #define M _X86EMU_env 60ece92f85SJason Jin 61ece92f85SJason Jin /* Macros to read and write values to x86 emulator memory. Memory is always 62ece92f85SJason Jin * considered to be little endian, so we use macros to do endian swapping 63ece92f85SJason Jin * where necessary. 64ece92f85SJason Jin */ 65ece92f85SJason Jin 66ece92f85SJason Jin #ifdef __BIG_ENDIAN__ 67ece92f85SJason Jin #define readb_le(base) *((u8*)(base)) 68ece92f85SJason Jin #define readw_le(base) ((u16)readb_le(base) | ((u16)readb_le((base) + 1) << 8)) 69ece92f85SJason Jin #define readl_le(base) ((u32)readb_le((base) + 0) | ((u32)readb_le((base) + 1) << 8) | \ 70ece92f85SJason Jin ((u32)readb_le((base) + 2) << 16) | ((u32)readb_le((base) + 3) << 24)) 71ece92f85SJason Jin #define writeb_le(base, v) *((u8*)(base)) = (v) 72ece92f85SJason Jin #define writew_le(base, v) writeb_le(base + 0, (v >> 0) & 0xff), \ 73ece92f85SJason Jin writeb_le(base + 1, (v >> 8) & 0xff) 74ece92f85SJason Jin #define writel_le(base, v) writeb_le(base + 0, (v >> 0) & 0xff), \ 75ece92f85SJason Jin writeb_le(base + 1, (v >> 8) & 0xff), \ 76ece92f85SJason Jin writeb_le(base + 2, (v >> 16) & 0xff), \ 77ece92f85SJason Jin writeb_le(base + 3, (v >> 24) & 0xff) 78ece92f85SJason Jin #else 79ece92f85SJason Jin #define readb_le(base) *((u8*)(base)) 80ece92f85SJason Jin #define readw_le(base) *((u16*)(base)) 81ece92f85SJason Jin #define readl_le(base) *((u32*)(base)) 82ece92f85SJason Jin #define writeb_le(base, v) *((u8*)(base)) = (v) 83ece92f85SJason Jin #define writew_le(base, v) *((u16*)(base)) = (v) 84ece92f85SJason Jin #define writel_le(base, v) *((u32*)(base)) = (v) 85ece92f85SJason Jin #endif 86ece92f85SJason Jin 87ece92f85SJason Jin /**************************************************************************** 88ece92f85SJason Jin REMARKS: 89ece92f85SJason Jin Function codes passed to the emulated I/O port functions to determine the 90ece92f85SJason Jin type of operation to perform. 91ece92f85SJason Jin ****************************************************************************/ 92ece92f85SJason Jin typedef enum { 93ece92f85SJason Jin REG_READ_BYTE = 0, 94ece92f85SJason Jin REG_READ_WORD = 1, 95ece92f85SJason Jin REG_READ_DWORD = 2, 96ece92f85SJason Jin REG_WRITE_BYTE = 3, 97ece92f85SJason Jin REG_WRITE_WORD = 4, 98ece92f85SJason Jin REG_WRITE_DWORD = 5 99ece92f85SJason Jin } RegisterFlags; 100ece92f85SJason Jin 101ece92f85SJason Jin /**************************************************************************** 102ece92f85SJason Jin REMARKS: 103ece92f85SJason Jin Function codes passed to the emulated I/O port functions to determine the 104ece92f85SJason Jin type of operation to perform. 105ece92f85SJason Jin ****************************************************************************/ 106ece92f85SJason Jin typedef enum { 107ece92f85SJason Jin PORT_BYTE = 1, 108ece92f85SJason Jin PORT_WORD = 2, 109ece92f85SJason Jin PORT_DWORD = 3, 110ece92f85SJason Jin } PortInfoFlags; 111ece92f85SJason Jin 112ece92f85SJason Jin /**************************************************************************** 113ece92f85SJason Jin REMARKS: 114ece92f85SJason Jin Data structure used to describe the details for the BIOS emulator system 115ece92f85SJason Jin environment as used by the X86 emulator library. 116ece92f85SJason Jin 117ece92f85SJason Jin HEADER: 118ece92f85SJason Jin biosemu.h 119ece92f85SJason Jin 120ece92f85SJason Jin MEMBERS: 121ece92f85SJason Jin type - Type of port access (1 = byte, 2 = word, 3 = dword) 122ece92f85SJason Jin defVal - Default power on value 123ece92f85SJason Jin finalVal - Final value 124ece92f85SJason Jin ****************************************************************************/ 125ece92f85SJason Jin typedef struct { 126ece92f85SJason Jin u8 type; 127ece92f85SJason Jin u32 defVal; 128ece92f85SJason Jin u32 finalVal; 129ece92f85SJason Jin } BE_portInfo; 130ece92f85SJason Jin 131ece92f85SJason Jin #define PM_inpb(port) inb(port+VIDEO_IO_OFFSET) 132ece92f85SJason Jin #define PM_inpw(port) inw(port+VIDEO_IO_OFFSET) 133ece92f85SJason Jin #define PM_inpd(port) inl(port+VIDEO_IO_OFFSET) 134ece92f85SJason Jin #define PM_outpb(port,val) outb(val,port+VIDEO_IO_OFFSET) 135ece92f85SJason Jin #define PM_outpw(port,val) outw(val,port+VIDEO_IO_OFFSET) 136ece92f85SJason Jin #define PM_outpd(port,val) outl(val,port+VIDEO_IO_OFFSET) 137ece92f85SJason Jin 138ece92f85SJason Jin #define LOG_inpb(port) PM_inpb(port) 139ece92f85SJason Jin #define LOG_inpw(port) PM_inpw(port) 140ece92f85SJason Jin #define LOG_inpd(port) PM_inpd(port) 141ece92f85SJason Jin #define LOG_outpb(port,val) PM_outpb(port,val) 142ece92f85SJason Jin #define LOG_outpw(port,val) PM_outpw(port,val) 143ece92f85SJason Jin #define LOG_outpd(port,val) PM_outpd(port,val) 144ece92f85SJason Jin 145ece92f85SJason Jin /*-------------------------- Function Prototypes --------------------------*/ 146ece92f85SJason Jin 147ece92f85SJason Jin /* bios.c */ 148ece92f85SJason Jin 149ece92f85SJason Jin void _BE_bios_init(u32 * intrTab); 150ece92f85SJason Jin void _BE_setup_funcs(void); 151ece92f85SJason Jin 152ece92f85SJason Jin /* besys.c */ 153ece92f85SJason Jin #define DEBUG_IO() (M.x86.debug & DEBUG_IO_TRACE_F) 154ece92f85SJason Jin 155ece92f85SJason Jin u8 X86API BE_rdb(u32 addr); 156ece92f85SJason Jin u16 X86API BE_rdw(u32 addr); 157ece92f85SJason Jin u32 X86API BE_rdl(u32 addr); 158ece92f85SJason Jin void X86API BE_wrb(u32 addr, u8 val); 159ece92f85SJason Jin void X86API BE_wrw(u32 addr, u16 val); 160ece92f85SJason Jin void X86API BE_wrl(u32 addr, u32 val); 161ece92f85SJason Jin 162ece92f85SJason Jin u8 X86API BE_inb(X86EMU_pioAddr port); 163ece92f85SJason Jin u16 X86API BE_inw(X86EMU_pioAddr port); 164ece92f85SJason Jin u32 X86API BE_inl(X86EMU_pioAddr port); 165ece92f85SJason Jin void X86API BE_outb(X86EMU_pioAddr port, u8 val); 166ece92f85SJason Jin void X86API BE_outw(X86EMU_pioAddr port, u16 val); 167ece92f85SJason Jin void X86API BE_outl(X86EMU_pioAddr port, u32 val); 168ece92f85SJason Jin #endif 169ece92f85SJason Jin /* __BIOSEMUI_H */ 170