Revision 5ef98b47 hw/etraxfs.c

b/hw/etraxfs.c
30 30
#include "devices.h"
31 31
#include "boards.h"
32 32

  
33
#include "etraxfs_dma.h"
34

  
35
/* Init functions for different blocks.  */
36
extern qemu_irq *etraxfs_pic_init(CPUState *env, target_phys_addr_t base);
37
void etraxfs_timer_init(CPUState *env, qemu_irq *irqs,
38
                        target_phys_addr_t base);
39
void *etraxfs_eth_init(NICInfo *nd, CPUState *env,
40
                       qemu_irq *irq, target_phys_addr_t base);
41
void etraxfs_ser_init(CPUState *env, qemu_irq *irq, CharDriverState *chr,
42
                      target_phys_addr_t base);
33
#include "etraxfs.h"
43 34

  
44 35
#define FLASH_SIZE 0x2000000
45 36
#define INTMEM_SIZE (128 * 1024)
......
62 53
                       const char *initrd_filename, const char *cpu_model)
63 54
{
64 55
    CPUState *env;
65
    qemu_irq *pic;
56
    struct etraxfs_pic *pic;
66 57
    void *etraxfs_dmac;
67 58
    struct etraxfs_dma_client *eth[2] = {NULL, NULL};
68 59
    int kernel_size;
......
110 101
    etraxfs_dmac = etraxfs_dmac_init(env, 0xb0000000, 10);
111 102
    for (i = 0; i < 10; i++) {
112 103
        /* On ETRAX, odd numbered channels are inputs.  */
113
        etraxfs_dmac_connect(etraxfs_dmac, i, pic + 7 + i, i & 1);
104
        etraxfs_dmac_connect(etraxfs_dmac, i, pic->irq + 7 + i, i & 1);
114 105
    }
115 106

  
116 107
    /* Add the two ethernet blocks.  */
117
    eth[0] = etraxfs_eth_init(&nd_table[0], env, pic + 25, 0xb0034000);
108
    eth[0] = etraxfs_eth_init(&nd_table[0], env, pic->irq + 25, 0xb0034000);
118 109
    if (nb_nics > 1)
119
        eth[1] = etraxfs_eth_init(&nd_table[1], env, pic + 26, 0xb0036000);
110
        eth[1] = etraxfs_eth_init(&nd_table[1], env, pic->irq + 26, 0xb0036000);
120 111

  
121 112
    /* The DMA Connector block is missing, hardwire things for now.  */
122 113
    etraxfs_dmac_connect_client(etraxfs_dmac, 0, eth[0]);
......
127 118
    }
128 119

  
129 120
    /* 2 timers.  */
130
    etraxfs_timer_init(env, pic + 0x1b, 0xb001e000);
131
    etraxfs_timer_init(env, pic + 0x1b, 0xb005e000);
121
    etraxfs_timer_init(env, pic->irq + 0x1b, pic->nmi + 1, 0xb001e000);
122
    etraxfs_timer_init(env, pic->irq + 0x1b, pic->nmi + 1, 0xb005e000);
132 123

  
133 124
    for (i = 0; i < 4; i++) {
134 125
        if (serial_hds[i]) {
135
            etraxfs_ser_init(env, pic + 0x14 + i,
126
            etraxfs_ser_init(env, pic->irq + 0x14 + i,
136 127
                             serial_hds[i], 0xb0026000 + i * 0x2000);
137 128
        }
138 129
    }

Also available in: Unified diff