--- trunk/src/include/devices.h 2007/10/08 16:18:51 14 +++ trunk/src/include/devices.h 2007/10/08 16:19:56 24 @@ -2,7 +2,7 @@ #define DEVICES_H /* - * Copyright (C) 2003-2005 Anders Gavare. All rights reserved. + * Copyright (C) 2003-2006 Anders Gavare. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * - * $Id: devices.h,v 1.184 2005/10/03 01:07:48 debug Exp $ + * $Id: devices.h,v 1.212 2006/06/16 18:31:26 debug Exp $ * * Memory mapped devices. * @@ -76,6 +76,11 @@ int dev_dec_ioasic_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); struct dec_ioasic_data *dev_dec_ioasic_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr, int rackmount_flag); +/* dev_algor.c: */ +struct algor_data { + uint64_t base_addr; +}; + /* dev_asc.c: */ #define DEV_ASC_DEC_LENGTH 0x40000 #define DEV_ASC_PICA_LENGTH 0x1000 @@ -105,6 +110,16 @@ int dev_au1x00_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); struct au1x00_ic_data *dev_au1x00_init(struct machine *machine, struct memory *mem); +/* dev_bebox.c: */ +struct bebox_data { + /* The 5 motherboard registers: */ + uint32_t cpu0_int_mask; + uint32_t cpu1_int_mask; + uint32_t int_status; + uint32_t xpi; + uint32_t resets; +}; + /* dev_bt431.c: */ #define DEV_BT431_LENGTH 0x20 #define DEV_BT431_NREGS 0x800 /* ? */ @@ -133,13 +148,10 @@ int color_fb_flag, int irq_nr, int type); /* dev_cons.c: */ -#define DEV_CONS_ADDRESS 0x0000000010000000 -#define DEV_CONS_LENGTH 0x0000000000000020 -#define DEV_CONS_PUTGETCHAR 0x0000 -#define DEV_CONS_HALT 0x0010 struct cons_data { int console_handle; int irq_nr; + int in_use; }; /* dev_colorplanemask.c: */ @@ -150,6 +162,14 @@ void dev_colorplanemask_init(struct memory *mem, uint64_t baseaddr, unsigned char *color_plane_mask); +/* dev_cpc700.c: */ +struct cpc700_data { + struct pci_data *pci_data; + uint32_t sr; /* Status register (interrupt) */ + uint32_t er; /* Enable register */ +}; +struct cpc700_data *dev_cpc700_init(struct machine *, struct memory *); + /* dev_dc7085.c: */ #define DEV_DC7085_LENGTH 0x0000000000000080 /* see dc7085.h for more info */ @@ -177,24 +197,23 @@ int dev_decxmi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_decxmi_init(struct memory *mem, uint64_t baseaddr); -/* dev_disk.c: */ -#define DEV_DISK_ADDRESS 0x13000000 - -/* dev_ether.c: */ -#define DEV_ETHER_ADDRESS 0x14000000 -#define DEV_ETHER_LENGTH 0x8000 +/* dev_eagle.c: */ +struct pci_data *dev_eagle_init(struct machine *machine, struct memory *mem, + int irqbase, int pciirq); /* dev_fb.c: */ -#define DEV_FB_ADDRESS 0x12000000 /* Default for testmips */ #define DEV_FB_LENGTH 0x3c0000 /* 3c0000 to not colide with */ /* turbochannel rom, */ /* otherwise size = 4MB */ +/* Type: */ #define VFB_GENERIC 0 -#define VFB_HPCMIPS 1 +#define VFB_HPC 1 #define VFB_DEC_VFB01 2 #define VFB_DEC_VFB02 3 #define VFB_DEC_MAXINE 4 #define VFB_PLAYSTATION2 5 +/* Extra flags: */ +#define VFB_REVERSE_START 0x10000 struct vfb_data { int vfb_type; @@ -204,7 +223,7 @@ int ysize; int bit_depth; int color32k; /* hack for 16-bit HPCmips */ - int psp_15bit; /* plastation portable hack */ + int psp_15bit; /* playstation portable hack */ unsigned char color_plane_mask; @@ -221,6 +240,8 @@ /* RGB palette for <= 8 bit modes: (r,g,b bytes for each) */ unsigned char rgb_palette[256 * 3]; + void (*redraw_func)(struct vfb_data *, int, int); + /* These should always be in sync: */ unsigned char *framebuffer; struct fb_window *fb_window; @@ -254,6 +275,8 @@ uint32_t timer_load[N_FOOTBRIDGE_TIMERS]; uint32_t timer_value[N_FOOTBRIDGE_TIMERS]; uint32_t timer_control[N_FOOTBRIDGE_TIMERS]; + int timer_being_read; + int timer_poll_mode; uint32_t irq_status; uint32_t irq_enable; @@ -262,6 +285,17 @@ uint32_t fiq_enable; }; +/* dev_gc.c: */ +struct gc_data { + int reassert_irq; + uint32_t status_hi; + uint32_t status_lo; + uint32_t enable_hi; + uint32_t enable_lo; +}; +struct gc_data *dev_gc_init(struct machine *, struct memory *, uint64_t addr, + int reassert_irq); + /* dev_gt.c: */ #define DEV_GT_LENGTH 0x1000 int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, @@ -269,6 +303,20 @@ struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int pciirq, int type); +/* dev_i80321.c: */ +struct i80321_data { + /* Interrupt Controller */ + int reassert_irq; + uint32_t status; + uint32_t enable; + + uint32_t pci_addr; + struct pci_data *pci_bus; + + /* Memory Controller: */ + uint32_t mcu_reg[0x100 / sizeof(uint32_t)]; +}; + /* dev_jazz.c: */ #define DEV_JAZZ_LENGTH 0x280 struct jazz_data { @@ -322,7 +370,7 @@ /* dev_kn02.c: */ struct kn02_csr { uint8_t csr[sizeof(uint32_t)]; - uint8_t filler[4096 - sizeof(uint32_t)]; /* for bintrans mapping */ + uint8_t filler[4096 - sizeof(uint32_t)]; /* for dyntrans mapping */ }; int dev_kn02_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); struct kn02_csr *dev_kn02_init(struct cpu *cpu, struct memory *mem, @@ -374,6 +422,9 @@ #define MC146818_ARC_NEC 2 #define MC146818_ARC_JAZZ 3 #define MC146818_SGI 4 +#define MC146818_CATS 5 +#define MC146818_ALGOR 6 +#define MC146818_PMPPC 7 /* see mc146818reg.h for more info */ void dev_mc146818_tick(struct cpu *cpu, void *); int dev_mc146818_access(struct cpu *cpu, struct memory *mem, @@ -435,6 +486,11 @@ int dev_pmagja_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_pmagja_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr); +/* dev_prep.c: */ +struct prep_data { + uint32_t int_status; +}; + /* dev_px.c: */ struct px_data { struct memory *fb_mem; @@ -455,30 +511,43 @@ #define DEV_PX_TYPE_PXGPLUS 2 #define DEV_PX_TYPE_PXGPLUSTURBO 3 #define DEV_PX_LENGTH 0x3c0000 -int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int px_type, int irq_nr); +int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, + int px_type, int irq_nr); /* dev_ram.c: */ -#define DEV_RAM_RAM 0 -#define DEV_RAM_MIRROR 1 -int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_ram_init(struct memory *mem, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddr); +#define DEV_RAM_RAM 0 +#define DEV_RAM_MIRROR 1 +#define DEV_RAM_MIGHT_POINT_TO_DEVICES 0x10 +int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +void dev_ram_init(struct machine *machine, uint64_t baseaddr, uint64_t length, + int mode, uint64_t otheraddr); /* dev_scc.c: */ #define DEV_SCC_LENGTH 0x1000 -int dev_scc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -int dev_scc_dma_func(struct cpu *cpu, void *extra, uint64_t addr, size_t dma_len, int tx); -void *dev_scc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, int scc_nr, int addrmul); +int dev_scc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +int dev_scc_dma_func(struct cpu *cpu, void *extra, uint64_t addr, + size_t dma_len, int tx); +void *dev_scc_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, int irq_nr, int use_fb, int scc_nr, int addrmul); /* dev_sfb.c: */ #define DEV_SFB_LENGTH 0x400000 -int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_sfb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data); +int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +void dev_sfb_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, struct vfb_data *vfb_data); /* dev_sgi_gbe.c: */ #define DEV_SGI_GBE_LENGTH 0x1000000 -int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_sgi_gbe_init(struct machine *machine, struct memory *mem, uint64_t baseaddr); +int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, + void *); +void dev_sgi_gbe_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr); /* dev_sgi_ip20.c: */ #define DEV_SGI_IP20_LENGTH 0x40 @@ -548,7 +617,7 @@ struct mace_data *dev_mace_init(struct memory *mem, uint64_t baseaddr, int irqnr); #define DEV_MACEPCI_LENGTH 0x1000 int dev_macepci_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct pci_data *dev_macepci_init(struct memory *mem, uint64_t baseaddr, int pciirq); +struct pci_data *dev_macepci_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int pciirq); #define DEV_SGI_MEC_LENGTH 0x1000 int dev_sgi_mec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_sgi_mec_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, unsigned char *macaddr); @@ -579,6 +648,17 @@ int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name, int irq); +/* dev_uninorth.c: */ +struct pci_data *dev_uninorth_init(struct machine *machine, struct memory *mem, + uint64_t addr, int irqbase, int pciirq); + +/* dev_v3.c: */ +struct v3_data { + struct pci_data *pci_data; + uint16_t lb_map0; +}; +struct v3_data *dev_v3_init(struct machine *, struct memory *); + /* dev_vga.c: */ int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); @@ -591,7 +671,7 @@ int cpumodel; int kiu_console_handle; - int kiu_offset; + uint32_t kiu_offset; int kiu_irq_nr; int kiu_int_assert; int d0; @@ -624,13 +704,6 @@ int dev_wdsc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_wdsc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int controller_nr, int irq_nr); -/* dev_zs.c: */ -#define DEV_ZS_LENGTH 0x10 -int dev_zs_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, - unsigned char *data, size_t len, int writeflag, void *); -int dev_zs_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, - int irq_nr, int addrmult, char *name); - /* lk201.c: */ struct lk201_data { int use_fb;