Subversion Repositories shark

Rev

Rev 424 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
424 giacomo 1
/*
2
 *  include/asm-i386/mach-pc9800/mach_resources.h
3
 *
4
 *  Machine specific resource allocation for PC-9800.
5
 *  Written by Osamu Tomita <tomita@cinet.co.jp>
6
 */
7
#ifndef _MACH_RESOURCES_H
8
#define _MACH_RESOURCES_H
9
 
10
static char str_pic1[] = "pic1";
11
static char str_dma[] = "dma";
12
static char str_pic2[] = "pic2";
13
static char str_calender_clock[] = "calender clock";
14
static char str_system[] = "system";
15
static char str_nmi_control[] = "nmi control";
16
static char str_kanji_rom[] = "kanji rom";
17
static char str_keyboard[] = "keyboard";
18
static char str_text_gdc[] = "text gdc";
19
static char str_crtc[] = "crtc";
20
static char str_timer[] = "timer";
21
static char str_graphic_gdc[] = "graphic gdc";
22
static char str_dma_ex_bank[] = "dma ex. bank";
23
static char str_beep_freq[] = "beep freq.";
24
static char str_mouse_pio[] = "mouse pio";
25
struct resource standard_io_resources[] = {
26
        { str_pic1, 0x00, 0x00, IORESOURCE_BUSY },
27
        { str_dma, 0x01, 0x01, IORESOURCE_BUSY },
28
        { str_pic1, 0x02, 0x02, IORESOURCE_BUSY },
29
        { str_dma, 0x03, 0x03, IORESOURCE_BUSY },
30
        { str_dma, 0x05, 0x05, IORESOURCE_BUSY },
31
        { str_dma, 0x07, 0x07, IORESOURCE_BUSY },
32
        { str_pic2, 0x08, 0x08, IORESOURCE_BUSY },
33
        { str_dma, 0x09, 0x09, IORESOURCE_BUSY },
34
        { str_pic2, 0x0a, 0x0a, IORESOURCE_BUSY },
35
        { str_dma, 0x0b, 0x0b, IORESOURCE_BUSY },
36
        { str_dma, 0x0d, 0x0d, IORESOURCE_BUSY },
37
        { str_dma, 0x0f, 0x0f, IORESOURCE_BUSY },
38
        { str_dma, 0x11, 0x11, IORESOURCE_BUSY },
39
        { str_dma, 0x13, 0x13, IORESOURCE_BUSY },
40
        { str_dma, 0x15, 0x15, IORESOURCE_BUSY },
41
        { str_dma, 0x17, 0x17, IORESOURCE_BUSY },
42
        { str_dma, 0x19, 0x19, IORESOURCE_BUSY },
43
        { str_dma, 0x1b, 0x1b, IORESOURCE_BUSY },
44
        { str_dma, 0x1d, 0x1d, IORESOURCE_BUSY },
45
        { str_dma, 0x1f, 0x1f, IORESOURCE_BUSY },
46
        { str_calender_clock, 0x20, 0x20, 0 },
47
        { str_dma, 0x21, 0x21, IORESOURCE_BUSY },
48
        { str_calender_clock, 0x22, 0x22, 0 },
49
        { str_dma, 0x23, 0x23, IORESOURCE_BUSY },
50
        { str_dma, 0x25, 0x25, IORESOURCE_BUSY },
51
        { str_dma, 0x27, 0x27, IORESOURCE_BUSY },
52
        { str_dma, 0x29, 0x29, IORESOURCE_BUSY },
53
        { str_dma, 0x2b, 0x2b, IORESOURCE_BUSY },
54
        { str_dma, 0x2d, 0x2d, IORESOURCE_BUSY },
55
        { str_system, 0x31, 0x31, IORESOURCE_BUSY },
56
        { str_system, 0x33, 0x33, IORESOURCE_BUSY },
57
        { str_system, 0x35, 0x35, IORESOURCE_BUSY },
58
        { str_system, 0x37, 0x37, IORESOURCE_BUSY },
59
        { str_nmi_control, 0x50, 0x50, IORESOURCE_BUSY },
60
        { str_nmi_control, 0x52, 0x52, IORESOURCE_BUSY },
61
        { "time stamp", 0x5c, 0x5f, IORESOURCE_BUSY },
62
        { str_kanji_rom, 0xa1, 0xa1, IORESOURCE_BUSY },
63
        { str_kanji_rom, 0xa3, 0xa3, IORESOURCE_BUSY },
64
        { str_kanji_rom, 0xa5, 0xa5, IORESOURCE_BUSY },
65
        { str_kanji_rom, 0xa7, 0xa7, IORESOURCE_BUSY },
66
        { str_kanji_rom, 0xa9, 0xa9, IORESOURCE_BUSY },
67
        { str_keyboard, 0x41, 0x41, IORESOURCE_BUSY },
68
        { str_keyboard, 0x43, 0x43, IORESOURCE_BUSY },
69
        { str_text_gdc, 0x60, 0x60, IORESOURCE_BUSY },
70
        { str_text_gdc, 0x62, 0x62, IORESOURCE_BUSY },
71
        { str_text_gdc, 0x64, 0x64, IORESOURCE_BUSY },
72
        { str_text_gdc, 0x66, 0x66, IORESOURCE_BUSY },
73
        { str_text_gdc, 0x68, 0x68, IORESOURCE_BUSY },
74
        { str_text_gdc, 0x6a, 0x6a, IORESOURCE_BUSY },
75
        { str_text_gdc, 0x6c, 0x6c, IORESOURCE_BUSY },
76
        { str_text_gdc, 0x6e, 0x6e, IORESOURCE_BUSY },
77
        { str_crtc, 0x70, 0x70, IORESOURCE_BUSY },
78
        { str_crtc, 0x72, 0x72, IORESOURCE_BUSY },
79
        { str_crtc, 0x74, 0x74, IORESOURCE_BUSY },
80
        { str_crtc, 0x74, 0x74, IORESOURCE_BUSY },
81
        { str_crtc, 0x76, 0x76, IORESOURCE_BUSY },
82
        { str_crtc, 0x78, 0x78, IORESOURCE_BUSY },
83
        { str_crtc, 0x7a, 0x7a, IORESOURCE_BUSY },
84
        { str_timer, 0x71, 0x71, IORESOURCE_BUSY },
85
        { str_timer, 0x73, 0x73, IORESOURCE_BUSY },
86
        { str_timer, 0x75, 0x75, IORESOURCE_BUSY },
87
        { str_timer, 0x77, 0x77, IORESOURCE_BUSY },
88
        { str_graphic_gdc, 0xa0, 0xa0, IORESOURCE_BUSY },
89
        { str_graphic_gdc, 0xa2, 0xa2, IORESOURCE_BUSY },
90
        { str_graphic_gdc, 0xa4, 0xa4, IORESOURCE_BUSY },
91
        { str_graphic_gdc, 0xa6, 0xa6, IORESOURCE_BUSY },
92
        { "cpu", 0xf0, 0xf7, IORESOURCE_BUSY },
93
        { "fpu", 0xf8, 0xff, IORESOURCE_BUSY },
94
        { str_dma_ex_bank, 0x0e05, 0x0e05, 0 },
95
        { str_dma_ex_bank, 0x0e07, 0x0e07, 0 },
96
        { str_dma_ex_bank, 0x0e09, 0x0e09, 0 },
97
        { str_dma_ex_bank, 0x0e0b, 0x0e0b, 0 },
98
        { str_beep_freq, 0x3fd9, 0x3fd9, IORESOURCE_BUSY },
99
        { str_beep_freq, 0x3fdb, 0x3fdb, IORESOURCE_BUSY },
100
        { str_beep_freq, 0x3fdd, 0x3fdd, IORESOURCE_BUSY },
101
        { str_beep_freq, 0x3fdf, 0x3fdf, IORESOURCE_BUSY },
102
        /* All PC-9800 have (exactly) one mouse interface.  */
103
        { str_mouse_pio, 0x7fd9, 0x7fd9, 0 },
104
        { str_mouse_pio, 0x7fdb, 0x7fdb, 0 },
105
        { str_mouse_pio, 0x7fdd, 0x7fdd, 0 },
106
        { str_mouse_pio, 0x7fdf, 0x7fdf, 0 },
107
        { "mouse timer", 0xbfdb, 0xbfdb, 0 },
108
        { "mouse irq", 0x98d7, 0x98d7, 0 },
109
};
110
 
111
#define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource))
112
 
113
static struct resource tvram_resource = { "Text VRAM/CG window", 0xa0000, 0xa4fff, IORESOURCE_BUSY };
114
static struct resource gvram_brg_resource = { "Graphic VRAM (B/R/G)", 0xa8000, 0xbffff, IORESOURCE_BUSY };
115
static struct resource gvram_e_resource = { "Graphic VRAM (E)", 0xe0000, 0xe7fff, IORESOURCE_BUSY };
116
 
117
/* System ROM resources */
118
#define MAXROMS 6
119
static struct resource rom_resources[MAXROMS] = {
120
        { "System ROM", 0xe8000, 0xfffff, IORESOURCE_BUSY }
121
};
122
 
123
static inline void probe_video_rom(int roms)
124
{
125
        /* PC-9800 has no video ROM */
126
}
127
 
128
static inline void probe_extension_roms(int roms)
129
{
130
        int i;
131
        __u8 *xrom_id;
132
 
133
        xrom_id = (__u8 *) isa_bus_to_virt(PC9800SCA_XROM_ID + 0x10);
134
 
135
        for (i = 0; i < 16; i++) {
136
                if (xrom_id[i] & 0x80) {
137
                        int j;
138
 
139
                        for (j = i + 1; j < 16 && (xrom_id[j] & 0x80); j++)
140
                                ;
141
                        rom_resources[roms].start = 0x0d0000 + i * 0x001000;
142
                        rom_resources[roms].end = 0x0d0000 + j * 0x001000 - 1;
143
                        rom_resources[roms].name = "Extension ROM";
144
                        rom_resources[roms].flags = IORESOURCE_BUSY;
145
 
146
                        request_resource(&iomem_resource,
147
                                          rom_resources + roms);
148
                        if (++roms >= MAXROMS)
149
                                return;
150
                }
151
        }
152
}
153
 
154
static inline void request_graphics_resource(void)
155
{
156
        int i;
157
 
158
        if (PC9800_HIGHRESO_P()) {
159
                tvram_resource.start = 0xe0000;
160
                tvram_resource.end   = 0xe4fff;
161
                gvram_brg_resource.name  = "Graphic VRAM";
162
                gvram_brg_resource.start = 0xc0000;
163
                gvram_brg_resource.end   = 0xdffff;
164
        }
165
 
166
        request_resource(&iomem_resource, &tvram_resource);
167
        request_resource(&iomem_resource, &gvram_brg_resource);
168
        if (!PC9800_HIGHRESO_P())
169
                request_resource(&iomem_resource, &gvram_e_resource);
170
 
171
        if (PC9800_HIGHRESO_P() || PC9800_9821_P()) {
172
                static char graphics[] = "graphics";
173
                static struct resource graphics_resources[] = {
174
                        { graphics, 0x9a0, 0x9a0, 0 },
175
                        { graphics, 0x9a2, 0x9a2, 0 },
176
                        { graphics, 0x9a4, 0x9a4, 0 },
177
                        { graphics, 0x9a6, 0x9a6, 0 },
178
                        { graphics, 0x9a8, 0x9a8, 0 },
179
                        { graphics, 0x9aa, 0x9aa, 0 },
180
                        { graphics, 0x9ac, 0x9ac, 0 },
181
                        { graphics, 0x9ae, 0x9ae, 0 },
182
                };
183
 
184
#define GRAPHICS_RESOURCES (sizeof(graphics_resources)/sizeof(struct resource))
185
 
186
                for (i = 0; i < GRAPHICS_RESOURCES; i++)
187
                        request_resource(&ioport_resource, graphics_resources + i);
188
        }
189
}
190
 
191
#endif /* !_MACH_RESOURCES_H */