xref: /utopia/UTPA2-700.0.x/modules/usb/drv/usb_ecos/usbhost/drvHCD.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi 
79*53ee8cc1Swenshuai.xi #ifndef _CORE_HCD_H_
80*53ee8cc1Swenshuai.xi #define _CORE_HCD_H_
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi #include "MsCommon.h"
83*53ee8cc1Swenshuai.xi #include "include/drvUSB.h"
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi #define USB_PID_UNDEF_0      0xf0
86*53ee8cc1Swenshuai.xi #define USB_PID_OUT      0xe1
87*53ee8cc1Swenshuai.xi #define USB_PID_ACK      0xd2
88*53ee8cc1Swenshuai.xi #define USB_PID_DATA0      0xc3
89*53ee8cc1Swenshuai.xi #define USB_PID_PING      0xb4
90*53ee8cc1Swenshuai.xi #define USB_PID_SOF      0xa5
91*53ee8cc1Swenshuai.xi #define USB_PID_NYET      0x96
92*53ee8cc1Swenshuai.xi #define USB_PID_DATA2      0x87
93*53ee8cc1Swenshuai.xi #define USB_PID_SPLIT      0x78
94*53ee8cc1Swenshuai.xi #define USB_PID_IN      0x69
95*53ee8cc1Swenshuai.xi #define USB_PID_NAK      0x5a
96*53ee8cc1Swenshuai.xi #define USB_PID_DATA1      0x4b
97*53ee8cc1Swenshuai.xi #define USB_PID_PREAMBLE    0x3c
98*53ee8cc1Swenshuai.xi #define USB_PID_ERR      0x3c
99*53ee8cc1Swenshuai.xi #define USB_PID_SETUP      0x2d
100*53ee8cc1Swenshuai.xi #define USB_PID_STALL      0x1e
101*53ee8cc1Swenshuai.xi #define USB_PID_MDATA      0x0f
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi struct usb_hcd {
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi   struct usb_bus    self;
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi   //const char    *product_desc;  /* product/vendor string */
108*53ee8cc1Swenshuai.xi   char    product_desc[24];  /* product/vendor string */
109*53ee8cc1Swenshuai.xi   //const char    *description;  /* "ehci-hcd" etc */
110*53ee8cc1Swenshuai.xi   char    description[24];  /* "ehci-hcd" etc */
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi   struct timer_list  rh_timer;
113*53ee8cc1Swenshuai.xi   struct urb		*status_urb;
114*53ee8cc1Swenshuai.xi   struct list_head  dev_list;
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi   struct hc_driver  *driver;
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi #if 1 //def ROOTHUB_INTERRUPT_MODE
119*53ee8cc1Swenshuai.xi   unsigned        rh_registered:1;/* is root hub registered? */
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi   /* The next flag is a stopgap, to be removed when all the HCDs
122*53ee8cc1Swenshuai.xi    * support the new root-hub polling mechanism. */
123*53ee8cc1Swenshuai.xi   unsigned        uses_new_polling:1;
124*53ee8cc1Swenshuai.xi   unsigned        poll_rh:1;  /* poll for rh status? */
125*53ee8cc1Swenshuai.xi   unsigned        poll_pending:1; /* status has changed? */
126*53ee8cc1Swenshuai.xi   unsigned        wireless:1; /* Wireless USB HCD */
127*53ee8cc1Swenshuai.xi   unsigned        authorized_default:1;
128*53ee8cc1Swenshuai.xi   unsigned        has_tt:1;   /* Integrated TT in root hub */
129*53ee8cc1Swenshuai.xi #endif
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi   int      irq;
132*53ee8cc1Swenshuai.xi   U32      *regs;
133*53ee8cc1Swenshuai.xi   struct device_s    *controller;
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi   struct pci_dev    *pdev;
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi #ifdef  CONFIG_PCI
138*53ee8cc1Swenshuai.xi   int      region;
139*53ee8cc1Swenshuai.xi   U32      pci_state [16];
140*53ee8cc1Swenshuai.xi   atomic_t    resume_count;
141*53ee8cc1Swenshuai.xi #endif
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi #define HCD_BUFFER_POOLS  5
144*53ee8cc1Swenshuai.xi   struct pci_pool    *pool [HCD_BUFFER_POOLS];
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi   int      state;
147*53ee8cc1Swenshuai.xi #define  __ACTIVE    0x01
148*53ee8cc1Swenshuai.xi #define  __SLEEPY    0x02
149*53ee8cc1Swenshuai.xi #define  __SUSPEND    0x04
150*53ee8cc1Swenshuai.xi #define  __TRANSIENT    0x80
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi #define  USB_STATE_HALT    0
153*53ee8cc1Swenshuai.xi #define  USB_STATE_RUNNING  (__ACTIVE)
154*53ee8cc1Swenshuai.xi #define  USB_STATE_READY    (__ACTIVE|__SLEEPY)
155*53ee8cc1Swenshuai.xi #define  USB_STATE_QUIESCING  (__SUSPEND|__TRANSIENT|__ACTIVE)
156*53ee8cc1Swenshuai.xi #define  USB_STATE_RESUMING  (__SUSPEND|__TRANSIENT)
157*53ee8cc1Swenshuai.xi #define  USB_STATE_SUSPENDED  (__SUSPEND)
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi #define  HCD_IS_RUNNING(state) ((state) & __ACTIVE)
160*53ee8cc1Swenshuai.xi #define  HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi #if 1 // new to collect hcd related variables
163*53ee8cc1Swenshuai.xi     U32 host_id;
164*53ee8cc1Swenshuai.xi     U32 pre_sts; // preserve the previous state (ehci_hub_status_data)
165*53ee8cc1Swenshuai.xi     U32 pre_temp; // preserve the previous state (ehci_hub_control_EX)
166*53ee8cc1Swenshuai.xi     S32 USBWaitFlg; // OS wait flag
167*53ee8cc1Swenshuai.xi     U32 badDeviceCnt; // for Philips mp3 device
168*53ee8cc1Swenshuai.xi     BOOL isBadDevice; // backward compatible
169*53ee8cc1Swenshuai.xi     BOOL isRootHubPortReset; // backward compatible, may be omitted
170*53ee8cc1Swenshuai.xi     struct list_head *phub_event;
171*53ee8cc1Swenshuai.xi    struct s_gVar4UsbPort *pgVar; // link to global variable struct, JF
172*53ee8cc1Swenshuai.xi #endif
173*53ee8cc1Swenshuai.xi };
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi struct usb_otgd {
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi   struct usb_bus    *bus;
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi   //const char    *product_desc;  /* product/vendor string */
180*53ee8cc1Swenshuai.xi   char    product_desc[24];  /* product/vendor string */
181*53ee8cc1Swenshuai.xi   //const char    *description;    /* "FOTG100_DRIVER" etc */
182*53ee8cc1Swenshuai.xi   char    description[24];    /* "FOTG100_DRIVER" etc */
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi   struct otg_driver  *driver;
185*53ee8cc1Swenshuai.xi   int      irq;
186*53ee8cc1Swenshuai.xi   U32     *regs;
187*53ee8cc1Swenshuai.xi   struct device    *controller;
188*53ee8cc1Swenshuai.xi   struct usb_otg_ap_operations ap_op;
189*53ee8cc1Swenshuai.xi   struct usb_otg_descriptor desc;
190*53ee8cc1Swenshuai.xi };
191*53ee8cc1Swenshuai.xi 
hcd_to_bus(struct usb_hcd * hcd)192*53ee8cc1Swenshuai.xi static __inline__ struct usb_bus *hcd_to_bus (struct usb_hcd *hcd)
193*53ee8cc1Swenshuai.xi {
194*53ee8cc1Swenshuai.xi   return &hcd->self;
195*53ee8cc1Swenshuai.xi }
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi struct hcd_dev {
199*53ee8cc1Swenshuai.xi   struct list_head  dev_list;
200*53ee8cc1Swenshuai.xi   struct list_head  urb_list;
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi   void      *ep[32];
203*53ee8cc1Swenshuai.xi };
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi struct hcd_timeout {
207*53ee8cc1Swenshuai.xi   struct list_head  timeout_list;
208*53ee8cc1Swenshuai.xi   struct timer_list  timer;
209*53ee8cc1Swenshuai.xi };
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi struct usb_operations {
212*53ee8cc1Swenshuai.xi   int (*allocate)(struct usb_device *);
213*53ee8cc1Swenshuai.xi   int (*deallocate)(struct usb_device *);
214*53ee8cc1Swenshuai.xi   int (*get_frame_number) (struct usb_device *usb_dev);
215*53ee8cc1Swenshuai.xi   int (*submit_urb) (struct urb *urb, int mem_flags);
216*53ee8cc1Swenshuai.xi   int (*unlink_urb) (struct urb *urb);
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi   void *(*buffer_alloc)(struct usb_bus *bus, size_t size,
219*53ee8cc1Swenshuai.xi       int mem_flags,
220*53ee8cc1Swenshuai.xi       dma_addr_t *dma);
221*53ee8cc1Swenshuai.xi   void (*buffer_free)(struct usb_bus *bus, size_t size,
222*53ee8cc1Swenshuai.xi       void *addr, dma_addr_t dma);
223*53ee8cc1Swenshuai.xi 
224*53ee8cc1Swenshuai.xi   void (*disable)(struct usb_device *udev, int bEndpointAddress);
225*53ee8cc1Swenshuai.xi };
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi 
228*53ee8cc1Swenshuai.xi struct pt_regs;
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
231*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
232*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
233*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
234*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
235*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
236*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
237*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
238*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
239*53ee8cc1Swenshuai.xi struct hc_driver {
240*53ee8cc1Swenshuai.xi   char  description[24];
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi   void  (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);
243*53ee8cc1Swenshuai.xi   int  flags;
244*53ee8cc1Swenshuai.xi #define  HCD_MEMORY  0x0001
245*53ee8cc1Swenshuai.xi #define  HCD_USB11  0x0010
246*53ee8cc1Swenshuai.xi #define  HCD_USB2  0x0020
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi   int  (*reset) (struct usb_hcd *hcd);
249*53ee8cc1Swenshuai.xi   int  (*start) (struct usb_hcd *hcd);
250*53ee8cc1Swenshuai.xi   int  (*restart) (struct usb_hcd *hcd);
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi   int  (*suspend) (struct usb_hcd *hcd, U32 state);
253*53ee8cc1Swenshuai.xi 
254*53ee8cc1Swenshuai.xi   int  (*resume) (struct usb_hcd *hcd);
255*53ee8cc1Swenshuai.xi 
256*53ee8cc1Swenshuai.xi   void  (*stop) (struct usb_hcd *hcd);
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi   int  (*get_frame_number) (struct usb_hcd *hcd);
259*53ee8cc1Swenshuai.xi 
260*53ee8cc1Swenshuai.xi   struct usb_hcd  *(*hcd_alloc) (void);
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi   void  (*hcd_free) (struct usb_hcd *hcd);
263*53ee8cc1Swenshuai.xi 
264*53ee8cc1Swenshuai.xi   int  (*urb_enqueue) (struct usb_hcd *hcd, struct urb *urb,
265*53ee8cc1Swenshuai.xi           int mem_flags);
266*53ee8cc1Swenshuai.xi   int  (*urb_dequeue) (struct usb_hcd *hcd, struct urb *urb);
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi   void   (*endpoint_disable)(struct usb_hcd *hcd,
269*53ee8cc1Swenshuai.xi       struct hcd_dev *dev, int bEndpointAddress);
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi   int    (*hub_status_data) (struct usb_hcd *hcd, char *buf);
272*53ee8cc1Swenshuai.xi   int    (*hub_control) (struct usb_hcd *hcd,
273*53ee8cc1Swenshuai.xi         U16 typeReq, U16 wValue, U16 wIndex,
274*53ee8cc1Swenshuai.xi         char *buf, U16 wLength);
275*53ee8cc1Swenshuai.xi };
276*53ee8cc1Swenshuai.xi 
277*53ee8cc1Swenshuai.xi struct otg_driver {
278*53ee8cc1Swenshuai.xi   char  description[24];  /* "FOTG100_DRIVER" etc */
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi   void  (*irq) (struct usb_otgd *otgd, struct pt_regs *regs);
281*53ee8cc1Swenshuai.xi 
282*53ee8cc1Swenshuai.xi   int  flags;
283*53ee8cc1Swenshuai.xi 
284*53ee8cc1Swenshuai.xi   int  (*get_role_ID) (struct usb_otgd *otgd);
285*53ee8cc1Swenshuai.xi   int  (*get_cur_role) (struct usb_otgd *otgd);
286*53ee8cc1Swenshuai.xi   void   (*drop_Vbus) (struct usb_otgd *otgd);
287*53ee8cc1Swenshuai.xi   void   (*drive_Vbus) (struct usb_otgd *otgd);
288*53ee8cc1Swenshuai.xi   int  (*role_change) (struct usb_otgd *otgd);
289*53ee8cc1Swenshuai.xi   int  (*srp_section) (struct usb_otgd *otgd);
290*53ee8cc1Swenshuai.xi   int  (*hnp_section) (struct usb_otgd *otgd);
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi   void  (*start) (struct usb_otgd *otgd);
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi   void  (*stop) (struct usb_otgd *otgd);
295*53ee8cc1Swenshuai.xi 
296*53ee8cc1Swenshuai.xi   struct usb_otgd  *(*otgd_alloc) (void);
297*53ee8cc1Swenshuai.xi   void  (*otgd_free) (struct usb_otgd *otgd);
298*53ee8cc1Swenshuai.xi };
299*53ee8cc1Swenshuai.xi 
300*53ee8cc1Swenshuai.xi extern void usb_hcd_giveback_urb (struct usb_hcd *hcd, struct urb *urb, struct pt_regs *regs);
301*53ee8cc1Swenshuai.xi extern void usb_bus_init (struct usb_bus *bus);
302*53ee8cc1Swenshuai.xi extern void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb);
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi #ifdef CONFIG_PCI
305*53ee8cc1Swenshuai.xi struct pci_dev;
306*53ee8cc1Swenshuai.xi struct pci_device_id;
307*53ee8cc1Swenshuai.xi extern int usb_hcd_pci_probe (struct pci_dev *dev,
308*53ee8cc1Swenshuai.xi         const struct pci_device_id *id);
309*53ee8cc1Swenshuai.xi extern void usb_hcd_pci_remove (struct pci_dev *dev);
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
312*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
313*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
314*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
315*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
316*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
317*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
318*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
319*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
320*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
321*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
322*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
323*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
324*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
325*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
326*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
327*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
328*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
329*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
330*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
331*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
332*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
333*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
334*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
335*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
336*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
337*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
338*53ee8cc1Swenshuai.xi #ifdef CONFIG_PM
339*53ee8cc1Swenshuai.xi extern int usb_hcd_pci_suspend (struct pci_dev *dev, U32 state);
340*53ee8cc1Swenshuai.xi extern int usb_hcd_pci_resume (struct pci_dev *dev);
341*53ee8cc1Swenshuai.xi #endif /* CONFIG_PM */
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi #endif /* CONFIG_PCI */
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi int hcd_buffer_create (struct usb_hcd *hcd);
346*53ee8cc1Swenshuai.xi void hcd_buffer_destroy (struct usb_hcd *hcd);
347*53ee8cc1Swenshuai.xi 
348*53ee8cc1Swenshuai.xi void *hcd_buffer_alloc (struct usb_bus *bus, size_t size,
349*53ee8cc1Swenshuai.xi   int mem_flags, dma_addr_t *dma);
350*53ee8cc1Swenshuai.xi void hcd_buffer_free (struct usb_bus *bus, size_t size,
351*53ee8cc1Swenshuai.xi   void *addr, dma_addr_t dma);
352*53ee8cc1Swenshuai.xi 
353*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
354*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
355*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
356*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
357*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
358*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
359*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
360*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
361*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
362*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
363*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
364*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
365*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
366*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
367*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
368*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
369*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
370*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
371*53ee8cc1Swenshuai.xi extern struct usb_operations usb_hcd_operations;
372*53ee8cc1Swenshuai.xi extern irqreturn_t usb_hcd_irq (int irq, void *__hcd, struct pt_regs *r);
373*53ee8cc1Swenshuai.xi extern void usb_hc_died (struct usb_hcd *hcd);
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi extern int usb_new_device(struct usb_device *dev, struct device_s *parent);
376*53ee8cc1Swenshuai.xi extern void usb_choose_address(struct usb_device *dev);
377*53ee8cc1Swenshuai.xi extern void usb_disconnect(struct usb_device **);
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi extern int usb_get_configuration(struct usb_device *dev);
380*53ee8cc1Swenshuai.xi extern void usb_destroy_configuration(struct usb_device *dev);
381*53ee8cc1Swenshuai.xi extern int usb_set_address(struct usb_device *dev);
382*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
383*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
384*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
385*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
386*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
387*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
388*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
389*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
390*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
391*53ee8cc1Swenshuai.xi 
392*53ee8cc1Swenshuai.xi #define usb_snddefctrl(dev)    (((U32)PIPE_CONTROL << 30))
393*53ee8cc1Swenshuai.xi #define usb_rcvdefctrl(dev)    (((U32)PIPE_CONTROL << 30) | USB_DIR_IN)
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi #include "drvHUB.h"
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi #define DeviceRequest \
398*53ee8cc1Swenshuai.xi   ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
399*53ee8cc1Swenshuai.xi #define DeviceOutRequest \
400*53ee8cc1Swenshuai.xi   ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8)
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi #define InterfaceRequest \
403*53ee8cc1Swenshuai.xi   ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
404*53ee8cc1Swenshuai.xi 
405*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
406*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
407*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
408*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
409*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
410*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
411*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
412*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
413*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
414*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
415*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
416*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
417*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
418*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
419*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
420*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
421*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
422*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
423*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
424*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
425*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
426*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
427*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
428*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
429*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
430*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
431*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
432*53ee8cc1Swenshuai.xi #define EndpointRequest \
433*53ee8cc1Swenshuai.xi   ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
434*53ee8cc1Swenshuai.xi #define EndpointOutRequest \
435*53ee8cc1Swenshuai.xi   ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
436*53ee8cc1Swenshuai.xi 
437*53ee8cc1Swenshuai.xi #define DEVICE_REMOTE_WAKEUP  1
438*53ee8cc1Swenshuai.xi #define ENDPOINT_HALT    0
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi #define ClearHubFeature    (0x2000 | USB_REQ_CLEAR_FEATURE)
441*53ee8cc1Swenshuai.xi #define ClearPortFeature  (0x2300 | USB_REQ_CLEAR_FEATURE)
442*53ee8cc1Swenshuai.xi #define GetHubDescriptor  (0xa000 | USB_REQ_GET_DESCRIPTOR)
443*53ee8cc1Swenshuai.xi #define GetHubStatus    (0xa000 | USB_REQ_GET_STATUS)
444*53ee8cc1Swenshuai.xi #define GetPortStatus    (0xa300 | USB_REQ_GET_STATUS)
445*53ee8cc1Swenshuai.xi #define SetHubFeature    (0x2000 | USB_REQ_SET_FEATURE)
446*53ee8cc1Swenshuai.xi #define SetPortFeature    (0x2300 | USB_REQ_SET_FEATURE)
447*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
448*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
449*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
450*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
451*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
452*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
453*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
454*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
455*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
456*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
457*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
458*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
459*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
460*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
461*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
462*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
463*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
464*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi #define FRAME_TIME_USECS  1000L
468*53ee8cc1Swenshuai.xi #define BitTime(bytecount)  (7 * 8 * bytecount / 6)  /* with integer truncation */
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi #define NS_TO_US(ns)  ((ns + 500L) / 1000L)
471*53ee8cc1Swenshuai.xi 
472*53ee8cc1Swenshuai.xi extern void usb_claim_bandwidth (struct usb_device *dev, struct urb *urb,
473*53ee8cc1Swenshuai.xi     int bustime, int isoc);
474*53ee8cc1Swenshuai.xi extern void usb_release_bandwidth (struct usb_device *dev, struct urb *urb,
475*53ee8cc1Swenshuai.xi     int isoc);
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
478*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
479*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
480*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
481*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
482*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
483*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
484*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
485*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
486*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
487*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
488*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
489*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
490*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
491*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
492*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
493*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
494*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
495*53ee8cc1Swenshuai.xi #define BW_HOST_DELAY  1000L    /* nanoseconds */
496*53ee8cc1Swenshuai.xi #define BW_HUB_LS_SETUP  333L    /* nanoseconds */
497*53ee8cc1Swenshuai.xi 
498*53ee8cc1Swenshuai.xi #define FRAME_TIME_BITS         12000L    /* frame = 1 millisecond */
499*53ee8cc1Swenshuai.xi #define FRAME_TIME_MAX_BITS_ALLOC  (90L * FRAME_TIME_BITS / 100L)
500*53ee8cc1Swenshuai.xi #define FRAME_TIME_MAX_USECS_ALLOC  (90L * FRAME_TIME_USECS / 100L)
501*53ee8cc1Swenshuai.xi 
502*53ee8cc1Swenshuai.xi extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi #define USB2_HOST_DELAY  5  /* nsec, guess */
505*53ee8cc1Swenshuai.xi #define HS_USECS(bytes) NS_TO_US ( ((55 * 8 * 2083)/1000) \
506*53ee8cc1Swenshuai.xi   + ((2083UL * (3167 + BitTime (bytes)))/1000) \
507*53ee8cc1Swenshuai.xi   + USB2_HOST_DELAY)
508*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
509*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
510*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
511*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
512*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
513*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
514*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
515*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
516*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
517*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
518*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
519*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
520*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
521*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
522*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
523*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
524*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
525*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
526*53ee8cc1Swenshuai.xi #define HS_USECS_ISO(bytes) NS_TO_US ( ((long)(38 * 8 * 2.083)) \
527*53ee8cc1Swenshuai.xi   + ((2083UL * (3167 + BitTime (bytes)))/1000) \
528*53ee8cc1Swenshuai.xi   + USB2_HOST_DELAY)
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi extern int usb_calc_bus_time (int speed, int is_input,
531*53ee8cc1Swenshuai.xi       int isoc, int bytecount);
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi /*-------------------------------------------------------------------------*/
534*53ee8cc1Swenshuai.xi 
535*53ee8cc1Swenshuai.xi extern struct usb_bus *usb_alloc_bus (struct usb_operations *);
536*53ee8cc1Swenshuai.xi 
537*53ee8cc1Swenshuai.xi extern int usb_register_bus (struct usb_bus *);
538*53ee8cc1Swenshuai.xi extern void usb_deregister_bus (struct usb_bus *);
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi extern int usb_register_root_hub (struct usb_device *usb_dev,
541*53ee8cc1Swenshuai.xi     struct device_s *parent_dev);
542*53ee8cc1Swenshuai.xi extern int register_root_hub (struct usb_hcd *hcd);
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi extern int usb_register_otg_to_bus(struct usb_otgd *otgd, struct device *hc);
545*53ee8cc1Swenshuai.xi extern int usb_unregister_otg_from_bus(struct usb_otgd *otgd);
546*53ee8cc1Swenshuai.xi 
hcd_register_root(struct usb_hcd * hcd)547*53ee8cc1Swenshuai.xi static __inline__ int hcd_register_root (struct usb_hcd *hcd)
548*53ee8cc1Swenshuai.xi {
549*53ee8cc1Swenshuai.xi #ifdef ROOTHUB_INTERRUPT_MODE
550*53ee8cc1Swenshuai.xi     return register_root_hub(hcd);
551*53ee8cc1Swenshuai.xi #else
552*53ee8cc1Swenshuai.xi   return usb_register_root_hub (
553*53ee8cc1Swenshuai.xi     hcd_to_bus (hcd)->root_hub, hcd->controller);
554*53ee8cc1Swenshuai.xi #endif
555*53ee8cc1Swenshuai.xi }
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi extern struct list_head usb_bus_list;
558*53ee8cc1Swenshuai.xi 
559*53ee8cc1Swenshuai.xi extern struct usb_bus *usb_bus_get (struct usb_bus *bus);
560*53ee8cc1Swenshuai.xi extern void usb_bus_put (struct usb_bus *bus);
561*53ee8cc1Swenshuai.xi 
562*53ee8cc1Swenshuai.xi extern int usb_find_interface_driver (struct usb_device *dev,
563*53ee8cc1Swenshuai.xi   struct usb_interface *interface);
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi #define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
566*53ee8cc1Swenshuai.xi 
567*53ee8cc1Swenshuai.xi #define usb_endpoint_out(ep_dir)  (!((ep_dir) & USB_DIR_IN))
568*53ee8cc1Swenshuai.xi 
569*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
570*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
571*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
572*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
573*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
574*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
575*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
576*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
577*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
578*53ee8cc1Swenshuai.xi #ifdef CONFIG_USB_DEVICEFS
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi extern void usbfs_add_bus(struct usb_bus *bus);
581*53ee8cc1Swenshuai.xi extern void usbfs_remove_bus(struct usb_bus *bus);
582*53ee8cc1Swenshuai.xi extern void usbfs_add_device(struct usb_device *dev);
583*53ee8cc1Swenshuai.xi extern void usbfs_remove_device(struct usb_device *dev);
584*53ee8cc1Swenshuai.xi extern void usbfs_update_special (void);
585*53ee8cc1Swenshuai.xi 
586*53ee8cc1Swenshuai.xi extern int usbfs_init(void);
587*53ee8cc1Swenshuai.xi extern void usbfs_cleanup(void);
588*53ee8cc1Swenshuai.xi 
589*53ee8cc1Swenshuai.xi #else /* CONFIG_USB_DEVICEFS */
590*53ee8cc1Swenshuai.xi 
usbfs_add_bus(struct usb_bus * bus)591*53ee8cc1Swenshuai.xi static __inline__ void usbfs_add_bus(struct usb_bus *bus) {}
usbfs_remove_bus(struct usb_bus * bus)592*53ee8cc1Swenshuai.xi static __inline__ void usbfs_remove_bus(struct usb_bus *bus) {}
usbfs_add_device(struct usb_device * dev)593*53ee8cc1Swenshuai.xi static __inline__ void usbfs_add_device(struct usb_device *dev) {}
usbfs_remove_device(struct usb_device * dev)594*53ee8cc1Swenshuai.xi static __inline__ void usbfs_remove_device(struct usb_device *dev) {}
usbfs_update_special(void)595*53ee8cc1Swenshuai.xi static __inline__ void usbfs_update_special (void) {}
596*53ee8cc1Swenshuai.xi 
usbfs_init(void)597*53ee8cc1Swenshuai.xi static __inline__ int usbfs_init(void) { return 0; }
usbfs_cleanup(void)598*53ee8cc1Swenshuai.xi static __inline__ void usbfs_cleanup(void) { }
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi #endif /* CONFIG_USB_DEVICEFS */
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi #define bitmap   DeviceRemovable
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi #define  RUN_CONTEXT (in_irq () ? "in_irq" \
606*53ee8cc1Swenshuai.xi     : (in_interrupt () ? "in_interrupt" : "can sleep"))
607*53ee8cc1Swenshuai.xi 
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi #endif
610