25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_i80321.c,v 1.20 2007/02/05 16:49:21 debug Exp $ |
* $Id: dev_i80321.c,v 1.23 2007/06/15 19:11:15 debug Exp $ |
29 |
* |
* |
30 |
* Intel i80321 (ARM) core functionality. |
* COMMENT: Intel i80321 (ARM) core functionality |
31 |
* |
* |
32 |
* o) Interrupt controller |
* o) Interrupt controller |
33 |
* o) Timer |
* o) Timer |
139 |
struct i80321_data *d = extra; |
struct i80321_data *d = extra; |
140 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
141 |
char *n = NULL; |
char *n = NULL; |
142 |
int i, bus, dev, func, reg; |
int bus, dev, func, reg; |
143 |
|
|
144 |
if (writeflag == MEM_WRITE) |
if (writeflag == MEM_WRITE) |
145 |
idata = memory_readmax64(cpu, data, len); |
idata = memory_readmax64(cpu, data, len); |
227 |
} |
} |
228 |
} else { |
} else { |
229 |
uint64_t tmp; |
uint64_t tmp; |
230 |
|
unsigned int i; |
231 |
int r = relative_addr - (VERDE_ATU_BASE + ATU_OCCDR); |
int r = relative_addr - (VERDE_ATU_BASE + ATU_OCCDR); |
232 |
bus_pci_data_access(cpu, d->pci_bus, &tmp, |
bus_pci_data_access(cpu, d->pci_bus, &tmp, |
233 |
sizeof(uint32_t), MEM_READ); |
sizeof(uint32_t), MEM_READ); |
284 |
|
|
285 |
DEVINIT(i80321) |
DEVINIT(i80321) |
286 |
{ |
{ |
287 |
struct i80321_data *d = malloc(sizeof(struct i80321_data)); |
struct i80321_data *d; |
288 |
uint32_t memsize = devinit->machine->physical_ram_in_mb * 1048576; |
uint32_t memsize = devinit->machine->physical_ram_in_mb * 1048576; |
289 |
uint32_t base; |
uint32_t base; |
290 |
char tmpstr[300]; |
char tmpstr[300]; |
|
int i; |
|
291 |
struct cpu *cpu = devinit->machine->cpus[devinit-> |
struct cpu *cpu = devinit->machine->cpus[devinit-> |
292 |
machine->bootstrap_cpu]; |
machine->bootstrap_cpu]; |
293 |
|
int i; |
294 |
|
|
295 |
if (d == NULL) { |
CHECK_ALLOCATION(d = malloc(sizeof(struct i80321_data))); |
|
fprintf(stderr, "out of memory\n"); |
|
|
exit(1); |
|
|
} |
|
296 |
memset(d, 0, sizeof(struct i80321_data)); |
memset(d, 0, sizeof(struct i80321_data)); |
297 |
|
|
298 |
/* Connect to the CPU interrupt pin: */ |
/* Connect to the CPU interrupt pin: */ |
351 |
d->timer = timer_add(d->hz, tmr0_tick, d); |
d->timer = timer_add(d->hz, tmr0_tick, d); |
352 |
|
|
353 |
machine_add_tickfunction(devinit->machine, dev_i80321_tick, |
machine_add_tickfunction(devinit->machine, dev_i80321_tick, |
354 |
d, TICK_SHIFT, 0.0); |
d, TICK_SHIFT); |
355 |
|
|
356 |
devinit->return_ptr = d->pci_bus; |
devinit->return_ptr = d->pci_bus; |
357 |
|
|