aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/renesas_usbhs/fifo.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/renesas_usbhs/fifo.h')
-rw-r--r--drivers/usb/renesas_usbhs/fifo.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/usb/renesas_usbhs/fifo.h b/drivers/usb/renesas_usbhs/fifo.h
index 94db269f84c2..ed6d8e56c13c 100644
--- a/drivers/usb/renesas_usbhs/fifo.h
+++ b/drivers/usb/renesas_usbhs/fifo.h
@@ -17,18 +17,33 @@
17#ifndef RENESAS_USB_FIFO_H 17#ifndef RENESAS_USB_FIFO_H
18#define RENESAS_USB_FIFO_H 18#define RENESAS_USB_FIFO_H
19 19
20#include <linux/interrupt.h>
21#include <linux/sh_dma.h>
22#include <asm/dma.h>
20#include "pipe.h" 23#include "pipe.h"
21 24
25#define DMA_ADDR_INVALID (~(dma_addr_t)0)
26
22struct usbhs_fifo { 27struct usbhs_fifo {
28 char *name;
23 u32 port; /* xFIFO */ 29 u32 port; /* xFIFO */
24 u32 sel; /* xFIFOSEL */ 30 u32 sel; /* xFIFOSEL */
25 u32 ctr; /* xFIFOCTR */ 31 u32 ctr; /* xFIFOCTR */
26 32
27 struct usbhs_pipe *pipe; 33 struct usbhs_pipe *pipe;
34 struct tasklet_struct tasklet;
35
36 struct dma_chan *tx_chan;
37 struct dma_chan *rx_chan;
38
39 struct sh_dmae_slave tx_slave;
40 struct sh_dmae_slave rx_slave;
28}; 41};
29 42
30struct usbhs_fifo_info { 43struct usbhs_fifo_info {
31 struct usbhs_fifo cfifo; 44 struct usbhs_fifo cfifo;
45 struct usbhs_fifo d0fifo;
46 struct usbhs_fifo d1fifo;
32}; 47};
33 48
34struct usbhs_pkt_handle; 49struct usbhs_pkt_handle;
@@ -36,8 +51,10 @@ struct usbhs_pkt {
36 struct list_head node; 51 struct list_head node;
37 struct usbhs_pipe *pipe; 52 struct usbhs_pipe *pipe;
38 struct usbhs_pkt_handle *handler; 53 struct usbhs_pkt_handle *handler;
54 dma_addr_t dma;
39 void *buf; 55 void *buf;
40 int length; 56 int length;
57 int trans;
41 int actual; 58 int actual;
42 int zero; 59 int zero;
43}; 60};
@@ -45,6 +62,7 @@ struct usbhs_pkt {
45struct usbhs_pkt_handle { 62struct usbhs_pkt_handle {
46 int (*prepare)(struct usbhs_pkt *pkt, int *is_done); 63 int (*prepare)(struct usbhs_pkt *pkt, int *is_done);
47 int (*try_run)(struct usbhs_pkt *pkt, int *is_done); 64 int (*try_run)(struct usbhs_pkt *pkt, int *is_done);
65 int (*dma_done)(struct usbhs_pkt *pkt, int *is_done);
48}; 66};
49 67
50/* 68/*
@@ -61,12 +79,17 @@ void usbhs_fifo_quit(struct usbhs_priv *priv);
61enum { 79enum {
62 USBHSF_PKT_PREPARE, 80 USBHSF_PKT_PREPARE,
63 USBHSF_PKT_TRY_RUN, 81 USBHSF_PKT_TRY_RUN,
82 USBHSF_PKT_DMA_DONE,
64}; 83};
65 84
66extern struct usbhs_pkt_handle usbhs_fifo_pio_push_handler; 85extern struct usbhs_pkt_handle usbhs_fifo_pio_push_handler;
67extern struct usbhs_pkt_handle usbhs_fifo_pio_pop_handler; 86extern struct usbhs_pkt_handle usbhs_fifo_pio_pop_handler;
68extern struct usbhs_pkt_handle usbhs_ctrl_stage_end_handler; 87extern struct usbhs_pkt_handle usbhs_ctrl_stage_end_handler;
69 88
89extern struct usbhs_pkt_handle usbhs_fifo_dma_push_handler;
90extern struct usbhs_pkt_handle usbhs_fifo_dma_pop_handler;
91
92
70void usbhs_pkt_init(struct usbhs_pkt *pkt); 93void usbhs_pkt_init(struct usbhs_pkt *pkt);
71void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt, 94void usbhs_pkt_push(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt,
72 struct usbhs_pkt_handle *handler, 95 struct usbhs_pkt_handle *handler,
@@ -76,5 +99,6 @@ int __usbhs_pkt_handler(struct usbhs_pipe *pipe, int type);
76 99
77#define usbhs_pkt_start(p) __usbhs_pkt_handler(p, USBHSF_PKT_PREPARE) 100#define usbhs_pkt_start(p) __usbhs_pkt_handler(p, USBHSF_PKT_PREPARE)
78#define usbhs_pkt_run(p) __usbhs_pkt_handler(p, USBHSF_PKT_TRY_RUN) 101#define usbhs_pkt_run(p) __usbhs_pkt_handler(p, USBHSF_PKT_TRY_RUN)
102#define usbhs_pkt_dmadone(p) __usbhs_pkt_handler(p, USBHSF_PKT_DMA_DONE)
79 103
80#endif /* RENESAS_USB_FIFO_H */ 104#endif /* RENESAS_USB_FIFO_H */