mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Inventra MUSB-HDRC host-mode USB.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4232 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
+1
-1
@@ -612,7 +612,7 @@ OBJS+= spitz.o ide.o serial.o nand.o ecc.o
|
||||
OBJS+= omap1.o omap_lcdc.o omap_dma.o omap_clk.o omap_mmc.o omap_i2c.o
|
||||
OBJS+= omap2.o omap_dss.o
|
||||
OBJS+= palm.o tsc210x.o
|
||||
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o
|
||||
OBJS+= nseries.o blizzard.o onenand.o vga.o cbus.o tusb6010.o usb-musb.o
|
||||
OBJS+= mst_fpga.o mainstone.o
|
||||
CPPFLAGS += -DHAS_AUDIO
|
||||
endif
|
||||
|
||||
@@ -52,4 +52,11 @@ void *tahvo_init(qemu_irq irq, int betty);
|
||||
|
||||
void retu_key_event(void *retu, int state);
|
||||
|
||||
/* tusb6010.c */
|
||||
struct tusb_s;
|
||||
struct tusb_s *tusb6010_init(qemu_irq intr);
|
||||
int tusb6010_sync_io(struct tusb_s *s);
|
||||
int tusb6010_async_io(struct tusb_s *s);
|
||||
void tusb6010_power(struct tusb_s *s, int on);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -42,6 +42,7 @@ struct n800_s {
|
||||
|
||||
int keymap[0x80];
|
||||
|
||||
struct tusb_s *usb;
|
||||
void *retu;
|
||||
void *tahvo;
|
||||
};
|
||||
@@ -565,6 +566,29 @@ static void n800_cbus_setup(struct n800_s *s)
|
||||
cbus_attach(cbus, s->tahvo = tahvo_init(tahvo_irq, 1));
|
||||
}
|
||||
|
||||
static void n800_usb_power_cb(void *opaque, int line, int level)
|
||||
{
|
||||
struct n800_s *s = opaque;
|
||||
|
||||
tusb6010_power(s->usb, level);
|
||||
}
|
||||
|
||||
static void n800_usb_setup(struct n800_s *s)
|
||||
{
|
||||
qemu_irq tusb_irq = omap2_gpio_in_get(s->cpu->gpif, N8X0_TUSB_INT_GPIO)[0];
|
||||
qemu_irq tusb_pwr = qemu_allocate_irqs(n800_usb_power_cb, s, 1)[0];
|
||||
struct tusb_s *tusb = tusb6010_init(tusb_irq);
|
||||
|
||||
/* Using the NOR interface */
|
||||
omap_gpmc_attach(s->cpu->gpmc, N8X0_USB_ASYNC_CS,
|
||||
tusb6010_async_io(tusb), 0, 0, tusb);
|
||||
omap_gpmc_attach(s->cpu->gpmc, N8X0_USB_SYNC_CS,
|
||||
tusb6010_sync_io(tusb), 0, 0, tusb);
|
||||
|
||||
s->usb = tusb;
|
||||
omap2_gpio_out_set(s->cpu->gpif, N800_TUSB_ENABLE_GPIO, tusb_pwr);
|
||||
}
|
||||
|
||||
/* This task is normally performed by the bootloader. If we're loading
|
||||
* a kernel directly, we need to set up GPMC mappings ourselves. */
|
||||
static void n800_gpmc_init(struct n800_s *s)
|
||||
@@ -891,6 +915,8 @@ static void n800_init(int ram_size, int vga_ram_size,
|
||||
n800_spi_setup(s);
|
||||
n800_dss_setup(s, ds);
|
||||
n800_cbus_setup(s);
|
||||
if (usb_enabled)
|
||||
n800_usb_setup(s);
|
||||
|
||||
/* Setup initial (reset) machine state */
|
||||
|
||||
|
||||
+770
File diff suppressed because it is too large
Load Diff
+1449
File diff suppressed because it is too large
Load Diff
@@ -108,6 +108,11 @@
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
|
||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
||||
#define USB_ENDPOINT_XFER_ISOC 1
|
||||
#define USB_ENDPOINT_XFER_BULK 2
|
||||
#define USB_ENDPOINT_XFER_INT 3
|
||||
|
||||
typedef struct USBPort USBPort;
|
||||
typedef struct USBDevice USBDevice;
|
||||
typedef struct USBPacket USBPacket;
|
||||
@@ -227,3 +232,25 @@ void qemu_register_usb_port(USBPort *port, void *opaque, int index,
|
||||
|
||||
#define VM_USB_HUB_SIZE 8
|
||||
|
||||
/* usb-musb.c */
|
||||
enum musb_irq_source_e {
|
||||
musb_irq_suspend = 0,
|
||||
musb_irq_resume,
|
||||
musb_irq_rst_babble,
|
||||
musb_irq_sof,
|
||||
musb_irq_connect,
|
||||
musb_irq_disconnect,
|
||||
musb_irq_vbus_request,
|
||||
musb_irq_vbus_error,
|
||||
musb_irq_rx,
|
||||
musb_irq_tx,
|
||||
musb_set_vbus,
|
||||
musb_set_session,
|
||||
__musb_irq_max,
|
||||
};
|
||||
|
||||
struct musb_s;
|
||||
struct musb_s *musb_init(qemu_irq *irqs);
|
||||
uint32_t musb_core_intr_get(struct musb_s *s);
|
||||
void musb_core_intr_clear(struct musb_s *s, uint32_t mask);
|
||||
void musb_set_size(struct musb_s *s, int epnum, int size, int is_tx);
|
||||
|
||||
Reference in New Issue
Block a user