root / hw / ide / macio.c @ cd8722bb
History | View | Annotate | Download (8.1 kB)
1 | b8842209 | Gerd Hoffmann | /*
|
---|---|---|---|
2 | b8842209 | Gerd Hoffmann | * QEMU IDE Emulation: MacIO support.
|
3 | b8842209 | Gerd Hoffmann | *
|
4 | b8842209 | Gerd Hoffmann | * Copyright (c) 2003 Fabrice Bellard
|
5 | b8842209 | Gerd Hoffmann | * Copyright (c) 2006 Openedhand Ltd.
|
6 | b8842209 | Gerd Hoffmann | *
|
7 | b8842209 | Gerd Hoffmann | * Permission is hereby granted, free of charge, to any person obtaining a copy
|
8 | b8842209 | Gerd Hoffmann | * of this software and associated documentation files (the "Software"), to deal
|
9 | b8842209 | Gerd Hoffmann | * in the Software without restriction, including without limitation the rights
|
10 | b8842209 | Gerd Hoffmann | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11 | b8842209 | Gerd Hoffmann | * copies of the Software, and to permit persons to whom the Software is
|
12 | b8842209 | Gerd Hoffmann | * furnished to do so, subject to the following conditions:
|
13 | b8842209 | Gerd Hoffmann | *
|
14 | b8842209 | Gerd Hoffmann | * The above copyright notice and this permission notice shall be included in
|
15 | b8842209 | Gerd Hoffmann | * all copies or substantial portions of the Software.
|
16 | b8842209 | Gerd Hoffmann | *
|
17 | b8842209 | Gerd Hoffmann | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18 | b8842209 | Gerd Hoffmann | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19 | b8842209 | Gerd Hoffmann | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
20 | b8842209 | Gerd Hoffmann | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21 | b8842209 | Gerd Hoffmann | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22 | b8842209 | Gerd Hoffmann | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23 | b8842209 | Gerd Hoffmann | * THE SOFTWARE.
|
24 | b8842209 | Gerd Hoffmann | */
|
25 | 59f2a787 | Gerd Hoffmann | #include <hw/hw.h> |
26 | 59f2a787 | Gerd Hoffmann | #include <hw/ppc_mac.h> |
27 | 59f2a787 | Gerd Hoffmann | #include <hw/mac_dbdma.h> |
28 | b8842209 | Gerd Hoffmann | #include "block.h" |
29 | b8842209 | Gerd Hoffmann | #include "block_int.h" |
30 | b8842209 | Gerd Hoffmann | #include "sysemu.h" |
31 | b8842209 | Gerd Hoffmann | #include "dma.h" |
32 | 59f2a787 | Gerd Hoffmann | |
33 | 59f2a787 | Gerd Hoffmann | #include <hw/ide/internal.h> |
34 | b8842209 | Gerd Hoffmann | |
35 | b8842209 | Gerd Hoffmann | /***********************************************************/
|
36 | b8842209 | Gerd Hoffmann | /* MacIO based PowerPC IDE */
|
37 | b8842209 | Gerd Hoffmann | |
38 | b8842209 | Gerd Hoffmann | typedef struct MACIOIDEState { |
39 | b8842209 | Gerd Hoffmann | IDEBus bus; |
40 | b8842209 | Gerd Hoffmann | BlockDriverAIOCB *aiocb; |
41 | b8842209 | Gerd Hoffmann | } MACIOIDEState; |
42 | b8842209 | Gerd Hoffmann | |
43 | 02c7c992 | Blue Swirl | #define MACIO_PAGE_SIZE 4096 |
44 | 02c7c992 | Blue Swirl | |
45 | b8842209 | Gerd Hoffmann | static void pmac_ide_atapi_transfer_cb(void *opaque, int ret) |
46 | b8842209 | Gerd Hoffmann | { |
47 | b8842209 | Gerd Hoffmann | DBDMA_io *io = opaque; |
48 | b8842209 | Gerd Hoffmann | MACIOIDEState *m = io->opaque; |
49 | b8842209 | Gerd Hoffmann | IDEState *s = idebus_active_if(&m->bus); |
50 | b8842209 | Gerd Hoffmann | |
51 | b8842209 | Gerd Hoffmann | if (ret < 0) { |
52 | b8842209 | Gerd Hoffmann | m->aiocb = NULL;
|
53 | b8842209 | Gerd Hoffmann | qemu_sglist_destroy(&s->sg); |
54 | b8842209 | Gerd Hoffmann | ide_atapi_io_error(s, ret); |
55 | b8842209 | Gerd Hoffmann | io->dma_end(opaque); |
56 | b8842209 | Gerd Hoffmann | return;
|
57 | b8842209 | Gerd Hoffmann | } |
58 | b8842209 | Gerd Hoffmann | |
59 | b8842209 | Gerd Hoffmann | if (s->io_buffer_size > 0) { |
60 | b8842209 | Gerd Hoffmann | m->aiocb = NULL;
|
61 | b8842209 | Gerd Hoffmann | qemu_sglist_destroy(&s->sg); |
62 | b8842209 | Gerd Hoffmann | |
63 | b8842209 | Gerd Hoffmann | s->packet_transfer_size -= s->io_buffer_size; |
64 | b8842209 | Gerd Hoffmann | |
65 | b8842209 | Gerd Hoffmann | s->io_buffer_index += s->io_buffer_size; |
66 | b8842209 | Gerd Hoffmann | s->lba += s->io_buffer_index >> 11;
|
67 | b8842209 | Gerd Hoffmann | s->io_buffer_index &= 0x7ff;
|
68 | b8842209 | Gerd Hoffmann | } |
69 | b8842209 | Gerd Hoffmann | |
70 | b8842209 | Gerd Hoffmann | if (s->packet_transfer_size <= 0) |
71 | b8842209 | Gerd Hoffmann | ide_atapi_cmd_ok(s); |
72 | b8842209 | Gerd Hoffmann | |
73 | b8842209 | Gerd Hoffmann | if (io->len == 0) { |
74 | b8842209 | Gerd Hoffmann | io->dma_end(opaque); |
75 | b8842209 | Gerd Hoffmann | return;
|
76 | b8842209 | Gerd Hoffmann | } |
77 | b8842209 | Gerd Hoffmann | |
78 | b8842209 | Gerd Hoffmann | /* launch next transfer */
|
79 | b8842209 | Gerd Hoffmann | |
80 | b8842209 | Gerd Hoffmann | s->io_buffer_size = io->len; |
81 | b8842209 | Gerd Hoffmann | |
82 | 02c7c992 | Blue Swirl | qemu_sglist_init(&s->sg, io->len / MACIO_PAGE_SIZE + 1);
|
83 | b8842209 | Gerd Hoffmann | qemu_sglist_add(&s->sg, io->addr, io->len); |
84 | b8842209 | Gerd Hoffmann | io->addr += io->len; |
85 | b8842209 | Gerd Hoffmann | io->len = 0;
|
86 | b8842209 | Gerd Hoffmann | |
87 | b8842209 | Gerd Hoffmann | m->aiocb = dma_bdrv_read(s->bs, &s->sg, |
88 | b8842209 | Gerd Hoffmann | (int64_t)(s->lba << 2) + (s->io_buffer_index >> 9), |
89 | b8842209 | Gerd Hoffmann | pmac_ide_atapi_transfer_cb, io); |
90 | b8842209 | Gerd Hoffmann | if (!m->aiocb) {
|
91 | b8842209 | Gerd Hoffmann | qemu_sglist_destroy(&s->sg); |
92 | b8842209 | Gerd Hoffmann | /* Note: media not present is the most likely case */
|
93 | b8842209 | Gerd Hoffmann | ide_atapi_cmd_error(s, SENSE_NOT_READY, |
94 | b8842209 | Gerd Hoffmann | ASC_MEDIUM_NOT_PRESENT); |
95 | b8842209 | Gerd Hoffmann | io->dma_end(opaque); |
96 | b8842209 | Gerd Hoffmann | return;
|
97 | b8842209 | Gerd Hoffmann | } |
98 | b8842209 | Gerd Hoffmann | } |
99 | b8842209 | Gerd Hoffmann | |
100 | b8842209 | Gerd Hoffmann | static void pmac_ide_transfer_cb(void *opaque, int ret) |
101 | b8842209 | Gerd Hoffmann | { |
102 | b8842209 | Gerd Hoffmann | DBDMA_io *io = opaque; |
103 | b8842209 | Gerd Hoffmann | MACIOIDEState *m = io->opaque; |
104 | b8842209 | Gerd Hoffmann | IDEState *s = idebus_active_if(&m->bus); |
105 | b8842209 | Gerd Hoffmann | int n;
|
106 | b8842209 | Gerd Hoffmann | int64_t sector_num; |
107 | b8842209 | Gerd Hoffmann | |
108 | b8842209 | Gerd Hoffmann | if (ret < 0) { |
109 | b8842209 | Gerd Hoffmann | m->aiocb = NULL;
|
110 | b8842209 | Gerd Hoffmann | qemu_sglist_destroy(&s->sg); |
111 | b8842209 | Gerd Hoffmann | ide_dma_error(s); |
112 | b8842209 | Gerd Hoffmann | io->dma_end(io); |
113 | b8842209 | Gerd Hoffmann | return;
|
114 | b8842209 | Gerd Hoffmann | } |
115 | b8842209 | Gerd Hoffmann | |
116 | b8842209 | Gerd Hoffmann | sector_num = ide_get_sector(s); |
117 | b8842209 | Gerd Hoffmann | if (s->io_buffer_size > 0) { |
118 | b8842209 | Gerd Hoffmann | m->aiocb = NULL;
|
119 | b8842209 | Gerd Hoffmann | qemu_sglist_destroy(&s->sg); |
120 | b8842209 | Gerd Hoffmann | n = (s->io_buffer_size + 0x1ff) >> 9; |
121 | b8842209 | Gerd Hoffmann | sector_num += n; |
122 | b8842209 | Gerd Hoffmann | ide_set_sector(s, sector_num); |
123 | b8842209 | Gerd Hoffmann | s->nsector -= n; |
124 | b8842209 | Gerd Hoffmann | } |
125 | b8842209 | Gerd Hoffmann | |
126 | b8842209 | Gerd Hoffmann | /* end of transfer ? */
|
127 | b8842209 | Gerd Hoffmann | if (s->nsector == 0) { |
128 | b8842209 | Gerd Hoffmann | s->status = READY_STAT | SEEK_STAT; |
129 | 9cdd03a7 | Gerd Hoffmann | ide_set_irq(s->bus); |
130 | b8842209 | Gerd Hoffmann | } |
131 | b8842209 | Gerd Hoffmann | |
132 | b8842209 | Gerd Hoffmann | /* end of DMA ? */
|
133 | b8842209 | Gerd Hoffmann | |
134 | b8842209 | Gerd Hoffmann | if (io->len == 0) { |
135 | b8842209 | Gerd Hoffmann | io->dma_end(io); |
136 | b8842209 | Gerd Hoffmann | return;
|
137 | b8842209 | Gerd Hoffmann | } |
138 | b8842209 | Gerd Hoffmann | |
139 | b8842209 | Gerd Hoffmann | /* launch next transfer */
|
140 | b8842209 | Gerd Hoffmann | |
141 | b8842209 | Gerd Hoffmann | s->io_buffer_index = 0;
|
142 | b8842209 | Gerd Hoffmann | s->io_buffer_size = io->len; |
143 | b8842209 | Gerd Hoffmann | |
144 | 02c7c992 | Blue Swirl | qemu_sglist_init(&s->sg, io->len / MACIO_PAGE_SIZE + 1);
|
145 | b8842209 | Gerd Hoffmann | qemu_sglist_add(&s->sg, io->addr, io->len); |
146 | b8842209 | Gerd Hoffmann | io->addr += io->len; |
147 | b8842209 | Gerd Hoffmann | io->len = 0;
|
148 | b8842209 | Gerd Hoffmann | |
149 | b8842209 | Gerd Hoffmann | if (s->is_read)
|
150 | b8842209 | Gerd Hoffmann | m->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num, |
151 | b8842209 | Gerd Hoffmann | pmac_ide_transfer_cb, io); |
152 | b8842209 | Gerd Hoffmann | else
|
153 | b8842209 | Gerd Hoffmann | m->aiocb = dma_bdrv_write(s->bs, &s->sg, sector_num, |
154 | b8842209 | Gerd Hoffmann | pmac_ide_transfer_cb, io); |
155 | b8842209 | Gerd Hoffmann | if (!m->aiocb)
|
156 | b8842209 | Gerd Hoffmann | pmac_ide_transfer_cb(io, -1);
|
157 | b8842209 | Gerd Hoffmann | } |
158 | b8842209 | Gerd Hoffmann | |
159 | b8842209 | Gerd Hoffmann | static void pmac_ide_transfer(DBDMA_io *io) |
160 | b8842209 | Gerd Hoffmann | { |
161 | b8842209 | Gerd Hoffmann | MACIOIDEState *m = io->opaque; |
162 | b8842209 | Gerd Hoffmann | IDEState *s = idebus_active_if(&m->bus); |
163 | b8842209 | Gerd Hoffmann | |
164 | b8842209 | Gerd Hoffmann | s->io_buffer_size = 0;
|
165 | cd8722bb | Markus Armbruster | if (s->drive_kind == IDE_CD) {
|
166 | b8842209 | Gerd Hoffmann | pmac_ide_atapi_transfer_cb(io, 0);
|
167 | b8842209 | Gerd Hoffmann | return;
|
168 | b8842209 | Gerd Hoffmann | } |
169 | b8842209 | Gerd Hoffmann | |
170 | b8842209 | Gerd Hoffmann | pmac_ide_transfer_cb(io, 0);
|
171 | b8842209 | Gerd Hoffmann | } |
172 | b8842209 | Gerd Hoffmann | |
173 | b8842209 | Gerd Hoffmann | static void pmac_ide_flush(DBDMA_io *io) |
174 | b8842209 | Gerd Hoffmann | { |
175 | b8842209 | Gerd Hoffmann | MACIOIDEState *m = io->opaque; |
176 | b8842209 | Gerd Hoffmann | |
177 | b8842209 | Gerd Hoffmann | if (m->aiocb)
|
178 | b8842209 | Gerd Hoffmann | qemu_aio_flush(); |
179 | b8842209 | Gerd Hoffmann | } |
180 | b8842209 | Gerd Hoffmann | |
181 | b8842209 | Gerd Hoffmann | /* PowerMac IDE memory IO */
|
182 | b8842209 | Gerd Hoffmann | static void pmac_ide_writeb (void *opaque, |
183 | c227f099 | Anthony Liguori | target_phys_addr_t addr, uint32_t val) |
184 | b8842209 | Gerd Hoffmann | { |
185 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
186 | b8842209 | Gerd Hoffmann | |
187 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
188 | b8842209 | Gerd Hoffmann | switch (addr) {
|
189 | b8842209 | Gerd Hoffmann | case 1 ... 7: |
190 | b8842209 | Gerd Hoffmann | ide_ioport_write(&d->bus, addr, val); |
191 | b8842209 | Gerd Hoffmann | break;
|
192 | b8842209 | Gerd Hoffmann | case 8: |
193 | b8842209 | Gerd Hoffmann | case 22: |
194 | b8842209 | Gerd Hoffmann | ide_cmd_write(&d->bus, 0, val);
|
195 | b8842209 | Gerd Hoffmann | break;
|
196 | b8842209 | Gerd Hoffmann | default:
|
197 | b8842209 | Gerd Hoffmann | break;
|
198 | b8842209 | Gerd Hoffmann | } |
199 | b8842209 | Gerd Hoffmann | } |
200 | b8842209 | Gerd Hoffmann | |
201 | c227f099 | Anthony Liguori | static uint32_t pmac_ide_readb (void *opaque,target_phys_addr_t addr) |
202 | b8842209 | Gerd Hoffmann | { |
203 | b8842209 | Gerd Hoffmann | uint8_t retval; |
204 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
205 | b8842209 | Gerd Hoffmann | |
206 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
207 | b8842209 | Gerd Hoffmann | switch (addr) {
|
208 | b8842209 | Gerd Hoffmann | case 1 ... 7: |
209 | b8842209 | Gerd Hoffmann | retval = ide_ioport_read(&d->bus, addr); |
210 | b8842209 | Gerd Hoffmann | break;
|
211 | b8842209 | Gerd Hoffmann | case 8: |
212 | b8842209 | Gerd Hoffmann | case 22: |
213 | b8842209 | Gerd Hoffmann | retval = ide_status_read(&d->bus, 0);
|
214 | b8842209 | Gerd Hoffmann | break;
|
215 | b8842209 | Gerd Hoffmann | default:
|
216 | b8842209 | Gerd Hoffmann | retval = 0xFF;
|
217 | b8842209 | Gerd Hoffmann | break;
|
218 | b8842209 | Gerd Hoffmann | } |
219 | b8842209 | Gerd Hoffmann | return retval;
|
220 | b8842209 | Gerd Hoffmann | } |
221 | b8842209 | Gerd Hoffmann | |
222 | b8842209 | Gerd Hoffmann | static void pmac_ide_writew (void *opaque, |
223 | c227f099 | Anthony Liguori | target_phys_addr_t addr, uint32_t val) |
224 | b8842209 | Gerd Hoffmann | { |
225 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
226 | b8842209 | Gerd Hoffmann | |
227 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
228 | b8842209 | Gerd Hoffmann | val = bswap16(val); |
229 | b8842209 | Gerd Hoffmann | if (addr == 0) { |
230 | b8842209 | Gerd Hoffmann | ide_data_writew(&d->bus, 0, val);
|
231 | b8842209 | Gerd Hoffmann | } |
232 | b8842209 | Gerd Hoffmann | } |
233 | b8842209 | Gerd Hoffmann | |
234 | c227f099 | Anthony Liguori | static uint32_t pmac_ide_readw (void *opaque,target_phys_addr_t addr) |
235 | b8842209 | Gerd Hoffmann | { |
236 | b8842209 | Gerd Hoffmann | uint16_t retval; |
237 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
238 | b8842209 | Gerd Hoffmann | |
239 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
240 | b8842209 | Gerd Hoffmann | if (addr == 0) { |
241 | b8842209 | Gerd Hoffmann | retval = ide_data_readw(&d->bus, 0);
|
242 | b8842209 | Gerd Hoffmann | } else {
|
243 | b8842209 | Gerd Hoffmann | retval = 0xFFFF;
|
244 | b8842209 | Gerd Hoffmann | } |
245 | b8842209 | Gerd Hoffmann | retval = bswap16(retval); |
246 | b8842209 | Gerd Hoffmann | return retval;
|
247 | b8842209 | Gerd Hoffmann | } |
248 | b8842209 | Gerd Hoffmann | |
249 | b8842209 | Gerd Hoffmann | static void pmac_ide_writel (void *opaque, |
250 | c227f099 | Anthony Liguori | target_phys_addr_t addr, uint32_t val) |
251 | b8842209 | Gerd Hoffmann | { |
252 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
253 | b8842209 | Gerd Hoffmann | |
254 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
255 | b8842209 | Gerd Hoffmann | val = bswap32(val); |
256 | b8842209 | Gerd Hoffmann | if (addr == 0) { |
257 | b8842209 | Gerd Hoffmann | ide_data_writel(&d->bus, 0, val);
|
258 | b8842209 | Gerd Hoffmann | } |
259 | b8842209 | Gerd Hoffmann | } |
260 | b8842209 | Gerd Hoffmann | |
261 | c227f099 | Anthony Liguori | static uint32_t pmac_ide_readl (void *opaque,target_phys_addr_t addr) |
262 | b8842209 | Gerd Hoffmann | { |
263 | b8842209 | Gerd Hoffmann | uint32_t retval; |
264 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
265 | b8842209 | Gerd Hoffmann | |
266 | b8842209 | Gerd Hoffmann | addr = (addr & 0xFFF) >> 4; |
267 | b8842209 | Gerd Hoffmann | if (addr == 0) { |
268 | b8842209 | Gerd Hoffmann | retval = ide_data_readl(&d->bus, 0);
|
269 | b8842209 | Gerd Hoffmann | } else {
|
270 | b8842209 | Gerd Hoffmann | retval = 0xFFFFFFFF;
|
271 | b8842209 | Gerd Hoffmann | } |
272 | b8842209 | Gerd Hoffmann | retval = bswap32(retval); |
273 | b8842209 | Gerd Hoffmann | return retval;
|
274 | b8842209 | Gerd Hoffmann | } |
275 | b8842209 | Gerd Hoffmann | |
276 | bdae2298 | Blue Swirl | static CPUWriteMemoryFunc * const pmac_ide_write[] = { |
277 | b8842209 | Gerd Hoffmann | pmac_ide_writeb, |
278 | b8842209 | Gerd Hoffmann | pmac_ide_writew, |
279 | b8842209 | Gerd Hoffmann | pmac_ide_writel, |
280 | b8842209 | Gerd Hoffmann | }; |
281 | b8842209 | Gerd Hoffmann | |
282 | bdae2298 | Blue Swirl | static CPUReadMemoryFunc * const pmac_ide_read[] = { |
283 | b8842209 | Gerd Hoffmann | pmac_ide_readb, |
284 | b8842209 | Gerd Hoffmann | pmac_ide_readw, |
285 | b8842209 | Gerd Hoffmann | pmac_ide_readl, |
286 | b8842209 | Gerd Hoffmann | }; |
287 | b8842209 | Gerd Hoffmann | |
288 | 44bfa332 | Juan Quintela | static const VMStateDescription vmstate_pmac = { |
289 | 44bfa332 | Juan Quintela | .name = "ide",
|
290 | 44bfa332 | Juan Quintela | .version_id = 3,
|
291 | 44bfa332 | Juan Quintela | .minimum_version_id = 0,
|
292 | 44bfa332 | Juan Quintela | .minimum_version_id_old = 0,
|
293 | 44bfa332 | Juan Quintela | .fields = (VMStateField []) { |
294 | 44bfa332 | Juan Quintela | VMSTATE_IDE_BUS(bus, MACIOIDEState), |
295 | 44bfa332 | Juan Quintela | VMSTATE_IDE_DRIVES(bus.ifs, MACIOIDEState), |
296 | 44bfa332 | Juan Quintela | VMSTATE_END_OF_LIST() |
297 | b8842209 | Gerd Hoffmann | } |
298 | 44bfa332 | Juan Quintela | }; |
299 | b8842209 | Gerd Hoffmann | |
300 | b8842209 | Gerd Hoffmann | static void pmac_ide_reset(void *opaque) |
301 | b8842209 | Gerd Hoffmann | { |
302 | b8842209 | Gerd Hoffmann | MACIOIDEState *d = opaque; |
303 | b8842209 | Gerd Hoffmann | |
304 | 4a643563 | Blue Swirl | ide_bus_reset(&d->bus); |
305 | b8842209 | Gerd Hoffmann | } |
306 | b8842209 | Gerd Hoffmann | |
307 | b8842209 | Gerd Hoffmann | /* hd_table must contain 4 block drivers */
|
308 | b8842209 | Gerd Hoffmann | /* PowerMac uses memory mapped registers, not I/O. Return the memory
|
309 | b8842209 | Gerd Hoffmann | I/O index to access the ide. */
|
310 | f455e98c | Gerd Hoffmann | int pmac_ide_init (DriveInfo **hd_table, qemu_irq irq,
|
311 | b8842209 | Gerd Hoffmann | void *dbdma, int channel, qemu_irq dma_irq) |
312 | b8842209 | Gerd Hoffmann | { |
313 | b8842209 | Gerd Hoffmann | MACIOIDEState *d; |
314 | b8842209 | Gerd Hoffmann | int pmac_ide_memory;
|
315 | b8842209 | Gerd Hoffmann | |
316 | b8842209 | Gerd Hoffmann | d = qemu_mallocz(sizeof(MACIOIDEState));
|
317 | 57234ee4 | Markus Armbruster | ide_init2_with_non_qdev_drives(&d->bus, hd_table[0], hd_table[1], irq); |
318 | b8842209 | Gerd Hoffmann | |
319 | b8842209 | Gerd Hoffmann | if (dbdma)
|
320 | b8842209 | Gerd Hoffmann | DBDMA_register_channel(dbdma, channel, dma_irq, pmac_ide_transfer, pmac_ide_flush, d); |
321 | b8842209 | Gerd Hoffmann | |
322 | b8842209 | Gerd Hoffmann | pmac_ide_memory = cpu_register_io_memory(pmac_ide_read, |
323 | b8842209 | Gerd Hoffmann | pmac_ide_write, d); |
324 | 44bfa332 | Juan Quintela | vmstate_register(0, &vmstate_pmac, d);
|
325 | b8842209 | Gerd Hoffmann | qemu_register_reset(pmac_ide_reset, d); |
326 | b8842209 | Gerd Hoffmann | |
327 | b8842209 | Gerd Hoffmann | return pmac_ide_memory;
|
328 | b8842209 | Gerd Hoffmann | } |