Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
RiscOS
S
Sources
H
HWSupport
USB
USBDriver
Commits
4f8a1a84
Commit
4f8a1a84
authored
19 years ago
by
Dan Ellis
Browse files
Options
Download
Email Patches
Plain Diff
Committed incorrect file previously
parent
3f595ef2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
94 additions
and
187 deletions
+94
-187
build/c/usbmodule
build/c/usbmodule
+94
-187
No files found.
build/c/usbmodule
View file @
4f8a1a84
...
...
@@ -30,18 +30,12 @@
#include <sys/ioctl.h>
#include "sys/time.h"
/* avoid redefinition of printf */
#define no_printf 1
#include "dev/usb/usb.h"
#include "dev/usb/usbdi.h"
#include "dev/usb/usbdi_util.h"
#include "dev/usb/usbdivar.h"
#include "dev/usb/usbhid.h"
<<<<<<<
usbmodule
#undef no_printf
=======
#include "dev/usb/usb_quirks.h"
>>>>>>>
1
.
26
#include "swis.h"
#include "debuglib/debuglib.h"
...
...
@@ -62,7 +56,7 @@
/*---------------------------------------------------------------------------*/
/* for interfacing with ioctl */
#define
FWRITE
0x0002
#define
FWRITE
0x0002
#define DeviceFSCallDevice_MonitorTX 12
#define DeviceFSCallDevice_MonitorRX 13
...
...
@@ -130,7 +124,7 @@ struct dev_struct {
};
struct
ugen_softc
{
USBBASEDEVICE
sc_dev
;
/* base device */
USBBASEDEVICE
sc_dev
;
/* base device */
usbd_device_handle
sc_udev
;
struct
dev_struct
mydev
;
devicefs_device
*
sc_devfs
;
...
...
@@ -237,25 +231,25 @@ extern int total_sleep;
#endif
#ifdef DEBUGLIB
char
*
ccodes
[]
=
{
"NORMAL_COMPLETION"
,
"IN_PROGRESS"
,
"PENDING_REQUESTS"
,
"NOT_STARTED"
,
"INVAL"
,
"NOMEM"
,
"CANCELLED"
,
"BAD_ADDRESS"
,
"IN_USE"
,
"NO_ADDR"
,
"SET_ADDR_FAILED"
,
"NO_POWER"
,
"TOO_DEEP"
,
"IOERROR"
,
"NOT_CONFIGURED"
,
"TIMEOUT"
,
"SHORT_XFER"
,
"STALLED"
,
"INTERRUPTED"
};
"NORMAL_COMPLETION"
,
"IN_PROGRESS"
,
"PENDING_REQUESTS"
,
"NOT_STARTED"
,
"INVAL"
,
"NOMEM"
,
"CANCELLED"
,
"BAD_ADDRESS"
,
"IN_USE"
,
"NO_ADDR"
,
"SET_ADDR_FAILED"
,
"NO_POWER"
,
"TOO_DEEP"
,
"IOERROR"
,
"NOT_CONFIGURED"
,
"TIMEOUT"
,
"SHORT_XFER"
,
"STALLED"
,
"INTERRUPTED"
};
#endif
extern
int
cold
;
...
...
@@ -291,6 +285,7 @@ extern int usbioctl(int devt, u_long cmd, void* data, int flag, void *p);
struct
device
*
get_usbdev
(
int
unit
);
extern
char
*
usbd_get_string
(
usbd_device_handle
,
size_t
,
char
*
);
extern
void
microtime
(
struct
timeval
*
tv
);
extern
void
triggercbs
(
void
);
extern
uint32_t
clock
(
void
);
// avoid header clash with sys/types.h
...
...
@@ -411,7 +406,7 @@ _kernel_oserror *module_final(int fatal, int podule, void *pw)
_swix
(
MessageTrans_CloseFile
,
_IN
(
0
),
&
mod_messages
);
_swix
(
MessageTrans_CloseFile
,
_IN
(
0
),
&
usbdev_messages
);
if
(
extra_quirks
)
free
(
extra_quirks
);
#ifdef STANDALONE
_swix
(
ResourceFS_DeregisterFiles
,
_IN
(
0
),
resource_files
());
#endif
...
...
@@ -453,7 +448,7 @@ _kernel_oserror* RegisterNewDevice(struct ugen_softc * softc,int no)
#endif
&
softc
->
sc_devfs
);
return
e
;
}
}
void
module_services
(
int
service_number
,
_kernel_swi_regs
*
r
,
void
*
pw
)
...
...
@@ -480,8 +475,8 @@ void module_services(int service_number, _kernel_swi_regs *r, void *pw)
{
if
(
dev
)
{
dev
->
dv_unit
=
maxdev_no
=
usbdev_no
++
;
dev
->
dv_unit
=
maxdev_no
=
usbdev_no
++
;
dprintf
((
""
,
"registering %d
\n
"
,
dev
->
dv_unit
));
RegisterNewDevice
(
((
struct
ugen_softc
*
)
dev
),
dev
->
dv_unit
);
}
...
...
@@ -593,7 +588,7 @@ _kernel_oserror* command_enumerate_buses (void)
struct
usb_device_stats
stats
;
printf
(
"Transfers (%d buses):
\n
"
,
usbbus_no
-
1
);
// 012345678901234567890123456789012345678901234567890
puts
(
"Bus Control Isochronous Bulk Interrupt
Errors
"
);
puts
(
"Bus Control Isochronous Bulk Interrupt"
);
for
(
int
i
=
1
;
i
<
usbbus_no
;
++
i
)
{
if
(
get_softc
(
i
<<
16
)
==
NULL
||
...
...
@@ -602,24 +597,18 @@ _kernel_oserror* command_enumerate_buses (void)
continue
;
}
printf
(
"%3d %9lu %9lu %9lu
%9lu
%9lu
\n
"
,
printf
(
"%3d %9lu %9lu %9lu %9lu
\n
"
,
i
,
stats
.
uds_requests
[
UE_CONTROL
],
stats
.
uds_requests
[
UE_ISOCHRONOUS
],
stats
.
uds_requests
[
UE_BULK
],
stats
.
uds_requests
[
UE_INTERRUPT
],
stats
.
uds_errors
);
stats
.
uds_requests
[
UE_INTERRUPT
]);
}
return
0
;
}
/*---------------------------------------------------------------------------*/
<<<<<<<
usbmodule
_kernel_oserror
*
command_discover
(
void
)
=======
_kernel_oserror
*
command_discover
(
void
)
>>>>>>>
1
.
26
{
#ifdef USB_DEBUG
total_sleep
=
0
;
...
...
@@ -638,6 +627,7 @@ _kernel_oserror* command_discover (void)
/*---------------------------------------------------------------------------*/
_kernel_oserror
*
command_reset
(
int
n
)
{
struct
device
*
dev
=
get_usbdev
(
n
);
...
...
@@ -645,39 +635,27 @@ _kernel_oserror* command_reset (int n)
{
return
uerror
(
E_NoDevice
);
}
/* pretend it's a ugen to get the udev */
usbd_device_handle
udev
=
((
struct
ugen_softc
*
)
dev
)
->
sc_udev
;
struct
usbd_port
*
port
=
udev
->
powersrc
;
usbd_device_handle
parent
=
port
?
port
->
parent
:
NULL
;
if
(
parent
==
NULL
)
// its a root hub..
{
struct
usbd_hub
*
hub
=
udev
->
hub
;
int
nports
=
hub
->
hubdesc
.
bNbrPorts
,
p
;
for
(
p
=
0
;
p
<
nports
;
p
++
)
{
if
(
hub
->
ports
[
p
].
device
)
{
usb_disconnect_port
(
hub
->
ports
+
p
,
hub
->
hubsoftc
);
usbd_clear_port_feature
(
udev
,
p
,
UHF_PORT_POWER
);
usbd_delay_ms
(
udev
,
USB_PORT_RESET_DELAY
);
usbd_set_port_feature
(
udev
,
p
,
UHF_PORT_POWER
);
}
}
return
NULL
;
return
uerror
(
E_NotRootP
);
}
usb_disconnect_port
(
port
,
parent
->
my
hub
->
hub
->
hubsoftc
);
usb_disconnect_port
(
port
,
(
device_ptr_t
)
parent
->
hub
);
usbd_clear_port_feature
(
parent
,
port
->
portno
,
UHF_PORT_POWER
);
usbd_delay_ms
(
parent
,
/*USB_PORT_RESET_DELAY*/
USB_PORT_POWER_DOWN_TIME
);
usbd_set_port_feature
(
parent
,
port
->
portno
,
UHF_PORT_POWER
);
int
pwrdly
=
parent
->
hub
->
hubdesc
.
bPwrOn2PwrGood
*
UHD_PWRON_FACTOR
+
USB_EXTRA_POWER_UP_TIME
;
usbd_delay_ms
(
parent
,
pwrdly
);
*
UHD_PWRON_FACTOR
+
USB_EXTRA_POWER_UP_TIME
;
usbd_delay_ms
(
parent
,
pwrdly
);
return
NULL
;
}
/*---------------------------------------------------------------------------*/
_kernel_oserror
*
command_dev_info
(
int
n
)
...
...
@@ -889,10 +867,10 @@ static _kernel_oserror* command_set_interface (int device, int ifcn, int alt)
/*---------------------------------------------------------------------------*/
///* format of a quirk .. keep synchronised with entry in dev.usb.usb_quirks */
//typedef struct usbd_quirk_entry {
//
u_int16_t idVendor;
//
u_int16_t idProduct;
//
u_int16_t bcdDevice;
//
u_int32_t quirks;
//
u_int16_t idVendor;
//
u_int16_t idProduct;
//
u_int16_t bcdDevice;
//
u_int32_t quirks;
//} usbd_quirk_entry;
static
_kernel_oserror
*
command_ListQuirks
(
void
)
...
...
@@ -900,14 +878,14 @@ static _kernel_oserror* command_ListQuirks(void)
int
i
;
usbd_quirk_entry
*
t
;
printf
(
"
\n
USB Extra Quirk listing:
\n
Vendor Product Device Quirk
\n
"
);
if
(
extra_quirks
)
{
for
(
i
=
0
,
t
=
extra_quirks
;
i
<
MAX_EXTRA_QUIRKS
;
i
++
,
t
++
)
{
if
(
t
->
idVendor
)
printf
(
"%04x %04x %04x %08x
\n
"
,
t
->
idVendor
,
t
->
idProduct
,
t
->
bcdDevice
,
t
->
quirks
.
uq_flags
);
}
}
return
NULL
;
...
...
@@ -945,11 +923,11 @@ static _kernel_oserror* command_AddQuirk(unsigned vendor, unsigned product, unsi
if
(
t
->
idVendor
==
vendor
&&
t
->
idProduct
==
product
&&
t
->
bcdDevice
==
device
)
{
{
t
->
quirks
.
uq_flags
=
quirk
;
return
NULL
;
}
}
}
for
(
i
=
0
,
t
=
extra_quirks
;
i
<
MAX_EXTRA_QUIRKS
;
i
++
,
t
++
)
/* new */
{
if
(
!
t
->
idVendor
)
...
...
@@ -977,7 +955,7 @@ _kernel_oserror *module_commands(const char *arg_string, int argc, int cmd_no, v
{
char
*
ptr
;
usbdebug
=
(
int
)
strtoul
(
arg_string
,
&
ptr
,
0
);
//
uhidevdebug = usbdebug;
uhidevdebug
=
usbdebug
;
if
(
ptr
)
uhubdebug
=
(
int
)
strtoul
(
ptr
,
&
ptr
,
0
);
}
break
;
...
...
@@ -1155,7 +1133,7 @@ static _kernel_oserror *re_discover(_kernel_swi_regs *r, void *pw, void* h)
// struct device* dev;
if
(
rd_active
)
return
NULL
;
rd_active
++
;
for
(
int
i
=
1
;
i
<
usbbus_no
;
i
++
)
for
(
int
i
=
1
;
i
<
usbbus_no
;
i
++
)
{
if
(
get_softc
(
i
<<
16
)
!=
NULL
)
{
...
...
@@ -1183,12 +1161,12 @@ struct device* riscos_usb_attach
announce_attach
=
false
;
}
char
str
[
sizeof
"USB$Ignore_VVVV_PPPP"
];
char
*
getenv
(
const
char
*
);
int
atoi
(
const
char
*
);
char
*
getenv
(
const
char
*
);
int
atoi
(
const
char
*
);
dprintf
((
""
,
"Trying match on ignore device
\n
"
));
char
*
getenv
(
const
char
*
);
int
atoi
(
const
char
*
);
char
*
del
;
char
*
getenv
(
const
char
*
);
int
atoi
(
const
char
*
);
char
*
del
;
sprintf
(
str
,
"USB$Ignore_%04X_%04X"
,
((
struct
usb_attach_arg
*
)
aux
)
->
vendor
,
((
struct
usb_attach_arg
*
)
aux
)
->
product
);
dprintf
((
""
,
"look for %s.. got x%sx
\n
"
,
str
,
getenv
(
str
)));
...
...
@@ -1214,10 +1192,10 @@ reloop:
if
(
get_usbdev
(
usbdev_no
)
!=
NULL
)
{
if
(
usbdev_no
!=
startnum
)
{
{
usbdev_no
++
;
goto
reloop
;
/* not looped yet .. try again */
}
}
}
((
usbd_device_handle
)
dev
)
->
dv_unit
=
usbdev_no
++
;
}
...
...
@@ -1618,15 +1596,9 @@ match:
if
(
aux
->
ifaceno
==
UHUB_UNK_INTERFACE
)
sysvar_attach
=
true
;
<<<<<<<
usbmodule
dprintf
((
""
,
"Found match for %s = %s
\n
"
,
str
,
name
));
len
=
strlen
(
name
);
=======
len
=
strlen
(
name
);
dprintf
((
""
,
"Found match for %s
\n
"
,
name
));
>>>>>>>
1
.
26
struct
sysvar_callback
*
sc
=
malloc
(
sizeof
*
sc
+
len
+
strlen
(
val
));
...
...
@@ -1646,7 +1618,7 @@ match:
void
kill_system_variable
(
int
unit
)
{
char
str
[
sizeof
"DeviceFS$USBnnnnnn$Options "
];
sprintf
(
str
,
"USB$Device_*_USB%d"
,
unit
);
while
(
_swix
(
OS_SetVarVal
,
_INR
(
0
,
4
),
str
,
0
,
-
1
,
0
,
0
)
==
NULL
)
{
...
...
@@ -1778,11 +1750,6 @@ _kernel_oserror* discover_callback (_kernel_swi_regs* r, void* pw, void* sc)
return
NULL
;
valid:
if
(
bus
->
root_hub
==
NULL
)
{
dprintf
((
""
,
"discover called before root hub established
\n
"
));
return
NULL
;
}
#ifdef STANDALONE
_swix
(
Hourglass_On
,
0
);
_swix
(
Hourglass_LEDs
,
_INR
(
0
,
1
),
1
,
0
);
...
...
@@ -1886,27 +1853,7 @@ void bufins (void* dma, void* x)
CallBufMan
(
&
r
);
}
<<<<<<<
usbmodule
static
void
usbd_trim_spaces
(
char
*
p
)
{
char
*
q
,
*
e
;
if
(
p
==
NULL
)
return
;
q
=
e
=
p
;
while
(
*
q
==
' '
)
/* skip leading spaces */
q
++
;
while
((
*
p
=
*
q
++
))
/* copy string */
if
(
*
p
++
!=
' '
)
/* remember last non-space */
e
=
p
;
*
e
=
0
;
/* kill trailing spaces */
}
void
usbd_devinfo_vp
(
usbd_device_handle
dev
,
char
*
v
,
size_t
vl
,
char
*
p
,
size_t
pl
,
int
usedev
)
=======
void
usbd_devinfo_vp
(
usbd_device_handle
dev
,
char
*
v
,
size_t
vl
,
char
*
p
,
size_t
pl
,
int
usedev
)
>>>>>>>
1
.
26
{
_kernel_oserror
*
e
=
NULL
;
usb_device_descriptor_t
*
udd
=
&
dev
->
ddesc
;
...
...
@@ -1922,23 +1869,8 @@ void usbd_devinfo_vp(usbd_device_handle dev, char* v, size_t vl, char* p, size_t
if
(
usedev
)
{
if
(
usbd_get_string
(
dev
,
udd
->
iManufacturer
,
v
))
vendor
=
NULL
;
else
vendor
=
v
;
usbd_trim_spaces
(
vendor
);
if
(
usbd_get_string
(
dev
,
udd
->
iProduct
,
p
))
product
=
NULL
;
else
product
=
p
;
usbd_trim_spaces
(
product
);
if
(
vendor
&&
!*
vendor
)
vendor
=
NULL
;
if
(
product
&&
!*
product
)
product
=
NULL
;
}
else
{
vendor
=
NULL
;
product
=
NULL
;
vendor
=
usbd_get_string
(
dev
,
udd
->
iManufacturer
,
v
);
product
=
usbd_get_string
(
dev
,
udd
->
iProduct
,
p
);
}
if
(
vendor
==
NULL
)
{
...
...
@@ -2041,7 +1973,7 @@ static void find_interface_and_endpoint
valid
->
ep_type
=
UE_BULK
;
}
dprintf
((
""
,
"looking for %x, iface %
x
, alt %d, type %x, dir %x
\n
"
,
dprintf
((
""
,
"looking for %x, iface %
d
, alt %d, type %x, dir %x
\n
"
,
valid
->
endpoint
,
valid
->
interface
,
valid
->
alternate
,
valid
->
ep_type
,
dir
));
...
...
@@ -2181,13 +2113,13 @@ static _kernel_oserror* device_initialise
{
struct
iface_softc
*
ifc
;
/* throw off mice or keyboards */
switch
((
int
)
(
ugen
->
sc_udev
->
subdevs
[
n
]
->
dv_cfdata
))
{
case
3
:
case
4
:
ifc
=
(
struct
iface_softc
*
)
ugen
->
sc_udev
->
subdevs
[
n
];
if
(
ifc
->
sc_iface
->
index
==
iface
)
if
(
ifc
->
sc_iface
->
index
==
iface
)
{
dprintf
((
""
,
"throwing off subdevice %d
\n
"
,
n
));
/* compact the list first */
...
...
@@ -2299,13 +2231,13 @@ void start_write (struct devstream* str);
void
start_read
(
struct
devstream
*
str
);
static
void
write_cb
(
usbd_xfer_handle
xfer
,
usbd_private_handle
priv
,
usbd_status
status
)
usbd_status
status
)
{
struct
devstream
*
str
=
priv
;
if
(
status
!=
USBD_NORMAL_COMPLETION
)
{
dprintf
((
""
,
"Bad completion code: %d (%s), %d bytes
read
\n
"
,
status
,
ccodes
[
status
],
xfer
->
actlen
));
dprintf
((
""
,
"Bad completion code: %d (%s), %d bytes
written
\n
"
,
status
,
ccodes
[
status
],
xfer
->
actlen
));
return
;
}
...
...
@@ -2380,19 +2312,19 @@ void start_write (struct devstream* str)
str
->
timeout
,
write_cb
);
str
->
xfer
->
rqflags
|=
URQ_RISCOS_BUF
;
dprintf
((
""
,
"transferring %d bytes
\n
"
,
r
.
r
[
2
]));
str
->
xfer
->
rqflags
|=
URQ_RISCOS_BUF
;
dprintf
((
""
,
"transferring %d bytes
\n
"
,
r
.
r
[
2
]));
#endif
str
->
xfer
->
status
=
usbd_transfer
(
str
->
xfer
);
str
->
xfer
->
status
=
usbd_transfer
(
str
->
xfer
);
/* this can either return in progress, or normal completion (if
the pipe wasn't already running) */
if
(
str
->
xfer
->
status
!=
USBD_IN_PROGRESS
&&
str
->
xfer
->
status
!=
USBD_NORMAL_COMPLETION
)
{
dprintf
((
""
,
"Failed to insert transfer, status = %d (%s)
\n
"
,
str
->
xfer
->
status
,
ccodes
[
str
->
xfer
->
status
]));
}
/* this can either return in progress, or normal completion (if
the pipe wasn't already running) */
if
(
str
->
xfer
->
status
!=
USBD_IN_PROGRESS
&&
str
->
xfer
->
status
!=
USBD_NORMAL_COMPLETION
)
{
dprintf
((
""
,
"Failed to insert transfer, status = %d (%s)
\n
"
,
str
->
xfer
->
status
,
ccodes
[
str
->
xfer
->
status
]));
}
}
else
{
...
...
@@ -2407,7 +2339,7 @@ void start_write (struct devstream* str)
/*---------------------------------------------------------------------------*/
static
void
read_cb
(
usbd_xfer_handle
xfer
,
usbd_private_handle
priv
,
usbd_status
status
)
usbd_status
status
)
{
struct
devstream
*
str
=
priv
;
...
...
@@ -2427,22 +2359,6 @@ static void read_cb(usbd_xfer_handle xfer, usbd_private_handle priv,
/* only start another transfer if we haven't finished the transfer and
this is not a interrupt endpoint (the BSD framework restarts
repeating transfers) */
<<<<<<<
usbmodule
if
((
xfer
->
actlen
%
UGETW
(
xfer
->
pipe
->
endpoint
->
edesc
->
wMaxPacketSize
))
&&
str
->
count
!=
str
->
totalcount
&&
!
xfer
->
pipe
->
repeat
)
{
char
zero
[
UGETW
(
xfer
->
pipe
->
endpoint
->
edesc
->
wMaxPacketSize
)];
memset
(
zero
,
0
,
sizeof
zero
);
/* fill up the rest of the request with garbage! */
_kernel_swi_regs
r
;
r
.
r
[
0
]
=
BM_InsertBlock
;
r
.
r
[
1
]
=
(
int
)
str
->
buffer_id
;
r
.
r
[
2
]
=
(
int
)
zero
;
r
.
r
[
3
]
=
str
->
totalcount
-
str
->
count
;
CallBufMan
(
&
r
);
}
else
if
(
str
->
count
!=
str
->
totalcount
&&
!
xfer
->
pipe
->
repeat
)
=======
/* if we've got a number of bytes including a part packet, then
transfer must have ended.. else.. try more */
// if(!xfer->pipe->repeat)
...
...
@@ -2460,7 +2376,7 @@ static void read_cb(usbd_xfer_handle xfer, usbd_private_handle priv,
// dprintf (("", "Fill insert %x bytes\n",r.r[3]));
// CallBufMan (&r);
// }
// else if (str->count != str->totalcount)
// else if (str->count != str->totalcount)
// {
// dprintf (("", "Starting read from callback\n"));
// start_read (str);
...
...
@@ -2481,7 +2397,6 @@ static void read_cb(usbd_xfer_handle xfer, usbd_private_handle priv,
CallBufMan
(
&
r
);
}
else
if
(
str
->
count
!=
str
->
totalcount
&&
!
xfer
->
pipe
->
repeat
)
>>>>>>>
1
.
26
{
dprintf
((
""
,
"Starting read from callback
\n
"
));
start_read
(
str
);
...
...
@@ -2598,26 +2513,26 @@ void start_read (struct devstream* str)
USBD_SHORT_XFER_OK
,
str
->
timeout
,
read_cb
);
dprintf
((
""
,
"starting (bulk/interrupt) transfer of %d bytes
\n
"
,
actlen
));
dprintf
((
""
,
"starting (bulk/interrupt) transfer of %d bytes
\n
"
,
actlen
));
break
;
case
UE_ISOCHRONOUS
:
fill_isoc_xfer
(
str
,
maxpacket
);
dprintf
((
""
,
"starting (isoc) transfer of %d bytes
\n
"
,
str
->
size
));
dprintf
((
""
,
"starting (isoc) transfer of %d bytes
\n
"
,
str
->
size
));
break
;
}
str
->
xfer
->
rqflags
|=
URQ_RISCOS_BUF
;
str
->
xfer
->
rqflags
|=
URQ_RISCOS_BUF
;
#endif
str
->
xfer
->
status
=
usbd_transfer
(
str
->
xfer
);
/* this can either return in progress, or normal completion (if
the pipe wasn't already running) */
if
(
str
->
xfer
->
status
!=
USBD_IN_PROGRESS
&&
str
->
xfer
->
status
!=
USBD_NORMAL_COMPLETION
)
{
dprintf
((
""
,
"Failed to insert transfer, status = %d (%s)
\n
"
,
str
->
xfer
->
status
,
ccodes
[
str
->
xfer
->
status
]));
}
str
->
xfer
->
status
=
usbd_transfer
(
str
->
xfer
);
/* this can either return in progress, or normal completion (if
the pipe wasn't already running) */
if
(
str
->
xfer
->
status
!=
USBD_IN_PROGRESS
&&
str
->
xfer
->
status
!=
USBD_NORMAL_COMPLETION
)
{
dprintf
((
""
,
"Failed to insert transfer, status = %d (%s)
\n
"
,
str
->
xfer
->
status
,
ccodes
[
str
->
xfer
->
status
]));
}
}
end:
reentry
=
0
;
...
...
@@ -2629,7 +2544,7 @@ end:
void
terminate_stream
(
struct
ugen_softc
*
ugen
,
struct
devstream
*
str
,
int
kill
)
{
dprintf
((
""
,
"terminate stream %p, ep %x, kill = %d
\n
"
,
str
,
str
->
ep
,
kill
));
str
,
str
?
str
->
ep
:
0
,
kill
));
if
(
str
==
NULL
)
{
...
...
@@ -2986,19 +2901,11 @@ _kernel_oserror* driver (_kernel_swi_regs* r, void* pw)
UE_ISOCHRONOUS
)
{
start_read
(
str
);
// dprintf (("", "inserting interrupt transfer\n"));
// usbd_setup_xfer(
// str->xfer,
// str->pipe,
// str,
// (void*) str->buffer_id,
// UGETW(str->pipe->endpoint->edesc->wMaxPacketSize),
// USBD_SHORT_XFER_OK,
// str->timeout,
// read_cb);
//
// str->xfer->status = usbd_transfer (str->xfer);
/* obviously only do this if we're an in endpoint */
if
(
UE_GET_DIR
(
str
->
ep
)
==
UE_DIR_IN
)
{
start_read
(
str
);
}
}
break
;
case
DeviceFSCallDevice_MonitorTX
:
...
...
This diff is collapsed.
Click to expand it.
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