Revision 8e129e07 hw/omap_mmc.c
b/hw/omap_mmc.c | ||
---|---|---|
25 | 25 |
target_phys_addr_t base; |
26 | 26 |
qemu_irq irq; |
27 | 27 |
qemu_irq *dma; |
28 |
qemu_irq handler[2]; |
|
28 | 29 |
omap_clk clk; |
29 | 30 |
SDState *card; |
30 | 31 |
uint16_t last_cmd; |
... | ... | |
506 | 507 |
host->transfer = 0; |
507 | 508 |
} |
508 | 509 |
|
510 |
static void omap_mmc_ro_cb(void *opaque, int level) |
|
511 |
{ |
|
512 |
struct omap_mmc_s *s = (struct omap_mmc_s *) opaque; |
|
513 |
|
|
514 |
if (s->handler[0]) |
|
515 |
qemu_set_irq(s->handler[0], level); |
|
516 |
} |
|
517 |
|
|
518 |
static void omap_mmc_cover_cb(void *opaque, int level) |
|
519 |
{ |
|
520 |
struct omap_mmc_s *s = (struct omap_mmc_s *) opaque; |
|
521 |
|
|
522 |
if (s->handler[1]) |
|
523 |
qemu_set_irq(s->handler[1], level); |
|
524 |
} |
|
525 |
|
|
509 | 526 |
struct omap_mmc_s *omap_mmc_init(target_phys_addr_t base, |
510 | 527 |
qemu_irq irq, qemu_irq dma[], omap_clk clk) |
511 | 528 |
{ |
... | ... | |
525 | 542 |
/* Instantiate the storage */ |
526 | 543 |
s->card = sd_init(sd_bdrv); |
527 | 544 |
|
545 |
sd_set_cb(s->card, s, omap_mmc_ro_cb, omap_mmc_cover_cb); |
|
546 |
|
|
528 | 547 |
return s; |
529 | 548 |
} |
530 | 549 |
|
531 |
/* TODO: insertion and read-only handlers */ |
|
550 |
void omap_mmc_handlers(struct omap_mmc_s *s, qemu_irq ro, qemu_irq cover) |
|
551 |
{ |
|
552 |
s->handler[0] = ro; |
|
553 |
s->handler[1] = cover; |
|
554 |
} |
Also available in: Unified diff