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