Revision 4b48bf05

b/hw/eccmemctl.c
335 335
    ecc_reset(s);
336 336
}
337 337

  
338
void ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version)
339
{
340
    DeviceState *dev;
341
    SysBusDevice *s;
342

  
343
    dev = qdev_create(NULL, "eccmemctl");
344
    qdev_prop_set_uint32(dev, "version", version);
345
    qdev_init(dev);
346
    s = sysbus_from_qdev(dev);
347
    sysbus_connect_irq(s, 0, irq);
348
    sysbus_mmio_map(s, 0, base);
349
    if (version == ECC_MCC) { // SS-600MP only
350
        sysbus_mmio_map(s, 1, base + 0x1000);
351
    }
352
}
353

  
354 338
static SysBusDeviceInfo ecc_info = {
355 339
    .init = ecc_init1,
356 340
    .qdev.name  = "eccmemctl",
b/hw/iommu.c
366 366
    s->regs[IOMMU_MASK_ID] = IOMMU_TS_MASK;
367 367
}
368 368

  
369
void *iommu_init(target_phys_addr_t addr, uint32_t version, qemu_irq irq)
370
{
371
    DeviceState *dev;
372
    SysBusDevice *s;
373
    IOMMUState *d;
374

  
375
    dev = qdev_create(NULL, "iommu");
376
    qdev_prop_set_uint32(dev, "version", version);
377
    qdev_init(dev);
378
    s = sysbus_from_qdev(dev);
379
    sysbus_connect_irq(s, 0, irq);
380
    sysbus_mmio_map(s, 0, addr);
381

  
382
    d = FROM_SYSBUS(IOMMUState, s);
383

  
384
    return d;
385
}
386

  
387 369
static void iommu_init1(SysBusDevice *dev)
388 370
{
389 371
    IOMMUState *s = FROM_SYSBUS(IOMMUState, dev);
b/hw/sbi.c
131 131
    }
132 132
}
133 133

  
134
DeviceState *sbi_init(target_phys_addr_t addr, qemu_irq **parent_irq)
135
{
136
    DeviceState *dev;
137
    SysBusDevice *s;
138
    unsigned int i;
139

  
140
    dev = qdev_create(NULL, "sbi");
141
    qdev_init(dev);
142

  
143
    s = sysbus_from_qdev(dev);
144

  
145
    for (i = 0; i < MAX_CPUS; i++) {
146
        sysbus_connect_irq(s, i, *parent_irq[i]);
147
    }
148

  
149
    sysbus_mmio_map(s, 0, addr);
150

  
151
    return dev;
152
}
153

  
154 134
static void sbi_init1(SysBusDevice *dev)
155 135
{
156 136
    SBIState *s = FROM_SYSBUS(SBIState, dev);
b/hw/slavio_intctl.c
416 416
    slavio_intctl_reset(s);
417 417
}
418 418

  
419
DeviceState *slavio_intctl_init(target_phys_addr_t addr,
420
                                target_phys_addr_t addrg,
421
                                const uint32_t *intbit_to_level,
422
                                qemu_irq **parent_irq, unsigned int cputimer)
423
{
424
    DeviceState *dev;
425
    SysBusDevice *s;
426
    unsigned int i, j;
427

  
428
    dev = qdev_create(NULL, "slavio_intctl");
429
    qdev_prop_set_ptr(dev, "intbit_to_level", (void *)intbit_to_level);
430
    qdev_prop_set_uint32(dev, "cputimer_bit", cputimer);
431
    qdev_init(dev);
432

  
433
    s = sysbus_from_qdev(dev);
434

  
435
    for (i = 0; i < MAX_CPUS; i++) {
436
        for (j = 0; j < MAX_PILS; j++) {
437
            sysbus_connect_irq(s, i * MAX_PILS + j, parent_irq[i][j]);
438
        }
439
    }
440
    sysbus_mmio_map(s, 0, addrg);
441
    for (i = 0; i < MAX_CPUS; i++) {
442
        sysbus_mmio_map(s, i + 1, addr + i * TARGET_PAGE_SIZE);
443
    }
444

  
445
    return dev;
446
}
447

  
448 419
static SysBusDeviceInfo slavio_intctl_info = {
449 420
    .init = slavio_intctl_init1,
450 421
    .qdev.name  = "slavio_intctl",
b/hw/slavio_misc.c
63 63
#define MISC_SIZE 1
64 64
#define SYSCTRL_SIZE 4
65 65

  
66
#define MISC_LEDS 0x01600000
67
#define MISC_CFG  0x01800000
68
#define MISC_DIAG 0x01a00000
69
#define MISC_MDM  0x01b00000
70
#define MISC_SYS  0x01f00000
71

  
72 66
#define AUX1_TC        0x02
73 67

  
74 68
#define AUX2_PWROFF    0x01
......
440 434
    return 0;
441 435
}
442 436

  
443
void *slavio_misc_init(target_phys_addr_t base,
444
                       target_phys_addr_t aux1_base,
445
                       target_phys_addr_t aux2_base, qemu_irq irq,
446
                       qemu_irq fdc_tc)
447
{
448
    DeviceState *dev;
449
    SysBusDevice *s;
450
    MiscState *d;
451

  
452
    dev = qdev_create(NULL, "slavio_misc");
453
    qdev_init(dev);
454
    s = sysbus_from_qdev(dev);
455
    if (base) {
456
        /* 8 bit registers */
457
        /* Slavio control */
458
        sysbus_mmio_map(s, 0, base + MISC_CFG);
459
        /* Diagnostics */
460
        sysbus_mmio_map(s, 1, base + MISC_DIAG);
461
        /* Modem control */
462
        sysbus_mmio_map(s, 2, base + MISC_MDM);
463
        /* 16 bit registers */
464
        /* ss600mp diag LEDs */
465
        sysbus_mmio_map(s, 3, base + MISC_LEDS);
466
        /* 32 bit registers */
467
        /* System control */
468
        sysbus_mmio_map(s, 4, base + MISC_SYS);
469
    }
470
    if (aux1_base) {
471
        /* AUX 1 (Misc System Functions) */
472
        sysbus_mmio_map(s, 5, aux1_base);
473
    }
474
    if (aux2_base) {
475
        /* AUX 2 (Software Powerdown Control) */
476
        sysbus_mmio_map(s, 6, aux2_base);
477
    }
478
    sysbus_connect_irq(s, 0, irq);
479
    sysbus_connect_irq(s, 1, fdc_tc);
480

  
481
    d = FROM_SYSBUS(MiscState, s);
482

  
483
    return d;
484
}
485

  
486 437
static void apc_init1(SysBusDevice *dev)
487 438
{
488 439
    APCState *s = FROM_SYSBUS(APCState, dev);
......
495 446
    sysbus_init_mmio(dev, MISC_SIZE, io);
496 447
}
497 448

  
498
void apc_init(target_phys_addr_t power_base, qemu_irq cpu_halt)
499
{
500
    DeviceState *dev;
501
    SysBusDevice *s;
502

  
503
    dev = qdev_create(NULL, "apc");
504
    qdev_init(dev);
505
    s = sysbus_from_qdev(dev);
506
    /* Power management (APC) XXX: not a Slavio device */
507
    sysbus_mmio_map(s, 0, power_base);
508
    sysbus_connect_irq(s, 0, cpu_halt);
509
}
510

  
511 449
static void slavio_misc_init1(SysBusDevice *dev)
512 450
{
513 451
    MiscState *s = FROM_SYSBUS(MiscState, dev);
b/hw/slavio_timer.c
76 76
#define SYS_TIMER_SIZE 0x14
77 77
#define CPU_TIMER_SIZE 0x10
78 78

  
79
#define SYS_TIMER_OFFSET      0x10000ULL
80
#define CPU_TIMER_OFFSET(cpu) (0x1000ULL * cpu)
81

  
82 79
#define TIMER_LIMIT         0
83 80
#define TIMER_COUNTER       1
84 81
#define TIMER_COUNTER_NORST 2
......
415 412
    s->cputimer_mode = 0;
416 413
}
417 414

  
418
void slavio_timer_init_all(target_phys_addr_t addr, qemu_irq master_irq,
419
                           qemu_irq *cpu_irqs, unsigned int num_cpus)
420
{
421
    DeviceState *dev;
422
    SysBusDevice *s;
423
    unsigned int i;
424

  
425
    dev = qdev_create(NULL, "slavio_timer");
426
    qdev_prop_set_uint32(dev, "num_cpus", num_cpus);
427
    qdev_init(dev);
428
    s = sysbus_from_qdev(dev);
429
    sysbus_connect_irq(s, 0, master_irq);
430
    sysbus_mmio_map(s, 0, addr + SYS_TIMER_OFFSET);
431

  
432
    for (i = 0; i < MAX_CPUS; i++) {
433
        sysbus_mmio_map(s, i + 1, addr + (target_phys_addr_t)CPU_TIMER_OFFSET(i));
434
        sysbus_connect_irq(s, i + 1, cpu_irqs[i]);
435
    }
436
}
437

  
438 415
static void slavio_timer_init1(SysBusDevice *dev)
439 416
{
440 417
    int io;
b/hw/sun4c_intctl.c
198 198
    s->pending = 0;
199 199
}
200 200

  
201
DeviceState *sun4c_intctl_init(target_phys_addr_t addr, qemu_irq *parent_irq)
202
{
203
    DeviceState *dev;
204
    SysBusDevice *s;
205
    unsigned int i;
206

  
207
    dev = qdev_create(NULL, "sun4c_intctl");
208
    qdev_init(dev);
209

  
210
    s = sysbus_from_qdev(dev);
211

  
212
    for (i = 0; i < MAX_PILS; i++) {
213
        sysbus_connect_irq(s, i, parent_irq[i]);
214
    }
215
    sysbus_mmio_map(s, 0, addr);
216

  
217
    return dev;
218
}
219

  
220 201
static void sun4c_intctl_init1(SysBusDevice *dev)
221 202
{
222 203
    Sun4c_INTCTLState *s = FROM_SYSBUS(Sun4c_INTCTLState, dev);
b/hw/sun4m.c
36 36
#include "isa.h"
37 37
#include "fw_cfg.h"
38 38
#include "escc.h"
39
#include "qdev-addr.h"
39 40

  
40 41
//#define DEBUG_IRQ
41 42

  
......
364 365
    return kernel_size;
365 366
}
366 367

  
368
static void *iommu_init(target_phys_addr_t addr, uint32_t version, qemu_irq irq)
369
{
370
    DeviceState *dev;
371
    SysBusDevice *s;
372

  
373
    dev = qdev_create(NULL, "iommu");
374
    qdev_prop_set_uint32(dev, "version", version);
375
    qdev_init(dev);
376
    s = sysbus_from_qdev(dev);
377
    sysbus_connect_irq(s, 0, irq);
378
    sysbus_mmio_map(s, 0, addr);
379

  
380
    return s;
381
}
382

  
367 383
static void lance_init(NICInfo *nd, target_phys_addr_t leaddr,
368 384
                       void *dma_opaque, qemu_irq irq, qemu_irq *reset)
369 385
{
......
382 398
    *reset = qdev_get_gpio_in(dev, 0);
383 399
}
384 400

  
401
static DeviceState *slavio_intctl_init(target_phys_addr_t addr,
402
                                       target_phys_addr_t addrg,
403
                                       const uint32_t *intbit_to_level,
404
                                       qemu_irq **parent_irq,
405
                                       unsigned int cputimer)
406
{
407
    DeviceState *dev;
408
    SysBusDevice *s;
409
    unsigned int i, j;
410

  
411
    dev = qdev_create(NULL, "slavio_intctl");
412
    qdev_prop_set_ptr(dev, "intbit_to_level", (void *)intbit_to_level);
413
    qdev_prop_set_uint32(dev, "cputimer_bit", cputimer);
414
    qdev_init(dev);
415

  
416
    s = sysbus_from_qdev(dev);
417

  
418
    for (i = 0; i < MAX_CPUS; i++) {
419
        for (j = 0; j < MAX_PILS; j++) {
420
            sysbus_connect_irq(s, i * MAX_PILS + j, parent_irq[i][j]);
421
        }
422
    }
423
    sysbus_mmio_map(s, 0, addrg);
424
    for (i = 0; i < MAX_CPUS; i++) {
425
        sysbus_mmio_map(s, i + 1, addr + i * TARGET_PAGE_SIZE);
426
    }
427

  
428
    return dev;
429
}
430

  
431
#define SYS_TIMER_OFFSET      0x10000ULL
432
#define CPU_TIMER_OFFSET(cpu) (0x1000ULL * cpu)
433

  
434
static void slavio_timer_init_all(target_phys_addr_t addr, qemu_irq master_irq,
435
                                  qemu_irq *cpu_irqs, unsigned int num_cpus)
436
{
437
    DeviceState *dev;
438
    SysBusDevice *s;
439
    unsigned int i;
440

  
441
    dev = qdev_create(NULL, "slavio_timer");
442
    qdev_prop_set_uint32(dev, "num_cpus", num_cpus);
443
    qdev_init(dev);
444
    s = sysbus_from_qdev(dev);
445
    sysbus_connect_irq(s, 0, master_irq);
446
    sysbus_mmio_map(s, 0, addr + SYS_TIMER_OFFSET);
447

  
448
    for (i = 0; i < MAX_CPUS; i++) {
449
        sysbus_mmio_map(s, i + 1, addr + (target_phys_addr_t)CPU_TIMER_OFFSET(i));
450
        sysbus_connect_irq(s, i + 1, cpu_irqs[i]);
451
    }
452
}
453

  
454
#define MISC_LEDS 0x01600000
455
#define MISC_CFG  0x01800000
456
#define MISC_DIAG 0x01a00000
457
#define MISC_MDM  0x01b00000
458
#define MISC_SYS  0x01f00000
459

  
460
static void *slavio_misc_init(target_phys_addr_t base,
461
                              target_phys_addr_t aux1_base,
462
                              target_phys_addr_t aux2_base, qemu_irq irq,
463
                              qemu_irq fdc_tc)
464
{
465
    DeviceState *dev;
466
    SysBusDevice *s;
467

  
468
    dev = qdev_create(NULL, "slavio_misc");
469
    qdev_init(dev);
470
    s = sysbus_from_qdev(dev);
471
    if (base) {
472
        /* 8 bit registers */
473
        /* Slavio control */
474
        sysbus_mmio_map(s, 0, base + MISC_CFG);
475
        /* Diagnostics */
476
        sysbus_mmio_map(s, 1, base + MISC_DIAG);
477
        /* Modem control */
478
        sysbus_mmio_map(s, 2, base + MISC_MDM);
479
        /* 16 bit registers */
480
        /* ss600mp diag LEDs */
481
        sysbus_mmio_map(s, 3, base + MISC_LEDS);
482
        /* 32 bit registers */
483
        /* System control */
484
        sysbus_mmio_map(s, 4, base + MISC_SYS);
485
    }
486
    if (aux1_base) {
487
        /* AUX 1 (Misc System Functions) */
488
        sysbus_mmio_map(s, 5, aux1_base);
489
    }
490
    if (aux2_base) {
491
        /* AUX 2 (Software Powerdown Control) */
492
        sysbus_mmio_map(s, 6, aux2_base);
493
    }
494
    sysbus_connect_irq(s, 0, irq);
495
    sysbus_connect_irq(s, 1, fdc_tc);
496

  
497
    return s;
498
}
499

  
500
static void ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version)
501
{
502
    DeviceState *dev;
503
    SysBusDevice *s;
504

  
505
    dev = qdev_create(NULL, "eccmemctl");
506
    qdev_prop_set_uint32(dev, "version", version);
507
    qdev_init(dev);
508
    s = sysbus_from_qdev(dev);
509
    sysbus_connect_irq(s, 0, irq);
510
    sysbus_mmio_map(s, 0, base);
511
    if (version == 0) { // SS-600MP only
512
        sysbus_mmio_map(s, 1, base + 0x1000);
513
    }
514
}
515

  
516
static void apc_init(target_phys_addr_t power_base, qemu_irq cpu_halt)
517
{
518
    DeviceState *dev;
519
    SysBusDevice *s;
520

  
521
    dev = qdev_create(NULL, "apc");
522
    qdev_init(dev);
523
    s = sysbus_from_qdev(dev);
524
    /* Power management (APC) XXX: not a Slavio device */
525
    sysbus_mmio_map(s, 0, power_base);
526
    sysbus_connect_irq(s, 0, cpu_halt);
527
}
528

  
529
static void tcx_init(target_phys_addr_t addr, int vram_size, int width,
530
                     int height, int depth)
531
{
532
    DeviceState *dev;
533
    SysBusDevice *s;
534

  
535
    dev = qdev_create(NULL, "SUNW,tcx");
536
    qdev_prop_set_taddr(dev, "addr", addr);
537
    qdev_prop_set_uint32(dev, "vram_size", vram_size);
538
    qdev_prop_set_uint16(dev, "width", width);
539
    qdev_prop_set_uint16(dev, "height", height);
540
    qdev_prop_set_uint16(dev, "depth", depth);
541
    qdev_init(dev);
542
    s = sysbus_from_qdev(dev);
543
    /* 8-bit plane */
544
    sysbus_mmio_map(s, 0, addr + 0x00800000ULL);
545
    /* DAC */
546
    sysbus_mmio_map(s, 1, addr + 0x00200000ULL);
547
    /* TEC (dummy) */
548
    sysbus_mmio_map(s, 2, addr + 0x00700000ULL);
549
    /* THC 24 bit: NetBSD writes here even with 8-bit display: dummy */
550
    sysbus_mmio_map(s, 3, addr + 0x00301000ULL);
551
    if (depth == 24) {
552
        /* 24-bit plane */
553
        sysbus_mmio_map(s, 4, addr + 0x02000000ULL);
554
        /* Control plane */
555
        sysbus_mmio_map(s, 5, addr + 0x0a000000ULL);
556
    } else {
557
        /* THC 8 bit (dummy) */
558
        sysbus_mmio_map(s, 4, addr + 0x00300000ULL);
559
    }
560
}
561

  
385 562
/* NCR89C100/MACIO Internal ID register */
386 563
static const uint8_t idreg_data[] = { 0xfe, 0x81, 0x01, 0x03 };
387 564

  
......
1314 1491
    },
1315 1492
};
1316 1493

  
1494
static DeviceState *sbi_init(target_phys_addr_t addr, qemu_irq **parent_irq)
1495
{
1496
    DeviceState *dev;
1497
    SysBusDevice *s;
1498
    unsigned int i;
1499

  
1500
    dev = qdev_create(NULL, "sbi");
1501
    qdev_init(dev);
1502

  
1503
    s = sysbus_from_qdev(dev);
1504

  
1505
    for (i = 0; i < MAX_CPUS; i++) {
1506
        sysbus_connect_irq(s, i, *parent_irq[i]);
1507
    }
1508

  
1509
    sysbus_mmio_map(s, 0, addr);
1510

  
1511
    return dev;
1512
}
1513

  
1317 1514
static void sun4d_hw_init(const struct sun4d_hwdef *hwdef, ram_addr_t RAM_size,
1318 1515
                          const char *boot_device,
1319 1516
                          const char *kernel_filename,
......
1494 1691
    },
1495 1692
};
1496 1693

  
1694
static DeviceState *sun4c_intctl_init(target_phys_addr_t addr,
1695
                                      qemu_irq *parent_irq)
1696
{
1697
    DeviceState *dev;
1698
    SysBusDevice *s;
1699
    unsigned int i;
1700

  
1701
    dev = qdev_create(NULL, "sun4c_intctl");
1702
    qdev_init(dev);
1703

  
1704
    s = sysbus_from_qdev(dev);
1705

  
1706
    for (i = 0; i < MAX_PILS; i++) {
1707
        sysbus_connect_irq(s, i, parent_irq[i]);
1708
    }
1709
    sysbus_mmio_map(s, 0, addr);
1710

  
1711
    return dev;
1712
}
1713

  
1497 1714
static void sun4c_hw_init(const struct sun4c_hwdef *hwdef, ram_addr_t RAM_size,
1498 1715
                          const char *boot_device,
1499 1716
                          const char *kernel_filename,
b/hw/sun4m.h
6 6
/* Devices used by sparc32 system.  */
7 7

  
8 8
/* iommu.c */
9
void *iommu_init(target_phys_addr_t addr, uint32_t version, qemu_irq irq);
10 9
void sparc_iommu_memory_rw(void *opaque, target_phys_addr_t addr,
11 10
                                 uint8_t *buf, int len, int is_write);
12 11
static inline void sparc_iommu_memory_read(void *opaque,
......
23 22
    sparc_iommu_memory_rw(opaque, addr, buf, len, 1);
24 23
}
25 24

  
26
/* tcx.c */
27
void tcx_init(target_phys_addr_t addr, int vram_size, int width, int height,
28
              int depth);
29

  
30 25
/* slavio_intctl.c */
31
DeviceState *slavio_intctl_init(target_phys_addr_t addr,
32
                                target_phys_addr_t addrg,
33
                                const uint32_t *intbit_to_level,
34
                                qemu_irq **parent_irq, unsigned int cputimer);
35 26
void slavio_pic_info(Monitor *mon, void *opaque);
36 27
void slavio_irq_info(Monitor *mon, void *opaque);
37 28

  
38
/* sbi.c */
39
DeviceState *sbi_init(target_phys_addr_t addr, qemu_irq **parent_irq);
40

  
41 29
/* sun4c_intctl.c */
42
DeviceState *sun4c_intctl_init(target_phys_addr_t addr, qemu_irq *parent_irq);
43 30
void sun4c_pic_info(Monitor *mon, void *opaque);
44 31
void sun4c_irq_info(Monitor *mon, void *opaque);
45 32

  
46
/* slavio_timer.c */
47
void slavio_timer_init_all(target_phys_addr_t base, qemu_irq master_irq,
48
                           qemu_irq *cpu_irqs, unsigned int num_cpus);
49

  
50 33
/* slavio_misc.c */
51
void *slavio_misc_init(target_phys_addr_t base,
52
                       target_phys_addr_t aux1_base,
53
                       target_phys_addr_t aux2_base, qemu_irq irq,
54
                       qemu_irq fdc_tc);
55 34
void slavio_set_power_fail(void *opaque, int power_failing);
56
void apc_init(target_phys_addr_t power_base, qemu_irq cpu_halt);
57 35

  
58 36
/* sparc32_dma.c */
59 37
#include "sparc32_dma.h"
60 38

  
61
/* eccmemctl.c */
62
void ecc_init(target_phys_addr_t base, qemu_irq irq, uint32_t version);
63

  
64 39
#endif
b/hw/tcx.c
515 515
    tcx_dummy_writel,
516 516
};
517 517

  
518
void tcx_init(target_phys_addr_t addr, int vram_size, int width, int height,
519
              int depth)
520
{
521
    DeviceState *dev;
522
    SysBusDevice *s;
523

  
524
    dev = qdev_create(NULL, "SUNW,tcx");
525
    qdev_prop_set_taddr(dev, "addr", addr);
526
    qdev_prop_set_uint32(dev, "vram_size", vram_size);
527
    qdev_prop_set_uint16(dev, "width", width);
528
    qdev_prop_set_uint16(dev, "height", height);
529
    qdev_prop_set_uint16(dev, "depth", depth);
530
    qdev_init(dev);
531
    s = sysbus_from_qdev(dev);
532
    /* 8-bit plane */
533
    sysbus_mmio_map(s, 0, addr + 0x00800000ULL);
534
    /* DAC */
535
    sysbus_mmio_map(s, 1, addr + 0x00200000ULL);
536
    /* TEC (dummy) */
537
    sysbus_mmio_map(s, 2, addr + 0x00700000ULL);
538
    /* THC 24 bit: NetBSD writes here even with 8-bit display: dummy */
539
    sysbus_mmio_map(s, 3, addr + 0x00301000ULL);
540
    if (depth == 24) {
541
        /* 24-bit plane */
542
        sysbus_mmio_map(s, 4, addr + 0x02000000ULL);
543
        /* Control plane */
544
        sysbus_mmio_map(s, 5, addr + 0x0a000000ULL);
545
    } else {
546
        /* THC 8 bit (dummy) */
547
        sysbus_mmio_map(s, 4, addr + 0x00300000ULL);
548
    }
549
}
550

  
551 518
static void tcx_init1(SysBusDevice *dev)
552 519
{
553 520
    TCXState *s = FROM_SYSBUS(TCXState, dev);

Also available in: Unified diff