diff options
Diffstat (limited to 'qemu/roms/openhackware/src/bios.h')
-rw-r--r-- | qemu/roms/openhackware/src/bios.h | 588 |
1 files changed, 0 insertions, 588 deletions
diff --git a/qemu/roms/openhackware/src/bios.h b/qemu/roms/openhackware/src/bios.h deleted file mode 100644 index 83d9af47c..000000000 --- a/qemu/roms/openhackware/src/bios.h +++ /dev/null @@ -1,588 +0,0 @@ -/* - * <bios.h> - * - * header for Open Hack'Ware - * - * Copyright (c) 2004-2005 Jocelyn Mayer - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License V2 - * as published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#if !defined (__BIOS_H__) -#define __BIOS_H__ - -#define USE_OPENFIRMWARE -//#define DEBUG_BIOS 1 - -#define BIOS_VERSION "0.4.1" - -#define DSISR 18 -#define DAR 19 -#define SRR0 26 -#define SRR1 27 - -#define _tostring(s) #s -#define stringify(s) _tostring(s) - -#if !defined (ASSEMBLY_CODE) - -#ifdef DEBUG_BIOS -#define DPRINTF(fmt, args...) do { dprintf(fmt , ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do { } while (0) -#endif -#define ERROR(fmt, args...) do { printf("ERROR: " fmt , ##args); } while (0) -#define MSG(fmt, args...) do { printf(fmt , ##args); } while (0) - -#define offsetof(_struct, field) \ -({ \ - typeof(_struct) __tmp_struct; \ - int __off; \ - __off = (char *)(&__tmp_struct.field) - (char *)(&__tmp_struct); \ - __off; \ -}) - -#define unused __attribute__ (( unused)) - -/* Useful macro in C code */ -#define MTSPR(num, value) \ -__asm__ __volatile__ ("mtspr " stringify(num) ", %0" :: "r"(value)); - -/* Architectures */ -enum { - ARCH_PREP = 0, - ARCH_CHRP, - ARCH_MAC99, - ARCH_POP, - ARCH_HEATHROW, -}; - -/* Hardware definition(s) */ -extern uint32_t isa_io_base; -#define ISA_IO_BASE 0x80000000 -extern int arch; - -/*****************************************************************************/ -/* From start.S : BIOS start code and asm helpers */ -void transfer_handler (void *residual, void *load_addr, - void *OF_entry, void *bootinfos, - void *cmdline, void *not_used, - void *nip, void *stack_base); -void bug (void); - -/* PPC helpers */ -uint32_t mfmsr (void); -void mtmsr (uint32_t msr); -uint32_t mfpvr (void); -void mftb (uint32_t *tb); -void MMU_on (void); -void MMU_off (void); -/* IO helpers */ -uint32_t inb (uint16_t port); -void outb (uint16_t port, uint32_t val); -uint32_t inw (uint16_t port); -void outw (uint16_t port, uint32_t val); -uint32_t inl (uint16_t port); -void outl (uint16_t port, uint32_t val); -void eieio (void); -/* Misc helpers */ -uint16_t ldswap16 (uint16_t *addr); -void stswap16 (void *addr, uint16_t val); -uint32_t ldswap32 (uint32_t *addr); -void stswap32 (void *addr, uint32_t val); -void mul64 (uint32_t *ret, uint32_t a, uint32_t b); -void add64 (uint32_t *ret, uint32_t *a, uint32_t *b); - -typedef struct jmp_buf { - uint32_t gpr[32]; - uint32_t lr; - uint32_t ctr; - uint32_t xer; - uint32_t ccr; -} jmp_buf; -int setjmp (jmp_buf env); -void longjmp (jmp_buf env); - -/*****************************************************************************/ -/* PCI BIOS */ -typedef struct pci_common_t pci_common_t; -typedef struct pci_host_t pci_host_t; -typedef struct pci_device_t pci_device_t; -typedef struct pci_bridge_t pci_bridge_t; -typedef struct pci_ops_t pci_ops_t; -typedef union pci_u_t pci_u_t; - -typedef struct pci_dev_t pci_dev_t; -struct pci_dev_t { - uint16_t vendor; - uint16_t product; - const unsigned char *type; - const unsigned char *name; - const unsigned char *model; - const unsigned char *compat; - int acells; - int scells; - int icells; - int (*config_cb)(pci_device_t *device); - const void *private; -}; - -pci_host_t *pci_init (void); -void pci_get_mem_range (pci_host_t *host, uint32_t *start, uint32_t *len); - -/*****************************************************************************/ -/* nvram.c : NVRAM management routines */ -typedef struct nvram_t nvram_t; -extern nvram_t *nvram; - -uint8_t NVRAM_read (nvram_t *nvram, uint32_t addr); -void NVRAM_write (nvram_t *nvram, uint32_t addr, uint8_t value); -uint16_t NVRAM_get_size (nvram_t *nvram); -int NVRAM_format (nvram_t *nvram); -nvram_t *NVRAM_get_config (uint32_t *RAM_size, int *boot_device, - void **boot_image, uint32_t *boot_size, - void **cmdline, uint32_t *cmdline_size, - void **ramdisk, uint32_t *ramdisk_size); - -/*****************************************************************************/ -/* bloc.c : bloc devices management */ -typedef struct pos_t { - uint32_t bloc; - uint32_t offset; -} pos_t; - -typedef struct bloc_device_t bloc_device_t; -typedef struct part_t part_t; -typedef struct fs_t fs_t; - -bloc_device_t *bd_open (int device); -int bd_seek (bloc_device_t *bd, uint32_t bloc, uint32_t pos); -int bd_read (bloc_device_t *bd, void *buffer, int len); -int bd_write (bloc_device_t *bd, const void *buffer, int len); -#define _IOCTL(a, b) (((a) << 16) | (b)) -#define MEM_SET_ADDR _IOCTL('M', 0x00) -#define MEM_SET_SIZE _IOCTL('M', 0x01) -int bd_ioctl (bloc_device_t *bd, int func, void *args); -uint32_t bd_seclen (bloc_device_t *bd); -void bd_close (bloc_device_t *bd); -void bd_reset_all(void); -uint32_t bd_seclen (bloc_device_t *bd); -uint32_t bd_maxbloc (bloc_device_t *bd); -void bd_sect2CHS (bloc_device_t *bd, uint32_t secnum, - int *cyl, int *head, int *sect); -uint32_t bd_CHS2sect (bloc_device_t *bd, - int cyl, int head, int sect); -part_t *bd_probe (int boot_device); -bloc_device_t *bd_get (int device); -void bd_put (bloc_device_t *bd); -void bd_set_boot_part (bloc_device_t *bd, part_t *partition, int partnum); -part_t **_bd_parts (bloc_device_t *bd); - -void ide_pci_pc_register (uint32_t io_base0, uint32_t io_base1, - uint32_t io_base2, uint32_t io_base3, - void *OF_private0, void *OF_private1); -void ide_pci_pmac_register (uint32_t io_base0, uint32_t io_base1, - void *OF_private); - -/*****************************************************************************/ -/* part.c : partitions management */ -enum part_flags_t { - PART_TYPE_RAW = 0x0000, - PART_TYPE_PREP = 0x0001, - PART_TYPE_APPLE = 0x0002, - PART_TYPE_ISO9660 = 0x0004, - PART_FLAG_DUMMY = 0x0010, - PART_FLAG_DRIVER = 0x0020, - PART_FLAG_PATCH = 0x0040, - PART_FLAG_FS = 0x0080, - PART_FLAG_BOOT = 0x0100, -}; - -enum { - PART_PREP = 0x01, - PART_CHRP = 0x02, -}; - -part_t *part_open (bloc_device_t *bd, - uint32_t start, uint32_t size, uint32_t spb); -int part_seek (part_t *part, uint32_t bloc, uint32_t pos); -int part_read (part_t *part, void *buffer, int len); -int part_write (part_t *part, const void *buffer, int len); -void part_close (part_t *part); -uint32_t part_blocsize (part_t *part); -uint32_t part_flags (part_t *part); -uint32_t part_size (part_t *part); -fs_t *part_fs (part_t *part); - -part_t *part_get (bloc_device_t *bd, int partnum); -part_t *part_probe (bloc_device_t *bd, int set_raw); -int part_set_boot_file (part_t *part, uint32_t start, uint32_t offset, - uint32_t size); - -/*****************************************************************************/ -/* fs.c : file system management */ -typedef struct dir_t dir_t; -typedef struct dirent_t dirent_t; -typedef struct inode_t inode_t; - -struct dirent_t { - dir_t *dir; - inode_t *inode; - const unsigned char *dname; -}; - -enum { - INODE_TYPE_UNKNOWN = 0x00FF, - INODE_TYPE_DIR = 0x0000, - INODE_TYPE_FILE = 0x0001, - INODE_TYPE_OTHER = 0x0002, - INODE_TYPE_MASK = 0x00FF, - INODE_FLAG_EXEC = 0x0100, - INODE_FLAG_BOOT = 0x0200, - INODE_FLAG_MASK = 0xFF00, -}; - -/* probe a filesystem from a partition */ -fs_t *fs_probe (part_t *part, int set_raw); -part_t *fs_part (fs_t *fs); -/* Recurse thru directories */ -dir_t *fs_opendir (fs_t *fs, const unsigned char *name); -dirent_t *fs_readdir (dir_t *dir); -unsigned char *fs_get_path (dirent_t *dirent); -void fs_closedir (dir_t *dir); -/* Play with files */ -inode_t *fs_open (fs_t *fs, const unsigned char *name); -int fs_seek (inode_t *inode, uint32_t bloc, uint32_t pos); -int fs_read (inode_t *inode, void *buffer, int len); -int fs_write (inode_t *inode, const void *buffer, unused int len); -void fs_close (inode_t *inode); -uint32_t fs_get_type (fs_t *fs); -uint32_t fs_inode_get_type (inode_t *inode); -uint32_t fs_inode_get_flags (inode_t *inode); -part_t *fs_inode_get_part (inode_t *inode); - -/* Bootfile */ -unsigned char *fs_get_boot_dirname (fs_t *fs); -inode_t *fs_get_bootfile (fs_t *fs); -int fs_raw_set_bootfile (part_t *part, - uint32_t start_bloc, uint32_t start_offset, - uint32_t size_bloc, uint32_t size_offset); - -/*****************************************************************************/ -/* file.c : file management */ -#define DEFAULT_LOAD_DEST 0x00100000 - -uint32_t file_seek (inode_t *file, uint32_t pos); - -/* Executable files loader */ -int bootfile_load (void **dest, void **entry, void **end, - part_t *part, int type, const unsigned char *fname, - uint32_t offset); - -/*****************************************************************************/ -/* char.c : char devices */ -typedef struct chardev_t chardev_t; -typedef struct cops_t cops_t; - -struct cops_t { - int (*open)(void *private); - int (*close)(void *private); - int (*read)(void *private); - int (*write)(void *private, int c); - /* Won't implement seek for now */ -}; - -enum { - CHARDEV_KBD = 0, - CHARDEV_MOUSE, - CHARDEV_SERIAL, - CHARDEV_DISPLAY, - CHARDEV_LAST, -}; - -int chardev_register (int type, cops_t *ops, void *private); -int chardev_open (chardev_t *dev); -int chardev_close (chardev_t *dev); -int chardev_read (chardev_t *dev, void *buffer, int maxlen); -int chardev_write (chardev_t *dev, const void *buffer, int maxlen); -int chardev_type (chardev_t *dev); - -/* Console driver */ -int console_open (void); -int console_read (void *buffer, int maxlen); -int console_write (const void *buffer, int len); -void console_close (void); - -/* PC serial port */ -#define SERIAL_OUT_PORT (0x03F8) -int pc_serial_register (uint16_t base); - -/* CUDA host */ -typedef struct cuda_t cuda_t; -cuda_t *cuda_init (uint32_t base); -void cuda_reset (cuda_t *cuda); - -/*****************************************************************************/ -/* vga.c : VGA console */ -extern unsigned long vga_fb_phys_addr; -extern int vga_fb_width; -extern int vga_fb_height; -extern int vga_fb_linesize; -extern int vga_fb_bpp; -extern int vga_fb_depth; -void vga_prep_init(void); -void vga_set_address (uint32_t address); -void vga_set_mode(int width, int height, int depth); -void vga_set_palette(int i, unsigned int rgba); -#define RGBA(r, g, b, a) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)) -#define RGB(r, g, b) RGBA(r, g, b, 0xff) -unsigned int vga_get_color(unsigned int rgba); - -void vga_draw_buf (const void *buf, int buf_linesize, - int posx, int posy, int width, int height); -void vga_fill_rect (int posx, int posy, int width, int height, uint32_t color); -void vga_bitblt(int xs, int ys, int xd, int yd, int w, int h); -void vga_check_mode(int width, int height, int depth); - -/* text primitives */ -void vga_text_set_fgcol(unsigned int rgba); -void vga_text_set_bgcol(unsigned int rgba); -void vga_putcharxy(int x, int y, int ch, - unsigned int fgcol, unsigned int bgcol); -void vga_putchar(int ch); -void vga_puts(const char *s); - -/*****************************************************************************/ -/* bootinfos.c : build structures needed by kernels to boot */ -void prepare_bootinfos (void *p, uint32_t memsize, - void *cmdline, void *initrd, uint32_t initrd_size); -void residual_build (void *p, uint32_t memsize, - uint32_t load_base, uint32_t load_size, - uint32_t last_alloc); - -/*****************************************************************************/ -/* of.c : Open-firmware emulation */ -#define OF_NAMELEN_MAX 1024 -#define OF_PROPLEN_MAX 256 - -int OF_init (void); -int OF_register_mb (const unsigned char *model, const unsigned char **compats); -int OF_register_cpu (const unsigned char *name, int num, uint32_t pvr, - uint32_t min_freq, uint32_t max_freq, uint32_t bus_freq, - uint32_t tb_freq, uint32_t reset_io); -#if 0 -int OF_register_translations (int nb, OF_transl_t *translations); -#endif -uint32_t OF_claim_virt (uint32_t virt, uint32_t size, int *range); -int OF_register_memory (uint32_t memsize, uint32_t bios_size); -int OF_register_bootargs (const unsigned char *bootargs); -void *OF_register_pci_host (pci_dev_t *dev, uint16_t rev, uint32_t ccode, - uint32_t cfg_base, uint32_t cfg_len, - uint32_t mem_base, uint32_t mem_len, - uint32_t io_base, uint32_t io_len, - uint32_t rbase, uint32_t rlen, - uint16_t min_grant, uint16_t max_latency); -void *OF_register_pci_bridge (void *parent, pci_dev_t *dev, - uint32_t cfg_base, uint32_t cfg_len, - uint8_t devfn, uint8_t rev, uint32_t ccode, - uint16_t min_grant, uint16_t max_latency); -void *OF_register_pci_device (void *parent, pci_dev_t *dev, - uint8_t devfn, uint8_t rev, uint32_t ccode, - uint16_t min_grant, uint16_t max_latency); -void OF_finalize_pci_host (void *dev, int first_bus, int nb_busses); -void OF_finalize_pci_device (void *dev, uint8_t bus, uint8_t devfn, - uint32_t *regions, uint32_t *sizes, - int irq_line); -void OF_finalize_pci_macio (void *dev, uint32_t base_address, uint32_t size, - void *private_data); -void OF_finalize_pci_ide (void *dev, - uint32_t io_base0, uint32_t io_base1, - uint32_t io_base2, uint32_t io_base3); -int OF_register_bus (const unsigned char *name, uint32_t address, - const unsigned char *type); -int OF_register_serial (const unsigned char *bus, const unsigned char *name, - uint32_t io_base, int irq); -int OF_register_stdio (const unsigned char *dev_in, - const unsigned char *dev_out); -void OF_vga_register (const unsigned char *name, unused uint32_t address, - int width, int height, int depth, - unsigned long vga_bios_addr, - unsigned long vga_bios_size); -void *OF_blockdev_register (void *parent, void *private, - const unsigned char *type, - const unsigned char *name, int devnum, - const char *alias); -void OF_blockdev_set_boot_device (void *disk, int partnum, - const unsigned char *file); - -int OF_entry (void *p); -int OF_client_entry (void *p); -void RTAS_init (void); - -/*****************************************************************************/ -/* main.c : main BIOS code */ -/* Memory management */ -/* Memory areas */ -extern uint32_t _data_start, _data_end; -extern uint32_t _OF_vars_start, _OF_vars_end; -extern uint32_t _sdata_start, _sdata_end; -extern uint32_t _ro_start, _ro_end; -extern uint32_t _RTAS_start, _RTAS_end; -extern uint32_t _RTAS_data_start, _RTAS_data_end; -extern uint32_t _bss_start, _bss_end; -extern uint32_t _ram_start; -extern const unsigned char *BIOS_str; -extern const unsigned char *copyright; -void *mem_align (int align); -void freep (void *p); - -/* Endian-safe memory read/write */ -static inline void put_be64 (void *addr, uint64_t l) -{ - *(uint64_t *)addr = l; -} - -static inline uint64_t get_be64 (void *addr) -{ - return *(uint64_t *)addr; -} - -static inline void put_le64 (void *addr, uint64_t l) -{ - uint32_t *p; - - p = addr; - stswap32(p, l); - stswap32(p + 1, l >> 32); -} - -static inline uint64_t get_le64 (void *addr) -{ - uint64_t val; - uint32_t *p; - - p = addr; - val = ldswap32(p); - val |= (uint64_t)ldswap32(p + 1) << 32; - - return val; -} - -static inline void put_be32 (void *addr, uint32_t l) -{ - *(uint32_t *)addr = l; -} - -static inline uint32_t get_be32 (void *addr) -{ - return *(uint32_t *)addr; -} - -static inline void put_le32 (void *addr, uint32_t l) -{ - stswap32(addr, l); -} - -static inline uint32_t get_le32 (void *addr) -{ - return ldswap32(addr); -} - -static inline void put_be16 (void *addr, uint16_t l) -{ - *(uint16_t *)addr = l; -} - -static inline uint16_t get_be16 (void *addr) -{ - return *(uint16_t *)addr; -} - -static inline void put_le16 (void *addr, uint16_t l) -{ - stswap16(addr, l); -} - -static inline uint16_t get_le16 (void *addr) -{ - return ldswap16(addr); -} - -/* String functions */ -long strtol (const unsigned char *str, unsigned char **end, int base); - -int write_buf (const unsigned char *buf, int len); - -/* Misc */ -void usleep (uint32_t usec); -void sleep (int sec); -uint32_t crc32 (uint32_t crc, const uint8_t *p, int len); -void set_loadinfo (void *load_base, uint32_t size); -void set_check (int do_it); -void check_location (const void *buf, const char *func, const char *name); - -static inline void pokeb (void *location, uint8_t val) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - *((uint8_t *)location) = val; -} - -static inline uint8_t peekb (void *location) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - return *((uint8_t *)location); -} - -static inline void pokew (void *location, uint16_t val) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - *((uint8_t *)location) = val; -} - -static inline uint16_t peekw (void *location) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - return *((uint16_t *)location); -} - -static inline void pokel (void *location, uint32_t val) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - *((uint32_t *)location) = val; -} - -static inline uint32_t peekl (void *location) -{ -#ifdef DEBUG_BIOS - check_location(location, __func__, "location"); -#endif - return *((uint32_t *)location); -} - -/* Console */ -int cs_write (const unsigned char *buf, int len); - -#endif /* !defined (ASSEMBLY_CODE) */ - - -#endif /* !defined (__BIOS_H__) */ |