diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-01 20:06:09 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-01 20:06:09 -0400 |
| commit | 3e75c6de1ac33fe3500f44573d9212dc82c99f59 (patch) | |
| tree | ef10932e204ba8a9885051b06d4524d284207d61 /include/linux | |
| parent | cb1595563880a81dab6eab9a5ecb4520d2e76077 (diff) | |
| parent | 940ab8f1ef9369da5b58a1bec6820bfd4a7b9042 (diff) | |
Merge tag 'usb-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB patches from Greg KH:
"Here's the big USB pull request for 3.15-rc1.
The normal set of patches, lots of controller driver updates, and a
smattering of individual USB driver updates as well.
All have been in linux-next for a while"
* tag 'usb-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (249 commits)
xhci: Transition maintainership to Mathias Nyman.
USB: disable reset-resume when USB_QUIRK_RESET is set
USB: unbind all interfaces before rebinding any
usb: phy: Add ulpi IDs for SMSC USB3320 and TI TUSB1210
usb: gadget: tcm_usb_gadget: stop format strings
usb: gadget: f_fs: add missing spinlock and mutex unlock
usb: gadget: composite: switch over to ERR_CAST()
usb: gadget: inode: switch over to memdup_user()
usb: gadget: f_subset: switch over to PTR_RET
usb: gadget: lpc32xx_udc: fix wrong clk_put() sequence
USB: keyspan: remove dead debugging code
USB: serial: add missing newlines to dev_<level> messages.
USB: serial: add missing braces
USB: serial: continue to write on errors
USB: serial: continue to read on errors
USB: serial: make bulk_out_size a lower limit
USB: cypress_m8: fix potential scheduling while atomic
devicetree: bindings: document lsi,zevio-usb
usb: chipidea: add support for USB OTG controller on LSI Zevio SoCs
usb: chipidea: imx: Use dev_name() for ci_hdrc name to distinguish USBs
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/phy/omap_control_phy.h (renamed from include/linux/usb/omap_control_usb.h) | 36 | ||||
| -rw-r--r-- | include/linux/phy/omap_usb.h (renamed from include/linux/usb/omap_usb.h) | 14 | ||||
| -rw-r--r-- | include/linux/phy/phy.h | 15 | ||||
| -rw-r--r-- | include/linux/usb.h | 4 | ||||
| -rw-r--r-- | include/linux/usb/chipidea.h | 1 | ||||
| -rw-r--r-- | include/linux/usb/hcd.h | 1 | ||||
| -rw-r--r-- | include/linux/usb/phy.h | 16 | ||||
| -rw-r--r-- | include/linux/usb/serial.h | 3 | ||||
| -rw-r--r-- | include/linux/usb/uas.h | 14 | ||||
| -rw-r--r-- | include/linux/usb_usual.h | 6 |
10 files changed, 80 insertions, 30 deletions
diff --git a/include/linux/usb/omap_control_usb.h b/include/linux/phy/omap_control_phy.h index 69ae383ee3cc..5450403c7546 100644 --- a/include/linux/usb/omap_control_usb.h +++ b/include/linux/phy/omap_control_phy.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * omap_control_usb.h - Header file for the USB part of control module. | 2 | * omap_control_phy.h - Header file for the PHY part of control module. |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com | 4 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com |
| 5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
| @@ -16,10 +16,10 @@ | |||
| 16 | * | 16 | * |
| 17 | */ | 17 | */ |
| 18 | 18 | ||
| 19 | #ifndef __OMAP_CONTROL_USB_H__ | 19 | #ifndef __OMAP_CONTROL_PHY_H__ |
| 20 | #define __OMAP_CONTROL_USB_H__ | 20 | #define __OMAP_CONTROL_PHY_H__ |
| 21 | 21 | ||
| 22 | enum omap_control_usb_type { | 22 | enum omap_control_phy_type { |
| 23 | OMAP_CTRL_TYPE_OTGHS = 1, /* Mailbox OTGHS_CONTROL */ | 23 | OMAP_CTRL_TYPE_OTGHS = 1, /* Mailbox OTGHS_CONTROL */ |
| 24 | OMAP_CTRL_TYPE_USB2, /* USB2_PHY, power down in CONTROL_DEV_CONF */ | 24 | OMAP_CTRL_TYPE_USB2, /* USB2_PHY, power down in CONTROL_DEV_CONF */ |
| 25 | OMAP_CTRL_TYPE_PIPE3, /* PIPE3 PHY, DPLL & seperate Rx/Tx power */ | 25 | OMAP_CTRL_TYPE_PIPE3, /* PIPE3 PHY, DPLL & seperate Rx/Tx power */ |
| @@ -27,7 +27,7 @@ enum omap_control_usb_type { | |||
| 27 | OMAP_CTRL_TYPE_AM437USB2, /* USB2 PHY, power e.g. AM437x */ | 27 | OMAP_CTRL_TYPE_AM437USB2, /* USB2 PHY, power e.g. AM437x */ |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | struct omap_control_usb { | 30 | struct omap_control_phy { |
| 31 | struct device *dev; | 31 | struct device *dev; |
| 32 | 32 | ||
| 33 | u32 __iomem *otghs_control; | 33 | u32 __iomem *otghs_control; |
| @@ -36,7 +36,7 @@ struct omap_control_usb { | |||
| 36 | 36 | ||
| 37 | struct clk *sys_clk; | 37 | struct clk *sys_clk; |
| 38 | 38 | ||
| 39 | enum omap_control_usb_type type; | 39 | enum omap_control_phy_type type; |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | enum omap_control_usb_mode { | 42 | enum omap_control_usb_mode { |
| @@ -54,14 +54,14 @@ enum omap_control_usb_mode { | |||
| 54 | #define OMAP_CTRL_DEV_SESSEND BIT(3) | 54 | #define OMAP_CTRL_DEV_SESSEND BIT(3) |
| 55 | #define OMAP_CTRL_DEV_IDDIG BIT(4) | 55 | #define OMAP_CTRL_DEV_IDDIG BIT(4) |
| 56 | 56 | ||
| 57 | #define OMAP_CTRL_USB_PWRCTL_CLK_CMD_MASK 0x003FC000 | 57 | #define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_MASK 0x003FC000 |
| 58 | #define OMAP_CTRL_USB_PWRCTL_CLK_CMD_SHIFT 0xE | 58 | #define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_CMD_SHIFT 0xE |
| 59 | 59 | ||
| 60 | #define OMAP_CTRL_USB_PWRCTL_CLK_FREQ_MASK 0xFFC00000 | 60 | #define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_MASK 0xFFC00000 |
| 61 | #define OMAP_CTRL_USB_PWRCTL_CLK_FREQ_SHIFT 0x16 | 61 | #define OMAP_CTRL_PIPE3_PHY_PWRCTL_CLK_FREQ_SHIFT 0x16 |
| 62 | 62 | ||
| 63 | #define OMAP_CTRL_USB3_PHY_TX_RX_POWERON 0x3 | 63 | #define OMAP_CTRL_PIPE3_PHY_TX_RX_POWERON 0x3 |
| 64 | #define OMAP_CTRL_USB3_PHY_TX_RX_POWEROFF 0x0 | 64 | #define OMAP_CTRL_PIPE3_PHY_TX_RX_POWEROFF 0x0 |
| 65 | 65 | ||
| 66 | #define OMAP_CTRL_USB2_PHY_PD BIT(28) | 66 | #define OMAP_CTRL_USB2_PHY_PD BIT(28) |
| 67 | 67 | ||
| @@ -70,13 +70,13 @@ enum omap_control_usb_mode { | |||
| 70 | #define AM437X_CTRL_USB2_OTGVDET_EN BIT(19) | 70 | #define AM437X_CTRL_USB2_OTGVDET_EN BIT(19) |
| 71 | #define AM437X_CTRL_USB2_OTGSESSEND_EN BIT(20) | 71 | #define AM437X_CTRL_USB2_OTGSESSEND_EN BIT(20) |
| 72 | 72 | ||
| 73 | #if IS_ENABLED(CONFIG_OMAP_CONTROL_USB) | 73 | #if IS_ENABLED(CONFIG_OMAP_CONTROL_PHY) |
| 74 | extern void omap_control_usb_phy_power(struct device *dev, int on); | 74 | void omap_control_phy_power(struct device *dev, int on); |
| 75 | extern void omap_control_usb_set_mode(struct device *dev, | 75 | void omap_control_usb_set_mode(struct device *dev, |
| 76 | enum omap_control_usb_mode mode); | 76 | enum omap_control_usb_mode mode); |
| 77 | #else | 77 | #else |
| 78 | 78 | ||
| 79 | static inline void omap_control_usb_phy_power(struct device *dev, int on) | 79 | static inline void omap_control_phy_power(struct device *dev, int on) |
| 80 | { | 80 | { |
| 81 | } | 81 | } |
| 82 | 82 | ||
| @@ -86,4 +86,4 @@ static inline void omap_control_usb_set_mode(struct device *dev, | |||
| 86 | } | 86 | } |
| 87 | #endif | 87 | #endif |
| 88 | 88 | ||
| 89 | #endif /* __OMAP_CONTROL_USB_H__ */ | 89 | #endif /* __OMAP_CONTROL_PHY_H__ */ |
diff --git a/include/linux/usb/omap_usb.h b/include/linux/phy/omap_usb.h index 6ae29360e1d2..dc2c541a619b 100644 --- a/include/linux/usb/omap_usb.h +++ b/include/linux/phy/omap_usb.h | |||
| @@ -34,14 +34,24 @@ struct omap_usb { | |||
| 34 | struct usb_phy phy; | 34 | struct usb_phy phy; |
| 35 | struct phy_companion *comparator; | 35 | struct phy_companion *comparator; |
| 36 | void __iomem *pll_ctrl_base; | 36 | void __iomem *pll_ctrl_base; |
| 37 | void __iomem *phy_base; | ||
| 37 | struct device *dev; | 38 | struct device *dev; |
| 38 | struct device *control_dev; | 39 | struct device *control_dev; |
| 39 | struct clk *wkupclk; | 40 | struct clk *wkupclk; |
| 40 | struct clk *sys_clk; | ||
| 41 | struct clk *optclk; | 41 | struct clk *optclk; |
| 42 | u8 is_suspended:1; | 42 | u8 flags; |
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | struct usb_phy_data { | ||
| 46 | const char *label; | ||
| 47 | u8 flags; | ||
| 48 | }; | ||
| 49 | |||
| 50 | /* Driver Flags */ | ||
| 51 | #define OMAP_USB2_HAS_START_SRP (1 << 0) | ||
| 52 | #define OMAP_USB2_HAS_SET_VBUS (1 << 1) | ||
| 53 | #define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT (1 << 2) | ||
| 54 | |||
| 45 | #define phy_to_omapusb(x) container_of((x), struct omap_usb, phy) | 55 | #define phy_to_omapusb(x) container_of((x), struct omap_usb, phy) |
| 46 | 56 | ||
| 47 | #if defined(CONFIG_OMAP_USB2) || defined(CONFIG_OMAP_USB2_MODULE) | 57 | #if defined(CONFIG_OMAP_USB2) || defined(CONFIG_OMAP_USB2_MODULE) |
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h index 3f83459dbb20..e2f5ca96cddc 100644 --- a/include/linux/phy/phy.h +++ b/include/linux/phy/phy.h | |||
| @@ -149,8 +149,11 @@ struct phy *phy_get(struct device *dev, const char *string); | |||
| 149 | struct phy *phy_optional_get(struct device *dev, const char *string); | 149 | struct phy *phy_optional_get(struct device *dev, const char *string); |
| 150 | struct phy *devm_phy_get(struct device *dev, const char *string); | 150 | struct phy *devm_phy_get(struct device *dev, const char *string); |
| 151 | struct phy *devm_phy_optional_get(struct device *dev, const char *string); | 151 | struct phy *devm_phy_optional_get(struct device *dev, const char *string); |
| 152 | struct phy *devm_of_phy_get(struct device *dev, struct device_node *np, | ||
| 153 | const char *con_id); | ||
| 152 | void phy_put(struct phy *phy); | 154 | void phy_put(struct phy *phy); |
| 153 | void devm_phy_put(struct device *dev, struct phy *phy); | 155 | void devm_phy_put(struct device *dev, struct phy *phy); |
| 156 | struct phy *of_phy_get(struct device_node *np, const char *con_id); | ||
| 154 | struct phy *of_phy_simple_xlate(struct device *dev, | 157 | struct phy *of_phy_simple_xlate(struct device *dev, |
| 155 | struct of_phandle_args *args); | 158 | struct of_phandle_args *args); |
| 156 | struct phy *phy_create(struct device *dev, const struct phy_ops *ops, | 159 | struct phy *phy_create(struct device *dev, const struct phy_ops *ops, |
| @@ -251,6 +254,13 @@ static inline struct phy *devm_phy_optional_get(struct device *dev, | |||
| 251 | return ERR_PTR(-ENOSYS); | 254 | return ERR_PTR(-ENOSYS); |
| 252 | } | 255 | } |
| 253 | 256 | ||
| 257 | static inline struct phy *devm_of_phy_get(struct device *dev, | ||
| 258 | struct device_node *np, | ||
| 259 | const char *con_id) | ||
| 260 | { | ||
| 261 | return ERR_PTR(-ENOSYS); | ||
| 262 | } | ||
| 263 | |||
| 254 | static inline void phy_put(struct phy *phy) | 264 | static inline void phy_put(struct phy *phy) |
| 255 | { | 265 | { |
| 256 | } | 266 | } |
| @@ -259,6 +269,11 @@ static inline void devm_phy_put(struct device *dev, struct phy *phy) | |||
| 259 | { | 269 | { |
| 260 | } | 270 | } |
| 261 | 271 | ||
| 272 | static inline struct phy *of_phy_get(struct device_node *np, const char *con_id) | ||
| 273 | { | ||
| 274 | return ERR_PTR(-ENOSYS); | ||
| 275 | } | ||
| 276 | |||
| 262 | static inline struct phy *of_phy_simple_xlate(struct device *dev, | 277 | static inline struct phy *of_phy_simple_xlate(struct device *dev, |
| 263 | struct of_phandle_args *args) | 278 | struct of_phandle_args *args) |
| 264 | { | 279 | { |
diff --git a/include/linux/usb.h b/include/linux/usb.h index b55600a1edc3..6b7ec376fb4d 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -57,6 +57,7 @@ struct ep_device; | |||
| 57 | * @extra: descriptors following this endpoint in the configuration | 57 | * @extra: descriptors following this endpoint in the configuration |
| 58 | * @extralen: how many bytes of "extra" are valid | 58 | * @extralen: how many bytes of "extra" are valid |
| 59 | * @enabled: URBs may be submitted to this endpoint | 59 | * @enabled: URBs may be submitted to this endpoint |
| 60 | * @streams: number of USB-3 streams allocated on the endpoint | ||
| 60 | * | 61 | * |
| 61 | * USB requests are always queued to a given endpoint, identified by a | 62 | * USB requests are always queued to a given endpoint, identified by a |
| 62 | * descriptor within an active interface in a given USB configuration. | 63 | * descriptor within an active interface in a given USB configuration. |
| @@ -71,6 +72,7 @@ struct usb_host_endpoint { | |||
| 71 | unsigned char *extra; /* Extra descriptors */ | 72 | unsigned char *extra; /* Extra descriptors */ |
| 72 | int extralen; | 73 | int extralen; |
| 73 | int enabled; | 74 | int enabled; |
| 75 | int streams; | ||
| 74 | }; | 76 | }; |
| 75 | 77 | ||
| 76 | /* host-side wrapper for one interface setting's parsed descriptors */ | 78 | /* host-side wrapper for one interface setting's parsed descriptors */ |
| @@ -202,6 +204,8 @@ static inline void usb_set_intfdata(struct usb_interface *intf, void *data) | |||
| 202 | struct usb_interface *usb_get_intf(struct usb_interface *intf); | 204 | struct usb_interface *usb_get_intf(struct usb_interface *intf); |
| 203 | void usb_put_intf(struct usb_interface *intf); | 205 | void usb_put_intf(struct usb_interface *intf); |
| 204 | 206 | ||
| 207 | /* Hard limit */ | ||
| 208 | #define USB_MAXENDPOINTS 30 | ||
| 205 | /* this maximum is arbitrary */ | 209 | /* this maximum is arbitrary */ |
| 206 | #define USB_MAXINTERFACES 32 | 210 | #define USB_MAXINTERFACES 32 |
| 207 | #define USB_MAXIADS (USB_MAXINTERFACES/2) | 211 | #define USB_MAXIADS (USB_MAXINTERFACES/2) |
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h index 708bd119627f..bbe779f640be 100644 --- a/include/linux/usb/chipidea.h +++ b/include/linux/usb/chipidea.h | |||
| @@ -25,6 +25,7 @@ struct ci_hdrc_platform_data { | |||
| 25 | */ | 25 | */ |
| 26 | #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4) | 26 | #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4) |
| 27 | #define CI_HDRC_IMX28_WRITE_FIX BIT(5) | 27 | #define CI_HDRC_IMX28_WRITE_FIX BIT(5) |
| 28 | #define CI_HDRC_FORCE_FULLSPEED BIT(6) | ||
| 28 | enum usb_dr_mode dr_mode; | 29 | enum usb_dr_mode dr_mode; |
| 29 | #define CI_HDRC_CONTROLLER_RESET_EVENT 0 | 30 | #define CI_HDRC_CONTROLLER_RESET_EVENT 0 |
| 30 | #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1 | 31 | #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1 |
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index efe8d8a7c7ad..485cd5e2100c 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h | |||
| @@ -143,6 +143,7 @@ struct usb_hcd { | |||
| 143 | unsigned authorized_default:1; | 143 | unsigned authorized_default:1; |
| 144 | unsigned has_tt:1; /* Integrated TT in root hub */ | 144 | unsigned has_tt:1; /* Integrated TT in root hub */ |
| 145 | unsigned amd_resume_bug:1; /* AMD remote wakeup quirk */ | 145 | unsigned amd_resume_bug:1; /* AMD remote wakeup quirk */ |
| 146 | unsigned can_do_streams:1; /* HC supports streams */ | ||
| 146 | 147 | ||
| 147 | unsigned int irq; /* irq allocated */ | 148 | unsigned int irq; /* irq allocated */ |
| 148 | void __iomem *regs; /* device memory/io */ | 149 | void __iomem *regs; /* device memory/io */ |
diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h index 6c0b1c513db7..353053a33f21 100644 --- a/include/linux/usb/phy.h +++ b/include/linux/usb/phy.h | |||
| @@ -111,6 +111,13 @@ struct usb_phy { | |||
| 111 | int (*set_suspend)(struct usb_phy *x, | 111 | int (*set_suspend)(struct usb_phy *x, |
| 112 | int suspend); | 112 | int suspend); |
| 113 | 113 | ||
| 114 | /* | ||
| 115 | * Set wakeup enable for PHY, in that case, the PHY can be | ||
| 116 | * woken up from suspend status due to external events, | ||
| 117 | * like vbus change, dp/dm change and id. | ||
| 118 | */ | ||
| 119 | int (*set_wakeup)(struct usb_phy *x, bool enabled); | ||
| 120 | |||
| 114 | /* notify phy connect status change */ | 121 | /* notify phy connect status change */ |
| 115 | int (*notify_connect)(struct usb_phy *x, | 122 | int (*notify_connect)(struct usb_phy *x, |
| 116 | enum usb_device_speed speed); | 123 | enum usb_device_speed speed); |
| @@ -265,6 +272,15 @@ usb_phy_set_suspend(struct usb_phy *x, int suspend) | |||
| 265 | } | 272 | } |
| 266 | 273 | ||
| 267 | static inline int | 274 | static inline int |
| 275 | usb_phy_set_wakeup(struct usb_phy *x, bool enabled) | ||
| 276 | { | ||
| 277 | if (x && x->set_wakeup) | ||
| 278 | return x->set_wakeup(x, enabled); | ||
| 279 | else | ||
| 280 | return 0; | ||
| 281 | } | ||
| 282 | |||
| 283 | static inline int | ||
| 268 | usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed) | 284 | usb_phy_notify_connect(struct usb_phy *x, enum usb_device_speed speed) |
| 269 | { | 285 | { |
| 270 | if (x && x->notify_connect) | 286 | if (x && x->notify_connect) |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 704a1ab8240c..9bb547c7bce7 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
| @@ -190,7 +190,8 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data) | |||
| 190 | * @num_ports: the number of different ports this device will have. | 190 | * @num_ports: the number of different ports this device will have. |
| 191 | * @bulk_in_size: minimum number of bytes to allocate for bulk-in buffer | 191 | * @bulk_in_size: minimum number of bytes to allocate for bulk-in buffer |
| 192 | * (0 = end-point size) | 192 | * (0 = end-point size) |
| 193 | * @bulk_out_size: bytes to allocate for bulk-out buffer (0 = end-point size) | 193 | * @bulk_out_size: minimum number of bytes to allocate for bulk-out buffer |
| 194 | * (0 = end-point size) | ||
| 194 | * @calc_num_ports: pointer to a function to determine how many ports this | 195 | * @calc_num_ports: pointer to a function to determine how many ports this |
| 195 | * device has dynamically. It will be called after the probe() | 196 | * device has dynamically. It will be called after the probe() |
| 196 | * callback is called, but before attach() | 197 | * callback is called, but before attach() |
diff --git a/include/linux/usb/uas.h b/include/linux/usb/uas.h index 5499ab5c94bd..3fc8e8b9f043 100644 --- a/include/linux/usb/uas.h +++ b/include/linux/usb/uas.h | |||
| @@ -9,7 +9,7 @@ struct iu { | |||
| 9 | __u8 iu_id; | 9 | __u8 iu_id; |
| 10 | __u8 rsvd1; | 10 | __u8 rsvd1; |
| 11 | __be16 tag; | 11 | __be16 tag; |
| 12 | }; | 12 | } __attribute__((__packed__)); |
| 13 | 13 | ||
| 14 | enum { | 14 | enum { |
| 15 | IU_ID_COMMAND = 0x01, | 15 | IU_ID_COMMAND = 0x01, |
| @@ -52,7 +52,7 @@ struct command_iu { | |||
| 52 | __u8 rsvd7; | 52 | __u8 rsvd7; |
| 53 | struct scsi_lun lun; | 53 | struct scsi_lun lun; |
| 54 | __u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */ | 54 | __u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */ |
| 55 | }; | 55 | } __attribute__((__packed__)); |
| 56 | 56 | ||
| 57 | struct task_mgmt_iu { | 57 | struct task_mgmt_iu { |
| 58 | __u8 iu_id; | 58 | __u8 iu_id; |
| @@ -62,7 +62,7 @@ struct task_mgmt_iu { | |||
| 62 | __u8 rsvd2; | 62 | __u8 rsvd2; |
| 63 | __be16 task_tag; | 63 | __be16 task_tag; |
| 64 | struct scsi_lun lun; | 64 | struct scsi_lun lun; |
| 65 | }; | 65 | } __attribute__((__packed__)); |
| 66 | 66 | ||
| 67 | /* | 67 | /* |
| 68 | * Also used for the Read Ready and Write Ready IUs since they have the | 68 | * Also used for the Read Ready and Write Ready IUs since they have the |
| @@ -77,15 +77,15 @@ struct sense_iu { | |||
| 77 | __u8 rsvd7[7]; | 77 | __u8 rsvd7[7]; |
| 78 | __be16 len; | 78 | __be16 len; |
| 79 | __u8 sense[SCSI_SENSE_BUFFERSIZE]; | 79 | __u8 sense[SCSI_SENSE_BUFFERSIZE]; |
| 80 | }; | 80 | } __attribute__((__packed__)); |
| 81 | 81 | ||
| 82 | struct response_ui { | 82 | struct response_iu { |
| 83 | __u8 iu_id; | 83 | __u8 iu_id; |
| 84 | __u8 rsvd1; | 84 | __u8 rsvd1; |
| 85 | __be16 tag; | 85 | __be16 tag; |
| 86 | __be16 add_response_info; | 86 | __u8 add_response_info[3]; |
| 87 | __u8 response_code; | 87 | __u8 response_code; |
| 88 | }; | 88 | } __attribute__((__packed__)); |
| 89 | 89 | ||
| 90 | struct usb_pipe_usage_descriptor { | 90 | struct usb_pipe_usage_descriptor { |
| 91 | __u8 bLength; | 91 | __u8 bLength; |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index 630356866030..1a64b26046ed 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
| @@ -67,8 +67,10 @@ | |||
| 67 | /* Initial READ(10) (and others) must be retried */ \ | 67 | /* Initial READ(10) (and others) must be retried */ \ |
| 68 | US_FLAG(WRITE_CACHE, 0x00200000) \ | 68 | US_FLAG(WRITE_CACHE, 0x00200000) \ |
| 69 | /* Write Cache status is not available */ \ | 69 | /* Write Cache status is not available */ \ |
| 70 | US_FLAG(NEEDS_CAP16, 0x00400000) | 70 | US_FLAG(NEEDS_CAP16, 0x00400000) \ |
| 71 | /* cannot handle READ_CAPACITY_10 */ | 71 | /* cannot handle READ_CAPACITY_10 */ \ |
| 72 | US_FLAG(IGNORE_UAS, 0x00800000) \ | ||
| 73 | /* Device advertises UAS but it is broken */ | ||
| 72 | 74 | ||
| 73 | #define US_FLAG(name, value) US_FL_##name = value , | 75 | #define US_FLAG(name, value) US_FL_##name = value , |
| 74 | enum { US_DO_ALL_FLAGS }; | 76 | enum { US_DO_ALL_FLAGS }; |
