mirror of https://gitee.com/openkylin/qemu.git
Remove address masking
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5853 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
0e8f096751
commit
e64d7d595f
|
@ -30,8 +30,7 @@
|
||||||
/*
|
/*
|
||||||
* In addition to Crystal CS4231 there is a DMA controller on Sparc.
|
* In addition to Crystal CS4231 there is a DMA controller on Sparc.
|
||||||
*/
|
*/
|
||||||
#define CS_MAXADDR 0x3f
|
#define CS_SIZE 0x40
|
||||||
#define CS_SIZE (CS_MAXADDR + 1)
|
|
||||||
#define CS_REGS 16
|
#define CS_REGS 16
|
||||||
#define CS_DREGS 32
|
#define CS_DREGS 32
|
||||||
#define CS_MAXDREG (CS_DREGS - 1)
|
#define CS_MAXDREG (CS_DREGS - 1)
|
||||||
|
@ -68,7 +67,7 @@ static uint32_t cs_mem_readl(void *opaque, target_phys_addr_t addr)
|
||||||
CSState *s = opaque;
|
CSState *s = opaque;
|
||||||
uint32_t saddr, ret;
|
uint32_t saddr, ret;
|
||||||
|
|
||||||
saddr = (addr & CS_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case 1:
|
case 1:
|
||||||
switch (CS_RAP(s)) {
|
switch (CS_RAP(s)) {
|
||||||
|
@ -94,7 +93,7 @@ static void cs_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
CSState *s = opaque;
|
CSState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr & CS_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
DPRINTF("write reg[%d]: 0x%8.8x -> 0x%8.8x\n", saddr, s->regs[saddr], val);
|
DPRINTF("write reg[%d]: 0x%8.8x -> 0x%8.8x\n", saddr, s->regs[saddr], val);
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|
|
@ -114,7 +114,6 @@
|
||||||
|
|
||||||
#define ECC_NREGS 9
|
#define ECC_NREGS 9
|
||||||
#define ECC_SIZE (ECC_NREGS * sizeof(uint32_t))
|
#define ECC_SIZE (ECC_NREGS * sizeof(uint32_t))
|
||||||
#define ECC_ADDR_MASK 0x1f
|
|
||||||
|
|
||||||
#define ECC_DIAG_SIZE 4
|
#define ECC_DIAG_SIZE 4
|
||||||
#define ECC_DIAG_MASK (ECC_DIAG_SIZE - 1)
|
#define ECC_DIAG_MASK (ECC_DIAG_SIZE - 1)
|
||||||
|
@ -129,7 +128,7 @@ static void ecc_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
{
|
{
|
||||||
ECCState *s = opaque;
|
ECCState *s = opaque;
|
||||||
|
|
||||||
switch ((addr & ECC_ADDR_MASK) >> 2) {
|
switch (addr >> 2) {
|
||||||
case ECC_MER:
|
case ECC_MER:
|
||||||
s->regs[ECC_MER] = (s->regs[ECC_MER] & (ECC_MER_VER | ECC_MER_IMPL)) |
|
s->regs[ECC_MER] = (s->regs[ECC_MER] & (ECC_MER_VER | ECC_MER_IMPL)) |
|
||||||
(val & ~(ECC_MER_VER | ECC_MER_IMPL));
|
(val & ~(ECC_MER_VER | ECC_MER_IMPL));
|
||||||
|
@ -167,7 +166,7 @@ static uint32_t ecc_mem_readl(void *opaque, target_phys_addr_t addr)
|
||||||
ECCState *s = opaque;
|
ECCState *s = opaque;
|
||||||
uint32_t ret = 0;
|
uint32_t ret = 0;
|
||||||
|
|
||||||
switch ((addr & ECC_ADDR_MASK) >> 2) {
|
switch (addr >> 2) {
|
||||||
case ECC_MER:
|
case ECC_MER:
|
||||||
ret = s->regs[ECC_MER];
|
ret = s->regs[ECC_MER];
|
||||||
DPRINTF("Read memory enable %08x\n", ret);
|
DPRINTF("Read memory enable %08x\n", ret);
|
||||||
|
@ -225,15 +224,16 @@ static void ecc_diag_mem_writeb(void *opaque, target_phys_addr_t addr,
|
||||||
{
|
{
|
||||||
ECCState *s = opaque;
|
ECCState *s = opaque;
|
||||||
|
|
||||||
DPRINTF("Write diagnostic[%d] = %02x\n", (int)(addr & ECC_DIAG_MASK), val);
|
DPRINTF("Write diagnostic[%d] = %02x\n", (int)addr, val);
|
||||||
s->diag[addr & ECC_DIAG_MASK] = val;
|
s->diag[addr & ECC_DIAG_MASK] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t ecc_diag_mem_readb(void *opaque, target_phys_addr_t addr)
|
static uint32_t ecc_diag_mem_readb(void *opaque, target_phys_addr_t addr)
|
||||||
{
|
{
|
||||||
ECCState *s = opaque;
|
ECCState *s = opaque;
|
||||||
uint32_t ret = s->diag[addr & ECC_DIAG_MASK];
|
uint32_t ret = s->diag[(int)addr];
|
||||||
DPRINTF("Read diagnostic[%d] = %02x\n", (int)(addr & ECC_DIAG_MASK), ret);
|
|
||||||
|
DPRINTF("Read diagnostic[%d] = %02x\n", (int)addr, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
hw/esp.c
4
hw/esp.c
|
@ -425,7 +425,7 @@ static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr)
|
||||||
ESPState *s = opaque;
|
ESPState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr >> s->it_shift) & (ESP_REGS - 1);
|
saddr = addr >> s->it_shift;
|
||||||
DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]);
|
DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]);
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case ESP_FIFO:
|
case ESP_FIFO:
|
||||||
|
@ -461,7 +461,7 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
ESPState *s = opaque;
|
ESPState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr >> s->it_shift) & (ESP_REGS - 1);
|
saddr = addr >> s->it_shift;
|
||||||
DPRINTF("write reg[%d]: 0x%2.2x -> 0x%2.2x\n", saddr, s->wregs[saddr],
|
DPRINTF("write reg[%d]: 0x%2.2x -> 0x%2.2x\n", saddr, s->wregs[saddr],
|
||||||
val);
|
val);
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
|
|
30
hw/fdc.c
30
hw/fdc.c
|
@ -513,7 +513,7 @@ static uint32_t fdctrl_read (void *opaque, uint32_t reg)
|
||||||
fdctrl_t *fdctrl = opaque;
|
fdctrl_t *fdctrl = opaque;
|
||||||
uint32_t retval;
|
uint32_t retval;
|
||||||
|
|
||||||
switch (reg & 0x07) {
|
switch (reg) {
|
||||||
case FD_REG_SRA:
|
case FD_REG_SRA:
|
||||||
retval = fdctrl_read_statusA(fdctrl);
|
retval = fdctrl_read_statusA(fdctrl);
|
||||||
break;
|
break;
|
||||||
|
@ -550,7 +550,7 @@ static void fdctrl_write (void *opaque, uint32_t reg, uint32_t value)
|
||||||
|
|
||||||
FLOPPY_DPRINTF("write reg%d: 0x%02x\n", reg & 7, value);
|
FLOPPY_DPRINTF("write reg%d: 0x%02x\n", reg & 7, value);
|
||||||
|
|
||||||
switch (reg & 0x07) {
|
switch (reg) {
|
||||||
case FD_REG_DOR:
|
case FD_REG_DOR:
|
||||||
fdctrl_write_dor(fdctrl, value);
|
fdctrl_write_dor(fdctrl, value);
|
||||||
break;
|
break;
|
||||||
|
@ -568,6 +568,16 @@ static void fdctrl_write (void *opaque, uint32_t reg, uint32_t value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t fdctrl_read_port (void *opaque, uint32_t reg)
|
||||||
|
{
|
||||||
|
return fdctrl_read(opaque, reg & 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fdctrl_write_port (void *opaque, uint32_t reg, uint32_t value)
|
||||||
|
{
|
||||||
|
fdctrl_write(opaque, reg & 7, value);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t fdctrl_read_mem (void *opaque, target_phys_addr_t reg)
|
static uint32_t fdctrl_read_mem (void *opaque, target_phys_addr_t reg)
|
||||||
{
|
{
|
||||||
return fdctrl_read(opaque, (uint32_t)reg);
|
return fdctrl_read(opaque, (uint32_t)reg);
|
||||||
|
@ -1896,14 +1906,14 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
|
||||||
fdctrl);
|
fdctrl);
|
||||||
cpu_register_physical_memory(io_base, 0x08, io_mem);
|
cpu_register_physical_memory(io_base, 0x08, io_mem);
|
||||||
} else {
|
} else {
|
||||||
register_ioport_read((uint32_t)io_base + 0x01, 5, 1, &fdctrl_read,
|
register_ioport_read((uint32_t)io_base + 0x01, 5, 1,
|
||||||
fdctrl);
|
&fdctrl_read_port, fdctrl);
|
||||||
register_ioport_read((uint32_t)io_base + 0x07, 1, 1, &fdctrl_read,
|
register_ioport_read((uint32_t)io_base + 0x07, 1, 1,
|
||||||
fdctrl);
|
&fdctrl_read_port, fdctrl);
|
||||||
register_ioport_write((uint32_t)io_base + 0x01, 5, 1, &fdctrl_write,
|
register_ioport_write((uint32_t)io_base + 0x01, 5, 1,
|
||||||
fdctrl);
|
&fdctrl_write_port, fdctrl);
|
||||||
register_ioport_write((uint32_t)io_base + 0x07, 1, 1, &fdctrl_write,
|
register_ioport_write((uint32_t)io_base + 0x07, 1, 1,
|
||||||
fdctrl);
|
&fdctrl_write_port, fdctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
return fdctrl;
|
return fdctrl;
|
||||||
|
|
|
@ -2060,14 +2060,14 @@ static void lance_mem_writew(void *opaque, target_phys_addr_t addr,
|
||||||
printf("lance_mem_writew addr=" TARGET_FMT_plx " val=0x%04x\n", addr,
|
printf("lance_mem_writew addr=" TARGET_FMT_plx " val=0x%04x\n", addr,
|
||||||
val & 0xffff);
|
val & 0xffff);
|
||||||
#endif
|
#endif
|
||||||
pcnet_ioport_writew(opaque, addr & 7, val & 0xffff);
|
pcnet_ioport_writew(opaque, addr, val & 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t lance_mem_readw(void *opaque, target_phys_addr_t addr)
|
static uint32_t lance_mem_readw(void *opaque, target_phys_addr_t addr)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
val = pcnet_ioport_readw(opaque, addr & 7);
|
val = pcnet_ioport_readw(opaque, addr);
|
||||||
#ifdef PCNET_DEBUG_IO
|
#ifdef PCNET_DEBUG_IO
|
||||||
printf("lance_mem_readw addr=" TARGET_FMT_plx " val = 0x%04x\n", addr,
|
printf("lance_mem_readw addr=" TARGET_FMT_plx " val = 0x%04x\n", addr,
|
||||||
val & 0xffff);
|
val & 0xffff);
|
||||||
|
|
5
hw/sbi.c
5
hw/sbi.c
|
@ -46,7 +46,6 @@ typedef struct SBIState {
|
||||||
} SBIState;
|
} SBIState;
|
||||||
|
|
||||||
#define SBI_SIZE (SBI_NREGS * 4)
|
#define SBI_SIZE (SBI_NREGS * 4)
|
||||||
#define SBI_MASK (SBI_SIZE - 1)
|
|
||||||
|
|
||||||
static void sbi_check_interrupts(void *opaque)
|
static void sbi_check_interrupts(void *opaque)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +64,7 @@ static uint32_t sbi_mem_readl(void *opaque, target_phys_addr_t addr)
|
||||||
SBIState *s = opaque;
|
SBIState *s = opaque;
|
||||||
uint32_t saddr, ret;
|
uint32_t saddr, ret;
|
||||||
|
|
||||||
saddr = (addr & SBI_MASK) >> 2;
|
saddr = addr >> 2;
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
default:
|
default:
|
||||||
ret = s->regs[saddr];
|
ret = s->regs[saddr];
|
||||||
|
@ -81,7 +80,7 @@ static void sbi_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
SBIState *s = opaque;
|
SBIState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr & SBI_MASK) >> 2;
|
saddr = addr >> 2;
|
||||||
DPRINTF("write system reg 0x" TARGET_FMT_plx " = %x\n", addr, val);
|
DPRINTF("write system reg 0x" TARGET_FMT_plx " = %x\n", addr, val);
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -108,8 +108,7 @@ struct SerialState {
|
||||||
struct ChannelState chn[2];
|
struct ChannelState chn[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SERIAL_MAXADDR 7
|
#define SERIAL_SIZE 8
|
||||||
#define SERIAL_SIZE (SERIAL_MAXADDR + 1)
|
|
||||||
#define SERIAL_CTRL 0
|
#define SERIAL_CTRL 0
|
||||||
#define SERIAL_DATA 1
|
#define SERIAL_DATA 1
|
||||||
|
|
||||||
|
@ -477,7 +476,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr,
|
||||||
|
|
||||||
val &= 0xff;
|
val &= 0xff;
|
||||||
saddr = (addr & 3) >> 1;
|
saddr = (addr & 3) >> 1;
|
||||||
channel = (addr & SERIAL_MAXADDR) >> 2;
|
channel = addr >> 2;
|
||||||
s = &serial->chn[channel];
|
s = &serial->chn[channel];
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case SERIAL_CTRL:
|
case SERIAL_CTRL:
|
||||||
|
@ -574,7 +573,7 @@ static uint32_t slavio_serial_mem_readb(void *opaque, target_phys_addr_t addr)
|
||||||
int channel;
|
int channel;
|
||||||
|
|
||||||
saddr = (addr & 3) >> 1;
|
saddr = (addr & 3) >> 1;
|
||||||
channel = (addr & SERIAL_MAXADDR) >> 2;
|
channel = addr >> 2;
|
||||||
s = &serial->chn[channel];
|
s = &serial->chn[channel];
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case SERIAL_CTRL:
|
case SERIAL_CTRL:
|
||||||
|
|
|
@ -66,7 +66,6 @@ typedef struct SLAVIO_TIMERState {
|
||||||
uint32_t slave_mode;
|
uint32_t slave_mode;
|
||||||
} SLAVIO_TIMERState;
|
} SLAVIO_TIMERState;
|
||||||
|
|
||||||
#define TIMER_MAXADDR 0x1f
|
|
||||||
#define SYS_TIMER_SIZE 0x14
|
#define SYS_TIMER_SIZE 0x14
|
||||||
#define CPU_TIMER_SIZE 0x10
|
#define CPU_TIMER_SIZE 0x10
|
||||||
|
|
||||||
|
@ -132,7 +131,7 @@ static uint32_t slavio_timer_mem_readl(void *opaque, target_phys_addr_t addr)
|
||||||
SLAVIO_TIMERState *s = opaque;
|
SLAVIO_TIMERState *s = opaque;
|
||||||
uint32_t saddr, ret;
|
uint32_t saddr, ret;
|
||||||
|
|
||||||
saddr = (addr & TIMER_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case TIMER_LIMIT:
|
case TIMER_LIMIT:
|
||||||
// read limit (system counter mode) or read most signifying
|
// read limit (system counter mode) or read most signifying
|
||||||
|
@ -185,7 +184,7 @@ static void slavio_timer_mem_writel(void *opaque, target_phys_addr_t addr,
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
DPRINTF("write " TARGET_FMT_plx " %08x\n", addr, val);
|
DPRINTF("write " TARGET_FMT_plx " %08x\n", addr, val);
|
||||||
saddr = (addr & TIMER_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
case TIMER_LIMIT:
|
case TIMER_LIMIT:
|
||||||
if (slavio_timer_is_user(s)) {
|
if (slavio_timer_is_user(s)) {
|
||||||
|
|
|
@ -45,7 +45,6 @@ do { printf("DMA: " fmt , ##args); } while (0)
|
||||||
|
|
||||||
#define DMA_REGS 4
|
#define DMA_REGS 4
|
||||||
#define DMA_SIZE (4 * sizeof(uint32_t))
|
#define DMA_SIZE (4 * sizeof(uint32_t))
|
||||||
#define DMA_MAXADDR (DMA_SIZE - 1)
|
|
||||||
|
|
||||||
#define DMA_VER 0xa0000000
|
#define DMA_VER 0xa0000000
|
||||||
#define DMA_INTR 1
|
#define DMA_INTR 1
|
||||||
|
@ -157,7 +156,7 @@ static uint32_t dma_mem_readl(void *opaque, target_phys_addr_t addr)
|
||||||
DMAState *s = opaque;
|
DMAState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr & DMA_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
DPRINTF("read dmareg " TARGET_FMT_plx ": 0x%8.8x\n", addr,
|
DPRINTF("read dmareg " TARGET_FMT_plx ": 0x%8.8x\n", addr,
|
||||||
s->dmaregs[saddr]);
|
s->dmaregs[saddr]);
|
||||||
|
|
||||||
|
@ -169,7 +168,7 @@ static void dma_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
DMAState *s = opaque;
|
DMAState *s = opaque;
|
||||||
uint32_t saddr;
|
uint32_t saddr;
|
||||||
|
|
||||||
saddr = (addr & DMA_MAXADDR) >> 2;
|
saddr = addr >> 2;
|
||||||
DPRINTF("write dmareg " TARGET_FMT_plx ": 0x%8.8x -> 0x%8.8x\n", addr,
|
DPRINTF("write dmareg " TARGET_FMT_plx ": 0x%8.8x -> 0x%8.8x\n", addr,
|
||||||
s->dmaregs[saddr], val);
|
s->dmaregs[saddr], val);
|
||||||
switch (saddr) {
|
switch (saddr) {
|
||||||
|
|
|
@ -52,8 +52,7 @@ typedef struct Sun4c_INTCTLState {
|
||||||
uint8_t pending;
|
uint8_t pending;
|
||||||
} Sun4c_INTCTLState;
|
} Sun4c_INTCTLState;
|
||||||
|
|
||||||
#define INTCTL_MAXADDR 0
|
#define INTCTL_SIZE 1
|
||||||
#define INTCTL_SIZE (INTCTL_MAXADDR + 1)
|
|
||||||
|
|
||||||
static void sun4c_check_interrupts(void *opaque);
|
static void sun4c_check_interrupts(void *opaque);
|
||||||
|
|
||||||
|
|
6
hw/tcx.c
6
hw/tcx.c
|
@ -437,15 +437,13 @@ static uint32_t tcx_dac_readl(void *opaque, target_phys_addr_t addr)
|
||||||
static void tcx_dac_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
static void tcx_dac_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
|
||||||
{
|
{
|
||||||
TCXState *s = opaque;
|
TCXState *s = opaque;
|
||||||
uint32_t saddr;
|
|
||||||
|
|
||||||
saddr = (addr & (TCX_DAC_NREGS - 1)) >> 2;
|
switch (addr) {
|
||||||
switch (saddr) {
|
|
||||||
case 0:
|
case 0:
|
||||||
s->dac_index = val >> 24;
|
s->dac_index = val >> 24;
|
||||||
s->dac_state = 0;
|
s->dac_state = 0;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 4:
|
||||||
switch (s->dac_state) {
|
switch (s->dac_state) {
|
||||||
case 0:
|
case 0:
|
||||||
s->r[s->dac_index] = val >> 24;
|
s->r[s->dac_index] = val >> 24;
|
||||||
|
|
Loading…
Reference in New Issue