qemu-2.1.0-m68k.patch 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. --- qemu-2.2.0.orig/hw/m68k/mcf_intc.c 2014-12-09 15:45:41.000000000 +0100
  2. +++ qemu-2.2.0/hw/m68k/mcf_intc.c 2014-12-31 21:02:29.000000000 +0100
  3. @@ -65,6 +65,10 @@ static uint64_t mcf_intc_read(void *opaq
  4. return (uint32_t)(s->ifr >> 32);
  5. case 0x14:
  6. return (uint32_t)s->ifr;
  7. + /* Reading from SIMR and CIMR return 0 */
  8. + case 0x1c:
  9. + case 0x1d:
  10. + return 0;
  11. case 0xe0: /* SWIACK. */
  12. return s->active_vector;
  13. case 0xe1: case 0xe2: case 0xe3: case 0xe4:
  14. @@ -102,6 +106,20 @@ static void mcf_intc_write(void *opaque,
  15. case 0x0c:
  16. s->imr = (s->imr & 0xffffffff00000000ull) | (uint32_t)val;
  17. break;
  18. + /* SIMR allows to easily mask interrupts */
  19. + case 0x1c:
  20. + if (val & 0x40)
  21. + s->imr = ~0ull;
  22. + else
  23. + s->imr |= (1 << (val & 0x3f));
  24. + break;
  25. + /* CIMR allows to easily unmask interrupts */
  26. + case 0x1d:
  27. + if (val & 0x40)
  28. + s->imr = 0ull;
  29. + else
  30. + s->imr &= ~(1 << (val & 0x3f));
  31. + break;
  32. default:
  33. hw_error("mcf_intc_write: Bad write offset %d\n", offset);
  34. break;