mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 21:30:43 +00:00
usb: wusbcore: use USB_CTRL_SET_TIMEOUT and USB_CTRL_GET_TIMEOUT
Use USB_CTRL_SET_TIMEOUT and USB_CTRL_GET_TIMEOUT for USB control messages instead of an arbitrary 1s timeout value. This is particularly useful for WUSB since in the worst case RF scanario, a WUSB device can be unresponsive for up to 4s and still be connected. Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
83e83ecb79
commit
7b3e3740f2
@ -86,7 +86,7 @@ static int __hwahc_set_cluster_id(struct hwahc *hwahc, u8 cluster_id)
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
cluster_id,
|
||||
wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0)
|
||||
dev_err(dev, "Cannot set WUSB Cluster ID to 0x%02x: %d\n",
|
||||
cluster_id, result);
|
||||
@ -106,7 +106,7 @@ static int __hwahc_op_set_num_dnts(struct wusbhc *wusbhc, u8 interval, u8 slots)
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
interval << 8 | slots,
|
||||
wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -281,7 +281,7 @@ static void __hwahc_op_wusbhc_stop(struct wusbhc *wusbhc, int delay)
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
delay * 1000,
|
||||
iface_no,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (ret == 0)
|
||||
msleep(delay);
|
||||
|
||||
@ -310,7 +310,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
stream_index,
|
||||
wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Cannot set WUSB stream index: %d\n", result);
|
||||
goto out;
|
||||
@ -321,7 +321,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
|
||||
WUSB_REQ_SET_WUSB_MAS,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
mas_le, 32, 1000 /* FIXME: arbitrary */);
|
||||
mas_le, 32, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0)
|
||||
dev_err(dev, "Cannot set WUSB MAS allocation: %d\n", result);
|
||||
out:
|
||||
@ -355,7 +355,7 @@ static int __hwahc_op_mmcie_add(struct wusbhc *wusbhc, u8 interval,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
interval << 8 | repeat_cnt,
|
||||
handle << 8 | iface_no,
|
||||
wuie, wuie->bLength, 1000 /* FIXME: arbitrary */);
|
||||
wuie, wuie->bLength, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -372,7 +372,7 @@ static int __hwahc_op_mmcie_rm(struct wusbhc *wusbhc, u8 handle)
|
||||
WUSB_REQ_REMOVE_MMC_IE,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, handle << 8 | iface_no,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -415,7 +415,7 @@ static int __hwahc_op_dev_info_set(struct wusbhc *wusbhc,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, wusb_dev->port_idx << 8 | iface_no,
|
||||
dev_info, sizeof(struct hwa_dev_info),
|
||||
1000 /* FIXME: arbitrary */);
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
kfree(dev_info);
|
||||
return ret;
|
||||
}
|
||||
@ -455,7 +455,7 @@ static int __hwahc_dev_set_key(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
USB_DT_KEY << 8 | key_idx,
|
||||
port_idx << 8 | iface_no,
|
||||
keyd, keyd_len, 1000 /* FIXME: arbitrary */);
|
||||
keyd, keyd_len, USB_CTRL_SET_TIMEOUT);
|
||||
|
||||
kzfree(keyd); /* clear keys etc. */
|
||||
return result;
|
||||
@ -497,7 +497,7 @@ static int __hwahc_op_set_ptk(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
|
||||
USB_REQ_SET_ENCRYPTION,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
encryption_value, port_idx << 8 | iface_no,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0)
|
||||
dev_err(wusbhc->dev, "Can't set host's WUSB encryption for "
|
||||
"port index %u to %s (value %d): %d\n", port_idx,
|
||||
|
@ -144,7 +144,7 @@ static int cbaf_check(struct cbaf *cbaf)
|
||||
CBAF_REQ_GET_ASSOCIATION_INFORMATION,
|
||||
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, cbaf->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
cbaf->buffer, cbaf->buffer_size, 1000 /* FIXME: arbitrary */);
|
||||
cbaf->buffer, cbaf->buffer_size, USB_CTRL_GET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Cannot get available association types: %d\n",
|
||||
result);
|
||||
@ -265,7 +265,7 @@ static int cbaf_send_host_info(struct cbaf *cbaf)
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0x0101,
|
||||
cbaf->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
hi, hi_size, 1000 /* FIXME: arbitrary */);
|
||||
hi, hi_size, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -288,7 +288,7 @@ static int cbaf_cdid_get(struct cbaf *cbaf)
|
||||
CBAF_REQ_GET_ASSOCIATION_REQUEST,
|
||||
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0x0200, cbaf->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
di, cbaf->buffer_size, 1000 /* FIXME: arbitrary */);
|
||||
di, cbaf->buffer_size, USB_CTRL_GET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Cannot request device information: %d\n", result);
|
||||
return result;
|
||||
@ -536,7 +536,7 @@ static int cbaf_cc_upload(struct cbaf *cbaf)
|
||||
CBAF_REQ_SET_ASSOCIATION_RESPONSE,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0x0201, cbaf->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
ccd, sizeof(*ccd), 1000 /* FIXME: arbitrary */);
|
||||
ccd, sizeof(*ccd), USB_CTRL_SET_TIMEOUT);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ static int wusb_dev_set_encryption(struct usb_device *usb_dev, int value)
|
||||
result = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
|
||||
USB_REQ_SET_ENCRYPTION,
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
value, 0, NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
value, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0)
|
||||
dev_err(dev, "Can't set device's WUSB encryption to "
|
||||
"%s (value %d): %d\n",
|
||||
@ -192,7 +192,7 @@ static int wusb_dev_set_gtk(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev)
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
USB_DT_KEY << 8 | wusbhc->gtk_index, 0,
|
||||
&wusbhc->gtk.descr, wusbhc->gtk.descr.bLength,
|
||||
1000);
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
|
||||
@ -302,8 +302,9 @@ int wusb_dev_update_address(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev)
|
||||
|
||||
/* Set address 0 */
|
||||
result = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
|
||||
USB_REQ_SET_ADDRESS, 0,
|
||||
0, 0, NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
USB_REQ_SET_ADDRESS,
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "auth failed: can't set address 0: %d\n",
|
||||
result);
|
||||
@ -317,9 +318,10 @@ int wusb_dev_update_address(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev)
|
||||
|
||||
/* Set new (authenticated) address. */
|
||||
result = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
|
||||
USB_REQ_SET_ADDRESS, 0,
|
||||
new_address, 0, NULL, 0,
|
||||
1000 /* FIXME: arbitrary */);
|
||||
USB_REQ_SET_ADDRESS,
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
new_address, 0, NULL, 0,
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "auth failed: can't set address %u: %d\n",
|
||||
new_address, result);
|
||||
@ -382,7 +384,7 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
||||
usb_dev, usb_sndctrlpipe(usb_dev, 0),
|
||||
USB_REQ_SET_HANDSHAKE,
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
1, 0, &hs[0], sizeof(hs[0]), 1000 /* FIXME: arbitrary */);
|
||||
1, 0, &hs[0], sizeof(hs[0]), USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Handshake1: request failed: %d\n", result);
|
||||
goto error_hs1;
|
||||
@ -393,7 +395,7 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
||||
usb_dev, usb_rcvctrlpipe(usb_dev, 0),
|
||||
USB_REQ_GET_HANDSHAKE,
|
||||
USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
2, 0, &hs[1], sizeof(hs[1]), 1000 /* FIXME: arbitrary */);
|
||||
2, 0, &hs[1], sizeof(hs[1]), USB_CTRL_GET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Handshake2: request failed: %d\n", result);
|
||||
goto error_hs2;
|
||||
@ -470,7 +472,7 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
||||
usb_dev, usb_sndctrlpipe(usb_dev, 0),
|
||||
USB_REQ_SET_HANDSHAKE,
|
||||
USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
|
||||
3, 0, &hs[2], sizeof(hs[2]), 1000 /* FIXME: arbitrary */);
|
||||
3, 0, &hs[2], sizeof(hs[2]), USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Handshake3: request failed: %d\n", result);
|
||||
goto error_hs3;
|
||||
|
@ -366,7 +366,7 @@ static inline int __wa_feature(struct wahc *wa, unsigned op, u16 feature)
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
feature,
|
||||
wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
|
||||
|
||||
@ -400,8 +400,7 @@ s32 __wa_get_status(struct wahc *wa)
|
||||
USB_REQ_GET_STATUS,
|
||||
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, wa->usb_iface->cur_altsetting->desc.bInterfaceNumber,
|
||||
&wa->status, sizeof(wa->status),
|
||||
1000 /* FIXME: arbitrary */);
|
||||
&wa->status, sizeof(wa->status), USB_CTRL_GET_TIMEOUT);
|
||||
if (result >= 0)
|
||||
result = wa->status;
|
||||
return result;
|
||||
|
@ -80,7 +80,7 @@ static int __rpipe_get_descr(struct wahc *wa,
|
||||
USB_REQ_GET_DESCRIPTOR,
|
||||
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_RPIPE,
|
||||
USB_DT_RPIPE<<8, index, descr, sizeof(*descr),
|
||||
1000 /* FIXME: arbitrary */);
|
||||
USB_CTRL_GET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "rpipe %u: get descriptor failed: %d\n",
|
||||
index, (int)result);
|
||||
@ -118,7 +118,7 @@ static int __rpipe_set_descr(struct wahc *wa,
|
||||
USB_REQ_SET_DESCRIPTOR,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_RPIPE,
|
||||
USB_DT_RPIPE<<8, index, descr, sizeof(*descr),
|
||||
HZ / 10);
|
||||
USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "rpipe %u: set descriptor failed: %d\n",
|
||||
index, (int)result);
|
||||
@ -237,7 +237,7 @@ static int __rpipe_reset(struct wahc *wa, unsigned index)
|
||||
wa->usb_dev, usb_sndctrlpipe(wa->usb_dev, 0),
|
||||
USB_REQ_RPIPE_RESET,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_RPIPE,
|
||||
0, index, NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
0, index, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
if (result < 0)
|
||||
dev_err(dev, "rpipe %u: reset failed: %d\n",
|
||||
index, result);
|
||||
@ -527,7 +527,7 @@ void rpipe_ep_disable(struct wahc *wa, struct usb_host_endpoint *ep)
|
||||
wa->usb_dev, usb_rcvctrlpipe(wa->usb_dev, 0),
|
||||
USB_REQ_RPIPE_ABORT,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_RPIPE,
|
||||
0, index, NULL, 0, 1000 /* FIXME: arbitrary */);
|
||||
0, index, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
rpipe_put(rpipe);
|
||||
}
|
||||
mutex_unlock(&wa->rpipe_mutex);
|
||||
@ -548,7 +548,7 @@ void rpipe_clear_feature_stalled(struct wahc *wa, struct usb_host_endpoint *ep)
|
||||
wa->usb_dev, usb_rcvctrlpipe(wa->usb_dev, 0),
|
||||
USB_REQ_CLEAR_FEATURE,
|
||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_RPIPE,
|
||||
RPIPE_STALL, index, NULL, 0, 1000);
|
||||
RPIPE_STALL, index, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
}
|
||||
mutex_unlock(&wa->rpipe_mutex);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user