diff options
Diffstat (limited to 'hw/omap_mmc.c')
-rw-r--r-- | hw/omap_mmc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/hw/omap_mmc.c b/hw/omap_mmc.c index aa77660f2..6fbbb8491 100644 --- a/hw/omap_mmc.c +++ b/hw/omap_mmc.c @@ -18,7 +18,8 @@ * 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 { @@ -268,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 */ @@ -350,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,6 +508,7 @@ void omap_mmc_reset(struct omap_mmc_s *host) } 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; @@ -523,9 +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); + s->card = sd_init(bd, 0); return s; } -/* TODO: insertion and read-only handlers */ +void omap_mmc_handlers(struct omap_mmc_s *s, qemu_irq ro, qemu_irq cover) +{ + sd_set_cb(s->card, ro, cover); +} |