74 uint64_t idata = 0, odata = 0;
85 switch (relative_addr) {
107 fatal(
"dev_mp(): DEV_MP_STARTUPCPU: not for this" 117 if (len==4 && (idata >> 32) == 0 && (idata & 0x80000000ULL))
118 idata |= 0xffffffff00000000ULL;
144 if (len == 4 && (idata >> 32) == 0 && (idata & 0x80000000ULL))
145 idata |= 0xffffffff00000000ULL;
157 odata = (odata << 31) ^ random();
158 odata = (odata << 31) ^ random();
186 which_cpu = (idata & 0xffff);
243 fatal(
"[ dev_mp: unimplemented relative addr 0x%x ]\n",
260 memset(d, 0,
sizeof(
struct mp_data));
272 for (i=0; i<n; i++) {
274 snprintf(tmpstr,
sizeof(tmpstr),
"%s.cpu[%i].%s",
283 memset(d->
ipi, 0,
sizeof(
int *) * n);
uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len)
void fatal(const char *fmt,...)
struct interrupt * ipi_irq
#define DEV_MP_UNPAUSE_CPU
#define DEV_MP_HARDWARE_RANDOM
#define CHECK_ALLOCATION(ptr)
#define DEV_MP_STARTUPCPU
#define DEV_MP_PAUSE_ADDR
#define INTERRUPT_ASSERT(istruct)
#define INTERRUPT_CONNECT(name, istruct)
void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len, uint64_t data)
#define DEV_MP_STARTUPSTACK
void memory_device_register(struct memory *mem, const char *, uint64_t baseaddr, uint64_t len, int(*f)(struct cpu *, struct memory *, uint64_t, unsigned char *, size_t, int, void *), void *extra, int flags, unsigned char *dyntrans_data)
uint64_t gpr[N_MIPS_GPRS]
#define INITIAL_STACK_POINTER
#define DEV_MP_STARTUPADDR
#define INTERRUPT_DEASSERT(istruct)