1 |
/* |
/* |
2 |
* Copyright (C) 2004-2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2004-2006 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_vr41xx.c,v 1.32 2005/10/26 14:37:04 debug Exp $ |
* $Id: dev_vr41xx.c,v 1.38 2006/07/23 19:36:04 debug Exp $ |
29 |
* |
* |
30 |
* VR41xx (actually, VR4122 and VR4131) misc functions. |
* VR41xx (actually, VR4122 and VR4131) misc functions. |
31 |
* |
* |
289 |
} |
} |
290 |
|
|
291 |
|
|
292 |
/* |
DEVICE_TICK(vr41xx) |
|
* dev_vr41xx_tick(): |
|
|
*/ |
|
|
void dev_vr41xx_tick(struct cpu *cpu, void *extra) |
|
293 |
{ |
{ |
294 |
struct vr41xx_data *d = extra; |
struct vr41xx_data *d = extra; |
295 |
|
|
373 |
default: |
default: |
374 |
if (writeflag == MEM_WRITE) |
if (writeflag == MEM_WRITE) |
375 |
debug("[ vr41xx KIU: unimplemented write to offset " |
debug("[ vr41xx KIU: unimplemented write to offset " |
376 |
"0x%x, data=0x%016llx ]\n", ofs, (long long)idata); |
"0x%x, data=0x%016"PRIx64" ]\n", ofs, |
377 |
|
(uint64_t) idata); |
378 |
else |
else |
379 |
debug("[ vr41xx KIU: unimplemented read from offset " |
debug("[ vr41xx KIU: unimplemented read from offset " |
380 |
"0x%x ]\n", ofs); |
"0x%x ]\n", ofs); |
384 |
} |
} |
385 |
|
|
386 |
|
|
387 |
/* |
DEVICE_ACCESS(vr41xx) |
|
* dev_vr41xx_access(): |
|
|
*/ |
|
|
int dev_vr41xx_access(struct cpu *cpu, struct memory *mem, |
|
|
uint64_t relative_addr, unsigned char *data, size_t len, |
|
|
int writeflag, void *extra) |
|
388 |
{ |
{ |
389 |
struct vr41xx_data *d = (struct vr41xx_data *) extra; |
struct vr41xx_data *d = (struct vr41xx_data *) extra; |
390 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
512 |
default: |
default: |
513 |
if (writeflag == MEM_WRITE) |
if (writeflag == MEM_WRITE) |
514 |
debug("[ vr41xx: unimplemented write to address " |
debug("[ vr41xx: unimplemented write to address " |
515 |
"0x%llx, data=0x%016llx ]\n", |
"0x%"PRIx64", data=0x%016"PRIx64" ]\n", |
516 |
(long long)relative_addr, (long long)idata); |
(uint64_t) relative_addr, (uint64_t) idata); |
517 |
else |
else |
518 |
debug("[ vr41xx: unimplemented read from address " |
debug("[ vr41xx: unimplemented read from address " |
519 |
"0x%llx ]\n", (long long)relative_addr); |
"0x%"PRIx64" ]\n", (uint64_t) relative_addr); |
520 |
} |
} |
521 |
|
|
522 |
ret: |
ret: |
552 |
|
|
553 |
/* TODO: VRC4173 has the KIU at offset 0x100? */ |
/* TODO: VRC4173 has the KIU at offset 0x100? */ |
554 |
d->kiu_offset = 0x180; |
d->kiu_offset = 0x180; |
555 |
d->kiu_console_handle = console_start_slave_inputonly(machine, "kiu"); |
d->kiu_console_handle = console_start_slave_inputonly( |
556 |
|
machine, "kiu", 1); |
557 |
d->kiu_irq_nr = VRIP_INTR_KIU; |
d->kiu_irq_nr = VRIP_INTR_KIU; |
558 |
|
|
559 |
switch (cpumodel) { |
switch (cpumodel) { |
578 |
} |
} |
579 |
|
|
580 |
memory_device_register(mem, "vr41xx", baseaddr, DEV_VR41XX_LENGTH, |
memory_device_register(mem, "vr41xx", baseaddr, DEV_VR41XX_LENGTH, |
581 |
dev_vr41xx_access, (void *)d, MEM_DEFAULT, NULL); |
dev_vr41xx_access, (void *)d, DM_DEFAULT, NULL); |
582 |
|
|
583 |
/* |
/* |
584 |
* TODO: Find out which controllers are at which addresses on |
* TODO: Find out which controllers are at which addresses on |
585 |
* which chips. |
* which chips. |
586 |
*/ |
*/ |
587 |
if (cpumodel == 4131) { |
if (cpumodel == 4131) { |
588 |
snprintf(tmps, sizeof(tmps), "ns16550 irq=%i addr=0x%llx " |
snprintf(tmps, sizeof(tmps), "ns16550 irq=%i addr=0x%"PRIx64" " |
589 |
"name2=siu", 8+VRIP_INTR_SIU, (long long)(baseaddr+0x800)); |
"name2=siu", 8+VRIP_INTR_SIU, (uint64_t) (baseaddr+0x800)); |
590 |
device_add(machine, tmps); |
device_add(machine, tmps); |
591 |
} else { |
} else { |
592 |
/* This is used by Linux and NetBSD: */ |
/* This is used by Linux and NetBSD: */ |
599 |
device_add(machine, "pcic addr=0x140003e0"); |
device_add(machine, "pcic addr=0x140003e0"); |
600 |
|
|
601 |
machine_add_tickfunction(machine, dev_vr41xx_tick, d, |
machine_add_tickfunction(machine, dev_vr41xx_tick, d, |
602 |
DEV_VR41XX_TICKSHIFT); |
DEV_VR41XX_TICKSHIFT, 0.0); |
603 |
|
|
604 |
/* Some machines (?) use ISA space at 0x15000000 instead of |
/* Some machines (?) use ISA space at 0x15000000 instead of |
605 |
0x14000000, eg IBM WorkPad Z50. */ |
0x14000000, eg IBM WorkPad Z50. */ |