Revision c227f099 hw/ppc4xx_devs.c
b/hw/ppc4xx_devs.c | ||
---|---|---|
41 | 41 |
/*****************************************************************************/ |
42 | 42 |
/* Generic PowerPC 4xx processor instanciation */ |
43 | 43 |
CPUState *ppc4xx_init (const char *cpu_model, |
44 |
a_clk_setup *cpu_clk, a_clk_setup *tb_clk,
|
|
44 |
clk_setup_t *cpu_clk, clk_setup_t *tb_clk,
|
|
45 | 45 |
uint32_t sysclk) |
46 | 46 |
{ |
47 | 47 |
CPUState *env; |
... | ... | |
81 | 81 |
}; |
82 | 82 |
|
83 | 83 |
#define UIC_MAX_IRQ 32 |
84 |
typedef struct ppcuic a_ppcuic;
|
|
85 |
struct ppcuic { |
|
84 |
typedef struct ppcuic_t ppcuic_t;
|
|
85 |
struct ppcuic_t {
|
|
86 | 86 |
uint32_t dcr_base; |
87 | 87 |
int use_vectors; |
88 | 88 |
uint32_t level; /* Remembers the state of level-triggered interrupts. */ |
... | ... | |
96 | 96 |
qemu_irq *irqs; |
97 | 97 |
}; |
98 | 98 |
|
99 |
static void ppcuic_trigger_irq (a_ppcuic *uic)
|
|
99 |
static void ppcuic_trigger_irq (ppcuic_t *uic)
|
|
100 | 100 |
{ |
101 | 101 |
uint32_t ir, cr; |
102 | 102 |
int start, end, inc, i; |
... | ... | |
149 | 149 |
|
150 | 150 |
static void ppcuic_set_irq (void *opaque, int irq_num, int level) |
151 | 151 |
{ |
152 |
a_ppcuic *uic;
|
|
152 |
ppcuic_t *uic;
|
|
153 | 153 |
uint32_t mask, sr; |
154 | 154 |
|
155 | 155 |
uic = opaque; |
... | ... | |
185 | 185 |
|
186 | 186 |
static target_ulong dcr_read_uic (void *opaque, int dcrn) |
187 | 187 |
{ |
188 |
a_ppcuic *uic;
|
|
188 |
ppcuic_t *uic;
|
|
189 | 189 |
target_ulong ret; |
190 | 190 |
|
191 | 191 |
uic = opaque; |
... | ... | |
231 | 231 |
|
232 | 232 |
static void dcr_write_uic (void *opaque, int dcrn, target_ulong val) |
233 | 233 |
{ |
234 |
a_ppcuic *uic;
|
|
234 |
ppcuic_t *uic;
|
|
235 | 235 |
|
236 | 236 |
uic = opaque; |
237 | 237 |
dcrn -= uic->dcr_base; |
... | ... | |
274 | 274 |
|
275 | 275 |
static void ppcuic_reset (void *opaque) |
276 | 276 |
{ |
277 |
a_ppcuic *uic;
|
|
277 |
ppcuic_t *uic;
|
|
278 | 278 |
|
279 | 279 |
uic = opaque; |
280 | 280 |
uic->uiccr = 0x00000000; |
... | ... | |
291 | 291 |
qemu_irq *ppcuic_init (CPUState *env, qemu_irq *irqs, |
292 | 292 |
uint32_t dcr_base, int has_ssr, int has_vr) |
293 | 293 |
{ |
294 |
a_ppcuic *uic;
|
|
294 |
ppcuic_t *uic;
|
|
295 | 295 |
int i; |
296 | 296 |
|
297 |
uic = qemu_mallocz(sizeof(a_ppcuic));
|
|
297 |
uic = qemu_mallocz(sizeof(ppcuic_t));
|
|
298 | 298 |
uic->dcr_base = dcr_base; |
299 | 299 |
uic->irqs = irqs; |
300 | 300 |
if (has_vr) |
... | ... | |
311 | 311 |
|
312 | 312 |
/*****************************************************************************/ |
313 | 313 |
/* SDRAM controller */ |
314 |
typedef struct ppc4xx_sdram a_ppc4xx_sdram;
|
|
315 |
struct ppc4xx_sdram { |
|
314 |
typedef struct ppc4xx_sdram_t ppc4xx_sdram_t;
|
|
315 |
struct ppc4xx_sdram_t {
|
|
316 | 316 |
uint32_t addr; |
317 | 317 |
int nbanks; |
318 |
a_target_phys_addr ram_bases[4];
|
|
319 |
a_target_phys_addr ram_sizes[4];
|
|
318 |
target_phys_addr_t ram_bases[4];
|
|
319 |
target_phys_addr_t ram_sizes[4];
|
|
320 | 320 |
uint32_t besr0; |
321 | 321 |
uint32_t besr1; |
322 | 322 |
uint32_t bear; |
... | ... | |
337 | 337 |
}; |
338 | 338 |
|
339 | 339 |
/* XXX: TOFIX: some patches have made this code become inconsistent: |
340 |
* there are type inconsistencies, mixing a_target_phys_addr, target_ulong
|
|
340 |
* there are type inconsistencies, mixing target_phys_addr_t, target_ulong
|
|
341 | 341 |
* and uint32_t |
342 | 342 |
*/ |
343 |
static uint32_t sdram_bcr (a_target_phys_addr ram_base,
|
|
344 |
a_target_phys_addr ram_size)
|
|
343 |
static uint32_t sdram_bcr (target_phys_addr_t ram_base,
|
|
344 |
target_phys_addr_t ram_size)
|
|
345 | 345 |
{ |
346 | 346 |
uint32_t bcr; |
347 | 347 |
|
... | ... | |
378 | 378 |
return bcr; |
379 | 379 |
} |
380 | 380 |
|
381 |
static inline a_target_phys_addr sdram_base(uint32_t bcr)
|
|
381 |
static inline target_phys_addr_t sdram_base(uint32_t bcr)
|
|
382 | 382 |
{ |
383 | 383 |
return bcr & 0xFF800000; |
384 | 384 |
} |
... | ... | |
419 | 419 |
} |
420 | 420 |
} |
421 | 421 |
|
422 |
static void sdram_map_bcr (a_ppc4xx_sdram *sdram)
|
|
422 |
static void sdram_map_bcr (ppc4xx_sdram_t *sdram)
|
|
423 | 423 |
{ |
424 | 424 |
int i; |
425 | 425 |
|
... | ... | |
434 | 434 |
} |
435 | 435 |
} |
436 | 436 |
|
437 |
static void sdram_unmap_bcr (a_ppc4xx_sdram *sdram)
|
|
437 |
static void sdram_unmap_bcr (ppc4xx_sdram_t *sdram)
|
|
438 | 438 |
{ |
439 | 439 |
int i; |
440 | 440 |
|
... | ... | |
451 | 451 |
|
452 | 452 |
static target_ulong dcr_read_sdram (void *opaque, int dcrn) |
453 | 453 |
{ |
454 |
a_ppc4xx_sdram *sdram;
|
|
454 |
ppc4xx_sdram_t *sdram;
|
|
455 | 455 |
target_ulong ret; |
456 | 456 |
|
457 | 457 |
sdram = opaque; |
... | ... | |
519 | 519 |
|
520 | 520 |
static void dcr_write_sdram (void *opaque, int dcrn, target_ulong val) |
521 | 521 |
{ |
522 |
a_ppc4xx_sdram *sdram;
|
|
522 |
ppc4xx_sdram_t *sdram;
|
|
523 | 523 |
|
524 | 524 |
sdram = opaque; |
525 | 525 |
switch (dcrn) { |
... | ... | |
604 | 604 |
|
605 | 605 |
static void sdram_reset (void *opaque) |
606 | 606 |
{ |
607 |
a_ppc4xx_sdram *sdram;
|
|
607 |
ppc4xx_sdram_t *sdram;
|
|
608 | 608 |
|
609 | 609 |
sdram = opaque; |
610 | 610 |
sdram->addr = 0x00000000; |
... | ... | |
624 | 624 |
} |
625 | 625 |
|
626 | 626 |
void ppc4xx_sdram_init (CPUState *env, qemu_irq irq, int nbanks, |
627 |
a_target_phys_addr *ram_bases,
|
|
628 |
a_target_phys_addr *ram_sizes,
|
|
627 |
target_phys_addr_t *ram_bases,
|
|
628 |
target_phys_addr_t *ram_sizes,
|
|
629 | 629 |
int do_init) |
630 | 630 |
{ |
631 |
a_ppc4xx_sdram *sdram;
|
|
631 |
ppc4xx_sdram_t *sdram;
|
|
632 | 632 |
|
633 |
sdram = qemu_mallocz(sizeof(a_ppc4xx_sdram));
|
|
633 |
sdram = qemu_mallocz(sizeof(ppc4xx_sdram_t));
|
|
634 | 634 |
sdram->irq = irq; |
635 | 635 |
sdram->nbanks = nbanks; |
636 |
memset(sdram->ram_bases, 0, 4 * sizeof(a_target_phys_addr));
|
|
636 |
memset(sdram->ram_bases, 0, 4 * sizeof(target_phys_addr_t));
|
|
637 | 637 |
memcpy(sdram->ram_bases, ram_bases, |
638 |
nbanks * sizeof(a_target_phys_addr));
|
|
639 |
memset(sdram->ram_sizes, 0, 4 * sizeof(a_target_phys_addr));
|
|
638 |
nbanks * sizeof(target_phys_addr_t));
|
|
639 |
memset(sdram->ram_sizes, 0, 4 * sizeof(target_phys_addr_t));
|
|
640 | 640 |
memcpy(sdram->ram_sizes, ram_sizes, |
641 |
nbanks * sizeof(a_target_phys_addr));
|
|
641 |
nbanks * sizeof(target_phys_addr_t));
|
|
642 | 642 |
sdram_reset(sdram); |
643 | 643 |
qemu_register_reset(&sdram_reset, sdram); |
644 | 644 |
ppc_dcr_register(env, SDRAM0_CFGADDR, |
... | ... | |
656 | 656 |
* The 4xx SDRAM controller supports a small number of banks, and each bank |
657 | 657 |
* must be one of a small set of sizes. The number of banks and the supported |
658 | 658 |
* sizes varies by SoC. */ |
659 |
a_ram_addr ppc4xx_sdram_adjust(a_ram_addr ram_size, int nr_banks,
|
|
660 |
a_target_phys_addr ram_bases[],
|
|
661 |
a_target_phys_addr ram_sizes[],
|
|
659 |
ram_addr_t ppc4xx_sdram_adjust(ram_addr_t ram_size, int nr_banks,
|
|
660 |
target_phys_addr_t ram_bases[],
|
|
661 |
target_phys_addr_t ram_sizes[],
|
|
662 | 662 |
const unsigned int sdram_bank_sizes[]) |
663 | 663 |
{ |
664 |
a_ram_addr size_left = ram_size;
|
|
664 |
ram_addr_t size_left = ram_size;
|
|
665 | 665 |
int i; |
666 | 666 |
int j; |
667 | 667 |
|
Also available in: Unified diff