25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_mp.c,v 1.27 2005/06/11 20:51:41 debug Exp $ |
* $Id: dev_mp.c,v 1.30 2005/11/13 00:14:09 debug Exp $ |
29 |
* |
* |
30 |
* This is a fake multiprocessor (MP) device. It can be useful for |
* This is a fake multiprocessor (MP) device. It can be useful for |
31 |
* theoretical experiments, but probably bares no resemblance to any |
* theoretical experiments, but probably bares no resemblance to any |
70 |
int i, which_cpu; |
int i, which_cpu; |
71 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
72 |
|
|
73 |
idata = memory_readmax64(cpu, data, len); |
if (writeflag == MEM_WRITE) |
74 |
|
idata = memory_readmax64(cpu, data, len); |
75 |
|
|
76 |
/* |
/* |
77 |
* NOTE: It is up to the user of this device to read or write |
* NOTE: It is up to the user of this device to read or write |
222 |
cpu_interrupt_ack(d->cpus[cpu->cpu_id], MIPS_IPI_INT); |
cpu_interrupt_ack(d->cpus[cpu->cpu_id], MIPS_IPI_INT); |
223 |
break; |
break; |
224 |
|
|
225 |
|
case DEV_MP_NCYCLES: |
226 |
|
/* |
227 |
|
* Return approximately the number of cycles executed |
228 |
|
* in this machine. (This value is not updated for each |
229 |
|
* instruction.) |
230 |
|
*/ |
231 |
|
odata = cpu->machine->ncycles; |
232 |
|
break; |
233 |
|
|
234 |
default: |
default: |
235 |
fatal("[ dev_mp: unimplemented relative addr 0x%x ]\n", |
fatal("[ dev_mp: unimplemented relative addr 0x%x ]\n", |
236 |
relative_addr); |
relative_addr); |
272 |
memset(d->ipi, 0, sizeof(int *) * n); |
memset(d->ipi, 0, sizeof(int *) * n); |
273 |
|
|
274 |
memory_device_register(devinit->machine->memory, devinit->name, |
memory_device_register(devinit->machine->memory, devinit->name, |
275 |
devinit->addr, DEV_MP_LENGTH, dev_mp_access, d, MEM_DEFAULT, NULL); |
devinit->addr, DEV_MP_LENGTH, dev_mp_access, d, DM_DEFAULT, NULL); |
276 |
|
|
277 |
return 1; |
return 1; |
278 |
} |
} |