/[gxemul]/trunk/src/include/devices.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/include/devices.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 14 by dpavlin, Mon Oct 8 16:18:51 2007 UTC revision 34 by dpavlin, Mon Oct 8 16:21:17 2007 UTC
# Line 2  Line 2 
2  #define DEVICES_H  #define DEVICES_H
3    
4  /*  /*
5   *  Copyright (C) 2003-2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2003-2007  Anders Gavare.  All rights reserved.
6   *   *
7   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
8   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 28  Line 28 
28   *  SUCH DAMAGE.   *  SUCH DAMAGE.
29   *   *
30   *   *
31   *  $Id: devices.h,v 1.184 2005/10/03 01:07:48 debug Exp $   *  $Id: devices.h,v 1.241 2007/02/10 14:21:10 debug Exp $
32   *   *
33   *  Memory mapped devices.   *  Memory mapped devices.
34   *   *
35   *  TODO: Separate into lots of smaller files? That might speed up a compile,   *  NOTE:  Many of these devices are legacy devices, that are here for one
36   *        but I'm not sure that it's a price worth paying.   *         of these two reasons:
37     *
38     *              A)  Devices introduced before the DEVINIT system had to
39     *                  be declared somewhere.
40     *
41     *              B)  The way interrupt controllers and such were implemented
42     *                  up until release 0.4.3 requires that several parts of
43     *                  the program access internal fields of interrupt
44     *                  controllers' structs.
45     *
46     *         Both A and B need to be solved.
47   */   */
48    
49  #include <sys/types.h>  #include <sys/types.h>
50  #include <inttypes.h>  #include <inttypes.h>
51    
52    #include "interrupt.h"
53    
54  struct cpu;  struct cpu;
55  struct machine;  struct machine;
56  struct memory;  struct memory;
57  struct pci_data;  struct pci_data;
58    struct timer;
59    
60  /* #ifdef WITH_X11  /* #ifdef WITH_X11
61  #include <X11/Xlib.h>  #include <X11/Xlib.h>
# Line 50  struct pci_data; Line 63  struct pci_data;
63    
64  /*  dev_8259.c:  */  /*  dev_8259.c:  */
65  struct pic8259_data {  struct pic8259_data {
66          int             irq_nr;         /*  if connected to another 8259  */          struct interrupt irq;
67    
68          int             irq_base;          int             irq_base;
69          int             current_command;          int             current_command;
# Line 83  struct dec_ioasic_data *dev_dec_ioasic_i Line 96  struct dec_ioasic_data *dev_dec_ioasic_i
96  #define DEV_ASC_PICA            2  #define DEV_ASC_PICA            2
97  int dev_asc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_asc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
98  void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr,  void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr,
99          int irq_nr, void *turbochannel, int mode,          char *irq_path, void *turbochannel, int mode,
100          size_t (*dma_controller)(void *dma_controller_data,          size_t (*dma_controller)(void *dma_controller_data,
101                  unsigned char *data, size_t len, int writeflag),                  unsigned char *data, size_t len, int writeflag),
102          void *dma_controller_data);          void *dma_controller_data);
103    
 /*  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);  
   
104  /*  dev_bt431.c:  */  /*  dev_bt431.c:  */
105  #define DEV_BT431_LENGTH                0x20  #define DEV_BT431_LENGTH                0x20
106  #define DEV_BT431_NREGS                 0x800   /*  ?  */  #define DEV_BT431_NREGS                 0x800   /*  ?  */
107  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,
108            uint64_t relative_addr, unsigned char *data, size_t len,
109            int writeflag, void *);
110  struct vfb_data;  struct vfb_data;
111  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,
112            struct vfb_data *vfb_data, int color_fb_flag);
113    
114  /*  dev_bt455.c:  */  /*  dev_bt455.c:  */
115  #define DEV_BT455_LENGTH                0x20  #define DEV_BT455_LENGTH                0x20
116  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,
117            uint64_t relative_addr, unsigned char *data, size_t len,
118            int writeflag, void *);
119  struct vfb_data;  struct vfb_data;
120  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,
121            struct vfb_data *vfb_data);
122    
123  /*  dev_bt459.c:  */  /*  dev_bt459.c:  */
124  #define DEV_BT459_LENGTH                0x20  #define DEV_BT459_LENGTH                0x20
# Line 130  int dev_bt459_access(struct cpu *cpu, st Line 132  int dev_bt459_access(struct cpu *cpu, st
132  struct vfb_data;  struct vfb_data;
133  void dev_bt459_init(struct machine *machine, struct memory *mem,  void dev_bt459_init(struct machine *machine, struct memory *mem,
134          uint64_t baseaddr, uint64_t baseaddr_irq, struct vfb_data *vfb_data,          uint64_t baseaddr, uint64_t baseaddr_irq, struct vfb_data *vfb_data,
135          int color_fb_flag, int irq_nr, int type);          int color_fb_flag, char *irq_path, 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;  
 };  
136    
137  /*  dev_colorplanemask.c:  */  /*  dev_colorplanemask.c:  */
138  #define DEV_COLORPLANEMASK_LENGTH       0x0000000000000010  #define DEV_COLORPLANEMASK_LENGTH       0x0000000000000010
# Line 154  void dev_colorplanemask_init(struct memo Line 146  void dev_colorplanemask_init(struct memo
146  #define DEV_DC7085_LENGTH               0x0000000000000080  #define DEV_DC7085_LENGTH               0x0000000000000080
147  /*  see dc7085.h for more info  */  /*  see dc7085.h for more info  */
148  void dev_dc7085_tick(struct cpu *cpu, void *);  void dev_dc7085_tick(struct cpu *cpu, void *);
149  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_access(struct cpu *cpu, struct memory *mem,
150  int dev_dc7085_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb);          uint64_t relative_addr, unsigned char *data, size_t len,
151            int writeflag, void *);
152    int dev_dc7085_init(struct machine *machine, struct memory *mem,
153            uint64_t baseaddr, char *irq_path, int use_fb);
154    
155  /*  dev_dec5800.c:  */  /*  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);  
156  #define DEV_DECCCA_LENGTH                       0x10000 /*  ?  */  #define DEV_DECCCA_LENGTH                       0x10000 /*  ?  */
157  #define DEC_DECCCA_BASEADDR                     0x19000000      /*  ?  I just made this up  */  #define DEC_DECCCA_BASEADDR                     0x19000000      /*  ?  I just made this up  */
158  int dev_deccca_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_deccca_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
# Line 177  void dev_deccca_init(struct memory *mem, Line 161  void dev_deccca_init(struct memory *mem,
161  int dev_decxmi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_decxmi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
162  void dev_decxmi_init(struct memory *mem, uint64_t baseaddr);  void dev_decxmi_init(struct memory *mem, uint64_t baseaddr);
163    
 /*  dev_disk.c:  */  
 #define DEV_DISK_ADDRESS                0x13000000  
   
 /*  dev_ether.c:  */  
 #define DEV_ETHER_ADDRESS               0x14000000  
 #define DEV_ETHER_LENGTH                0x8000  
   
164  /*  dev_fb.c:  */  /*  dev_fb.c:  */
 #define DEV_FB_ADDRESS          0x12000000      /*  Default for testmips  */  
165  #define DEV_FB_LENGTH           0x3c0000        /*  3c0000 to not colide with */  #define DEV_FB_LENGTH           0x3c0000        /*  3c0000 to not colide with */
166                                                  /*  turbochannel rom,         */                                                  /*  turbochannel rom,         */
167                                                  /*  otherwise size = 4MB      */                                                  /*  otherwise size = 4MB      */
168    /*  Type:  */
169  #define VFB_GENERIC             0  #define VFB_GENERIC             0
170  #define VFB_HPCMIPS             1  #define VFB_HPC                 1
171  #define VFB_DEC_VFB01           2  #define VFB_DEC_VFB01           2
172  #define VFB_DEC_VFB02           3  #define VFB_DEC_VFB02           3
173  #define VFB_DEC_MAXINE          4  #define VFB_DEC_MAXINE          4
174  #define VFB_PLAYSTATION2        5  #define VFB_PLAYSTATION2        5
175    /*  Extra flags:  */
176    #define VFB_REVERSE_START       0x10000
177  struct vfb_data {  struct vfb_data {
178            struct memory   *memory;
179          int             vfb_type;          int             vfb_type;
180    
181          int             vfb_scaledown;          int             vfb_scaledown;
# Line 204  struct vfb_data { Line 184  struct vfb_data {
184          int             ysize;          int             ysize;
185          int             bit_depth;          int             bit_depth;
186          int             color32k;       /*  hack for 16-bit HPCmips  */          int             color32k;       /*  hack for 16-bit HPCmips  */
187          int             psp_15bit;      /*  plastation portable hack  */          int             psp_15bit;      /*  playstation portable hack  */
188    
189          unsigned char   color_plane_mask;          unsigned char   color_plane_mask;
190    
# Line 221  struct vfb_data { Line 201  struct vfb_data {
201          /*  RGB palette for <= 8 bit modes:  (r,g,b bytes for each)  */          /*  RGB palette for <= 8 bit modes:  (r,g,b bytes for each)  */
202          unsigned char   rgb_palette[256 * 3];          unsigned char   rgb_palette[256 * 3];
203    
204            char            *name;
205            char            title[100];
206    
207            void (*redraw_func)(struct vfb_data *, int, int);
208    
209          /*  These should always be in sync:  */          /*  These should always be in sync:  */
210          unsigned char   *framebuffer;          unsigned char   *framebuffer;
211          struct fb_window *fb_window;          struct fb_window *fb_window;
# Line 243  struct vfb_data *dev_fb_init(struct mach Line 228  struct vfb_data *dev_fb_init(struct mach
228          uint64_t baseaddr, int vfb_type, int visible_xsize, int visible_ysize,          uint64_t baseaddr, int vfb_type, int visible_xsize, int visible_ysize,
229          int xsize, int ysize, int bit_depth, char *name);          int xsize, int ysize, int bit_depth, char *name);
230    
 /*  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;  
 };  
   
231  /*  dev_gt.c:  */  /*  dev_gt.c:  */
232  #define DEV_GT_LENGTH                   0x1000  #define DEV_GT_LENGTH                   0x1000
233  int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,  int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
234          unsigned char *data, size_t len, int writeflag, void *);          unsigned char *data, size_t len, int writeflag, void *);
235  struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem,  struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem,
236          uint64_t baseaddr, int irq_nr, int pciirq, int type);          uint64_t baseaddr, char *timer_irq_path, char *isa_irq_path, int type);
237    
238  /*  dev_jazz.c:  */  /*  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;  
 };  
239  size_t dev_jazz_dma_controller(void *dma_controller_data,  size_t dev_jazz_dma_controller(void *dma_controller_data,
240          unsigned char *data, size_t len, int writeflag);          unsigned char *data, size_t len, int writeflag);
241    
242  /*  dev_kn01.c:  */  /*  dev_kn01.c:  */
243  #define DEV_KN01_CSR_LENGTH             0x0000000000000004  #define DEV_KN01_LENGTH                 4
244  int dev_kn01_csr_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_kn01_access(struct cpu *cpu, struct memory *mem,
245  void dev_kn01_csr_init(struct memory *mem, uint64_t baseaddr, int color_fb);          uint64_t relative_addr, unsigned char *data, size_t len,
246            int writeflag, void *);
247    void dev_kn01_init(struct memory *mem, uint64_t baseaddr, int color_fb);
248  #define DEV_VDAC_LENGTH                 0x20  #define DEV_VDAC_LENGTH                 0x20
249  #define DEV_VDAC_MAPWA                      0x00  #define DEV_VDAC_MAPWA                      0x00
250  #define DEV_VDAC_MAP                        0x04  #define DEV_VDAC_MAP                        0x04
# Line 316  void dev_kn01_csr_init(struct memory *me Line 253  void dev_kn01_csr_init(struct memory *me
253  #define DEV_VDAC_OVERWA                     0x10  #define DEV_VDAC_OVERWA                     0x10
254  #define DEV_VDAC_OVER                       0x14  #define DEV_VDAC_OVER                       0x14
255  #define DEV_VDAC_OVERRA                     0x1c  #define DEV_VDAC_OVERRA                     0x1c
256  int dev_vdac_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_vdac_access(struct cpu *cpu, struct memory *mem,
257  void dev_vdac_init(struct memory *mem, uint64_t baseaddr, unsigned char *rgb_palette, int color_fb_flag);          uint64_t relative_addr, unsigned char *data, size_t len,
258            int writeflag, void *);
259  /*  dev_kn02.c:  */  void dev_vdac_init(struct memory *mem, uint64_t baseaddr,
260  struct kn02_csr {          unsigned char *rgb_palette, int color_fb_flag);
         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);  
261    
262  /*  dev_kn220.c:  */  /*  dev_kn220.c:  */
263  #define DEV_DEC5500_IOBOARD_LENGTH              0x100000  #define DEV_DEC5500_IOBOARD_LENGTH              0x100000
# Line 336  struct dec5500_ioboard_data *dev_dec5500 Line 267  struct dec5500_ioboard_data *dev_dec5500
267  int dev_sgec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sgec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
268  void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr);  void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr);
269    
 /*  dev_kn230.c:  */  
 struct kn230_csr {  
         uint32_t        csr;  
 };  
   
270  /*  dev_le.c:  */  /*  dev_le.c:  */
271  #define DEV_LE_LENGTH                   0x1c0200  #define DEV_LE_LENGTH                   0x1c0200
272  int dev_le_access(struct cpu *cpu, struct memory *mem,  int dev_le_access(struct cpu *cpu, struct memory *mem,
# Line 348  int dev_le_access(struct cpu *cpu, struc Line 274  int dev_le_access(struct cpu *cpu, struc
274          int writeflag, void *);          int writeflag, void *);
275  void dev_le_init(struct machine *machine, struct memory *mem,  void dev_le_init(struct machine *machine, struct memory *mem,
276          uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end,          uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end,
277          int irq_nr, int len);          char *irq_path, 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_malta.c:  */  
 struct malta_data {  
         uint8_t         assert_lo;  
         uint8_t         assert_hi;  
         uint8_t         disable_lo;  
         uint8_t         disable_hi;  
         int             poll_mode;  
 };  
278    
279  /*  dev_mc146818.c:  */  /*  dev_mc146818.c:  */
280  #define DEV_MC146818_LENGTH             0x0000000000000100  #define DEV_MC146818_LENGTH             0x0000000000000100
# Line 374  struct malta_data { Line 283  struct malta_data {
283  #define MC146818_ARC_NEC        2  #define MC146818_ARC_NEC        2
284  #define MC146818_ARC_JAZZ       3  #define MC146818_ARC_JAZZ       3
285  #define MC146818_SGI            4  #define MC146818_SGI            4
286    #define MC146818_CATS           5
287    #define MC146818_ALGOR          6
288    #define MC146818_PMPPC          7
289  /*  see mc146818reg.h for more info  */  /*  see mc146818reg.h for more info  */
290  void dev_mc146818_tick(struct cpu *cpu, void *);  void dev_mc146818_tick(struct cpu *cpu, void *);
291  int dev_mc146818_access(struct cpu *cpu, struct memory *mem,  int dev_mc146818_access(struct cpu *cpu, struct memory *mem,
292          uint64_t relative_addr, unsigned char *data, size_t len,          uint64_t relative_addr, unsigned char *data, size_t len,
293          int writeflag, void *);          int writeflag, void *);
294  void dev_mc146818_init(struct machine *machine, struct memory *mem,  void dev_mc146818_init(struct machine *machine, struct memory *mem,
295          uint64_t baseaddr, int irq_nr, int access_style, int addrdiv);          uint64_t baseaddr, char *irq_path, int access_style, int addrdiv);
296    
297  /*  dev_pckbc.c:  */  /*  dev_pckbc.c:  */
298  #define DEV_PCKBC_LENGTH                0x10  #define DEV_PCKBC_LENGTH                0x10
# Line 391  int dev_pckbc_access(struct cpu *cpu, st Line 303  int dev_pckbc_access(struct cpu *cpu, st
303          uint64_t relative_addr, unsigned char *data, size_t len,          uint64_t relative_addr, unsigned char *data, size_t len,
304          int writeflag, void *);          int writeflag, void *);
305  int dev_pckbc_init(struct machine *machine, struct memory *mem,  int dev_pckbc_init(struct machine *machine, struct memory *mem,
306          uint64_t baseaddr, int type, int keyboard_irqnr, int mouse_irqnr,          uint64_t baseaddr, int type, char *keyboard_irqpath,
307          int in_use, int pc_style_flag);          char *mouse_irqpath, 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);  
308    
309  /*  dev_pmagja.c:  */  /*  dev_pmagja.c:  */
310  #define DEV_PMAGJA_LENGTH               0x3c0000  #define DEV_PMAGJA_LENGTH               0x3c0000
311  int dev_pmagja_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_pmagja_access(struct cpu *cpu, struct memory *mem,
312  void dev_pmagja_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr);          uint64_t relative_addr, unsigned char *data, size_t len,
313            int writeflag, void *);
314    void dev_pmagja_init(struct machine *machine, struct memory *mem,
315            uint64_t baseaddr, char *irq_path);
316    
317  /*  dev_px.c:  */  /*  dev_px.c:  */
318  struct px_data {  struct px_data {
319          struct memory   *fb_mem;          struct memory           *fb_mem;
320          struct vfb_data *vfb_data;          struct vfb_data         *vfb_data;
321          int             type;          int                     type;
322          char            *px_name;          char                    *px_name;
323          int             irq_nr;          struct interrupt        irq;
324          int             bitdepth;          int                     bitdepth;
325          int             xconfig;          int                     xconfig;
326          int             yconfig;          int                     yconfig;
327    
328          uint32_t        intr;          uint32_t                intr;
329          unsigned char   sram[128 * 1024];          unsigned char           sram[128 * 1024];
330  };  };
331  /*  TODO: perhaps these types are wrong?  */  /*  TODO: perhaps these types are wrong?  */
332  #define DEV_PX_TYPE_PX                  0  #define DEV_PX_TYPE_PX                  0
# Line 455  struct px_data { Line 334  struct px_data {
334  #define DEV_PX_TYPE_PXGPLUS             2  #define DEV_PX_TYPE_PXGPLUS             2
335  #define DEV_PX_TYPE_PXGPLUSTURBO        3  #define DEV_PX_TYPE_PXGPLUSTURBO        3
336  #define DEV_PX_LENGTH                   0x3c0000  #define DEV_PX_LENGTH                   0x3c0000
337  int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
338  void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int px_type, int irq_nr);          unsigned char *data, size_t len, int writeflag, void *);
339    void dev_px_init(struct machine *machine, struct memory *mem,
340            uint64_t baseaddr, int px_type, char *irq_path);
341    
342  /*  dev_ram.c:  */  /*  dev_ram.c:  */
343  #define DEV_RAM_RAM             0  #define DEV_RAM_RAM                             0
344  #define DEV_RAM_MIRROR          1  #define DEV_RAM_MIRROR                          1
345  int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  #define DEV_RAM_MIGHT_POINT_TO_DEVICES          0x10
346  void dev_ram_init(struct memory *mem, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddr);  int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
347            unsigned char *data, size_t len, int writeflag, void *);
348    void dev_ram_init(struct machine *machine, uint64_t baseaddr, uint64_t length,
349            int mode, uint64_t otheraddr);
350    
351  /*  dev_scc.c:  */  /*  dev_scc.c:  */
352  #define DEV_SCC_LENGTH                  0x1000  #define DEV_SCC_LENGTH                  0x1000
353  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_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
354  int dev_scc_dma_func(struct cpu *cpu, void *extra, uint64_t addr, size_t dma_len, int tx);          unsigned char *data, size_t len, int writeflag, void *);
355  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_dma_func(struct cpu *cpu, void *extra, uint64_t addr,
356            size_t dma_len, int tx);
357    void *dev_scc_init(struct machine *machine, struct memory *mem,
358            uint64_t baseaddr, int irq_nr, int use_fb, int scc_nr, int addrmul);
359    
360  /*  dev_sfb.c:  */  /*  dev_sfb.c:  */
361  #define DEV_SFB_LENGTH          0x400000  #define DEV_SFB_LENGTH          0x400000
362  int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
363  void dev_sfb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data);          unsigned char *data, size_t len, int writeflag, void *);
364    void dev_sfb_init(struct machine *machine, struct memory *mem,
365            uint64_t baseaddr, struct vfb_data *vfb_data);
366    
367  /*  dev_sgi_gbe.c:  */  /*  dev_sgi_gbe.c:  */
368  #define DEV_SGI_GBE_LENGTH              0x1000000  #define DEV_SGI_GBE_LENGTH              0x1000000
369  int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem,
370  void dev_sgi_gbe_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);          uint64_t relative_addr, unsigned char *data, size_t len, int writeflag,
371            void *);
372    void dev_sgi_gbe_init(struct machine *machine, struct memory *mem,
373            uint64_t baseaddr);
374    
375  /*  dev_sgi_ip20.c:  */  /*  dev_sgi_ip20.c:  */
376  #define DEV_SGI_IP20_LENGTH             0x40  #define DEV_SGI_IP20_LENGTH             0x40
# Line 505  struct sgi_ip22_data { Line 397  struct sgi_ip22_data {
397  int dev_sgi_ip22_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sgi_ip22_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
398  struct sgi_ip22_data *dev_sgi_ip22_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int guiness_flag);  struct sgi_ip22_data *dev_sgi_ip22_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int guiness_flag);
399    
 /*  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);  
   
400  /*  dev_sgi_ip32.c:  */  /*  dev_sgi_ip32.c:  */
401  #define DEV_CRIME_LENGTH                0x0000000000001000  void dev_crime_init(struct machine *machine, struct memory *mem,
402  struct crime_data {          uint64_t baseaddr, char *irq_path, int use_fb);
         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);  
403  #define DEV_MACEPCI_LENGTH              0x1000  #define DEV_MACEPCI_LENGTH              0x1000
404  int dev_macepci_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_macepci_access(struct cpu *cpu, struct memory *mem,
405  struct pci_data *dev_macepci_init(struct memory *mem, uint64_t baseaddr, int pciirq);          uint64_t relative_addr, unsigned char *data, size_t len,
406            int writeflag, void *);
407    struct pci_data *dev_macepci_init(struct machine *machine, struct memory *mem,
408            uint64_t baseaddr, char *irq_path);
409  #define DEV_SGI_MEC_LENGTH              0x1000  #define DEV_SGI_MEC_LENGTH              0x1000
410  int dev_sgi_mec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sgi_mec_access(struct cpu *cpu, struct memory *mem,
411  void dev_sgi_mec_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, unsigned char *macaddr);          uint64_t relative_addr, unsigned char *data, size_t len,
412            int writeflag, void *);
413    void dev_sgi_mec_init(struct machine *machine, struct memory *mem,
414            uint64_t baseaddr, char *irq_path, unsigned char *macaddr);
415  #define DEV_SGI_UST_LENGTH              0x10000  #define DEV_SGI_UST_LENGTH              0x10000
416  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,
417            uint64_t relative_addr, unsigned char *data, size_t len,
418            int writeflag, void *);
419  void dev_sgi_ust_init(struct memory *mem, uint64_t baseaddr);  void dev_sgi_ust_init(struct memory *mem, uint64_t baseaddr);
420  #define DEV_SGI_MTE_LENGTH              0x10000  #define DEV_SGI_MTE_LENGTH              0x10000
421  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,
422            uint64_t relative_addr, unsigned char *data, size_t len,
423            int writeflag, void *);
424  void dev_sgi_mte_init(struct memory *mem, uint64_t baseaddr);  void dev_sgi_mte_init(struct memory *mem, uint64_t baseaddr);
425    
426  /*  dev_sii.c:  */  /*  dev_sii.c:  */
427  #define DEV_SII_LENGTH                  0x100  #define DEV_SII_LENGTH                  0x100
428  void dev_sii_tick(struct cpu *cpu, void *);  void dev_sii_tick(struct cpu *cpu, void *);
429  int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
430  void dev_sii_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, int irq_nr);          unsigned char *data, size_t len, int writeflag, void *);
431    void dev_sii_init(struct machine *machine, struct memory *mem,
432            uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end,
433            char *irq_path);
434    
435  /*  dev_ssc.c:  */  /*  dev_ssc.c:  */
436  #define DEV_SSC_LENGTH                  0x1000  #define DEV_SSC_LENGTH                  0x1000
437  int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
438  void dev_ssc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, uint32_t *);          unsigned char *data, size_t len, int writeflag, void *);
439    void dev_ssc_init(struct machine *machine, struct memory *mem,
440            uint64_t baseaddr, char *irq_path, int use_fb);
441    
442  /*  dev_turbochannel.c:  */  /*  dev_turbochannel.c:  */
443  #define DEV_TURBOCHANNEL_LEN            0x0470  #define DEV_TURBOCHANNEL_LEN            0x0470
# Line 577  int dev_turbochannel_access(struct cpu * Line 446  int dev_turbochannel_access(struct cpu *
446          int writeflag, void *);          int writeflag, void *);
447  void dev_turbochannel_init(struct machine *machine, struct memory *mem,  void dev_turbochannel_init(struct machine *machine, struct memory *mem,
448          int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name,          int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name,
449          int irq);          char *irq_path);
450    
451    /*  dev_uninorth.c:  */
452    struct pci_data *dev_uninorth_init(struct machine *machine, struct memory *mem,
453            uint64_t addr, int irqbase, int pciirq);
454    
455  /*  dev_vga.c:  */  /*  dev_vga.c:  */
456  int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,  int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
# Line 586  void dev_vga_init(struct machine *machin Line 459  void dev_vga_init(struct machine *machin
459          uint64_t videomem_base, uint64_t control_base, char *name);          uint64_t videomem_base, uint64_t control_base, char *name);
460    
461  /*  dev_vr41xx.c:  */  /*  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 *);  
462  struct vr41xx_data *dev_vr41xx_init(struct machine *machine,  struct vr41xx_data *dev_vr41xx_init(struct machine *machine,
463          struct memory *mem, int cpumodel);          struct memory *mem, int cpumodel);
464    
# Line 624  struct vr41xx_data *dev_vr41xx_init(stru Line 468  struct vr41xx_data *dev_vr41xx_init(stru
468  int dev_wdsc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);  int dev_wdsc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
469  void dev_wdsc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int controller_nr, int irq_nr);  void dev_wdsc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int controller_nr, int irq_nr);
470    
 /*  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);  
   
471  /*  lk201.c:  */  /*  lk201.c:  */
472  struct lk201_data {  struct lk201_data {
473          int                     use_fb;          int                     use_fb;
# Line 645  struct lk201_data { Line 482  struct lk201_data {
482          int                     mouse_mode;          int                     mouse_mode;
483          int                     mouse_revision;         /*  0..15  */            int                     mouse_revision;         /*  0..15  */  
484          int                     mouse_x, mouse_y, mouse_buttons;          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;  
485  };  };
486  void lk201_tick(struct lk201_data *);  void lk201_tick(struct machine *, struct lk201_data *);
487  void lk201_tx_data(struct lk201_data *, int port, int idata);  void lk201_tx_data(struct lk201_data *, int port, int idata);
488  void lk201_init(struct lk201_data *d, int use_fb,  void lk201_init(struct lk201_data *d, int use_fb,
489          void (*add_to_rx_queue)(void *,int,int), int console_handle, void *);          void (*add_to_rx_queue)(void *,int,int), int console_handle, void *);

Legend:
Removed from v.14  
changed lines
  Added in v.34

  ViewVC Help
Powered by ViewVC 1.1.26