Commit 9a87ce9b9558fc0aacebfefdbcbd74fda8fc027f
1 parent
e1dad5a6
Name the magic constants, fix a hex number without 0x
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3677 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
16 additions
and
10 deletions
hw/slavio_intctl.c
| ... | ... | @@ -68,6 +68,12 @@ typedef struct SLAVIO_INTCTLState { |
| 68 | 68 | #define INTCTLM_MAXADDR 0x13 |
| 69 | 69 | #define INTCTLM_SIZE (INTCTLM_MAXADDR + 1) |
| 70 | 70 | #define INTCTLM_MASK 0x1f |
| 71 | +#define MASTER_IRQ_MASK ~0x4fb2007f | |
| 72 | +#define MASTER_DISABLE 0x80000000 | |
| 73 | +#define CPU_IRQ_MASK 0xfffe0000 | |
| 74 | +#define CPU_IRQ_INT15_IN 0x0004000 | |
| 75 | +#define CPU_IRQ_INT15_MASK 0x80000000 | |
| 76 | + | |
| 71 | 77 | static void slavio_check_interrupts(void *opaque); |
| 72 | 78 | |
| 73 | 79 | // per-cpu interrupt controller |
| ... | ... | @@ -103,15 +109,15 @@ static void slavio_intctl_mem_writel(void *opaque, target_phys_addr_t addr, uint |
| 103 | 109 | DPRINTF("write cpu %d reg 0x" TARGET_FMT_plx " = %x\n", cpu, addr, val); |
| 104 | 110 | switch (saddr) { |
| 105 | 111 | case 1: // clear pending softints |
| 106 | - if (val & 0x4000) | |
| 107 | - val |= 80000000; | |
| 108 | - val &= 0xfffe0000; | |
| 112 | + if (val & CPU_IRQ_INT15_IN) | |
| 113 | + val |= CPU_IRQ_INT15_MASK; | |
| 114 | + val &= CPU_IRQ_MASK; | |
| 109 | 115 | s->intreg_pending[cpu] &= ~val; |
| 110 | 116 | slavio_check_interrupts(s); |
| 111 | 117 | DPRINTF("Cleared cpu %d irq mask %x, curmask %x\n", cpu, val, s->intreg_pending[cpu]); |
| 112 | 118 | break; |
| 113 | 119 | case 2: // set softint |
| 114 | - val &= 0xfffe0000; | |
| 120 | + val &= CPU_IRQ_MASK; | |
| 115 | 121 | s->intreg_pending[cpu] |= val; |
| 116 | 122 | slavio_check_interrupts(s); |
| 117 | 123 | DPRINTF("Set cpu %d irq mask %x, curmask %x\n", cpu, val, s->intreg_pending[cpu]); |
| ... | ... | @@ -142,7 +148,7 @@ static uint32_t slavio_intctlm_mem_readl(void *opaque, target_phys_addr_t addr) |
| 142 | 148 | saddr = (addr & INTCTLM_MAXADDR) >> 2; |
| 143 | 149 | switch (saddr) { |
| 144 | 150 | case 0: |
| 145 | - ret = s->intregm_pending & 0x7fffffff; | |
| 151 | + ret = s->intregm_pending & ~MASTER_DISABLE; | |
| 146 | 152 | break; |
| 147 | 153 | case 1: |
| 148 | 154 | ret = s->intregm_disabled; |
| ... | ... | @@ -169,14 +175,14 @@ static void slavio_intctlm_mem_writel(void *opaque, target_phys_addr_t addr, uin |
| 169 | 175 | switch (saddr) { |
| 170 | 176 | case 2: // clear (enable) |
| 171 | 177 | // Force clear unused bits |
| 172 | - val &= ~0x4fb2007f; | |
| 178 | + val &= MASTER_IRQ_MASK; | |
| 173 | 179 | s->intregm_disabled &= ~val; |
| 174 | 180 | DPRINTF("Enabled master irq mask %x, curmask %x\n", val, s->intregm_disabled); |
| 175 | 181 | slavio_check_interrupts(s); |
| 176 | 182 | break; |
| 177 | 183 | case 3: // set (disable, clear pending) |
| 178 | 184 | // Force clear unused bits |
| 179 | - val &= ~0x4fb2007f; | |
| 185 | + val &= MASTER_IRQ_MASK; | |
| 180 | 186 | s->intregm_disabled |= val; |
| 181 | 187 | s->intregm_pending &= ~val; |
| 182 | 188 | slavio_check_interrupts(s); |
| ... | ... | @@ -244,14 +250,14 @@ static void slavio_check_interrupts(void *opaque) |
| 244 | 250 | DPRINTF("pending %x disabled %x\n", pending, s->intregm_disabled); |
| 245 | 251 | for (i = 0; i < MAX_CPUS; i++) { |
| 246 | 252 | pil_pending = 0; |
| 247 | - if (pending && !(s->intregm_disabled & 0x80000000) && | |
| 253 | + if (pending && !(s->intregm_disabled & MASTER_DISABLE) && | |
| 248 | 254 | (i == s->target_cpu)) { |
| 249 | 255 | for (j = 0; j < 32; j++) { |
| 250 | 256 | if (pending & (1 << j)) |
| 251 | 257 | pil_pending |= 1 << s->intbit_to_level[j]; |
| 252 | 258 | } |
| 253 | 259 | } |
| 254 | - pil_pending |= (s->intreg_pending[i] >> 16) & 0xfffe; | |
| 260 | + pil_pending |= (s->intreg_pending[i] & CPU_IRQ_MASK) >> 16; | |
| 255 | 261 | |
| 256 | 262 | for (j = 0; j < MAX_PILS; j++) { |
| 257 | 263 | if (pil_pending & (1 << j)) { |
| ... | ... | @@ -346,7 +352,7 @@ static void slavio_intctl_reset(void *opaque) |
| 346 | 352 | for (i = 0; i < MAX_CPUS; i++) { |
| 347 | 353 | s->intreg_pending[i] = 0; |
| 348 | 354 | } |
| 349 | - s->intregm_disabled = ~0xffb2007f; | |
| 355 | + s->intregm_disabled = ~MASTER_IRQ_MASK; | |
| 350 | 356 | s->intregm_pending = 0; |
| 351 | 357 | s->target_cpu = 0; |
| 352 | 358 | slavio_check_interrupts(s); | ... | ... |