-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
From v0.12.5 tag at git://git.sv.gnu.org/qemu.git CommitID: 174f225e9d62e8f3002e274e4f718bd2a967fbf4 Change-Id: I35b49a4319cee4b69cf9da4e5af1f43327e21056 Signed-off-by: Chris Dearman <chris@mips.com>
- Loading branch information
Bhanu Chetlapalli
committed
Feb 1, 2012
1 parent
828b135
commit 409c7b6
Showing
16 changed files
with
19,608 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#include "cpu.h" | ||
|
||
#define BIOS_SIZE (4 * 1024 * 1024) | ||
#ifdef TARGET_WORDS_BIGENDIAN | ||
#define BIOS_FILENAME "mips_bios.bin" | ||
#else | ||
#define BIOS_FILENAME "mipsel_bios.bin" | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#ifndef HW_MIPS_H | ||
#define HW_MIPS_H | ||
/* Definitions for mips board emulation. */ | ||
|
||
/* gt64xxx.c */ | ||
PCIBus *pci_gt64120_init(qemu_irq *pic); | ||
|
||
/* ds1225y.c */ | ||
void *ds1225y_init(target_phys_addr_t mem_base, const char *filename); | ||
void ds1225y_set_protection(void *opaque, int protection); | ||
|
||
/* g364fb.c */ | ||
int g364fb_mm_init(target_phys_addr_t vram_base, | ||
target_phys_addr_t ctrl_base, int it_shift, | ||
qemu_irq irq); | ||
|
||
/* mipsnet.c */ | ||
void mipsnet_init(int base, qemu_irq irq, NICInfo *nd); | ||
|
||
/* jazz_led.c */ | ||
extern void jazz_led_init(target_phys_addr_t base); | ||
|
||
/* mips_int.c */ | ||
extern void cpu_mips_irq_init_cpu(CPUState *env); | ||
|
||
/* mips_timer.c */ | ||
extern void cpu_mips_clock_init(CPUState *); | ||
|
||
/* rc4030.c */ | ||
typedef struct rc4030DMAState *rc4030_dma; | ||
void rc4030_dma_memory_rw(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write); | ||
void rc4030_dma_read(void *dma, uint8_t *buf, int len); | ||
void rc4030_dma_write(void *dma, uint8_t *buf, int len); | ||
|
||
void *rc4030_init(qemu_irq timer, qemu_irq jazz_bus, | ||
qemu_irq **irqs, rc4030_dma **dmas); | ||
|
||
/* dp8393x.c */ | ||
void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift, | ||
qemu_irq irq, void* mem_opaque, | ||
void (*memory_rw)(void *opaque, target_phys_addr_t addr, uint8_t *buf, int len, int is_write)); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#include "hw.h" | ||
#include "mips.h" | ||
#include "cpu.h" | ||
|
||
/* Raise IRQ to CPU if necessary. It must be called every time the active | ||
IRQ may change */ | ||
void cpu_mips_update_irq(CPUState *env) | ||
{ | ||
if ((env->CP0_Status & (1 << CP0St_IE)) && | ||
!(env->CP0_Status & (1 << CP0St_EXL)) && | ||
!(env->CP0_Status & (1 << CP0St_ERL)) && | ||
!(env->hflags & MIPS_HFLAG_DM)) { | ||
if ((env->CP0_Status & env->CP0_Cause & CP0Ca_IP_mask) && | ||
!(env->interrupt_request & CPU_INTERRUPT_HARD)) { | ||
cpu_interrupt(env, CPU_INTERRUPT_HARD); | ||
} | ||
} else | ||
cpu_reset_interrupt(env, CPU_INTERRUPT_HARD); | ||
} | ||
|
||
static void cpu_mips_irq_request(void *opaque, int irq, int level) | ||
{ | ||
CPUState *env = (CPUState *)opaque; | ||
|
||
if (irq < 0 || irq > 7) | ||
return; | ||
|
||
if (level) { | ||
env->CP0_Cause |= 1 << (irq + CP0Ca_IP); | ||
} else { | ||
env->CP0_Cause &= ~(1 << (irq + CP0Ca_IP)); | ||
} | ||
cpu_mips_update_irq(env); | ||
} | ||
|
||
void cpu_mips_irq_init_cpu(CPUState *env) | ||
{ | ||
qemu_irq *qi; | ||
int i; | ||
|
||
qi = qemu_allocate_irqs(cpu_mips_irq_request, env, 8); | ||
for (i = 0; i < 8; i++) { | ||
env->irq[i] = qi[i]; | ||
} | ||
} |
Oops, something went wrong.