Revision d8f699cb hw/omap.h
b/hw/omap.h | ||
---|---|---|
479 | 479 |
struct omap_rtc_s *omap_rtc_init(target_phys_addr_t base, |
480 | 480 |
qemu_irq *irq, omap_clk clk); |
481 | 481 |
|
482 |
struct i2s_codec_s { |
|
483 |
void *opaque; |
|
484 |
|
|
485 |
/* The CPU can call this if it is generating the clock signal on the |
|
486 |
* i2s port. The CODEC can ignore it if it is set up as a clock |
|
487 |
* master and generates its own clock. */ |
|
488 |
void (*set_rate)(void *opaque, int in, int out); |
|
489 |
|
|
490 |
void (*tx_swallow)(void *opaque); |
|
491 |
qemu_irq rx_swallow; |
|
492 |
qemu_irq tx_start; |
|
493 |
|
|
494 |
struct i2s_fifo_s { |
|
495 |
uint8_t *fifo; |
|
496 |
int len; |
|
497 |
int start; |
|
498 |
int size; |
|
499 |
} in, out; |
|
500 |
}; |
|
501 |
struct omap_mcbsp_s; |
|
502 |
struct omap_mcbsp_s *omap_mcbsp_init(target_phys_addr_t base, |
|
503 |
qemu_irq *irq, qemu_irq *dma, omap_clk clk); |
|
504 |
void omap_mcbsp_i2s_attach(struct omap_mcbsp_s *s, struct i2s_codec_s *slave); |
|
505 |
|
|
482 | 506 |
/* omap_lcdc.c */ |
483 | 507 |
struct omap_lcd_panel_s; |
484 | 508 |
void omap_lcdc_reset(struct omap_lcd_panel_s *s); |
... | ... | |
536 | 560 |
|
537 | 561 |
struct omap_gpio_s *gpio; |
538 | 562 |
|
563 |
struct omap_mcbsp_s *mcbsp1; |
|
564 |
struct omap_mcbsp_s *mcbsp3; |
|
565 |
|
|
539 | 566 |
/* MPU public TIPB peripherals */ |
540 | 567 |
struct omap_32khz_timer_s *os_timer; |
541 | 568 |
|
... | ... | |
563 | 590 |
|
564 | 591 |
struct omap_rtc_s *rtc; |
565 | 592 |
|
593 |
struct omap_mcbsp_s *mcbsp2; |
|
594 |
|
|
566 | 595 |
/* MPU private TIPB peripherals */ |
567 | 596 |
struct omap_intr_handler_s *ih[2]; |
568 | 597 |
|
... | ... | |
646 | 675 |
__FUNCTION__, paddr) |
647 | 676 |
|
648 | 677 |
# define TCMI_VERBOSE 1 |
678 |
//# define MEM_VERBOSE 1 |
|
649 | 679 |
|
650 | 680 |
# ifdef TCMI_VERBOSE |
651 | 681 |
# define OMAP_8B_REG(paddr) \ |
... | ... | |
665 | 695 |
|
666 | 696 |
# define OMAP_MPUI_REG_MASK 0x000007ff |
667 | 697 |
|
698 |
# ifdef MEM_VERBOSE |
|
699 |
struct io_fn { |
|
700 |
CPUReadMemoryFunc **mem_read; |
|
701 |
CPUWriteMemoryFunc **mem_write; |
|
702 |
void *opaque; |
|
703 |
int in; |
|
704 |
}; |
|
705 |
|
|
706 |
static uint32_t io_readb(void *opaque, target_phys_addr_t addr) |
|
707 |
{ |
|
708 |
struct io_fn *s = opaque; |
|
709 |
uint32_t ret; |
|
710 |
|
|
711 |
s->in ++; |
|
712 |
ret = s->mem_read[0](s->opaque, addr); |
|
713 |
s->in --; |
|
714 |
if (!s->in) |
|
715 |
fprintf(stderr, "%08x ---> %02x\n", (uint32_t) addr, ret); |
|
716 |
return ret; |
|
717 |
} |
|
718 |
static uint32_t io_readh(void *opaque, target_phys_addr_t addr) |
|
719 |
{ |
|
720 |
struct io_fn *s = opaque; |
|
721 |
uint32_t ret; |
|
722 |
|
|
723 |
s->in ++; |
|
724 |
ret = s->mem_read[1](s->opaque, addr); |
|
725 |
s->in --; |
|
726 |
if (!s->in) |
|
727 |
fprintf(stderr, "%08x ---> %04x\n", (uint32_t) addr, ret); |
|
728 |
return ret; |
|
729 |
} |
|
730 |
static uint32_t io_readw(void *opaque, target_phys_addr_t addr) |
|
731 |
{ |
|
732 |
struct io_fn *s = opaque; |
|
733 |
uint32_t ret; |
|
734 |
|
|
735 |
s->in ++; |
|
736 |
ret = s->mem_read[2](s->opaque, addr); |
|
737 |
s->in --; |
|
738 |
if (!s->in) |
|
739 |
fprintf(stderr, "%08x ---> %08x\n", (uint32_t) addr, ret); |
|
740 |
return ret; |
|
741 |
} |
|
742 |
static void io_writeb(void *opaque, target_phys_addr_t addr, uint32_t value) |
|
743 |
{ |
|
744 |
struct io_fn *s = opaque; |
|
745 |
|
|
746 |
if (!s->in) |
|
747 |
fprintf(stderr, "%08x <--- %02x\n", (uint32_t) addr, value); |
|
748 |
s->in ++; |
|
749 |
s->mem_write[0](s->opaque, addr, value); |
|
750 |
s->in --; |
|
751 |
} |
|
752 |
static void io_writeh(void *opaque, target_phys_addr_t addr, uint32_t value) |
|
753 |
{ |
|
754 |
struct io_fn *s = opaque; |
|
755 |
|
|
756 |
if (!s->in) |
|
757 |
fprintf(stderr, "%08x <--- %04x\n", (uint32_t) addr, value); |
|
758 |
s->in ++; |
|
759 |
s->mem_write[1](s->opaque, addr, value); |
|
760 |
s->in --; |
|
761 |
} |
|
762 |
static void io_writew(void *opaque, target_phys_addr_t addr, uint32_t value) |
|
763 |
{ |
|
764 |
struct io_fn *s = opaque; |
|
765 |
|
|
766 |
if (!s->in) |
|
767 |
fprintf(stderr, "%08x <--- %08x\n", (uint32_t) addr, value); |
|
768 |
s->in ++; |
|
769 |
s->mem_write[2](s->opaque, addr, value); |
|
770 |
s->in --; |
|
771 |
} |
|
772 |
|
|
773 |
static CPUReadMemoryFunc *io_readfn[] = { io_readb, io_readh, io_readw, }; |
|
774 |
static CPUWriteMemoryFunc *io_writefn[] = { io_writeb, io_writeh, io_writew, }; |
|
775 |
|
|
776 |
inline static int debug_register_io_memory(int io_index, |
|
777 |
CPUReadMemoryFunc **mem_read, CPUWriteMemoryFunc **mem_write, |
|
778 |
void *opaque) |
|
779 |
{ |
|
780 |
struct io_fn *s = qemu_malloc(sizeof(struct io_fn)); |
|
781 |
|
|
782 |
s->mem_read = mem_read; |
|
783 |
s->mem_write = mem_write; |
|
784 |
s->opaque = opaque; |
|
785 |
s->in = 0; |
|
786 |
return cpu_register_io_memory(io_index, io_readfn, io_writefn, s); |
|
787 |
} |
|
788 |
# define cpu_register_io_memory debug_register_io_memory |
|
789 |
# endif |
|
790 |
|
|
668 | 791 |
#endif /* hw_omap_h */ |
Also available in: Unified diff