* 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;
{
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 */
{
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 */
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;
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);
}