Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
staging
usbip
vhci.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2003-2008 Takahiro Hirofuchi
3
*
4
* This is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
*/
10
11
#ifndef __USBIP_VHCI_H
12
#define __USBIP_VHCI_H
13
14
#include <linux/device.h>
15
#include <linux/list.h>
16
#include <
linux/spinlock.h
>
17
#include <
linux/sysfs.h
>
18
#include <linux/types.h>
19
#include <
linux/usb.h
>
20
#include <
linux/usb/hcd.h
>
21
#include <linux/wait.h>
22
23
struct
vhci_device
{
24
struct
usb_device *
udev
;
25
26
/*
27
* devid specifies a remote usb device uniquely instead
28
* of combination of busnum and devnum.
29
*/
30
__u32
devid
;
31
32
/* speed of a remote device */
33
enum
usb_device_speed
speed
;
34
35
/* vhci root-hub port to which this device is attached */
36
__u32
rhport
;
37
38
struct
usbip_device
ud
;
39
40
/* lock for the below link lists */
41
spinlock_t
priv_lock
;
42
43
/* vhci_priv is linked to one of them. */
44
struct
list_head
priv_tx
;
45
struct
list_head
priv_rx
;
46
47
/* vhci_unlink is linked to one of them */
48
struct
list_head
unlink_tx
;
49
struct
list_head
unlink_rx
;
50
51
/* vhci_tx thread sleeps for this queue */
52
wait_queue_head_t
waitq_tx
;
53
};
54
55
/* urb->hcpriv, use container_of() */
56
struct
vhci_priv
{
57
unsigned
long
seqnum
;
58
struct
list_head
list
;
59
60
struct
vhci_device
*
vdev
;
61
struct
urb
*
urb
;
62
};
63
64
struct
vhci_unlink
{
65
/* seqnum of this request */
66
unsigned
long
seqnum
;
67
68
struct
list_head
list
;
69
70
/* seqnum of the unlink target */
71
unsigned
long
unlink_seqnum
;
72
};
73
74
/* Number of supported ports. Value has an upperbound of USB_MAXCHILDREN */
75
#define VHCI_NPORTS 8
76
77
/* for usb_bus.hcpriv */
78
struct
vhci_hcd
{
79
spinlock_t
lock
;
80
81
u32
port_status
[
VHCI_NPORTS
];
82
83
unsigned
resuming
:1;
84
unsigned
long
re_timeout
;
85
86
atomic_t
seqnum
;
87
88
/*
89
* NOTE:
90
* wIndex shows the port number and begins from 1.
91
* But, the index of this array begins from 0.
92
*/
93
struct
vhci_device
vdev
[
VHCI_NPORTS
];
94
};
95
96
extern
struct
vhci_hcd
*
the_controller
;
97
extern
const
struct
attribute_group
dev_attr_group
;
98
#define hardware (&the_controller->pdev.dev)
99
100
/* vhci_hcd.c */
101
void
rh_port_connect
(
int
rhport,
enum
usb_device_speed
speed);
102
void
rh_port_disconnect
(
int
rhport);
103
104
/* vhci_rx.c */
105
struct
urb
*
pickup_urb_and_free_priv
(
struct
vhci_device
*vdev,
__u32
seqnum
);
106
int
vhci_rx_loop
(
void
*
data
);
107
108
/* vhci_tx.c */
109
int
vhci_tx_loop
(
void
*
data
);
110
111
static
inline
struct
vhci_device
*port_to_vdev(
__u32
port
)
112
{
113
return
&the_controller->
vdev
[
port
];
114
}
115
116
static
inline
struct
vhci_hcd
*hcd_to_vhci(
struct
usb_hcd *hcd)
117
{
118
return
(
struct
vhci_hcd
*) (hcd->hcd_priv);
119
}
120
121
static
inline
struct
usb_hcd *vhci_to_hcd(
struct
vhci_hcd
*vhci)
122
{
123
return
container_of
((
void
*) vhci,
struct
usb_hcd, hcd_priv);
124
}
125
126
static
inline
struct
device
*vhci_dev(
struct
vhci_hcd
*vhci)
127
{
128
return
vhci_to_hcd(vhci)->self.controller;
129
}
130
131
#endif
/* __USBIP_VHCI_H */
Generated on Thu Jan 10 2013 14:32:15 for Linux Kernel by
1.8.2