Revision 5aca8c3b

b/hw/cs4231.c
30 30
 * In addition to Crystal CS4231 there is a DMA controller on Sparc.
31 31
 */
32 32
#define CS_MAXADDR 0x3f
33
#define CS_SIZE (CS_MAXADDR + 1)
33 34
#define CS_REGS 16
34 35
#define CS_DREGS 32
35 36
#define CS_MAXDREG (CS_DREGS - 1)
......
173 174
        return;
174 175

  
175 176
    cs_io_memory = cpu_register_io_memory(0, cs_mem_read, cs_mem_write, s);
176
    cpu_register_physical_memory(base, CS_MAXADDR, cs_io_memory);
177
    cpu_register_physical_memory(base, CS_SIZE, cs_io_memory);
177 178
    register_savevm("cs4231", base, 1, cs_save, cs_load, s);
178 179
    qemu_register_reset(cs_reset, s);
179 180
    cs_reset(s);
b/hw/esp.c
41 41
#define DPRINTF(fmt, args...)
42 42
#endif
43 43

  
44
#define ESP_MAXREG 0x3f
44
#define ESP_MASK 0x3f
45
#define ESP_REGS 16
46
#define ESP_SIZE (ESP_REGS * 4)
45 47
#define TI_BUFSZ 32
46 48
/* The HBA is ID 7, so for simplicitly limit to 7 devices.  */
47 49
#define ESP_MAX_DEVS      7
......
50 52

  
51 53
struct ESPState {
52 54
    BlockDriverState **bd;
53
    uint8_t rregs[ESP_MAXREG];
54
    uint8_t wregs[ESP_MAXREG];
55
    uint8_t rregs[ESP_REGS];
56
    uint8_t wregs[ESP_REGS];
55 57
    int32_t ti_size;
56 58
    uint32_t ti_rptr, ti_wptr;
57 59
    uint8_t ti_buf[TI_BUFSZ];
......
327 329
    }
328 330
}
329 331

  
330
void esp_reset(void *opaque)
332
static void esp_reset(void *opaque)
331 333
{
332 334
    ESPState *s = opaque;
333 335

  
334
    memset(s->rregs, 0, ESP_MAXREG);
335
    memset(s->wregs, 0, ESP_MAXREG);
336
    memset(s->rregs, 0, ESP_REGS);
337
    memset(s->wregs, 0, ESP_REGS);
336 338
    s->rregs[0x0e] = 0x4; // Indicate fas100a
337 339
    s->ti_size = 0;
338 340
    s->ti_rptr = 0;
......
346 348
    ESPState *s = opaque;
347 349
    uint32_t saddr;
348 350

  
349
    saddr = (addr & ESP_MAXREG) >> 2;
351
    saddr = (addr & ESP_MASK) >> 2;
350 352
    DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]);
351 353
    switch (saddr) {
352 354
    case 2:
......
384 386
    ESPState *s = opaque;
385 387
    uint32_t saddr;
386 388

  
387
    saddr = (addr & ESP_MAXREG) >> 2;
389
    saddr = (addr & ESP_MASK) >> 2;
388 390
    DPRINTF("write reg[%d]: 0x%2.2x -> 0x%2.2x\n", saddr, s->wregs[saddr], val);
389 391
    switch (saddr) {
390 392
    case 0:
......
501 503
{
502 504
    ESPState *s = opaque;
503 505

  
504
    qemu_put_buffer(f, s->rregs, ESP_MAXREG);
505
    qemu_put_buffer(f, s->wregs, ESP_MAXREG);
506
    qemu_put_buffer(f, s->rregs, ESP_REGS);
507
    qemu_put_buffer(f, s->wregs, ESP_REGS);
506 508
    qemu_put_be32s(f, &s->ti_size);
507 509
    qemu_put_be32s(f, &s->ti_rptr);
508 510
    qemu_put_be32s(f, &s->ti_wptr);
......
523 525
    if (version_id != 3)
524 526
        return -EINVAL; // Cannot emulate 2
525 527

  
526
    qemu_get_buffer(f, s->rregs, ESP_MAXREG);
527
    qemu_get_buffer(f, s->wregs, ESP_MAXREG);
528
    qemu_get_buffer(f, s->rregs, ESP_REGS);
529
    qemu_get_buffer(f, s->wregs, ESP_REGS);
528 530
    qemu_get_be32s(f, &s->ti_size);
529 531
    qemu_get_be32s(f, &s->ti_rptr);
530 532
    qemu_get_be32s(f, &s->ti_wptr);
......
574 576

  
575 577
    s->bd = bd;
576 578
    s->dma_opaque = dma_opaque;
579
    sparc32_dma_set_reset_data(dma_opaque, esp_reset, s);
577 580

  
578 581
    esp_io_memory = cpu_register_io_memory(0, esp_mem_read, esp_mem_write, s);
579
    cpu_register_physical_memory(espaddr, ESP_MAXREG*4, esp_io_memory);
582
    cpu_register_physical_memory(espaddr, ESP_SIZE, esp_io_memory);
580 583

  
581 584
    esp_reset(s);
582 585

  
b/hw/pcnet.c
1554 1554
    return val;
1555 1555
}
1556 1556

  
1557
void pcnet_h_reset(void *opaque)
1557
static void pcnet_h_reset(void *opaque)
1558 1558
{
1559 1559
    PCNetState *s = opaque;
1560 1560
    int i;
......
2032 2032
        cpu_register_io_memory(0, lance_mem_read, lance_mem_write, d);
2033 2033

  
2034 2034
    d->dma_opaque = dma_opaque;
2035
    sparc32_dma_set_reset_data(dma_opaque, pcnet_h_reset, d);
2036

  
2035 2037
    cpu_register_physical_memory(leaddr, 4, lance_io_memory);
2036 2038

  
2037 2039
    d->irq = irq;
b/hw/slavio_intctl.c
58 58
} SLAVIO_INTCTLState;
59 59

  
60 60
#define INTCTL_MAXADDR 0xf
61
#define INTCTL_SIZE (INTCTL_MAXADDR + 1)
61 62
#define INTCTLM_MAXADDR 0x13
63
#define INTCTLM_SIZE (INTCTLM_MAXADDR + 1)
62 64
#define INTCTLM_MASK 0x1f
63 65
static void slavio_check_interrupts(void *opaque);
64 66

  
......
386 388
    s->intbit_to_level = intbit_to_level;
387 389
    for (i = 0; i < MAX_CPUS; i++) {
388 390
	slavio_intctl_io_memory = cpu_register_io_memory(0, slavio_intctl_mem_read, slavio_intctl_mem_write, s);
389
	cpu_register_physical_memory(addr + i * TARGET_PAGE_SIZE, INTCTL_MAXADDR, slavio_intctl_io_memory);
391
	cpu_register_physical_memory(addr + i * TARGET_PAGE_SIZE, INTCTL_SIZE,
392
                                     slavio_intctl_io_memory);
390 393
    }
391 394

  
392 395
    slavio_intctlm_io_memory = cpu_register_io_memory(0, slavio_intctlm_mem_read, slavio_intctlm_mem_write, s);
393
    cpu_register_physical_memory(addrg, INTCTLM_MAXADDR, slavio_intctlm_io_memory);
396
    cpu_register_physical_memory(addrg, INTCTLM_SIZE, slavio_intctlm_io_memory);
394 397

  
395 398
    register_savevm("slavio_intctl", addr, 1, slavio_intctl_save, slavio_intctl_load, s);
396 399
    qemu_register_reset(slavio_intctl_reset, s);
b/hw/slavio_misc.c
47 47
    uint8_t diag, mctrl, sysctrl;
48 48
} MiscState;
49 49

  
50
#define MISC_MAXADDR 1
50
#define MISC_SIZE 1
51 51

  
52 52
static void slavio_misc_update_irq(void *opaque)
53 53
{
......
224 224

  
225 225
    slavio_misc_io_memory = cpu_register_io_memory(0, slavio_misc_mem_read, slavio_misc_mem_write, s);
226 226
    // Slavio control
227
    cpu_register_physical_memory(base + 0x1800000, MISC_MAXADDR, slavio_misc_io_memory);
227
    cpu_register_physical_memory(base + 0x1800000, MISC_SIZE,
228
                                 slavio_misc_io_memory);
228 229
    // AUX 1
229
    cpu_register_physical_memory(base + 0x1900000, MISC_MAXADDR, slavio_misc_io_memory);
230
    cpu_register_physical_memory(base + 0x1900000, MISC_SIZE,
231
                                 slavio_misc_io_memory);
230 232
    // AUX 2
231
    cpu_register_physical_memory(base + 0x1910000, MISC_MAXADDR, slavio_misc_io_memory);
233
    cpu_register_physical_memory(base + 0x1910000, MISC_SIZE,
234
                                 slavio_misc_io_memory);
232 235
    // Diagnostics
233
    cpu_register_physical_memory(base + 0x1a00000, MISC_MAXADDR, slavio_misc_io_memory);
236
    cpu_register_physical_memory(base + 0x1a00000, MISC_SIZE,
237
                                 slavio_misc_io_memory);
234 238
    // Modem control
235
    cpu_register_physical_memory(base + 0x1b00000, MISC_MAXADDR, slavio_misc_io_memory);
239
    cpu_register_physical_memory(base + 0x1b00000, MISC_SIZE,
240
                                 slavio_misc_io_memory);
236 241
    // System control
237
    cpu_register_physical_memory(base + 0x1f00000, MISC_MAXADDR, slavio_misc_io_memory);
242
    cpu_register_physical_memory(base + 0x1f00000, MISC_SIZE,
243
                                 slavio_misc_io_memory);
238 244
    // Power management
239
    cpu_register_physical_memory(power_base, MISC_MAXADDR, slavio_misc_io_memory);
245
    cpu_register_physical_memory(power_base, MISC_SIZE, slavio_misc_io_memory);
240 246

  
241 247
    s->irq = irq;
242 248

  
b/hw/slavio_serial.c
102 102
};
103 103

  
104 104
#define SERIAL_MAXADDR 7
105
#define SERIAL_SIZE (SERIAL_MAXADDR + 1)
105 106

  
106 107
static void handle_kbd_command(ChannelState *s, int val);
107 108
static int serial_can_receive(void *opaque);
......
178 179
    int i;
179 180

  
180 181
    s->reg = 0;
181
    for (i = 0; i < SERIAL_MAXADDR; i++) {
182
    for (i = 0; i < SERIAL_SIZE; i++) {
182 183
	s->rregs[i] = 0;
183 184
	s->wregs[i] = 0;
184 185
    }
......
598 599
        return NULL;
599 600

  
600 601
    slavio_serial_io_memory = cpu_register_io_memory(0, slavio_serial_mem_read, slavio_serial_mem_write, s);
601
    cpu_register_physical_memory(base, SERIAL_MAXADDR, slavio_serial_io_memory);
602
    cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory);
602 603

  
603 604
    s->chn[0].chr = chr1;
604 605
    s->chn[1].chr = chr2;
......
723 724
    s->chn[1].type = kbd;
724 725

  
725 726
    slavio_serial_io_memory = cpu_register_io_memory(0, slavio_serial_mem_read, slavio_serial_mem_write, s);
726
    cpu_register_physical_memory(base, SERIAL_MAXADDR, slavio_serial_io_memory);
727
    cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory);
727 728

  
728 729
    qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0, "QEMU Sun Mouse");
729 730
    qemu_add_kbd_event_handler(sunkbd_event, &s->chn[1]);
b/hw/slavio_timer.c
59 59
} SLAVIO_TIMERState;
60 60

  
61 61
#define TIMER_MAXADDR 0x1f
62
#define TIMER_SIZE (TIMER_MAXADDR + 1)
62 63

  
63 64
// Update count, set irq, update expire_time
64 65
// Convert from ptimer countdown units
......
260 261

  
261 262
    slavio_timer_io_memory = cpu_register_io_memory(0, slavio_timer_mem_read,
262 263
						    slavio_timer_mem_write, s);
263
    cpu_register_physical_memory(addr, TIMER_MAXADDR, slavio_timer_io_memory);
264
    cpu_register_physical_memory(addr, TIMER_SIZE, slavio_timer_io_memory);
264 265
    register_savevm("slavio_timer", addr, 2, slavio_timer_save, slavio_timer_load, s);
265 266
    qemu_register_reset(slavio_timer_reset, s);
266 267
    slavio_timer_reset(s);
b/hw/sparc32_dma.c
41 41
#define DPRINTF(fmt, args...)
42 42
#endif
43 43

  
44
#define DMA_REGS 8
45
#define DMA_MAXADDR (DMA_REGS * 4 - 1)
44
#define DMA_REGS 4
45
#define DMA_SIZE (4 * sizeof(uint32_t))
46
#define DMA_MAXADDR (DMA_SIZE - 1)
46 47

  
47 48
#define DMA_VER 0xa0000000
48 49
#define DMA_INTR 1
49 50
#define DMA_INTREN 0x10
50 51
#define DMA_WRITE_MEM 0x100
51 52
#define DMA_LOADED 0x04000000
53
#define DMA_DRAIN_FIFO 0x40
52 54
#define DMA_RESET 0x80
53 55

  
54 56
typedef struct DMAState DMAState;
55 57

  
56 58
struct DMAState {
57 59
    uint32_t dmaregs[DMA_REGS];
58
    qemu_irq espirq, leirq;
59
    void *iommu, *esp_opaque, *lance_opaque;
60
    qemu_irq irq;
61
    void *iommu, *dev_opaque;
62
    void (*dev_reset)(void *dev_opaque);
60 63
    qemu_irq *pic;
61 64
};
62 65

  
......
69 72

  
70 73
    DPRINTF("DMA write, direction: %c, addr 0x%8.8x\n",
71 74
            s->dmaregs[0] & DMA_WRITE_MEM ? 'w': 'r', s->dmaregs[1]);
72
    addr |= s->dmaregs[7];
75
    addr |= s->dmaregs[3];
73 76
    if (do_bswap) {
74 77
        sparc_iommu_memory_read(s->iommu, addr, buf, len);
75 78
    } else {
......
91 94

  
92 95
    DPRINTF("DMA read, direction: %c, addr 0x%8.8x\n",
93 96
            s->dmaregs[0] & DMA_WRITE_MEM ? 'w': 'r', s->dmaregs[1]);
94
    addr |= s->dmaregs[7];
97
    addr |= s->dmaregs[3];
95 98
    if (do_bswap) {
96 99
        sparc_iommu_memory_write(s->iommu, addr, buf, len);
97 100
    } else {
......
118 121

  
119 122
    DPRINTF("Raise ESP IRQ\n");
120 123
    s->dmaregs[0] |= DMA_INTR;
121
    qemu_irq_raise(s->espirq);
124
    qemu_irq_raise(s->irq);
122 125
}
123 126

  
124 127
void espdma_clear_irq(void *opaque)
......
127 130

  
128 131
    s->dmaregs[0] &= ~DMA_INTR;
129 132
    DPRINTF("Lower ESP IRQ\n");
130
    qemu_irq_lower(s->espirq);
133
    qemu_irq_lower(s->irq);
131 134
}
132 135

  
133 136
void espdma_memory_read(void *opaque, uint8_t *buf, int len)
......
158 161
    uint32_t saddr;
159 162

  
160 163
    saddr = (addr & DMA_MAXADDR) >> 2;
161
    DPRINTF("read dmareg[%d]: 0x%8.8x\n", saddr, s->dmaregs[saddr]);
164
    DPRINTF("read dmareg " TARGET_FMT_plx ": 0x%8.8x\n", addr,
165
            s->dmaregs[saddr]);
162 166

  
163 167
    return s->dmaregs[saddr];
164 168
}
......
169 173
    uint32_t saddr;
170 174

  
171 175
    saddr = (addr & DMA_MAXADDR) >> 2;
172
    DPRINTF("write dmareg[%d]: 0x%8.8x -> 0x%8.8x\n", saddr, s->dmaregs[saddr], val);
176
    DPRINTF("write dmareg " TARGET_FMT_plx ": 0x%8.8x -> 0x%8.8x\n", addr,
177
            s->dmaregs[saddr], val);
173 178
    switch (saddr) {
174 179
    case 0:
175 180
        if (!(val & DMA_INTREN)) {
176
            DPRINTF("Lower ESP IRQ\n");
177
            qemu_irq_lower(s->espirq);
181
            DPRINTF("Lower IRQ\n");
182
            qemu_irq_lower(s->irq);
178 183
        }
179 184
        if (val & DMA_RESET) {
180
            esp_reset(s->esp_opaque);
181
        } else if (val & 0x40) {
182
            val &= ~0x40;
185
            s->dev_reset(s->dev_opaque);
186
        } else if (val & DMA_DRAIN_FIFO) {
187
            val &= ~DMA_DRAIN_FIFO;
183 188
        } else if (val == 0)
184
            val = 0x40;
189
            val = DMA_DRAIN_FIFO;
185 190
        val &= 0x0fffffff;
186 191
        val |= DMA_VER;
187 192
        break;
188 193
    case 1:
189 194
        s->dmaregs[0] |= DMA_LOADED;
190 195
        break;
191
    case 4:
192
        /* ??? Should this mask out the lance IRQ?  The NIC may re-assert
193
           this IRQ unexpectedly.  */
194
        if (!(val & DMA_INTREN)) {
195
            DPRINTF("Lower Lance IRQ\n");
196
            qemu_irq_lower(s->leirq);
197
        }
198
        if (val & DMA_RESET)
199
            pcnet_h_reset(s->lance_opaque);
200
        val &= 0x0fffffff;
201
        val |= DMA_VER;
202
        break;
203 196
    default:
204 197
        break;
205 198
    }
......
222 215
{
223 216
    DMAState *s = opaque;
224 217

  
225
    memset(s->dmaregs, 0, DMA_REGS * 4);
218
    memset(s->dmaregs, 0, DMA_SIZE);
226 219
    s->dmaregs[0] = DMA_VER;
227
    s->dmaregs[4] = DMA_VER;
228 220
}
229 221

  
230 222
static void dma_save(QEMUFile *f, void *opaque)
......
241 233
    DMAState *s = opaque;
242 234
    unsigned int i;
243 235

  
244
    if (version_id != 1)
236
    if (version_id != 2)
245 237
        return -EINVAL;
246 238
    for (i = 0; i < DMA_REGS; i++)
247 239
        qemu_get_be32s(f, &s->dmaregs[i]);
......
249 241
    return 0;
250 242
}
251 243

  
252
void *sparc32_dma_init(target_phys_addr_t daddr, qemu_irq espirq,
253
                       qemu_irq leirq, void *iommu)
244
void *sparc32_dma_init(target_phys_addr_t daddr, qemu_irq irq, void *iommu)
254 245
{
255 246
    DMAState *s;
256 247
    int dma_io_memory;
......
259 250
    if (!s)
260 251
        return NULL;
261 252

  
262
    s->espirq = espirq;
263
    s->leirq = leirq;
253
    s->irq = irq;
264 254
    s->iommu = iommu;
265 255

  
266 256
    dma_io_memory = cpu_register_io_memory(0, dma_mem_read, dma_mem_write, s);
267
    cpu_register_physical_memory(daddr, 16 * 2, dma_io_memory);
257
    cpu_register_physical_memory(daddr, DMA_SIZE, dma_io_memory);
268 258

  
269
    register_savevm("sparc32_dma", daddr, 1, dma_save, dma_load, s);
259
    register_savevm("sparc32_dma", daddr, 2, dma_save, dma_load, s);
270 260
    qemu_register_reset(dma_reset, s);
271 261

  
272 262
    return s;
273 263
}
274 264

  
275
void sparc32_dma_set_reset_data(void *opaque, void *esp_opaque,
276
                                void *lance_opaque)
265
void sparc32_dma_set_reset_data(void *opaque, void (*dev_reset)(void *opaque),
266
                                void *dev_opaque)
277 267
{
278 268
    DMAState *s = opaque;
279 269

  
280
    s->esp_opaque = esp_opaque;
281
    s->lance_opaque = lance_opaque;
270
    s->dev_reset = dev_reset;
271
    s->dev_opaque = dev_opaque;
282 272
}
b/hw/sun4m.c
262 262
{
263 263
    CPUState *env, *envs[MAX_CPUS];
264 264
    unsigned int i;
265
    void *iommu, *dma, *main_esp, *main_lance = NULL;
265
    void *iommu, *espdma, *ledma, *main_esp, *main_lance = NULL;
266 266
    const sparc_def_t *def;
267 267
    qemu_irq *slavio_irq;
268 268

  
......
295 295
    for(i = 0; i < smp_cpus; i++) {
296 296
        slavio_intctl_set_cpu(slavio_intctl, i, envs[i]);
297 297
    }
298
    dma = sparc32_dma_init(hwdef->dma_base, slavio_irq[hwdef->esp_irq],
299
                           slavio_irq[hwdef->le_irq], iommu);
298
    espdma = sparc32_dma_init(hwdef->dma_base, slavio_irq[hwdef->esp_irq],
299
                              iommu);
300
    ledma = sparc32_dma_init(hwdef->dma_base + 16ULL,
301
                             slavio_irq[hwdef->le_irq], iommu);
300 302

  
301 303
    if (graphic_depth != 8 && graphic_depth != 24) {
302 304
        fprintf(stderr, "qemu: Unsupported depth: %d\n", graphic_depth);
......
307 309
    if (nd_table[0].vlan) {
308 310
        if (nd_table[0].model == NULL
309 311
            || strcmp(nd_table[0].model, "lance") == 0) {
310
            main_lance = lance_init(&nd_table[0], hwdef->le_base, dma,
312
            main_lance = lance_init(&nd_table[0], hwdef->le_base, ledma,
311 313
                                    slavio_irq[hwdef->le_irq]);
312 314
        } else {
313 315
            fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd_table[0].model);
......
329 331
    slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq],
330 332
                       serial_hds[1], serial_hds[0]);
331 333
    fdctrl_init(slavio_irq[hwdef->fd_irq], 0, 1, hwdef->fd_base, fd_table);
332
    main_esp = esp_init(bs_table, hwdef->esp_base, dma);
334
    main_esp = esp_init(bs_table, hwdef->esp_base, espdma);
333 335

  
334 336
    for (i = 0; i < MAX_DISKS; i++) {
335 337
        if (bs_table[i]) {
......
341 343
                                   slavio_irq[hwdef->me_irq]);
342 344
    if (hwdef->cs_base != (target_phys_addr_t)-1)
343 345
        cs_init(hwdef->cs_base, hwdef->cs_irq, slavio_intctl);
344
    sparc32_dma_set_reset_data(dma, main_esp, main_lance);
345 346
}
346 347

  
347 348
static void sun4m_load_kernel(long vram_size, int ram_size, int boot_device,
b/vl.h
1046 1046
/* pcnet.c */
1047 1047

  
1048 1048
void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn);
1049
void pcnet_h_reset(void *opaque);
1050 1049
void *lance_init(NICInfo *nd, target_phys_addr_t leaddr, void *dma_opaque,
1051 1050
                 qemu_irq irq);
1052 1051

  
......
1265 1264
void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id);
1266 1265
void *esp_init(BlockDriverState **bd, target_phys_addr_t espaddr,
1267 1266
               void *dma_opaque);
1268
void esp_reset(void *opaque);
1269 1267

  
1270 1268
/* sparc32_dma.c */
1271
void *sparc32_dma_init(target_phys_addr_t daddr, qemu_irq espirq,
1272
                       qemu_irq leirq, void *iommu);
1269
void *sparc32_dma_init(target_phys_addr_t daddr, qemu_irq irq, void *iommu);
1273 1270
void ledma_set_irq(void *opaque, int isr);
1274 1271
void ledma_memory_read(void *opaque, target_phys_addr_t addr, 
1275 1272
                       uint8_t *buf, int len, int do_bswap);
......
1279 1276
void espdma_clear_irq(void *opaque);
1280 1277
void espdma_memory_read(void *opaque, uint8_t *buf, int len);
1281 1278
void espdma_memory_write(void *opaque, uint8_t *buf, int len);
1282
void sparc32_dma_set_reset_data(void *opaque, void *esp_opaque,
1283
                                void *lance_opaque);
1279
void sparc32_dma_set_reset_data(void *opaque, void (*dev_reset)(void *opaque),
1280
                                void *dev_opaque);
1284 1281

  
1285 1282
/* cs4231.c */
1286 1283
void cs_init(target_phys_addr_t base, int irq, void *intctl);

Also available in: Unified diff