Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
6ceec8d0
Commit
6ceec8d0
authored
May 19, 2003
by
Greg Kroah-Hartman
Browse files
Options
Browse Files
Download
Plain Diff
Merge kroah.com:/home/greg/linux/BK/bleed-2.5
into kroah.com:/home/greg/linux/BK/gregkh-2.5
parents
d7b7a72d
da36985a
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
84 additions
and
62 deletions
+84
-62
drivers/usb/core/hcd.c
drivers/usb/core/hcd.c
+33
-31
drivers/usb/core/hub.c
drivers/usb/core/hub.c
+2
-2
drivers/usb/gadget/net2280.c
drivers/usb/gadget/net2280.c
+1
-1
drivers/usb/misc/usbtest.c
drivers/usb/misc/usbtest.c
+12
-0
drivers/usb/storage/freecom.c
drivers/usb/storage/freecom.c
+4
-2
drivers/usb/storage/sddr09.c
drivers/usb/storage/sddr09.c
+4
-2
drivers/usb/storage/transport.c
drivers/usb/storage/transport.c
+21
-11
drivers/usb/storage/transport.h
drivers/usb/storage/transport.h
+0
-6
drivers/usb/usb-skeleton.c
drivers/usb/usb-skeleton.c
+7
-7
No files found.
drivers/usb/core/hcd.c
View file @
6ceec8d0
...
@@ -454,20 +454,22 @@ static int rh_status_urb (struct usb_hcd *hcd, struct urb *urb)
...
@@ -454,20 +454,22 @@ static int rh_status_urb (struct usb_hcd *hcd, struct urb *urb)
int
len
=
1
+
(
urb
->
dev
->
maxchild
/
8
);
int
len
=
1
+
(
urb
->
dev
->
maxchild
/
8
);
/* rh_timer protected by hcd_data_lock */
/* rh_timer protected by hcd_data_lock */
if
(
timer_pending
(
&
hcd
->
rh_timer
)
if
(
hcd
->
rh_timer
.
data
||
urb
->
status
!=
-
EINPROGRESS
||
urb
->
status
!=
-
EINPROGRESS
||
urb
->
transfer_buffer_length
<
len
)
{
||
urb
->
transfer_buffer_length
<
len
)
{
dev_dbg
(
hcd
->
controller
,
"not queuing status urb, stat %d
\n
"
,
urb
->
status
);
dev_dbg
(
hcd
->
controller
,
"not queuing rh status urb, stat %d
\n
"
,
urb
->
status
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
urb
->
hcpriv
=
hcd
;
/* nonzero to indicate it's queued */
init_timer
(
&
hcd
->
rh_timer
);
init_timer
(
&
hcd
->
rh_timer
);
hcd
->
rh_timer
.
function
=
rh_report_status
;
hcd
->
rh_timer
.
function
=
rh_report_status
;
hcd
->
rh_timer
.
data
=
(
unsigned
long
)
urb
;
hcd
->
rh_timer
.
data
=
(
unsigned
long
)
urb
;
/* USB 2.0 spec says 256msec; this is close enough */
/* USB 2.0 spec says 256msec; this is close enough */
hcd
->
rh_timer
.
expires
=
jiffies
+
HZ
/
4
;
hcd
->
rh_timer
.
expires
=
jiffies
+
HZ
/
4
;
add_timer
(
&
hcd
->
rh_timer
);
add_timer
(
&
hcd
->
rh_timer
);
urb
->
hcpriv
=
hcd
;
/* nonzero to indicate it's queued */
return
0
;
return
0
;
}
}
...
@@ -481,39 +483,37 @@ static void rh_report_status (unsigned long ptr)
...
@@ -481,39 +483,37 @@ static void rh_report_status (unsigned long ptr)
unsigned
long
flags
;
unsigned
long
flags
;
urb
=
(
struct
urb
*
)
ptr
;
urb
=
(
struct
urb
*
)
ptr
;
spin_lock_irqsave
(
&
urb
->
lock
,
flags
);
local_irq_save
(
flags
);
if
(
!
urb
->
dev
)
{
spin_lock
(
&
urb
->
lock
);
spin_unlock_irqrestore
(
&
urb
->
lock
,
flags
);
/* do nothing if the hc is gone or the urb's been unlinked */
if
(
!
urb
->
dev
||
urb
->
status
!=
-
EINPROGRESS
||
(
hcd
=
urb
->
dev
->
bus
->
hcpriv
)
==
0
||
!
HCD_IS_RUNNING
(
hcd
->
state
))
{
spin_unlock
(
&
urb
->
lock
);
local_irq_restore
(
flags
);
return
;
return
;
}
}
hcd
=
urb
->
dev
->
bus
->
hcpriv
;
length
=
hcd
->
driver
->
hub_status_data
(
hcd
,
urb
->
transfer_buffer
);
if
(
urb
->
status
==
-
EINPROGRESS
)
{
if
(
HCD_IS_RUNNING
(
hcd
->
state
))
{
length
=
hcd
->
driver
->
hub_status_data
(
hcd
,
urb
->
transfer_buffer
);
spin_unlock_irqrestore
(
&
urb
->
lock
,
flags
);
if
(
length
>
0
)
{
urb
->
actual_length
=
length
;
urb
->
status
=
0
;
urb
->
hcpriv
=
0
;
urb
->
complete
(
urb
,
NULL
);
return
;
}
}
else
spin_unlock_irqrestore
(
&
urb
->
lock
,
flags
);
/* retrigger timer until completion: success or unlink
*/
/* complete the status urb, or retrigger the timer
*/
spin_lock_irqsave
(
&
hcd_data_lock
,
flags
);
spin_lock
(
&
hcd_data_lock
);
rh_status_urb
(
hcd
,
urb
)
;
hcd
->
rh_timer
.
data
=
0
;
spin_unlock_irqrestore
(
&
hcd_data_lock
,
flags
);
if
(
length
>
0
)
{
}
else
{
urb
->
actual_length
=
length
;
/* this urb's been unlinked */
urb
->
status
=
0
;
urb
->
hcpriv
=
0
;
urb
->
hcpriv
=
0
;
spin_unlock_irqrestore
(
&
urb
->
lock
,
flags
);
}
else
rh_status_urb
(
hcd
,
urb
);
spin_unlock
(
&
hcd_data_lock
);
spin_unlock
(
&
urb
->
lock
);
/* local irqs are always blocked in completions */
if
(
length
>
0
)
usb_hcd_giveback_urb
(
hcd
,
urb
,
NULL
);
usb_hcd_giveback_urb
(
hcd
,
urb
,
NULL
);
}
local_irq_restore
(
flags
);
}
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
...
@@ -542,11 +542,13 @@ void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb)
...
@@ -542,11 +542,13 @@ void usb_rh_status_dequeue (struct usb_hcd *hcd, struct urb *urb)
unsigned
long
flags
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
hcd_data_lock
,
flags
);
spin_lock_irqsave
(
&
hcd_data_lock
,
flags
);
del_timer_sync
(
&
hcd
->
rh_timer
);
hcd
->
rh_timer
.
data
=
0
;
hcd
->
rh_timer
.
data
=
0
;
spin_unlock_irqrestore
(
&
hcd_data_lock
,
flags
);
spin_unlock_irqrestore
(
&
hcd_data_lock
,
flags
);
/* we rely on RH callback code not unlinking its URB! */
/* note: always a synchronous unlink */
del_timer_sync
(
&
hcd
->
rh_timer
);
urb
->
hcpriv
=
0
;
usb_hcd_giveback_urb
(
hcd
,
urb
,
NULL
);
usb_hcd_giveback_urb
(
hcd
,
urb
,
NULL
);
}
}
...
...
drivers/usb/core/hub.c
View file @
6ceec8d0
...
@@ -42,7 +42,7 @@ static LIST_HEAD(hub_event_list); /* List of hubs needing servicing */
...
@@ -42,7 +42,7 @@ static LIST_HEAD(hub_event_list); /* List of hubs needing servicing */
static
LIST_HEAD
(
hub_list
);
/* List of all hubs (for cleanup) */
static
LIST_HEAD
(
hub_list
);
/* List of all hubs (for cleanup) */
static
DECLARE_WAIT_QUEUE_HEAD
(
khubd_wait
);
static
DECLARE_WAIT_QUEUE_HEAD
(
khubd_wait
);
static
in
t
khubd_pid
=
0
;
/* PID of khubd */
static
pid_
t
khubd_pid
=
0
;
/* PID of khubd */
static
DECLARE_COMPLETION
(
khubd_exited
);
static
DECLARE_COMPLETION
(
khubd_exited
);
#ifdef DEBUG
#ifdef DEBUG
...
@@ -1126,7 +1126,7 @@ static struct usb_driver hub_driver = {
...
@@ -1126,7 +1126,7 @@ static struct usb_driver hub_driver = {
*/
*/
int
usb_hub_init
(
void
)
int
usb_hub_init
(
void
)
{
{
in
t
pid
;
pid_
t
pid
;
if
(
usb_register
(
&
hub_driver
)
<
0
)
{
if
(
usb_register
(
&
hub_driver
)
<
0
)
{
err
(
"Unable to register USB hub driver"
);
err
(
"Unable to register USB hub driver"
);
...
...
drivers/usb/gadget/net2280.c
View file @
6ceec8d0
...
@@ -2642,7 +2642,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
...
@@ -2642,7 +2642,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
static
const
struct
pci_device_id
__devinitdata
pci_ids
[]
=
{
{
static
struct
pci_device_id
__devinitdata
pci_ids
[]
=
{
{
.
class
=
((
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
),
.
class
=
((
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
),
.
class_mask
=
~
0
,
.
class_mask
=
~
0
,
.
vendor
=
0x17cc
,
.
vendor
=
0x17cc
,
...
...
drivers/usb/misc/usbtest.c
View file @
6ceec8d0
...
@@ -1349,6 +1349,13 @@ static struct usbtest_info fw_info = {
...
@@ -1349,6 +1349,13 @@ static struct usbtest_info fw_info = {
.
alt
=
0
,
.
alt
=
0
,
};
};
static
struct
usbtest_info
um_info
=
{
.
name
=
"user mode test driver"
,
.
ep_in
=
7
,
.
ep_out
=
3
,
.
alt
=
-
1
,
};
#ifdef IBOT2
#ifdef IBOT2
/* this is a nice source of high speed bulk data;
/* this is a nice source of high speed bulk data;
* uses an FX2, with firmware provided in the device
* uses an FX2, with firmware provided in the device
...
@@ -1414,6 +1421,11 @@ static struct usb_device_id id_table [] = {
...
@@ -1414,6 +1421,11 @@ static struct usb_device_id id_table [] = {
.
driver_info
=
(
unsigned
long
)
&
fw_info
,
.
driver_info
=
(
unsigned
long
)
&
fw_info
,
},
},
/* so does a user-mode variant */
{
USB_DEVICE
(
0x0525
,
0xa4a4
),
.
driver_info
=
(
unsigned
long
)
&
um_info
,
},
#ifdef KEYSPAN_19Qi
#ifdef KEYSPAN_19Qi
/* Keyspan 19qi uses an21xx (original EZ-USB) */
/* Keyspan 19qi uses an21xx (original EZ-USB) */
// this does not coexist with the real Keyspan 19qi driver!
// this does not coexist with the real Keyspan 19qi driver!
...
...
drivers/usb/storage/freecom.c
View file @
6ceec8d0
...
@@ -134,7 +134,8 @@ freecom_readdata (Scsi_Cmnd *srb, struct us_data *us,
...
@@ -134,7 +134,8 @@ freecom_readdata (Scsi_Cmnd *srb, struct us_data *us,
/* Now transfer all of our blocks. */
/* Now transfer all of our blocks. */
US_DEBUGP
(
"Start of read
\n
"
);
US_DEBUGP
(
"Start of read
\n
"
);
result
=
usb_stor_bulk_transfer_srb
(
us
,
ipipe
,
srb
,
count
);
result
=
usb_stor_bulk_transfer_sg
(
us
,
ipipe
,
srb
->
request_buffer
,
count
,
srb
->
use_sg
,
&
srb
->
resid
);
US_DEBUGP
(
"freecom_readdata done!
\n
"
);
US_DEBUGP
(
"freecom_readdata done!
\n
"
);
if
(
result
>
USB_STOR_XFER_SHORT
)
if
(
result
>
USB_STOR_XFER_SHORT
)
...
@@ -168,7 +169,8 @@ freecom_writedata (Scsi_Cmnd *srb, struct us_data *us,
...
@@ -168,7 +169,8 @@ freecom_writedata (Scsi_Cmnd *srb, struct us_data *us,
/* Now transfer all of our blocks. */
/* Now transfer all of our blocks. */
US_DEBUGP
(
"Start of write
\n
"
);
US_DEBUGP
(
"Start of write
\n
"
);
result
=
usb_stor_bulk_transfer_srb
(
us
,
opipe
,
srb
,
count
);
result
=
usb_stor_bulk_transfer_sg
(
us
,
opipe
,
srb
->
request_buffer
,
count
,
srb
->
use_sg
,
&
srb
->
resid
);
US_DEBUGP
(
"freecom_writedata done!
\n
"
);
US_DEBUGP
(
"freecom_writedata done!
\n
"
);
if
(
result
>
USB_STOR_XFER_SHORT
)
if
(
result
>
USB_STOR_XFER_SHORT
)
...
...
drivers/usb/storage/sddr09.c
View file @
6ceec8d0
...
@@ -1562,8 +1562,10 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -1562,8 +1562,10 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
"sending"
:
"receiving"
,
"sending"
:
"receiving"
,
srb
->
request_bufflen
);
srb
->
request_bufflen
);
result
=
usb_stor_bulk_transfer_srb
(
us
,
pipe
,
srb
,
result
=
usb_stor_bulk_transfer_sg
(
us
,
pipe
,
srb
->
request_bufflen
);
srb
->
request_buffer
,
srb
->
request_bufflen
,
srb
->
use_sg
,
&
srb
->
resid
);
return
(
result
==
USB_STOR_XFER_GOOD
?
return
(
result
==
USB_STOR_XFER_GOOD
?
USB_STOR_TRANSPORT_GOOD
:
USB_STOR_TRANSPORT_ERROR
);
USB_STOR_TRANSPORT_GOOD
:
USB_STOR_TRANSPORT_ERROR
);
...
...
drivers/usb/storage/transport.c
View file @
6ceec8d0
...
@@ -511,9 +511,8 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -511,9 +511,8 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
* short-circuit all other processing
* short-circuit all other processing
*/
*/
if
(
atomic_read
(
&
us
->
sm_state
)
==
US_STATE_ABORTING
)
{
if
(
atomic_read
(
&
us
->
sm_state
)
==
US_STATE_ABORTING
)
{
US_DEBUGP
(
"-- transport indicates command was aborted
\n
"
);
US_DEBUGP
(
"-- command was aborted
\n
"
);
srb
->
result
=
DID_ABORT
<<
16
;
goto
Handle_Abort
;
return
;
}
}
/* if there is a transport error, reset and don't auto-sense */
/* if there is a transport error, reset and don't auto-sense */
...
@@ -634,8 +633,7 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -634,8 +633,7 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
if
(
atomic_read
(
&
us
->
sm_state
)
==
US_STATE_ABORTING
)
{
if
(
atomic_read
(
&
us
->
sm_state
)
==
US_STATE_ABORTING
)
{
US_DEBUGP
(
"-- auto-sense aborted
\n
"
);
US_DEBUGP
(
"-- auto-sense aborted
\n
"
);
srb
->
result
=
DID_ABORT
<<
16
;
goto
Handle_Abort
;
return
;
}
}
if
(
temp_result
!=
USB_STOR_TRANSPORT_GOOD
)
{
if
(
temp_result
!=
USB_STOR_TRANSPORT_GOOD
)
{
US_DEBUGP
(
"-- auto-sense failure
\n
"
);
US_DEBUGP
(
"-- auto-sense failure
\n
"
);
...
@@ -688,6 +686,15 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -688,6 +686,15 @@ void usb_stor_invoke_transport(Scsi_Cmnd *srb, struct us_data *us)
(
result
==
USB_STOR_TRANSPORT_GOOD
)
&&
(
result
==
USB_STOR_TRANSPORT_GOOD
)
&&
((
srb
->
sense_buffer
[
2
]
&
0xf
)
==
0x0
))
((
srb
->
sense_buffer
[
2
]
&
0xf
)
==
0x0
))
srb
->
sense_buffer
[
0
]
=
0x0
;
srb
->
sense_buffer
[
0
]
=
0x0
;
return
;
/* abort processing: the bulk-only transport requires a reset
* following an abort */
Handle_Abort:
srb
->
result
=
DID_ABORT
<<
16
;
if
(
us
->
protocol
==
US_PR_BULK
)
{
us
->
transport_reset
(
us
);
}
}
}
/* Abort the currently running scsi command or device reset.
/* Abort the currently running scsi command or device reset.
...
@@ -772,8 +779,9 @@ int usb_stor_CBI_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -772,8 +779,9 @@ int usb_stor_CBI_transport(Scsi_Cmnd *srb, struct us_data *us)
if
(
transfer_length
)
{
if
(
transfer_length
)
{
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
result
=
usb_stor_bulk_transfer_srb
(
us
,
pipe
,
srb
,
result
=
usb_stor_bulk_transfer_sg
(
us
,
pipe
,
transfer_length
);
srb
->
request_buffer
,
transfer_length
,
srb
->
use_sg
,
&
srb
->
resid
);
US_DEBUGP
(
"CBI data stage result is 0x%x
\n
"
,
result
);
US_DEBUGP
(
"CBI data stage result is 0x%x
\n
"
,
result
);
if
(
result
==
USB_STOR_XFER_ERROR
)
if
(
result
==
USB_STOR_XFER_ERROR
)
return
USB_STOR_TRANSPORT_ERROR
;
return
USB_STOR_TRANSPORT_ERROR
;
...
@@ -862,8 +870,9 @@ int usb_stor_CB_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -862,8 +870,9 @@ int usb_stor_CB_transport(Scsi_Cmnd *srb, struct us_data *us)
if
(
transfer_length
)
{
if
(
transfer_length
)
{
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
result
=
usb_stor_bulk_transfer_srb
(
us
,
pipe
,
srb
,
result
=
usb_stor_bulk_transfer_sg
(
us
,
pipe
,
transfer_length
);
srb
->
request_buffer
,
transfer_length
,
srb
->
use_sg
,
&
srb
->
resid
);
US_DEBUGP
(
"CB data stage result is 0x%x
\n
"
,
result
);
US_DEBUGP
(
"CB data stage result is 0x%x
\n
"
,
result
);
if
(
result
==
USB_STOR_XFER_ERROR
)
if
(
result
==
USB_STOR_XFER_ERROR
)
return
USB_STOR_TRANSPORT_ERROR
;
return
USB_STOR_TRANSPORT_ERROR
;
...
@@ -944,8 +953,9 @@ int usb_stor_Bulk_transport(Scsi_Cmnd *srb, struct us_data *us)
...
@@ -944,8 +953,9 @@ int usb_stor_Bulk_transport(Scsi_Cmnd *srb, struct us_data *us)
if
(
transfer_length
)
{
if
(
transfer_length
)
{
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
unsigned
int
pipe
=
srb
->
sc_data_direction
==
SCSI_DATA_READ
?
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
us
->
recv_bulk_pipe
:
us
->
send_bulk_pipe
;
result
=
usb_stor_bulk_transfer_srb
(
us
,
pipe
,
srb
,
result
=
usb_stor_bulk_transfer_sg
(
us
,
pipe
,
transfer_length
);
srb
->
request_buffer
,
transfer_length
,
srb
->
use_sg
,
&
srb
->
resid
);
US_DEBUGP
(
"Bulk data transfer result 0x%x
\n
"
,
result
);
US_DEBUGP
(
"Bulk data transfer result 0x%x
\n
"
,
result
);
if
(
result
==
USB_STOR_XFER_ERROR
)
if
(
result
==
USB_STOR_XFER_ERROR
)
return
USB_STOR_TRANSPORT_ERROR
;
return
USB_STOR_TRANSPORT_ERROR
;
...
...
drivers/usb/storage/transport.h
View file @
6ceec8d0
...
@@ -178,10 +178,4 @@ extern int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe,
...
@@ -178,10 +178,4 @@ extern int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe,
extern
int
usb_stor_bulk_transfer_sg
(
struct
us_data
*
us
,
unsigned
int
pipe
,
extern
int
usb_stor_bulk_transfer_sg
(
struct
us_data
*
us
,
unsigned
int
pipe
,
void
*
buf
,
unsigned
int
length
,
int
use_sg
,
int
*
residual
);
void
*
buf
,
unsigned
int
length
,
int
use_sg
,
int
*
residual
);
static
__inline__
int
usb_stor_bulk_transfer_srb
(
struct
us_data
*
us
,
unsigned
int
pipe
,
Scsi_Cmnd
*
srb
,
unsigned
int
length
)
{
return
usb_stor_bulk_transfer_sg
(
us
,
pipe
,
srb
->
request_buffer
,
length
,
srb
->
use_sg
,
&
srb
->
resid
);
}
#endif
#endif
drivers/usb/usb-skeleton.c
View file @
6ceec8d0
...
@@ -126,8 +126,8 @@ static int skel_ioctl (struct inode *inode, struct file *file, unsigned int cmd
...
@@ -126,8 +126,8 @@ static int skel_ioctl (struct inode *inode, struct file *file, unsigned int cmd
static
int
skel_open
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
skel_open
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
skel_release
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
skel_release
(
struct
inode
*
inode
,
struct
file
*
file
);
static
int
skel_probe
(
struct
usb_interface
*
int
f
,
const
struct
usb_device_id
*
id
);
static
int
skel_probe
(
struct
usb_interface
*
int
erface
,
const
struct
usb_device_id
*
id
);
static
void
skel_disconnect
(
struct
usb_interface
*
int
f
);
static
void
skel_disconnect
(
struct
usb_interface
*
int
erface
);
static
void
skel_write_bulk_callback
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
);
static
void
skel_write_bulk_callback
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
);
...
@@ -163,7 +163,7 @@ static struct file_operations skel_fops = {
...
@@ -163,7 +163,7 @@ static struct file_operations skel_fops = {
* usb class driver info in order to get a minor number from the usb core,
* usb class driver info in order to get a minor number from the usb core,
* and to have the device registered with devfs and the driver core
* and to have the device registered with devfs and the driver core
*/
*/
static
struct
usb_class_driver
skel
l
_class
=
{
static
struct
usb_class_driver
skel_class
=
{
.
name
=
"usb/skel%d"
,
.
name
=
"usb/skel%d"
,
.
fops
=
&
skel_fops
,
.
fops
=
&
skel_fops
,
.
mode
=
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
,
.
mode
=
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
|
S_IROTH
,
...
@@ -515,7 +515,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
...
@@ -515,7 +515,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
return
-
ENODEV
;
return
-
ENODEV
;
}
}
retval
=
usb_register_dev
(
int
f
,
&
skel_class
);
retval
=
usb_register_dev
(
int
erface
,
&
skel_class
);
if
(
retval
)
{
if
(
retval
)
{
/* something prevented us from registering this driver */
/* something prevented us from registering this driver */
err
(
"Not able to get a minor for this device."
);
err
(
"Not able to get a minor for this device."
);
...
@@ -533,7 +533,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
...
@@ -533,7 +533,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
init_MUTEX
(
&
dev
->
sem
);
init_MUTEX
(
&
dev
->
sem
);
dev
->
udev
=
udev
;
dev
->
udev
=
udev
;
dev
->
interface
=
interface
;
dev
->
interface
=
interface
;
dev
->
minor
=
int
f
->
minor
;
dev
->
minor
=
int
erface
->
minor
;
/* set up the endpoint information */
/* set up the endpoint information */
/* check out the endpoints */
/* check out the endpoints */
...
@@ -610,7 +610,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
...
@@ -610,7 +610,7 @@ static int skel_probe(struct usb_interface *interface, const struct usb_device_i
dev
=
NULL
;
dev
=
NULL
;
exit_minor:
exit_minor:
usb_deregister_dev
(
int
f
,
&
skel_class
);
usb_deregister_dev
(
int
erface
,
&
skel_class
);
exit:
exit:
if
(
dev
)
{
if
(
dev
)
{
...
@@ -654,7 +654,7 @@ static void skel_disconnect(struct usb_interface *interface)
...
@@ -654,7 +654,7 @@ static void skel_disconnect(struct usb_interface *interface)
minor
=
dev
->
minor
;
minor
=
dev
->
minor
;
/* give back our minor */
/* give back our minor */
usb_deregister_dev
(
int
f
,
&
skel_class
);
usb_deregister_dev
(
int
erface
,
&
skel_class
);
/* terminate an ongoing write */
/* terminate an ongoing write */
if
(
atomic_read
(
&
dev
->
write_busy
))
{
if
(
atomic_read
(
&
dev
->
write_busy
))
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment