]> Git Repo - qemu.git/blobdiff - hw/omap_mmc.c
Fix CPU timer interrupts
[qemu.git] / hw / omap_mmc.c
index 008318db36bfddf6093a79f632dc1241fd1add74..6fbbb84912dfdc8135baf8316997d06e3b2e82ce 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
-#include "vl.h"
+#include "hw.h"
+#include "omap.h"
 #include "sd.h"
 
 struct omap_mmc_s {
     target_phys_addr_t base;
     qemu_irq irq;
     qemu_irq *dma;
-    qemu_irq handler[2];
     omap_clk clk;
     SDState *card;
     uint16_t last_cmd;
@@ -269,7 +269,7 @@ static uint32_t omap_mmc_read(void *opaque, target_phys_addr_t offset)
 {
     uint16_t i;
     struct omap_mmc_s *s = (struct omap_mmc_s *) opaque;
-    offset -= s->base;
+    offset &= OMAP_MPUI_REG_MASK;
 
     switch (offset) {
     case 0x00: /* MMC_CMD */
@@ -351,7 +351,7 @@ static void omap_mmc_write(void *opaque, target_phys_addr_t offset,
 {
     int i;
     struct omap_mmc_s *s = (struct omap_mmc_s *) opaque;
-    offset -= s->base;
+    offset &= OMAP_MPUI_REG_MASK;
 
     switch (offset) {
     case 0x00: /* MMC_CMD */
@@ -507,23 +507,8 @@ void omap_mmc_reset(struct omap_mmc_s *host)
     host->transfer = 0;
 }
 
-static void omap_mmc_ro_cb(void *opaque, int level)
-{
-    struct omap_mmc_s *s = (struct omap_mmc_s *) opaque;
-
-    if (s->handler[0])
-        qemu_set_irq(s->handler[0], level);
-}
-
-static void omap_mmc_cover_cb(void *opaque, int level)
-{
-    struct omap_mmc_s *s = (struct omap_mmc_s *) opaque;
-
-    if (s->handler[1])
-        qemu_set_irq(s->handler[1], level);
-}
-
 struct omap_mmc_s *omap_mmc_init(target_phys_addr_t base,
+                BlockDriverState *bd,
                 qemu_irq irq, qemu_irq dma[], omap_clk clk)
 {
     int iomemtype;
@@ -540,15 +525,12 @@ struct omap_mmc_s *omap_mmc_init(target_phys_addr_t base,
     cpu_register_physical_memory(s->base, 0x800, iomemtype);
 
     /* Instantiate the storage */
-    s->card = sd_init(sd_bdrv);
-
-    sd_set_cb(s->card, s, omap_mmc_ro_cb, omap_mmc_cover_cb);
+    s->card = sd_init(bd, 0);
 
     return s;
 }
 
 void omap_mmc_handlers(struct omap_mmc_s *s, qemu_irq ro, qemu_irq cover)
 {
-    s->handler[0] = ro;
-    s->handler[1] = cover;
+    sd_set_cb(s->card, ro, cover);
 }
This page took 0.026714 seconds and 4 git commands to generate.