--- trunk/src/include/devices.h 2007/10/08 16:18:11 6 +++ trunk/src/include/devices.h 2007/10/08 16:21:17 34 @@ -2,7 +2,7 @@ #define DEVICES_H /* - * Copyright (C) 2003-2005 Anders Gavare. All rights reserved. + * Copyright (C) 2003-2007 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,21 +28,34 @@ * SUCH DAMAGE. * * - * $Id: devices.h,v 1.167 2005/05/22 20:05:40 debug Exp $ + * $Id: devices.h,v 1.241 2007/02/10 14:21:10 debug Exp $ * * Memory mapped devices. * - * TODO: Separate into lots of smaller files? That might speed up a compile, - * but I'm not sure that it's a price worth paying. + * NOTE: Many of these devices are legacy devices, that are here for one + * of these two reasons: + * + * A) Devices introduced before the DEVINIT system had to + * be declared somewhere. + * + * B) The way interrupt controllers and such were implemented + * up until release 0.4.3 requires that several parts of + * the program access internal fields of interrupt + * controllers' structs. + * + * Both A and B need to be solved. */ #include #include +#include "interrupt.h" + struct cpu; struct machine; struct memory; struct pci_data; +struct timer; /* #ifdef WITH_X11 #include @@ -50,7 +63,7 @@ /* dev_8259.c: */ struct pic8259_data { - int irq_nr; /* if connected to another 8259 */ + struct interrupt irq; int irq_base; int current_command; @@ -83,40 +96,29 @@ #define DEV_ASC_PICA 2 int dev_asc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, - int irq_nr, void *turbochannel, int mode, + char *irq_path, void *turbochannel, int mode, size_t (*dma_controller)(void *dma_controller_data, unsigned char *data, size_t len, int writeflag), void *dma_controller_data); -/* dev_au1x00.c: */ -struct au1x00_ic_data { - int ic_nr; - uint32_t request0_int; - uint32_t request1_int; - uint32_t config0; - uint32_t config1; - uint32_t config2; - uint32_t source; - uint32_t assign_request; - uint32_t wakeup; - uint32_t mask; -}; - -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_bt431.c: */ #define DEV_BT431_LENGTH 0x20 #define DEV_BT431_NREGS 0x800 /* ? */ -int dev_bt431_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); +int dev_bt431_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); struct vfb_data; -void dev_bt431_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data, int color_fb_flag); +void dev_bt431_init(struct memory *mem, uint64_t baseaddr, + struct vfb_data *vfb_data, int color_fb_flag); /* dev_bt455.c: */ #define DEV_BT455_LENGTH 0x20 -int dev_bt455_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); +int dev_bt455_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); struct vfb_data; -void dev_bt455_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data); +void dev_bt455_init(struct memory *mem, uint64_t baseaddr, + struct vfb_data *vfb_data); /* dev_bt459.c: */ #define DEV_BT459_LENGTH 0x20 @@ -130,18 +132,7 @@ struct vfb_data; void dev_bt459_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t baseaddr_irq, struct vfb_data *vfb_data, - 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 -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); + int color_fb_flag, char *irq_path, int type); /* dev_colorplanemask.c: */ #define DEV_COLORPLANEMASK_LENGTH 0x0000000000000010 @@ -155,21 +146,13 @@ #define DEV_DC7085_LENGTH 0x0000000000000080 /* see dc7085.h for more info */ void dev_dc7085_tick(struct cpu *cpu, void *); -int dev_dc7085_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -int dev_dc7085_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb); +int dev_dc7085_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); +int dev_dc7085_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, char *irq_path, int use_fb); /* dev_dec5800.c: */ -#define DEV_DEC5800_LENGTH 0x1000 /* ? */ -struct dec5800_data { - uint32_t csr; - uint32_t vector_0x50; -}; -int dev_dec5800_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct dec5800_data *dev_dec5800_init(struct machine *machine, struct memory *mem, uint64_t baseaddr); -/* 16 slots, 0x2000 bytes each */ -#define DEV_DECBI_LENGTH 0x20000 -int dev_decbi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_decbi_init(struct memory *mem, uint64_t baseaddr); #define DEV_DECCCA_LENGTH 0x10000 /* ? */ #define DEC_DECCCA_BASEADDR 0x19000000 /* ? I just made this up */ int dev_deccca_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); @@ -179,14 +162,20 @@ void dev_decxmi_init(struct memory *mem, uint64_t baseaddr); /* 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_LENGTH 0x3c0000 /* 3c0000 to not colide with */ + /* turbochannel rom, */ + /* otherwise size = 4MB */ +/* Type: */ +#define VFB_GENERIC 0 +#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 { + struct memory *memory; int vfb_type; int vfb_scaledown; @@ -194,7 +183,8 @@ int xsize; int ysize; int bit_depth; - int color32k; + int color32k; /* hack for 16-bit HPCmips */ + int psp_15bit; /* playstation portable hack */ unsigned char color_plane_mask; @@ -211,6 +201,11 @@ /* RGB palette for <= 8 bit modes: (r,g,b bytes for each) */ unsigned char rgb_palette[256 * 3]; + char *name; + char title[100]; + + void (*redraw_func)(struct vfb_data *, int, int); + /* These should always be in sync: */ unsigned char *framebuffer; struct fb_window *fb_window; @@ -227,54 +222,29 @@ 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_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, char *timer_irq_path, char *isa_irq_path, int type); /* dev_jazz.c: */ -#define DEV_JAZZ_LENGTH 0x280 -struct jazz_data { - struct cpu *cpu; - - /* Jazz stuff: */ - uint32_t int_enable_mask; - uint32_t int_asserted; - - /* ISA stuff: */ - uint32_t isa_int_enable_mask; - uint32_t isa_int_asserted; - - int interval; - int interval_start; - - int jazz_timer_value; - int jazz_timer_current; - - uint64_t dma_translation_table_base; - uint64_t dma_translation_table_limit; - - uint32_t dma0_mode; - uint32_t dma0_enable; - uint32_t dma0_count; - uint32_t dma0_addr; - - uint32_t dma1_mode; - /* same for dma1,2,3 actually (TODO) */ - - int led; -}; size_t dev_jazz_dma_controller(void *dma_controller_data, unsigned char *data, size_t len, int writeflag); /* dev_kn01.c: */ -#define DEV_KN01_CSR_LENGTH 0x0000000000000004 -int dev_kn01_csr_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_kn01_csr_init(struct memory *mem, uint64_t baseaddr, int color_fb); +#define DEV_KN01_LENGTH 4 +int dev_kn01_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); +void dev_kn01_init(struct memory *mem, uint64_t baseaddr, int color_fb); #define DEV_VDAC_LENGTH 0x20 #define DEV_VDAC_MAPWA 0x00 #define DEV_VDAC_MAP 0x04 @@ -283,17 +253,11 @@ #define DEV_VDAC_OVERWA 0x10 #define DEV_VDAC_OVER 0x14 #define DEV_VDAC_OVERRA 0x1c -int dev_vdac_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_vdac_init(struct memory *mem, uint64_t baseaddr, unsigned char *rgb_palette, int color_fb_flag); - -/* dev_kn02.c: */ -struct kn02_csr { - uint8_t csr[sizeof(uint32_t)]; - uint8_t filler[4096 - sizeof(uint32_t)]; /* for bintrans 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, - uint64_t baseaddr); +int dev_vdac_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); +void dev_vdac_init(struct memory *mem, uint64_t baseaddr, + unsigned char *rgb_palette, int color_fb_flag); /* dev_kn220.c: */ #define DEV_DEC5500_IOBOARD_LENGTH 0x100000 @@ -303,11 +267,6 @@ int dev_sgec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr); -/* dev_kn230.c: */ -struct kn230_csr { - uint32_t csr; -}; - /* dev_le.c: */ #define DEV_LE_LENGTH 0x1c0200 int dev_le_access(struct cpu *cpu, struct memory *mem, @@ -315,24 +274,7 @@ int writeflag, void *); void dev_le_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, - int irq_nr, int len); - -/* dev_m700_fb.c: */ -#define DEV_M700_FB_LENGTH 0x10000 /* TODO? */ -int dev_m700_fb_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, - int writeflag, void *); -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); + char *irq_path, int len); /* dev_mc146818.c: */ #define DEV_MC146818_LENGTH 0x0000000000000100 @@ -341,13 +283,16 @@ #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, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); void dev_mc146818_init(struct machine *machine, struct memory *mem, - uint64_t baseaddr, int irq_nr, int access_style, int addrdiv); + uint64_t baseaddr, char *irq_path, int access_style, int addrdiv); /* dev_pckbc.c: */ #define DEV_PCKBC_LENGTH 0x10 @@ -358,63 +303,30 @@ uint64_t relative_addr, unsigned char *data, size_t len, 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 pc_style_flag); - -/* dev_pmppc.c: */ -int dev_pmppc_board_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, - void *); -void dev_pmppc_init(struct memory *mem); - -/* dev_ps2_spd.c: */ -#define DEV_PS2_SPD_LENGTH 0x800 -int dev_ps2_spd_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, - int writeflag, void *); -void dev_ps2_spd_init(struct machine *machine, struct memory *mem, - uint64_t baseaddr); - -/* dev_ps2_stuff.c: */ -#include "ps2_dmacreg.h" -#define N_PS2_DMA_CHANNELS 10 -#define N_PS2_TIMERS 4 -struct ps2_data { - uint32_t timer_count[N_PS2_TIMERS]; - uint32_t timer_comp[N_PS2_TIMERS]; - uint32_t timer_mode[N_PS2_TIMERS]; - uint32_t timer_hold[N_PS2_TIMERS]; /* NOTE: only 0 and 1 are valid */ - - uint64_t dmac_reg[DMAC_REGSIZE / 0x10]; - - uint64_t other_memory_base[N_PS2_DMA_CHANNELS]; - - uint32_t intr; - uint32_t imask; - uint32_t sbus_smflg; -}; -#define DEV_PS2_STUFF_LENGTH 0x10000 -int dev_ps2_stuff_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct ps2_data *dev_ps2_stuff_init(struct machine *machine, struct memory *mem, uint64_t baseaddr); + uint64_t baseaddr, int type, char *keyboard_irqpath, + char *mouse_irqpath, int in_use, int pc_style_flag); /* dev_pmagja.c: */ #define DEV_PMAGJA_LENGTH 0x3c0000 -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); +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, char *irq_path); /* dev_px.c: */ struct px_data { - struct memory *fb_mem; - struct vfb_data *vfb_data; - int type; - char *px_name; - int irq_nr; - int bitdepth; - int xconfig; - int yconfig; + struct memory *fb_mem; + struct vfb_data *vfb_data; + int type; + char *px_name; + struct interrupt irq; + int bitdepth; + int xconfig; + int yconfig; - uint32_t intr; - unsigned char sram[128 * 1024]; + uint32_t intr; + unsigned char sram[128 * 1024]; }; /* TODO: perhaps these types are wrong? */ #define DEV_PX_TYPE_PX 0 @@ -422,30 +334,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, char *irq_path); /* 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 @@ -472,70 +397,47 @@ int dev_sgi_ip22_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); struct sgi_ip22_data *dev_sgi_ip22_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int guiness_flag); -/* dev_sgi_ip30.c: */ -#define DEV_SGI_IP30_LENGTH 0x80000 -struct sgi_ip30_data { - /* ip30: */ - uint64_t imask0; /* 0x10000 */ - uint64_t reg_0x10018; - uint64_t isr; /* 0x10030 */ - uint64_t reg_0x20000; - uint64_t reg_0x30000; - - /* ip30_2: */ - uint64_t reg_0x0029c; - - /* ip30_3: */ - uint64_t reg_0x00284; - - /* ip30_4: */ - uint64_t reg_0x000b0; - - /* ip30_5: */ - uint64_t reg_0x00000; -}; -int dev_sgi_ip30_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct sgi_ip30_data *dev_sgi_ip30_init(struct machine *machine, struct memory *mem, uint64_t baseaddr); - /* dev_sgi_ip32.c: */ -#define DEV_CRIME_LENGTH 0x0000000000001000 -struct crime_data { - unsigned char reg[DEV_CRIME_LENGTH]; - int irq_nr; - int use_fb; -}; -int dev_crime_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct crime_data *dev_crime_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb); -#define DEV_MACE_LENGTH 0x100 -struct mace_data { - unsigned char reg[DEV_MACE_LENGTH]; - int irqnr; -}; -int dev_mace_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -struct mace_data *dev_mace_init(struct memory *mem, uint64_t baseaddr, int irqnr); +void dev_crime_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, char *irq_path, int use_fb); #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); +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 machine *machine, struct memory *mem, + uint64_t baseaddr, char *irq_path); #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); +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, char *irq_path, unsigned char *macaddr); #define DEV_SGI_UST_LENGTH 0x10000 -int dev_sgi_ust_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); +int dev_sgi_ust_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); void dev_sgi_ust_init(struct memory *mem, uint64_t baseaddr); #define DEV_SGI_MTE_LENGTH 0x10000 -int dev_sgi_mte_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); +int dev_sgi_mte_access(struct cpu *cpu, struct memory *mem, + uint64_t relative_addr, unsigned char *data, size_t len, + int writeflag, void *); void dev_sgi_mte_init(struct memory *mem, uint64_t baseaddr); /* dev_sii.c: */ #define DEV_SII_LENGTH 0x100 void dev_sii_tick(struct cpu *cpu, void *); -int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_sii_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, int irq_nr); +int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +void dev_sii_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, + char *irq_path); /* dev_ssc.c: */ #define DEV_SSC_LENGTH 0x1000 -int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *); -void dev_ssc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, uint32_t *); +int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, + unsigned char *data, size_t len, int writeflag, void *); +void dev_ssc_init(struct machine *machine, struct memory *mem, + uint64_t baseaddr, char *irq_path, int use_fb); /* dev_turbochannel.c: */ #define DEV_TURBOCHANNEL_LEN 0x0470 @@ -544,7 +446,11 @@ 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); + char *irq_path); + +/* dev_uninorth.c: */ +struct pci_data *dev_uninorth_init(struct machine *machine, struct memory *mem, + uint64_t addr, int irqbase, int pciirq); /* dev_vga.c: */ int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, @@ -553,56 +459,15 @@ uint64_t videomem_base, uint64_t control_base, char *name); /* dev_vr41xx.c: */ -#define DEV_VR41XX_LENGTH 0x800 /* TODO? */ -struct vr41xx_data { - int cpumodel; - - int kiu_console_handle; - int kiu_offset; - int kiu_irq_nr; - int kiu_int_assert; - int d0; - int d1; - int d2; - int d3; - int d4; - int d5; - int dont_clear_next; - int escape_state; - - /* See icureg.h in NetBSD for more info. */ - uint16_t sysint1; - uint16_t msysint1; - uint16_t giuint; - uint16_t giumask; - uint16_t sysint2; - uint16_t msysint2; -}; - -int dev_vr41xx_access(struct cpu *cpu, struct memory *mem, - uint64_t relative_addr, unsigned char *data, size_t len, - int writeflag, void *); 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 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; @@ -617,14 +482,8 @@ int mouse_mode; int mouse_revision; /* 0..15 */ int mouse_x, mouse_y, mouse_buttons; - - int old_host_mouse_x; - int old_host_mouse_y; - int old_host_mouse_stays_put; - int mouse_check_interval; - int mouse_check_interval_reset; }; -void lk201_tick(struct lk201_data *); +void lk201_tick(struct machine *, struct lk201_data *); void lk201_tx_data(struct lk201_data *, int port, int idata); void lk201_init(struct lk201_data *d, int use_fb, void (*add_to_rx_queue)(void *,int,int), int console_handle, void *);