--- trunk/src/include/devices.h 2007/10/08 16:18:00 4 +++ trunk/src/include/devices.h 2007/10/08 16:19:01 16 @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * - * $Id: devices.h,v 1.162 2005/04/11 20:44:40 debug Exp $ + * $Id: devices.h,v 1.185 2005/10/08 22:54:04 debug Exp $ * * Memory mapped devices. * @@ -48,6 +48,20 @@ #include #endif */ +/* dev_8259.c: */ +struct pic8259_data { + int irq_nr; /* if connected to another 8259 */ + + int irq_base; + int current_command; + + int init_state; + + int priority_reg; + uint8_t irr; /* interrupt request register */ + uint8_t isr; /* interrupt in-service register */ + uint8_t ier; /* interrupt enable register */ +}; /* dev_dec_ioasic.c: */ #define DEV_DEC_IOASIC_LENGTH 0x80100 @@ -123,11 +137,10 @@ #define DEV_CONS_LENGTH 0x0000000000000020 #define DEV_CONS_PUTGETCHAR 0x0000 #define DEV_CONS_HALT 0x0010 -int dev_cons_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, - int writeflag, void *); -int dev_cons_init(struct machine *machine, struct memory *mem, - uint64_t baseaddr, char *name, int irq_nr); +struct cons_data { + int console_handle; + int irq_nr; +}; /* dev_colorplanemask.c: */ #define DEV_COLORPLANEMASK_LENGTH 0x0000000000000010 @@ -164,14 +177,24 @@ 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_fb.c: */ -#define DEV_FB_LENGTH 0x3c0000 /* 3c0000 to not colide with turbochannel rom, otherwise size = (4*1024*1024) */ -#define VFB_GENERIC 0 -#define VFB_HPCMIPS 1 -#define VFB_DEC_VFB01 2 -#define VFB_DEC_VFB02 3 -#define VFB_DEC_MAXINE 4 -#define VFB_PLAYSTATION2 5 +#define DEV_FB_ADDRESS 0x12000000 /* Default for testmips */ +#define DEV_FB_LENGTH 0x3c0000 /* 3c0000 to not colide with */ + /* turbochannel rom, */ + /* otherwise size = 4MB */ +#define VFB_GENERIC 0 +#define VFB_HPCMIPS 1 +#define VFB_DEC_VFB01 2 +#define VFB_DEC_VFB02 3 +#define VFB_DEC_MAXINE 4 +#define VFB_PLAYSTATION2 5 struct vfb_data { int vfb_type; @@ -180,7 +203,8 @@ int xsize; int ysize; int bit_depth; - int color32k; + int color32k; /* hack for 16-bit HPCmips */ + int psp_15bit; /* plastation portable hack */ unsigned char color_plane_mask; @@ -206,20 +230,44 @@ #define VFB_MFB_VRAM 0x200000 #define VFB_CFB_BT459 0x200000 void set_grayscale_palette(struct vfb_data *d, int ncolors); +void dev_fb_resize(struct vfb_data *d, int new_xsize, int new_ysize); void dev_fb_setcursor(struct vfb_data *d, int cursor_x, int cursor_y, int on, int cursor_xsize, int cursor_ysize); void framebuffer_blockcopyfill(struct vfb_data *d, int fillflag, int fill_r, int fill_g, int fill_b, int x1, int y1, int x2, int y2, int from_x, int from_y); void dev_fb_tick(struct cpu *, void *); -int dev_fb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct vfb_data *dev_fb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int vfb_type, - int visible_xsize, int visible_ysize, int xsize, int ysize, int bit_depth, char *name, int logo); +int dev_fb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +struct vfb_data *dev_fb_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, int vfb_type, int visible_xsize, int visible_ysize, + int xsize, int ysize, int bit_depth, char *name); + +/* dev_footbridge: */ +#define N_FOOTBRIDGE_TIMERS 4 +struct footbridge_data { + struct pci_data *pcibus; + + int console_handle; + + int timer_tick_countdown[N_FOOTBRIDGE_TIMERS]; + uint32_t timer_load[N_FOOTBRIDGE_TIMERS]; + uint32_t timer_value[N_FOOTBRIDGE_TIMERS]; + uint32_t timer_control[N_FOOTBRIDGE_TIMERS]; + + uint32_t irq_status; + uint32_t irq_enable; + + uint32_t fiq_status; + uint32_t fiq_enable; +}; /* dev_gt.c: */ -#define DEV_GT_LENGTH 0x0000000000001000 -int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int pciirq); +#define DEV_GT_LENGTH 0x1000 +int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, int irq_nr, int pciirq, int type); /* dev_jazz.c: */ #define DEV_JAZZ_LENGTH 0x280 @@ -310,14 +358,14 @@ void dev_m700_fb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t baseaddr2); -/* dev_ns16550.c: */ -#define DEV_NS16550_LENGTH 0x0000000000000008 -/* see comreg.h and ns16550reg.h for more info */ -int dev_ns16550_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, - int writeflag, void *); -int dev_ns16550_init(struct machine *machine, struct memory *mem, - uint64_t baseaddr, int irq_nr, int addrmult, int in_use, char *name); +/* dev_malta.c: */ +struct malta_data { + uint8_t assert_lo; + uint8_t assert_hi; + uint8_t disable_lo; + uint8_t disable_hi; + int poll_mode; +}; /* dev_mc146818.c: */ #define DEV_MC146818_LENGTH 0x0000000000000100 @@ -326,6 +374,7 @@ #define MC146818_ARC_NEC 2 #define MC146818_ARC_JAZZ 3 #define MC146818_SGI 4 +#define MC146818_CATS 5 /* see mc146818reg.h for more info */ void dev_mc146818_tick(struct cpu *cpu, void *); int dev_mc146818_access(struct cpu *cpu, struct memory *mem, @@ -344,7 +393,7 @@ int writeflag, void *); int dev_pckbc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int type, int keyboard_irqnr, int mouse_irqnr, - int in_use); + int in_use, int pc_style_flag); /* dev_pmppc.c: */ int dev_pmppc_board_access(struct cpu *cpu, struct memory *mem, @@ -524,15 +573,18 @@ /* dev_turbochannel.c: */ #define DEV_TURBOCHANNEL_LEN 0x0470 -int dev_turbochannel_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_turbochannel_init(struct machine *machine, struct memory *mem, int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name, int irq); +int dev_turbochannel_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); +void dev_turbochannel_init(struct machine *machine, struct memory *mem, + int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name, + int irq); /* 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 *); void dev_vga_init(struct machine *machine, struct memory *mem, - uint64_t videomem_base, uint64_t control_base, int max_x, int max_y, - char *name); + uint64_t videomem_base, uint64_t control_base, char *name); /* dev_vr41xx.c: */ #define DEV_VR41XX_LENGTH 0x800 /* TODO? */ @@ -567,11 +619,6 @@ struct vr41xx_data *dev_vr41xx_init(struct machine *machine, struct memory *mem, int cpumodel); -/* dev_wdc.c: */ -#define DEV_WDC_LENGTH 0x8 -int dev_wdc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_wdc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int base_drive); - /* dev_wdsc.c: */ #define DEV_WDSC_NREGS 0x100 /* 8-bit register select */ #define DEV_WDSC_LENGTH 0x10