1 /* dvb-usb-urb.c is part of the DVB USB library.
3 * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@desy.de)
4 * see dvb-usb-init.c for copyright information.
6 * This file keeps functions for initializing and handling the
9 #include "dvb_usb_common.h"
11 int dvb_usbv2_generic_rw(struct dvb_usb_device
*d
, u8
*wbuf
, u16 wlen
, u8
*rbuf
,
12 u16 rlen
, int delay_ms
)
14 int actlen
, ret
= -ENOMEM
;
16 if (!d
|| wbuf
== NULL
|| wlen
== 0)
19 if (d
->props
.generic_bulk_ctrl_endpoint
== 0) {
20 pr_err("%s: endpoint for generic control not specified",
25 ret
= mutex_lock_interruptible(&d
->usb_mutex
);
29 print_hex_dump(KERN_DEBUG
, KBUILD_MODNAME
": >>> ", DUMP_PREFIX_NONE
,
30 32, 1, wbuf
, wlen
, 0);
32 ret
= usb_bulk_msg(d
->udev
, usb_sndbulkpipe(d
->udev
,
33 d
->props
.generic_bulk_ctrl_endpoint
), wbuf
, wlen
,
37 pr_err("%s: bulk message failed: %d (%d/%d)", KBUILD_MODNAME
,
40 ret
= actlen
!= wlen
? -1 : 0;
42 /* an answer is expected, and no error before */
43 if (!ret
&& rbuf
&& rlen
) {
47 ret
= usb_bulk_msg(d
->udev
, usb_rcvbulkpipe(d
->udev
,
48 d
->props
.generic_bulk_ctrl_endpoint_response
?
49 d
->props
.generic_bulk_ctrl_endpoint_response
:
50 d
->props
.generic_bulk_ctrl_endpoint
),
51 rbuf
, rlen
, &actlen
, 2000);
54 pr_err("%s: recv bulk message failed: %d",
57 print_hex_dump(KERN_DEBUG
, KBUILD_MODNAME
": <<< ",
58 DUMP_PREFIX_NONE
, 32, 1, wbuf
, wlen
, 0);
61 mutex_unlock(&d
->usb_mutex
);
64 EXPORT_SYMBOL(dvb_usbv2_generic_rw
);
66 int dvb_usbv2_generic_write(struct dvb_usb_device
*d
, u8
*buf
, u16 len
)
68 return dvb_usbv2_generic_rw(d
, buf
, len
, NULL
, 0, 0);
70 EXPORT_SYMBOL(dvb_usbv2_generic_write
);