diff options
Diffstat (limited to 'include/linux')
125 files changed, 3755 insertions, 684 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index e2ea0b2159cd..2fc8e14cc24a 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -94,6 +94,7 @@ header-y += if_ppp.h | |||
94 | header-y += if_slip.h | 94 | header-y += if_slip.h |
95 | header-y += if_strip.h | 95 | header-y += if_strip.h |
96 | header-y += if_tun.h | 96 | header-y += if_tun.h |
97 | header-y += if_x25.h | ||
97 | header-y += in_route.h | 98 | header-y += in_route.h |
98 | header-y += ioctl.h | 99 | header-y += ioctl.h |
99 | header-y += ip6_tunnel.h | 100 | header-y += ip6_tunnel.h |
diff --git a/include/linux/altera_jtaguart.h b/include/linux/altera_jtaguart.h new file mode 100644 index 000000000000..953b178a1650 --- /dev/null +++ b/include/linux/altera_jtaguart.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * altera_jtaguart.h -- Altera JTAG UART driver defines. | ||
3 | */ | ||
4 | |||
5 | #ifndef __ALTJUART_H | ||
6 | #define __ALTJUART_H | ||
7 | |||
8 | #define ALTERA_JTAGUART_MAJOR 204 | ||
9 | #define ALTERA_JTAGUART_MINOR 186 | ||
10 | |||
11 | struct altera_jtaguart_platform_uart { | ||
12 | unsigned long mapbase; /* Physical address base */ | ||
13 | unsigned int irq; /* Interrupt vector */ | ||
14 | }; | ||
15 | |||
16 | #endif /* __ALTJUART_H */ | ||
diff --git a/include/linux/altera_uart.h b/include/linux/altera_uart.h new file mode 100644 index 000000000000..8d441064a30d --- /dev/null +++ b/include/linux/altera_uart.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * altera_uart.h -- Altera UART driver defines. | ||
3 | */ | ||
4 | |||
5 | #ifndef __ALTUART_H | ||
6 | #define __ALTUART_H | ||
7 | |||
8 | struct altera_uart_platform_uart { | ||
9 | unsigned long mapbase; /* Physical address base */ | ||
10 | unsigned int irq; /* Interrupt vector */ | ||
11 | unsigned int uartclk; /* UART clock rate */ | ||
12 | }; | ||
13 | |||
14 | #endif /* __ALTUART_H */ | ||
diff --git a/include/linux/caif/caif_socket.h b/include/linux/caif/caif_socket.h new file mode 100644 index 000000000000..2a61eb1beb85 --- /dev/null +++ b/include/linux/caif/caif_socket.h | |||
@@ -0,0 +1,165 @@ | |||
1 | /* linux/caif_socket.h | ||
2 | * CAIF Definitions for CAIF socket and network layer | ||
3 | * Copyright (C) ST-Ericsson AB 2010 | ||
4 | * Author: Sjur Brendeland/ sjur.brandeland@stericsson.com | ||
5 | * License terms: GNU General Public License (GPL) version 2 | ||
6 | */ | ||
7 | |||
8 | #ifndef _LINUX_CAIF_SOCKET_H | ||
9 | #define _LINUX_CAIF_SOCKET_H | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | #include <linux/socket.h> | ||
15 | #else | ||
16 | #include <sys/socket.h> | ||
17 | #endif | ||
18 | |||
19 | /** | ||
20 | * enum caif_link_selector - Physical Link Selection. | ||
21 | * @CAIF_LINK_HIGH_BANDW: Physical interface for high-bandwidth | ||
22 | * traffic. | ||
23 | * @CAIF_LINK_LOW_LATENCY: Physical interface for low-latency | ||
24 | * traffic. | ||
25 | * | ||
26 | * CAIF Link Layers can register their link properties. | ||
27 | * This enum is used for choosing between CAIF Link Layers when | ||
28 | * setting up CAIF Channels when multiple CAIF Link Layers exists. | ||
29 | */ | ||
30 | enum caif_link_selector { | ||
31 | CAIF_LINK_HIGH_BANDW, | ||
32 | CAIF_LINK_LOW_LATENCY | ||
33 | }; | ||
34 | |||
35 | /** | ||
36 | * enum caif_channel_priority - CAIF channel priorities. | ||
37 | * | ||
38 | * @CAIF_PRIO_MIN: Min priority for a channel. | ||
39 | * @CAIF_PRIO_LOW: Low-priority channel. | ||
40 | * @CAIF_PRIO_NORMAL: Normal/default priority level. | ||
41 | * @CAIF_PRIO_HIGH: High priority level | ||
42 | * @CAIF_PRIO_MAX: Max priority for channel | ||
43 | * | ||
44 | * Priority can be set on CAIF Channels in order to | ||
45 | * prioritize between traffic on different CAIF Channels. | ||
46 | * These priority levels are recommended, but the priority value | ||
47 | * is not restricted to the values defined in this enum, any value | ||
48 | * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used. | ||
49 | */ | ||
50 | enum caif_channel_priority { | ||
51 | CAIF_PRIO_MIN = 0x01, | ||
52 | CAIF_PRIO_LOW = 0x04, | ||
53 | CAIF_PRIO_NORMAL = 0x0f, | ||
54 | CAIF_PRIO_HIGH = 0x14, | ||
55 | CAIF_PRIO_MAX = 0x1F | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * enum caif_protocol_type - CAIF Channel type. | ||
60 | * @CAIFPROTO_AT: Classic AT channel. | ||
61 | * @CAIFPROTO_DATAGRAM: Datagram channel. | ||
62 | * @CAIFPROTO_DATAGRAM_LOOP: Datagram loopback channel, used for testing. | ||
63 | * @CAIFPROTO_UTIL: Utility (Psock) channel. | ||
64 | * @CAIFPROTO_RFM: Remote File Manager | ||
65 | * | ||
66 | * This enum defines the CAIF Channel type to be used. This defines | ||
67 | * the service to connect to on the modem. | ||
68 | */ | ||
69 | enum caif_protocol_type { | ||
70 | CAIFPROTO_AT, | ||
71 | CAIFPROTO_DATAGRAM, | ||
72 | CAIFPROTO_DATAGRAM_LOOP, | ||
73 | CAIFPROTO_UTIL, | ||
74 | CAIFPROTO_RFM, | ||
75 | _CAIFPROTO_MAX | ||
76 | }; | ||
77 | #define CAIFPROTO_MAX _CAIFPROTO_MAX | ||
78 | |||
79 | /** | ||
80 | * enum caif_at_type - AT Service Endpoint | ||
81 | * @CAIF_ATTYPE_PLAIN: Connects to a plain vanilla AT channel. | ||
82 | */ | ||
83 | enum caif_at_type { | ||
84 | CAIF_ATTYPE_PLAIN = 2 | ||
85 | }; | ||
86 | |||
87 | /** | ||
88 | * struct sockaddr_caif - the sockaddr structure for CAIF sockets. | ||
89 | * @family: Address family number, must be AF_CAIF. | ||
90 | * @u: Union of address data 'switched' by family. | ||
91 | * : | ||
92 | * @u.at: Applies when family = CAIFPROTO_AT. | ||
93 | * | ||
94 | * @u.at.type: Type of AT link to set up (enum caif_at_type). | ||
95 | * | ||
96 | * @u.util: Applies when family = CAIFPROTO_UTIL | ||
97 | * | ||
98 | * @u.util.service: Utility service name. | ||
99 | * | ||
100 | * @u.dgm: Applies when family = CAIFPROTO_DATAGRAM | ||
101 | * | ||
102 | * @u.dgm.connection_id: Datagram connection id. | ||
103 | * | ||
104 | * @u.dgm.nsapi: NSAPI of the PDP-Context. | ||
105 | * | ||
106 | * @u.rfm: Applies when family = CAIFPROTO_RFM | ||
107 | * | ||
108 | * @u.rfm.connection_id: Connection ID for RFM. | ||
109 | * | ||
110 | * @u.rfm.volume: Volume to mount. | ||
111 | * | ||
112 | * Description: | ||
113 | * This structure holds the connect parameters used for setting up a | ||
114 | * CAIF Channel. It defines the service to connect to on the modem. | ||
115 | */ | ||
116 | struct sockaddr_caif { | ||
117 | sa_family_t family; | ||
118 | union { | ||
119 | struct { | ||
120 | __u8 type; /* type: enum caif_at_type */ | ||
121 | } at; /* CAIFPROTO_AT */ | ||
122 | struct { | ||
123 | char service[16]; | ||
124 | } util; /* CAIFPROTO_UTIL */ | ||
125 | union { | ||
126 | __u32 connection_id; | ||
127 | __u8 nsapi; | ||
128 | } dgm; /* CAIFPROTO_DATAGRAM(_LOOP)*/ | ||
129 | struct { | ||
130 | __u32 connection_id; | ||
131 | char volume[16]; | ||
132 | } rfm; /* CAIFPROTO_RFM */ | ||
133 | } u; | ||
134 | }; | ||
135 | |||
136 | /** | ||
137 | * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt. | ||
138 | * | ||
139 | * @CAIFSO_LINK_SELECT: Selector used if multiple CAIF Link layers are | ||
140 | * available. Either a high bandwidth | ||
141 | * link can be selected (CAIF_LINK_HIGH_BANDW) or | ||
142 | * or a low latency link (CAIF_LINK_LOW_LATENCY). | ||
143 | * This option is of type __u32. | ||
144 | * Alternatively SO_BINDTODEVICE can be used. | ||
145 | * | ||
146 | * @CAIFSO_REQ_PARAM: Used to set the request parameters for a | ||
147 | * utility channel. (maximum 256 bytes). This | ||
148 | * option must be set before connecting. | ||
149 | * | ||
150 | * @CAIFSO_RSP_PARAM: Gets the response parameters for a utility | ||
151 | * channel. (maximum 256 bytes). This option | ||
152 | * is valid after a successful connect. | ||
153 | * | ||
154 | * | ||
155 | * This enum defines the CAIF Socket options to be used on a socket | ||
156 | * of type PF_CAIF. | ||
157 | * | ||
158 | */ | ||
159 | enum caif_socket_opts { | ||
160 | CAIFSO_LINK_SELECT = 127, | ||
161 | CAIFSO_REQ_PARAM = 128, | ||
162 | CAIFSO_RSP_PARAM = 129, | ||
163 | }; | ||
164 | |||
165 | #endif /* _LINUX_CAIF_SOCKET_H */ | ||
diff --git a/include/linux/caif/if_caif.h b/include/linux/caif/if_caif.h new file mode 100644 index 000000000000..5e7eed4edf51 --- /dev/null +++ b/include/linux/caif/if_caif.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson AB 2010 | ||
3 | * Author: Sjur Brendeland/ sjur.brandeland@stericsson.com | ||
4 | * License terms: GNU General Public License (GPL) version 2 | ||
5 | */ | ||
6 | |||
7 | #ifndef IF_CAIF_H_ | ||
8 | #define IF_CAIF_H_ | ||
9 | #include <linux/sockios.h> | ||
10 | #include <linux/types.h> | ||
11 | #include <linux/socket.h> | ||
12 | |||
13 | /** | ||
14 | * enum ifla_caif - CAIF NetlinkRT parameters. | ||
15 | * @IFLA_CAIF_IPV4_CONNID: Connection ID for IPv4 PDP Context. | ||
16 | * The type of attribute is NLA_U32. | ||
17 | * @IFLA_CAIF_IPV6_CONNID: Connection ID for IPv6 PDP Context. | ||
18 | * The type of attribute is NLA_U32. | ||
19 | * @IFLA_CAIF_LOOPBACK: If different from zero, device is doing loopback | ||
20 | * The type of attribute is NLA_U8. | ||
21 | * | ||
22 | * When using RT Netlink to create, destroy or configure a CAIF IP interface, | ||
23 | * enum ifla_caif is used to specify the configuration attributes. | ||
24 | */ | ||
25 | enum ifla_caif { | ||
26 | __IFLA_CAIF_UNSPEC, | ||
27 | IFLA_CAIF_IPV4_CONNID, | ||
28 | IFLA_CAIF_IPV6_CONNID, | ||
29 | IFLA_CAIF_LOOPBACK, | ||
30 | __IFLA_CAIF_MAX | ||
31 | }; | ||
32 | #define IFLA_CAIF_MAX (__IFLA_CAIF_MAX-1) | ||
33 | |||
34 | #endif /*IF_CAIF_H_*/ | ||
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 6e5a7f00223d..cc0bb4961669 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #ifndef CAN_DEV_H | 14 | #ifndef CAN_DEV_H |
15 | #define CAN_DEV_H | 15 | #define CAN_DEV_H |
16 | 16 | ||
17 | #include <linux/can.h> | ||
17 | #include <linux/can/netlink.h> | 18 | #include <linux/can/netlink.h> |
18 | #include <linux/can/error.h> | 19 | #include <linux/can/error.h> |
19 | 20 | ||
diff --git a/include/linux/can/platform/mcp251x.h b/include/linux/can/platform/mcp251x.h index 1448177d86d5..dba28268e651 100644 --- a/include/linux/can/platform/mcp251x.h +++ b/include/linux/can/platform/mcp251x.h | |||
@@ -26,8 +26,8 @@ | |||
26 | struct mcp251x_platform_data { | 26 | struct mcp251x_platform_data { |
27 | unsigned long oscillator_frequency; | 27 | unsigned long oscillator_frequency; |
28 | int model; | 28 | int model; |
29 | #define CAN_MCP251X_MCP2510 0 | 29 | #define CAN_MCP251X_MCP2510 0x2510 |
30 | #define CAN_MCP251X_MCP2515 1 | 30 | #define CAN_MCP251X_MCP2515 0x2515 |
31 | int (*board_specific_setup)(struct spi_device *spi); | 31 | int (*board_specific_setup)(struct spi_device *spi); |
32 | int (*transceiver_enable)(int enable); | 32 | int (*transceiver_enable)(int enable); |
33 | int (*power_enable) (int enable); | 33 | int (*power_enable) (int enable); |
diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h index 01ee2aeb048d..96f8fcc78d78 100644 --- a/include/linux/can/platform/sja1000.h +++ b/include/linux/can/platform/sja1000.h | |||
@@ -26,7 +26,7 @@ | |||
26 | #define OCR_TX_SHIFT 2 | 26 | #define OCR_TX_SHIFT 2 |
27 | 27 | ||
28 | struct sja1000_platform_data { | 28 | struct sja1000_platform_data { |
29 | u32 clock; /* CAN bus oscillator frequency in Hz */ | 29 | u32 osc_freq; /* CAN bus oscillator frequency in Hz */ |
30 | 30 | ||
31 | u8 ocr; /* output control register */ | 31 | u8 ocr; /* output control register */ |
32 | u8 cdr; /* clock divider register */ | 32 | u8 cdr; /* clock divider register */ |
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h index b7cdbb4373df..8723491f7dfd 100644 --- a/include/linux/dcbnl.h +++ b/include/linux/dcbnl.h | |||
@@ -22,8 +22,6 @@ | |||
22 | 22 | ||
23 | #include <linux/types.h> | 23 | #include <linux/types.h> |
24 | 24 | ||
25 | #define DCB_PROTO_VERSION 1 | ||
26 | |||
27 | struct dcbmsg { | 25 | struct dcbmsg { |
28 | __u8 dcb_family; | 26 | __u8 dcb_family; |
29 | __u8 cmd; | 27 | __u8 cmd; |
diff --git a/include/linux/device.h b/include/linux/device.h index 241b96bcd7ad..7bb9f426f3e6 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/types.h> | 22 | #include <linux/types.h> |
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/pm.h> | 24 | #include <linux/pm.h> |
25 | #include <linux/semaphore.h> | ||
26 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
27 | #include <asm/device.h> | 26 | #include <asm/device.h> |
28 | 27 | ||
@@ -203,6 +202,9 @@ struct class { | |||
203 | int (*suspend)(struct device *dev, pm_message_t state); | 202 | int (*suspend)(struct device *dev, pm_message_t state); |
204 | int (*resume)(struct device *dev); | 203 | int (*resume)(struct device *dev); |
205 | 204 | ||
205 | const struct kobj_ns_type_operations *ns_type; | ||
206 | const void *(*namespace)(struct device *dev); | ||
207 | |||
206 | const struct dev_pm_ops *pm; | 208 | const struct dev_pm_ops *pm; |
207 | 209 | ||
208 | struct class_private *p; | 210 | struct class_private *p; |
@@ -404,7 +406,7 @@ struct device { | |||
404 | const char *init_name; /* initial name of the device */ | 406 | const char *init_name; /* initial name of the device */ |
405 | struct device_type *type; | 407 | struct device_type *type; |
406 | 408 | ||
407 | struct semaphore sem; /* semaphore to synchronize calls to | 409 | struct mutex mutex; /* mutex to synchronize calls to |
408 | * its driver. | 410 | * its driver. |
409 | */ | 411 | */ |
410 | 412 | ||
@@ -514,17 +516,17 @@ static inline bool device_async_suspend_enabled(struct device *dev) | |||
514 | 516 | ||
515 | static inline void device_lock(struct device *dev) | 517 | static inline void device_lock(struct device *dev) |
516 | { | 518 | { |
517 | down(&dev->sem); | 519 | mutex_lock(&dev->mutex); |
518 | } | 520 | } |
519 | 521 | ||
520 | static inline int device_trylock(struct device *dev) | 522 | static inline int device_trylock(struct device *dev) |
521 | { | 523 | { |
522 | return down_trylock(&dev->sem); | 524 | return mutex_trylock(&dev->mutex); |
523 | } | 525 | } |
524 | 526 | ||
525 | static inline void device_unlock(struct device *dev) | 527 | static inline void device_unlock(struct device *dev) |
526 | { | 528 | { |
527 | up(&dev->sem); | 529 | mutex_unlock(&dev->mutex); |
528 | } | 530 | } |
529 | 531 | ||
530 | void driver_init(void); | 532 | void driver_init(void); |
diff --git a/include/linux/dqblk_xfs.h b/include/linux/dqblk_xfs.h index 527504c11c5e..4389ae72024e 100644 --- a/include/linux/dqblk_xfs.h +++ b/include/linux/dqblk_xfs.h | |||
@@ -110,6 +110,15 @@ typedef struct fs_disk_quota { | |||
110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) | 110 | #define FS_DQ_WARNS_MASK (FS_DQ_BWARNS | FS_DQ_IWARNS | FS_DQ_RTBWARNS) |
111 | 111 | ||
112 | /* | 112 | /* |
113 | * Accounting values. These can only be set for filesystem with | ||
114 | * non-transactional quotas that require quotacheck(8) in userspace. | ||
115 | */ | ||
116 | #define FS_DQ_BCOUNT (1<<12) | ||
117 | #define FS_DQ_ICOUNT (1<<13) | ||
118 | #define FS_DQ_RTBCOUNT (1<<14) | ||
119 | #define FS_DQ_ACCT_MASK (FS_DQ_BCOUNT | FS_DQ_ICOUNT | FS_DQ_RTBCOUNT) | ||
120 | |||
121 | /* | ||
113 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. | 122 | * Various flags related to quotactl(2). Only relevant to XFS filesystems. |
114 | */ | 123 | */ |
115 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ | 124 | #define XFS_QUOTA_UDQ_ACCT (1<<0) /* user quota accounting */ |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index b33f316bb92e..276b40a16835 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -310,6 +310,7 @@ struct ethtool_perm_addr { | |||
310 | enum ethtool_flags { | 310 | enum ethtool_flags { |
311 | ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ | 311 | ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ |
312 | ETH_FLAG_NTUPLE = (1 << 27), /* N-tuple filters enabled */ | 312 | ETH_FLAG_NTUPLE = (1 << 27), /* N-tuple filters enabled */ |
313 | ETH_FLAG_RXHASH = (1 << 28), | ||
313 | }; | 314 | }; |
314 | 315 | ||
315 | /* The following structures are for supporting RX network flow | 316 | /* The following structures are for supporting RX network flow |
@@ -490,12 +491,12 @@ void ethtool_ntuple_flush(struct net_device *dev); | |||
490 | * get_ufo: Report whether UDP fragmentation offload is enabled | 491 | * get_ufo: Report whether UDP fragmentation offload is enabled |
491 | * set_ufo: Turn UDP fragmentation offload on or off | 492 | * set_ufo: Turn UDP fragmentation offload on or off |
492 | * self_test: Run specified self-tests | 493 | * self_test: Run specified self-tests |
493 | * get_strings: Return a set of strings that describe the requested objects | 494 | * get_strings: Return a set of strings that describe the requested objects |
494 | * phys_id: Identify the device | 495 | * phys_id: Identify the device |
495 | * get_stats: Return statistics about the device | 496 | * get_stats: Return statistics about the device |
496 | * get_flags: get 32-bit flags bitmap | 497 | * get_flags: get 32-bit flags bitmap |
497 | * set_flags: set 32-bit flags bitmap | 498 | * set_flags: set 32-bit flags bitmap |
498 | * | 499 | * |
499 | * Description: | 500 | * Description: |
500 | * | 501 | * |
501 | * get_settings: | 502 | * get_settings: |
@@ -531,14 +532,20 @@ struct ethtool_ops { | |||
531 | int (*nway_reset)(struct net_device *); | 532 | int (*nway_reset)(struct net_device *); |
532 | u32 (*get_link)(struct net_device *); | 533 | u32 (*get_link)(struct net_device *); |
533 | int (*get_eeprom_len)(struct net_device *); | 534 | int (*get_eeprom_len)(struct net_device *); |
534 | int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); | 535 | int (*get_eeprom)(struct net_device *, |
535 | int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); | 536 | struct ethtool_eeprom *, u8 *); |
537 | int (*set_eeprom)(struct net_device *, | ||
538 | struct ethtool_eeprom *, u8 *); | ||
536 | int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *); | 539 | int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *); |
537 | int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *); | 540 | int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *); |
538 | void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *); | 541 | void (*get_ringparam)(struct net_device *, |
539 | int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *); | 542 | struct ethtool_ringparam *); |
540 | void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*); | 543 | int (*set_ringparam)(struct net_device *, |
541 | int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*); | 544 | struct ethtool_ringparam *); |
545 | void (*get_pauseparam)(struct net_device *, | ||
546 | struct ethtool_pauseparam*); | ||
547 | int (*set_pauseparam)(struct net_device *, | ||
548 | struct ethtool_pauseparam*); | ||
542 | u32 (*get_rx_csum)(struct net_device *); | 549 | u32 (*get_rx_csum)(struct net_device *); |
543 | int (*set_rx_csum)(struct net_device *, u32); | 550 | int (*set_rx_csum)(struct net_device *, u32); |
544 | u32 (*get_tx_csum)(struct net_device *); | 551 | u32 (*get_tx_csum)(struct net_device *); |
@@ -550,21 +557,24 @@ struct ethtool_ops { | |||
550 | void (*self_test)(struct net_device *, struct ethtool_test *, u64 *); | 557 | void (*self_test)(struct net_device *, struct ethtool_test *, u64 *); |
551 | void (*get_strings)(struct net_device *, u32 stringset, u8 *); | 558 | void (*get_strings)(struct net_device *, u32 stringset, u8 *); |
552 | int (*phys_id)(struct net_device *, u32); | 559 | int (*phys_id)(struct net_device *, u32); |
553 | void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); | 560 | void (*get_ethtool_stats)(struct net_device *, |
561 | struct ethtool_stats *, u64 *); | ||
554 | int (*begin)(struct net_device *); | 562 | int (*begin)(struct net_device *); |
555 | void (*complete)(struct net_device *); | 563 | void (*complete)(struct net_device *); |
556 | u32 (*get_ufo)(struct net_device *); | 564 | u32 (*get_ufo)(struct net_device *); |
557 | int (*set_ufo)(struct net_device *, u32); | 565 | int (*set_ufo)(struct net_device *, u32); |
558 | u32 (*get_flags)(struct net_device *); | 566 | u32 (*get_flags)(struct net_device *); |
559 | int (*set_flags)(struct net_device *, u32); | 567 | int (*set_flags)(struct net_device *, u32); |
560 | u32 (*get_priv_flags)(struct net_device *); | 568 | u32 (*get_priv_flags)(struct net_device *); |
561 | int (*set_priv_flags)(struct net_device *, u32); | 569 | int (*set_priv_flags)(struct net_device *, u32); |
562 | int (*get_sset_count)(struct net_device *, int); | 570 | int (*get_sset_count)(struct net_device *, int); |
563 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); | 571 | int (*get_rxnfc)(struct net_device *, |
572 | struct ethtool_rxnfc *, void *); | ||
564 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); | 573 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); |
565 | int (*flash_device)(struct net_device *, struct ethtool_flash *); | 574 | int (*flash_device)(struct net_device *, struct ethtool_flash *); |
566 | int (*reset)(struct net_device *, u32 *); | 575 | int (*reset)(struct net_device *, u32 *); |
567 | int (*set_rx_ntuple)(struct net_device *, struct ethtool_rx_ntuple *); | 576 | int (*set_rx_ntuple)(struct net_device *, |
577 | struct ethtool_rx_ntuple *); | ||
568 | int (*get_rx_ntuple)(struct net_device *, u32 stringset, void *); | 578 | int (*get_rx_ntuple)(struct net_device *, u32 stringset, void *); |
569 | }; | 579 | }; |
570 | #endif /* __KERNEL__ */ | 580 | #endif /* __KERNEL__ */ |
@@ -576,29 +586,29 @@ struct ethtool_ops { | |||
576 | #define ETHTOOL_GREGS 0x00000004 /* Get NIC registers. */ | 586 | #define ETHTOOL_GREGS 0x00000004 /* Get NIC registers. */ |
577 | #define ETHTOOL_GWOL 0x00000005 /* Get wake-on-lan options. */ | 587 | #define ETHTOOL_GWOL 0x00000005 /* Get wake-on-lan options. */ |
578 | #define ETHTOOL_SWOL 0x00000006 /* Set wake-on-lan options. */ | 588 | #define ETHTOOL_SWOL 0x00000006 /* Set wake-on-lan options. */ |
579 | #define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */ | 589 | #define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */ |
580 | #define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */ | 590 | #define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */ |
581 | #define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */ | 591 | #define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */ |
582 | #define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ | 592 | #define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */ |
583 | #define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */ | 593 | #define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */ |
584 | #define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */ | 594 | #define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */ |
585 | #define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */ | 595 | #define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */ |
586 | #define ETHTOOL_SCOALESCE 0x0000000f /* Set coalesce config. */ | 596 | #define ETHTOOL_SCOALESCE 0x0000000f /* Set coalesce config. */ |
587 | #define ETHTOOL_GRINGPARAM 0x00000010 /* Get ring parameters */ | 597 | #define ETHTOOL_GRINGPARAM 0x00000010 /* Get ring parameters */ |
588 | #define ETHTOOL_SRINGPARAM 0x00000011 /* Set ring parameters. */ | 598 | #define ETHTOOL_SRINGPARAM 0x00000011 /* Set ring parameters. */ |
589 | #define ETHTOOL_GPAUSEPARAM 0x00000012 /* Get pause parameters */ | 599 | #define ETHTOOL_GPAUSEPARAM 0x00000012 /* Get pause parameters */ |
590 | #define ETHTOOL_SPAUSEPARAM 0x00000013 /* Set pause parameters. */ | 600 | #define ETHTOOL_SPAUSEPARAM 0x00000013 /* Set pause parameters. */ |
591 | #define ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */ | 601 | #define ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */ |
592 | #define ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */ | 602 | #define ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */ |
593 | #define ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */ | 603 | #define ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */ |
594 | #define ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */ | 604 | #define ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */ |
595 | #define ETHTOOL_GSG 0x00000018 /* Get scatter-gather enable | 605 | #define ETHTOOL_GSG 0x00000018 /* Get scatter-gather enable |
596 | * (ethtool_value) */ | 606 | * (ethtool_value) */ |
597 | #define ETHTOOL_SSG 0x00000019 /* Set scatter-gather enable | 607 | #define ETHTOOL_SSG 0x00000019 /* Set scatter-gather enable |
598 | * (ethtool_value). */ | 608 | * (ethtool_value). */ |
599 | #define ETHTOOL_TEST 0x0000001a /* execute NIC self-test. */ | 609 | #define ETHTOOL_TEST 0x0000001a /* execute NIC self-test. */ |
600 | #define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */ | 610 | #define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */ |
601 | #define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */ | 611 | #define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */ |
602 | #define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */ | 612 | #define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */ |
603 | #define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */ | 613 | #define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */ |
604 | #define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */ | 614 | #define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */ |
@@ -609,24 +619,24 @@ struct ethtool_ops { | |||
609 | #define ETHTOOL_SGSO 0x00000024 /* Set GSO enable (ethtool_value) */ | 619 | #define ETHTOOL_SGSO 0x00000024 /* Set GSO enable (ethtool_value) */ |
610 | #define ETHTOOL_GFLAGS 0x00000025 /* Get flags bitmap(ethtool_value) */ | 620 | #define ETHTOOL_GFLAGS 0x00000025 /* Get flags bitmap(ethtool_value) */ |
611 | #define ETHTOOL_SFLAGS 0x00000026 /* Set flags bitmap(ethtool_value) */ | 621 | #define ETHTOOL_SFLAGS 0x00000026 /* Set flags bitmap(ethtool_value) */ |
612 | #define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */ | 622 | #define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */ |
613 | #define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */ | 623 | #define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */ |
614 | 624 | ||
615 | #define ETHTOOL_GRXFH 0x00000029 /* Get RX flow hash configuration */ | 625 | #define ETHTOOL_GRXFH 0x00000029 /* Get RX flow hash configuration */ |
616 | #define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ | 626 | #define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ |
617 | #define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */ | 627 | #define ETHTOOL_GGRO 0x0000002b /* Get GRO enable (ethtool_value) */ |
618 | #define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */ | 628 | #define ETHTOOL_SGRO 0x0000002c /* Set GRO enable (ethtool_value) */ |
619 | #define ETHTOOL_GRXRINGS 0x0000002d /* Get RX rings available for LB */ | 629 | #define ETHTOOL_GRXRINGS 0x0000002d /* Get RX rings available for LB */ |
620 | #define ETHTOOL_GRXCLSRLCNT 0x0000002e /* Get RX class rule count */ | 630 | #define ETHTOOL_GRXCLSRLCNT 0x0000002e /* Get RX class rule count */ |
621 | #define ETHTOOL_GRXCLSRULE 0x0000002f /* Get RX classification rule */ | 631 | #define ETHTOOL_GRXCLSRULE 0x0000002f /* Get RX classification rule */ |
622 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ | 632 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ |
623 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ | 633 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ |
624 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ | 634 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ |
625 | #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ | 635 | #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ |
626 | #define ETHTOOL_RESET 0x00000034 /* Reset hardware */ | 636 | #define ETHTOOL_RESET 0x00000034 /* Reset hardware */ |
627 | #define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */ | 637 | #define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */ |
628 | #define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */ | 638 | #define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */ |
629 | #define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */ | 639 | #define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */ |
630 | 640 | ||
631 | /* compatibility with older code */ | 641 | /* compatibility with older code */ |
632 | #define SPARC_ETH_GSET ETHTOOL_GSET | 642 | #define SPARC_ETH_GSET ETHTOOL_GSET |
@@ -635,18 +645,18 @@ struct ethtool_ops { | |||
635 | /* Indicates what features are supported by the interface. */ | 645 | /* Indicates what features are supported by the interface. */ |
636 | #define SUPPORTED_10baseT_Half (1 << 0) | 646 | #define SUPPORTED_10baseT_Half (1 << 0) |
637 | #define SUPPORTED_10baseT_Full (1 << 1) | 647 | #define SUPPORTED_10baseT_Full (1 << 1) |
638 | #define SUPPORTED_100baseT_Half (1 << 2) | 648 | #define SUPPORTED_100baseT_Half (1 << 2) |
639 | #define SUPPORTED_100baseT_Full (1 << 3) | 649 | #define SUPPORTED_100baseT_Full (1 << 3) |
640 | #define SUPPORTED_1000baseT_Half (1 << 4) | 650 | #define SUPPORTED_1000baseT_Half (1 << 4) |
641 | #define SUPPORTED_1000baseT_Full (1 << 5) | 651 | #define SUPPORTED_1000baseT_Full (1 << 5) |
642 | #define SUPPORTED_Autoneg (1 << 6) | 652 | #define SUPPORTED_Autoneg (1 << 6) |
643 | #define SUPPORTED_TP (1 << 7) | 653 | #define SUPPORTED_TP (1 << 7) |
644 | #define SUPPORTED_AUI (1 << 8) | 654 | #define SUPPORTED_AUI (1 << 8) |
645 | #define SUPPORTED_MII (1 << 9) | 655 | #define SUPPORTED_MII (1 << 9) |
646 | #define SUPPORTED_FIBRE (1 << 10) | 656 | #define SUPPORTED_FIBRE (1 << 10) |
647 | #define SUPPORTED_BNC (1 << 11) | 657 | #define SUPPORTED_BNC (1 << 11) |
648 | #define SUPPORTED_10000baseT_Full (1 << 12) | 658 | #define SUPPORTED_10000baseT_Full (1 << 12) |
649 | #define SUPPORTED_Pause (1 << 13) | 659 | #define SUPPORTED_Pause (1 << 13) |
650 | #define SUPPORTED_Asym_Pause (1 << 14) | 660 | #define SUPPORTED_Asym_Pause (1 << 14) |
651 | #define SUPPORTED_2500baseX_Full (1 << 15) | 661 | #define SUPPORTED_2500baseX_Full (1 << 15) |
652 | #define SUPPORTED_Backplane (1 << 16) | 662 | #define SUPPORTED_Backplane (1 << 16) |
@@ -656,8 +666,8 @@ struct ethtool_ops { | |||
656 | #define SUPPORTED_10000baseR_FEC (1 << 20) | 666 | #define SUPPORTED_10000baseR_FEC (1 << 20) |
657 | 667 | ||
658 | /* Indicates what features are advertised by the interface. */ | 668 | /* Indicates what features are advertised by the interface. */ |
659 | #define ADVERTISED_10baseT_Half (1 << 0) | 669 | #define ADVERTISED_10baseT_Half (1 << 0) |
660 | #define ADVERTISED_10baseT_Full (1 << 1) | 670 | #define ADVERTISED_10baseT_Full (1 << 1) |
661 | #define ADVERTISED_100baseT_Half (1 << 2) | 671 | #define ADVERTISED_100baseT_Half (1 << 2) |
662 | #define ADVERTISED_100baseT_Full (1 << 3) | 672 | #define ADVERTISED_100baseT_Full (1 << 3) |
663 | #define ADVERTISED_1000baseT_Half (1 << 4) | 673 | #define ADVERTISED_1000baseT_Half (1 << 4) |
@@ -696,12 +706,12 @@ struct ethtool_ops { | |||
696 | #define DUPLEX_FULL 0x01 | 706 | #define DUPLEX_FULL 0x01 |
697 | 707 | ||
698 | /* Which connector port. */ | 708 | /* Which connector port. */ |
699 | #define PORT_TP 0x00 | 709 | #define PORT_TP 0x00 |
700 | #define PORT_AUI 0x01 | 710 | #define PORT_AUI 0x01 |
701 | #define PORT_MII 0x02 | 711 | #define PORT_MII 0x02 |
702 | #define PORT_FIBRE 0x03 | 712 | #define PORT_FIBRE 0x03 |
703 | #define PORT_BNC 0x04 | 713 | #define PORT_BNC 0x04 |
704 | #define PORT_DA 0x05 | 714 | #define PORT_DA 0x05 |
705 | #define PORT_NONE 0xef | 715 | #define PORT_NONE 0xef |
706 | #define PORT_OTHER 0xff | 716 | #define PORT_OTHER 0xff |
707 | 717 | ||
@@ -715,7 +725,7 @@ struct ethtool_ops { | |||
715 | /* Enable or disable autonegotiation. If this is set to enable, | 725 | /* Enable or disable autonegotiation. If this is set to enable, |
716 | * the forced link modes above are completely ignored. | 726 | * the forced link modes above are completely ignored. |
717 | */ | 727 | */ |
718 | #define AUTONEG_DISABLE 0x00 | 728 | #define AUTONEG_DISABLE 0x00 |
719 | #define AUTONEG_ENABLE 0x01 | 729 | #define AUTONEG_ENABLE 0x01 |
720 | 730 | ||
721 | /* Mode MDI or MDI-X */ | 731 | /* Mode MDI or MDI-X */ |
@@ -746,8 +756,8 @@ struct ethtool_ops { | |||
746 | #define AH_V6_FLOW 0x0b | 756 | #define AH_V6_FLOW 0x0b |
747 | #define ESP_V6_FLOW 0x0c | 757 | #define ESP_V6_FLOW 0x0c |
748 | #define IP_USER_FLOW 0x0d | 758 | #define IP_USER_FLOW 0x0d |
749 | #define IPV4_FLOW 0x10 | 759 | #define IPV4_FLOW 0x10 |
750 | #define IPV6_FLOW 0x11 | 760 | #define IPV6_FLOW 0x11 |
751 | 761 | ||
752 | /* L3-L4 network traffic flow hash options */ | 762 | /* L3-L4 network traffic flow hash options */ |
753 | #define RXH_L2DA (1 << 1) | 763 | #define RXH_L2DA (1 << 1) |
diff --git a/include/linux/ext2_fs_sb.h b/include/linux/ext2_fs_sb.h index 1cdb66367c98..db4d9f586bb6 100644 --- a/include/linux/ext2_fs_sb.h +++ b/include/linux/ext2_fs_sb.h | |||
@@ -106,6 +106,15 @@ struct ext2_sb_info { | |||
106 | spinlock_t s_rsv_window_lock; | 106 | spinlock_t s_rsv_window_lock; |
107 | struct rb_root s_rsv_window_root; | 107 | struct rb_root s_rsv_window_root; |
108 | struct ext2_reserve_window_node s_rsv_window_head; | 108 | struct ext2_reserve_window_node s_rsv_window_head; |
109 | /* | ||
110 | * s_lock protects against concurrent modifications of s_mount_state, | ||
111 | * s_blocks_last, s_overhead_last and the content of superblock's | ||
112 | * buffer pointed to by sbi->s_es. | ||
113 | * | ||
114 | * Note: It is used in ext2_show_options() to provide a consistent view | ||
115 | * of the mount options. | ||
116 | */ | ||
117 | spinlock_t s_lock; | ||
109 | }; | 118 | }; |
110 | 119 | ||
111 | static inline spinlock_t * | 120 | static inline spinlock_t * |
diff --git a/include/linux/filter.h b/include/linux/filter.h index 29a0e3db9f43..151f5d703b7e 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
@@ -123,7 +123,8 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ | |||
123 | #define SKF_AD_NLATTR_NEST 16 | 123 | #define SKF_AD_NLATTR_NEST 16 |
124 | #define SKF_AD_MARK 20 | 124 | #define SKF_AD_MARK 20 |
125 | #define SKF_AD_QUEUE 24 | 125 | #define SKF_AD_QUEUE 24 |
126 | #define SKF_AD_MAX 28 | 126 | #define SKF_AD_HATYPE 28 |
127 | #define SKF_AD_MAX 32 | ||
127 | #define SKF_NET_OFF (-0x100000) | 128 | #define SKF_NET_OFF (-0x100000) |
128 | #define SKF_LL_OFF (-0x200000) | 129 | #define SKF_LL_OFF (-0x200000) |
129 | 130 | ||
diff --git a/include/linux/firmware.h b/include/linux/firmware.h index 043811f0d277..53d1e6c4f848 100644 --- a/include/linux/firmware.h +++ b/include/linux/firmware.h | |||
@@ -12,6 +12,7 @@ | |||
12 | struct firmware { | 12 | struct firmware { |
13 | size_t size; | 13 | size_t size; |
14 | const u8 *data; | 14 | const u8 *data; |
15 | struct page **pages; | ||
15 | }; | 16 | }; |
16 | 17 | ||
17 | struct device; | 18 | struct device; |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 948bd2bfb1de..4079ef99900f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1280,10 +1280,12 @@ static inline int lock_may_write(struct inode *inode, loff_t start, | |||
1280 | 1280 | ||
1281 | 1281 | ||
1282 | struct fasync_struct { | 1282 | struct fasync_struct { |
1283 | int magic; | 1283 | spinlock_t fa_lock; |
1284 | int fa_fd; | 1284 | int magic; |
1285 | struct fasync_struct *fa_next; /* singly linked list */ | 1285 | int fa_fd; |
1286 | struct file *fa_file; | 1286 | struct fasync_struct *fa_next; /* singly linked list */ |
1287 | struct file *fa_file; | ||
1288 | struct rcu_head fa_rcu; | ||
1287 | }; | 1289 | }; |
1288 | 1290 | ||
1289 | #define FASYNC_MAGIC 0x4601 | 1291 | #define FASYNC_MAGIC 0x4601 |
@@ -1292,8 +1294,6 @@ struct fasync_struct { | |||
1292 | extern int fasync_helper(int, struct file *, int, struct fasync_struct **); | 1294 | extern int fasync_helper(int, struct file *, int, struct fasync_struct **); |
1293 | /* can be called from interrupts */ | 1295 | /* can be called from interrupts */ |
1294 | extern void kill_fasync(struct fasync_struct **, int, int); | 1296 | extern void kill_fasync(struct fasync_struct **, int, int); |
1295 | /* only for net: no internal synchronization */ | ||
1296 | extern void __kill_fasync(struct fasync_struct *, int, int); | ||
1297 | 1297 | ||
1298 | extern int __f_setown(struct file *filp, struct pid *, enum pid_type, int force); | 1298 | extern int __f_setown(struct file *filp, struct pid *, enum pid_type, int force); |
1299 | extern int f_setown(struct file *filp, unsigned long arg, int force); | 1299 | extern int f_setown(struct file *filp, unsigned long arg, int force); |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 39e71b0a3bfd..c082f223e2fe 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -25,6 +25,9 @@ const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim, | |||
25 | const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, | 25 | const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, |
26 | const struct trace_print_flags *symbol_array); | 26 | const struct trace_print_flags *symbol_array); |
27 | 27 | ||
28 | const char *ftrace_print_hex_seq(struct trace_seq *p, | ||
29 | const unsigned char *buf, int len); | ||
30 | |||
28 | /* | 31 | /* |
29 | * The trace entry - the most basic unit of tracing. This is what | 32 | * The trace entry - the most basic unit of tracing. This is what |
30 | * is printed in the end as a single line in the trace output, such as: | 33 | * is printed in the end as a single line in the trace output, such as: |
diff --git a/include/linux/genetlink.h b/include/linux/genetlink.h index b834ef6d59fa..61549b26ad6f 100644 --- a/include/linux/genetlink.h +++ b/include/linux/genetlink.h | |||
@@ -80,4 +80,12 @@ enum { | |||
80 | 80 | ||
81 | #define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1) | 81 | #define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1) |
82 | 82 | ||
83 | #ifdef __KERNEL__ | ||
84 | |||
85 | /* All generic netlink requests are serialized by a global lock. */ | ||
86 | extern void genl_lock(void); | ||
87 | extern void genl_unlock(void); | ||
88 | |||
89 | #endif /* __KERNEL__ */ | ||
90 | |||
83 | #endif /* __LINUX_GENERIC_NETLINK_H */ | 91 | #endif /* __LINUX_GENERIC_NETLINK_H */ |
diff --git a/include/linux/gsmmux.h b/include/linux/gsmmux.h new file mode 100644 index 000000000000..378de4195caf --- /dev/null +++ b/include/linux/gsmmux.h | |||
@@ -0,0 +1,25 @@ | |||
1 | #ifndef _LINUX_GSMMUX_H | ||
2 | #define _LINUX_GSMMUX_H | ||
3 | |||
4 | struct gsm_config | ||
5 | { | ||
6 | unsigned int adaption; | ||
7 | unsigned int encapsulation; | ||
8 | unsigned int initiator; | ||
9 | unsigned int t1; | ||
10 | unsigned int t2; | ||
11 | unsigned int t3; | ||
12 | unsigned int n2; | ||
13 | unsigned int mru; | ||
14 | unsigned int mtu; | ||
15 | unsigned int k; | ||
16 | unsigned int i; | ||
17 | unsigned int unused[8]; /* Padding for expansion without | ||
18 | breaking stuff */ | ||
19 | }; | ||
20 | |||
21 | #define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) | ||
22 | #define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) | ||
23 | |||
24 | |||
25 | #endif | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index b1344ec4b7fc..895001f7f4b2 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -308,11 +308,13 @@ struct hid_item { | |||
308 | #define HID_QUIRK_NOTOUCH 0x00000002 | 308 | #define HID_QUIRK_NOTOUCH 0x00000002 |
309 | #define HID_QUIRK_IGNORE 0x00000004 | 309 | #define HID_QUIRK_IGNORE 0x00000004 |
310 | #define HID_QUIRK_NOGET 0x00000008 | 310 | #define HID_QUIRK_NOGET 0x00000008 |
311 | #define HID_QUIRK_HIDDEV_FORCE 0x00000010 | ||
311 | #define HID_QUIRK_BADPAD 0x00000020 | 312 | #define HID_QUIRK_BADPAD 0x00000020 |
312 | #define HID_QUIRK_MULTI_INPUT 0x00000040 | 313 | #define HID_QUIRK_MULTI_INPUT 0x00000040 |
313 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 | 314 | #define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 |
314 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 | 315 | #define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 |
315 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 | 316 | #define HID_QUIRK_NO_INIT_REPORTS 0x20000000 |
317 | #define HID_QUIRK_NO_IGNORE 0x40000000 | ||
316 | 318 | ||
317 | /* | 319 | /* |
318 | * This is the global environment of the parser. This information is | 320 | * This is the global environment of the parser. This information is |
@@ -589,6 +591,9 @@ struct hid_usage_id { | |||
589 | * @report_fixup: called before report descriptor parsing (NULL means nop) | 591 | * @report_fixup: called before report descriptor parsing (NULL means nop) |
590 | * @input_mapping: invoked on input registering before mapping an usage | 592 | * @input_mapping: invoked on input registering before mapping an usage |
591 | * @input_mapped: invoked on input registering after mapping an usage | 593 | * @input_mapped: invoked on input registering after mapping an usage |
594 | * @suspend: invoked on suspend (NULL means nop) | ||
595 | * @resume: invoked on resume if device was not reset (NULL means nop) | ||
596 | * @reset_resume: invoked on resume if device was reset (NULL means nop) | ||
592 | * | 597 | * |
593 | * raw_event and event should return 0 on no action performed, 1 when no | 598 | * raw_event and event should return 0 on no action performed, 1 when no |
594 | * further processing should be done and negative on error | 599 | * further processing should be done and negative on error |
@@ -629,6 +634,11 @@ struct hid_driver { | |||
629 | int (*input_mapped)(struct hid_device *hdev, | 634 | int (*input_mapped)(struct hid_device *hdev, |
630 | struct hid_input *hidinput, struct hid_field *field, | 635 | struct hid_input *hidinput, struct hid_field *field, |
631 | struct hid_usage *usage, unsigned long **bit, int *max); | 636 | struct hid_usage *usage, unsigned long **bit, int *max); |
637 | #ifdef CONFIG_PM | ||
638 | int (*suspend)(struct hid_device *hdev, pm_message_t message); | ||
639 | int (*resume)(struct hid_device *hdev); | ||
640 | int (*reset_resume)(struct hid_device *hdev); | ||
641 | #endif | ||
632 | /* private: */ | 642 | /* private: */ |
633 | struct device_driver driver; | 643 | struct device_driver driver; |
634 | }; | 644 | }; |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 19984958ab7b..97b2eae6a22c 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -876,6 +876,7 @@ struct ieee80211_ht_cap { | |||
876 | #define IEEE80211_HT_CAP_SGI_40 0x0040 | 876 | #define IEEE80211_HT_CAP_SGI_40 0x0040 |
877 | #define IEEE80211_HT_CAP_TX_STBC 0x0080 | 877 | #define IEEE80211_HT_CAP_TX_STBC 0x0080 |
878 | #define IEEE80211_HT_CAP_RX_STBC 0x0300 | 878 | #define IEEE80211_HT_CAP_RX_STBC 0x0300 |
879 | #define IEEE80211_HT_CAP_RX_STBC_SHIFT 8 | ||
879 | #define IEEE80211_HT_CAP_DELAY_BA 0x0400 | 880 | #define IEEE80211_HT_CAP_DELAY_BA 0x0400 |
880 | #define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 | 881 | #define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 |
881 | #define IEEE80211_HT_CAP_DSSSCCK40 0x1000 | 882 | #define IEEE80211_HT_CAP_DSSSCCK40 0x1000 |
@@ -1211,6 +1212,8 @@ enum ieee80211_category { | |||
1211 | WLAN_CATEGORY_SA_QUERY = 8, | 1212 | WLAN_CATEGORY_SA_QUERY = 8, |
1212 | WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, | 1213 | WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, |
1213 | WLAN_CATEGORY_WMM = 17, | 1214 | WLAN_CATEGORY_WMM = 17, |
1215 | WLAN_CATEGORY_MESH_PLINK = 30, /* Pending ANA approval */ | ||
1216 | WLAN_CATEGORY_MESH_PATH_SEL = 32, /* Pending ANA approval */ | ||
1214 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | 1217 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, |
1215 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | 1218 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, |
1216 | }; | 1219 | }; |
@@ -1324,7 +1327,6 @@ enum ieee80211_back_actioncode { | |||
1324 | enum ieee80211_back_parties { | 1327 | enum ieee80211_back_parties { |
1325 | WLAN_BACK_RECIPIENT = 0, | 1328 | WLAN_BACK_RECIPIENT = 0, |
1326 | WLAN_BACK_INITIATOR = 1, | 1329 | WLAN_BACK_INITIATOR = 1, |
1327 | WLAN_BACK_TIMER = 2, | ||
1328 | }; | 1330 | }; |
1329 | 1331 | ||
1330 | /* SA Query action */ | 1332 | /* SA Query action */ |
diff --git a/include/linux/if.h b/include/linux/if.h index 3a9f410a296b..be350e62a905 100644 --- a/include/linux/if.h +++ b/include/linux/if.h | |||
@@ -71,6 +71,8 @@ | |||
71 | * release skb->dst | 71 | * release skb->dst |
72 | */ | 72 | */ |
73 | #define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */ | 73 | #define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */ |
74 | #define IFF_IN_NETPOLL 0x1000 /* whether we are processing netpoll */ | ||
75 | #define IFF_DISABLE_NETPOLL 0x2000 /* disable netpoll at run-time */ | ||
74 | 76 | ||
75 | #define IF_GET_IFACE 0x0001 /* for querying only */ | 77 | #define IF_GET_IFACE 0x0001 /* for querying only */ |
76 | #define IF_GET_PROTO 0x0002 | 78 | #define IF_GET_PROTO 0x0002 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index e80b7f88f7c6..6d722f41ee7c 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -90,6 +90,7 @@ | |||
90 | 90 | ||
91 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 91 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
92 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 92 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
93 | #define ARPHRD_CAIF 822 /* CAIF media type */ | ||
93 | 94 | ||
94 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ | 95 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ |
95 | #define ARPHRD_NONE 0xFFFE /* zero header length */ | 96 | #define ARPHRD_NONE 0xFFFE /* zero header length */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 299b4121f914..bed7a4682b90 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
@@ -109,6 +109,7 @@ | |||
109 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ | 109 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ |
110 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ | 110 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ |
111 | #define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */ | 111 | #define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */ |
112 | #define ETH_P_CAIF 0x00F7 /* ST-Ericsson CAIF protocol */ | ||
112 | 113 | ||
113 | /* | 114 | /* |
114 | * This is an Ethernet frame header. | 115 | * This is an Ethernet frame header. |
diff --git a/include/linux/if_link.h b/include/linux/if_link.h index d94963b379d9..85c812db5a3f 100644 --- a/include/linux/if_link.h +++ b/include/linux/if_link.h | |||
@@ -37,6 +37,38 @@ struct rtnl_link_stats { | |||
37 | __u32 tx_compressed; | 37 | __u32 tx_compressed; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | struct rtnl_link_stats64 { | ||
41 | __u64 rx_packets; /* total packets received */ | ||
42 | __u64 tx_packets; /* total packets transmitted */ | ||
43 | __u64 rx_bytes; /* total bytes received */ | ||
44 | __u64 tx_bytes; /* total bytes transmitted */ | ||
45 | __u64 rx_errors; /* bad packets received */ | ||
46 | __u64 tx_errors; /* packet transmit problems */ | ||
47 | __u64 rx_dropped; /* no space in linux buffers */ | ||
48 | __u64 tx_dropped; /* no space available in linux */ | ||
49 | __u64 multicast; /* multicast packets received */ | ||
50 | __u64 collisions; | ||
51 | |||
52 | /* detailed rx_errors: */ | ||
53 | __u64 rx_length_errors; | ||
54 | __u64 rx_over_errors; /* receiver ring buff overflow */ | ||
55 | __u64 rx_crc_errors; /* recved pkt with crc error */ | ||
56 | __u64 rx_frame_errors; /* recv'd frame alignment error */ | ||
57 | __u64 rx_fifo_errors; /* recv'r fifo overrun */ | ||
58 | __u64 rx_missed_errors; /* receiver missed packet */ | ||
59 | |||
60 | /* detailed tx_errors */ | ||
61 | __u64 tx_aborted_errors; | ||
62 | __u64 tx_carrier_errors; | ||
63 | __u64 tx_fifo_errors; | ||
64 | __u64 tx_heartbeat_errors; | ||
65 | __u64 tx_window_errors; | ||
66 | |||
67 | /* for cslip etc */ | ||
68 | __u64 rx_compressed; | ||
69 | __u64 tx_compressed; | ||
70 | }; | ||
71 | |||
40 | /* The struct should be in sync with struct ifmap */ | 72 | /* The struct should be in sync with struct ifmap */ |
41 | struct rtnl_link_ifmap { | 73 | struct rtnl_link_ifmap { |
42 | __u64 mem_start; | 74 | __u64 mem_start; |
@@ -80,6 +112,9 @@ enum { | |||
80 | IFLA_IFALIAS, | 112 | IFLA_IFALIAS, |
81 | IFLA_NUM_VF, /* Number of VFs if device is SR-IOV PF */ | 113 | IFLA_NUM_VF, /* Number of VFs if device is SR-IOV PF */ |
82 | IFLA_VFINFO_LIST, | 114 | IFLA_VFINFO_LIST, |
115 | IFLA_STATS64, | ||
116 | IFLA_VF_PORTS, | ||
117 | IFLA_PORT_SELF, | ||
83 | __IFLA_MAX | 118 | __IFLA_MAX |
84 | }; | 119 | }; |
85 | 120 | ||
@@ -241,4 +276,77 @@ struct ifla_vf_info { | |||
241 | __u32 qos; | 276 | __u32 qos; |
242 | __u32 tx_rate; | 277 | __u32 tx_rate; |
243 | }; | 278 | }; |
279 | |||
280 | /* VF ports management section | ||
281 | * | ||
282 | * Nested layout of set/get msg is: | ||
283 | * | ||
284 | * [IFLA_NUM_VF] | ||
285 | * [IFLA_VF_PORTS] | ||
286 | * [IFLA_VF_PORT] | ||
287 | * [IFLA_PORT_*], ... | ||
288 | * [IFLA_VF_PORT] | ||
289 | * [IFLA_PORT_*], ... | ||
290 | * ... | ||
291 | * [IFLA_PORT_SELF] | ||
292 | * [IFLA_PORT_*], ... | ||
293 | */ | ||
294 | |||
295 | enum { | ||
296 | IFLA_VF_PORT_UNSPEC, | ||
297 | IFLA_VF_PORT, /* nest */ | ||
298 | __IFLA_VF_PORT_MAX, | ||
299 | }; | ||
300 | |||
301 | #define IFLA_VF_PORT_MAX (__IFLA_VF_PORT_MAX - 1) | ||
302 | |||
303 | enum { | ||
304 | IFLA_PORT_UNSPEC, | ||
305 | IFLA_PORT_VF, /* __u32 */ | ||
306 | IFLA_PORT_PROFILE, /* string */ | ||
307 | IFLA_PORT_VSI_TYPE, /* 802.1Qbg (pre-)standard VDP */ | ||
308 | IFLA_PORT_INSTANCE_UUID, /* binary UUID */ | ||
309 | IFLA_PORT_HOST_UUID, /* binary UUID */ | ||
310 | IFLA_PORT_REQUEST, /* __u8 */ | ||
311 | IFLA_PORT_RESPONSE, /* __u16, output only */ | ||
312 | __IFLA_PORT_MAX, | ||
313 | }; | ||
314 | |||
315 | #define IFLA_PORT_MAX (__IFLA_PORT_MAX - 1) | ||
316 | |||
317 | #define PORT_PROFILE_MAX 40 | ||
318 | #define PORT_UUID_MAX 16 | ||
319 | #define PORT_SELF_VF -1 | ||
320 | |||
321 | enum { | ||
322 | PORT_REQUEST_PREASSOCIATE = 0, | ||
323 | PORT_REQUEST_PREASSOCIATE_RR, | ||
324 | PORT_REQUEST_ASSOCIATE, | ||
325 | PORT_REQUEST_DISASSOCIATE, | ||
326 | }; | ||
327 | |||
328 | enum { | ||
329 | PORT_VDP_RESPONSE_SUCCESS = 0, | ||
330 | PORT_VDP_RESPONSE_INVALID_FORMAT, | ||
331 | PORT_VDP_RESPONSE_INSUFFICIENT_RESOURCES, | ||
332 | PORT_VDP_RESPONSE_UNUSED_VTID, | ||
333 | PORT_VDP_RESPONSE_VTID_VIOLATION, | ||
334 | PORT_VDP_RESPONSE_VTID_VERSION_VIOALTION, | ||
335 | PORT_VDP_RESPONSE_OUT_OF_SYNC, | ||
336 | /* 0x08-0xFF reserved for future VDP use */ | ||
337 | PORT_PROFILE_RESPONSE_SUCCESS = 0x100, | ||
338 | PORT_PROFILE_RESPONSE_INPROGRESS, | ||
339 | PORT_PROFILE_RESPONSE_INVALID, | ||
340 | PORT_PROFILE_RESPONSE_BADSTATE, | ||
341 | PORT_PROFILE_RESPONSE_INSUFFICIENT_RESOURCES, | ||
342 | PORT_PROFILE_RESPONSE_ERROR, | ||
343 | }; | ||
344 | |||
345 | struct ifla_port_vsi { | ||
346 | __u8 vsi_mgr_id; | ||
347 | __u8 vsi_type_id[3]; | ||
348 | __u8 vsi_type_version; | ||
349 | __u8 pad[3]; | ||
350 | }; | ||
351 | |||
244 | #endif /* _LINUX_IF_LINK_H */ | 352 | #endif /* _LINUX_IF_LINK_H */ |
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index b78a712247da..9ea047aca795 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h | |||
@@ -85,6 +85,7 @@ extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb, | |||
85 | struct net_device *dev); | 85 | struct net_device *dev); |
86 | 86 | ||
87 | 87 | ||
88 | extern struct sk_buff *(*macvlan_handle_frame_hook)(struct sk_buff *); | 88 | extern struct sk_buff *(*macvlan_handle_frame_hook)(struct macvlan_port *, |
89 | struct sk_buff *); | ||
89 | 90 | ||
90 | #endif /* _LINUX_IF_MACVLAN_H */ | 91 | #endif /* _LINUX_IF_MACVLAN_H */ |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index aa57a5f993fc..6ac23ef1801a 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
@@ -47,6 +47,7 @@ struct sockaddr_ll { | |||
47 | #define PACKET_TX_RING 13 | 47 | #define PACKET_TX_RING 13 |
48 | #define PACKET_LOSS 14 | 48 | #define PACKET_LOSS 14 |
49 | #define PACKET_VNET_HDR 15 | 49 | #define PACKET_VNET_HDR 15 |
50 | #define PACKET_TX_TIMESTAMP 16 | ||
50 | 51 | ||
51 | struct tpacket_stats { | 52 | struct tpacket_stats { |
52 | unsigned int tp_packets; | 53 | unsigned int tp_packets; |
diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h index c58baea4a25b..184bc5566207 100644 --- a/include/linux/if_pppol2tp.h +++ b/include/linux/if_pppol2tp.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * Linux PPP over L2TP (PPPoL2TP) Socket Implementation (RFC 2661) | 2 | * Linux PPP over L2TP (PPPoL2TP) Socket Implementation (RFC 2661) |
3 | * | 3 | * |
4 | * This file supplies definitions required by the PPP over L2TP driver | 4 | * This file supplies definitions required by the PPP over L2TP driver |
5 | * (pppol2tp.c). All version information wrt this file is located in pppol2tp.c | 5 | * (l2tp_ppp.c). All version information wrt this file is located in l2tp_ppp.c |
6 | * | 6 | * |
7 | * License: | 7 | * License: |
8 | * This program is free software; you can redistribute it and/or | 8 | * This program is free software; you can redistribute it and/or |
@@ -35,6 +35,20 @@ struct pppol2tp_addr { | |||
35 | __u16 d_tunnel, d_session; /* For sending outgoing packets */ | 35 | __u16 d_tunnel, d_session; /* For sending outgoing packets */ |
36 | }; | 36 | }; |
37 | 37 | ||
38 | /* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 | ||
39 | * bits. So we need a different sockaddr structure. | ||
40 | */ | ||
41 | struct pppol2tpv3_addr { | ||
42 | pid_t pid; /* pid that owns the fd. | ||
43 | * 0 => current */ | ||
44 | int fd; /* FD of UDP or IP socket to use */ | ||
45 | |||
46 | struct sockaddr_in addr; /* IP address and port to send to */ | ||
47 | |||
48 | __u32 s_tunnel, s_session; /* For matching incoming packets */ | ||
49 | __u32 d_tunnel, d_session; /* For sending outgoing packets */ | ||
50 | }; | ||
51 | |||
38 | /* Socket options: | 52 | /* Socket options: |
39 | * DEBUG - bitmask of debug message categories | 53 | * DEBUG - bitmask of debug message categories |
40 | * SENDSEQ - 0 => don't send packets with sequence numbers | 54 | * SENDSEQ - 0 => don't send packets with sequence numbers |
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h index 90b5fae5d714..a6577af0c4e6 100644 --- a/include/linux/if_pppox.h +++ b/include/linux/if_pppox.h | |||
@@ -72,6 +72,15 @@ struct sockaddr_pppol2tp { | |||
72 | struct pppol2tp_addr pppol2tp; | 72 | struct pppol2tp_addr pppol2tp; |
73 | }__attribute__ ((packed)); | 73 | }__attribute__ ((packed)); |
74 | 74 | ||
75 | /* The L2TPv3 protocol changes tunnel and session ids from 16 to 32 | ||
76 | * bits. So we need a different sockaddr structure. | ||
77 | */ | ||
78 | struct sockaddr_pppol2tpv3 { | ||
79 | sa_family_t sa_family; /* address family, AF_PPPOX */ | ||
80 | unsigned int sa_protocol; /* protocol identifier */ | ||
81 | struct pppol2tpv3_addr pppol2tp; | ||
82 | } __attribute__ ((packed)); | ||
83 | |||
75 | /********************************************************************* | 84 | /********************************************************************* |
76 | * | 85 | * |
77 | * ioctl interface for defining forwarding of connections | 86 | * ioctl interface for defining forwarding of connections |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 1350a246893a..06b1829731fd 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
@@ -51,6 +51,8 @@ | |||
51 | #define TUNSETSNDBUF _IOW('T', 212, int) | 51 | #define TUNSETSNDBUF _IOW('T', 212, int) |
52 | #define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog) | 52 | #define TUNATTACHFILTER _IOW('T', 213, struct sock_fprog) |
53 | #define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog) | 53 | #define TUNDETACHFILTER _IOW('T', 214, struct sock_fprog) |
54 | #define TUNGETVNETHDRSZ _IOR('T', 215, int) | ||
55 | #define TUNSETVNETHDRSZ _IOW('T', 216, int) | ||
54 | 56 | ||
55 | /* TUNSETIFF ifr flags */ | 57 | /* TUNSETIFF ifr flags */ |
56 | #define IFF_TUN 0x0001 | 58 | #define IFF_TUN 0x0001 |
diff --git a/include/linux/if_x25.h b/include/linux/if_x25.h new file mode 100644 index 000000000000..897765f5feb8 --- /dev/null +++ b/include/linux/if_x25.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * Linux X.25 packet to device interface | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | */ | ||
14 | |||
15 | #ifndef _IF_X25_H | ||
16 | #define _IF_X25_H | ||
17 | |||
18 | #include <linux/types.h> | ||
19 | |||
20 | /* Documentation/networking/x25-iface.txt */ | ||
21 | #define X25_IFACE_DATA 0x00 | ||
22 | #define X25_IFACE_CONNECT 0x01 | ||
23 | #define X25_IFACE_DISCONNECT 0x02 | ||
24 | #define X25_IFACE_PARAMS 0x03 | ||
25 | |||
26 | #endif /* _IF_X25_H */ | ||
diff --git a/include/linux/in6.h b/include/linux/in6.h index bd55c6e46b2e..c4bf46f764bf 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h | |||
@@ -221,10 +221,10 @@ struct in6_flowlabel_req { | |||
221 | #define IPV6_RTHDR 57 | 221 | #define IPV6_RTHDR 57 |
222 | #define IPV6_RECVDSTOPTS 58 | 222 | #define IPV6_RECVDSTOPTS 58 |
223 | #define IPV6_DSTOPTS 59 | 223 | #define IPV6_DSTOPTS 59 |
224 | #if 0 /* not yet */ | ||
225 | #define IPV6_RECVPATHMTU 60 | 224 | #define IPV6_RECVPATHMTU 60 |
226 | #define IPV6_PATHMTU 61 | 225 | #define IPV6_PATHMTU 61 |
227 | #define IPV6_DONTFRAG 62 | 226 | #define IPV6_DONTFRAG 62 |
227 | #if 0 /* not yet */ | ||
228 | #define IPV6_USE_MIN_MTU 63 | 228 | #define IPV6_USE_MIN_MTU 63 |
229 | #endif | 229 | #endif |
230 | 230 | ||
@@ -265,6 +265,9 @@ struct in6_flowlabel_req { | |||
265 | #define IPV6_PREFER_SRC_CGA 0x0008 | 265 | #define IPV6_PREFER_SRC_CGA 0x0008 |
266 | #define IPV6_PREFER_SRC_NONCGA 0x0800 | 266 | #define IPV6_PREFER_SRC_NONCGA 0x0800 |
267 | 267 | ||
268 | /* RFC5082: Generalized Ttl Security Mechanism */ | ||
269 | #define IPV6_MINHOPCOUNT 73 | ||
270 | |||
268 | /* | 271 | /* |
269 | * Multicast Routing: | 272 | * Multicast Routing: |
270 | * see include/linux/mroute6.h. | 273 | * see include/linux/mroute6.h. |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5137db3317f9..c2331138ca1b 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -78,7 +78,7 @@ enum { | |||
78 | IRQTF_AFFINITY, | 78 | IRQTF_AFFINITY, |
79 | }; | 79 | }; |
80 | 80 | ||
81 | /** | 81 | /* |
82 | * These values can be returned by request_any_context_irq() and | 82 | * These values can be returned by request_any_context_irq() and |
83 | * describe the context the interrupt will be run in. | 83 | * describe the context the interrupt will be run in. |
84 | * | 84 | * |
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index e0cc9a7db2b5..99e1ab7e3eec 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
@@ -21,6 +21,10 @@ struct in6_pktinfo { | |||
21 | int ipi6_ifindex; | 21 | int ipi6_ifindex; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | struct ip6_mtuinfo { | ||
25 | struct sockaddr_in6 ip6m_addr; | ||
26 | __u32 ip6m_mtu; | ||
27 | }; | ||
24 | 28 | ||
25 | struct in6_ifreq { | 29 | struct in6_ifreq { |
26 | struct in6_addr ifr6_addr; | 30 | struct in6_addr ifr6_addr; |
@@ -250,9 +254,11 @@ struct inet6_skb_parm { | |||
250 | 254 | ||
251 | #define IP6SKB_XFRM_TRANSFORMED 1 | 255 | #define IP6SKB_XFRM_TRANSFORMED 1 |
252 | #define IP6SKB_FORWARDED 2 | 256 | #define IP6SKB_FORWARDED 2 |
257 | #define IP6SKB_REROUTED 4 | ||
253 | }; | 258 | }; |
254 | 259 | ||
255 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) | 260 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) |
261 | #define IP6CBMTU(skb) ((struct ip6_mtuinfo *)((skb)->cb)) | ||
256 | 262 | ||
257 | static inline int inet6_iif(const struct sk_buff *skb) | 263 | static inline int inet6_iif(const struct sk_buff *skb) |
258 | { | 264 | { |
@@ -334,21 +340,25 @@ struct ipv6_pinfo { | |||
334 | dstopts:1, | 340 | dstopts:1, |
335 | odstopts:1, | 341 | odstopts:1, |
336 | rxflow:1, | 342 | rxflow:1, |
337 | rxtclass:1; | 343 | rxtclass:1, |
344 | rxpmtu:1; | ||
338 | } bits; | 345 | } bits; |
339 | __u16 all; | 346 | __u16 all; |
340 | } rxopt; | 347 | } rxopt; |
341 | 348 | ||
342 | /* sockopt flags */ | 349 | /* sockopt flags */ |
343 | __u8 recverr:1, | 350 | __u16 recverr:1, |
344 | sndflow:1, | 351 | sndflow:1, |
345 | pmtudisc:2, | 352 | pmtudisc:2, |
346 | ipv6only:1, | 353 | ipv6only:1, |
347 | srcprefs:3; /* 001: prefer temporary address | 354 | srcprefs:3, /* 001: prefer temporary address |
348 | * 010: prefer public address | 355 | * 010: prefer public address |
349 | * 100: prefer care-of address | 356 | * 100: prefer care-of address |
350 | */ | 357 | */ |
358 | dontfrag:1; | ||
359 | __u8 min_hopcount; | ||
351 | __u8 tclass; | 360 | __u8 tclass; |
361 | __u8 padding; | ||
352 | 362 | ||
353 | __u32 dst_cookie; | 363 | __u32 dst_cookie; |
354 | 364 | ||
@@ -358,6 +368,7 @@ struct ipv6_pinfo { | |||
358 | 368 | ||
359 | struct ipv6_txoptions *opt; | 369 | struct ipv6_txoptions *opt; |
360 | struct sk_buff *pktoptions; | 370 | struct sk_buff *pktoptions; |
371 | struct sk_buff *rxpmtu; | ||
361 | struct { | 372 | struct { |
362 | struct ipv6_txoptions *opt; | 373 | struct ipv6_txoptions *opt; |
363 | u8 hop_limit; | 374 | u8 hop_limit; |
@@ -372,6 +383,7 @@ struct raw6_sock { | |||
372 | __u32 checksum; /* perform checksum */ | 383 | __u32 checksum; /* perform checksum */ |
373 | __u32 offset; /* checksum offset */ | 384 | __u32 offset; /* checksum offset */ |
374 | struct icmp6_filter filter; | 385 | struct icmp6_filter filter; |
386 | __u32 ip6mr_table; | ||
375 | /* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */ | 387 | /* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */ |
376 | struct ipv6_pinfo inet6; | 388 | struct ipv6_pinfo inet6; |
377 | }; | 389 | }; |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index 516a2a27e87a..e06965081ba5 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -427,9 +427,9 @@ struct transaction_s | |||
427 | enum { | 427 | enum { |
428 | T_RUNNING, | 428 | T_RUNNING, |
429 | T_LOCKED, | 429 | T_LOCKED, |
430 | T_RUNDOWN, | ||
431 | T_FLUSH, | 430 | T_FLUSH, |
432 | T_COMMIT, | 431 | T_COMMIT, |
432 | T_COMMIT_RECORD, | ||
433 | T_FINISHED | 433 | T_FINISHED |
434 | } t_state; | 434 | } t_state; |
435 | 435 | ||
@@ -991,6 +991,7 @@ int journal_start_commit(journal_t *journal, tid_t *tid); | |||
991 | int journal_force_commit_nested(journal_t *journal); | 991 | int journal_force_commit_nested(journal_t *journal); |
992 | int log_wait_commit(journal_t *journal, tid_t tid); | 992 | int log_wait_commit(journal_t *journal, tid_t tid); |
993 | int log_do_checkpoint(journal_t *journal); | 993 | int log_do_checkpoint(journal_t *journal); |
994 | int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid); | ||
994 | 995 | ||
995 | void __log_wait_for_space(journal_t *journal); | 996 | void __log_wait_for_space(journal_t *journal); |
996 | extern void __journal_drop_transaction(journal_t *, transaction_t *); | 997 | extern void __journal_drop_transaction(journal_t *, transaction_t *); |
diff --git a/include/linux/jffs2.h b/include/linux/jffs2.h index 2b32d638147d..0874ab59ffef 100644 --- a/include/linux/jffs2.h +++ b/include/linux/jffs2.h | |||
@@ -215,8 +215,8 @@ union jffs2_node_union | |||
215 | 215 | ||
216 | /* Data payload for device nodes. */ | 216 | /* Data payload for device nodes. */ |
217 | union jffs2_device_node { | 217 | union jffs2_device_node { |
218 | jint16_t old; | 218 | jint16_t old_id; |
219 | jint32_t new; | 219 | jint32_t new_id; |
220 | }; | 220 | }; |
221 | 221 | ||
222 | #endif /* __LINUX_JFFS2_H__ */ | 222 | #endif /* __LINUX_JFFS2_H__ */ |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 9fb1c1299032..fc33af911852 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -4,6 +4,8 @@ | |||
4 | /* | 4 | /* |
5 | * 'kernel.h' contains some often-used function prototypes etc | 5 | * 'kernel.h' contains some often-used function prototypes etc |
6 | */ | 6 | */ |
7 | #define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) | ||
8 | #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) | ||
7 | 9 | ||
8 | #ifdef __KERNEL__ | 10 | #ifdef __KERNEL__ |
9 | 11 | ||
@@ -37,8 +39,8 @@ extern const char linux_proc_banner[]; | |||
37 | 39 | ||
38 | #define STACK_MAGIC 0xdeadbeef | 40 | #define STACK_MAGIC 0xdeadbeef |
39 | 41 | ||
40 | #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) | 42 | #define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) |
41 | #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) | 43 | #define __ALIGN_MASK(x, mask) __ALIGN_KERNEL_MASK((x), (mask)) |
42 | #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) | 44 | #define PTR_ALIGN(p, a) ((typeof(p))ALIGN((unsigned long)(p), (a))) |
43 | #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) | 45 | #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) |
44 | 46 | ||
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 3950d3c2850d..cf343a852534 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -108,6 +108,8 @@ struct kobj_type { | |||
108 | void (*release)(struct kobject *kobj); | 108 | void (*release)(struct kobject *kobj); |
109 | const struct sysfs_ops *sysfs_ops; | 109 | const struct sysfs_ops *sysfs_ops; |
110 | struct attribute **default_attrs; | 110 | struct attribute **default_attrs; |
111 | const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj); | ||
112 | const void *(*namespace)(struct kobject *kobj); | ||
111 | }; | 113 | }; |
112 | 114 | ||
113 | struct kobj_uevent_env { | 115 | struct kobj_uevent_env { |
@@ -134,6 +136,42 @@ struct kobj_attribute { | |||
134 | 136 | ||
135 | extern const struct sysfs_ops kobj_sysfs_ops; | 137 | extern const struct sysfs_ops kobj_sysfs_ops; |
136 | 138 | ||
139 | /* | ||
140 | * Namespace types which are used to tag kobjects and sysfs entries. | ||
141 | * Network namespace will likely be the first. | ||
142 | */ | ||
143 | enum kobj_ns_type { | ||
144 | KOBJ_NS_TYPE_NONE = 0, | ||
145 | KOBJ_NS_TYPE_NET, | ||
146 | KOBJ_NS_TYPES | ||
147 | }; | ||
148 | |||
149 | struct sock; | ||
150 | |||
151 | /* | ||
152 | * Callbacks so sysfs can determine namespaces | ||
153 | * @current_ns: return calling task's namespace | ||
154 | * @netlink_ns: return namespace to which a sock belongs (right?) | ||
155 | * @initial_ns: return the initial namespace (i.e. init_net_ns) | ||
156 | */ | ||
157 | struct kobj_ns_type_operations { | ||
158 | enum kobj_ns_type type; | ||
159 | const void *(*current_ns)(void); | ||
160 | const void *(*netlink_ns)(struct sock *sk); | ||
161 | const void *(*initial_ns)(void); | ||
162 | }; | ||
163 | |||
164 | int kobj_ns_type_register(const struct kobj_ns_type_operations *ops); | ||
165 | int kobj_ns_type_registered(enum kobj_ns_type type); | ||
166 | const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent); | ||
167 | const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj); | ||
168 | |||
169 | const void *kobj_ns_current(enum kobj_ns_type type); | ||
170 | const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk); | ||
171 | const void *kobj_ns_initial(enum kobj_ns_type type); | ||
172 | void kobj_ns_exit(enum kobj_ns_type type, const void *ns); | ||
173 | |||
174 | |||
137 | /** | 175 | /** |
138 | * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. | 176 | * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. |
139 | * | 177 | * |
diff --git a/include/linux/kref.h b/include/linux/kref.h index baf4b9e4b194..6cc38fc07ab7 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h | |||
@@ -21,7 +21,6 @@ struct kref { | |||
21 | atomic_t refcount; | 21 | atomic_t refcount; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | void kref_set(struct kref *kref, int num); | ||
25 | void kref_init(struct kref *kref); | 24 | void kref_init(struct kref *kref); |
26 | void kref_get(struct kref *kref); | 25 | void kref_get(struct kref *kref); |
27 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); | 26 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); |
diff --git a/include/linux/ks8842.h b/include/linux/ks8842.h new file mode 100644 index 000000000000..da0341b8ca0a --- /dev/null +++ b/include/linux/ks8842.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * ks8842.h KS8842 platform data struct definition | ||
3 | * Copyright (c) 2010 Intel Corporation | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef _LINUX_KS8842_H | ||
20 | #define _LINUX_KS8842_H | ||
21 | |||
22 | #include <linux/if_ether.h> | ||
23 | |||
24 | /** | ||
25 | * struct ks8842_platform_data - Platform data of the KS8842 network driver | ||
26 | * @macaddr: The MAC address of the device, set to all 0:s to use the on in | ||
27 | * the chip. | ||
28 | * | ||
29 | */ | ||
30 | struct ks8842_platform_data { | ||
31 | u8 macaddr[ETH_ALEN]; | ||
32 | }; | ||
33 | |||
34 | #endif | ||
diff --git a/include/linux/l2tp.h b/include/linux/l2tp.h new file mode 100644 index 000000000000..4bdb31df8e72 --- /dev/null +++ b/include/linux/l2tp.h | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | * L2TP-over-IP socket for L2TPv3. | ||
3 | * | ||
4 | * Author: James Chapman <jchapman@katalix.com> | ||
5 | */ | ||
6 | |||
7 | #ifndef _LINUX_L2TP_H_ | ||
8 | #define _LINUX_L2TP_H_ | ||
9 | |||
10 | #include <linux/types.h> | ||
11 | #ifdef __KERNEL__ | ||
12 | #include <linux/socket.h> | ||
13 | #include <linux/in.h> | ||
14 | #else | ||
15 | #include <netinet/in.h> | ||
16 | #endif | ||
17 | |||
18 | #define IPPROTO_L2TP 115 | ||
19 | |||
20 | /** | ||
21 | * struct sockaddr_l2tpip - the sockaddr structure for L2TP-over-IP sockets | ||
22 | * @l2tp_family: address family number AF_L2TPIP. | ||
23 | * @l2tp_addr: protocol specific address information | ||
24 | * @l2tp_conn_id: connection id of tunnel | ||
25 | */ | ||
26 | #define __SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */ | ||
27 | struct sockaddr_l2tpip { | ||
28 | /* The first fields must match struct sockaddr_in */ | ||
29 | sa_family_t l2tp_family; /* AF_INET */ | ||
30 | __be16 l2tp_unused; /* INET port number (unused) */ | ||
31 | struct in_addr l2tp_addr; /* Internet address */ | ||
32 | |||
33 | __u32 l2tp_conn_id; /* Connection ID of tunnel */ | ||
34 | |||
35 | /* Pad to size of `struct sockaddr'. */ | ||
36 | unsigned char __pad[sizeof(struct sockaddr) - sizeof(sa_family_t) - | ||
37 | sizeof(__be16) - sizeof(struct in_addr) - | ||
38 | sizeof(__u32)]; | ||
39 | }; | ||
40 | |||
41 | /***************************************************************************** | ||
42 | * NETLINK_GENERIC netlink family. | ||
43 | *****************************************************************************/ | ||
44 | |||
45 | /* | ||
46 | * Commands. | ||
47 | * Valid TLVs of each command are:- | ||
48 | * TUNNEL_CREATE - CONN_ID, pw_type, netns, ifname, ipinfo, udpinfo, udpcsum, vlanid | ||
49 | * TUNNEL_DELETE - CONN_ID | ||
50 | * TUNNEL_MODIFY - CONN_ID, udpcsum | ||
51 | * TUNNEL_GETSTATS - CONN_ID, (stats) | ||
52 | * TUNNEL_GET - CONN_ID, (...) | ||
53 | * SESSION_CREATE - SESSION_ID, PW_TYPE, offset, data_seq, cookie, peer_cookie, offset, l2spec | ||
54 | * SESSION_DELETE - SESSION_ID | ||
55 | * SESSION_MODIFY - SESSION_ID, data_seq | ||
56 | * SESSION_GET - SESSION_ID, (...) | ||
57 | * SESSION_GETSTATS - SESSION_ID, (stats) | ||
58 | * | ||
59 | */ | ||
60 | enum { | ||
61 | L2TP_CMD_NOOP, | ||
62 | L2TP_CMD_TUNNEL_CREATE, | ||
63 | L2TP_CMD_TUNNEL_DELETE, | ||
64 | L2TP_CMD_TUNNEL_MODIFY, | ||
65 | L2TP_CMD_TUNNEL_GET, | ||
66 | L2TP_CMD_SESSION_CREATE, | ||
67 | L2TP_CMD_SESSION_DELETE, | ||
68 | L2TP_CMD_SESSION_MODIFY, | ||
69 | L2TP_CMD_SESSION_GET, | ||
70 | __L2TP_CMD_MAX, | ||
71 | }; | ||
72 | |||
73 | #define L2TP_CMD_MAX (__L2TP_CMD_MAX - 1) | ||
74 | |||
75 | /* | ||
76 | * ATTR types defined for L2TP | ||
77 | */ | ||
78 | enum { | ||
79 | L2TP_ATTR_NONE, /* no data */ | ||
80 | L2TP_ATTR_PW_TYPE, /* u16, enum l2tp_pwtype */ | ||
81 | L2TP_ATTR_ENCAP_TYPE, /* u16, enum l2tp_encap_type */ | ||
82 | L2TP_ATTR_OFFSET, /* u16 */ | ||
83 | L2TP_ATTR_DATA_SEQ, /* u16 */ | ||
84 | L2TP_ATTR_L2SPEC_TYPE, /* u8, enum l2tp_l2spec_type */ | ||
85 | L2TP_ATTR_L2SPEC_LEN, /* u8, enum l2tp_l2spec_type */ | ||
86 | L2TP_ATTR_PROTO_VERSION, /* u8 */ | ||
87 | L2TP_ATTR_IFNAME, /* string */ | ||
88 | L2TP_ATTR_CONN_ID, /* u32 */ | ||
89 | L2TP_ATTR_PEER_CONN_ID, /* u32 */ | ||
90 | L2TP_ATTR_SESSION_ID, /* u32 */ | ||
91 | L2TP_ATTR_PEER_SESSION_ID, /* u32 */ | ||
92 | L2TP_ATTR_UDP_CSUM, /* u8 */ | ||
93 | L2TP_ATTR_VLAN_ID, /* u16 */ | ||
94 | L2TP_ATTR_COOKIE, /* 0, 4 or 8 bytes */ | ||
95 | L2TP_ATTR_PEER_COOKIE, /* 0, 4 or 8 bytes */ | ||
96 | L2TP_ATTR_DEBUG, /* u32 */ | ||
97 | L2TP_ATTR_RECV_SEQ, /* u8 */ | ||
98 | L2TP_ATTR_SEND_SEQ, /* u8 */ | ||
99 | L2TP_ATTR_LNS_MODE, /* u8 */ | ||
100 | L2TP_ATTR_USING_IPSEC, /* u8 */ | ||
101 | L2TP_ATTR_RECV_TIMEOUT, /* msec */ | ||
102 | L2TP_ATTR_FD, /* int */ | ||
103 | L2TP_ATTR_IP_SADDR, /* u32 */ | ||
104 | L2TP_ATTR_IP_DADDR, /* u32 */ | ||
105 | L2TP_ATTR_UDP_SPORT, /* u16 */ | ||
106 | L2TP_ATTR_UDP_DPORT, /* u16 */ | ||
107 | L2TP_ATTR_MTU, /* u16 */ | ||
108 | L2TP_ATTR_MRU, /* u16 */ | ||
109 | L2TP_ATTR_STATS, /* nested */ | ||
110 | __L2TP_ATTR_MAX, | ||
111 | }; | ||
112 | |||
113 | #define L2TP_ATTR_MAX (__L2TP_ATTR_MAX - 1) | ||
114 | |||
115 | /* Nested in L2TP_ATTR_STATS */ | ||
116 | enum { | ||
117 | L2TP_ATTR_STATS_NONE, /* no data */ | ||
118 | L2TP_ATTR_TX_PACKETS, /* u64 */ | ||
119 | L2TP_ATTR_TX_BYTES, /* u64 */ | ||
120 | L2TP_ATTR_TX_ERRORS, /* u64 */ | ||
121 | L2TP_ATTR_RX_PACKETS, /* u64 */ | ||
122 | L2TP_ATTR_RX_BYTES, /* u64 */ | ||
123 | L2TP_ATTR_RX_SEQ_DISCARDS, /* u64 */ | ||
124 | L2TP_ATTR_RX_OOS_PACKETS, /* u64 */ | ||
125 | L2TP_ATTR_RX_ERRORS, /* u64 */ | ||
126 | __L2TP_ATTR_STATS_MAX, | ||
127 | }; | ||
128 | |||
129 | #define L2TP_ATTR_STATS_MAX (__L2TP_ATTR_STATS_MAX - 1) | ||
130 | |||
131 | enum l2tp_pwtype { | ||
132 | L2TP_PWTYPE_NONE = 0x0000, | ||
133 | L2TP_PWTYPE_ETH_VLAN = 0x0004, | ||
134 | L2TP_PWTYPE_ETH = 0x0005, | ||
135 | L2TP_PWTYPE_PPP = 0x0007, | ||
136 | L2TP_PWTYPE_PPP_AC = 0x0008, | ||
137 | L2TP_PWTYPE_IP = 0x000b, | ||
138 | __L2TP_PWTYPE_MAX | ||
139 | }; | ||
140 | |||
141 | enum l2tp_l2spec_type { | ||
142 | L2TP_L2SPECTYPE_NONE, | ||
143 | L2TP_L2SPECTYPE_DEFAULT, | ||
144 | }; | ||
145 | |||
146 | enum l2tp_encap_type { | ||
147 | L2TP_ENCAPTYPE_UDP, | ||
148 | L2TP_ENCAPTYPE_IP, | ||
149 | }; | ||
150 | |||
151 | enum l2tp_seqmode { | ||
152 | L2TP_SEQ_NONE = 0, | ||
153 | L2TP_SEQ_IP = 1, | ||
154 | L2TP_SEQ_ALL = 2, | ||
155 | }; | ||
156 | |||
157 | /* | ||
158 | * NETLINK_GENERIC related info | ||
159 | */ | ||
160 | #define L2TP_GENL_NAME "l2tp" | ||
161 | #define L2TP_GENL_VERSION 0x1 | ||
162 | |||
163 | #endif | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index a03977a96d7e..06aed8305bf3 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
@@ -44,6 +44,8 @@ struct lock_class_key { | |||
44 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; | 44 | struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; |
45 | }; | 45 | }; |
46 | 46 | ||
47 | extern struct lock_class_key __lockdep_no_validate__; | ||
48 | |||
47 | #define LOCKSTAT_POINTS 4 | 49 | #define LOCKSTAT_POINTS 4 |
48 | 50 | ||
49 | /* | 51 | /* |
@@ -270,6 +272,9 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name, | |||
270 | #define lockdep_set_subclass(lock, sub) \ | 272 | #define lockdep_set_subclass(lock, sub) \ |
271 | lockdep_init_map(&(lock)->dep_map, #lock, \ | 273 | lockdep_init_map(&(lock)->dep_map, #lock, \ |
272 | (lock)->dep_map.key, sub) | 274 | (lock)->dep_map.key, sub) |
275 | |||
276 | #define lockdep_set_novalidate_class(lock) \ | ||
277 | lockdep_set_class(lock, &__lockdep_no_validate__) | ||
273 | /* | 278 | /* |
274 | * Compare locking classes | 279 | * Compare locking classes |
275 | */ | 280 | */ |
@@ -354,6 +359,9 @@ static inline void lockdep_on(void) | |||
354 | #define lockdep_set_class_and_subclass(lock, key, sub) \ | 359 | #define lockdep_set_class_and_subclass(lock, key, sub) \ |
355 | do { (void)(key); } while (0) | 360 | do { (void)(key); } while (0) |
356 | #define lockdep_set_subclass(lock, sub) do { } while (0) | 361 | #define lockdep_set_subclass(lock, sub) do { } while (0) |
362 | |||
363 | #define lockdep_set_novalidate_class(lock) do { } while (0) | ||
364 | |||
357 | /* | 365 | /* |
358 | * We don't define lockdep_match_class() and lockdep_match_key() for !LOCKDEP | 366 | * We don't define lockdep_match_class() and lockdep_match_key() for !LOCKDEP |
359 | * case since the result is not well defined and the caller should rather | 367 | * case since the result is not well defined and the caller should rather |
diff --git a/include/linux/mmc/sdio.h b/include/linux/mmc/sdio.h index 0ebaef577ff5..329a8faa6e37 100644 --- a/include/linux/mmc/sdio.h +++ b/include/linux/mmc/sdio.h | |||
@@ -94,6 +94,8 @@ | |||
94 | 94 | ||
95 | #define SDIO_BUS_WIDTH_1BIT 0x00 | 95 | #define SDIO_BUS_WIDTH_1BIT 0x00 |
96 | #define SDIO_BUS_WIDTH_4BIT 0x02 | 96 | #define SDIO_BUS_WIDTH_4BIT 0x02 |
97 | #define SDIO_BUS_ECSI 0x20 /* Enable continuous SPI interrupt */ | ||
98 | #define SDIO_BUS_SCSI 0x40 /* Support continuous SPI interrupt */ | ||
97 | 99 | ||
98 | #define SDIO_BUS_ASYNC_INT 0x20 | 100 | #define SDIO_BUS_ASYNC_INT 0x20 |
99 | 101 | ||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 56fde4364e4c..007fbaafead0 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
@@ -474,6 +474,32 @@ struct platform_device_id { | |||
474 | __attribute__((aligned(sizeof(kernel_ulong_t)))); | 474 | __attribute__((aligned(sizeof(kernel_ulong_t)))); |
475 | }; | 475 | }; |
476 | 476 | ||
477 | #define MDIO_MODULE_PREFIX "mdio:" | ||
478 | |||
479 | #define MDIO_ID_FMT "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" | ||
480 | #define MDIO_ID_ARGS(_id) \ | ||
481 | (_id)>>31, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \ | ||
482 | ((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \ | ||
483 | ((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \ | ||
484 | ((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \ | ||
485 | ((_id)>>15) & 1, ((_id)>>14) & 1, ((_id)>>13) & 1, ((_id)>>12) & 1, \ | ||
486 | ((_id)>>11) & 1, ((_id)>>10) & 1, ((_id)>>9) & 1, ((_id)>>8) & 1, \ | ||
487 | ((_id)>>7) & 1, ((_id)>>6) & 1, ((_id)>>5) & 1, ((_id)>>4) & 1, \ | ||
488 | ((_id)>>3) & 1, ((_id)>>2) & 1, ((_id)>>1) & 1, (_id) & 1 | ||
489 | |||
490 | /** | ||
491 | * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus | ||
492 | * @phy_id: The result of | ||
493 | * (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&PHYSID2)) & @phy_id_mask | ||
494 | * for this PHY type | ||
495 | * @phy_id_mask: Defines the significant bits of @phy_id. A value of 0 | ||
496 | * is used to terminate an array of struct mdio_device_id. | ||
497 | */ | ||
498 | struct mdio_device_id { | ||
499 | __u32 phy_id; | ||
500 | __u32 phy_id_mask; | ||
501 | }; | ||
502 | |||
477 | struct zorro_device_id { | 503 | struct zorro_device_id { |
478 | __u32 id; /* Device ID or ZORRO_WILDCARD */ | 504 | __u32 id; /* Device ID or ZORRO_WILDCARD */ |
479 | kernel_ulong_t driver_data; /* Data private to the driver */ | 505 | kernel_ulong_t driver_data; /* Data private to the driver */ |
diff --git a/include/linux/mroute.h b/include/linux/mroute.h index c5f3d53548e2..fa04b246c9ae 100644 --- a/include/linux/mroute.h +++ b/include/linux/mroute.h | |||
@@ -27,7 +27,8 @@ | |||
27 | #define MRT_DEL_MFC (MRT_BASE+5) /* Delete a multicast forwarding entry */ | 27 | #define MRT_DEL_MFC (MRT_BASE+5) /* Delete a multicast forwarding entry */ |
28 | #define MRT_VERSION (MRT_BASE+6) /* Get the kernel multicast version */ | 28 | #define MRT_VERSION (MRT_BASE+6) /* Get the kernel multicast version */ |
29 | #define MRT_ASSERT (MRT_BASE+7) /* Activate PIM assert mode */ | 29 | #define MRT_ASSERT (MRT_BASE+7) /* Activate PIM assert mode */ |
30 | #define MRT_PIM (MRT_BASE+8) /* enable PIM code */ | 30 | #define MRT_PIM (MRT_BASE+8) /* enable PIM code */ |
31 | #define MRT_TABLE (MRT_BASE+9) /* Specify mroute table ID */ | ||
31 | 32 | ||
32 | #define SIOCGETVIFCNT SIOCPROTOPRIVATE /* IP protocol privates */ | 33 | #define SIOCGETVIFCNT SIOCPROTOPRIVATE /* IP protocol privates */ |
33 | #define SIOCGETSGCNT (SIOCPROTOPRIVATE+1) | 34 | #define SIOCGETSGCNT (SIOCPROTOPRIVATE+1) |
@@ -191,10 +192,7 @@ struct vif_device { | |||
191 | #define VIFF_STATIC 0x8000 | 192 | #define VIFF_STATIC 0x8000 |
192 | 193 | ||
193 | struct mfc_cache { | 194 | struct mfc_cache { |
194 | struct mfc_cache *next; /* Next entry on cache line */ | 195 | struct list_head list; |
195 | #ifdef CONFIG_NET_NS | ||
196 | struct net *mfc_net; | ||
197 | #endif | ||
198 | __be32 mfc_mcastgrp; /* Group the entry belongs to */ | 196 | __be32 mfc_mcastgrp; /* Group the entry belongs to */ |
199 | __be32 mfc_origin; /* Source of packet */ | 197 | __be32 mfc_origin; /* Source of packet */ |
200 | vifi_t mfc_parent; /* Source interface */ | 198 | vifi_t mfc_parent; /* Source interface */ |
@@ -217,18 +215,6 @@ struct mfc_cache { | |||
217 | } mfc_un; | 215 | } mfc_un; |
218 | }; | 216 | }; |
219 | 217 | ||
220 | static inline | ||
221 | struct net *mfc_net(const struct mfc_cache *mfc) | ||
222 | { | ||
223 | return read_pnet(&mfc->mfc_net); | ||
224 | } | ||
225 | |||
226 | static inline | ||
227 | void mfc_net_set(struct mfc_cache *mfc, struct net *net) | ||
228 | { | ||
229 | write_pnet(&mfc->mfc_net, hold_net(net)); | ||
230 | } | ||
231 | |||
232 | #define MFC_STATIC 1 | 218 | #define MFC_STATIC 1 |
233 | #define MFC_NOTIFY 2 | 219 | #define MFC_NOTIFY 2 |
234 | 220 | ||
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h index 2caa1a8e525d..6091ab77f388 100644 --- a/include/linux/mroute6.h +++ b/include/linux/mroute6.h | |||
@@ -24,7 +24,8 @@ | |||
24 | #define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */ | 24 | #define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */ |
25 | #define MRT6_VERSION (MRT6_BASE+6) /* Get the kernel multicast version */ | 25 | #define MRT6_VERSION (MRT6_BASE+6) /* Get the kernel multicast version */ |
26 | #define MRT6_ASSERT (MRT6_BASE+7) /* Activate PIM assert mode */ | 26 | #define MRT6_ASSERT (MRT6_BASE+7) /* Activate PIM assert mode */ |
27 | #define MRT6_PIM (MRT6_BASE+8) /* enable PIM code */ | 27 | #define MRT6_PIM (MRT6_BASE+8) /* enable PIM code */ |
28 | #define MRT6_TABLE (MRT6_BASE+9) /* Specify mroute table ID */ | ||
28 | 29 | ||
29 | #define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE /* IP protocol privates */ | 30 | #define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE /* IP protocol privates */ |
30 | #define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1) | 31 | #define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1) |
@@ -182,10 +183,7 @@ struct mif_device { | |||
182 | #define VIFF_STATIC 0x8000 | 183 | #define VIFF_STATIC 0x8000 |
183 | 184 | ||
184 | struct mfc6_cache { | 185 | struct mfc6_cache { |
185 | struct mfc6_cache *next; /* Next entry on cache line */ | 186 | struct list_head list; |
186 | #ifdef CONFIG_NET_NS | ||
187 | struct net *mfc6_net; | ||
188 | #endif | ||
189 | struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */ | 187 | struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */ |
190 | struct in6_addr mf6c_origin; /* Source of packet */ | 188 | struct in6_addr mf6c_origin; /* Source of packet */ |
191 | mifi_t mf6c_parent; /* Source interface */ | 189 | mifi_t mf6c_parent; /* Source interface */ |
@@ -208,18 +206,6 @@ struct mfc6_cache { | |||
208 | } mfc_un; | 206 | } mfc_un; |
209 | }; | 207 | }; |
210 | 208 | ||
211 | static inline | ||
212 | struct net *mfc6_net(const struct mfc6_cache *mfc) | ||
213 | { | ||
214 | return read_pnet(&mfc->mfc6_net); | ||
215 | } | ||
216 | |||
217 | static inline | ||
218 | void mfc6_net_set(struct mfc6_cache *mfc, struct net *net) | ||
219 | { | ||
220 | write_pnet(&mfc->mfc6_net, hold_net(net)); | ||
221 | } | ||
222 | |||
223 | #define MFC_STATIC 1 | 209 | #define MFC_STATIC 1 |
224 | #define MFC_NOTIFY 2 | 210 | #define MFC_NOTIFY 2 |
225 | 211 | ||
@@ -244,14 +230,17 @@ extern int ip6mr_get_route(struct net *net, struct sk_buff *skb, | |||
244 | struct rtmsg *rtm, int nowait); | 230 | struct rtmsg *rtm, int nowait); |
245 | 231 | ||
246 | #ifdef CONFIG_IPV6_MROUTE | 232 | #ifdef CONFIG_IPV6_MROUTE |
247 | static inline struct sock *mroute6_socket(struct net *net) | 233 | extern struct sock *mroute6_socket(struct net *net, struct sk_buff *skb); |
248 | { | ||
249 | return net->ipv6.mroute6_sk; | ||
250 | } | ||
251 | extern int ip6mr_sk_done(struct sock *sk); | 234 | extern int ip6mr_sk_done(struct sock *sk); |
252 | #else | 235 | #else |
253 | static inline struct sock *mroute6_socket(struct net *net) { return NULL; } | 236 | static inline struct sock *mroute6_socket(struct net *net, struct sk_buff *skb) |
254 | static inline int ip6mr_sk_done(struct sock *sk) { return 0; } | 237 | { |
238 | return NULL; | ||
239 | } | ||
240 | static inline int ip6mr_sk_done(struct sock *sk) | ||
241 | { | ||
242 | return 0; | ||
243 | } | ||
255 | #endif | 244 | #endif |
256 | #endif | 245 | #endif |
257 | 246 | ||
diff --git a/include/linux/mtd/blktrans.h b/include/linux/mtd/blktrans.h index 8b4aa0523db7..b481ccd7ff3c 100644 --- a/include/linux/mtd/blktrans.h +++ b/include/linux/mtd/blktrans.h | |||
@@ -9,6 +9,8 @@ | |||
9 | #define __MTD_TRANS_H__ | 9 | #define __MTD_TRANS_H__ |
10 | 10 | ||
11 | #include <linux/mutex.h> | 11 | #include <linux/mutex.h> |
12 | #include <linux/kref.h> | ||
13 | #include <linux/sysfs.h> | ||
12 | 14 | ||
13 | struct hd_geometry; | 15 | struct hd_geometry; |
14 | struct mtd_info; | 16 | struct mtd_info; |
@@ -24,11 +26,16 @@ struct mtd_blktrans_dev { | |||
24 | int devnum; | 26 | int devnum; |
25 | unsigned long size; | 27 | unsigned long size; |
26 | int readonly; | 28 | int readonly; |
27 | void *blkcore_priv; /* gendisk in 2.5, devfs_handle in 2.4 */ | 29 | int open; |
30 | struct kref ref; | ||
31 | struct gendisk *disk; | ||
32 | struct attribute_group *disk_attributes; | ||
33 | struct task_struct *thread; | ||
34 | struct request_queue *rq; | ||
35 | spinlock_t queue_lock; | ||
36 | void *priv; | ||
28 | }; | 37 | }; |
29 | 38 | ||
30 | struct blkcore_priv; /* Differs for 2.4 and 2.5 kernels; private */ | ||
31 | |||
32 | struct mtd_blktrans_ops { | 39 | struct mtd_blktrans_ops { |
33 | char *name; | 40 | char *name; |
34 | int major; | 41 | int major; |
@@ -60,8 +67,6 @@ struct mtd_blktrans_ops { | |||
60 | struct list_head devs; | 67 | struct list_head devs; |
61 | struct list_head list; | 68 | struct list_head list; |
62 | struct module *owner; | 69 | struct module *owner; |
63 | |||
64 | struct mtd_blkcore_priv *blkcore_priv; | ||
65 | }; | 70 | }; |
66 | 71 | ||
67 | extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr); | 72 | extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr); |
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h index df89f4275232..574d9ee066f1 100644 --- a/include/linux/mtd/cfi.h +++ b/include/linux/mtd/cfi.h | |||
@@ -253,6 +253,7 @@ struct cfi_bri_query { | |||
253 | #define P_ID_MITSUBISHI_STD 0x0100 | 253 | #define P_ID_MITSUBISHI_STD 0x0100 |
254 | #define P_ID_MITSUBISHI_EXT 0x0101 | 254 | #define P_ID_MITSUBISHI_EXT 0x0101 |
255 | #define P_ID_SST_PAGE 0x0102 | 255 | #define P_ID_SST_PAGE 0x0102 |
256 | #define P_ID_SST_OLD 0x0701 | ||
256 | #define P_ID_INTEL_PERFORMANCE 0x0200 | 257 | #define P_ID_INTEL_PERFORMANCE 0x0200 |
257 | #define P_ID_INTEL_DATA 0x0210 | 258 | #define P_ID_INTEL_DATA 0x0210 |
258 | #define P_ID_RESERVED 0xffff | 259 | #define P_ID_RESERVED 0xffff |
@@ -297,7 +298,7 @@ static inline uint32_t cfi_build_cmd_addr(uint32_t cmd_ofs, | |||
297 | * and 32bit devices on 16 bit busses | 298 | * and 32bit devices on 16 bit busses |
298 | * set the low bit of the alternating bit sequence of the address. | 299 | * set the low bit of the alternating bit sequence of the address. |
299 | */ | 300 | */ |
300 | if (((type * interleave) > bankwidth) && ((uint8_t)cmd_ofs == 0xaa)) | 301 | if (((type * interleave) > bankwidth) && ((cmd_ofs & 0xff) == 0xaa)) |
301 | addr |= (type >> 1)*interleave; | 302 | addr |= (type >> 1)*interleave; |
302 | 303 | ||
303 | return addr; | 304 | return addr; |
@@ -515,14 +516,25 @@ struct cfi_fixup { | |||
515 | void* param; | 516 | void* param; |
516 | }; | 517 | }; |
517 | 518 | ||
518 | #define CFI_MFR_ANY 0xffff | 519 | #define CFI_MFR_ANY 0xFFFF |
519 | #define CFI_ID_ANY 0xffff | 520 | #define CFI_ID_ANY 0xFFFF |
520 | 521 | #define CFI_MFR_CONTINUATION 0x007F | |
521 | #define CFI_MFR_AMD 0x0001 | 522 | |
522 | #define CFI_MFR_INTEL 0x0089 | 523 | #define CFI_MFR_AMD 0x0001 |
523 | #define CFI_MFR_ATMEL 0x001F | 524 | #define CFI_MFR_ATMEL 0x001F |
524 | #define CFI_MFR_SAMSUNG 0x00EC | 525 | #define CFI_MFR_EON 0x001C |
525 | #define CFI_MFR_ST 0x0020 /* STMicroelectronics */ | 526 | #define CFI_MFR_FUJITSU 0x0004 |
527 | #define CFI_MFR_HYUNDAI 0x00AD | ||
528 | #define CFI_MFR_INTEL 0x0089 | ||
529 | #define CFI_MFR_MACRONIX 0x00C2 | ||
530 | #define CFI_MFR_NEC 0x0010 | ||
531 | #define CFI_MFR_PMC 0x009D | ||
532 | #define CFI_MFR_SAMSUNG 0x00EC | ||
533 | #define CFI_MFR_SHARP 0x00B0 | ||
534 | #define CFI_MFR_SST 0x00BF | ||
535 | #define CFI_MFR_ST 0x0020 /* STMicroelectronics */ | ||
536 | #define CFI_MFR_TOSHIBA 0x0098 | ||
537 | #define CFI_MFR_WINBOND 0x00DA | ||
526 | 538 | ||
527 | void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups); | 539 | void cfi_fixup(struct mtd_info *mtd, struct cfi_fixup* fixups); |
528 | 540 | ||
diff --git a/include/linux/mtd/flashchip.h b/include/linux/mtd/flashchip.h index d0bf422ae374..f43e9b49b751 100644 --- a/include/linux/mtd/flashchip.h +++ b/include/linux/mtd/flashchip.h | |||
@@ -15,6 +15,7 @@ | |||
15 | * has asm/spinlock.h, or 2.4, which has linux/spinlock.h | 15 | * has asm/spinlock.h, or 2.4, which has linux/spinlock.h |
16 | */ | 16 | */ |
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | #include <linux/mutex.h> | ||
18 | 19 | ||
19 | typedef enum { | 20 | typedef enum { |
20 | FL_READY, | 21 | FL_READY, |
@@ -74,8 +75,7 @@ struct flchip { | |||
74 | unsigned int erase_suspended:1; | 75 | unsigned int erase_suspended:1; |
75 | unsigned long in_progress_block_addr; | 76 | unsigned long in_progress_block_addr; |
76 | 77 | ||
77 | spinlock_t *mutex; | 78 | struct mutex mutex; |
78 | spinlock_t _spinlock; /* We do it like this because sometimes they'll be shared. */ | ||
79 | wait_queue_head_t wq; /* Wait on here when we're waiting for the chip | 79 | wait_queue_head_t wq; /* Wait on here when we're waiting for the chip |
80 | to be ready */ | 80 | to be ready */ |
81 | int word_write_time; | 81 | int word_write_time; |
diff --git a/include/linux/mtd/map.h b/include/linux/mtd/map.h index b981b8772217..de89eca864ce 100644 --- a/include/linux/mtd/map.h +++ b/include/linux/mtd/map.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/types.h> | 7 | #include <linux/types.h> |
8 | #include <linux/list.h> | 8 | #include <linux/list.h> |
9 | #include <linux/string.h> | 9 | #include <linux/string.h> |
10 | #include <linux/bug.h> | ||
10 | 11 | ||
11 | #include <linux/mtd/compatmac.h> | 12 | #include <linux/mtd/compatmac.h> |
12 | 13 | ||
@@ -386,6 +387,8 @@ static inline map_word inline_map_read(struct map_info *map, unsigned long ofs) | |||
386 | #endif | 387 | #endif |
387 | else if (map_bankwidth_is_large(map)) | 388 | else if (map_bankwidth_is_large(map)) |
388 | memcpy_fromio(r.x, map->virt+ofs, map->bankwidth); | 389 | memcpy_fromio(r.x, map->virt+ofs, map->bankwidth); |
390 | else | ||
391 | BUG(); | ||
389 | 392 | ||
390 | return r; | 393 | return r; |
391 | } | 394 | } |
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index 0f32a9b6ff55..5326435a7571 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -20,7 +20,6 @@ | |||
20 | 20 | ||
21 | #define MTD_CHAR_MAJOR 90 | 21 | #define MTD_CHAR_MAJOR 90 |
22 | #define MTD_BLOCK_MAJOR 31 | 22 | #define MTD_BLOCK_MAJOR 31 |
23 | #define MAX_MTD_DEVICES 32 | ||
24 | 23 | ||
25 | #define MTD_ERASE_PENDING 0x01 | 24 | #define MTD_ERASE_PENDING 0x01 |
26 | #define MTD_ERASING 0x02 | 25 | #define MTD_ERASING 0x02 |
@@ -61,9 +60,7 @@ struct mtd_erase_region_info { | |||
61 | * MTD_OOB_PLACE: oob data are placed at the given offset | 60 | * MTD_OOB_PLACE: oob data are placed at the given offset |
62 | * MTD_OOB_AUTO: oob data are automatically placed at the free areas | 61 | * MTD_OOB_AUTO: oob data are automatically placed at the free areas |
63 | * which are defined by the ecclayout | 62 | * which are defined by the ecclayout |
64 | * MTD_OOB_RAW: mode to read raw data+oob in one chunk. The oob data | 63 | * MTD_OOB_RAW: mode to read oob and data without doing ECC checking |
65 | * is inserted into the data. Thats a raw image of the | ||
66 | * flash contents. | ||
67 | */ | 64 | */ |
68 | typedef enum { | 65 | typedef enum { |
69 | MTD_OOB_PLACE, | 66 | MTD_OOB_PLACE, |
@@ -290,8 +287,9 @@ extern int add_mtd_device(struct mtd_info *mtd); | |||
290 | extern int del_mtd_device (struct mtd_info *mtd); | 287 | extern int del_mtd_device (struct mtd_info *mtd); |
291 | 288 | ||
292 | extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num); | 289 | extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num); |
290 | extern int __get_mtd_device(struct mtd_info *mtd); | ||
291 | extern void __put_mtd_device(struct mtd_info *mtd); | ||
293 | extern struct mtd_info *get_mtd_device_nm(const char *name); | 292 | extern struct mtd_info *get_mtd_device_nm(const char *name); |
294 | |||
295 | extern void put_mtd_device(struct mtd_info *mtd); | 293 | extern void put_mtd_device(struct mtd_info *mtd); |
296 | 294 | ||
297 | 295 | ||
diff --git a/include/linux/mtd/mtdram.h b/include/linux/mtd/mtdram.h index 04fdc07b7353..68891313875d 100644 --- a/include/linux/mtd/mtdram.h +++ b/include/linux/mtd/mtdram.h | |||
@@ -3,6 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/mtd/mtd.h> | 4 | #include <linux/mtd/mtd.h> |
5 | int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, | 5 | int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, |
6 | unsigned long size, char *name); | 6 | unsigned long size, char *name); |
7 | 7 | ||
8 | #endif /* __MTD_MTDRAM_H__ */ | 8 | #endif /* __MTD_MTDRAM_H__ */ |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index ccab9dfc5217..a81b185e23a7 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
@@ -25,11 +25,13 @@ | |||
25 | #include <linux/mtd/bbm.h> | 25 | #include <linux/mtd/bbm.h> |
26 | 26 | ||
27 | struct mtd_info; | 27 | struct mtd_info; |
28 | struct nand_flash_dev; | ||
28 | /* Scan and identify a NAND device */ | 29 | /* Scan and identify a NAND device */ |
29 | extern int nand_scan (struct mtd_info *mtd, int max_chips); | 30 | extern int nand_scan (struct mtd_info *mtd, int max_chips); |
30 | /* Separate phases of nand_scan(), allowing board driver to intervene | 31 | /* Separate phases of nand_scan(), allowing board driver to intervene |
31 | * and override command or ECC setup according to flash type */ | 32 | * and override command or ECC setup according to flash type */ |
32 | extern int nand_scan_ident(struct mtd_info *mtd, int max_chips); | 33 | extern int nand_scan_ident(struct mtd_info *mtd, int max_chips, |
34 | struct nand_flash_dev *table); | ||
33 | extern int nand_scan_tail(struct mtd_info *mtd); | 35 | extern int nand_scan_tail(struct mtd_info *mtd); |
34 | 36 | ||
35 | /* Free resources held by the NAND device */ | 37 | /* Free resources held by the NAND device */ |
@@ -38,6 +40,12 @@ extern void nand_release (struct mtd_info *mtd); | |||
38 | /* Internal helper for board drivers which need to override command function */ | 40 | /* Internal helper for board drivers which need to override command function */ |
39 | extern void nand_wait_ready(struct mtd_info *mtd); | 41 | extern void nand_wait_ready(struct mtd_info *mtd); |
40 | 42 | ||
43 | /* locks all blockes present in the device */ | ||
44 | extern int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len); | ||
45 | |||
46 | /* unlocks specified locked blockes */ | ||
47 | extern int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len); | ||
48 | |||
41 | /* The maximum number of NAND chips in an array */ | 49 | /* The maximum number of NAND chips in an array */ |
42 | #define NAND_MAX_CHIPS 8 | 50 | #define NAND_MAX_CHIPS 8 |
43 | 51 | ||
@@ -45,7 +53,7 @@ extern void nand_wait_ready(struct mtd_info *mtd); | |||
45 | * is supported now. If you add a chip with bigger oobsize/page | 53 | * is supported now. If you add a chip with bigger oobsize/page |
46 | * adjust this accordingly. | 54 | * adjust this accordingly. |
47 | */ | 55 | */ |
48 | #define NAND_MAX_OOBSIZE 128 | 56 | #define NAND_MAX_OOBSIZE 256 |
49 | #define NAND_MAX_PAGESIZE 4096 | 57 | #define NAND_MAX_PAGESIZE 4096 |
50 | 58 | ||
51 | /* | 59 | /* |
@@ -82,6 +90,10 @@ extern void nand_wait_ready(struct mtd_info *mtd); | |||
82 | #define NAND_CMD_ERASE2 0xd0 | 90 | #define NAND_CMD_ERASE2 0xd0 |
83 | #define NAND_CMD_RESET 0xff | 91 | #define NAND_CMD_RESET 0xff |
84 | 92 | ||
93 | #define NAND_CMD_LOCK 0x2a | ||
94 | #define NAND_CMD_UNLOCK1 0x23 | ||
95 | #define NAND_CMD_UNLOCK2 0x24 | ||
96 | |||
85 | /* Extended commands for large page devices */ | 97 | /* Extended commands for large page devices */ |
86 | #define NAND_CMD_READSTART 0x30 | 98 | #define NAND_CMD_READSTART 0x30 |
87 | #define NAND_CMD_RNDOUTSTART 0xE0 | 99 | #define NAND_CMD_RNDOUTSTART 0xE0 |
@@ -169,6 +181,14 @@ typedef enum { | |||
169 | #define NAND_NO_READRDY 0x00000100 | 181 | #define NAND_NO_READRDY 0x00000100 |
170 | /* Chip does not allow subpage writes */ | 182 | /* Chip does not allow subpage writes */ |
171 | #define NAND_NO_SUBPAGE_WRITE 0x00000200 | 183 | #define NAND_NO_SUBPAGE_WRITE 0x00000200 |
184 | /* Chip stores bad block marker on the last page of the eraseblock */ | ||
185 | #define NAND_BB_LAST_PAGE 0x00000400 | ||
186 | |||
187 | /* Device is one of 'new' xD cards that expose fake nand command set */ | ||
188 | #define NAND_BROKEN_XD 0x00000400 | ||
189 | |||
190 | /* Device behaves just like nand, but is readonly */ | ||
191 | #define NAND_ROM 0x00000800 | ||
172 | 192 | ||
173 | /* Options valid for Samsung large page devices */ | 193 | /* Options valid for Samsung large page devices */ |
174 | #define NAND_SAMSUNG_LP_OPTIONS \ | 194 | #define NAND_SAMSUNG_LP_OPTIONS \ |
@@ -391,6 +411,7 @@ struct nand_chip { | |||
391 | int subpagesize; | 411 | int subpagesize; |
392 | uint8_t cellinfo; | 412 | uint8_t cellinfo; |
393 | int badblockpos; | 413 | int badblockpos; |
414 | int badblockbits; | ||
394 | 415 | ||
395 | flstate_t state; | 416 | flstate_t state; |
396 | 417 | ||
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index 5509eb06b326..c26ff86ad08a 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h | |||
@@ -125,6 +125,9 @@ struct onenand_chip { | |||
125 | flstate_t state; | 125 | flstate_t state; |
126 | unsigned char *page_buf; | 126 | unsigned char *page_buf; |
127 | unsigned char *oob_buf; | 127 | unsigned char *oob_buf; |
128 | #ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE | ||
129 | unsigned char *verify_buf; | ||
130 | #endif | ||
128 | 131 | ||
129 | int subpagesize; | 132 | int subpagesize; |
130 | struct nand_ecclayout *ecclayout; | 133 | struct nand_ecclayout *ecclayout; |
@@ -175,10 +178,14 @@ struct onenand_chip { | |||
175 | #define ONENAND_HAS_CONT_LOCK (0x0001) | 178 | #define ONENAND_HAS_CONT_LOCK (0x0001) |
176 | #define ONENAND_HAS_UNLOCK_ALL (0x0002) | 179 | #define ONENAND_HAS_UNLOCK_ALL (0x0002) |
177 | #define ONENAND_HAS_2PLANE (0x0004) | 180 | #define ONENAND_HAS_2PLANE (0x0004) |
181 | #define ONENAND_HAS_4KB_PAGE (0x0008) | ||
178 | #define ONENAND_SKIP_UNLOCK_CHECK (0x0100) | 182 | #define ONENAND_SKIP_UNLOCK_CHECK (0x0100) |
179 | #define ONENAND_PAGEBUF_ALLOC (0x1000) | 183 | #define ONENAND_PAGEBUF_ALLOC (0x1000) |
180 | #define ONENAND_OOBBUF_ALLOC (0x2000) | 184 | #define ONENAND_OOBBUF_ALLOC (0x2000) |
181 | 185 | ||
186 | #define ONENAND_IS_4KB_PAGE(this) \ | ||
187 | (this->options & ONENAND_HAS_4KB_PAGE) | ||
188 | |||
182 | /* | 189 | /* |
183 | * OneNAND Flash Manufacturer ID Codes | 190 | * OneNAND Flash Manufacturer ID Codes |
184 | */ | 191 | */ |
@@ -205,6 +212,8 @@ struct mtd_partition; | |||
205 | 212 | ||
206 | struct onenand_platform_data { | 213 | struct onenand_platform_data { |
207 | void (*mmcontrol)(struct mtd_info *mtd, int sync_read); | 214 | void (*mmcontrol)(struct mtd_info *mtd, int sync_read); |
215 | int (*read_bufferram)(struct mtd_info *mtd, int area, | ||
216 | unsigned char *buffer, int offset, size_t count); | ||
208 | struct mtd_partition *parts; | 217 | struct mtd_partition *parts; |
209 | unsigned int nr_parts; | 218 | unsigned int nr_parts; |
210 | }; | 219 | }; |
diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h index ab77609ec337..9cf4c4c79555 100644 --- a/include/linux/mtd/sh_flctl.h +++ b/include/linux/mtd/sh_flctl.h | |||
@@ -93,8 +93,6 @@ | |||
93 | #define INIT_FL4ECCRESULT_VAL 0x03FF03FF | 93 | #define INIT_FL4ECCRESULT_VAL 0x03FF03FF |
94 | #define LOOP_TIMEOUT_MAX 0x00010000 | 94 | #define LOOP_TIMEOUT_MAX 0x00010000 |
95 | 95 | ||
96 | #define mtd_to_flctl(mtd) container_of(mtd, struct sh_flctl, mtd) | ||
97 | |||
98 | struct sh_flctl { | 96 | struct sh_flctl { |
99 | struct mtd_info mtd; | 97 | struct mtd_info mtd; |
100 | struct nand_chip chip; | 98 | struct nand_chip chip; |
@@ -125,4 +123,9 @@ struct sh_flctl_platform_data { | |||
125 | unsigned has_hwecc:1; | 123 | unsigned has_hwecc:1; |
126 | }; | 124 | }; |
127 | 125 | ||
126 | static inline struct sh_flctl *mtd_to_flctl(struct mtd_info *mtdinfo) | ||
127 | { | ||
128 | return container_of(mtdinfo, struct sh_flctl, mtd); | ||
129 | } | ||
130 | |||
128 | #endif /* __SH_FLCTL_H__ */ | 131 | #endif /* __SH_FLCTL_H__ */ |
diff --git a/include/linux/net.h b/include/linux/net.h index 4157b5d42bd6..2b4deeeb8646 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
@@ -59,6 +59,7 @@ typedef enum { | |||
59 | #include <linux/wait.h> | 59 | #include <linux/wait.h> |
60 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ | 60 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ |
61 | #include <linux/kmemcheck.h> | 61 | #include <linux/kmemcheck.h> |
62 | #include <linux/rcupdate.h> | ||
62 | 63 | ||
63 | struct poll_table_struct; | 64 | struct poll_table_struct; |
64 | struct pipe_inode_info; | 65 | struct pipe_inode_info; |
@@ -116,6 +117,12 @@ enum sock_shutdown_cmd { | |||
116 | SHUT_RDWR = 2, | 117 | SHUT_RDWR = 2, |
117 | }; | 118 | }; |
118 | 119 | ||
120 | struct socket_wq { | ||
121 | wait_queue_head_t wait; | ||
122 | struct fasync_struct *fasync_list; | ||
123 | struct rcu_head rcu; | ||
124 | } ____cacheline_aligned_in_smp; | ||
125 | |||
119 | /** | 126 | /** |
120 | * struct socket - general BSD socket | 127 | * struct socket - general BSD socket |
121 | * @state: socket state (%SS_CONNECTED, etc) | 128 | * @state: socket state (%SS_CONNECTED, etc) |
@@ -135,11 +142,8 @@ struct socket { | |||
135 | kmemcheck_bitfield_end(type); | 142 | kmemcheck_bitfield_end(type); |
136 | 143 | ||
137 | unsigned long flags; | 144 | unsigned long flags; |
138 | /* | 145 | |
139 | * Please keep fasync_list & wait fields in the same cache line | 146 | struct socket_wq *wq; |
140 | */ | ||
141 | struct fasync_struct *fasync_list; | ||
142 | wait_queue_head_t wait; | ||
143 | 147 | ||
144 | struct file *file; | 148 | struct file *file; |
145 | struct sock *sk; | 149 | struct sock *sk; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 3857517f1ca5..a1bff6518166 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -219,34 +219,6 @@ struct neighbour; | |||
219 | struct neigh_parms; | 219 | struct neigh_parms; |
220 | struct sk_buff; | 220 | struct sk_buff; |
221 | 221 | ||
222 | struct netif_rx_stats { | ||
223 | unsigned total; | ||
224 | unsigned dropped; | ||
225 | unsigned time_squeeze; | ||
226 | unsigned cpu_collision; | ||
227 | }; | ||
228 | |||
229 | DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat); | ||
230 | |||
231 | struct dev_addr_list { | ||
232 | struct dev_addr_list *next; | ||
233 | u8 da_addr[MAX_ADDR_LEN]; | ||
234 | u8 da_addrlen; | ||
235 | u8 da_synced; | ||
236 | int da_users; | ||
237 | int da_gusers; | ||
238 | }; | ||
239 | |||
240 | /* | ||
241 | * We tag multicasts with these structures. | ||
242 | */ | ||
243 | |||
244 | #define dev_mc_list dev_addr_list | ||
245 | #define dmi_addr da_addr | ||
246 | #define dmi_addrlen da_addrlen | ||
247 | #define dmi_users da_users | ||
248 | #define dmi_gusers da_gusers | ||
249 | |||
250 | struct netdev_hw_addr { | 222 | struct netdev_hw_addr { |
251 | struct list_head list; | 223 | struct list_head list; |
252 | unsigned char addr[MAX_ADDR_LEN]; | 224 | unsigned char addr[MAX_ADDR_LEN]; |
@@ -255,8 +227,10 @@ struct netdev_hw_addr { | |||
255 | #define NETDEV_HW_ADDR_T_SAN 2 | 227 | #define NETDEV_HW_ADDR_T_SAN 2 |
256 | #define NETDEV_HW_ADDR_T_SLAVE 3 | 228 | #define NETDEV_HW_ADDR_T_SLAVE 3 |
257 | #define NETDEV_HW_ADDR_T_UNICAST 4 | 229 | #define NETDEV_HW_ADDR_T_UNICAST 4 |
230 | #define NETDEV_HW_ADDR_T_MULTICAST 5 | ||
258 | int refcount; | 231 | int refcount; |
259 | bool synced; | 232 | bool synced; |
233 | bool global_use; | ||
260 | struct rcu_head rcu_head; | 234 | struct rcu_head rcu_head; |
261 | }; | 235 | }; |
262 | 236 | ||
@@ -265,16 +239,20 @@ struct netdev_hw_addr_list { | |||
265 | int count; | 239 | int count; |
266 | }; | 240 | }; |
267 | 241 | ||
268 | #define netdev_uc_count(dev) ((dev)->uc.count) | 242 | #define netdev_hw_addr_list_count(l) ((l)->count) |
269 | #define netdev_uc_empty(dev) ((dev)->uc.count == 0) | 243 | #define netdev_hw_addr_list_empty(l) (netdev_hw_addr_list_count(l) == 0) |
270 | #define netdev_for_each_uc_addr(ha, dev) \ | 244 | #define netdev_hw_addr_list_for_each(ha, l) \ |
271 | list_for_each_entry(ha, &dev->uc.list, list) | 245 | list_for_each_entry(ha, &(l)->list, list) |
272 | 246 | ||
273 | #define netdev_mc_count(dev) ((dev)->mc_count) | 247 | #define netdev_uc_count(dev) netdev_hw_addr_list_count(&(dev)->uc) |
274 | #define netdev_mc_empty(dev) (netdev_mc_count(dev) == 0) | 248 | #define netdev_uc_empty(dev) netdev_hw_addr_list_empty(&(dev)->uc) |
249 | #define netdev_for_each_uc_addr(ha, dev) \ | ||
250 | netdev_hw_addr_list_for_each(ha, &(dev)->uc) | ||
275 | 251 | ||
276 | #define netdev_for_each_mc_addr(mclist, dev) \ | 252 | #define netdev_mc_count(dev) netdev_hw_addr_list_count(&(dev)->mc) |
277 | for (mclist = dev->mc_list; mclist; mclist = mclist->next) | 253 | #define netdev_mc_empty(dev) netdev_hw_addr_list_empty(&(dev)->mc) |
254 | #define netdev_for_each_mc_addr(ha, dev) \ | ||
255 | netdev_hw_addr_list_for_each(ha, &(dev)->mc) | ||
278 | 256 | ||
279 | struct hh_cache { | 257 | struct hh_cache { |
280 | struct hh_cache *hh_next; /* Next entry */ | 258 | struct hh_cache *hh_next; /* Next entry */ |
@@ -531,6 +509,85 @@ struct netdev_queue { | |||
531 | unsigned long tx_dropped; | 509 | unsigned long tx_dropped; |
532 | } ____cacheline_aligned_in_smp; | 510 | } ____cacheline_aligned_in_smp; |
533 | 511 | ||
512 | #ifdef CONFIG_RPS | ||
513 | /* | ||
514 | * This structure holds an RPS map which can be of variable length. The | ||
515 | * map is an array of CPUs. | ||
516 | */ | ||
517 | struct rps_map { | ||
518 | unsigned int len; | ||
519 | struct rcu_head rcu; | ||
520 | u16 cpus[0]; | ||
521 | }; | ||
522 | #define RPS_MAP_SIZE(_num) (sizeof(struct rps_map) + (_num * sizeof(u16))) | ||
523 | |||
524 | /* | ||
525 | * The rps_dev_flow structure contains the mapping of a flow to a CPU and the | ||
526 | * tail pointer for that CPU's input queue at the time of last enqueue. | ||
527 | */ | ||
528 | struct rps_dev_flow { | ||
529 | u16 cpu; | ||
530 | u16 fill; | ||
531 | unsigned int last_qtail; | ||
532 | }; | ||
533 | |||
534 | /* | ||
535 | * The rps_dev_flow_table structure contains a table of flow mappings. | ||
536 | */ | ||
537 | struct rps_dev_flow_table { | ||
538 | unsigned int mask; | ||
539 | struct rcu_head rcu; | ||
540 | struct work_struct free_work; | ||
541 | struct rps_dev_flow flows[0]; | ||
542 | }; | ||
543 | #define RPS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_dev_flow_table) + \ | ||
544 | (_num * sizeof(struct rps_dev_flow))) | ||
545 | |||
546 | /* | ||
547 | * The rps_sock_flow_table contains mappings of flows to the last CPU | ||
548 | * on which they were processed by the application (set in recvmsg). | ||
549 | */ | ||
550 | struct rps_sock_flow_table { | ||
551 | unsigned int mask; | ||
552 | u16 ents[0]; | ||
553 | }; | ||
554 | #define RPS_SOCK_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_sock_flow_table) + \ | ||
555 | (_num * sizeof(u16))) | ||
556 | |||
557 | #define RPS_NO_CPU 0xffff | ||
558 | |||
559 | static inline void rps_record_sock_flow(struct rps_sock_flow_table *table, | ||
560 | u32 hash) | ||
561 | { | ||
562 | if (table && hash) { | ||
563 | unsigned int cpu, index = hash & table->mask; | ||
564 | |||
565 | /* We only give a hint, preemption can change cpu under us */ | ||
566 | cpu = raw_smp_processor_id(); | ||
567 | |||
568 | if (table->ents[index] != cpu) | ||
569 | table->ents[index] = cpu; | ||
570 | } | ||
571 | } | ||
572 | |||
573 | static inline void rps_reset_sock_flow(struct rps_sock_flow_table *table, | ||
574 | u32 hash) | ||
575 | { | ||
576 | if (table && hash) | ||
577 | table->ents[hash & table->mask] = RPS_NO_CPU; | ||
578 | } | ||
579 | |||
580 | extern struct rps_sock_flow_table *rps_sock_flow_table; | ||
581 | |||
582 | /* This structure contains an instance of an RX queue. */ | ||
583 | struct netdev_rx_queue { | ||
584 | struct rps_map *rps_map; | ||
585 | struct rps_dev_flow_table *rps_flow_table; | ||
586 | struct kobject kobj; | ||
587 | struct netdev_rx_queue *first; | ||
588 | atomic_t count; | ||
589 | } ____cacheline_aligned_in_smp; | ||
590 | #endif /* CONFIG_RPS */ | ||
534 | 591 | ||
535 | /* | 592 | /* |
536 | * This structure defines the management hooks for network devices. | 593 | * This structure defines the management hooks for network devices. |
@@ -630,6 +687,9 @@ struct netdev_queue { | |||
630 | * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate); | 687 | * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate); |
631 | * int (*ndo_get_vf_config)(struct net_device *dev, | 688 | * int (*ndo_get_vf_config)(struct net_device *dev, |
632 | * int vf, struct ifla_vf_info *ivf); | 689 | * int vf, struct ifla_vf_info *ivf); |
690 | * int (*ndo_set_vf_port)(struct net_device *dev, int vf, | ||
691 | * struct nlattr *port[]); | ||
692 | * int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb); | ||
633 | */ | 693 | */ |
634 | #define HAVE_NET_DEVICE_OPS | 694 | #define HAVE_NET_DEVICE_OPS |
635 | struct net_device_ops { | 695 | struct net_device_ops { |
@@ -668,6 +728,7 @@ struct net_device_ops { | |||
668 | unsigned short vid); | 728 | unsigned short vid); |
669 | #ifdef CONFIG_NET_POLL_CONTROLLER | 729 | #ifdef CONFIG_NET_POLL_CONTROLLER |
670 | void (*ndo_poll_controller)(struct net_device *dev); | 730 | void (*ndo_poll_controller)(struct net_device *dev); |
731 | void (*ndo_netpoll_cleanup)(struct net_device *dev); | ||
671 | #endif | 732 | #endif |
672 | int (*ndo_set_vf_mac)(struct net_device *dev, | 733 | int (*ndo_set_vf_mac)(struct net_device *dev, |
673 | int queue, u8 *mac); | 734 | int queue, u8 *mac); |
@@ -678,6 +739,11 @@ struct net_device_ops { | |||
678 | int (*ndo_get_vf_config)(struct net_device *dev, | 739 | int (*ndo_get_vf_config)(struct net_device *dev, |
679 | int vf, | 740 | int vf, |
680 | struct ifla_vf_info *ivf); | 741 | struct ifla_vf_info *ivf); |
742 | int (*ndo_set_vf_port)(struct net_device *dev, | ||
743 | int vf, | ||
744 | struct nlattr *port[]); | ||
745 | int (*ndo_get_vf_port)(struct net_device *dev, | ||
746 | int vf, struct sk_buff *skb); | ||
681 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | 747 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) |
682 | int (*ndo_fcoe_enable)(struct net_device *dev); | 748 | int (*ndo_fcoe_enable)(struct net_device *dev); |
683 | int (*ndo_fcoe_disable)(struct net_device *dev); | 749 | int (*ndo_fcoe_disable)(struct net_device *dev); |
@@ -768,6 +834,7 @@ struct net_device { | |||
768 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | 834 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ |
769 | #define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ | 835 | #define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ |
770 | #define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */ | 836 | #define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */ |
837 | #define NETIF_F_RXHASH (1 << 28) /* Receive hashing offload */ | ||
771 | 838 | ||
772 | /* Segmentation offload features */ | 839 | /* Segmentation offload features */ |
773 | #define NETIF_F_GSO_SHIFT 16 | 840 | #define NETIF_F_GSO_SHIFT 16 |
@@ -824,7 +891,7 @@ struct net_device { | |||
824 | unsigned char operstate; /* RFC2863 operstate */ | 891 | unsigned char operstate; /* RFC2863 operstate */ |
825 | unsigned char link_mode; /* mapping policy to operstate */ | 892 | unsigned char link_mode; /* mapping policy to operstate */ |
826 | 893 | ||
827 | unsigned mtu; /* interface MTU value */ | 894 | unsigned int mtu; /* interface MTU value */ |
828 | unsigned short type; /* interface hardware type */ | 895 | unsigned short type; /* interface hardware type */ |
829 | unsigned short hard_header_len; /* hardware hdr length */ | 896 | unsigned short hard_header_len; /* hardware hdr length */ |
830 | 897 | ||
@@ -844,12 +911,10 @@ struct net_device { | |||
844 | unsigned char addr_len; /* hardware address length */ | 911 | unsigned char addr_len; /* hardware address length */ |
845 | unsigned short dev_id; /* for shared network cards */ | 912 | unsigned short dev_id; /* for shared network cards */ |
846 | 913 | ||
847 | struct netdev_hw_addr_list uc; /* Secondary unicast | ||
848 | mac addresses */ | ||
849 | int uc_promisc; | ||
850 | spinlock_t addr_list_lock; | 914 | spinlock_t addr_list_lock; |
851 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ | 915 | struct netdev_hw_addr_list uc; /* Unicast mac addresses */ |
852 | int mc_count; /* Number of installed mcasts */ | 916 | struct netdev_hw_addr_list mc; /* Multicast mac addresses */ |
917 | int uc_promisc; | ||
853 | unsigned int promiscuity; | 918 | unsigned int promiscuity; |
854 | unsigned int allmulti; | 919 | unsigned int allmulti; |
855 | 920 | ||
@@ -882,6 +947,15 @@ struct net_device { | |||
882 | 947 | ||
883 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 948 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
884 | 949 | ||
950 | #ifdef CONFIG_RPS | ||
951 | struct kset *queues_kset; | ||
952 | |||
953 | struct netdev_rx_queue *_rx; | ||
954 | |||
955 | /* Number of RX queues allocated at alloc_netdev_mq() time */ | ||
956 | unsigned int num_rx_queues; | ||
957 | #endif | ||
958 | |||
885 | struct netdev_queue rx_queue; | 959 | struct netdev_queue rx_queue; |
886 | 960 | ||
887 | struct netdev_queue *_tx ____cacheline_aligned_in_smp; | 961 | struct netdev_queue *_tx ____cacheline_aligned_in_smp; |
@@ -1310,19 +1384,44 @@ static inline int unregister_gifconf(unsigned int family) | |||
1310 | } | 1384 | } |
1311 | 1385 | ||
1312 | /* | 1386 | /* |
1313 | * Incoming packets are placed on per-cpu queues so that | 1387 | * Incoming packets are placed on per-cpu queues |
1314 | * no locking is needed. | ||
1315 | */ | 1388 | */ |
1316 | struct softnet_data { | 1389 | struct softnet_data { |
1317 | struct Qdisc *output_queue; | 1390 | struct Qdisc *output_queue; |
1318 | struct sk_buff_head input_pkt_queue; | 1391 | struct Qdisc **output_queue_tailp; |
1319 | struct list_head poll_list; | 1392 | struct list_head poll_list; |
1320 | struct sk_buff *completion_queue; | 1393 | struct sk_buff *completion_queue; |
1321 | 1394 | struct sk_buff_head process_queue; | |
1395 | |||
1396 | /* stats */ | ||
1397 | unsigned int processed; | ||
1398 | unsigned int time_squeeze; | ||
1399 | unsigned int cpu_collision; | ||
1400 | unsigned int received_rps; | ||
1401 | |||
1402 | #ifdef CONFIG_RPS | ||
1403 | struct softnet_data *rps_ipi_list; | ||
1404 | |||
1405 | /* Elements below can be accessed between CPUs for RPS */ | ||
1406 | struct call_single_data csd ____cacheline_aligned_in_smp; | ||
1407 | struct softnet_data *rps_ipi_next; | ||
1408 | unsigned int cpu; | ||
1409 | unsigned int input_queue_head; | ||
1410 | #endif | ||
1411 | unsigned dropped; | ||
1412 | struct sk_buff_head input_pkt_queue; | ||
1322 | struct napi_struct backlog; | 1413 | struct napi_struct backlog; |
1323 | }; | 1414 | }; |
1324 | 1415 | ||
1325 | DECLARE_PER_CPU(struct softnet_data,softnet_data); | 1416 | static inline void input_queue_head_add(struct softnet_data *sd, |
1417 | unsigned int len) | ||
1418 | { | ||
1419 | #ifdef CONFIG_RPS | ||
1420 | sd->input_queue_head += len; | ||
1421 | #endif | ||
1422 | } | ||
1423 | |||
1424 | DECLARE_PER_CPU_ALIGNED(struct softnet_data, softnet_data); | ||
1326 | 1425 | ||
1327 | #define HAVE_NETIF_QUEUE | 1426 | #define HAVE_NETIF_QUEUE |
1328 | 1427 | ||
@@ -1949,6 +2048,22 @@ extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name, | |||
1949 | extern int register_netdev(struct net_device *dev); | 2048 | extern int register_netdev(struct net_device *dev); |
1950 | extern void unregister_netdev(struct net_device *dev); | 2049 | extern void unregister_netdev(struct net_device *dev); |
1951 | 2050 | ||
2051 | /* General hardware address lists handling functions */ | ||
2052 | extern int __hw_addr_add_multiple(struct netdev_hw_addr_list *to_list, | ||
2053 | struct netdev_hw_addr_list *from_list, | ||
2054 | int addr_len, unsigned char addr_type); | ||
2055 | extern void __hw_addr_del_multiple(struct netdev_hw_addr_list *to_list, | ||
2056 | struct netdev_hw_addr_list *from_list, | ||
2057 | int addr_len, unsigned char addr_type); | ||
2058 | extern int __hw_addr_sync(struct netdev_hw_addr_list *to_list, | ||
2059 | struct netdev_hw_addr_list *from_list, | ||
2060 | int addr_len); | ||
2061 | extern void __hw_addr_unsync(struct netdev_hw_addr_list *to_list, | ||
2062 | struct netdev_hw_addr_list *from_list, | ||
2063 | int addr_len); | ||
2064 | extern void __hw_addr_flush(struct netdev_hw_addr_list *list); | ||
2065 | extern void __hw_addr_init(struct netdev_hw_addr_list *list); | ||
2066 | |||
1952 | /* Functions used for device addresses handling */ | 2067 | /* Functions used for device addresses handling */ |
1953 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, | 2068 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, |
1954 | unsigned char addr_type); | 2069 | unsigned char addr_type); |
@@ -1960,26 +2075,34 @@ extern int dev_addr_add_multiple(struct net_device *to_dev, | |||
1960 | extern int dev_addr_del_multiple(struct net_device *to_dev, | 2075 | extern int dev_addr_del_multiple(struct net_device *to_dev, |
1961 | struct net_device *from_dev, | 2076 | struct net_device *from_dev, |
1962 | unsigned char addr_type); | 2077 | unsigned char addr_type); |
2078 | extern void dev_addr_flush(struct net_device *dev); | ||
2079 | extern int dev_addr_init(struct net_device *dev); | ||
2080 | |||
2081 | /* Functions used for unicast addresses handling */ | ||
2082 | extern int dev_uc_add(struct net_device *dev, unsigned char *addr); | ||
2083 | extern int dev_uc_del(struct net_device *dev, unsigned char *addr); | ||
2084 | extern int dev_uc_sync(struct net_device *to, struct net_device *from); | ||
2085 | extern void dev_uc_unsync(struct net_device *to, struct net_device *from); | ||
2086 | extern void dev_uc_flush(struct net_device *dev); | ||
2087 | extern void dev_uc_init(struct net_device *dev); | ||
2088 | |||
2089 | /* Functions used for multicast addresses handling */ | ||
2090 | extern int dev_mc_add(struct net_device *dev, unsigned char *addr); | ||
2091 | extern int dev_mc_add_global(struct net_device *dev, unsigned char *addr); | ||
2092 | extern int dev_mc_del(struct net_device *dev, unsigned char *addr); | ||
2093 | extern int dev_mc_del_global(struct net_device *dev, unsigned char *addr); | ||
2094 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); | ||
2095 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); | ||
2096 | extern void dev_mc_flush(struct net_device *dev); | ||
2097 | extern void dev_mc_init(struct net_device *dev); | ||
1963 | 2098 | ||
1964 | /* Functions used for secondary unicast and multicast support */ | 2099 | /* Functions used for secondary unicast and multicast support */ |
1965 | extern void dev_set_rx_mode(struct net_device *dev); | 2100 | extern void dev_set_rx_mode(struct net_device *dev); |
1966 | extern void __dev_set_rx_mode(struct net_device *dev); | 2101 | extern void __dev_set_rx_mode(struct net_device *dev); |
1967 | extern int dev_unicast_delete(struct net_device *dev, void *addr); | ||
1968 | extern int dev_unicast_add(struct net_device *dev, void *addr); | ||
1969 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); | ||
1970 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); | ||
1971 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); | ||
1972 | extern int dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly); | ||
1973 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); | ||
1974 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); | ||
1975 | extern int __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all); | ||
1976 | extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); | ||
1977 | extern int __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); | ||
1978 | extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); | ||
1979 | extern int dev_set_promiscuity(struct net_device *dev, int inc); | 2102 | extern int dev_set_promiscuity(struct net_device *dev, int inc); |
1980 | extern int dev_set_allmulti(struct net_device *dev, int inc); | 2103 | extern int dev_set_allmulti(struct net_device *dev, int inc); |
1981 | extern void netdev_state_change(struct net_device *dev); | 2104 | extern void netdev_state_change(struct net_device *dev); |
1982 | extern void netdev_bonding_change(struct net_device *dev, | 2105 | extern int netdev_bonding_change(struct net_device *dev, |
1983 | unsigned long event); | 2106 | unsigned long event); |
1984 | extern void netdev_features_change(struct net_device *dev); | 2107 | extern void netdev_features_change(struct net_device *dev); |
1985 | /* Load a device via the kmod */ | 2108 | /* Load a device via the kmod */ |
@@ -1989,6 +2112,7 @@ extern const struct net_device_stats *dev_get_stats(struct net_device *dev); | |||
1989 | extern void dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats); | 2112 | extern void dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats); |
1990 | 2113 | ||
1991 | extern int netdev_max_backlog; | 2114 | extern int netdev_max_backlog; |
2115 | extern int netdev_tstamp_prequeue; | ||
1992 | extern int weight_p; | 2116 | extern int weight_p; |
1993 | extern int netdev_set_master(struct net_device *dev, struct net_device *master); | 2117 | extern int netdev_set_master(struct net_device *dev, struct net_device *master); |
1994 | extern int skb_checksum_help(struct sk_buff *skb); | 2118 | extern int skb_checksum_help(struct sk_buff *skb); |
@@ -2049,54 +2173,14 @@ static inline void netif_set_gso_max_size(struct net_device *dev, | |||
2049 | dev->gso_max_size = size; | 2173 | dev->gso_max_size = size; |
2050 | } | 2174 | } |
2051 | 2175 | ||
2052 | static inline void skb_bond_set_mac_by_master(struct sk_buff *skb, | 2176 | extern int __skb_bond_should_drop(struct sk_buff *skb, |
2053 | struct net_device *master) | 2177 | struct net_device *master); |
2054 | { | ||
2055 | if (skb->pkt_type == PACKET_HOST) { | ||
2056 | u16 *dest = (u16 *) eth_hdr(skb)->h_dest; | ||
2057 | 2178 | ||
2058 | memcpy(dest, master->dev_addr, ETH_ALEN); | ||
2059 | } | ||
2060 | } | ||
2061 | |||
2062 | /* On bonding slaves other than the currently active slave, suppress | ||
2063 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and | ||
2064 | * ARP on active-backup slaves with arp_validate enabled. | ||
2065 | */ | ||
2066 | static inline int skb_bond_should_drop(struct sk_buff *skb, | 2179 | static inline int skb_bond_should_drop(struct sk_buff *skb, |
2067 | struct net_device *master) | 2180 | struct net_device *master) |
2068 | { | 2181 | { |
2069 | if (master) { | 2182 | if (master) |
2070 | struct net_device *dev = skb->dev; | 2183 | return __skb_bond_should_drop(skb, master); |
2071 | |||
2072 | if (master->priv_flags & IFF_MASTER_ARPMON) | ||
2073 | dev->last_rx = jiffies; | ||
2074 | |||
2075 | if ((master->priv_flags & IFF_MASTER_ALB) && master->br_port) { | ||
2076 | /* Do address unmangle. The local destination address | ||
2077 | * will be always the one master has. Provides the right | ||
2078 | * functionality in a bridge. | ||
2079 | */ | ||
2080 | skb_bond_set_mac_by_master(skb, master); | ||
2081 | } | ||
2082 | |||
2083 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | ||
2084 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && | ||
2085 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) | ||
2086 | return 0; | ||
2087 | |||
2088 | if (master->priv_flags & IFF_MASTER_ALB) { | ||
2089 | if (skb->pkt_type != PACKET_BROADCAST && | ||
2090 | skb->pkt_type != PACKET_MULTICAST) | ||
2091 | return 0; | ||
2092 | } | ||
2093 | if (master->priv_flags & IFF_MASTER_8023AD && | ||
2094 | skb->protocol == __cpu_to_be16(ETH_P_SLOW)) | ||
2095 | return 0; | ||
2096 | |||
2097 | return 1; | ||
2098 | } | ||
2099 | } | ||
2100 | return 0; | 2184 | return 0; |
2101 | } | 2185 | } |
2102 | 2186 | ||
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index a5a63e41b8af..48767cd16453 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
@@ -16,6 +16,7 @@ header-y += xt_RATEEST.h | |||
16 | header-y += xt_SECMARK.h | 16 | header-y += xt_SECMARK.h |
17 | header-y += xt_TCPMSS.h | 17 | header-y += xt_TCPMSS.h |
18 | header-y += xt_TCPOPTSTRIP.h | 18 | header-y += xt_TCPOPTSTRIP.h |
19 | header-y += xt_TEE.h | ||
19 | header-y += xt_TPROXY.h | 20 | header-y += xt_TPROXY.h |
20 | header-y += xt_comment.h | 21 | header-y += xt_comment.h |
21 | header-y += xt_connbytes.h | 22 | header-y += xt_connbytes.h |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index c608677dda60..14e6d32002c4 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
@@ -113,6 +113,7 @@ struct ip_conntrack_stat { | |||
113 | unsigned int expect_new; | 113 | unsigned int expect_new; |
114 | unsigned int expect_create; | 114 | unsigned int expect_create; |
115 | unsigned int expect_delete; | 115 | unsigned int expect_delete; |
116 | unsigned int search_restart; | ||
116 | }; | 117 | }; |
117 | 118 | ||
118 | /* call to create an explicit dependency on nf_conntrack. */ | 119 | /* call to create an explicit dependency on nf_conntrack. */ |
diff --git a/include/linux/netfilter/nf_conntrack_tuple_common.h b/include/linux/netfilter/nf_conntrack_tuple_common.h index 8e145f0d61cb..2ea22b018a87 100644 --- a/include/linux/netfilter/nf_conntrack_tuple_common.h +++ b/include/linux/netfilter/nf_conntrack_tuple_common.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _NF_CONNTRACK_TUPLE_COMMON_H | 1 | #ifndef _NF_CONNTRACK_TUPLE_COMMON_H |
2 | #define _NF_CONNTRACK_TUPLE_COMMON_H | 2 | #define _NF_CONNTRACK_TUPLE_COMMON_H |
3 | 3 | ||
4 | enum ip_conntrack_dir | 4 | enum ip_conntrack_dir { |
5 | { | ||
6 | IP_CT_DIR_ORIGINAL, | 5 | IP_CT_DIR_ORIGINAL, |
7 | IP_CT_DIR_REPLY, | 6 | IP_CT_DIR_REPLY, |
8 | IP_CT_DIR_MAX | 7 | IP_CT_DIR_MAX |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 84c7c928e9eb..c2ee5d8550cf 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -1,9 +1,10 @@ | |||
1 | #ifndef _X_TABLES_H | 1 | #ifndef _X_TABLES_H |
2 | #define _X_TABLES_H | 2 | #define _X_TABLES_H |
3 | 3 | #include <linux/kernel.h> | |
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | #define XT_FUNCTION_MAXNAMELEN 30 | 6 | #define XT_FUNCTION_MAXNAMELEN 30 |
7 | #define XT_EXTENSION_MAXNAMELEN 29 | ||
7 | #define XT_TABLE_MAXNAMELEN 32 | 8 | #define XT_TABLE_MAXNAMELEN 32 |
8 | 9 | ||
9 | struct xt_entry_match { | 10 | struct xt_entry_match { |
@@ -12,8 +13,7 @@ struct xt_entry_match { | |||
12 | __u16 match_size; | 13 | __u16 match_size; |
13 | 14 | ||
14 | /* Used by userspace */ | 15 | /* Used by userspace */ |
15 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 16 | char name[XT_EXTENSION_MAXNAMELEN]; |
16 | |||
17 | __u8 revision; | 17 | __u8 revision; |
18 | } user; | 18 | } user; |
19 | struct { | 19 | struct { |
@@ -36,8 +36,7 @@ struct xt_entry_target { | |||
36 | __u16 target_size; | 36 | __u16 target_size; |
37 | 37 | ||
38 | /* Used by userspace */ | 38 | /* Used by userspace */ |
39 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 39 | char name[XT_EXTENSION_MAXNAMELEN]; |
40 | |||
41 | __u8 revision; | 40 | __u8 revision; |
42 | } user; | 41 | } user; |
43 | struct { | 42 | struct { |
@@ -70,8 +69,7 @@ struct xt_standard_target { | |||
70 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | 69 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision |
71 | * kernel supports, if >= revision. */ | 70 | * kernel supports, if >= revision. */ |
72 | struct xt_get_revision { | 71 | struct xt_get_revision { |
73 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 72 | char name[XT_EXTENSION_MAXNAMELEN]; |
74 | |||
75 | __u8 revision; | 73 | __u8 revision; |
76 | }; | 74 | }; |
77 | 75 | ||
@@ -93,7 +91,7 @@ struct _xt_align { | |||
93 | __u64 u64; | 91 | __u64 u64; |
94 | }; | 92 | }; |
95 | 93 | ||
96 | #define XT_ALIGN(s) ALIGN((s), __alignof__(struct _xt_align)) | 94 | #define XT_ALIGN(s) __ALIGN_KERNEL((s), __alignof__(struct _xt_align)) |
97 | 95 | ||
98 | /* Standard return verdict, or do jump. */ | 96 | /* Standard return verdict, or do jump. */ |
99 | #define XT_STANDARD_TARGET "" | 97 | #define XT_STANDARD_TARGET "" |
@@ -185,40 +183,53 @@ struct xt_counters_info { | |||
185 | #include <linux/netdevice.h> | 183 | #include <linux/netdevice.h> |
186 | 184 | ||
187 | /** | 185 | /** |
188 | * struct xt_match_param - parameters for match extensions' match functions | 186 | * struct xt_action_param - parameters for matches/targets |
189 | * | 187 | * |
188 | * @match: the match extension | ||
189 | * @target: the target extension | ||
190 | * @matchinfo: per-match data | ||
191 | * @targetinfo: per-target data | ||
190 | * @in: input netdevice | 192 | * @in: input netdevice |
191 | * @out: output netdevice | 193 | * @out: output netdevice |
192 | * @match: struct xt_match through which this function was invoked | ||
193 | * @matchinfo: per-match data | ||
194 | * @fragoff: packet is a fragment, this is the data offset | 194 | * @fragoff: packet is a fragment, this is the data offset |
195 | * @thoff: position of transport header relative to skb->data | 195 | * @thoff: position of transport header relative to skb->data |
196 | * @hook: hook number given packet came from | 196 | * @hook: hook number given packet came from |
197 | * @family: Actual NFPROTO_* through which the function is invoked | 197 | * @family: Actual NFPROTO_* through which the function is invoked |
198 | * (helpful when match->family == NFPROTO_UNSPEC) | 198 | * (helpful when match->family == NFPROTO_UNSPEC) |
199 | * | ||
200 | * Fields written to by extensions: | ||
201 | * | ||
199 | * @hotdrop: drop packet if we had inspection problems | 202 | * @hotdrop: drop packet if we had inspection problems |
203 | * Network namespace obtainable using dev_net(in/out) | ||
200 | */ | 204 | */ |
201 | struct xt_match_param { | 205 | struct xt_action_param { |
206 | union { | ||
207 | const struct xt_match *match; | ||
208 | const struct xt_target *target; | ||
209 | }; | ||
210 | union { | ||
211 | const void *matchinfo, *targinfo; | ||
212 | }; | ||
202 | const struct net_device *in, *out; | 213 | const struct net_device *in, *out; |
203 | const struct xt_match *match; | ||
204 | const void *matchinfo; | ||
205 | int fragoff; | 214 | int fragoff; |
206 | unsigned int thoff; | 215 | unsigned int thoff; |
207 | unsigned int hooknum; | 216 | unsigned int hooknum; |
208 | u_int8_t family; | 217 | u_int8_t family; |
209 | bool *hotdrop; | 218 | bool hotdrop; |
210 | }; | 219 | }; |
211 | 220 | ||
212 | /** | 221 | /** |
213 | * struct xt_mtchk_param - parameters for match extensions' | 222 | * struct xt_mtchk_param - parameters for match extensions' |
214 | * checkentry functions | 223 | * checkentry functions |
215 | * | 224 | * |
225 | * @net: network namespace through which the check was invoked | ||
216 | * @table: table the rule is tried to be inserted into | 226 | * @table: table the rule is tried to be inserted into |
217 | * @entryinfo: the family-specific rule data | 227 | * @entryinfo: the family-specific rule data |
218 | * (struct ipt_ip, ip6t_ip, ebt_entry) | 228 | * (struct ipt_ip, ip6t_ip, arpt_arp or (note) ebt_entry) |
219 | * @match: struct xt_match through which this function was invoked | 229 | * @match: struct xt_match through which this function was invoked |
220 | * @matchinfo: per-match data | 230 | * @matchinfo: per-match data |
221 | * @hook_mask: via which hooks the new rule is reachable | 231 | * @hook_mask: via which hooks the new rule is reachable |
232 | * Other fields as above. | ||
222 | */ | 233 | */ |
223 | struct xt_mtchk_param { | 234 | struct xt_mtchk_param { |
224 | struct net *net; | 235 | struct net *net; |
@@ -230,7 +241,10 @@ struct xt_mtchk_param { | |||
230 | u_int8_t family; | 241 | u_int8_t family; |
231 | }; | 242 | }; |
232 | 243 | ||
233 | /* Match destructor parameters */ | 244 | /** |
245 | * struct xt_mdtor_param - match destructor parameters | ||
246 | * Fields as above. | ||
247 | */ | ||
234 | struct xt_mtdtor_param { | 248 | struct xt_mtdtor_param { |
235 | struct net *net; | 249 | struct net *net; |
236 | const struct xt_match *match; | 250 | const struct xt_match *match; |
@@ -239,23 +253,6 @@ struct xt_mtdtor_param { | |||
239 | }; | 253 | }; |
240 | 254 | ||
241 | /** | 255 | /** |
242 | * struct xt_target_param - parameters for target extensions' target functions | ||
243 | * | ||
244 | * @hooknum: hook through which this target was invoked | ||
245 | * @target: struct xt_target through which this function was invoked | ||
246 | * @targinfo: per-target data | ||
247 | * | ||
248 | * Other fields see above. | ||
249 | */ | ||
250 | struct xt_target_param { | ||
251 | const struct net_device *in, *out; | ||
252 | const struct xt_target *target; | ||
253 | const void *targinfo; | ||
254 | unsigned int hooknum; | ||
255 | u_int8_t family; | ||
256 | }; | ||
257 | |||
258 | /** | ||
259 | * struct xt_tgchk_param - parameters for target extensions' | 256 | * struct xt_tgchk_param - parameters for target extensions' |
260 | * checkentry functions | 257 | * checkentry functions |
261 | * | 258 | * |
@@ -285,7 +282,7 @@ struct xt_tgdtor_param { | |||
285 | struct xt_match { | 282 | struct xt_match { |
286 | struct list_head list; | 283 | struct list_head list; |
287 | 284 | ||
288 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | 285 | const char name[XT_EXTENSION_MAXNAMELEN]; |
289 | u_int8_t revision; | 286 | u_int8_t revision; |
290 | 287 | ||
291 | /* Return true or false: return FALSE and set *hotdrop = 1 to | 288 | /* Return true or false: return FALSE and set *hotdrop = 1 to |
@@ -294,10 +291,10 @@ struct xt_match { | |||
294 | non-linear skb, using skb_header_pointer and | 291 | non-linear skb, using skb_header_pointer and |
295 | skb_ip_make_writable. */ | 292 | skb_ip_make_writable. */ |
296 | bool (*match)(const struct sk_buff *skb, | 293 | bool (*match)(const struct sk_buff *skb, |
297 | const struct xt_match_param *); | 294 | struct xt_action_param *); |
298 | 295 | ||
299 | /* Called when user tries to insert an entry of this type. */ | 296 | /* Called when user tries to insert an entry of this type. */ |
300 | bool (*checkentry)(const struct xt_mtchk_param *); | 297 | int (*checkentry)(const struct xt_mtchk_param *); |
301 | 298 | ||
302 | /* Called when entry of this type deleted. */ | 299 | /* Called when entry of this type deleted. */ |
303 | void (*destroy)(const struct xt_mtdtor_param *); | 300 | void (*destroy)(const struct xt_mtdtor_param *); |
@@ -309,9 +306,6 @@ struct xt_match { | |||
309 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ | 306 | /* Set this to THIS_MODULE if you are a module, otherwise NULL */ |
310 | struct module *me; | 307 | struct module *me; |
311 | 308 | ||
312 | /* Free to use by each match */ | ||
313 | unsigned long data; | ||
314 | |||
315 | const char *table; | 309 | const char *table; |
316 | unsigned int matchsize; | 310 | unsigned int matchsize; |
317 | #ifdef CONFIG_COMPAT | 311 | #ifdef CONFIG_COMPAT |
@@ -327,19 +321,20 @@ struct xt_match { | |||
327 | struct xt_target { | 321 | struct xt_target { |
328 | struct list_head list; | 322 | struct list_head list; |
329 | 323 | ||
330 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | 324 | const char name[XT_EXTENSION_MAXNAMELEN]; |
325 | u_int8_t revision; | ||
331 | 326 | ||
332 | /* Returns verdict. Argument order changed since 2.6.9, as this | 327 | /* Returns verdict. Argument order changed since 2.6.9, as this |
333 | must now handle non-linear skbs, using skb_copy_bits and | 328 | must now handle non-linear skbs, using skb_copy_bits and |
334 | skb_ip_make_writable. */ | 329 | skb_ip_make_writable. */ |
335 | unsigned int (*target)(struct sk_buff *skb, | 330 | unsigned int (*target)(struct sk_buff *skb, |
336 | const struct xt_target_param *); | 331 | const struct xt_action_param *); |
337 | 332 | ||
338 | /* Called when user tries to insert an entry of this type: | 333 | /* Called when user tries to insert an entry of this type: |
339 | hook_mask is a bitmask of hooks from which it can be | 334 | hook_mask is a bitmask of hooks from which it can be |
340 | called. */ | 335 | called. */ |
341 | /* Should return true or false. */ | 336 | /* Should return true or false, or an error code (-Exxxx). */ |
342 | bool (*checkentry)(const struct xt_tgchk_param *); | 337 | int (*checkentry)(const struct xt_tgchk_param *); |
343 | 338 | ||
344 | /* Called when entry of this type deleted. */ | 339 | /* Called when entry of this type deleted. */ |
345 | void (*destroy)(const struct xt_tgdtor_param *); | 340 | void (*destroy)(const struct xt_tgdtor_param *); |
@@ -360,7 +355,6 @@ struct xt_target { | |||
360 | unsigned short proto; | 355 | unsigned short proto; |
361 | 356 | ||
362 | unsigned short family; | 357 | unsigned short family; |
363 | u_int8_t revision; | ||
364 | }; | 358 | }; |
365 | 359 | ||
366 | /* Furniture shopping... */ | 360 | /* Furniture shopping... */ |
@@ -398,6 +392,13 @@ struct xt_table_info { | |||
398 | unsigned int hook_entry[NF_INET_NUMHOOKS]; | 392 | unsigned int hook_entry[NF_INET_NUMHOOKS]; |
399 | unsigned int underflow[NF_INET_NUMHOOKS]; | 393 | unsigned int underflow[NF_INET_NUMHOOKS]; |
400 | 394 | ||
395 | /* | ||
396 | * Number of user chains. Since tables cannot have loops, at most | ||
397 | * @stacksize jumps (number of user chains) can possibly be made. | ||
398 | */ | ||
399 | unsigned int stacksize; | ||
400 | unsigned int *stackptr; | ||
401 | void ***jumpstack; | ||
401 | /* ipt_entry tables: one per CPU */ | 402 | /* ipt_entry tables: one per CPU */ |
402 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ | 403 | /* Note : this field MUST be the last one, see XT_TABLE_INFO_SZ */ |
403 | void *entries[1]; | 404 | void *entries[1]; |
@@ -433,6 +434,8 @@ extern struct xt_table_info *xt_replace_table(struct xt_table *table, | |||
433 | 434 | ||
434 | extern struct xt_match *xt_find_match(u8 af, const char *name, u8 revision); | 435 | extern struct xt_match *xt_find_match(u8 af, const char *name, u8 revision); |
435 | extern struct xt_target *xt_find_target(u8 af, const char *name, u8 revision); | 436 | extern struct xt_target *xt_find_target(u8 af, const char *name, u8 revision); |
437 | extern struct xt_match *xt_request_find_match(u8 af, const char *name, | ||
438 | u8 revision); | ||
436 | extern struct xt_target *xt_request_find_target(u8 af, const char *name, | 439 | extern struct xt_target *xt_request_find_target(u8 af, const char *name, |
437 | u8 revision); | 440 | u8 revision); |
438 | extern int xt_find_revision(u8 af, const char *name, u8 revision, | 441 | extern int xt_find_revision(u8 af, const char *name, u8 revision, |
@@ -598,7 +601,7 @@ struct _compat_xt_align { | |||
598 | compat_u64 u64; | 601 | compat_u64 u64; |
599 | }; | 602 | }; |
600 | 603 | ||
601 | #define COMPAT_XT_ALIGN(s) ALIGN((s), __alignof__(struct _compat_xt_align)) | 604 | #define COMPAT_XT_ALIGN(s) __ALIGN_KERNEL((s), __alignof__(struct _compat_xt_align)) |
602 | 605 | ||
603 | extern void xt_compat_lock(u_int8_t af); | 606 | extern void xt_compat_lock(u_int8_t af); |
604 | extern void xt_compat_unlock(u_int8_t af); | 607 | extern void xt_compat_unlock(u_int8_t af); |
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h index 0a8545866752..2f2e48ec8023 100644 --- a/include/linux/netfilter/xt_CONNMARK.h +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
@@ -1,26 +1,6 @@ | |||
1 | #ifndef _XT_CONNMARK_H_target | 1 | #ifndef _XT_CONNMARK_H_target |
2 | #define _XT_CONNMARK_H_target | 2 | #define _XT_CONNMARK_H_target |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/netfilter/xt_connmark.h> |
5 | |||
6 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
7 | * by Henrik Nordstrom <hno@marasystems.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | */ | ||
14 | |||
15 | enum { | ||
16 | XT_CONNMARK_SET = 0, | ||
17 | XT_CONNMARK_SAVE, | ||
18 | XT_CONNMARK_RESTORE | ||
19 | }; | ||
20 | |||
21 | struct xt_connmark_tginfo1 { | ||
22 | __u32 ctmark, ctmask, nfmask; | ||
23 | __u8 mode; | ||
24 | }; | ||
25 | 5 | ||
26 | #endif /*_XT_CONNMARK_H_target*/ | 6 | #endif /*_XT_CONNMARK_H_target*/ |
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h index bc9561bdef79..41c456deba22 100644 --- a/include/linux/netfilter/xt_MARK.h +++ b/include/linux/netfilter/xt_MARK.h | |||
@@ -1,10 +1,6 @@ | |||
1 | #ifndef _XT_MARK_H_target | 1 | #ifndef _XT_MARK_H_target |
2 | #define _XT_MARK_H_target | 2 | #define _XT_MARK_H_target |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/netfilter/xt_mark.h> |
5 | |||
6 | struct xt_mark_tginfo2 { | ||
7 | __u32 mark, mask; | ||
8 | }; | ||
9 | 5 | ||
10 | #endif /*_XT_MARK_H_target */ | 6 | #endif /*_XT_MARK_H_target */ |
diff --git a/include/linux/netfilter/xt_TEE.h b/include/linux/netfilter/xt_TEE.h new file mode 100644 index 000000000000..5c21d5c829af --- /dev/null +++ b/include/linux/netfilter/xt_TEE.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _XT_TEE_TARGET_H | ||
2 | #define _XT_TEE_TARGET_H | ||
3 | |||
4 | struct xt_tee_tginfo { | ||
5 | union nf_inet_addr gw; | ||
6 | char oif[16]; | ||
7 | |||
8 | /* used internally by the kernel */ | ||
9 | struct xt_tee_priv *priv __attribute__((aligned(8))); | ||
10 | }; | ||
11 | |||
12 | #endif /* _XT_TEE_TARGET_H */ | ||
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h index 619e47cde01a..efc17a8305fb 100644 --- a/include/linux/netfilter/xt_connmark.h +++ b/include/linux/netfilter/xt_connmark.h | |||
@@ -12,6 +12,17 @@ | |||
12 | * (at your option) any later version. | 12 | * (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | enum { | ||
16 | XT_CONNMARK_SET = 0, | ||
17 | XT_CONNMARK_SAVE, | ||
18 | XT_CONNMARK_RESTORE | ||
19 | }; | ||
20 | |||
21 | struct xt_connmark_tginfo1 { | ||
22 | __u32 ctmark, ctmask, nfmask; | ||
23 | __u8 mode; | ||
24 | }; | ||
25 | |||
15 | struct xt_connmark_mtinfo1 { | 26 | struct xt_connmark_mtinfo1 { |
16 | __u32 mark, mask; | 27 | __u32 mark, mask; |
17 | __u8 invert; | 28 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index 6607c8f38ea5..ecadc40d5cde 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -3,6 +3,10 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | struct xt_mark_tginfo2 { | ||
7 | __u32 mark, mask; | ||
8 | }; | ||
9 | |||
6 | struct xt_mark_mtinfo1 { | 10 | struct xt_mark_mtinfo1 { |
7 | __u32 mark, mask; | 11 | __u32 mark, mask; |
8 | __u8 invert; | 12 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_recent.h b/include/linux/netfilter/xt_recent.h index d2c276609925..83318e01425e 100644 --- a/include/linux/netfilter/xt_recent.h +++ b/include/linux/netfilter/xt_recent.h | |||
@@ -9,6 +9,7 @@ enum { | |||
9 | XT_RECENT_UPDATE = 1 << 2, | 9 | XT_RECENT_UPDATE = 1 << 2, |
10 | XT_RECENT_REMOVE = 1 << 3, | 10 | XT_RECENT_REMOVE = 1 << 3, |
11 | XT_RECENT_TTL = 1 << 4, | 11 | XT_RECENT_TTL = 1 << 4, |
12 | XT_RECENT_REAP = 1 << 5, | ||
12 | 13 | ||
13 | XT_RECENT_SOURCE = 0, | 14 | XT_RECENT_SOURCE = 0, |
14 | XT_RECENT_DEST = 1, | 15 | XT_RECENT_DEST = 1, |
@@ -16,6 +17,12 @@ enum { | |||
16 | XT_RECENT_NAME_LEN = 200, | 17 | XT_RECENT_NAME_LEN = 200, |
17 | }; | 18 | }; |
18 | 19 | ||
20 | /* Only allowed with --rcheck and --update */ | ||
21 | #define XT_RECENT_MODIFIERS (XT_RECENT_TTL|XT_RECENT_REAP) | ||
22 | |||
23 | #define XT_RECENT_VALID_FLAGS (XT_RECENT_CHECK|XT_RECENT_SET|XT_RECENT_UPDATE|\ | ||
24 | XT_RECENT_REMOVE|XT_RECENT_TTL|XT_RECENT_REAP) | ||
25 | |||
19 | struct xt_recent_mtinfo { | 26 | struct xt_recent_mtinfo { |
20 | __u32 seconds; | 27 | __u32 seconds; |
21 | __u32 hit_count; | 28 | __u32 hit_count; |
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h index f8105e54716a..0ddd161f3b06 100644 --- a/include/linux/netfilter_bridge.h +++ b/include/linux/netfilter_bridge.h | |||
@@ -41,10 +41,10 @@ enum nf_br_hook_priorities { | |||
41 | 41 | ||
42 | #define BRNF_PKT_TYPE 0x01 | 42 | #define BRNF_PKT_TYPE 0x01 |
43 | #define BRNF_BRIDGED_DNAT 0x02 | 43 | #define BRNF_BRIDGED_DNAT 0x02 |
44 | #define BRNF_DONT_TAKE_PARENT 0x04 | 44 | #define BRNF_BRIDGED 0x04 |
45 | #define BRNF_BRIDGED 0x08 | 45 | #define BRNF_NF_BRIDGE_PREROUTING 0x08 |
46 | #define BRNF_NF_BRIDGE_PREROUTING 0x10 | 46 | #define BRNF_8021Q 0x10 |
47 | 47 | #define BRNF_PPPoE 0x20 | |
48 | 48 | ||
49 | /* Only used in br_forward.c */ | 49 | /* Only used in br_forward.c */ |
50 | extern int nf_bridge_copy_header(struct sk_buff *skb); | 50 | extern int nf_bridge_copy_header(struct sk_buff *skb); |
@@ -68,6 +68,27 @@ static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) | |||
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
71 | static inline unsigned int nf_bridge_mtu_reduction(const struct sk_buff *skb) | ||
72 | { | ||
73 | if (unlikely(skb->nf_bridge->mask & BRNF_PPPoE)) | ||
74 | return PPPOE_SES_HLEN; | ||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | extern int br_handle_frame_finish(struct sk_buff *skb); | ||
79 | /* Only used in br_device.c */ | ||
80 | static inline int br_nf_pre_routing_finish_bridge_slow(struct sk_buff *skb) | ||
81 | { | ||
82 | struct nf_bridge_info *nf_bridge = skb->nf_bridge; | ||
83 | |||
84 | skb_pull(skb, ETH_HLEN); | ||
85 | nf_bridge->mask ^= BRNF_BRIDGED_DNAT; | ||
86 | skb_copy_to_linear_data_offset(skb, -(ETH_HLEN-ETH_ALEN), | ||
87 | skb->nf_bridge->data, ETH_HLEN-ETH_ALEN); | ||
88 | skb->dev = nf_bridge->physindev; | ||
89 | return br_handle_frame_finish(skb); | ||
90 | } | ||
91 | |||
71 | /* This is called by the IP fragmenting code and it ensures there is | 92 | /* This is called by the IP fragmenting code and it ensures there is |
72 | * enough room for the encapsulating header (if there is one). */ | 93 | * enough room for the encapsulating header (if there is one). */ |
73 | static inline unsigned int nf_bridge_pad(const struct sk_buff *skb) | 94 | static inline unsigned int nf_bridge_pad(const struct sk_buff *skb) |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index e5ba03d783c6..18442ff19c07 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
@@ -316,10 +316,6 @@ extern int ip6t_ext_hdr(u8 nexthdr); | |||
316 | extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, | 316 | extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, |
317 | int target, unsigned short *fragoff); | 317 | int target, unsigned short *fragoff); |
318 | 318 | ||
319 | extern int ip6_masked_addrcmp(const struct in6_addr *addr1, | ||
320 | const struct in6_addr *mask, | ||
321 | const struct in6_addr *addr2); | ||
322 | |||
323 | #define IP6T_ALIGN(s) XT_ALIGN(s) | 319 | #define IP6T_ALIGN(s) XT_ALIGN(s) |
324 | 320 | ||
325 | #ifdef CONFIG_COMPAT | 321 | #ifdef CONFIG_COMPAT |
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 6eaca5e1e8ca..59d066936ab9 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -188,6 +188,10 @@ extern int netlink_has_listeners(struct sock *sk, unsigned int group); | |||
188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); | 188 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); |
189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, | 189 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, |
190 | __u32 group, gfp_t allocation); | 190 | __u32 group, gfp_t allocation); |
191 | extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, | ||
192 | __u32 pid, __u32 group, gfp_t allocation, | ||
193 | int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data), | ||
194 | void *filter_data); | ||
191 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); | 195 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); |
192 | extern int netlink_register_notifier(struct notifier_block *nb); | 196 | extern int netlink_register_notifier(struct notifier_block *nb); |
193 | extern int netlink_unregister_notifier(struct notifier_block *nb); | 197 | extern int netlink_unregister_notifier(struct notifier_block *nb); |
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index a765ea898549..e9e231215865 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | struct netpoll { | 15 | struct netpoll { |
16 | struct net_device *dev; | 16 | struct net_device *dev; |
17 | struct net_device *real_dev; | ||
17 | char dev_name[IFNAMSIZ]; | 18 | char dev_name[IFNAMSIZ]; |
18 | const char *name; | 19 | const char *name; |
19 | void (*rx_hook)(struct netpoll *, int, char *, int); | 20 | void (*rx_hook)(struct netpoll *, int, char *, int); |
@@ -36,8 +37,11 @@ struct netpoll_info { | |||
36 | struct sk_buff_head txq; | 37 | struct sk_buff_head txq; |
37 | 38 | ||
38 | struct delayed_work tx_work; | 39 | struct delayed_work tx_work; |
40 | |||
41 | struct netpoll *netpoll; | ||
39 | }; | 42 | }; |
40 | 43 | ||
44 | void netpoll_poll_dev(struct net_device *dev); | ||
41 | void netpoll_poll(struct netpoll *np); | 45 | void netpoll_poll(struct netpoll *np); |
42 | void netpoll_send_udp(struct netpoll *np, const char *msg, int len); | 46 | void netpoll_send_udp(struct netpoll *np, const char *msg, int len); |
43 | void netpoll_print_options(struct netpoll *np); | 47 | void netpoll_print_options(struct netpoll *np); |
@@ -47,22 +51,23 @@ int netpoll_trap(void); | |||
47 | void netpoll_set_trap(int trap); | 51 | void netpoll_set_trap(int trap); |
48 | void netpoll_cleanup(struct netpoll *np); | 52 | void netpoll_cleanup(struct netpoll *np); |
49 | int __netpoll_rx(struct sk_buff *skb); | 53 | int __netpoll_rx(struct sk_buff *skb); |
54 | void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); | ||
50 | 55 | ||
51 | 56 | ||
52 | #ifdef CONFIG_NETPOLL | 57 | #ifdef CONFIG_NETPOLL |
53 | static inline int netpoll_rx(struct sk_buff *skb) | 58 | static inline bool netpoll_rx(struct sk_buff *skb) |
54 | { | 59 | { |
55 | struct netpoll_info *npinfo = skb->dev->npinfo; | 60 | struct netpoll_info *npinfo = skb->dev->npinfo; |
56 | unsigned long flags; | 61 | unsigned long flags; |
57 | int ret = 0; | 62 | bool ret = false; |
58 | 63 | ||
59 | if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags)) | 64 | if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags)) |
60 | return 0; | 65 | return false; |
61 | 66 | ||
62 | spin_lock_irqsave(&npinfo->rx_lock, flags); | 67 | spin_lock_irqsave(&npinfo->rx_lock, flags); |
63 | /* check rx_flags again with the lock held */ | 68 | /* check rx_flags again with the lock held */ |
64 | if (npinfo->rx_flags && __netpoll_rx(skb)) | 69 | if (npinfo->rx_flags && __netpoll_rx(skb)) |
65 | ret = 1; | 70 | ret = true; |
66 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); | 71 | spin_unlock_irqrestore(&npinfo->rx_lock, flags); |
67 | 72 | ||
68 | return ret; | 73 | return ret; |
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h index 640702e97457..8c2c6116e788 100644 --- a/include/linux/nilfs2_fs.h +++ b/include/linux/nilfs2_fs.h | |||
@@ -199,16 +199,15 @@ struct nilfs_super_block { | |||
199 | __le32 s_creator_os; /* OS */ | 199 | __le32 s_creator_os; /* OS */ |
200 | __le16 s_def_resuid; /* Default uid for reserved blocks */ | 200 | __le16 s_def_resuid; /* Default uid for reserved blocks */ |
201 | __le16 s_def_resgid; /* Default gid for reserved blocks */ | 201 | __le16 s_def_resgid; /* Default gid for reserved blocks */ |
202 | __le32 s_first_ino; /* First non-reserved inode */ | 202 | __le32 s_first_ino; /* First non-reserved inode */ |
203 | 203 | ||
204 | __le16 s_inode_size; /* Size of an inode */ | 204 | __le16 s_inode_size; /* Size of an inode */ |
205 | __le16 s_dat_entry_size; /* Size of a dat entry */ | 205 | __le16 s_dat_entry_size; /* Size of a dat entry */ |
206 | __le16 s_checkpoint_size; /* Size of a checkpoint */ | 206 | __le16 s_checkpoint_size; /* Size of a checkpoint */ |
207 | __le16 s_segment_usage_size; /* Size of a segment usage */ | 207 | __le16 s_segment_usage_size; /* Size of a segment usage */ |
208 | 208 | ||
209 | __u8 s_uuid[16]; /* 128-bit uuid for volume */ | 209 | __u8 s_uuid[16]; /* 128-bit uuid for volume */ |
210 | char s_volume_name[16]; /* volume name */ | 210 | char s_volume_name[80]; /* volume name */ |
211 | char s_last_mounted[64]; /* directory where last mounted */ | ||
212 | 211 | ||
213 | __le32 s_c_interval; /* Commit interval of segment */ | 212 | __le32 s_c_interval; /* Commit interval of segment */ |
214 | __le32 s_c_block_max; /* Threshold of data amount for | 213 | __le32 s_c_block_max; /* Threshold of data amount for |
@@ -377,6 +376,7 @@ union nilfs_binfo { | |||
377 | * @ss_nfinfo: number of finfo structures | 376 | * @ss_nfinfo: number of finfo structures |
378 | * @ss_sumbytes: total size of segment summary in bytes | 377 | * @ss_sumbytes: total size of segment summary in bytes |
379 | * @ss_pad: padding | 378 | * @ss_pad: padding |
379 | * @ss_cno: checkpoint number | ||
380 | */ | 380 | */ |
381 | struct nilfs_segment_summary { | 381 | struct nilfs_segment_summary { |
382 | __le32 ss_datasum; | 382 | __le32 ss_datasum; |
@@ -391,6 +391,7 @@ struct nilfs_segment_summary { | |||
391 | __le32 ss_nfinfo; | 391 | __le32 ss_nfinfo; |
392 | __le32 ss_sumbytes; | 392 | __le32 ss_sumbytes; |
393 | __le32 ss_pad; | 393 | __le32 ss_pad; |
394 | __le64 ss_cno; | ||
394 | /* array of finfo structures */ | 395 | /* array of finfo structures */ |
395 | }; | 396 | }; |
396 | 397 | ||
@@ -437,10 +438,10 @@ struct nilfs_palloc_group_desc { | |||
437 | 438 | ||
438 | /** | 439 | /** |
439 | * struct nilfs_dat_entry - disk address translation entry | 440 | * struct nilfs_dat_entry - disk address translation entry |
440 | * @dt_blocknr: block number | 441 | * @de_blocknr: block number |
441 | * @dt_start: start checkpoint number | 442 | * @de_start: start checkpoint number |
442 | * @dt_end: end checkpoint number | 443 | * @de_end: end checkpoint number |
443 | * @dt_rsv: reserved for future use | 444 | * @de_rsv: reserved for future use |
444 | */ | 445 | */ |
445 | struct nilfs_dat_entry { | 446 | struct nilfs_dat_entry { |
446 | __le64 de_blocknr; | 447 | __le64 de_blocknr; |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 28ba20fda3e2..b7c77f9712f4 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -52,6 +52,8 @@ | |||
52 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, | 52 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, |
53 | * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | 53 | * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, |
54 | * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. | 54 | * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. |
55 | * However, for setting the channel, see %NL80211_CMD_SET_CHANNEL | ||
56 | * instead, the support here is for backward compatibility only. | ||
55 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request | 57 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request |
56 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and | 58 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and |
57 | * %NL80211_ATTR_WIPHY_NAME. | 59 | * %NL80211_ATTR_WIPHY_NAME. |
@@ -323,6 +325,21 @@ | |||
323 | * the TX command and %NL80211_ATTR_FRAME includes the contents of the | 325 | * the TX command and %NL80211_ATTR_FRAME includes the contents of the |
324 | * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged | 326 | * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged |
325 | * the frame. | 327 | * the frame. |
328 | * @NL80211_CMD_SET_CQM: Connection quality monitor configuration. This command | ||
329 | * is used to configure connection quality monitoring notification trigger | ||
330 | * levels. | ||
331 | * @NL80211_CMD_NOTIFY_CQM: Connection quality monitor notification. This | ||
332 | * command is used as an event to indicate the that a trigger level was | ||
333 | * reached. | ||
334 | * @NL80211_CMD_SET_CHANNEL: Set the channel (using %NL80211_ATTR_WIPHY_FREQ | ||
335 | * and %NL80211_ATTR_WIPHY_CHANNEL_TYPE) the given interface (identifed | ||
336 | * by %NL80211_ATTR_IFINDEX) shall operate on. | ||
337 | * In case multiple channels are supported by the device, the mechanism | ||
338 | * with which it switches channels is implementation-defined. | ||
339 | * When a monitor interface is given, it can only switch channel while | ||
340 | * no other interfaces are operating to avoid disturbing the operation | ||
341 | * of any other interfaces, and other interfaces will again take | ||
342 | * precedence when they are used. | ||
326 | * | 343 | * |
327 | * @NL80211_CMD_MAX: highest used command number | 344 | * @NL80211_CMD_MAX: highest used command number |
328 | * @__NL80211_CMD_AFTER_LAST: internal use | 345 | * @__NL80211_CMD_AFTER_LAST: internal use |
@@ -419,6 +436,11 @@ enum nl80211_commands { | |||
419 | NL80211_CMD_SET_POWER_SAVE, | 436 | NL80211_CMD_SET_POWER_SAVE, |
420 | NL80211_CMD_GET_POWER_SAVE, | 437 | NL80211_CMD_GET_POWER_SAVE, |
421 | 438 | ||
439 | NL80211_CMD_SET_CQM, | ||
440 | NL80211_CMD_NOTIFY_CQM, | ||
441 | |||
442 | NL80211_CMD_SET_CHANNEL, | ||
443 | |||
422 | /* add new commands above here */ | 444 | /* add new commands above here */ |
423 | 445 | ||
424 | /* used to define NL80211_CMD_MAX below */ | 446 | /* used to define NL80211_CMD_MAX below */ |
@@ -691,6 +713,18 @@ enum nl80211_commands { | |||
691 | * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was | 713 | * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was |
692 | * acknowledged by the recipient. | 714 | * acknowledged by the recipient. |
693 | * | 715 | * |
716 | * @NL80211_ATTR_CQM: connection quality monitor configuration in a | ||
717 | * nested attribute with %NL80211_ATTR_CQM_* sub-attributes. | ||
718 | * | ||
719 | * @NL80211_ATTR_LOCAL_STATE_CHANGE: Flag attribute to indicate that a command | ||
720 | * is requesting a local authentication/association state change without | ||
721 | * invoking actual management frame exchange. This can be used with | ||
722 | * NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE, | ||
723 | * NL80211_CMD_DISASSOCIATE. | ||
724 | * | ||
725 | * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations | ||
726 | * connected to this BSS. | ||
727 | * | ||
694 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 728 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
695 | * @__NL80211_ATTR_AFTER_LAST: internal use | 729 | * @__NL80211_ATTR_AFTER_LAST: internal use |
696 | */ | 730 | */ |
@@ -842,6 +876,12 @@ enum nl80211_attrs { | |||
842 | 876 | ||
843 | NL80211_ATTR_PS_STATE, | 877 | NL80211_ATTR_PS_STATE, |
844 | 878 | ||
879 | NL80211_ATTR_CQM, | ||
880 | |||
881 | NL80211_ATTR_LOCAL_STATE_CHANGE, | ||
882 | |||
883 | NL80211_ATTR_AP_ISOLATE, | ||
884 | |||
845 | /* add attributes here, update the policy in nl80211.c */ | 885 | /* add attributes here, update the policy in nl80211.c */ |
846 | 886 | ||
847 | __NL80211_ATTR_AFTER_LAST, | 887 | __NL80211_ATTR_AFTER_LAST, |
@@ -1583,4 +1623,40 @@ enum nl80211_ps_state { | |||
1583 | NL80211_PS_ENABLED, | 1623 | NL80211_PS_ENABLED, |
1584 | }; | 1624 | }; |
1585 | 1625 | ||
1626 | /** | ||
1627 | * enum nl80211_attr_cqm - connection quality monitor attributes | ||
1628 | * @__NL80211_ATTR_CQM_INVALID: invalid | ||
1629 | * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies | ||
1630 | * the threshold for the RSSI level at which an event will be sent. Zero | ||
1631 | * to disable. | ||
1632 | * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies | ||
1633 | * the minimum amount the RSSI level must change after an event before a | ||
1634 | * new event may be issued (to reduce effects of RSSI oscillation). | ||
1635 | * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event | ||
1636 | * @__NL80211_ATTR_CQM_AFTER_LAST: internal | ||
1637 | * @NL80211_ATTR_CQM_MAX: highest key attribute | ||
1638 | */ | ||
1639 | enum nl80211_attr_cqm { | ||
1640 | __NL80211_ATTR_CQM_INVALID, | ||
1641 | NL80211_ATTR_CQM_RSSI_THOLD, | ||
1642 | NL80211_ATTR_CQM_RSSI_HYST, | ||
1643 | NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, | ||
1644 | |||
1645 | /* keep last */ | ||
1646 | __NL80211_ATTR_CQM_AFTER_LAST, | ||
1647 | NL80211_ATTR_CQM_MAX = __NL80211_ATTR_CQM_AFTER_LAST - 1 | ||
1648 | }; | ||
1649 | |||
1650 | /** | ||
1651 | * enum nl80211_cqm_rssi_threshold_event - RSSI threshold event | ||
1652 | * @NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW - The RSSI level is lower than the | ||
1653 | * configured threshold | ||
1654 | * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH - The RSSI is higher than the | ||
1655 | * configured threshold | ||
1656 | */ | ||
1657 | enum nl80211_cqm_rssi_threshold_event { | ||
1658 | NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, | ||
1659 | NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH, | ||
1660 | }; | ||
1661 | |||
1586 | #endif /* __LINUX_NL80211_H */ | 1662 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index fee6c2f68075..7c3609622334 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -182,7 +182,10 @@ static inline int notifier_to_errno(int ret) | |||
182 | * VC switch chains (for loadable kernel svgalib VC switch helpers) etc... | 182 | * VC switch chains (for loadable kernel svgalib VC switch helpers) etc... |
183 | */ | 183 | */ |
184 | 184 | ||
185 | /* netdevice notifier chain */ | 185 | /* netdevice notifier chain. Please remember to update the rtnetlink |
186 | * notification exclusion list in rtnetlink_event() when adding new | ||
187 | * types. | ||
188 | */ | ||
186 | #define NETDEV_UP 0x0001 /* For now you can't veto a device up/down */ | 189 | #define NETDEV_UP 0x0001 /* For now you can't veto a device up/down */ |
187 | #define NETDEV_DOWN 0x0002 | 190 | #define NETDEV_DOWN 0x0002 |
188 | #define NETDEV_REBOOT 0x0003 /* Tell a protocol stack a network interface | 191 | #define NETDEV_REBOOT 0x0003 /* Tell a protocol stack a network interface |
@@ -199,10 +202,11 @@ static inline int notifier_to_errno(int ret) | |||
199 | #define NETDEV_FEAT_CHANGE 0x000B | 202 | #define NETDEV_FEAT_CHANGE 0x000B |
200 | #define NETDEV_BONDING_FAILOVER 0x000C | 203 | #define NETDEV_BONDING_FAILOVER 0x000C |
201 | #define NETDEV_PRE_UP 0x000D | 204 | #define NETDEV_PRE_UP 0x000D |
202 | #define NETDEV_BONDING_OLDTYPE 0x000E | 205 | #define NETDEV_PRE_TYPE_CHANGE 0x000E |
203 | #define NETDEV_BONDING_NEWTYPE 0x000F | 206 | #define NETDEV_POST_TYPE_CHANGE 0x000F |
204 | #define NETDEV_POST_INIT 0x0010 | 207 | #define NETDEV_POST_INIT 0x0010 |
205 | #define NETDEV_UNREGISTER_BATCH 0x0011 | 208 | #define NETDEV_UNREGISTER_BATCH 0x0011 |
209 | #define NETDEV_BONDING_DESLAVE 0x0012 | ||
206 | 210 | ||
207 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 211 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
208 | #define SYS_RESTART SYS_DOWN | 212 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index c8f302991b66..c4c3d68be19a 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -442,7 +442,10 @@ | |||
442 | #define PCI_EXP_LNKCTL_LABIE 0x0800 /* Lnk Autonomous Bandwidth Interrupt Enable */ | 442 | #define PCI_EXP_LNKCTL_LABIE 0x0800 /* Lnk Autonomous Bandwidth Interrupt Enable */ |
443 | #define PCI_EXP_LNKSTA 18 /* Link Status */ | 443 | #define PCI_EXP_LNKSTA 18 /* Link Status */ |
444 | #define PCI_EXP_LNKSTA_CLS 0x000f /* Current Link Speed */ | 444 | #define PCI_EXP_LNKSTA_CLS 0x000f /* Current Link Speed */ |
445 | #define PCI_EXP_LNKSTA_CLS_2_5GB 0x01 /* Current Link Speed 2.5GT/s */ | ||
446 | #define PCI_EXP_LNKSTA_CLS_5_0GB 0x02 /* Current Link Speed 5.0GT/s */ | ||
445 | #define PCI_EXP_LNKSTA_NLW 0x03f0 /* Nogotiated Link Width */ | 447 | #define PCI_EXP_LNKSTA_NLW 0x03f0 /* Nogotiated Link Width */ |
448 | #define PCI_EXP_LNKSTA_NLW_SHIFT 4 /* start of NLW mask in link status */ | ||
446 | #define PCI_EXP_LNKSTA_LT 0x0800 /* Link Training */ | 449 | #define PCI_EXP_LNKSTA_LT 0x0800 /* Link Training */ |
447 | #define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */ | 450 | #define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */ |
448 | #define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */ | 451 | #define PCI_EXP_LNKSTA_DLLLA 0x2000 /* Data Link Layer Link Active */ |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 14d7fdf6a90a..987e111f7b11 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/mii.h> | 24 | #include <linux/mii.h> |
25 | #include <linux/timer.h> | 25 | #include <linux/timer.h> |
26 | #include <linux/workqueue.h> | 26 | #include <linux/workqueue.h> |
27 | #include <linux/mod_devicetable.h> | ||
27 | 28 | ||
28 | #include <asm/atomic.h> | 29 | #include <asm/atomic.h> |
29 | 30 | ||
@@ -81,6 +82,10 @@ typedef enum { | |||
81 | */ | 82 | */ |
82 | #define MII_BUS_ID_SIZE (20 - 3) | 83 | #define MII_BUS_ID_SIZE (20 - 3) |
83 | 84 | ||
85 | /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit | ||
86 | IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */ | ||
87 | #define MII_ADDR_C45 (1<<30) | ||
88 | |||
84 | /* | 89 | /* |
85 | * The Bus class for PHYs. Devices which provide access to | 90 | * The Bus class for PHYs. Devices which provide access to |
86 | * PHYs should register using this structure | 91 | * PHYs should register using this structure |
@@ -127,8 +132,8 @@ int mdiobus_register(struct mii_bus *bus); | |||
127 | void mdiobus_unregister(struct mii_bus *bus); | 132 | void mdiobus_unregister(struct mii_bus *bus); |
128 | void mdiobus_free(struct mii_bus *bus); | 133 | void mdiobus_free(struct mii_bus *bus); |
129 | struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr); | 134 | struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr); |
130 | int mdiobus_read(struct mii_bus *bus, int addr, u16 regnum); | 135 | int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); |
131 | int mdiobus_write(struct mii_bus *bus, int addr, u16 regnum, u16 val); | 136 | int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); |
132 | 137 | ||
133 | 138 | ||
134 | #define PHY_INTERRUPT_DISABLED 0x0 | 139 | #define PHY_INTERRUPT_DISABLED 0x0 |
@@ -422,7 +427,7 @@ struct phy_fixup { | |||
422 | * because the bus read/write functions may wait for an interrupt | 427 | * because the bus read/write functions may wait for an interrupt |
423 | * to conclude the operation. | 428 | * to conclude the operation. |
424 | */ | 429 | */ |
425 | static inline int phy_read(struct phy_device *phydev, u16 regnum) | 430 | static inline int phy_read(struct phy_device *phydev, u32 regnum) |
426 | { | 431 | { |
427 | return mdiobus_read(phydev->bus, phydev->addr, regnum); | 432 | return mdiobus_read(phydev->bus, phydev->addr, regnum); |
428 | } | 433 | } |
@@ -437,7 +442,7 @@ static inline int phy_read(struct phy_device *phydev, u16 regnum) | |||
437 | * because the bus read/write functions may wait for an interrupt | 442 | * because the bus read/write functions may wait for an interrupt |
438 | * to conclude the operation. | 443 | * to conclude the operation. |
439 | */ | 444 | */ |
440 | static inline int phy_write(struct phy_device *phydev, u16 regnum, u16 val) | 445 | static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val) |
441 | { | 446 | { |
442 | return mdiobus_write(phydev->bus, phydev->addr, regnum, val); | 447 | return mdiobus_write(phydev->bus, phydev->addr, regnum, val); |
443 | } | 448 | } |
diff --git a/include/linux/ppp_channel.h b/include/linux/ppp_channel.h index 0d3fa63e90ea..bff98ec1bfed 100644 --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h | |||
@@ -72,6 +72,9 @@ extern int ppp_channel_index(struct ppp_channel *); | |||
72 | /* Get the unit number associated with a channel, or -1 if none */ | 72 | /* Get the unit number associated with a channel, or -1 if none */ |
73 | extern int ppp_unit_number(struct ppp_channel *); | 73 | extern int ppp_unit_number(struct ppp_channel *); |
74 | 74 | ||
75 | /* Get the device name associated with a channel, or NULL if none */ | ||
76 | extern char *ppp_dev_name(struct ppp_channel *); | ||
77 | |||
75 | /* | 78 | /* |
76 | * SMP locking notes: | 79 | * SMP locking notes: |
77 | * The channel code must ensure that when it calls ppp_unregister_channel, | 80 | * The channel code must ensure that when it calls ppp_unregister_channel, |
diff --git a/include/linux/quota.h b/include/linux/quota.h index b462916b2a0a..7126a15467f1 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
@@ -174,6 +174,8 @@ enum { | |||
174 | #include <linux/rwsem.h> | 174 | #include <linux/rwsem.h> |
175 | #include <linux/spinlock.h> | 175 | #include <linux/spinlock.h> |
176 | #include <linux/wait.h> | 176 | #include <linux/wait.h> |
177 | #include <linux/percpu.h> | ||
178 | #include <linux/smp.h> | ||
177 | 179 | ||
178 | #include <linux/dqblk_xfs.h> | 180 | #include <linux/dqblk_xfs.h> |
179 | #include <linux/dqblk_v1.h> | 181 | #include <linux/dqblk_v1.h> |
@@ -238,19 +240,43 @@ static inline int info_dirty(struct mem_dqinfo *info) | |||
238 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); | 240 | return test_bit(DQF_INFO_DIRTY_B, &info->dqi_flags); |
239 | } | 241 | } |
240 | 242 | ||
243 | enum { | ||
244 | DQST_LOOKUPS, | ||
245 | DQST_DROPS, | ||
246 | DQST_READS, | ||
247 | DQST_WRITES, | ||
248 | DQST_CACHE_HITS, | ||
249 | DQST_ALLOC_DQUOTS, | ||
250 | DQST_FREE_DQUOTS, | ||
251 | DQST_SYNCS, | ||
252 | _DQST_DQSTAT_LAST | ||
253 | }; | ||
254 | |||
241 | struct dqstats { | 255 | struct dqstats { |
242 | int lookups; | 256 | int stat[_DQST_DQSTAT_LAST]; |
243 | int drops; | ||
244 | int reads; | ||
245 | int writes; | ||
246 | int cache_hits; | ||
247 | int allocated_dquots; | ||
248 | int free_dquots; | ||
249 | int syncs; | ||
250 | }; | 257 | }; |
251 | 258 | ||
259 | extern struct dqstats *dqstats_pcpu; | ||
252 | extern struct dqstats dqstats; | 260 | extern struct dqstats dqstats; |
253 | 261 | ||
262 | static inline void dqstats_inc(unsigned int type) | ||
263 | { | ||
264 | #ifdef CONFIG_SMP | ||
265 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]++; | ||
266 | #else | ||
267 | dqstats.stat[type]++; | ||
268 | #endif | ||
269 | } | ||
270 | |||
271 | static inline void dqstats_dec(unsigned int type) | ||
272 | { | ||
273 | #ifdef CONFIG_SMP | ||
274 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]--; | ||
275 | #else | ||
276 | dqstats.stat[type]--; | ||
277 | #endif | ||
278 | } | ||
279 | |||
254 | #define DQ_MOD_B 0 /* dquot modified since read */ | 280 | #define DQ_MOD_B 0 /* dquot modified since read */ |
255 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ | 281 | #define DQ_BLKS_B 1 /* uid/gid has been warned about blk limit */ |
256 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ | 282 | #define DQ_INODES_B 2 /* uid/gid has been warned about inode limit */ |
@@ -311,12 +337,10 @@ struct quotactl_ops { | |||
311 | int (*quota_sync)(struct super_block *, int, int); | 337 | int (*quota_sync)(struct super_block *, int, int); |
312 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); | 338 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
313 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); | 339 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
314 | int (*get_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 340 | int (*get_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
315 | int (*set_dqblk)(struct super_block *, int, qid_t, struct if_dqblk *); | 341 | int (*set_dqblk)(struct super_block *, int, qid_t, struct fs_disk_quota *); |
316 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); | 342 | int (*get_xstate)(struct super_block *, struct fs_quota_stat *); |
317 | int (*set_xstate)(struct super_block *, unsigned int, int); | 343 | int (*set_xstate)(struct super_block *, unsigned int, int); |
318 | int (*get_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
319 | int (*set_xquota)(struct super_block *, int, qid_t, struct fs_disk_quota *); | ||
320 | }; | 344 | }; |
321 | 345 | ||
322 | struct quota_format_type { | 346 | struct quota_format_type { |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index e6fa7acce290..370abb1e99cb 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -14,6 +14,14 @@ static inline struct quota_info *sb_dqopt(struct super_block *sb) | |||
14 | return &sb->s_dquot; | 14 | return &sb->s_dquot; |
15 | } | 15 | } |
16 | 16 | ||
17 | /* i_mutex must being held */ | ||
18 | static inline bool is_quota_modification(struct inode *inode, struct iattr *ia) | ||
19 | { | ||
20 | return (ia->ia_valid & ATTR_SIZE && ia->ia_size != inode->i_size) || | ||
21 | (ia->ia_valid & ATTR_UID && ia->ia_uid != inode->i_uid) || | ||
22 | (ia->ia_valid & ATTR_GID && ia->ia_gid != inode->i_gid); | ||
23 | } | ||
24 | |||
17 | #if defined(CONFIG_QUOTA) | 25 | #if defined(CONFIG_QUOTA) |
18 | 26 | ||
19 | /* | 27 | /* |
@@ -63,9 +71,12 @@ int vfs_quota_disable(struct super_block *sb, int type, unsigned int flags); | |||
63 | int vfs_quota_sync(struct super_block *sb, int type, int wait); | 71 | int vfs_quota_sync(struct super_block *sb, int type, int wait); |
64 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 72 | int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
65 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 73 | int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
66 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 74 | int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, |
67 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di); | 75 | struct fs_disk_quota *di); |
76 | int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, | ||
77 | struct fs_disk_quota *di); | ||
68 | 78 | ||
79 | int __dquot_transfer(struct inode *inode, struct dquot **transfer_to); | ||
69 | int dquot_transfer(struct inode *inode, struct iattr *iattr); | 80 | int dquot_transfer(struct inode *inode, struct iattr *iattr); |
70 | int vfs_dq_quota_on_remount(struct super_block *sb); | 81 | int vfs_dq_quota_on_remount(struct super_block *sb); |
71 | 82 | ||
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index 4e768dda87b0..8600508c77a6 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
@@ -20,4 +20,6 @@ extern const struct file_operations ramfs_file_operations; | |||
20 | extern const struct vm_operations_struct generic_file_vm_ops; | 20 | extern const struct vm_operations_struct generic_file_vm_ops; |
21 | extern int __init init_rootfs(void); | 21 | extern int __init init_rootfs(void); |
22 | 22 | ||
23 | int ramfs_fill_super(struct super_block *sb, void *data, int silent); | ||
24 | |||
23 | #endif | 25 | #endif |
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index 2c9b46cff3d7..4ec3b38ce9c5 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
@@ -428,5 +428,47 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
428 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | 428 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ |
429 | pos = rcu_dereference_raw(pos->next)) | 429 | pos = rcu_dereference_raw(pos->next)) |
430 | 430 | ||
431 | /** | ||
432 | * hlist_for_each_entry_rcu_bh - iterate over rcu list of given type | ||
433 | * @tpos: the type * to use as a loop cursor. | ||
434 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
435 | * @head: the head for your list. | ||
436 | * @member: the name of the hlist_node within the struct. | ||
437 | * | ||
438 | * This list-traversal primitive may safely run concurrently with | ||
439 | * the _rcu list-mutation primitives such as hlist_add_head_rcu() | ||
440 | * as long as the traversal is guarded by rcu_read_lock(). | ||
441 | */ | ||
442 | #define hlist_for_each_entry_rcu_bh(tpos, pos, head, member) \ | ||
443 | for (pos = rcu_dereference_bh((head)->first); \ | ||
444 | pos && ({ prefetch(pos->next); 1; }) && \ | ||
445 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | ||
446 | pos = rcu_dereference_bh(pos->next)) | ||
447 | |||
448 | /** | ||
449 | * hlist_for_each_entry_continue_rcu - iterate over a hlist continuing after current point | ||
450 | * @tpos: the type * to use as a loop cursor. | ||
451 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
452 | * @member: the name of the hlist_node within the struct. | ||
453 | */ | ||
454 | #define hlist_for_each_entry_continue_rcu(tpos, pos, member) \ | ||
455 | for (pos = rcu_dereference((pos)->next); \ | ||
456 | pos && ({ prefetch(pos->next); 1; }) && \ | ||
457 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | ||
458 | pos = rcu_dereference(pos->next)) | ||
459 | |||
460 | /** | ||
461 | * hlist_for_each_entry_continue_rcu_bh - iterate over a hlist continuing after current point | ||
462 | * @tpos: the type * to use as a loop cursor. | ||
463 | * @pos: the &struct hlist_node to use as a loop cursor. | ||
464 | * @member: the name of the hlist_node within the struct. | ||
465 | */ | ||
466 | #define hlist_for_each_entry_continue_rcu_bh(tpos, pos, member) \ | ||
467 | for (pos = rcu_dereference_bh((pos)->next); \ | ||
468 | pos && ({ prefetch(pos->next); 1; }) && \ | ||
469 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \ | ||
470 | pos = rcu_dereference_bh(pos->next)) | ||
471 | |||
472 | |||
431 | #endif /* __KERNEL__ */ | 473 | #endif /* __KERNEL__ */ |
432 | #endif | 474 | #endif |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index d1c7c90e9cd4..fbc8cb0d48c3 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -7,6 +7,13 @@ | |||
7 | #include <linux/if_addr.h> | 7 | #include <linux/if_addr.h> |
8 | #include <linux/neighbour.h> | 8 | #include <linux/neighbour.h> |
9 | 9 | ||
10 | /* rtnetlink families. Values up to 127 are reserved for real address | ||
11 | * families, values above 128 may be used arbitrarily. | ||
12 | */ | ||
13 | #define RTNL_FAMILY_IPMR 128 | ||
14 | #define RTNL_FAMILY_IP6MR 129 | ||
15 | #define RTNL_FAMILY_MAX 129 | ||
16 | |||
10 | /**** | 17 | /**** |
11 | * Routing/neighbour discovery messages. | 18 | * Routing/neighbour discovery messages. |
12 | ****/ | 19 | ****/ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index ad839963fa68..f10db6e5f3b5 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
@@ -182,6 +182,10 @@ | |||
182 | /* Aeroflex Gaisler GRLIB APBUART */ | 182 | /* Aeroflex Gaisler GRLIB APBUART */ |
183 | #define PORT_APBUART 90 | 183 | #define PORT_APBUART 90 |
184 | 184 | ||
185 | /* Altera UARTs */ | ||
186 | #define PORT_ALTERA_JTAGUART 91 | ||
187 | #define PORT_ALTERA_UART 92 | ||
188 | |||
185 | #ifdef __KERNEL__ | 189 | #ifdef __KERNEL__ |
186 | 190 | ||
187 | #include <linux/compiler.h> | 191 | #include <linux/compiler.h> |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 124f90cd5a38..7cdfb4d52847 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -187,7 +187,6 @@ union skb_shared_tx { | |||
187 | * the end of the header data, ie. at skb->end. | 187 | * the end of the header data, ie. at skb->end. |
188 | */ | 188 | */ |
189 | struct skb_shared_info { | 189 | struct skb_shared_info { |
190 | atomic_t dataref; | ||
191 | unsigned short nr_frags; | 190 | unsigned short nr_frags; |
192 | unsigned short gso_size; | 191 | unsigned short gso_size; |
193 | /* Warning: this field is not always filled in (UFO)! */ | 192 | /* Warning: this field is not always filled in (UFO)! */ |
@@ -197,6 +196,12 @@ struct skb_shared_info { | |||
197 | union skb_shared_tx tx_flags; | 196 | union skb_shared_tx tx_flags; |
198 | struct sk_buff *frag_list; | 197 | struct sk_buff *frag_list; |
199 | struct skb_shared_hwtstamps hwtstamps; | 198 | struct skb_shared_hwtstamps hwtstamps; |
199 | |||
200 | /* | ||
201 | * Warning : all fields before dataref are cleared in __alloc_skb() | ||
202 | */ | ||
203 | atomic_t dataref; | ||
204 | |||
200 | skb_frag_t frags[MAX_SKB_FRAGS]; | 205 | skb_frag_t frags[MAX_SKB_FRAGS]; |
201 | /* Intermediate layers must ensure that destructor_arg | 206 | /* Intermediate layers must ensure that destructor_arg |
202 | * remains valid until skb destructor */ | 207 | * remains valid until skb destructor */ |
@@ -259,7 +264,7 @@ typedef unsigned char *sk_buff_data_t; | |||
259 | * @transport_header: Transport layer header | 264 | * @transport_header: Transport layer header |
260 | * @network_header: Network layer header | 265 | * @network_header: Network layer header |
261 | * @mac_header: Link layer header | 266 | * @mac_header: Link layer header |
262 | * @_skb_dst: destination entry | 267 | * @_skb_refdst: destination entry (with norefcount bit) |
263 | * @sp: the security path, used for xfrm | 268 | * @sp: the security path, used for xfrm |
264 | * @cb: Control buffer. Free for use by every layer. Put private vars here | 269 | * @cb: Control buffer. Free for use by every layer. Put private vars here |
265 | * @len: Length of actual data | 270 | * @len: Length of actual data |
@@ -294,6 +299,7 @@ typedef unsigned char *sk_buff_data_t; | |||
294 | * @nfct_reasm: netfilter conntrack re-assembly pointer | 299 | * @nfct_reasm: netfilter conntrack re-assembly pointer |
295 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c | 300 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c |
296 | * @skb_iif: ifindex of device we arrived on | 301 | * @skb_iif: ifindex of device we arrived on |
302 | * @rxhash: the packet hash computed on receive | ||
297 | * @queue_mapping: Queue mapping for multiqueue devices | 303 | * @queue_mapping: Queue mapping for multiqueue devices |
298 | * @tc_index: Traffic control index | 304 | * @tc_index: Traffic control index |
299 | * @tc_verd: traffic control verdict | 305 | * @tc_verd: traffic control verdict |
@@ -322,7 +328,7 @@ struct sk_buff { | |||
322 | */ | 328 | */ |
323 | char cb[48] __aligned(8); | 329 | char cb[48] __aligned(8); |
324 | 330 | ||
325 | unsigned long _skb_dst; | 331 | unsigned long _skb_refdst; |
326 | #ifdef CONFIG_XFRM | 332 | #ifdef CONFIG_XFRM |
327 | struct sec_path *sp; | 333 | struct sec_path *sp; |
328 | #endif | 334 | #endif |
@@ -369,6 +375,8 @@ struct sk_buff { | |||
369 | #endif | 375 | #endif |
370 | #endif | 376 | #endif |
371 | 377 | ||
378 | __u32 rxhash; | ||
379 | |||
372 | kmemcheck_bitfield_begin(flags2); | 380 | kmemcheck_bitfield_begin(flags2); |
373 | __u16 queue_mapping:16; | 381 | __u16 queue_mapping:16; |
374 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 382 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
@@ -411,14 +419,64 @@ struct sk_buff { | |||
411 | 419 | ||
412 | #include <asm/system.h> | 420 | #include <asm/system.h> |
413 | 421 | ||
422 | /* | ||
423 | * skb might have a dst pointer attached, refcounted or not. | ||
424 | * _skb_refdst low order bit is set if refcount was _not_ taken | ||
425 | */ | ||
426 | #define SKB_DST_NOREF 1UL | ||
427 | #define SKB_DST_PTRMASK ~(SKB_DST_NOREF) | ||
428 | |||
429 | /** | ||
430 | * skb_dst - returns skb dst_entry | ||
431 | * @skb: buffer | ||
432 | * | ||
433 | * Returns skb dst_entry, regardless of reference taken or not. | ||
434 | */ | ||
414 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) | 435 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) |
415 | { | 436 | { |
416 | return (struct dst_entry *)skb->_skb_dst; | 437 | /* If refdst was not refcounted, check we still are in a |
438 | * rcu_read_lock section | ||
439 | */ | ||
440 | WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) && | ||
441 | !rcu_read_lock_held() && | ||
442 | !rcu_read_lock_bh_held()); | ||
443 | return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK); | ||
417 | } | 444 | } |
418 | 445 | ||
446 | /** | ||
447 | * skb_dst_set - sets skb dst | ||
448 | * @skb: buffer | ||
449 | * @dst: dst entry | ||
450 | * | ||
451 | * Sets skb dst, assuming a reference was taken on dst and should | ||
452 | * be released by skb_dst_drop() | ||
453 | */ | ||
419 | static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) | 454 | static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) |
420 | { | 455 | { |
421 | skb->_skb_dst = (unsigned long)dst; | 456 | skb->_skb_refdst = (unsigned long)dst; |
457 | } | ||
458 | |||
459 | /** | ||
460 | * skb_dst_set_noref - sets skb dst, without a reference | ||
461 | * @skb: buffer | ||
462 | * @dst: dst entry | ||
463 | * | ||
464 | * Sets skb dst, assuming a reference was not taken on dst | ||
465 | * skb_dst_drop() should not dst_release() this dst | ||
466 | */ | ||
467 | static inline void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst) | ||
468 | { | ||
469 | WARN_ON(!rcu_read_lock_held() && !rcu_read_lock_bh_held()); | ||
470 | skb->_skb_refdst = (unsigned long)dst | SKB_DST_NOREF; | ||
471 | } | ||
472 | |||
473 | /** | ||
474 | * skb_dst_is_noref - Test if skb dst isnt refcounted | ||
475 | * @skb: buffer | ||
476 | */ | ||
477 | static inline bool skb_dst_is_noref(const struct sk_buff *skb) | ||
478 | { | ||
479 | return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb); | ||
422 | } | 480 | } |
423 | 481 | ||
424 | static inline struct rtable *skb_rtable(const struct sk_buff *skb) | 482 | static inline struct rtable *skb_rtable(const struct sk_buff *skb) |
@@ -467,11 +525,6 @@ extern int skb_cow_data(struct sk_buff *skb, int tailbits, | |||
467 | struct sk_buff **trailer); | 525 | struct sk_buff **trailer); |
468 | extern int skb_pad(struct sk_buff *skb, int pad); | 526 | extern int skb_pad(struct sk_buff *skb, int pad); |
469 | #define dev_kfree_skb(a) consume_skb(a) | 527 | #define dev_kfree_skb(a) consume_skb(a) |
470 | #define dev_consume_skb(a) kfree_skb_clean(a) | ||
471 | extern void skb_over_panic(struct sk_buff *skb, int len, | ||
472 | void *here); | ||
473 | extern void skb_under_panic(struct sk_buff *skb, int len, | ||
474 | void *here); | ||
475 | 528 | ||
476 | extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, | 529 | extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, |
477 | int getfrag(void *from, char *to, int offset, | 530 | int getfrag(void *from, char *to, int offset, |
@@ -1130,6 +1183,11 @@ static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len) | |||
1130 | return skb->data += len; | 1183 | return skb->data += len; |
1131 | } | 1184 | } |
1132 | 1185 | ||
1186 | static inline unsigned char *skb_pull_inline(struct sk_buff *skb, unsigned int len) | ||
1187 | { | ||
1188 | return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); | ||
1189 | } | ||
1190 | |||
1133 | extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); | 1191 | extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta); |
1134 | 1192 | ||
1135 | static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) | 1193 | static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len) |
@@ -1353,9 +1411,12 @@ static inline int skb_network_offset(const struct sk_buff *skb) | |||
1353 | * | 1411 | * |
1354 | * Various parts of the networking layer expect at least 32 bytes of | 1412 | * Various parts of the networking layer expect at least 32 bytes of |
1355 | * headroom, you should not reduce this. | 1413 | * headroom, you should not reduce this. |
1414 | * With RPS, we raised NET_SKB_PAD to 64 so that get_rps_cpus() fetches span | ||
1415 | * a 64 bytes aligned block to fit modern (>= 64 bytes) cache line sizes | ||
1416 | * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) | ||
1356 | */ | 1417 | */ |
1357 | #ifndef NET_SKB_PAD | 1418 | #ifndef NET_SKB_PAD |
1358 | #define NET_SKB_PAD 32 | 1419 | #define NET_SKB_PAD 64 |
1359 | #endif | 1420 | #endif |
1360 | 1421 | ||
1361 | extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); | 1422 | extern int ___pskb_trim(struct sk_buff *skb, unsigned int len); |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index 4435d1084755..52797714ade7 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
@@ -100,6 +100,7 @@ enum | |||
100 | ICMP6_MIB_INMSGS, /* InMsgs */ | 100 | ICMP6_MIB_INMSGS, /* InMsgs */ |
101 | ICMP6_MIB_INERRORS, /* InErrors */ | 101 | ICMP6_MIB_INERRORS, /* InErrors */ |
102 | ICMP6_MIB_OUTMSGS, /* OutMsgs */ | 102 | ICMP6_MIB_OUTMSGS, /* OutMsgs */ |
103 | ICMP6_MIB_OUTERRORS, /* OutErrors */ | ||
103 | __ICMP6_MIB_MAX | 104 | __ICMP6_MIB_MAX |
104 | }; | 105 | }; |
105 | 106 | ||
@@ -227,6 +228,7 @@ enum | |||
227 | LINUX_MIB_SACKSHIFTFALLBACK, | 228 | LINUX_MIB_SACKSHIFTFALLBACK, |
228 | LINUX_MIB_TCPBACKLOGDROP, | 229 | LINUX_MIB_TCPBACKLOGDROP, |
229 | LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */ | 230 | LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */ |
231 | LINUX_MIB_TCPDEFERACCEPTDROP, | ||
230 | __LINUX_MIB_MAX | 232 | __LINUX_MIB_MAX |
231 | }; | 233 | }; |
232 | 234 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 354cc5617f8b..032a19eb61b1 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -189,7 +189,8 @@ struct ucred { | |||
189 | #define AF_ISDN 34 /* mISDN sockets */ | 189 | #define AF_ISDN 34 /* mISDN sockets */ |
190 | #define AF_PHONET 35 /* Phonet sockets */ | 190 | #define AF_PHONET 35 /* Phonet sockets */ |
191 | #define AF_IEEE802154 36 /* IEEE802154 sockets */ | 191 | #define AF_IEEE802154 36 /* IEEE802154 sockets */ |
192 | #define AF_MAX 37 /* For now.. */ | 192 | #define AF_CAIF 37 /* CAIF sockets */ |
193 | #define AF_MAX 38 /* For now.. */ | ||
193 | 194 | ||
194 | /* Protocol families, same as address families. */ | 195 | /* Protocol families, same as address families. */ |
195 | #define PF_UNSPEC AF_UNSPEC | 196 | #define PF_UNSPEC AF_UNSPEC |
@@ -229,6 +230,7 @@ struct ucred { | |||
229 | #define PF_ISDN AF_ISDN | 230 | #define PF_ISDN AF_ISDN |
230 | #define PF_PHONET AF_PHONET | 231 | #define PF_PHONET AF_PHONET |
231 | #define PF_IEEE802154 AF_IEEE802154 | 232 | #define PF_IEEE802154 AF_IEEE802154 |
233 | #define PF_CAIF AF_CAIF | ||
232 | #define PF_MAX AF_MAX | 234 | #define PF_MAX AF_MAX |
233 | 235 | ||
234 | /* Maximum queue length specifiable by listen. */ | 236 | /* Maximum queue length specifiable by listen. */ |
@@ -301,6 +303,7 @@ struct ucred { | |||
301 | #define SOL_PNPIPE 275 | 303 | #define SOL_PNPIPE 275 |
302 | #define SOL_RDS 276 | 304 | #define SOL_RDS 276 |
303 | #define SOL_IUCV 277 | 305 | #define SOL_IUCV 277 |
306 | #define SOL_CAIF 278 | ||
304 | 307 | ||
305 | /* IPX options */ | 308 | /* IPX options */ |
306 | #define IPX_TYPE 1 | 309 | #define IPX_TYPE 1 |
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h index aed64ed3dc8a..a223ecbc71ef 100644 --- a/include/linux/spi/wl12xx.h +++ b/include/linux/spi/wl12xx.h | |||
@@ -26,6 +26,8 @@ | |||
26 | 26 | ||
27 | struct wl12xx_platform_data { | 27 | struct wl12xx_platform_data { |
28 | void (*set_power)(bool enable); | 28 | void (*set_power)(bool enable); |
29 | /* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */ | ||
30 | int irq; | ||
29 | bool use_eeprom; | 31 | bool use_eeprom; |
30 | }; | 32 | }; |
31 | 33 | ||
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 24f988547361..a2608bff9c78 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -305,6 +305,7 @@ struct ssb_bus { | |||
305 | /* ID information about the Chip. */ | 305 | /* ID information about the Chip. */ |
306 | u16 chip_id; | 306 | u16 chip_id; |
307 | u16 chip_rev; | 307 | u16 chip_rev; |
308 | u16 sprom_offset; | ||
308 | u16 sprom_size; /* number of words in sprom */ | 309 | u16 sprom_size; /* number of words in sprom */ |
309 | u8 chip_package; | 310 | u8 chip_package; |
310 | 311 | ||
@@ -394,6 +395,9 @@ extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, | |||
394 | 395 | ||
395 | extern void ssb_bus_unregister(struct ssb_bus *bus); | 396 | extern void ssb_bus_unregister(struct ssb_bus *bus); |
396 | 397 | ||
398 | /* Does the device have an SPROM? */ | ||
399 | extern bool ssb_is_sprom_available(struct ssb_bus *bus); | ||
400 | |||
397 | /* Set a fallback SPROM. | 401 | /* Set a fallback SPROM. |
398 | * See kdoc at the function definition for complete documentation. */ | 402 | * See kdoc at the function definition for complete documentation. */ |
399 | extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); | 403 | extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); |
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index 4e27acf0a92f..2cdf249b4e5f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
@@ -53,6 +53,7 @@ | |||
53 | #define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */ | 53 | #define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */ |
54 | #define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ | 54 | #define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */ |
55 | #define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ | 55 | #define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */ |
56 | #define SSB_CHIPCO_CAP_SPROM 0x40000000 /* SPROM present */ | ||
56 | #define SSB_CHIPCO_CORECTL 0x0008 | 57 | #define SSB_CHIPCO_CORECTL 0x0008 |
57 | #define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ | 58 | #define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ |
58 | #define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ | 59 | #define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ |
@@ -385,6 +386,7 @@ | |||
385 | 386 | ||
386 | 387 | ||
387 | /** Chip specific Chip-Status register contents. */ | 388 | /** Chip specific Chip-Status register contents. */ |
389 | #define SSB_CHIPCO_CHST_4322_SPROM_EXISTS 0x00000040 /* SPROM present */ | ||
388 | #define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003 | 390 | #define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003 |
389 | #define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */ | 391 | #define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */ |
390 | #define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */ | 392 | #define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */ |
@@ -398,6 +400,18 @@ | |||
398 | #define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4 | 400 | #define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4 |
399 | #define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */ | 401 | #define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */ |
400 | 402 | ||
403 | /** Macros to determine SPROM presence based on Chip-Status register. */ | ||
404 | #define SSB_CHIPCO_CHST_4312_SPROM_PRESENT(status) \ | ||
405 | ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ | ||
406 | SSB_CHIPCO_CHST_4325_OTP_SEL) | ||
407 | #define SSB_CHIPCO_CHST_4322_SPROM_PRESENT(status) \ | ||
408 | (status & SSB_CHIPCO_CHST_4322_SPROM_EXISTS) | ||
409 | #define SSB_CHIPCO_CHST_4325_SPROM_PRESENT(status) \ | ||
410 | (((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ | ||
411 | SSB_CHIPCO_CHST_4325_DEFCIS_SEL) && \ | ||
412 | ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \ | ||
413 | SSB_CHIPCO_CHST_4325_OTP_SEL)) | ||
414 | |||
401 | 415 | ||
402 | 416 | ||
403 | /** Clockcontrol masks and values **/ | 417 | /** Clockcontrol masks and values **/ |
@@ -564,6 +578,7 @@ struct ssb_chipcommon_pmu { | |||
564 | struct ssb_chipcommon { | 578 | struct ssb_chipcommon { |
565 | struct ssb_device *dev; | 579 | struct ssb_device *dev; |
566 | u32 capabilities; | 580 | u32 capabilities; |
581 | u32 status; | ||
567 | /* Fast Powerup Delay constant */ | 582 | /* Fast Powerup Delay constant */ |
568 | u16 fast_pwrup_delay; | 583 | u16 fast_pwrup_delay; |
569 | struct ssb_chipcommon_pmu pmu; | 584 | struct ssb_chipcommon_pmu pmu; |
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index 9ae9082eaeb4..a6d5225b9275 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
@@ -170,26 +170,27 @@ | |||
170 | #define SSB_SPROMSIZE_WORDS_R4 220 | 170 | #define SSB_SPROMSIZE_WORDS_R4 220 |
171 | #define SSB_SPROMSIZE_BYTES_R123 (SSB_SPROMSIZE_WORDS_R123 * sizeof(u16)) | 171 | #define SSB_SPROMSIZE_BYTES_R123 (SSB_SPROMSIZE_WORDS_R123 * sizeof(u16)) |
172 | #define SSB_SPROMSIZE_BYTES_R4 (SSB_SPROMSIZE_WORDS_R4 * sizeof(u16)) | 172 | #define SSB_SPROMSIZE_BYTES_R4 (SSB_SPROMSIZE_WORDS_R4 * sizeof(u16)) |
173 | #define SSB_SPROM_BASE 0x1000 | 173 | #define SSB_SPROM_BASE1 0x1000 |
174 | #define SSB_SPROM_REVISION 0x107E | 174 | #define SSB_SPROM_BASE31 0x0800 |
175 | #define SSB_SPROM_REVISION 0x007E | ||
175 | #define SSB_SPROM_REVISION_REV 0x00FF /* SPROM Revision number */ | 176 | #define SSB_SPROM_REVISION_REV 0x00FF /* SPROM Revision number */ |
176 | #define SSB_SPROM_REVISION_CRC 0xFF00 /* SPROM CRC8 value */ | 177 | #define SSB_SPROM_REVISION_CRC 0xFF00 /* SPROM CRC8 value */ |
177 | #define SSB_SPROM_REVISION_CRC_SHIFT 8 | 178 | #define SSB_SPROM_REVISION_CRC_SHIFT 8 |
178 | 179 | ||
179 | /* SPROM Revision 1 */ | 180 | /* SPROM Revision 1 */ |
180 | #define SSB_SPROM1_SPID 0x1004 /* Subsystem Product ID for PCI */ | 181 | #define SSB_SPROM1_SPID 0x0004 /* Subsystem Product ID for PCI */ |
181 | #define SSB_SPROM1_SVID 0x1006 /* Subsystem Vendor ID for PCI */ | 182 | #define SSB_SPROM1_SVID 0x0006 /* Subsystem Vendor ID for PCI */ |
182 | #define SSB_SPROM1_PID 0x1008 /* Product ID for PCI */ | 183 | #define SSB_SPROM1_PID 0x0008 /* Product ID for PCI */ |
183 | #define SSB_SPROM1_IL0MAC 0x1048 /* 6 bytes MAC address for 802.11b/g */ | 184 | #define SSB_SPROM1_IL0MAC 0x0048 /* 6 bytes MAC address for 802.11b/g */ |
184 | #define SSB_SPROM1_ET0MAC 0x104E /* 6 bytes MAC address for Ethernet */ | 185 | #define SSB_SPROM1_ET0MAC 0x004E /* 6 bytes MAC address for Ethernet */ |
185 | #define SSB_SPROM1_ET1MAC 0x1054 /* 6 bytes MAC address for 802.11a */ | 186 | #define SSB_SPROM1_ET1MAC 0x0054 /* 6 bytes MAC address for 802.11a */ |
186 | #define SSB_SPROM1_ETHPHY 0x105A /* Ethernet PHY settings */ | 187 | #define SSB_SPROM1_ETHPHY 0x005A /* Ethernet PHY settings */ |
187 | #define SSB_SPROM1_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ | 188 | #define SSB_SPROM1_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ |
188 | #define SSB_SPROM1_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ | 189 | #define SSB_SPROM1_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ |
189 | #define SSB_SPROM1_ETHPHY_ET1A_SHIFT 5 | 190 | #define SSB_SPROM1_ETHPHY_ET1A_SHIFT 5 |
190 | #define SSB_SPROM1_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ | 191 | #define SSB_SPROM1_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ |
191 | #define SSB_SPROM1_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ | 192 | #define SSB_SPROM1_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ |
192 | #define SSB_SPROM1_BINF 0x105C /* Board info */ | 193 | #define SSB_SPROM1_BINF 0x005C /* Board info */ |
193 | #define SSB_SPROM1_BINF_BREV 0x00FF /* Board Revision */ | 194 | #define SSB_SPROM1_BINF_BREV 0x00FF /* Board Revision */ |
194 | #define SSB_SPROM1_BINF_CCODE 0x0F00 /* Country Code */ | 195 | #define SSB_SPROM1_BINF_CCODE 0x0F00 /* Country Code */ |
195 | #define SSB_SPROM1_BINF_CCODE_SHIFT 8 | 196 | #define SSB_SPROM1_BINF_CCODE_SHIFT 8 |
@@ -197,63 +198,63 @@ | |||
197 | #define SSB_SPROM1_BINF_ANTBG_SHIFT 12 | 198 | #define SSB_SPROM1_BINF_ANTBG_SHIFT 12 |
198 | #define SSB_SPROM1_BINF_ANTA 0xC000 /* Available A-PHY antennas */ | 199 | #define SSB_SPROM1_BINF_ANTA 0xC000 /* Available A-PHY antennas */ |
199 | #define SSB_SPROM1_BINF_ANTA_SHIFT 14 | 200 | #define SSB_SPROM1_BINF_ANTA_SHIFT 14 |
200 | #define SSB_SPROM1_PA0B0 0x105E | 201 | #define SSB_SPROM1_PA0B0 0x005E |
201 | #define SSB_SPROM1_PA0B1 0x1060 | 202 | #define SSB_SPROM1_PA0B1 0x0060 |
202 | #define SSB_SPROM1_PA0B2 0x1062 | 203 | #define SSB_SPROM1_PA0B2 0x0062 |
203 | #define SSB_SPROM1_GPIOA 0x1064 /* General Purpose IO pins 0 and 1 */ | 204 | #define SSB_SPROM1_GPIOA 0x0064 /* General Purpose IO pins 0 and 1 */ |
204 | #define SSB_SPROM1_GPIOA_P0 0x00FF /* Pin 0 */ | 205 | #define SSB_SPROM1_GPIOA_P0 0x00FF /* Pin 0 */ |
205 | #define SSB_SPROM1_GPIOA_P1 0xFF00 /* Pin 1 */ | 206 | #define SSB_SPROM1_GPIOA_P1 0xFF00 /* Pin 1 */ |
206 | #define SSB_SPROM1_GPIOA_P1_SHIFT 8 | 207 | #define SSB_SPROM1_GPIOA_P1_SHIFT 8 |
207 | #define SSB_SPROM1_GPIOB 0x1066 /* General Purpuse IO pins 2 and 3 */ | 208 | #define SSB_SPROM1_GPIOB 0x0066 /* General Purpuse IO pins 2 and 3 */ |
208 | #define SSB_SPROM1_GPIOB_P2 0x00FF /* Pin 2 */ | 209 | #define SSB_SPROM1_GPIOB_P2 0x00FF /* Pin 2 */ |
209 | #define SSB_SPROM1_GPIOB_P3 0xFF00 /* Pin 3 */ | 210 | #define SSB_SPROM1_GPIOB_P3 0xFF00 /* Pin 3 */ |
210 | #define SSB_SPROM1_GPIOB_P3_SHIFT 8 | 211 | #define SSB_SPROM1_GPIOB_P3_SHIFT 8 |
211 | #define SSB_SPROM1_MAXPWR 0x1068 /* Power Amplifier Max Power */ | 212 | #define SSB_SPROM1_MAXPWR 0x0068 /* Power Amplifier Max Power */ |
212 | #define SSB_SPROM1_MAXPWR_BG 0x00FF /* B-PHY and G-PHY (in dBm Q5.2) */ | 213 | #define SSB_SPROM1_MAXPWR_BG 0x00FF /* B-PHY and G-PHY (in dBm Q5.2) */ |
213 | #define SSB_SPROM1_MAXPWR_A 0xFF00 /* A-PHY (in dBm Q5.2) */ | 214 | #define SSB_SPROM1_MAXPWR_A 0xFF00 /* A-PHY (in dBm Q5.2) */ |
214 | #define SSB_SPROM1_MAXPWR_A_SHIFT 8 | 215 | #define SSB_SPROM1_MAXPWR_A_SHIFT 8 |
215 | #define SSB_SPROM1_PA1B0 0x106A | 216 | #define SSB_SPROM1_PA1B0 0x006A |
216 | #define SSB_SPROM1_PA1B1 0x106C | 217 | #define SSB_SPROM1_PA1B1 0x006C |
217 | #define SSB_SPROM1_PA1B2 0x106E | 218 | #define SSB_SPROM1_PA1B2 0x006E |
218 | #define SSB_SPROM1_ITSSI 0x1070 /* Idle TSSI Target */ | 219 | #define SSB_SPROM1_ITSSI 0x0070 /* Idle TSSI Target */ |
219 | #define SSB_SPROM1_ITSSI_BG 0x00FF /* B-PHY and G-PHY*/ | 220 | #define SSB_SPROM1_ITSSI_BG 0x00FF /* B-PHY and G-PHY*/ |
220 | #define SSB_SPROM1_ITSSI_A 0xFF00 /* A-PHY */ | 221 | #define SSB_SPROM1_ITSSI_A 0xFF00 /* A-PHY */ |
221 | #define SSB_SPROM1_ITSSI_A_SHIFT 8 | 222 | #define SSB_SPROM1_ITSSI_A_SHIFT 8 |
222 | #define SSB_SPROM1_BFLLO 0x1072 /* Boardflags (low 16 bits) */ | 223 | #define SSB_SPROM1_BFLLO 0x0072 /* Boardflags (low 16 bits) */ |
223 | #define SSB_SPROM1_AGAIN 0x1074 /* Antenna Gain (in dBm Q5.2) */ | 224 | #define SSB_SPROM1_AGAIN 0x0074 /* Antenna Gain (in dBm Q5.2) */ |
224 | #define SSB_SPROM1_AGAIN_BG 0x00FF /* B-PHY and G-PHY */ | 225 | #define SSB_SPROM1_AGAIN_BG 0x00FF /* B-PHY and G-PHY */ |
225 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 | 226 | #define SSB_SPROM1_AGAIN_BG_SHIFT 0 |
226 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ | 227 | #define SSB_SPROM1_AGAIN_A 0xFF00 /* A-PHY */ |
227 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 | 228 | #define SSB_SPROM1_AGAIN_A_SHIFT 8 |
228 | 229 | ||
229 | /* SPROM Revision 2 (inherits from rev 1) */ | 230 | /* SPROM Revision 2 (inherits from rev 1) */ |
230 | #define SSB_SPROM2_BFLHI 0x1038 /* Boardflags (high 16 bits) */ | 231 | #define SSB_SPROM2_BFLHI 0x0038 /* Boardflags (high 16 bits) */ |
231 | #define SSB_SPROM2_MAXP_A 0x103A /* A-PHY Max Power */ | 232 | #define SSB_SPROM2_MAXP_A 0x003A /* A-PHY Max Power */ |
232 | #define SSB_SPROM2_MAXP_A_HI 0x00FF /* Max Power High */ | 233 | #define SSB_SPROM2_MAXP_A_HI 0x00FF /* Max Power High */ |
233 | #define SSB_SPROM2_MAXP_A_LO 0xFF00 /* Max Power Low */ | 234 | #define SSB_SPROM2_MAXP_A_LO 0xFF00 /* Max Power Low */ |
234 | #define SSB_SPROM2_MAXP_A_LO_SHIFT 8 | 235 | #define SSB_SPROM2_MAXP_A_LO_SHIFT 8 |
235 | #define SSB_SPROM2_PA1LOB0 0x103C /* A-PHY PowerAmplifier Low Settings */ | 236 | #define SSB_SPROM2_PA1LOB0 0x003C /* A-PHY PowerAmplifier Low Settings */ |
236 | #define SSB_SPROM2_PA1LOB1 0x103E /* A-PHY PowerAmplifier Low Settings */ | 237 | #define SSB_SPROM2_PA1LOB1 0x003E /* A-PHY PowerAmplifier Low Settings */ |
237 | #define SSB_SPROM2_PA1LOB2 0x1040 /* A-PHY PowerAmplifier Low Settings */ | 238 | #define SSB_SPROM2_PA1LOB2 0x0040 /* A-PHY PowerAmplifier Low Settings */ |
238 | #define SSB_SPROM2_PA1HIB0 0x1042 /* A-PHY PowerAmplifier High Settings */ | 239 | #define SSB_SPROM2_PA1HIB0 0x0042 /* A-PHY PowerAmplifier High Settings */ |
239 | #define SSB_SPROM2_PA1HIB1 0x1044 /* A-PHY PowerAmplifier High Settings */ | 240 | #define SSB_SPROM2_PA1HIB1 0x0044 /* A-PHY PowerAmplifier High Settings */ |
240 | #define SSB_SPROM2_PA1HIB2 0x1046 /* A-PHY PowerAmplifier High Settings */ | 241 | #define SSB_SPROM2_PA1HIB2 0x0046 /* A-PHY PowerAmplifier High Settings */ |
241 | #define SSB_SPROM2_OPO 0x1078 /* OFDM Power Offset from CCK Level */ | 242 | #define SSB_SPROM2_OPO 0x0078 /* OFDM Power Offset from CCK Level */ |
242 | #define SSB_SPROM2_OPO_VALUE 0x00FF | 243 | #define SSB_SPROM2_OPO_VALUE 0x00FF |
243 | #define SSB_SPROM2_OPO_UNUSED 0xFF00 | 244 | #define SSB_SPROM2_OPO_UNUSED 0xFF00 |
244 | #define SSB_SPROM2_CCODE 0x107C /* Two char Country Code */ | 245 | #define SSB_SPROM2_CCODE 0x007C /* Two char Country Code */ |
245 | 246 | ||
246 | /* SPROM Revision 3 (inherits most data from rev 2) */ | 247 | /* SPROM Revision 3 (inherits most data from rev 2) */ |
247 | #define SSB_SPROM3_IL0MAC 0x104A /* 6 bytes MAC address for 802.11b/g */ | 248 | #define SSB_SPROM3_OFDMAPO 0x002C /* A-PHY OFDM Mid Power Offset (4 bytes, BigEndian) */ |
248 | #define SSB_SPROM3_OFDMAPO 0x102C /* A-PHY OFDM Mid Power Offset (4 bytes, BigEndian) */ | 249 | #define SSB_SPROM3_OFDMALPO 0x0030 /* A-PHY OFDM Low Power Offset (4 bytes, BigEndian) */ |
249 | #define SSB_SPROM3_OFDMALPO 0x1030 /* A-PHY OFDM Low Power Offset (4 bytes, BigEndian) */ | 250 | #define SSB_SPROM3_OFDMAHPO 0x0034 /* A-PHY OFDM High Power Offset (4 bytes, BigEndian) */ |
250 | #define SSB_SPROM3_OFDMAHPO 0x1034 /* A-PHY OFDM High Power Offset (4 bytes, BigEndian) */ | 251 | #define SSB_SPROM3_GPIOLDC 0x0042 /* GPIO LED Powersave Duty Cycle (4 bytes, BigEndian) */ |
251 | #define SSB_SPROM3_GPIOLDC 0x1042 /* GPIO LED Powersave Duty Cycle (4 bytes, BigEndian) */ | ||
252 | #define SSB_SPROM3_GPIOLDC_OFF 0x0000FF00 /* Off Count */ | 252 | #define SSB_SPROM3_GPIOLDC_OFF 0x0000FF00 /* Off Count */ |
253 | #define SSB_SPROM3_GPIOLDC_OFF_SHIFT 8 | 253 | #define SSB_SPROM3_GPIOLDC_OFF_SHIFT 8 |
254 | #define SSB_SPROM3_GPIOLDC_ON 0x00FF0000 /* On Count */ | 254 | #define SSB_SPROM3_GPIOLDC_ON 0x00FF0000 /* On Count */ |
255 | #define SSB_SPROM3_GPIOLDC_ON_SHIFT 16 | 255 | #define SSB_SPROM3_GPIOLDC_ON_SHIFT 16 |
256 | #define SSB_SPROM3_CCKPO 0x1078 /* CCK Power Offset */ | 256 | #define SSB_SPROM3_IL0MAC 0x004A /* 6 bytes MAC address for 802.11b/g */ |
257 | #define SSB_SPROM3_CCKPO 0x0078 /* CCK Power Offset */ | ||
257 | #define SSB_SPROM3_CCKPO_1M 0x000F /* 1M Rate PO */ | 258 | #define SSB_SPROM3_CCKPO_1M 0x000F /* 1M Rate PO */ |
258 | #define SSB_SPROM3_CCKPO_2M 0x00F0 /* 2M Rate PO */ | 259 | #define SSB_SPROM3_CCKPO_2M 0x00F0 /* 2M Rate PO */ |
259 | #define SSB_SPROM3_CCKPO_2M_SHIFT 4 | 260 | #define SSB_SPROM3_CCKPO_2M_SHIFT 4 |
@@ -264,100 +265,100 @@ | |||
264 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ | 265 | #define SSB_SPROM3_OFDMGPO 0x107A /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ |
265 | 266 | ||
266 | /* SPROM Revision 4 */ | 267 | /* SPROM Revision 4 */ |
267 | #define SSB_SPROM4_IL0MAC 0x104C /* 6 byte MAC address for a/b/g/n */ | 268 | #define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */ |
268 | #define SSB_SPROM4_ETHPHY 0x105A /* Ethernet PHY settings ?? */ | 269 | #define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */ |
270 | #define SSB_SPROM4_IL0MAC 0x004C /* 6 byte MAC address for a/b/g/n */ | ||
271 | #define SSB_SPROM4_CCODE 0x0052 /* Country Code (2 bytes) */ | ||
272 | #define SSB_SPROM4_GPIOA 0x0056 /* Gen. Purpose IO # 0 and 1 */ | ||
273 | #define SSB_SPROM4_GPIOA_P0 0x00FF /* Pin 0 */ | ||
274 | #define SSB_SPROM4_GPIOA_P1 0xFF00 /* Pin 1 */ | ||
275 | #define SSB_SPROM4_GPIOA_P1_SHIFT 8 | ||
276 | #define SSB_SPROM4_GPIOB 0x0058 /* Gen. Purpose IO # 2 and 3 */ | ||
277 | #define SSB_SPROM4_GPIOB_P2 0x00FF /* Pin 2 */ | ||
278 | #define SSB_SPROM4_GPIOB_P3 0xFF00 /* Pin 3 */ | ||
279 | #define SSB_SPROM4_GPIOB_P3_SHIFT 8 | ||
280 | #define SSB_SPROM4_ETHPHY 0x005A /* Ethernet PHY settings ?? */ | ||
269 | #define SSB_SPROM4_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ | 281 | #define SSB_SPROM4_ETHPHY_ET0A 0x001F /* MII Address for enet0 */ |
270 | #define SSB_SPROM4_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ | 282 | #define SSB_SPROM4_ETHPHY_ET1A 0x03E0 /* MII Address for enet1 */ |
271 | #define SSB_SPROM4_ETHPHY_ET1A_SHIFT 5 | 283 | #define SSB_SPROM4_ETHPHY_ET1A_SHIFT 5 |
272 | #define SSB_SPROM4_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ | 284 | #define SSB_SPROM4_ETHPHY_ET0M (1<<14) /* MDIO for enet0 */ |
273 | #define SSB_SPROM4_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ | 285 | #define SSB_SPROM4_ETHPHY_ET1M (1<<15) /* MDIO for enet1 */ |
274 | #define SSB_SPROM4_CCODE 0x1052 /* Country Code (2 bytes) */ | 286 | #define SSB_SPROM4_ANTAVAIL 0x005D /* Antenna available bitfields */ |
275 | #define SSB_SPROM4_ANTAVAIL 0x105D /* Antenna available bitfields */ | 287 | #define SSB_SPROM4_ANTAVAIL_A 0x00FF /* A-PHY bitfield */ |
276 | #define SSB_SPROM4_ANTAVAIL_A 0x00FF /* A-PHY bitfield */ | 288 | #define SSB_SPROM4_ANTAVAIL_A_SHIFT 0 |
277 | #define SSB_SPROM4_ANTAVAIL_A_SHIFT 0 | 289 | #define SSB_SPROM4_ANTAVAIL_BG 0xFF00 /* B-PHY and G-PHY bitfield */ |
278 | #define SSB_SPROM4_ANTAVAIL_BG 0xFF00 /* B-PHY and G-PHY bitfield */ | 290 | #define SSB_SPROM4_ANTAVAIL_BG_SHIFT 8 |
279 | #define SSB_SPROM4_ANTAVAIL_BG_SHIFT 8 | 291 | #define SSB_SPROM4_AGAIN01 0x005E /* Antenna Gain (in dBm Q5.2) */ |
280 | #define SSB_SPROM4_BFLLO 0x1044 /* Boardflags (low 16 bits) */ | ||
281 | #define SSB_SPROM4_AGAIN01 0x105E /* Antenna Gain (in dBm Q5.2) */ | ||
282 | #define SSB_SPROM4_AGAIN0 0x00FF /* Antenna 0 */ | 292 | #define SSB_SPROM4_AGAIN0 0x00FF /* Antenna 0 */ |
283 | #define SSB_SPROM4_AGAIN0_SHIFT 0 | 293 | #define SSB_SPROM4_AGAIN0_SHIFT 0 |
284 | #define SSB_SPROM4_AGAIN1 0xFF00 /* Antenna 1 */ | 294 | #define SSB_SPROM4_AGAIN1 0xFF00 /* Antenna 1 */ |
285 | #define SSB_SPROM4_AGAIN1_SHIFT 8 | 295 | #define SSB_SPROM4_AGAIN1_SHIFT 8 |
286 | #define SSB_SPROM4_AGAIN23 0x1060 | 296 | #define SSB_SPROM4_AGAIN23 0x0060 |
287 | #define SSB_SPROM4_AGAIN2 0x00FF /* Antenna 2 */ | 297 | #define SSB_SPROM4_AGAIN2 0x00FF /* Antenna 2 */ |
288 | #define SSB_SPROM4_AGAIN2_SHIFT 0 | 298 | #define SSB_SPROM4_AGAIN2_SHIFT 0 |
289 | #define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */ | 299 | #define SSB_SPROM4_AGAIN3 0xFF00 /* Antenna 3 */ |
290 | #define SSB_SPROM4_AGAIN3_SHIFT 8 | 300 | #define SSB_SPROM4_AGAIN3_SHIFT 8 |
291 | #define SSB_SPROM4_BFLHI 0x1046 /* Board Flags Hi */ | 301 | #define SSB_SPROM4_MAXP_BG 0x0080 /* Max Power BG in path 1 */ |
292 | #define SSB_SPROM4_MAXP_BG 0x1080 /* Max Power BG in path 1 */ | ||
293 | #define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ | 302 | #define SSB_SPROM4_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ |
294 | #define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ | 303 | #define SSB_SPROM4_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ |
295 | #define SSB_SPROM4_ITSSI_BG_SHIFT 8 | 304 | #define SSB_SPROM4_ITSSI_BG_SHIFT 8 |
296 | #define SSB_SPROM4_MAXP_A 0x108A /* Max Power A in path 1 */ | 305 | #define SSB_SPROM4_MAXP_A 0x008A /* Max Power A in path 1 */ |
297 | #define SSB_SPROM4_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ | 306 | #define SSB_SPROM4_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ |
298 | #define SSB_SPROM4_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ | 307 | #define SSB_SPROM4_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ |
299 | #define SSB_SPROM4_ITSSI_A_SHIFT 8 | 308 | #define SSB_SPROM4_ITSSI_A_SHIFT 8 |
300 | #define SSB_SPROM4_GPIOA 0x1056 /* Gen. Purpose IO # 0 and 1 */ | 309 | #define SSB_SPROM4_PA0B0 0x0082 /* The paXbY locations are */ |
301 | #define SSB_SPROM4_GPIOA_P0 0x00FF /* Pin 0 */ | 310 | #define SSB_SPROM4_PA0B1 0x0084 /* only guesses */ |
302 | #define SSB_SPROM4_GPIOA_P1 0xFF00 /* Pin 1 */ | 311 | #define SSB_SPROM4_PA0B2 0x0086 |
303 | #define SSB_SPROM4_GPIOA_P1_SHIFT 8 | 312 | #define SSB_SPROM4_PA1B0 0x008E |
304 | #define SSB_SPROM4_GPIOB 0x1058 /* Gen. Purpose IO # 2 and 3 */ | 313 | #define SSB_SPROM4_PA1B1 0x0090 |
305 | #define SSB_SPROM4_GPIOB_P2 0x00FF /* Pin 2 */ | 314 | #define SSB_SPROM4_PA1B2 0x0092 |
306 | #define SSB_SPROM4_GPIOB_P3 0xFF00 /* Pin 3 */ | ||
307 | #define SSB_SPROM4_GPIOB_P3_SHIFT 8 | ||
308 | #define SSB_SPROM4_PA0B0 0x1082 /* The paXbY locations are */ | ||
309 | #define SSB_SPROM4_PA0B1 0x1084 /* only guesses */ | ||
310 | #define SSB_SPROM4_PA0B2 0x1086 | ||
311 | #define SSB_SPROM4_PA1B0 0x108E | ||
312 | #define SSB_SPROM4_PA1B1 0x1090 | ||
313 | #define SSB_SPROM4_PA1B2 0x1092 | ||
314 | 315 | ||
315 | /* SPROM Revision 5 (inherits most data from rev 4) */ | 316 | /* SPROM Revision 5 (inherits most data from rev 4) */ |
316 | #define SSB_SPROM5_BFLLO 0x104A /* Boardflags (low 16 bits) */ | 317 | #define SSB_SPROM5_CCODE 0x0044 /* Country Code (2 bytes) */ |
317 | #define SSB_SPROM5_BFLHI 0x104C /* Board Flags Hi */ | 318 | #define SSB_SPROM5_BFLLO 0x004A /* Boardflags (low 16 bits) */ |
318 | #define SSB_SPROM5_IL0MAC 0x1052 /* 6 byte MAC address for a/b/g/n */ | 319 | #define SSB_SPROM5_BFLHI 0x004C /* Board Flags Hi */ |
319 | #define SSB_SPROM5_CCODE 0x1044 /* Country Code (2 bytes) */ | 320 | #define SSB_SPROM5_IL0MAC 0x0052 /* 6 byte MAC address for a/b/g/n */ |
320 | #define SSB_SPROM5_GPIOA 0x1076 /* Gen. Purpose IO # 0 and 1 */ | 321 | #define SSB_SPROM5_GPIOA 0x0076 /* Gen. Purpose IO # 0 and 1 */ |
321 | #define SSB_SPROM5_GPIOA_P0 0x00FF /* Pin 0 */ | 322 | #define SSB_SPROM5_GPIOA_P0 0x00FF /* Pin 0 */ |
322 | #define SSB_SPROM5_GPIOA_P1 0xFF00 /* Pin 1 */ | 323 | #define SSB_SPROM5_GPIOA_P1 0xFF00 /* Pin 1 */ |
323 | #define SSB_SPROM5_GPIOA_P1_SHIFT 8 | 324 | #define SSB_SPROM5_GPIOA_P1_SHIFT 8 |
324 | #define SSB_SPROM5_GPIOB 0x1078 /* Gen. Purpose IO # 2 and 3 */ | 325 | #define SSB_SPROM5_GPIOB 0x0078 /* Gen. Purpose IO # 2 and 3 */ |
325 | #define SSB_SPROM5_GPIOB_P2 0x00FF /* Pin 2 */ | 326 | #define SSB_SPROM5_GPIOB_P2 0x00FF /* Pin 2 */ |
326 | #define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */ | 327 | #define SSB_SPROM5_GPIOB_P3 0xFF00 /* Pin 3 */ |
327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 | 328 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 |
328 | 329 | ||
329 | /* SPROM Revision 8 */ | 330 | /* SPROM Revision 8 */ |
330 | #define SSB_SPROM8_BOARDREV 0x1082 /* Board revision */ | 331 | #define SSB_SPROM8_BOARDREV 0x0082 /* Board revision */ |
331 | #define SSB_SPROM8_BFLLO 0x1084 /* Board flags (bits 0-15) */ | 332 | #define SSB_SPROM8_BFLLO 0x0084 /* Board flags (bits 0-15) */ |
332 | #define SSB_SPROM8_BFLHI 0x1086 /* Board flags (bits 16-31) */ | 333 | #define SSB_SPROM8_BFLHI 0x0086 /* Board flags (bits 16-31) */ |
333 | #define SSB_SPROM8_BFL2LO 0x1088 /* Board flags (bits 32-47) */ | 334 | #define SSB_SPROM8_BFL2LO 0x0088 /* Board flags (bits 32-47) */ |
334 | #define SSB_SPROM8_BFL2HI 0x108A /* Board flags (bits 48-63) */ | 335 | #define SSB_SPROM8_BFL2HI 0x008A /* Board flags (bits 48-63) */ |
335 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ | 336 | #define SSB_SPROM8_IL0MAC 0x008C /* 6 byte MAC address */ |
336 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ | 337 | #define SSB_SPROM8_CCODE 0x0092 /* 2 byte country code */ |
337 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ | 338 | #define SSB_SPROM8_GPIOA 0x0096 /*Gen. Purpose IO # 0 and 1 */ |
338 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ | 339 | #define SSB_SPROM8_GPIOA_P0 0x00FF /* Pin 0 */ |
339 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 | 340 | #define SSB_SPROM8_GPIOA_P1 0xFF00 /* Pin 1 */ |
340 | #define SSB_SPROM8_ANTAVAIL_BG 0x00FF /* B-PHY and G-PHY bitfield */ | 341 | #define SSB_SPROM8_GPIOA_P1_SHIFT 8 |
341 | #define SSB_SPROM8_ANTAVAIL_BG_SHIFT 0 | 342 | #define SSB_SPROM8_GPIOB 0x0098 /* Gen. Purpose IO # 2 and 3 */ |
342 | #define SSB_SPROM8_AGAIN01 0x109E /* Antenna Gain (in dBm Q5.2) */ | 343 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
344 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | ||
345 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | ||
346 | #define SSB_SPROM8_ANTAVAIL 0x009C /* Antenna available bitfields*/ | ||
347 | #define SSB_SPROM8_ANTAVAIL_A 0xFF00 /* A-PHY bitfield */ | ||
348 | #define SSB_SPROM8_ANTAVAIL_A_SHIFT 8 | ||
349 | #define SSB_SPROM8_ANTAVAIL_BG 0x00FF /* B-PHY and G-PHY bitfield */ | ||
350 | #define SSB_SPROM8_ANTAVAIL_BG_SHIFT 0 | ||
351 | #define SSB_SPROM8_AGAIN01 0x009E /* Antenna Gain (in dBm Q5.2) */ | ||
343 | #define SSB_SPROM8_AGAIN0 0x00FF /* Antenna 0 */ | 352 | #define SSB_SPROM8_AGAIN0 0x00FF /* Antenna 0 */ |
344 | #define SSB_SPROM8_AGAIN0_SHIFT 0 | 353 | #define SSB_SPROM8_AGAIN0_SHIFT 0 |
345 | #define SSB_SPROM8_AGAIN1 0xFF00 /* Antenna 1 */ | 354 | #define SSB_SPROM8_AGAIN1 0xFF00 /* Antenna 1 */ |
346 | #define SSB_SPROM8_AGAIN1_SHIFT 8 | 355 | #define SSB_SPROM8_AGAIN1_SHIFT 8 |
347 | #define SSB_SPROM8_AGAIN23 0x10A0 | 356 | #define SSB_SPROM8_AGAIN23 0x00A0 |
348 | #define SSB_SPROM8_AGAIN2 0x00FF /* Antenna 2 */ | 357 | #define SSB_SPROM8_AGAIN2 0x00FF /* Antenna 2 */ |
349 | #define SSB_SPROM8_AGAIN2_SHIFT 0 | 358 | #define SSB_SPROM8_AGAIN2_SHIFT 0 |
350 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ | 359 | #define SSB_SPROM8_AGAIN3 0xFF00 /* Antenna 3 */ |
351 | #define SSB_SPROM8_AGAIN3_SHIFT 8 | 360 | #define SSB_SPROM8_AGAIN3_SHIFT 8 |
352 | #define SSB_SPROM8_GPIOA 0x1096 /*Gen. Purpose IO # 0 and 1 */ | 361 | #define SSB_SPROM8_RSSIPARM2G 0x00A4 /* RSSI params for 2GHz */ |
353 | #define SSB_SPROM8_GPIOA_P0 0x00FF /* Pin 0 */ | ||
354 | #define SSB_SPROM8_GPIOA_P1 0xFF00 /* Pin 1 */ | ||
355 | #define SSB_SPROM8_GPIOA_P1_SHIFT 8 | ||
356 | #define SSB_SPROM8_GPIOB 0x1098 /* Gen. Purpose IO # 2 and 3 */ | ||
357 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | ||
358 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | ||
359 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | ||
360 | #define SSB_SPROM8_RSSIPARM2G 0x10A4 /* RSSI params for 2GHz */ | ||
361 | #define SSB_SPROM8_RSSISMF2G 0x000F | 362 | #define SSB_SPROM8_RSSISMF2G 0x000F |
362 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | 363 | #define SSB_SPROM8_RSSISMC2G 0x00F0 |
363 | #define SSB_SPROM8_RSSISMC2G_SHIFT 4 | 364 | #define SSB_SPROM8_RSSISMC2G_SHIFT 4 |
@@ -365,7 +366,7 @@ | |||
365 | #define SSB_SPROM8_RSSISAV2G_SHIFT 8 | 366 | #define SSB_SPROM8_RSSISAV2G_SHIFT 8 |
366 | #define SSB_SPROM8_BXA2G 0x1800 | 367 | #define SSB_SPROM8_BXA2G 0x1800 |
367 | #define SSB_SPROM8_BXA2G_SHIFT 11 | 368 | #define SSB_SPROM8_BXA2G_SHIFT 11 |
368 | #define SSB_SPROM8_RSSIPARM5G 0x10A6 /* RSSI params for 5GHz */ | 369 | #define SSB_SPROM8_RSSIPARM5G 0x00A6 /* RSSI params for 5GHz */ |
369 | #define SSB_SPROM8_RSSISMF5G 0x000F | 370 | #define SSB_SPROM8_RSSISMF5G 0x000F |
370 | #define SSB_SPROM8_RSSISMC5G 0x00F0 | 371 | #define SSB_SPROM8_RSSISMC5G 0x00F0 |
371 | #define SSB_SPROM8_RSSISMC5G_SHIFT 4 | 372 | #define SSB_SPROM8_RSSISMC5G_SHIFT 4 |
@@ -373,47 +374,47 @@ | |||
373 | #define SSB_SPROM8_RSSISAV5G_SHIFT 8 | 374 | #define SSB_SPROM8_RSSISAV5G_SHIFT 8 |
374 | #define SSB_SPROM8_BXA5G 0x1800 | 375 | #define SSB_SPROM8_BXA5G 0x1800 |
375 | #define SSB_SPROM8_BXA5G_SHIFT 11 | 376 | #define SSB_SPROM8_BXA5G_SHIFT 11 |
376 | #define SSB_SPROM8_TRI25G 0x10A8 /* TX isolation 2.4&5.3GHz */ | 377 | #define SSB_SPROM8_TRI25G 0x00A8 /* TX isolation 2.4&5.3GHz */ |
377 | #define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ | 378 | #define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ |
378 | #define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ | 379 | #define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ |
379 | #define SSB_SPROM8_TRI5G_SHIFT 8 | 380 | #define SSB_SPROM8_TRI5G_SHIFT 8 |
380 | #define SSB_SPROM8_TRI5GHL 0x10AA /* TX isolation 5.2/5.8GHz */ | 381 | #define SSB_SPROM8_TRI5GHL 0x00AA /* TX isolation 5.2/5.8GHz */ |
381 | #define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ | 382 | #define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ |
382 | #define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ | 383 | #define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ |
383 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | 384 | #define SSB_SPROM8_TRI5GH_SHIFT 8 |
384 | #define SSB_SPROM8_RXPO 0x10AC /* RX power offsets */ | 385 | #define SSB_SPROM8_RXPO 0x00AC /* RX power offsets */ |
385 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | 386 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ |
386 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | 387 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ |
387 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | 388 | #define SSB_SPROM8_RXPO5G_SHIFT 8 |
388 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power 2GHz in path 1 */ | 389 | #define SSB_SPROM8_MAXP_BG 0x00C0 /* Max Power 2GHz in path 1 */ |
389 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ | 390 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ |
390 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ | 391 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ |
391 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 | 392 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 |
392 | #define SSB_SPROM8_PA0B0 0x10C2 /* 2GHz power amp settings */ | 393 | #define SSB_SPROM8_PA0B0 0x00C2 /* 2GHz power amp settings */ |
393 | #define SSB_SPROM8_PA0B1 0x10C4 | 394 | #define SSB_SPROM8_PA0B1 0x00C4 |
394 | #define SSB_SPROM8_PA0B2 0x10C6 | 395 | #define SSB_SPROM8_PA0B2 0x00C6 |
395 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power 5.3GHz */ | 396 | #define SSB_SPROM8_MAXP_A 0x00C8 /* Max Power 5.3GHz */ |
396 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ | 397 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ |
397 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ | 398 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ |
398 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 | 399 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 |
399 | #define SSB_SPROM8_MAXP_AHL 0x10CA /* Max Power 5.2/5.8GHz */ | 400 | #define SSB_SPROM8_MAXP_AHL 0x00CA /* Max Power 5.2/5.8GHz */ |
400 | #define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ | 401 | #define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ |
401 | #define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ | 402 | #define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ |
402 | #define SSB_SPROM8_MAXP_AL_SHIFT 8 | 403 | #define SSB_SPROM8_MAXP_AL_SHIFT 8 |
403 | #define SSB_SPROM8_PA1B0 0x10CC /* 5.3GHz power amp settings */ | 404 | #define SSB_SPROM8_PA1B0 0x00CC /* 5.3GHz power amp settings */ |
404 | #define SSB_SPROM8_PA1B1 0x10CE | 405 | #define SSB_SPROM8_PA1B1 0x00CE |
405 | #define SSB_SPROM8_PA1B2 0x10D0 | 406 | #define SSB_SPROM8_PA1B2 0x00D0 |
406 | #define SSB_SPROM8_PA1LOB0 0x10D2 /* 5.2GHz power amp settings */ | 407 | #define SSB_SPROM8_PA1LOB0 0x00D2 /* 5.2GHz power amp settings */ |
407 | #define SSB_SPROM8_PA1LOB1 0x10D4 | 408 | #define SSB_SPROM8_PA1LOB1 0x00D4 |
408 | #define SSB_SPROM8_PA1LOB2 0x10D6 | 409 | #define SSB_SPROM8_PA1LOB2 0x00D6 |
409 | #define SSB_SPROM8_PA1HIB0 0x10D8 /* 5.8GHz power amp settings */ | 410 | #define SSB_SPROM8_PA1HIB0 0x00D8 /* 5.8GHz power amp settings */ |
410 | #define SSB_SPROM8_PA1HIB1 0x10DA | 411 | #define SSB_SPROM8_PA1HIB1 0x00DA |
411 | #define SSB_SPROM8_PA1HIB2 0x10DC | 412 | #define SSB_SPROM8_PA1HIB2 0x00DC |
412 | #define SSB_SPROM8_CCK2GPO 0x1140 /* CCK power offset */ | 413 | #define SSB_SPROM8_CCK2GPO 0x0140 /* CCK power offset */ |
413 | #define SSB_SPROM8_OFDM2GPO 0x1142 /* 2.4GHz OFDM power offset */ | 414 | #define SSB_SPROM8_OFDM2GPO 0x0142 /* 2.4GHz OFDM power offset */ |
414 | #define SSB_SPROM8_OFDM5GPO 0x1146 /* 5.3GHz OFDM power offset */ | 415 | #define SSB_SPROM8_OFDM5GPO 0x0146 /* 5.3GHz OFDM power offset */ |
415 | #define SSB_SPROM8_OFDM5GLPO 0x114A /* 5.2GHz OFDM power offset */ | 416 | #define SSB_SPROM8_OFDM5GLPO 0x014A /* 5.2GHz OFDM power offset */ |
416 | #define SSB_SPROM8_OFDM5GHPO 0x114E /* 5.8GHz OFDM power offset */ | 417 | #define SSB_SPROM8_OFDM5GHPO 0x014E /* 5.8GHz OFDM power offset */ |
417 | 418 | ||
418 | /* Values for SSB_SPROM1_BINF_CCODE */ | 419 | /* Values for SSB_SPROM1_BINF_CCODE */ |
419 | enum { | 420 | enum { |
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 32bfd1a8a48d..632ff7c03280 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h | |||
@@ -33,6 +33,7 @@ struct plat_stmmacenet_data { | |||
33 | int bus_id; | 33 | int bus_id; |
34 | int pbl; | 34 | int pbl; |
35 | int has_gmac; | 35 | int has_gmac; |
36 | int enh_desc; | ||
36 | void (*fix_mac_speed)(void *priv, unsigned int speed); | 37 | void (*fix_mac_speed)(void *priv, unsigned int speed); |
37 | void (*bus_setup)(unsigned long ioaddr); | 38 | void (*bus_setup)(unsigned long ioaddr); |
38 | #ifdef CONFIG_STM_DRIVERS | 39 | #ifdef CONFIG_STM_DRIVERS |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index f66014c90c9f..7bb5cb64f3b8 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -980,6 +980,8 @@ extern int proc_doulongvec_minmax(struct ctl_table *, int, | |||
980 | void __user *, size_t *, loff_t *); | 980 | void __user *, size_t *, loff_t *); |
981 | extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int, | 981 | extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int, |
982 | void __user *, size_t *, loff_t *); | 982 | void __user *, size_t *, loff_t *); |
983 | extern int proc_do_large_bitmap(struct ctl_table *, int, | ||
984 | void __user *, size_t *, loff_t *); | ||
983 | 985 | ||
984 | /* | 986 | /* |
985 | * Register a set of sysctl names by calling register_sysctl_table | 987 | * Register a set of sysctl names by calling register_sysctl_table |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index f0496b3d1811..f2694eb4dd3d 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | struct kobject; | 21 | struct kobject; |
22 | struct module; | 22 | struct module; |
23 | enum kobj_ns_type; | ||
23 | 24 | ||
24 | /* FIXME | 25 | /* FIXME |
25 | * The *owner field is no longer used. | 26 | * The *owner field is no longer used. |
@@ -86,17 +87,18 @@ struct attribute_group { | |||
86 | 87 | ||
87 | #define attr_name(_attr) (_attr).attr.name | 88 | #define attr_name(_attr) (_attr).attr.name |
88 | 89 | ||
90 | struct file; | ||
89 | struct vm_area_struct; | 91 | struct vm_area_struct; |
90 | 92 | ||
91 | struct bin_attribute { | 93 | struct bin_attribute { |
92 | struct attribute attr; | 94 | struct attribute attr; |
93 | size_t size; | 95 | size_t size; |
94 | void *private; | 96 | void *private; |
95 | ssize_t (*read)(struct kobject *, struct bin_attribute *, | 97 | ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, |
96 | char *, loff_t, size_t); | 98 | char *, loff_t, size_t); |
97 | ssize_t (*write)(struct kobject *, struct bin_attribute *, | 99 | ssize_t (*write)(struct file *,struct kobject *, struct bin_attribute *, |
98 | char *, loff_t, size_t); | 100 | char *, loff_t, size_t); |
99 | int (*mmap)(struct kobject *, struct bin_attribute *attr, | 101 | int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, |
100 | struct vm_area_struct *vma); | 102 | struct vm_area_struct *vma); |
101 | }; | 103 | }; |
102 | 104 | ||
@@ -154,6 +156,9 @@ void sysfs_remove_link(struct kobject *kobj, const char *name); | |||
154 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, | 156 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
155 | const char *old_name, const char *new_name); | 157 | const char *old_name, const char *new_name); |
156 | 158 | ||
159 | void sysfs_delete_link(struct kobject *dir, struct kobject *targ, | ||
160 | const char *name); | ||
161 | |||
157 | int __must_check sysfs_create_group(struct kobject *kobj, | 162 | int __must_check sysfs_create_group(struct kobject *kobj, |
158 | const struct attribute_group *grp); | 163 | const struct attribute_group *grp); |
159 | int sysfs_update_group(struct kobject *kobj, | 164 | int sysfs_update_group(struct kobject *kobj, |
@@ -168,10 +173,15 @@ void sysfs_remove_file_from_group(struct kobject *kobj, | |||
168 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); | 173 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); |
169 | void sysfs_notify_dirent(struct sysfs_dirent *sd); | 174 | void sysfs_notify_dirent(struct sysfs_dirent *sd); |
170 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, | 175 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
176 | const void *ns, | ||
171 | const unsigned char *name); | 177 | const unsigned char *name); |
172 | struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); | 178 | struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd); |
173 | void sysfs_put(struct sysfs_dirent *sd); | 179 | void sysfs_put(struct sysfs_dirent *sd); |
174 | void sysfs_printk_last_file(void); | 180 | void sysfs_printk_last_file(void); |
181 | |||
182 | /* Called to clear a ns tag when it is no longer valid */ | ||
183 | void sysfs_exit_ns(enum kobj_ns_type type, const void *tag); | ||
184 | |||
175 | int __must_check sysfs_init(void); | 185 | int __must_check sysfs_init(void); |
176 | 186 | ||
177 | #else /* CONFIG_SYSFS */ | 187 | #else /* CONFIG_SYSFS */ |
@@ -264,6 +274,11 @@ static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, | |||
264 | return 0; | 274 | return 0; |
265 | } | 275 | } |
266 | 276 | ||
277 | static inline void sysfs_delete_link(struct kobject *k, struct kobject *t, | ||
278 | const char *name) | ||
279 | { | ||
280 | } | ||
281 | |||
267 | static inline int sysfs_create_group(struct kobject *kobj, | 282 | static inline int sysfs_create_group(struct kobject *kobj, |
268 | const struct attribute_group *grp) | 283 | const struct attribute_group *grp) |
269 | { | 284 | { |
@@ -301,6 +316,7 @@ static inline void sysfs_notify_dirent(struct sysfs_dirent *sd) | |||
301 | } | 316 | } |
302 | static inline | 317 | static inline |
303 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, | 318 | struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, |
319 | const void *ns, | ||
304 | const unsigned char *name) | 320 | const unsigned char *name) |
305 | { | 321 | { |
306 | return NULL; | 322 | return NULL; |
@@ -313,6 +329,10 @@ static inline void sysfs_put(struct sysfs_dirent *sd) | |||
313 | { | 329 | { |
314 | } | 330 | } |
315 | 331 | ||
332 | static inline void sysfs_exit_ns(int type, const void *tag) | ||
333 | { | ||
334 | } | ||
335 | |||
316 | static inline int __must_check sysfs_init(void) | 336 | static inline int __must_check sysfs_init(void) |
317 | { | 337 | { |
318 | return 0; | 338 | return 0; |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index 3d92396639de..181c8d0e6f73 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
@@ -107,7 +107,7 @@ static inline unsigned int tipc_node(__u32 addr) | |||
107 | * Message importance levels | 107 | * Message importance levels |
108 | */ | 108 | */ |
109 | 109 | ||
110 | #define TIPC_LOW_IMPORTANCE 0 /* default */ | 110 | #define TIPC_LOW_IMPORTANCE 0 |
111 | #define TIPC_MEDIUM_IMPORTANCE 1 | 111 | #define TIPC_MEDIUM_IMPORTANCE 1 |
112 | #define TIPC_HIGH_IMPORTANCE 2 | 112 | #define TIPC_HIGH_IMPORTANCE 2 |
113 | #define TIPC_CRITICAL_IMPORTANCE 3 | 113 | #define TIPC_CRITICAL_IMPORTANCE 3 |
@@ -127,23 +127,17 @@ static inline unsigned int tipc_node(__u32 addr) | |||
127 | * TIPC topology subscription service definitions | 127 | * TIPC topology subscription service definitions |
128 | */ | 128 | */ |
129 | 129 | ||
130 | #define TIPC_SUB_PORTS 0x01 /* filter for port availability */ | 130 | #define TIPC_SUB_SERVICE 0x00 /* Filter for service availability */ |
131 | #define TIPC_SUB_SERVICE 0x02 /* filter for service availability */ | 131 | #define TIPC_SUB_PORTS 0x01 /* Filter for port availability */ |
132 | #define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */ | 132 | #define TIPC_SUB_CANCEL 0x04 /* Cancel a subscription */ |
133 | #if 0 | ||
134 | /* The following filter options are not currently implemented */ | ||
135 | #define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */ | ||
136 | #define TIPC_SUB_NO_UNBIND_EVTS 0x08 /* filter out "withdraw" events */ | ||
137 | #define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */ | ||
138 | #endif | ||
139 | 133 | ||
140 | #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ | 134 | #define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */ |
141 | 135 | ||
142 | struct tipc_subscr { | 136 | struct tipc_subscr { |
143 | struct tipc_name_seq seq; /* name sequence of interest */ | 137 | struct tipc_name_seq seq; /* NBO. Name sequence of interest */ |
144 | __u32 timeout; /* subscription duration (in ms) */ | 138 | __u32 timeout; /* NBO. Subscription duration (in ms) */ |
145 | __u32 filter; /* bitmask of filter options */ | 139 | __u32 filter; /* NBO. Bitmask of filter options */ |
146 | char usr_handle[8]; /* available for subscriber use */ | 140 | char usr_handle[8]; /* Opaque. Available for subscriber use */ |
147 | }; | 141 | }; |
148 | 142 | ||
149 | #define TIPC_PUBLISHED 1 /* publication event */ | 143 | #define TIPC_PUBLISHED 1 /* publication event */ |
@@ -151,11 +145,11 @@ struct tipc_subscr { | |||
151 | #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ | 145 | #define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */ |
152 | 146 | ||
153 | struct tipc_event { | 147 | struct tipc_event { |
154 | __u32 event; /* event type */ | 148 | __u32 event; /* NBO. Event type, as defined above */ |
155 | __u32 found_lower; /* matching name seq instances */ | 149 | __u32 found_lower; /* NBO. Matching name seq instances */ |
156 | __u32 found_upper; /* " " " " */ | 150 | __u32 found_upper; /* " " " " " */ |
157 | struct tipc_portid port; /* associated port */ | 151 | struct tipc_portid port; /* NBO. Associated port */ |
158 | struct tipc_subscr s; /* associated subscription */ | 152 | struct tipc_subscr s; /* Original, associated subscription */ |
159 | }; | 153 | }; |
160 | 154 | ||
161 | /* | 155 | /* |
@@ -188,7 +182,7 @@ struct sockaddr_tipc { | |||
188 | struct tipc_name_seq nameseq; | 182 | struct tipc_name_seq nameseq; |
189 | struct { | 183 | struct { |
190 | struct tipc_name name; | 184 | struct tipc_name name; |
191 | __u32 domain; /* 0: own zone */ | 185 | __u32 domain; |
192 | } name; | 186 | } name; |
193 | } addr; | 187 | } addr; |
194 | }; | 188 | }; |
@@ -206,7 +200,7 @@ struct sockaddr_tipc { | |||
206 | */ | 200 | */ |
207 | 201 | ||
208 | #define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ | 202 | #define TIPC_IMPORTANCE 127 /* Default: TIPC_LOW_IMPORTANCE */ |
209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | 203 | #define TIPC_SRC_DROPPABLE 128 /* Default: based on socket type */ |
210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | 204 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ |
211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | 205 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ |
212 | #define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ | 206 | #define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ |
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h index 2bc6fa4adeb5..9cde86c32412 100644 --- a/include/linux/tipc_config.h +++ b/include/linux/tipc_config.h | |||
@@ -74,6 +74,7 @@ | |||
74 | #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ | 74 | #define TIPC_CMD_SHOW_NAME_TABLE 0x0005 /* tx name_tbl_query, rx ultra_string */ |
75 | #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ | 75 | #define TIPC_CMD_SHOW_PORTS 0x0006 /* tx none, rx ultra_string */ |
76 | #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ | 76 | #define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */ |
77 | #define TIPC_CMD_SHOW_STATS 0x000F /* tx unsigned, rx ultra_string */ | ||
77 | 78 | ||
78 | #if 0 | 79 | #if 0 |
79 | #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ | 80 | #define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 4409967db0c4..931078b73226 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -23,7 +23,7 @@ | |||
23 | */ | 23 | */ |
24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ | 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ |
25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ | 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ |
26 | #define NR_LDISCS 20 | 26 | #define NR_LDISCS 30 |
27 | 27 | ||
28 | /* line disciplines */ | 28 | /* line disciplines */ |
29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
@@ -46,8 +46,9 @@ | |||
46 | #define N_GIGASET_M101 16 /* Siemens Gigaset M101 serial DECT adapter */ | 46 | #define N_GIGASET_M101 16 /* Siemens Gigaset M101 serial DECT adapter */ |
47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ | 47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ |
48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
49 | |||
50 | #define N_V253 19 /* Codec control over voice modem */ | 49 | #define N_V253 19 /* Codec control over voice modem */ |
50 | #define N_CAIF 20 /* CAIF protocol for talking to modems */ | ||
51 | #define N_GSM0710 21 /* GSM 0710 Mux */ | ||
51 | 52 | ||
52 | /* | 53 | /* |
53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 54 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 739f1fd1cc15..d5922a877994 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -45,27 +45,14 @@ struct wusb_dev; | |||
45 | 45 | ||
46 | struct ep_device; | 46 | struct ep_device; |
47 | 47 | ||
48 | /* For SS devices */ | ||
49 | /** | ||
50 | * struct usb_host_ss_ep_comp - Valid for SuperSpeed devices only | ||
51 | * @desc: endpoint companion descriptor, wMaxPacketSize in native byteorder | ||
52 | * @extra: descriptors following this endpoint companion descriptor | ||
53 | * @extralen: how many bytes of "extra" are valid | ||
54 | */ | ||
55 | struct usb_host_ss_ep_comp { | ||
56 | struct usb_ss_ep_comp_descriptor desc; | ||
57 | unsigned char *extra; /* Extra descriptors */ | ||
58 | int extralen; | ||
59 | }; | ||
60 | |||
61 | /** | 48 | /** |
62 | * struct usb_host_endpoint - host-side endpoint descriptor and queue | 49 | * struct usb_host_endpoint - host-side endpoint descriptor and queue |
63 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder | 50 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder |
51 | * @ss_ep_comp: SuperSpeed companion descriptor for this endpoint | ||
64 | * @urb_list: urbs queued to this endpoint; maintained by usbcore | 52 | * @urb_list: urbs queued to this endpoint; maintained by usbcore |
65 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) | 53 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) |
66 | * with one or more transfer descriptors (TDs) per urb | 54 | * with one or more transfer descriptors (TDs) per urb |
67 | * @ep_dev: ep_device for sysfs info | 55 | * @ep_dev: ep_device for sysfs info |
68 | * @ss_ep_comp: companion descriptor information for this endpoint | ||
69 | * @extra: descriptors following this endpoint in the configuration | 56 | * @extra: descriptors following this endpoint in the configuration |
70 | * @extralen: how many bytes of "extra" are valid | 57 | * @extralen: how many bytes of "extra" are valid |
71 | * @enabled: URBs may be submitted to this endpoint | 58 | * @enabled: URBs may be submitted to this endpoint |
@@ -74,11 +61,11 @@ struct usb_host_ss_ep_comp { | |||
74 | * descriptor within an active interface in a given USB configuration. | 61 | * descriptor within an active interface in a given USB configuration. |
75 | */ | 62 | */ |
76 | struct usb_host_endpoint { | 63 | struct usb_host_endpoint { |
77 | struct usb_endpoint_descriptor desc; | 64 | struct usb_endpoint_descriptor desc; |
65 | struct usb_ss_ep_comp_descriptor ss_ep_comp; | ||
78 | struct list_head urb_list; | 66 | struct list_head urb_list; |
79 | void *hcpriv; | 67 | void *hcpriv; |
80 | struct ep_device *ep_dev; /* For sysfs info */ | 68 | struct ep_device *ep_dev; /* For sysfs info */ |
81 | struct usb_host_ss_ep_comp *ss_ep_comp; /* For SS devices */ | ||
82 | 69 | ||
83 | unsigned char *extra; /* Extra descriptors */ | 70 | unsigned char *extra; /* Extra descriptors */ |
84 | int extralen; | 71 | int extralen; |
@@ -109,8 +96,8 @@ enum usb_interface_condition { | |||
109 | /** | 96 | /** |
110 | * struct usb_interface - what usb device drivers talk to | 97 | * struct usb_interface - what usb device drivers talk to |
111 | * @altsetting: array of interface structures, one for each alternate | 98 | * @altsetting: array of interface structures, one for each alternate |
112 | * setting that may be selected. Each one includes a set of | 99 | * setting that may be selected. Each one includes a set of |
113 | * endpoint configurations. They will be in no particular order. | 100 | * endpoint configurations. They will be in no particular order. |
114 | * @cur_altsetting: the current altsetting. | 101 | * @cur_altsetting: the current altsetting. |
115 | * @num_altsetting: number of altsettings defined. | 102 | * @num_altsetting: number of altsettings defined. |
116 | * @intf_assoc: interface association descriptor | 103 | * @intf_assoc: interface association descriptor |
@@ -197,8 +184,6 @@ struct usb_interface { | |||
197 | struct work_struct reset_ws; /* for resets in atomic context */ | 184 | struct work_struct reset_ws; /* for resets in atomic context */ |
198 | }; | 185 | }; |
199 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 186 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
200 | #define interface_to_usbdev(intf) \ | ||
201 | container_of(intf->dev.parent, struct usb_device, dev) | ||
202 | 187 | ||
203 | static inline void *usb_get_intfdata(struct usb_interface *intf) | 188 | static inline void *usb_get_intfdata(struct usb_interface *intf) |
204 | { | 189 | { |
@@ -215,7 +200,7 @@ void usb_put_intf(struct usb_interface *intf); | |||
215 | 200 | ||
216 | /* this maximum is arbitrary */ | 201 | /* this maximum is arbitrary */ |
217 | #define USB_MAXINTERFACES 32 | 202 | #define USB_MAXINTERFACES 32 |
218 | #define USB_MAXIADS USB_MAXINTERFACES/2 | 203 | #define USB_MAXIADS (USB_MAXINTERFACES/2) |
219 | 204 | ||
220 | /** | 205 | /** |
221 | * struct usb_interface_cache - long-term representation of a device interface | 206 | * struct usb_interface_cache - long-term representation of a device interface |
@@ -425,7 +410,6 @@ struct usb_tt; | |||
425 | * @connect_time: time device was first connected | 410 | * @connect_time: time device was first connected |
426 | * @do_remote_wakeup: remote wakeup should be enabled | 411 | * @do_remote_wakeup: remote wakeup should be enabled |
427 | * @reset_resume: needs reset instead of resume | 412 | * @reset_resume: needs reset instead of resume |
428 | * @autosuspend_disabled: autosuspend disabled by the user | ||
429 | * @wusb_dev: if this is a Wireless USB device, link to the WUSB | 413 | * @wusb_dev: if this is a Wireless USB device, link to the WUSB |
430 | * specific data for the device. | 414 | * specific data for the device. |
431 | * @slot_id: Slot ID assigned by xHCI | 415 | * @slot_id: Slot ID assigned by xHCI |
@@ -436,7 +420,7 @@ struct usb_tt; | |||
436 | */ | 420 | */ |
437 | struct usb_device { | 421 | struct usb_device { |
438 | int devnum; | 422 | int devnum; |
439 | char devpath [16]; | 423 | char devpath[16]; |
440 | u32 route; | 424 | u32 route; |
441 | enum usb_device_state state; | 425 | enum usb_device_state state; |
442 | enum usb_device_speed speed; | 426 | enum usb_device_speed speed; |
@@ -469,7 +453,7 @@ struct usb_device { | |||
469 | unsigned persist_enabled:1; | 453 | unsigned persist_enabled:1; |
470 | unsigned have_langid:1; | 454 | unsigned have_langid:1; |
471 | unsigned authorized:1; | 455 | unsigned authorized:1; |
472 | unsigned authenticated:1; | 456 | unsigned authenticated:1; |
473 | unsigned wusb:1; | 457 | unsigned wusb:1; |
474 | int string_langid; | 458 | int string_langid; |
475 | 459 | ||
@@ -501,13 +485,17 @@ struct usb_device { | |||
501 | 485 | ||
502 | unsigned do_remote_wakeup:1; | 486 | unsigned do_remote_wakeup:1; |
503 | unsigned reset_resume:1; | 487 | unsigned reset_resume:1; |
504 | unsigned autosuspend_disabled:1; | ||
505 | #endif | 488 | #endif |
506 | struct wusb_dev *wusb_dev; | 489 | struct wusb_dev *wusb_dev; |
507 | int slot_id; | 490 | int slot_id; |
508 | }; | 491 | }; |
509 | #define to_usb_device(d) container_of(d, struct usb_device, dev) | 492 | #define to_usb_device(d) container_of(d, struct usb_device, dev) |
510 | 493 | ||
494 | static inline struct usb_device *interface_to_usbdev(struct usb_interface *intf) | ||
495 | { | ||
496 | return to_usb_device(intf->dev.parent); | ||
497 | } | ||
498 | |||
511 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 499 | extern struct usb_device *usb_get_dev(struct usb_device *dev); |
512 | extern void usb_put_dev(struct usb_device *dev); | 500 | extern void usb_put_dev(struct usb_device *dev); |
513 | 501 | ||
@@ -522,12 +510,11 @@ extern int usb_lock_device_for_reset(struct usb_device *udev, | |||
522 | extern int usb_reset_device(struct usb_device *dev); | 510 | extern int usb_reset_device(struct usb_device *dev); |
523 | extern void usb_queue_reset_device(struct usb_interface *dev); | 511 | extern void usb_queue_reset_device(struct usb_interface *dev); |
524 | 512 | ||
525 | extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); | ||
526 | 513 | ||
527 | /* USB autosuspend and autoresume */ | 514 | /* USB autosuspend and autoresume */ |
528 | #ifdef CONFIG_USB_SUSPEND | 515 | #ifdef CONFIG_USB_SUSPEND |
529 | extern int usb_enable_autosuspend(struct usb_device *udev); | 516 | extern void usb_enable_autosuspend(struct usb_device *udev); |
530 | extern int usb_disable_autosuspend(struct usb_device *udev); | 517 | extern void usb_disable_autosuspend(struct usb_device *udev); |
531 | 518 | ||
532 | extern int usb_autopm_get_interface(struct usb_interface *intf); | 519 | extern int usb_autopm_get_interface(struct usb_interface *intf); |
533 | extern void usb_autopm_put_interface(struct usb_interface *intf); | 520 | extern void usb_autopm_put_interface(struct usb_interface *intf); |
@@ -572,6 +559,16 @@ static inline void usb_mark_last_busy(struct usb_device *udev) | |||
572 | /* for drivers using iso endpoints */ | 559 | /* for drivers using iso endpoints */ |
573 | extern int usb_get_current_frame_number(struct usb_device *usb_dev); | 560 | extern int usb_get_current_frame_number(struct usb_device *usb_dev); |
574 | 561 | ||
562 | /* Sets up a group of bulk endpoints to support multiple stream IDs. */ | ||
563 | extern int usb_alloc_streams(struct usb_interface *interface, | ||
564 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
565 | unsigned int num_streams, gfp_t mem_flags); | ||
566 | |||
567 | /* Reverts a group of bulk endpoints back to not using stream IDs. */ | ||
568 | extern void usb_free_streams(struct usb_interface *interface, | ||
569 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
570 | gfp_t mem_flags); | ||
571 | |||
575 | /* used these for multi-interface device registration */ | 572 | /* used these for multi-interface device registration */ |
576 | extern int usb_driver_claim_interface(struct usb_driver *driver, | 573 | extern int usb_driver_claim_interface(struct usb_driver *driver, |
577 | struct usb_interface *iface, void *priv); | 574 | struct usb_interface *iface, void *priv); |
@@ -667,7 +664,7 @@ static inline int usb_make_path(struct usb_device *dev, char *buf, size_t size) | |||
667 | * This macro is used to create a struct usb_device_id that matches a | 664 | * This macro is used to create a struct usb_device_id that matches a |
668 | * specific device. | 665 | * specific device. |
669 | */ | 666 | */ |
670 | #define USB_DEVICE(vend,prod) \ | 667 | #define USB_DEVICE(vend, prod) \ |
671 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ | 668 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \ |
672 | .idVendor = (vend), \ | 669 | .idVendor = (vend), \ |
673 | .idProduct = (prod) | 670 | .idProduct = (prod) |
@@ -958,17 +955,25 @@ extern int usb_disabled(void); | |||
958 | #define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame | 955 | #define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame |
959 | * ignored */ | 956 | * ignored */ |
960 | #define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ | 957 | #define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */ |
961 | #define URB_NO_SETUP_DMA_MAP 0x0008 /* urb->setup_dma valid on submit */ | ||
962 | #define URB_NO_FSBR 0x0020 /* UHCI-specific */ | 958 | #define URB_NO_FSBR 0x0020 /* UHCI-specific */ |
963 | #define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ | 959 | #define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */ |
964 | #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt | 960 | #define URB_NO_INTERRUPT 0x0080 /* HINT: no non-error interrupt |
965 | * needed */ | 961 | * needed */ |
966 | #define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ | 962 | #define URB_FREE_BUFFER 0x0100 /* Free transfer buffer with the URB */ |
967 | 963 | ||
964 | /* The following flags are used internally by usbcore and HCDs */ | ||
968 | #define URB_DIR_IN 0x0200 /* Transfer from device to host */ | 965 | #define URB_DIR_IN 0x0200 /* Transfer from device to host */ |
969 | #define URB_DIR_OUT 0 | 966 | #define URB_DIR_OUT 0 |
970 | #define URB_DIR_MASK URB_DIR_IN | 967 | #define URB_DIR_MASK URB_DIR_IN |
971 | 968 | ||
969 | #define URB_DMA_MAP_SINGLE 0x00010000 /* Non-scatter-gather mapping */ | ||
970 | #define URB_DMA_MAP_PAGE 0x00020000 /* HCD-unsupported S-G */ | ||
971 | #define URB_DMA_MAP_SG 0x00040000 /* HCD-supported S-G */ | ||
972 | #define URB_MAP_LOCAL 0x00080000 /* HCD-local-memory mapping */ | ||
973 | #define URB_SETUP_MAP_SINGLE 0x00100000 /* Setup packet DMA mapped */ | ||
974 | #define URB_SETUP_MAP_LOCAL 0x00200000 /* HCD-local setup packet */ | ||
975 | #define URB_DMA_SG_COMBINED 0x00400000 /* S-G entries were combined */ | ||
976 | |||
972 | struct usb_iso_packet_descriptor { | 977 | struct usb_iso_packet_descriptor { |
973 | unsigned int offset; | 978 | unsigned int offset; |
974 | unsigned int length; /* expected length */ | 979 | unsigned int length; /* expected length */ |
@@ -1045,12 +1050,8 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1045 | * @setup_packet: Only used for control transfers, this points to eight bytes | 1050 | * @setup_packet: Only used for control transfers, this points to eight bytes |
1046 | * of setup data. Control transfers always start by sending this data | 1051 | * of setup data. Control transfers always start by sending this data |
1047 | * to the device. Then transfer_buffer is read or written, if needed. | 1052 | * to the device. Then transfer_buffer is read or written, if needed. |
1048 | * @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the | 1053 | * @setup_dma: DMA pointer for the setup packet. The caller must not use |
1049 | * device driver has provided this DMA address for the setup packet. | 1054 | * this field; setup_packet must point to a valid buffer. |
1050 | * The host controller driver should use this in preference to | ||
1051 | * setup_packet, but the HCD may chose to ignore the address if it must | ||
1052 | * copy the setup packet into internal structures. Therefore, setup_packet | ||
1053 | * must always point to a valid buffer. | ||
1054 | * @start_frame: Returns the initial frame for isochronous transfers. | 1055 | * @start_frame: Returns the initial frame for isochronous transfers. |
1055 | * @number_of_packets: Lists the number of ISO transfer buffers. | 1056 | * @number_of_packets: Lists the number of ISO transfer buffers. |
1056 | * @interval: Specifies the polling interval for interrupt or isochronous | 1057 | * @interval: Specifies the polling interval for interrupt or isochronous |
@@ -1082,13 +1083,14 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1082 | * bounce buffer or talking to an IOMMU), | 1083 | * bounce buffer or talking to an IOMMU), |
1083 | * although they're cheap on commodity x86 and ppc hardware. | 1084 | * although they're cheap on commodity x86 and ppc hardware. |
1084 | * | 1085 | * |
1085 | * Alternatively, drivers may pass the URB_NO_xxx_DMA_MAP transfer flags, | 1086 | * Alternatively, drivers may pass the URB_NO_TRANSFER_DMA_MAP transfer flag, |
1086 | * which tell the host controller driver that no such mapping is needed since | 1087 | * which tells the host controller driver that no such mapping is needed for |
1088 | * the transfer_buffer since | ||
1087 | * the device driver is DMA-aware. For example, a device driver might | 1089 | * the device driver is DMA-aware. For example, a device driver might |
1088 | * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). | 1090 | * allocate a DMA buffer with usb_alloc_coherent() or call usb_buffer_map(). |
1089 | * When these transfer flags are provided, host controller drivers will | 1091 | * When this transfer flag is provided, host controller drivers will |
1090 | * attempt to use the dma addresses found in the transfer_dma and/or | 1092 | * attempt to use the dma address found in the transfer_dma |
1091 | * setup_dma fields rather than determining a dma address themselves. | 1093 | * field rather than determining a dma address themselves. |
1092 | * | 1094 | * |
1093 | * Note that transfer_buffer must still be set if the controller | 1095 | * Note that transfer_buffer must still be set if the controller |
1094 | * does not support DMA (as indicated by bus.uses_dma) and when talking | 1096 | * does not support DMA (as indicated by bus.uses_dma) and when talking |
@@ -1111,11 +1113,9 @@ typedef void (*usb_complete_t)(struct urb *); | |||
1111 | * should always terminate with a short packet, even if it means adding an | 1113 | * should always terminate with a short packet, even if it means adding an |
1112 | * extra zero length packet. | 1114 | * extra zero length packet. |
1113 | * | 1115 | * |
1114 | * Control URBs must provide a setup_packet. The setup_packet and | 1116 | * Control URBs must provide a valid pointer in the setup_packet field. |
1115 | * transfer_buffer may each be mapped for DMA or not, independently of | 1117 | * Unlike the transfer_buffer, the setup_packet may not be mapped for DMA |
1116 | * the other. The transfer_flags bits URB_NO_TRANSFER_DMA_MAP and | 1118 | * beforehand. |
1117 | * URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped. | ||
1118 | * URB_NO_SETUP_DMA_MAP is ignored for non-control URBs. | ||
1119 | * | 1119 | * |
1120 | * Interrupt URBs must provide an interval, saying how often (in milliseconds | 1120 | * Interrupt URBs must provide an interval, saying how often (in milliseconds |
1121 | * or, for highspeed devices, 125 microsecond units) | 1121 | * or, for highspeed devices, 125 microsecond units) |
@@ -1186,14 +1186,15 @@ struct urb { | |||
1186 | * current owner */ | 1186 | * current owner */ |
1187 | struct list_head anchor_list; /* the URB may be anchored */ | 1187 | struct list_head anchor_list; /* the URB may be anchored */ |
1188 | struct usb_anchor *anchor; | 1188 | struct usb_anchor *anchor; |
1189 | struct usb_device *dev; /* (in) pointer to associated device */ | 1189 | struct usb_device *dev; /* (in) pointer to associated device */ |
1190 | struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ | 1190 | struct usb_host_endpoint *ep; /* (internal) pointer to endpoint */ |
1191 | unsigned int pipe; /* (in) pipe information */ | 1191 | unsigned int pipe; /* (in) pipe information */ |
1192 | unsigned int stream_id; /* (in) stream ID */ | ||
1192 | int status; /* (return) non-ISO status */ | 1193 | int status; /* (return) non-ISO status */ |
1193 | unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ | 1194 | unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ |
1194 | void *transfer_buffer; /* (in) associated data buffer */ | 1195 | void *transfer_buffer; /* (in) associated data buffer */ |
1195 | dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ | 1196 | dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ |
1196 | struct usb_sg_request *sg; /* (in) scatter gather buffer list */ | 1197 | struct scatterlist *sg; /* (in) scatter gather buffer list */ |
1197 | int num_sgs; /* (in) number of entries in the sg list */ | 1198 | int num_sgs; /* (in) number of entries in the sg list */ |
1198 | u32 transfer_buffer_length; /* (in) data buffer length */ | 1199 | u32 transfer_buffer_length; /* (in) data buffer length */ |
1199 | u32 actual_length; /* (return) actual transfer length */ | 1200 | u32 actual_length; /* (return) actual transfer length */ |
@@ -1371,18 +1372,6 @@ void *usb_alloc_coherent(struct usb_device *dev, size_t size, | |||
1371 | void usb_free_coherent(struct usb_device *dev, size_t size, | 1372 | void usb_free_coherent(struct usb_device *dev, size_t size, |
1372 | void *addr, dma_addr_t dma); | 1373 | void *addr, dma_addr_t dma); |
1373 | 1374 | ||
1374 | /* Compatible macros while we switch over */ | ||
1375 | static inline void *usb_buffer_alloc(struct usb_device *dev, size_t size, | ||
1376 | gfp_t mem_flags, dma_addr_t *dma) | ||
1377 | { | ||
1378 | return usb_alloc_coherent(dev, size, mem_flags, dma); | ||
1379 | } | ||
1380 | static inline void usb_buffer_free(struct usb_device *dev, size_t size, | ||
1381 | void *addr, dma_addr_t dma) | ||
1382 | { | ||
1383 | return usb_free_coherent(dev, size, addr, dma); | ||
1384 | } | ||
1385 | |||
1386 | #if 0 | 1375 | #if 0 |
1387 | struct urb *usb_buffer_map(struct urb *urb); | 1376 | struct urb *usb_buffer_map(struct urb *urb); |
1388 | void usb_buffer_dmasync(struct urb *urb); | 1377 | void usb_buffer_dmasync(struct urb *urb); |
@@ -1467,8 +1456,6 @@ struct usb_sg_request { | |||
1467 | 1456 | ||
1468 | struct usb_device *dev; | 1457 | struct usb_device *dev; |
1469 | int pipe; | 1458 | int pipe; |
1470 | struct scatterlist *sg; | ||
1471 | int nents; | ||
1472 | 1459 | ||
1473 | int entries; | 1460 | int entries; |
1474 | struct urb **urbs; | 1461 | struct urb **urbs; |
@@ -1536,23 +1523,31 @@ static inline unsigned int __create_pipe(struct usb_device *dev, | |||
1536 | } | 1523 | } |
1537 | 1524 | ||
1538 | /* Create various pipes... */ | 1525 | /* Create various pipes... */ |
1539 | #define usb_sndctrlpipe(dev,endpoint) \ | 1526 | #define usb_sndctrlpipe(dev, endpoint) \ |
1540 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) | 1527 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint)) |
1541 | #define usb_rcvctrlpipe(dev,endpoint) \ | 1528 | #define usb_rcvctrlpipe(dev, endpoint) \ |
1542 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1529 | ((PIPE_CONTROL << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1543 | #define usb_sndisocpipe(dev,endpoint) \ | 1530 | #define usb_sndisocpipe(dev, endpoint) \ |
1544 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) | 1531 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint)) |
1545 | #define usb_rcvisocpipe(dev,endpoint) \ | 1532 | #define usb_rcvisocpipe(dev, endpoint) \ |
1546 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1533 | ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1547 | #define usb_sndbulkpipe(dev,endpoint) \ | 1534 | #define usb_sndbulkpipe(dev, endpoint) \ |
1548 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) | 1535 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint)) |
1549 | #define usb_rcvbulkpipe(dev,endpoint) \ | 1536 | #define usb_rcvbulkpipe(dev, endpoint) \ |
1550 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1537 | ((PIPE_BULK << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1551 | #define usb_sndintpipe(dev,endpoint) \ | 1538 | #define usb_sndintpipe(dev, endpoint) \ |
1552 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) | 1539 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint)) |
1553 | #define usb_rcvintpipe(dev,endpoint) \ | 1540 | #define usb_rcvintpipe(dev, endpoint) \ |
1554 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) | 1541 | ((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN) |
1555 | 1542 | ||
1543 | static inline struct usb_host_endpoint * | ||
1544 | usb_pipe_endpoint(struct usb_device *dev, unsigned int pipe) | ||
1545 | { | ||
1546 | struct usb_host_endpoint **eps; | ||
1547 | eps = usb_pipein(pipe) ? dev->ep_in : dev->ep_out; | ||
1548 | return eps[usb_pipeendpoint(pipe)]; | ||
1549 | } | ||
1550 | |||
1556 | /*-------------------------------------------------------------------------*/ | 1551 | /*-------------------------------------------------------------------------*/ |
1557 | 1552 | ||
1558 | static inline __u16 | 1553 | static inline __u16 |
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild index 29fd73b0bffc..51410e0200cf 100644 --- a/include/linux/usb/Kbuild +++ b/include/linux/usb/Kbuild | |||
@@ -1,6 +1,7 @@ | |||
1 | header-y += audio.h | 1 | header-y += audio.h |
2 | header-y += cdc.h | 2 | header-y += cdc.h |
3 | header-y += ch9.h | 3 | header-y += ch9.h |
4 | header-y += ch11.h | ||
4 | header-y += gadgetfs.h | 5 | header-y += gadgetfs.h |
5 | header-y += midi.h | 6 | header-y += midi.h |
6 | header-y += g_printer.h | 7 | header-y += g_printer.h |
diff --git a/include/linux/usb/atmel_usba_udc.h b/include/linux/usb/atmel_usba_udc.h index baf41c8616e9..ba99af275a31 100644 --- a/include/linux/usb/atmel_usba_udc.h +++ b/include/linux/usb/atmel_usba_udc.h | |||
@@ -15,7 +15,7 @@ struct usba_ep_data { | |||
15 | 15 | ||
16 | struct usba_platform_data { | 16 | struct usba_platform_data { |
17 | int vbus_pin; | 17 | int vbus_pin; |
18 | int vbus_pin_inverted; | 18 | int vbus_pin_inverted; |
19 | int num_ep; | 19 | int num_ep; |
20 | struct usba_ep_data ep[0]; | 20 | struct usba_ep_data ep[0]; |
21 | }; | 21 | }; |
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index c0ef18dc2da7..5d646c388752 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
@@ -101,7 +101,7 @@ struct uac_ac_header_descriptor_v1 { | |||
101 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) | 101 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) |
102 | 102 | ||
103 | /* As above, but more useful for defining your own descriptors: */ | 103 | /* As above, but more useful for defining your own descriptors: */ |
104 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ | 104 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ |
105 | struct uac_ac_header_descriptor_v1_##n { \ | 105 | struct uac_ac_header_descriptor_v1_##n { \ |
106 | __u8 bLength; \ | 106 | __u8 bLength; \ |
107 | __u8 bDescriptorType; \ | 107 | __u8 bDescriptorType; \ |
@@ -169,7 +169,7 @@ struct uac_output_terminal_descriptor_v1 { | |||
169 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) | 169 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) |
170 | 170 | ||
171 | /* As above, but more useful for defining your own descriptors: */ | 171 | /* As above, but more useful for defining your own descriptors: */ |
172 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ | 172 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ |
173 | struct uac_feature_unit_descriptor_##ch { \ | 173 | struct uac_feature_unit_descriptor_##ch { \ |
174 | __u8 bLength; \ | 174 | __u8 bLength; \ |
175 | __u8 bDescriptorType; \ | 175 | __u8 bDescriptorType; \ |
@@ -378,7 +378,7 @@ struct uac_format_type_i_discrete_descriptor { | |||
378 | __u8 tSamFreq[][3]; | 378 | __u8 tSamFreq[][3]; |
379 | } __attribute__ ((packed)); | 379 | } __attribute__ ((packed)); |
380 | 380 | ||
381 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ | 381 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ |
382 | struct uac_format_type_i_discrete_descriptor_##n { \ | 382 | struct uac_format_type_i_discrete_descriptor_##n { \ |
383 | __u8 bLength; \ | 383 | __u8 bLength; \ |
384 | __u8 bDescriptorType; \ | 384 | __u8 bDescriptorType; \ |
diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h index c24124a42ce5..c117a68d04a7 100644 --- a/include/linux/usb/cdc.h +++ b/include/linux/usb/cdc.h | |||
@@ -18,6 +18,7 @@ | |||
18 | #define USB_CDC_SUBCLASS_MDLM 0x0a | 18 | #define USB_CDC_SUBCLASS_MDLM 0x0a |
19 | #define USB_CDC_SUBCLASS_OBEX 0x0b | 19 | #define USB_CDC_SUBCLASS_OBEX 0x0b |
20 | #define USB_CDC_SUBCLASS_EEM 0x0c | 20 | #define USB_CDC_SUBCLASS_EEM 0x0c |
21 | #define USB_CDC_SUBCLASS_NCM 0x0d | ||
21 | 22 | ||
22 | #define USB_CDC_PROTO_NONE 0 | 23 | #define USB_CDC_PROTO_NONE 0 |
23 | 24 | ||
@@ -49,6 +50,7 @@ | |||
49 | #define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */ | 50 | #define USB_CDC_MDLM_DETAIL_TYPE 0x13 /* mdlm_detail_desc */ |
50 | #define USB_CDC_DMM_TYPE 0x14 | 51 | #define USB_CDC_DMM_TYPE 0x14 |
51 | #define USB_CDC_OBEX_TYPE 0x15 | 52 | #define USB_CDC_OBEX_TYPE 0x15 |
53 | #define USB_CDC_NCM_TYPE 0x1a | ||
52 | 54 | ||
53 | /* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ | 55 | /* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ |
54 | struct usb_cdc_header_desc { | 56 | struct usb_cdc_header_desc { |
@@ -174,6 +176,15 @@ struct usb_cdc_obex_desc { | |||
174 | __le16 bcdVersion; | 176 | __le16 bcdVersion; |
175 | } __attribute__ ((packed)); | 177 | } __attribute__ ((packed)); |
176 | 178 | ||
179 | /* "NCM Control Model Functional Descriptor" */ | ||
180 | struct usb_cdc_ncm_desc { | ||
181 | __u8 bLength; | ||
182 | __u8 bDescriptorType; | ||
183 | __u8 bDescriptorSubType; | ||
184 | |||
185 | __le16 bcdNcmVersion; | ||
186 | __u8 bmNetworkCapabilities; | ||
187 | } __attribute__ ((packed)); | ||
177 | /*-------------------------------------------------------------------------*/ | 188 | /*-------------------------------------------------------------------------*/ |
178 | 189 | ||
179 | /* | 190 | /* |
@@ -197,6 +208,17 @@ struct usb_cdc_obex_desc { | |||
197 | #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 | 208 | #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 |
198 | #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 | 209 | #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 |
199 | #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 | 210 | #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 |
211 | #define USB_CDC_GET_NTB_PARAMETERS 0x80 | ||
212 | #define USB_CDC_GET_NET_ADDRESS 0x81 | ||
213 | #define USB_CDC_SET_NET_ADDRESS 0x82 | ||
214 | #define USB_CDC_GET_NTB_FORMAT 0x83 | ||
215 | #define USB_CDC_SET_NTB_FORMAT 0x84 | ||
216 | #define USB_CDC_GET_NTB_INPUT_SIZE 0x85 | ||
217 | #define USB_CDC_SET_NTB_INPUT_SIZE 0x86 | ||
218 | #define USB_CDC_GET_MAX_DATAGRAM_SIZE 0x87 | ||
219 | #define USB_CDC_SET_MAX_DATAGRAM_SIZE 0x88 | ||
220 | #define USB_CDC_GET_CRC_MODE 0x89 | ||
221 | #define USB_CDC_SET_CRC_MODE 0x8a | ||
200 | 222 | ||
201 | /* Line Coding Structure from CDC spec 6.2.13 */ | 223 | /* Line Coding Structure from CDC spec 6.2.13 */ |
202 | struct usb_cdc_line_coding { | 224 | struct usb_cdc_line_coding { |
@@ -247,4 +269,76 @@ struct usb_cdc_notification { | |||
247 | __le16 wLength; | 269 | __le16 wLength; |
248 | } __attribute__ ((packed)); | 270 | } __attribute__ ((packed)); |
249 | 271 | ||
272 | /*-------------------------------------------------------------------------*/ | ||
273 | |||
274 | /* | ||
275 | * Class Specific structures and constants | ||
276 | * | ||
277 | * CDC NCM parameter structure, CDC NCM subclass 6.2.1 | ||
278 | * | ||
279 | */ | ||
280 | |||
281 | struct usb_cdc_ncm_ntb_parameter { | ||
282 | __le16 wLength; | ||
283 | __le16 bmNtbFormatSupported; | ||
284 | __le32 dwNtbInMaxSize; | ||
285 | __le16 wNdpInDivisor; | ||
286 | __le16 wNdpInPayloadRemainder; | ||
287 | __le16 wNdpInAlignment; | ||
288 | __le16 wPadding1; | ||
289 | __le32 dwNtbOutMaxSize; | ||
290 | __le16 wNdpOutDivisor; | ||
291 | __le16 wNdpOutPayloadRemainder; | ||
292 | __le16 wNdpOutAlignment; | ||
293 | __le16 wPadding2; | ||
294 | } __attribute__ ((packed)); | ||
295 | |||
296 | /* | ||
297 | * CDC NCM transfer headers, CDC NCM subclass 3.2 | ||
298 | */ | ||
299 | |||
300 | #define NCM_NTH16_SIGN 0x484D434E /* NCMH */ | ||
301 | #define NCM_NTH32_SIGN 0x686D636E /* ncmh */ | ||
302 | |||
303 | struct usb_cdc_ncm_nth16 { | ||
304 | __le32 dwSignature; | ||
305 | __le16 wHeaderLength; | ||
306 | __le16 wSequence; | ||
307 | __le16 wBlockLength; | ||
308 | __le16 wFpIndex; | ||
309 | } __attribute__ ((packed)); | ||
310 | |||
311 | struct usb_cdc_ncm_nth32 { | ||
312 | __le32 dwSignature; | ||
313 | __le16 wHeaderLength; | ||
314 | __le16 wSequence; | ||
315 | __le32 dwBlockLength; | ||
316 | __le32 dwFpIndex; | ||
317 | } __attribute__ ((packed)); | ||
318 | |||
319 | /* | ||
320 | * CDC NCM datagram pointers, CDC NCM subclass 3.3 | ||
321 | */ | ||
322 | |||
323 | #define NCM_NDP16_CRC_SIGN 0x314D434E /* NCM1 */ | ||
324 | #define NCM_NDP16_NOCRC_SIGN 0x304D434E /* NCM0 */ | ||
325 | #define NCM_NDP32_CRC_SIGN 0x316D636E /* ncm1 */ | ||
326 | #define NCM_NDP32_NOCRC_SIGN 0x306D636E /* ncm0 */ | ||
327 | |||
328 | struct usb_cdc_ncm_ndp16 { | ||
329 | __le32 dwSignature; | ||
330 | __le16 wLength; | ||
331 | __le16 wNextFpIndex; | ||
332 | __u8 data[0]; | ||
333 | } __attribute__ ((packed)); | ||
334 | |||
335 | struct usb_cdc_ncm_ndp32 { | ||
336 | __le32 dwSignature; | ||
337 | __le16 wLength; | ||
338 | __le16 wReserved6; | ||
339 | __le32 dwNextFpIndex; | ||
340 | __le32 dwReserved12; | ||
341 | __u8 data[0]; | ||
342 | } __attribute__ ((packed)); | ||
343 | |||
250 | #endif /* __LINUX_USB_CDC_H */ | 344 | #endif /* __LINUX_USB_CDC_H */ |
diff --git a/include/linux/usb/ch11.h b/include/linux/usb/ch11.h new file mode 100644 index 000000000000..119194c85d10 --- /dev/null +++ b/include/linux/usb/ch11.h | |||
@@ -0,0 +1,167 @@ | |||
1 | /* | ||
2 | * This file holds Hub protocol constants and data structures that are | ||
3 | * defined in chapter 11 (Hub Specification) of the USB 2.0 specification. | ||
4 | * | ||
5 | * It is used/shared between the USB core, the HCDs and couple of other USB | ||
6 | * drivers. | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_CH11_H | ||
10 | #define __LINUX_CH11_H | ||
11 | |||
12 | #include <linux/types.h> /* __u8 etc */ | ||
13 | |||
14 | /* | ||
15 | * Hub request types | ||
16 | */ | ||
17 | |||
18 | #define USB_RT_HUB (USB_TYPE_CLASS | USB_RECIP_DEVICE) | ||
19 | #define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER) | ||
20 | |||
21 | /* | ||
22 | * Hub class requests | ||
23 | * See USB 2.0 spec Table 11-16 | ||
24 | */ | ||
25 | #define HUB_CLEAR_TT_BUFFER 8 | ||
26 | #define HUB_RESET_TT 9 | ||
27 | #define HUB_GET_TT_STATE 10 | ||
28 | #define HUB_STOP_TT 11 | ||
29 | |||
30 | /* | ||
31 | * Hub Class feature numbers | ||
32 | * See USB 2.0 spec Table 11-17 | ||
33 | */ | ||
34 | #define C_HUB_LOCAL_POWER 0 | ||
35 | #define C_HUB_OVER_CURRENT 1 | ||
36 | |||
37 | /* | ||
38 | * Port feature numbers | ||
39 | * See USB 2.0 spec Table 11-17 | ||
40 | */ | ||
41 | #define USB_PORT_FEAT_CONNECTION 0 | ||
42 | #define USB_PORT_FEAT_ENABLE 1 | ||
43 | #define USB_PORT_FEAT_SUSPEND 2 /* L2 suspend */ | ||
44 | #define USB_PORT_FEAT_OVER_CURRENT 3 | ||
45 | #define USB_PORT_FEAT_RESET 4 | ||
46 | #define USB_PORT_FEAT_L1 5 /* L1 suspend */ | ||
47 | #define USB_PORT_FEAT_POWER 8 | ||
48 | #define USB_PORT_FEAT_LOWSPEED 9 /* Should never be used */ | ||
49 | #define USB_PORT_FEAT_C_CONNECTION 16 | ||
50 | #define USB_PORT_FEAT_C_ENABLE 17 | ||
51 | #define USB_PORT_FEAT_C_SUSPEND 18 | ||
52 | #define USB_PORT_FEAT_C_OVER_CURRENT 19 | ||
53 | #define USB_PORT_FEAT_C_RESET 20 | ||
54 | #define USB_PORT_FEAT_TEST 21 | ||
55 | #define USB_PORT_FEAT_INDICATOR 22 | ||
56 | #define USB_PORT_FEAT_C_PORT_L1 23 | ||
57 | |||
58 | /* | ||
59 | * Hub Status and Hub Change results | ||
60 | * See USB 2.0 spec Table 11-19 and Table 11-20 | ||
61 | */ | ||
62 | struct usb_port_status { | ||
63 | __le16 wPortStatus; | ||
64 | __le16 wPortChange; | ||
65 | } __attribute__ ((packed)); | ||
66 | |||
67 | /* | ||
68 | * wPortStatus bit field | ||
69 | * See USB 2.0 spec Table 11-21 | ||
70 | */ | ||
71 | #define USB_PORT_STAT_CONNECTION 0x0001 | ||
72 | #define USB_PORT_STAT_ENABLE 0x0002 | ||
73 | #define USB_PORT_STAT_SUSPEND 0x0004 | ||
74 | #define USB_PORT_STAT_OVERCURRENT 0x0008 | ||
75 | #define USB_PORT_STAT_RESET 0x0010 | ||
76 | #define USB_PORT_STAT_L1 0x0020 | ||
77 | /* bits 6 to 7 are reserved */ | ||
78 | #define USB_PORT_STAT_POWER 0x0100 | ||
79 | #define USB_PORT_STAT_LOW_SPEED 0x0200 | ||
80 | #define USB_PORT_STAT_HIGH_SPEED 0x0400 | ||
81 | #define USB_PORT_STAT_TEST 0x0800 | ||
82 | #define USB_PORT_STAT_INDICATOR 0x1000 | ||
83 | /* bits 13 to 15 are reserved */ | ||
84 | #define USB_PORT_STAT_SUPER_SPEED 0x8000 /* Linux-internal */ | ||
85 | |||
86 | /* | ||
87 | * wPortChange bit field | ||
88 | * See USB 2.0 spec Table 11-22 | ||
89 | * Bits 0 to 4 shown, bits 5 to 15 are reserved | ||
90 | */ | ||
91 | #define USB_PORT_STAT_C_CONNECTION 0x0001 | ||
92 | #define USB_PORT_STAT_C_ENABLE 0x0002 | ||
93 | #define USB_PORT_STAT_C_SUSPEND 0x0004 | ||
94 | #define USB_PORT_STAT_C_OVERCURRENT 0x0008 | ||
95 | #define USB_PORT_STAT_C_RESET 0x0010 | ||
96 | #define USB_PORT_STAT_C_L1 0x0020 | ||
97 | |||
98 | /* | ||
99 | * wHubCharacteristics (masks) | ||
100 | * See USB 2.0 spec Table 11-13, offset 3 | ||
101 | */ | ||
102 | #define HUB_CHAR_LPSM 0x0003 /* D1 .. D0 */ | ||
103 | #define HUB_CHAR_COMPOUND 0x0004 /* D2 */ | ||
104 | #define HUB_CHAR_OCPM 0x0018 /* D4 .. D3 */ | ||
105 | #define HUB_CHAR_TTTT 0x0060 /* D6 .. D5 */ | ||
106 | #define HUB_CHAR_PORTIND 0x0080 /* D7 */ | ||
107 | |||
108 | struct usb_hub_status { | ||
109 | __le16 wHubStatus; | ||
110 | __le16 wHubChange; | ||
111 | } __attribute__ ((packed)); | ||
112 | |||
113 | /* | ||
114 | * Hub Status & Hub Change bit masks | ||
115 | * See USB 2.0 spec Table 11-19 and Table 11-20 | ||
116 | * Bits 0 and 1 for wHubStatus and wHubChange | ||
117 | * Bits 2 to 15 are reserved for both | ||
118 | */ | ||
119 | #define HUB_STATUS_LOCAL_POWER 0x0001 | ||
120 | #define HUB_STATUS_OVERCURRENT 0x0002 | ||
121 | #define HUB_CHANGE_LOCAL_POWER 0x0001 | ||
122 | #define HUB_CHANGE_OVERCURRENT 0x0002 | ||
123 | |||
124 | |||
125 | /* | ||
126 | * Hub descriptor | ||
127 | * See USB 2.0 spec Table 11-13 | ||
128 | */ | ||
129 | |||
130 | #define USB_DT_HUB (USB_TYPE_CLASS | 0x09) | ||
131 | #define USB_DT_HUB_NONVAR_SIZE 7 | ||
132 | |||
133 | struct usb_hub_descriptor { | ||
134 | __u8 bDescLength; | ||
135 | __u8 bDescriptorType; | ||
136 | __u8 bNbrPorts; | ||
137 | __le16 wHubCharacteristics; | ||
138 | __u8 bPwrOn2PwrGood; | ||
139 | __u8 bHubContrCurrent; | ||
140 | /* add 1 bit for hub status change; round to bytes */ | ||
141 | __u8 DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8]; | ||
142 | __u8 PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8]; | ||
143 | } __attribute__ ((packed)); | ||
144 | |||
145 | |||
146 | /* port indicator status selectors, tables 11-7 and 11-25 */ | ||
147 | #define HUB_LED_AUTO 0 | ||
148 | #define HUB_LED_AMBER 1 | ||
149 | #define HUB_LED_GREEN 2 | ||
150 | #define HUB_LED_OFF 3 | ||
151 | |||
152 | enum hub_led_mode { | ||
153 | INDICATOR_AUTO = 0, | ||
154 | INDICATOR_CYCLE, | ||
155 | /* software blinks for attention: software, hardware, reserved */ | ||
156 | INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF, | ||
157 | INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF, | ||
158 | INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF | ||
159 | } __attribute__ ((packed)); | ||
160 | |||
161 | /* Transaction Translator Think Times, in bits */ | ||
162 | #define HUB_TTTT_8_BITS 0x00 | ||
163 | #define HUB_TTTT_16_BITS 0x20 | ||
164 | #define HUB_TTTT_24_BITS 0x40 | ||
165 | #define HUB_TTTT_32_BITS 0x60 | ||
166 | |||
167 | #endif /* __LINUX_CH11_H */ | ||
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index e58369ff8168..da2ed77d3e8d 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
@@ -191,6 +191,8 @@ struct usb_ctrlrequest { | |||
191 | #define USB_DT_WIRE_ADAPTER 0x21 | 191 | #define USB_DT_WIRE_ADAPTER 0x21 |
192 | #define USB_DT_RPIPE 0x22 | 192 | #define USB_DT_RPIPE 0x22 |
193 | #define USB_DT_CS_RADIO_CONTROL 0x23 | 193 | #define USB_DT_CS_RADIO_CONTROL 0x23 |
194 | /* From the T10 UAS specification */ | ||
195 | #define USB_DT_PIPE_USAGE 0x24 | ||
194 | /* From the USB 3.0 spec */ | 196 | /* From the USB 3.0 spec */ |
195 | #define USB_DT_SS_ENDPOINT_COMP 0x30 | 197 | #define USB_DT_SS_ENDPOINT_COMP 0x30 |
196 | 198 | ||
@@ -475,7 +477,7 @@ static inline int usb_endpoint_xfer_isoc( | |||
475 | static inline int usb_endpoint_is_bulk_in( | 477 | static inline int usb_endpoint_is_bulk_in( |
476 | const struct usb_endpoint_descriptor *epd) | 478 | const struct usb_endpoint_descriptor *epd) |
477 | { | 479 | { |
478 | return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd)); | 480 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); |
479 | } | 481 | } |
480 | 482 | ||
481 | /** | 483 | /** |
@@ -488,7 +490,7 @@ static inline int usb_endpoint_is_bulk_in( | |||
488 | static inline int usb_endpoint_is_bulk_out( | 490 | static inline int usb_endpoint_is_bulk_out( |
489 | const struct usb_endpoint_descriptor *epd) | 491 | const struct usb_endpoint_descriptor *epd) |
490 | { | 492 | { |
491 | return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd)); | 493 | return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); |
492 | } | 494 | } |
493 | 495 | ||
494 | /** | 496 | /** |
@@ -501,7 +503,7 @@ static inline int usb_endpoint_is_bulk_out( | |||
501 | static inline int usb_endpoint_is_int_in( | 503 | static inline int usb_endpoint_is_int_in( |
502 | const struct usb_endpoint_descriptor *epd) | 504 | const struct usb_endpoint_descriptor *epd) |
503 | { | 505 | { |
504 | return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd)); | 506 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); |
505 | } | 507 | } |
506 | 508 | ||
507 | /** | 509 | /** |
@@ -514,7 +516,7 @@ static inline int usb_endpoint_is_int_in( | |||
514 | static inline int usb_endpoint_is_int_out( | 516 | static inline int usb_endpoint_is_int_out( |
515 | const struct usb_endpoint_descriptor *epd) | 517 | const struct usb_endpoint_descriptor *epd) |
516 | { | 518 | { |
517 | return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd)); | 519 | return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); |
518 | } | 520 | } |
519 | 521 | ||
520 | /** | 522 | /** |
@@ -527,7 +529,7 @@ static inline int usb_endpoint_is_int_out( | |||
527 | static inline int usb_endpoint_is_isoc_in( | 529 | static inline int usb_endpoint_is_isoc_in( |
528 | const struct usb_endpoint_descriptor *epd) | 530 | const struct usb_endpoint_descriptor *epd) |
529 | { | 531 | { |
530 | return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd)); | 532 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); |
531 | } | 533 | } |
532 | 534 | ||
533 | /** | 535 | /** |
@@ -540,7 +542,7 @@ static inline int usb_endpoint_is_isoc_in( | |||
540 | static inline int usb_endpoint_is_isoc_out( | 542 | static inline int usb_endpoint_is_isoc_out( |
541 | const struct usb_endpoint_descriptor *epd) | 543 | const struct usb_endpoint_descriptor *epd) |
542 | { | 544 | { |
543 | return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd)); | 545 | return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); |
544 | } | 546 | } |
545 | 547 | ||
546 | /*-------------------------------------------------------------------------*/ | 548 | /*-------------------------------------------------------------------------*/ |
@@ -556,6 +558,8 @@ struct usb_ss_ep_comp_descriptor { | |||
556 | } __attribute__ ((packed)); | 558 | } __attribute__ ((packed)); |
557 | 559 | ||
558 | #define USB_DT_SS_EP_COMP_SIZE 6 | 560 | #define USB_DT_SS_EP_COMP_SIZE 6 |
561 | /* Bits 4:0 of bmAttributes if this is a bulk endpoint */ | ||
562 | #define USB_SS_MAX_STREAMS(p) (1 << (p & 0x1f)) | ||
559 | 563 | ||
560 | /*-------------------------------------------------------------------------*/ | 564 | /*-------------------------------------------------------------------------*/ |
561 | 565 | ||
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 738ea1a691cb..139353efad34 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h | |||
@@ -326,6 +326,7 @@ struct usb_composite_dev { | |||
326 | 326 | ||
327 | /* private: */ | 327 | /* private: */ |
328 | /* internals */ | 328 | /* internals */ |
329 | unsigned int suspended:1; | ||
329 | struct usb_device_descriptor desc; | 330 | struct usb_device_descriptor desc; |
330 | struct list_head configs; | 331 | struct list_head configs; |
331 | struct usb_composite_driver *driver; | 332 | struct usb_composite_driver *driver; |
diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h index af4b86f3aca3..80287af2a738 100644 --- a/include/linux/usb/ehci_def.h +++ b/include/linux/usb/ehci_def.h | |||
@@ -45,7 +45,7 @@ struct ehci_caps { | |||
45 | #define HCC_CANPARK(p) ((p)&(1 << 2)) /* true: can park on async qh */ | 45 | #define HCC_CANPARK(p) ((p)&(1 << 2)) /* true: can park on async qh */ |
46 | #define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/ | 46 | #define HCC_PGM_FRAMELISTLEN(p) ((p)&(1 << 1)) /* true: periodic_size changes*/ |
47 | #define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */ | 47 | #define HCC_64BIT_ADDR(p) ((p)&(1)) /* true: can use 64-bit addr */ |
48 | u8 portroute [8]; /* nibbles for routing - offset 0xC */ | 48 | u8 portroute[8]; /* nibbles for routing - offset 0xC */ |
49 | } __attribute__ ((packed)); | 49 | } __attribute__ ((packed)); |
50 | 50 | ||
51 | 51 | ||
@@ -92,14 +92,14 @@ struct ehci_regs { | |||
92 | /* ASYNCLISTADDR: offset 0x18 */ | 92 | /* ASYNCLISTADDR: offset 0x18 */ |
93 | u32 async_next; /* address of next async queue head */ | 93 | u32 async_next; /* address of next async queue head */ |
94 | 94 | ||
95 | u32 reserved [9]; | 95 | u32 reserved[9]; |
96 | 96 | ||
97 | /* CONFIGFLAG: offset 0x40 */ | 97 | /* CONFIGFLAG: offset 0x40 */ |
98 | u32 configured_flag; | 98 | u32 configured_flag; |
99 | #define FLAG_CF (1<<0) /* true: we'll support "high speed" */ | 99 | #define FLAG_CF (1<<0) /* true: we'll support "high speed" */ |
100 | 100 | ||
101 | /* PORTSC: offset 0x44 */ | 101 | /* PORTSC: offset 0x44 */ |
102 | u32 port_status [0]; /* up to N_PORTS */ | 102 | u32 port_status[0]; /* up to N_PORTS */ |
103 | /* 31:23 reserved */ | 103 | /* 31:23 reserved */ |
104 | #define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */ | 104 | #define PORT_WKOC_E (1<<22) /* wake on overcurrent (enable) */ |
105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ | 105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ |
diff --git a/include/linux/usb/functionfs.h b/include/linux/usb/functionfs.h new file mode 100644 index 000000000000..a34a2a043b21 --- /dev/null +++ b/include/linux/usb/functionfs.h | |||
@@ -0,0 +1,199 @@ | |||
1 | #ifndef __LINUX_FUNCTIONFS_H__ | ||
2 | #define __LINUX_FUNCTIONFS_H__ 1 | ||
3 | |||
4 | |||
5 | #include <linux/types.h> | ||
6 | #include <linux/ioctl.h> | ||
7 | |||
8 | #include <linux/usb/ch9.h> | ||
9 | |||
10 | |||
11 | enum { | ||
12 | FUNCTIONFS_DESCRIPTORS_MAGIC = 1, | ||
13 | FUNCTIONFS_STRINGS_MAGIC = 2 | ||
14 | }; | ||
15 | |||
16 | |||
17 | #ifndef __KERNEL__ | ||
18 | |||
19 | /* Descriptor of an non-audio endpoint */ | ||
20 | struct usb_endpoint_descriptor_no_audio { | ||
21 | __u8 bLength; | ||
22 | __u8 bDescriptorType; | ||
23 | |||
24 | __u8 bEndpointAddress; | ||
25 | __u8 bmAttributes; | ||
26 | __le16 wMaxPacketSize; | ||
27 | __u8 bInterval; | ||
28 | } __attribute__((packed)); | ||
29 | |||
30 | |||
31 | /* | ||
32 | * All numbers must be in little endian order. | ||
33 | */ | ||
34 | |||
35 | struct usb_functionfs_descs_head { | ||
36 | __le32 magic; | ||
37 | __le32 length; | ||
38 | __le32 fs_count; | ||
39 | __le32 hs_count; | ||
40 | } __attribute__((packed)); | ||
41 | |||
42 | /* | ||
43 | * Descriptors format: | ||
44 | * | ||
45 | * | off | name | type | description | | ||
46 | * |-----+-----------+--------------+--------------------------------------| | ||
47 | * | 0 | magic | LE32 | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | | ||
48 | * | 4 | lenght | LE32 | length of the whole data chunk | | ||
49 | * | 8 | fs_count | LE32 | number of full-speed descriptors | | ||
50 | * | 12 | hs_count | LE32 | number of high-speed descriptors | | ||
51 | * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors | | ||
52 | * | | hs_descrs | Descriptor[] | list of high-speed descriptors | | ||
53 | * | ||
54 | * descs are just valid USB descriptors and have the following format: | ||
55 | * | ||
56 | * | off | name | type | description | | ||
57 | * |-----+-----------------+------+--------------------------| | ||
58 | * | 0 | bLength | U8 | length of the descriptor | | ||
59 | * | 1 | bDescriptorType | U8 | descriptor type | | ||
60 | * | 2 | payload | | descriptor's payload | | ||
61 | */ | ||
62 | |||
63 | struct usb_functionfs_strings_head { | ||
64 | __le32 magic; | ||
65 | __le32 length; | ||
66 | __le32 str_count; | ||
67 | __le32 lang_count; | ||
68 | } __attribute__((packed)); | ||
69 | |||
70 | /* | ||
71 | * Strings format: | ||
72 | * | ||
73 | * | off | name | type | description | | ||
74 | * |-----+------------+-----------------------+----------------------------| | ||
75 | * | 0 | magic | LE32 | FUNCTIONFS_STRINGS_MAGIC | | ||
76 | * | 4 | length | LE32 | length of the data chunk | | ||
77 | * | 8 | str_count | LE32 | number of strings | | ||
78 | * | 12 | lang_count | LE32 | number of languages | | ||
79 | * | 16 | stringtab | StringTab[lang_count] | table of strings per lang | | ||
80 | * | ||
81 | * For each language there is one stringtab entry (ie. there are lang_count | ||
82 | * stringtab entires). Each StringTab has following format: | ||
83 | * | ||
84 | * | off | name | type | description | | ||
85 | * |-----+---------+-------------------+------------------------------------| | ||
86 | * | 0 | lang | LE16 | language code | | ||
87 | * | 2 | strings | String[str_count] | array of strings in given language | | ||
88 | * | ||
89 | * For each string ther is one strings entry (ie. there are str_count | ||
90 | * string entries). Each String is a NUL terminated string encoded in | ||
91 | * UTF-8. | ||
92 | */ | ||
93 | |||
94 | #endif | ||
95 | |||
96 | |||
97 | /* | ||
98 | * Events are delivered on the ep0 file descriptor, when the user mode driver | ||
99 | * reads from this file descriptor after writing the descriptors. Don't | ||
100 | * stop polling this descriptor. | ||
101 | */ | ||
102 | |||
103 | enum usb_functionfs_event_type { | ||
104 | FUNCTIONFS_BIND, | ||
105 | FUNCTIONFS_UNBIND, | ||
106 | |||
107 | FUNCTIONFS_ENABLE, | ||
108 | FUNCTIONFS_DISABLE, | ||
109 | |||
110 | FUNCTIONFS_SETUP, | ||
111 | |||
112 | FUNCTIONFS_SUSPEND, | ||
113 | FUNCTIONFS_RESUME | ||
114 | }; | ||
115 | |||
116 | /* NOTE: this structure must stay the same size and layout on | ||
117 | * both 32-bit and 64-bit kernels. | ||
118 | */ | ||
119 | struct usb_functionfs_event { | ||
120 | union { | ||
121 | /* SETUP: packet; DATA phase i/o precedes next event | ||
122 | *(setup.bmRequestType & USB_DIR_IN) flags direction */ | ||
123 | struct usb_ctrlrequest setup; | ||
124 | } __attribute__((packed)) u; | ||
125 | |||
126 | /* enum usb_functionfs_event_type */ | ||
127 | __u8 type; | ||
128 | __u8 _pad[3]; | ||
129 | } __attribute__((packed)); | ||
130 | |||
131 | |||
132 | /* Endpoint ioctls */ | ||
133 | /* The same as in gadgetfs */ | ||
134 | |||
135 | /* IN transfers may be reported to the gadget driver as complete | ||
136 | * when the fifo is loaded, before the host reads the data; | ||
137 | * OUT transfers may be reported to the host's "client" driver as | ||
138 | * complete when they're sitting in the FIFO unread. | ||
139 | * THIS returns how many bytes are "unclaimed" in the endpoint fifo | ||
140 | * (needed for precise fault handling, when the hardware allows it) | ||
141 | */ | ||
142 | #define FUNCTIONFS_FIFO_STATUS _IO('g', 1) | ||
143 | |||
144 | /* discards any unclaimed data in the fifo. */ | ||
145 | #define FUNCTIONFS_FIFO_FLUSH _IO('g', 2) | ||
146 | |||
147 | /* resets endpoint halt+toggle; used to implement set_interface. | ||
148 | * some hardware (like pxa2xx) can't support this. | ||
149 | */ | ||
150 | #define FUNCTIONFS_CLEAR_HALT _IO('g', 3) | ||
151 | |||
152 | /* Specific for functionfs */ | ||
153 | |||
154 | /* | ||
155 | * Returns reverse mapping of an interface. Called on EP0. If there | ||
156 | * is no such interface returns -EDOM. If function is not active | ||
157 | * returns -ENODEV. | ||
158 | */ | ||
159 | #define FUNCTIONFS_INTERFACE_REVMAP _IO('g', 128) | ||
160 | |||
161 | /* | ||
162 | * Returns real bEndpointAddress of an endpoint. If function is not | ||
163 | * active returns -ENODEV. | ||
164 | */ | ||
165 | #define FUNCTIONFS_ENDPOINT_REVMAP _IO('g', 129) | ||
166 | |||
167 | |||
168 | #ifdef __KERNEL__ | ||
169 | |||
170 | struct ffs_data; | ||
171 | struct usb_composite_dev; | ||
172 | struct usb_configuration; | ||
173 | |||
174 | |||
175 | static int functionfs_init(void) __attribute__((warn_unused_result)); | ||
176 | static void functionfs_cleanup(void); | ||
177 | |||
178 | static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev) | ||
179 | __attribute__((warn_unused_result, nonnull)); | ||
180 | static void functionfs_unbind(struct ffs_data *ffs) | ||
181 | __attribute__((nonnull)); | ||
182 | |||
183 | static int functionfs_add(struct usb_composite_dev *cdev, | ||
184 | struct usb_configuration *c, | ||
185 | struct ffs_data *ffs) | ||
186 | __attribute__((warn_unused_result, nonnull)); | ||
187 | |||
188 | |||
189 | static int functionfs_ready_callback(struct ffs_data *ffs) | ||
190 | __attribute__((warn_unused_result, nonnull)); | ||
191 | static void functionfs_closed_callback(struct ffs_data *ffs) | ||
192 | __attribute__((nonnull)); | ||
193 | static int functionfs_check_dev_callback(const char *dev_name) | ||
194 | __attribute__((warn_unused_result, nonnull)); | ||
195 | |||
196 | |||
197 | #endif | ||
198 | |||
199 | #endif | ||
diff --git a/include/linux/usb/g_hid.h b/include/linux/usb/g_hid.h new file mode 100644 index 000000000000..50f5745df28c --- /dev/null +++ b/include/linux/usb/g_hid.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * g_hid.h -- Header file for USB HID gadget driver | ||
3 | * | ||
4 | * Copyright (C) 2010 Fabien Chouteau <fabien.chouteau@barco.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef __LINUX_USB_G_HID_H | ||
22 | #define __LINUX_USB_G_HID_H | ||
23 | |||
24 | struct hidg_func_descriptor { | ||
25 | unsigned char subclass; | ||
26 | unsigned char protocol; | ||
27 | unsigned short report_length; | ||
28 | unsigned short report_desc_length; | ||
29 | unsigned char report_desc[]; | ||
30 | }; | ||
31 | |||
32 | #endif /* __LINUX_USB_G_HID_H */ | ||
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index f4b7ca516cdd..d3ef42d7d2f0 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
@@ -494,9 +494,13 @@ static inline void set_gadget_data(struct usb_gadget *gadget, void *data) | |||
494 | { dev_set_drvdata(&gadget->dev, data); } | 494 | { dev_set_drvdata(&gadget->dev, data); } |
495 | static inline void *get_gadget_data(struct usb_gadget *gadget) | 495 | static inline void *get_gadget_data(struct usb_gadget *gadget) |
496 | { return dev_get_drvdata(&gadget->dev); } | 496 | { return dev_get_drvdata(&gadget->dev); } |
497 | static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev) | ||
498 | { | ||
499 | return container_of(dev, struct usb_gadget, dev); | ||
500 | } | ||
497 | 501 | ||
498 | /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ | 502 | /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ |
499 | #define gadget_for_each_ep(tmp,gadget) \ | 503 | #define gadget_for_each_ep(tmp, gadget) \ |
500 | list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) | 504 | list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) |
501 | 505 | ||
502 | 506 | ||
diff --git a/include/linux/usb/gadgetfs.h b/include/linux/usb/gadgetfs.h index 612102e4d75e..0bb12e0d4f8f 100644 --- a/include/linux/usb/gadgetfs.h +++ b/include/linux/usb/gadgetfs.h | |||
@@ -19,7 +19,7 @@ | |||
19 | #define __LINUX_USB_GADGETFS_H | 19 | #define __LINUX_USB_GADGETFS_H |
20 | 20 | ||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | #include <asm/ioctl.h> | 22 | #include <linux/ioctl.h> |
23 | 23 | ||
24 | #include <linux/usb/ch9.h> | 24 | #include <linux/usb/ch9.h> |
25 | 25 | ||
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h new file mode 100644 index 000000000000..2e3a4ea1a3da --- /dev/null +++ b/include/linux/usb/hcd.h | |||
@@ -0,0 +1,625 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2001-2002 by David Brownell | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License as published by the | ||
6 | * Free Software Foundation; either version 2 of the License, or (at your | ||
7 | * option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but | ||
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||
11 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software Foundation, | ||
16 | * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef __USB_CORE_HCD_H | ||
20 | #define __USB_CORE_HCD_H | ||
21 | |||
22 | #ifdef __KERNEL__ | ||
23 | |||
24 | #include <linux/rwsem.h> | ||
25 | |||
26 | #define MAX_TOPO_LEVEL 6 | ||
27 | |||
28 | /* This file contains declarations of usbcore internals that are mostly | ||
29 | * used or exposed by Host Controller Drivers. | ||
30 | */ | ||
31 | |||
32 | /* | ||
33 | * USB Packet IDs (PIDs) | ||
34 | */ | ||
35 | #define USB_PID_EXT 0xf0 /* USB 2.0 LPM ECN */ | ||
36 | #define USB_PID_OUT 0xe1 | ||
37 | #define USB_PID_ACK 0xd2 | ||
38 | #define USB_PID_DATA0 0xc3 | ||
39 | #define USB_PID_PING 0xb4 /* USB 2.0 */ | ||
40 | #define USB_PID_SOF 0xa5 | ||
41 | #define USB_PID_NYET 0x96 /* USB 2.0 */ | ||
42 | #define USB_PID_DATA2 0x87 /* USB 2.0 */ | ||
43 | #define USB_PID_SPLIT 0x78 /* USB 2.0 */ | ||
44 | #define USB_PID_IN 0x69 | ||
45 | #define USB_PID_NAK 0x5a | ||
46 | #define USB_PID_DATA1 0x4b | ||
47 | #define USB_PID_PREAMBLE 0x3c /* Token mode */ | ||
48 | #define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */ | ||
49 | #define USB_PID_SETUP 0x2d | ||
50 | #define USB_PID_STALL 0x1e | ||
51 | #define USB_PID_MDATA 0x0f /* USB 2.0 */ | ||
52 | |||
53 | /*-------------------------------------------------------------------------*/ | ||
54 | |||
55 | /* | ||
56 | * USB Host Controller Driver (usb_hcd) framework | ||
57 | * | ||
58 | * Since "struct usb_bus" is so thin, you can't share much code in it. | ||
59 | * This framework is a layer over that, and should be more sharable. | ||
60 | * | ||
61 | * @authorized_default: Specifies if new devices are authorized to | ||
62 | * connect by default or they require explicit | ||
63 | * user space authorization; this bit is settable | ||
64 | * through /sys/class/usb_host/X/authorized_default. | ||
65 | * For the rest is RO, so we don't lock to r/w it. | ||
66 | */ | ||
67 | |||
68 | /*-------------------------------------------------------------------------*/ | ||
69 | |||
70 | struct usb_hcd { | ||
71 | |||
72 | /* | ||
73 | * housekeeping | ||
74 | */ | ||
75 | struct usb_bus self; /* hcd is-a bus */ | ||
76 | struct kref kref; /* reference counter */ | ||
77 | |||
78 | const char *product_desc; /* product/vendor string */ | ||
79 | char irq_descr[24]; /* driver + bus # */ | ||
80 | |||
81 | struct timer_list rh_timer; /* drives root-hub polling */ | ||
82 | struct urb *status_urb; /* the current status urb */ | ||
83 | #ifdef CONFIG_USB_SUSPEND | ||
84 | struct work_struct wakeup_work; /* for remote wakeup */ | ||
85 | #endif | ||
86 | |||
87 | /* | ||
88 | * hardware info/state | ||
89 | */ | ||
90 | const struct hc_driver *driver; /* hw-specific hooks */ | ||
91 | |||
92 | /* Flags that need to be manipulated atomically */ | ||
93 | unsigned long flags; | ||
94 | #define HCD_FLAG_HW_ACCESSIBLE 0x00000001 | ||
95 | #define HCD_FLAG_SAW_IRQ 0x00000002 | ||
96 | |||
97 | unsigned rh_registered:1;/* is root hub registered? */ | ||
98 | |||
99 | /* The next flag is a stopgap, to be removed when all the HCDs | ||
100 | * support the new root-hub polling mechanism. */ | ||
101 | unsigned uses_new_polling:1; | ||
102 | unsigned poll_rh:1; /* poll for rh status? */ | ||
103 | unsigned poll_pending:1; /* status has changed? */ | ||
104 | unsigned wireless:1; /* Wireless USB HCD */ | ||
105 | unsigned authorized_default:1; | ||
106 | unsigned has_tt:1; /* Integrated TT in root hub */ | ||
107 | |||
108 | int irq; /* irq allocated */ | ||
109 | void __iomem *regs; /* device memory/io */ | ||
110 | u64 rsrc_start; /* memory/io resource start */ | ||
111 | u64 rsrc_len; /* memory/io resource length */ | ||
112 | unsigned power_budget; /* in mA, 0 = no limit */ | ||
113 | |||
114 | /* bandwidth_mutex should be taken before adding or removing | ||
115 | * any new bus bandwidth constraints: | ||
116 | * 1. Before adding a configuration for a new device. | ||
117 | * 2. Before removing the configuration to put the device into | ||
118 | * the addressed state. | ||
119 | * 3. Before selecting a different configuration. | ||
120 | * 4. Before selecting an alternate interface setting. | ||
121 | * | ||
122 | * bandwidth_mutex should be dropped after a successful control message | ||
123 | * to the device, or resetting the bandwidth after a failed attempt. | ||
124 | */ | ||
125 | struct mutex bandwidth_mutex; | ||
126 | |||
127 | |||
128 | #define HCD_BUFFER_POOLS 4 | ||
129 | struct dma_pool *pool[HCD_BUFFER_POOLS]; | ||
130 | |||
131 | int state; | ||
132 | # define __ACTIVE 0x01 | ||
133 | # define __SUSPEND 0x04 | ||
134 | # define __TRANSIENT 0x80 | ||
135 | |||
136 | # define HC_STATE_HALT 0 | ||
137 | # define HC_STATE_RUNNING (__ACTIVE) | ||
138 | # define HC_STATE_QUIESCING (__SUSPEND|__TRANSIENT|__ACTIVE) | ||
139 | # define HC_STATE_RESUMING (__SUSPEND|__TRANSIENT) | ||
140 | # define HC_STATE_SUSPENDED (__SUSPEND) | ||
141 | |||
142 | #define HC_IS_RUNNING(state) ((state) & __ACTIVE) | ||
143 | #define HC_IS_SUSPENDED(state) ((state) & __SUSPEND) | ||
144 | |||
145 | /* more shared queuing code would be good; it should support | ||
146 | * smarter scheduling, handle transaction translators, etc; | ||
147 | * input size of periodic table to an interrupt scheduler. | ||
148 | * (ohci 32, uhci 1024, ehci 256/512/1024). | ||
149 | */ | ||
150 | |||
151 | /* The HC driver's private data is stored at the end of | ||
152 | * this structure. | ||
153 | */ | ||
154 | unsigned long hcd_priv[0] | ||
155 | __attribute__ ((aligned(sizeof(unsigned long)))); | ||
156 | }; | ||
157 | |||
158 | /* 2.4 does this a bit differently ... */ | ||
159 | static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd) | ||
160 | { | ||
161 | return &hcd->self; | ||
162 | } | ||
163 | |||
164 | static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus) | ||
165 | { | ||
166 | return container_of(bus, struct usb_hcd, self); | ||
167 | } | ||
168 | |||
169 | struct hcd_timeout { /* timeouts we allocate */ | ||
170 | struct list_head timeout_list; | ||
171 | struct timer_list timer; | ||
172 | }; | ||
173 | |||
174 | /*-------------------------------------------------------------------------*/ | ||
175 | |||
176 | |||
177 | struct hc_driver { | ||
178 | const char *description; /* "ehci-hcd" etc */ | ||
179 | const char *product_desc; /* product/vendor string */ | ||
180 | size_t hcd_priv_size; /* size of private data */ | ||
181 | |||
182 | /* irq handler */ | ||
183 | irqreturn_t (*irq) (struct usb_hcd *hcd); | ||
184 | |||
185 | int flags; | ||
186 | #define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ | ||
187 | #define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */ | ||
188 | #define HCD_USB11 0x0010 /* USB 1.1 */ | ||
189 | #define HCD_USB2 0x0020 /* USB 2.0 */ | ||
190 | #define HCD_USB3 0x0040 /* USB 3.0 */ | ||
191 | #define HCD_MASK 0x0070 | ||
192 | |||
193 | /* called to init HCD and root hub */ | ||
194 | int (*reset) (struct usb_hcd *hcd); | ||
195 | int (*start) (struct usb_hcd *hcd); | ||
196 | |||
197 | /* NOTE: these suspend/resume calls relate to the HC as | ||
198 | * a whole, not just the root hub; they're for PCI bus glue. | ||
199 | */ | ||
200 | /* called after suspending the hub, before entering D3 etc */ | ||
201 | int (*pci_suspend)(struct usb_hcd *hcd); | ||
202 | |||
203 | /* called after entering D0 (etc), before resuming the hub */ | ||
204 | int (*pci_resume)(struct usb_hcd *hcd, bool hibernated); | ||
205 | |||
206 | /* cleanly make HCD stop writing memory and doing I/O */ | ||
207 | void (*stop) (struct usb_hcd *hcd); | ||
208 | |||
209 | /* shutdown HCD */ | ||
210 | void (*shutdown) (struct usb_hcd *hcd); | ||
211 | |||
212 | /* return current frame number */ | ||
213 | int (*get_frame_number) (struct usb_hcd *hcd); | ||
214 | |||
215 | /* manage i/o requests, device state */ | ||
216 | int (*urb_enqueue)(struct usb_hcd *hcd, | ||
217 | struct urb *urb, gfp_t mem_flags); | ||
218 | int (*urb_dequeue)(struct usb_hcd *hcd, | ||
219 | struct urb *urb, int status); | ||
220 | |||
221 | /* hw synch, freeing endpoint resources that urb_dequeue can't */ | ||
222 | void (*endpoint_disable)(struct usb_hcd *hcd, | ||
223 | struct usb_host_endpoint *ep); | ||
224 | |||
225 | /* (optional) reset any endpoint state such as sequence number | ||
226 | and current window */ | ||
227 | void (*endpoint_reset)(struct usb_hcd *hcd, | ||
228 | struct usb_host_endpoint *ep); | ||
229 | |||
230 | /* root hub support */ | ||
231 | int (*hub_status_data) (struct usb_hcd *hcd, char *buf); | ||
232 | int (*hub_control) (struct usb_hcd *hcd, | ||
233 | u16 typeReq, u16 wValue, u16 wIndex, | ||
234 | char *buf, u16 wLength); | ||
235 | int (*bus_suspend)(struct usb_hcd *); | ||
236 | int (*bus_resume)(struct usb_hcd *); | ||
237 | int (*start_port_reset)(struct usb_hcd *, unsigned port_num); | ||
238 | |||
239 | /* force handover of high-speed port to full-speed companion */ | ||
240 | void (*relinquish_port)(struct usb_hcd *, int); | ||
241 | /* has a port been handed over to a companion? */ | ||
242 | int (*port_handed_over)(struct usb_hcd *, int); | ||
243 | |||
244 | /* CLEAR_TT_BUFFER completion callback */ | ||
245 | void (*clear_tt_buffer_complete)(struct usb_hcd *, | ||
246 | struct usb_host_endpoint *); | ||
247 | |||
248 | /* xHCI specific functions */ | ||
249 | /* Called by usb_alloc_dev to alloc HC device structures */ | ||
250 | int (*alloc_dev)(struct usb_hcd *, struct usb_device *); | ||
251 | /* Called by usb_disconnect to free HC device structures */ | ||
252 | void (*free_dev)(struct usb_hcd *, struct usb_device *); | ||
253 | /* Change a group of bulk endpoints to support multiple stream IDs */ | ||
254 | int (*alloc_streams)(struct usb_hcd *hcd, struct usb_device *udev, | ||
255 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
256 | unsigned int num_streams, gfp_t mem_flags); | ||
257 | /* Reverts a group of bulk endpoints back to not using stream IDs. | ||
258 | * Can fail if we run out of memory. | ||
259 | */ | ||
260 | int (*free_streams)(struct usb_hcd *hcd, struct usb_device *udev, | ||
261 | struct usb_host_endpoint **eps, unsigned int num_eps, | ||
262 | gfp_t mem_flags); | ||
263 | |||
264 | /* Bandwidth computation functions */ | ||
265 | /* Note that add_endpoint() can only be called once per endpoint before | ||
266 | * check_bandwidth() or reset_bandwidth() must be called. | ||
267 | * drop_endpoint() can only be called once per endpoint also. | ||
268 | * A call to xhci_drop_endpoint() followed by a call to | ||
269 | * xhci_add_endpoint() will add the endpoint to the schedule with | ||
270 | * possibly new parameters denoted by a different endpoint descriptor | ||
271 | * in usb_host_endpoint. A call to xhci_add_endpoint() followed by a | ||
272 | * call to xhci_drop_endpoint() is not allowed. | ||
273 | */ | ||
274 | /* Allocate endpoint resources and add them to a new schedule */ | ||
275 | int (*add_endpoint)(struct usb_hcd *, struct usb_device *, | ||
276 | struct usb_host_endpoint *); | ||
277 | /* Drop an endpoint from a new schedule */ | ||
278 | int (*drop_endpoint)(struct usb_hcd *, struct usb_device *, | ||
279 | struct usb_host_endpoint *); | ||
280 | /* Check that a new hardware configuration, set using | ||
281 | * endpoint_enable and endpoint_disable, does not exceed bus | ||
282 | * bandwidth. This must be called before any set configuration | ||
283 | * or set interface requests are sent to the device. | ||
284 | */ | ||
285 | int (*check_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
286 | /* Reset the device schedule to the last known good schedule, | ||
287 | * which was set from a previous successful call to | ||
288 | * check_bandwidth(). This reverts any add_endpoint() and | ||
289 | * drop_endpoint() calls since that last successful call. | ||
290 | * Used for when a check_bandwidth() call fails due to resource | ||
291 | * or bandwidth constraints. | ||
292 | */ | ||
293 | void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *); | ||
294 | /* Returns the hardware-chosen device address */ | ||
295 | int (*address_device)(struct usb_hcd *, struct usb_device *udev); | ||
296 | /* Notifies the HCD after a hub descriptor is fetched. | ||
297 | * Will block. | ||
298 | */ | ||
299 | int (*update_hub_device)(struct usb_hcd *, struct usb_device *hdev, | ||
300 | struct usb_tt *tt, gfp_t mem_flags); | ||
301 | int (*reset_device)(struct usb_hcd *, struct usb_device *); | ||
302 | }; | ||
303 | |||
304 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); | ||
305 | extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb, | ||
306 | int status); | ||
307 | extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb); | ||
308 | |||
309 | extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags); | ||
310 | extern int usb_hcd_unlink_urb(struct urb *urb, int status); | ||
311 | extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, | ||
312 | int status); | ||
313 | extern void usb_hcd_flush_endpoint(struct usb_device *udev, | ||
314 | struct usb_host_endpoint *ep); | ||
315 | extern void usb_hcd_disable_endpoint(struct usb_device *udev, | ||
316 | struct usb_host_endpoint *ep); | ||
317 | extern void usb_hcd_reset_endpoint(struct usb_device *udev, | ||
318 | struct usb_host_endpoint *ep); | ||
319 | extern void usb_hcd_synchronize_unlinks(struct usb_device *udev); | ||
320 | extern int usb_hcd_alloc_bandwidth(struct usb_device *udev, | ||
321 | struct usb_host_config *new_config, | ||
322 | struct usb_host_interface *old_alt, | ||
323 | struct usb_host_interface *new_alt); | ||
324 | extern int usb_hcd_get_frame_number(struct usb_device *udev); | ||
325 | |||
326 | extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver, | ||
327 | struct device *dev, const char *bus_name); | ||
328 | extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd); | ||
329 | extern void usb_put_hcd(struct usb_hcd *hcd); | ||
330 | extern int usb_add_hcd(struct usb_hcd *hcd, | ||
331 | unsigned int irqnum, unsigned long irqflags); | ||
332 | extern void usb_remove_hcd(struct usb_hcd *hcd); | ||
333 | |||
334 | struct platform_device; | ||
335 | extern void usb_hcd_platform_shutdown(struct platform_device *dev); | ||
336 | |||
337 | #ifdef CONFIG_PCI | ||
338 | struct pci_dev; | ||
339 | struct pci_device_id; | ||
340 | extern int usb_hcd_pci_probe(struct pci_dev *dev, | ||
341 | const struct pci_device_id *id); | ||
342 | extern void usb_hcd_pci_remove(struct pci_dev *dev); | ||
343 | extern void usb_hcd_pci_shutdown(struct pci_dev *dev); | ||
344 | |||
345 | #ifdef CONFIG_PM_SLEEP | ||
346 | extern const struct dev_pm_ops usb_hcd_pci_pm_ops; | ||
347 | #endif | ||
348 | #endif /* CONFIG_PCI */ | ||
349 | |||
350 | /* pci-ish (pdev null is ok) buffer alloc/mapping support */ | ||
351 | int hcd_buffer_create(struct usb_hcd *hcd); | ||
352 | void hcd_buffer_destroy(struct usb_hcd *hcd); | ||
353 | |||
354 | void *hcd_buffer_alloc(struct usb_bus *bus, size_t size, | ||
355 | gfp_t mem_flags, dma_addr_t *dma); | ||
356 | void hcd_buffer_free(struct usb_bus *bus, size_t size, | ||
357 | void *addr, dma_addr_t dma); | ||
358 | |||
359 | /* generic bus glue, needed for host controllers that don't use PCI */ | ||
360 | extern irqreturn_t usb_hcd_irq(int irq, void *__hcd); | ||
361 | |||
362 | extern void usb_hc_died(struct usb_hcd *hcd); | ||
363 | extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); | ||
364 | |||
365 | /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ | ||
366 | #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) | ||
367 | #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) | ||
368 | #define usb_settoggle(dev, ep, out, bit) \ | ||
369 | ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << (ep))) | \ | ||
370 | ((bit) << (ep))) | ||
371 | |||
372 | /* -------------------------------------------------------------------------- */ | ||
373 | |||
374 | /* Enumeration is only for the hub driver, or HCD virtual root hubs */ | ||
375 | extern struct usb_device *usb_alloc_dev(struct usb_device *parent, | ||
376 | struct usb_bus *, unsigned port); | ||
377 | extern int usb_new_device(struct usb_device *dev); | ||
378 | extern void usb_disconnect(struct usb_device **); | ||
379 | |||
380 | extern int usb_get_configuration(struct usb_device *dev); | ||
381 | extern void usb_destroy_configuration(struct usb_device *dev); | ||
382 | |||
383 | /*-------------------------------------------------------------------------*/ | ||
384 | |||
385 | /* | ||
386 | * HCD Root Hub support | ||
387 | */ | ||
388 | |||
389 | #include <linux/usb/ch11.h> | ||
390 | |||
391 | /* | ||
392 | * As of USB 2.0, full/low speed devices are segregated into trees. | ||
393 | * One type grows from USB 1.1 host controllers (OHCI, UHCI etc). | ||
394 | * The other type grows from high speed hubs when they connect to | ||
395 | * full/low speed devices using "Transaction Translators" (TTs). | ||
396 | * | ||
397 | * TTs should only be known to the hub driver, and high speed bus | ||
398 | * drivers (only EHCI for now). They affect periodic scheduling and | ||
399 | * sometimes control/bulk error recovery. | ||
400 | */ | ||
401 | |||
402 | struct usb_device; | ||
403 | |||
404 | struct usb_tt { | ||
405 | struct usb_device *hub; /* upstream highspeed hub */ | ||
406 | int multi; /* true means one TT per port */ | ||
407 | unsigned think_time; /* think time in ns */ | ||
408 | |||
409 | /* for control/bulk error recovery (CLEAR_TT_BUFFER) */ | ||
410 | spinlock_t lock; | ||
411 | struct list_head clear_list; /* of usb_tt_clear */ | ||
412 | struct work_struct clear_work; | ||
413 | }; | ||
414 | |||
415 | struct usb_tt_clear { | ||
416 | struct list_head clear_list; | ||
417 | unsigned tt; | ||
418 | u16 devinfo; | ||
419 | struct usb_hcd *hcd; | ||
420 | struct usb_host_endpoint *ep; | ||
421 | }; | ||
422 | |||
423 | extern int usb_hub_clear_tt_buffer(struct urb *urb); | ||
424 | extern void usb_ep0_reinit(struct usb_device *); | ||
425 | |||
426 | /* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */ | ||
427 | #define DeviceRequest \ | ||
428 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) | ||
429 | #define DeviceOutRequest \ | ||
430 | ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_DEVICE)<<8) | ||
431 | |||
432 | #define InterfaceRequest \ | ||
433 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
434 | |||
435 | #define EndpointRequest \ | ||
436 | ((USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
437 | #define EndpointOutRequest \ | ||
438 | ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) | ||
439 | |||
440 | /* class requests from the USB 2.0 hub spec, table 11-15 */ | ||
441 | /* GetBusState and SetHubDescriptor are optional, omitted */ | ||
442 | #define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) | ||
443 | #define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE) | ||
444 | #define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR) | ||
445 | #define GetHubStatus (0xa000 | USB_REQ_GET_STATUS) | ||
446 | #define GetPortStatus (0xa300 | USB_REQ_GET_STATUS) | ||
447 | #define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE) | ||
448 | #define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE) | ||
449 | |||
450 | |||
451 | /*-------------------------------------------------------------------------*/ | ||
452 | |||
453 | /* | ||
454 | * Generic bandwidth allocation constants/support | ||
455 | */ | ||
456 | #define FRAME_TIME_USECS 1000L | ||
457 | #define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */ | ||
458 | /* Trying not to use worst-case bit-stuffing | ||
459 | * of (7/6 * 8 * bytecount) = 9.33 * bytecount */ | ||
460 | /* bytecount = data payload byte count */ | ||
461 | |||
462 | #define NS_TO_US(ns) ((ns + 500L) / 1000L) | ||
463 | /* convert & round nanoseconds to microseconds */ | ||
464 | |||
465 | |||
466 | /* | ||
467 | * Full/low speed bandwidth allocation constants/support. | ||
468 | */ | ||
469 | #define BW_HOST_DELAY 1000L /* nanoseconds */ | ||
470 | #define BW_HUB_LS_SETUP 333L /* nanoseconds */ | ||
471 | /* 4 full-speed bit times (est.) */ | ||
472 | |||
473 | #define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */ | ||
474 | #define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L) | ||
475 | #define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L) | ||
476 | |||
477 | /* | ||
478 | * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed | ||
479 | * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed | ||
480 | * to preallocate bandwidth) | ||
481 | */ | ||
482 | #define USB2_HOST_DELAY 5 /* nsec, guess */ | ||
483 | #define HS_NSECS(bytes) (((55 * 8 * 2083) \ | ||
484 | + (2083UL * (3 + BitTime(bytes))))/1000 \ | ||
485 | + USB2_HOST_DELAY) | ||
486 | #define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \ | ||
487 | + (2083UL * (3 + BitTime(bytes))))/1000 \ | ||
488 | + USB2_HOST_DELAY) | ||
489 | #define HS_USECS(bytes) NS_TO_US(HS_NSECS(bytes)) | ||
490 | #define HS_USECS_ISO(bytes) NS_TO_US(HS_NSECS_ISO(bytes)) | ||
491 | |||
492 | extern long usb_calc_bus_time(int speed, int is_input, | ||
493 | int isoc, int bytecount); | ||
494 | |||
495 | /*-------------------------------------------------------------------------*/ | ||
496 | |||
497 | extern void usb_set_device_state(struct usb_device *udev, | ||
498 | enum usb_device_state new_state); | ||
499 | |||
500 | /*-------------------------------------------------------------------------*/ | ||
501 | |||
502 | /* exported only within usbcore */ | ||
503 | |||
504 | extern struct list_head usb_bus_list; | ||
505 | extern struct mutex usb_bus_list_lock; | ||
506 | extern wait_queue_head_t usb_kill_urb_queue; | ||
507 | |||
508 | extern int usb_find_interface_driver(struct usb_device *dev, | ||
509 | struct usb_interface *interface); | ||
510 | |||
511 | #define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN)) | ||
512 | |||
513 | #ifdef CONFIG_PM | ||
514 | extern void usb_root_hub_lost_power(struct usb_device *rhdev); | ||
515 | extern int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg); | ||
516 | extern int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg); | ||
517 | #endif /* CONFIG_PM */ | ||
518 | |||
519 | #ifdef CONFIG_USB_SUSPEND | ||
520 | extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd); | ||
521 | #else | ||
522 | static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd) | ||
523 | { | ||
524 | return; | ||
525 | } | ||
526 | #endif /* CONFIG_USB_SUSPEND */ | ||
527 | |||
528 | |||
529 | /* | ||
530 | * USB device fs stuff | ||
531 | */ | ||
532 | |||
533 | #ifdef CONFIG_USB_DEVICEFS | ||
534 | |||
535 | /* | ||
536 | * these are expected to be called from the USB core/hub thread | ||
537 | * with the kernel lock held | ||
538 | */ | ||
539 | extern void usbfs_update_special(void); | ||
540 | extern int usbfs_init(void); | ||
541 | extern void usbfs_cleanup(void); | ||
542 | |||
543 | #else /* CONFIG_USB_DEVICEFS */ | ||
544 | |||
545 | static inline void usbfs_update_special(void) {} | ||
546 | static inline int usbfs_init(void) { return 0; } | ||
547 | static inline void usbfs_cleanup(void) { } | ||
548 | |||
549 | #endif /* CONFIG_USB_DEVICEFS */ | ||
550 | |||
551 | /*-------------------------------------------------------------------------*/ | ||
552 | |||
553 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) | ||
554 | |||
555 | struct usb_mon_operations { | ||
556 | void (*urb_submit)(struct usb_bus *bus, struct urb *urb); | ||
557 | void (*urb_submit_error)(struct usb_bus *bus, struct urb *urb, int err); | ||
558 | void (*urb_complete)(struct usb_bus *bus, struct urb *urb, int status); | ||
559 | /* void (*urb_unlink)(struct usb_bus *bus, struct urb *urb); */ | ||
560 | }; | ||
561 | |||
562 | extern struct usb_mon_operations *mon_ops; | ||
563 | |||
564 | static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) | ||
565 | { | ||
566 | if (bus->monitored) | ||
567 | (*mon_ops->urb_submit)(bus, urb); | ||
568 | } | ||
569 | |||
570 | static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, | ||
571 | int error) | ||
572 | { | ||
573 | if (bus->monitored) | ||
574 | (*mon_ops->urb_submit_error)(bus, urb, error); | ||
575 | } | ||
576 | |||
577 | static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, | ||
578 | int status) | ||
579 | { | ||
580 | if (bus->monitored) | ||
581 | (*mon_ops->urb_complete)(bus, urb, status); | ||
582 | } | ||
583 | |||
584 | int usb_mon_register(struct usb_mon_operations *ops); | ||
585 | void usb_mon_deregister(void); | ||
586 | |||
587 | #else | ||
588 | |||
589 | static inline void usbmon_urb_submit(struct usb_bus *bus, struct urb *urb) {} | ||
590 | static inline void usbmon_urb_submit_error(struct usb_bus *bus, struct urb *urb, | ||
591 | int error) {} | ||
592 | static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb, | ||
593 | int status) {} | ||
594 | |||
595 | #endif /* CONFIG_USB_MON || CONFIG_USB_MON_MODULE */ | ||
596 | |||
597 | /*-------------------------------------------------------------------------*/ | ||
598 | |||
599 | /* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */ | ||
600 | /* bleech -- resurfaced in 2.4.11 or 2.4.12 */ | ||
601 | #define bitmap DeviceRemovable | ||
602 | |||
603 | |||
604 | /*-------------------------------------------------------------------------*/ | ||
605 | |||
606 | /* random stuff */ | ||
607 | |||
608 | #define RUN_CONTEXT (in_irq() ? "in_irq" \ | ||
609 | : (in_interrupt() ? "in_interrupt" : "can sleep")) | ||
610 | |||
611 | |||
612 | /* This rwsem is for use only by the hub driver and ehci-hcd. | ||
613 | * Nobody else should touch it. | ||
614 | */ | ||
615 | extern struct rw_semaphore ehci_cf_port_reset_rwsem; | ||
616 | |||
617 | /* Keep track of which host controller drivers are loaded */ | ||
618 | #define USB_UHCI_LOADED 0 | ||
619 | #define USB_OHCI_LOADED 1 | ||
620 | #define USB_EHCI_LOADED 2 | ||
621 | extern unsigned long usb_hcds_loaded; | ||
622 | |||
623 | #endif /* __KERNEL__ */ | ||
624 | |||
625 | #endif /* __USB_CORE_HCD_H */ | ||
diff --git a/include/linux/usb/langwell_udc.h b/include/linux/usb/langwell_udc.h index c949178a6530..2d2d1bbad9d2 100644 --- a/include/linux/usb/langwell_udc.h +++ b/include/linux/usb/langwell_udc.h | |||
@@ -181,7 +181,7 @@ struct langwell_op_regs { | |||
181 | #define PORTS_PIC (BIT(15) | BIT(14)) /* port indicator control */ | 181 | #define PORTS_PIC (BIT(15) | BIT(14)) /* port indicator control */ |
182 | #define PORTS_PO BIT(13) /* port owner */ | 182 | #define PORTS_PO BIT(13) /* port owner */ |
183 | #define PORTS_PP BIT(12) /* port power */ | 183 | #define PORTS_PP BIT(12) /* port power */ |
184 | #define PORTS_LS (BIT(11) | BIT(10)) /* line status */ | 184 | #define PORTS_LS (BIT(11) | BIT(10)) /* line status */ |
185 | #define PORTS_SLP BIT(9) /* suspend using L1 */ | 185 | #define PORTS_SLP BIT(9) /* suspend using L1 */ |
186 | #define PORTS_PR BIT(8) /* port reset */ | 186 | #define PORTS_PR BIT(8) /* port reset */ |
187 | #define PORTS_SUSP BIT(7) /* suspend */ | 187 | #define PORTS_SUSP BIT(7) /* suspend */ |
diff --git a/include/linux/usb/musb.h b/include/linux/usb/musb.h index 7acef0234c0e..ee2dd1d506ed 100644 --- a/include/linux/usb/musb.h +++ b/include/linux/usb/musb.h | |||
@@ -22,12 +22,47 @@ enum musb_mode { | |||
22 | 22 | ||
23 | struct clk; | 23 | struct clk; |
24 | 24 | ||
25 | enum musb_fifo_style { | ||
26 | FIFO_RXTX, | ||
27 | FIFO_TX, | ||
28 | FIFO_RX | ||
29 | } __attribute__ ((packed)); | ||
30 | |||
31 | enum musb_buf_mode { | ||
32 | BUF_SINGLE, | ||
33 | BUF_DOUBLE | ||
34 | } __attribute__ ((packed)); | ||
35 | |||
36 | struct musb_fifo_cfg { | ||
37 | u8 hw_ep_num; | ||
38 | enum musb_fifo_style style; | ||
39 | enum musb_buf_mode mode; | ||
40 | u16 maxpacket; | ||
41 | }; | ||
42 | |||
43 | #define MUSB_EP_FIFO(ep, st, m, pkt) \ | ||
44 | { \ | ||
45 | .hw_ep_num = ep, \ | ||
46 | .style = st, \ | ||
47 | .mode = m, \ | ||
48 | .maxpacket = pkt, \ | ||
49 | } | ||
50 | |||
51 | #define MUSB_EP_FIFO_SINGLE(ep, st, pkt) \ | ||
52 | MUSB_EP_FIFO(ep, st, BUF_SINGLE, pkt) | ||
53 | |||
54 | #define MUSB_EP_FIFO_DOUBLE(ep, st, pkt) \ | ||
55 | MUSB_EP_FIFO(ep, st, BUF_DOUBLE, pkt) | ||
56 | |||
25 | struct musb_hdrc_eps_bits { | 57 | struct musb_hdrc_eps_bits { |
26 | const char name[16]; | 58 | const char name[16]; |
27 | u8 bits; | 59 | u8 bits; |
28 | }; | 60 | }; |
29 | 61 | ||
30 | struct musb_hdrc_config { | 62 | struct musb_hdrc_config { |
63 | struct musb_fifo_cfg *fifo_cfg; /* board fifo configuration */ | ||
64 | unsigned fifo_cfg_size; /* size of the fifo configuration */ | ||
65 | |||
31 | /* MUSB configuration-specific details */ | 66 | /* MUSB configuration-specific details */ |
32 | unsigned multipoint:1; /* multipoint device */ | 67 | unsigned multipoint:1; /* multipoint device */ |
33 | unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */ | 68 | unsigned dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */ |
@@ -51,8 +86,9 @@ struct musb_hdrc_config { | |||
51 | 86 | ||
52 | struct musb_hdrc_eps_bits *eps_bits __deprecated; | 87 | struct musb_hdrc_eps_bits *eps_bits __deprecated; |
53 | #ifdef CONFIG_BLACKFIN | 88 | #ifdef CONFIG_BLACKFIN |
54 | /* A GPIO controlling VRSEL in Blackfin */ | 89 | /* A GPIO controlling VRSEL in Blackfin */ |
55 | unsigned int gpio_vrsel; | 90 | unsigned int gpio_vrsel; |
91 | unsigned int gpio_vrsel_active; | ||
56 | #endif | 92 | #endif |
57 | 93 | ||
58 | }; | 94 | }; |
diff --git a/include/linux/usb/ncm.h b/include/linux/usb/ncm.h new file mode 100644 index 000000000000..006d1064c8b2 --- /dev/null +++ b/include/linux/usb/ncm.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * USB CDC NCM auxiliary definitions | ||
3 | */ | ||
4 | |||
5 | #ifndef __LINUX_USB_NCM_H | ||
6 | #define __LINUX_USB_NCM_H | ||
7 | |||
8 | #include <linux/types.h> | ||
9 | #include <linux/usb/cdc.h> | ||
10 | #include <asm/unaligned.h> | ||
11 | |||
12 | #define NCM_NTB_MIN_IN_SIZE 2048 | ||
13 | #define NCM_NTB_MIN_OUT_SIZE 2048 | ||
14 | |||
15 | #define NCM_CONTROL_TIMEOUT (5 * 1000) | ||
16 | |||
17 | /* bmNetworkCapabilities */ | ||
18 | |||
19 | #define NCM_NCAP_ETH_FILTER (1 << 0) | ||
20 | #define NCM_NCAP_NET_ADDRESS (1 << 1) | ||
21 | #define NCM_NCAP_ENCAP_COMM (1 << 2) | ||
22 | #define NCM_NCAP_MAX_DGRAM (1 << 3) | ||
23 | #define NCM_NCAP_CRC_MODE (1 << 4) | ||
24 | |||
25 | /* | ||
26 | * Here are options for NCM Datagram Pointer table (NDP) parser. | ||
27 | * There are 2 different formats: NDP16 and NDP32 in the spec (ch. 3), | ||
28 | * in NDP16 offsets and sizes fields are 1 16bit word wide, | ||
29 | * in NDP32 -- 2 16bit words wide. Also signatures are different. | ||
30 | * To make the parser code the same, put the differences in the structure, | ||
31 | * and switch pointers to the structures when the format is changed. | ||
32 | */ | ||
33 | |||
34 | struct ndp_parser_opts { | ||
35 | u32 nth_sign; | ||
36 | u32 ndp_sign; | ||
37 | unsigned nth_size; | ||
38 | unsigned ndp_size; | ||
39 | unsigned ndplen_align; | ||
40 | /* sizes in u16 units */ | ||
41 | unsigned dgram_item_len; /* index or length */ | ||
42 | unsigned block_length; | ||
43 | unsigned fp_index; | ||
44 | unsigned reserved1; | ||
45 | unsigned reserved2; | ||
46 | unsigned next_fp_index; | ||
47 | }; | ||
48 | |||
49 | #define INIT_NDP16_OPTS { \ | ||
50 | .nth_sign = NCM_NTH16_SIGN, \ | ||
51 | .ndp_sign = NCM_NDP16_NOCRC_SIGN, \ | ||
52 | .nth_size = sizeof(struct usb_cdc_ncm_nth16), \ | ||
53 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp16), \ | ||
54 | .ndplen_align = 4, \ | ||
55 | .dgram_item_len = 1, \ | ||
56 | .block_length = 1, \ | ||
57 | .fp_index = 1, \ | ||
58 | .reserved1 = 0, \ | ||
59 | .reserved2 = 0, \ | ||
60 | .next_fp_index = 1, \ | ||
61 | } | ||
62 | |||
63 | |||
64 | #define INIT_NDP32_OPTS { \ | ||
65 | .nth_sign = NCM_NTH32_SIGN, \ | ||
66 | .ndp_sign = NCM_NDP32_NOCRC_SIGN, \ | ||
67 | .nth_size = sizeof(struct usb_cdc_ncm_nth32), \ | ||
68 | .ndp_size = sizeof(struct usb_cdc_ncm_ndp32), \ | ||
69 | .ndplen_align = 8, \ | ||
70 | .dgram_item_len = 2, \ | ||
71 | .block_length = 2, \ | ||
72 | .fp_index = 2, \ | ||
73 | .reserved1 = 1, \ | ||
74 | .reserved2 = 2, \ | ||
75 | .next_fp_index = 2, \ | ||
76 | } | ||
77 | |||
78 | static inline void put_ncm(__le16 **p, unsigned size, unsigned val) | ||
79 | { | ||
80 | switch (size) { | ||
81 | case 1: | ||
82 | put_unaligned_le16((u16)val, *p); | ||
83 | break; | ||
84 | case 2: | ||
85 | put_unaligned_le32((u32)val, *p); | ||
86 | |||
87 | break; | ||
88 | default: | ||
89 | BUG(); | ||
90 | } | ||
91 | |||
92 | *p += size; | ||
93 | } | ||
94 | |||
95 | static inline unsigned get_ncm(__le16 **p, unsigned size) | ||
96 | { | ||
97 | unsigned tmp; | ||
98 | |||
99 | switch (size) { | ||
100 | case 1: | ||
101 | tmp = get_unaligned_le16(*p); | ||
102 | break; | ||
103 | case 2: | ||
104 | tmp = get_unaligned_le32(*p); | ||
105 | break; | ||
106 | default: | ||
107 | BUG(); | ||
108 | } | ||
109 | |||
110 | *p += size; | ||
111 | return tmp; | ||
112 | } | ||
113 | |||
114 | #endif /* __LINUX_USB_NCM_H */ | ||
diff --git a/include/linux/usb/net2280.h b/include/linux/usb/net2280.h index 96ca549a778d..148b8fa5b1a2 100644 --- a/include/linux/usb/net2280.h +++ b/include/linux/usb/net2280.h | |||
@@ -353,7 +353,7 @@ struct net2280_dma_regs { /* [11.7] */ | |||
353 | #define DMA_TRANSACTION_DONE_INTERRUPT 24 | 353 | #define DMA_TRANSACTION_DONE_INTERRUPT 24 |
354 | #define DMA_ABORT 1 | 354 | #define DMA_ABORT 1 |
355 | #define DMA_START 0 | 355 | #define DMA_START 0 |
356 | u32 _unused0 [2]; | 356 | u32 _unused0[2]; |
357 | /* offset 0x0190, 0x01b0, 0x01d0, 0x01f0, */ | 357 | /* offset 0x0190, 0x01b0, 0x01d0, 0x01f0, */ |
358 | u32 dmacount; | 358 | u32 dmacount; |
359 | #define VALID_BIT 31 | 359 | #define VALID_BIT 31 |
@@ -374,7 +374,7 @@ struct net2280_dep_regs { /* [11.8] */ | |||
374 | u32 dep_cfg; | 374 | u32 dep_cfg; |
375 | /* offset 0x0204, 0x0214, 0x224, 0x234, 0x244 */ | 375 | /* offset 0x0204, 0x0214, 0x224, 0x234, 0x244 */ |
376 | u32 dep_rsp; | 376 | u32 dep_rsp; |
377 | u32 _unused [2]; | 377 | u32 _unused[2]; |
378 | } __attribute__ ((packed)); | 378 | } __attribute__ ((packed)); |
379 | 379 | ||
380 | /* configurable endpoint registers, BAR0 + 0x0300 ... array of seven structs | 380 | /* configurable endpoint registers, BAR0 + 0x0300 ... array of seven structs |
@@ -437,7 +437,7 @@ struct net2280_ep_regs { /* [11.9] */ | |||
437 | /* offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0 */ | 437 | /* offset 0x0310, 0x0330, 0x0350, 0x0370, 0x0390, 0x03b0, 0x03d0 */ |
438 | u32 ep_avail; | 438 | u32 ep_avail; |
439 | u32 ep_data; | 439 | u32 ep_data; |
440 | u32 _unused0 [2]; | 440 | u32 _unused0[2]; |
441 | } __attribute__ ((packed)); | 441 | } __attribute__ ((packed)); |
442 | 442 | ||
443 | #endif /* __LINUX_USB_NET2280_H */ | 443 | #endif /* __LINUX_USB_NET2280_H */ |
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h index 0a555dd131fc..16b7f3347545 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h | |||
@@ -22,4 +22,8 @@ | |||
22 | /*device will morph if reset, don't use reset for handling errors */ | 22 | /*device will morph if reset, don't use reset for handling errors */ |
23 | #define USB_QUIRK_RESET_MORPHS 0x00000010 | 23 | #define USB_QUIRK_RESET_MORPHS 0x00000010 |
24 | 24 | ||
25 | /* device has more interface descriptions than the bNumInterfaces count, | ||
26 | and can't handle talking to these interfaces */ | ||
27 | #define USB_QUIRK_HONOR_BNUMINTERFACES 0x00000020 | ||
28 | |||
25 | #endif /* __LINUX_USB_QUIRKS_H */ | 29 | #endif /* __LINUX_USB_QUIRKS_H */ |
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 1ef1ebc2b04f..05ef52861988 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
@@ -34,10 +34,10 @@ | |||
34 | struct rndis_msg_hdr { | 34 | struct rndis_msg_hdr { |
35 | __le32 msg_type; /* RNDIS_MSG_* */ | 35 | __le32 msg_type; /* RNDIS_MSG_* */ |
36 | __le32 msg_len; | 36 | __le32 msg_len; |
37 | // followed by data that varies between messages | 37 | /* followed by data that varies between messages */ |
38 | __le32 request_id; | 38 | __le32 request_id; |
39 | __le32 status; | 39 | __le32 status; |
40 | // ... and more | 40 | /* ... and more */ |
41 | } __attribute__ ((packed)); | 41 | } __attribute__ ((packed)); |
42 | 42 | ||
43 | /* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */ | 43 | /* MS-Windows uses this strange size, but RNDIS spec says 1024 minimum */ |
@@ -92,67 +92,67 @@ struct rndis_msg_hdr { | |||
92 | 92 | ||
93 | struct rndis_data_hdr { | 93 | struct rndis_data_hdr { |
94 | __le32 msg_type; /* RNDIS_MSG_PACKET */ | 94 | __le32 msg_type; /* RNDIS_MSG_PACKET */ |
95 | __le32 msg_len; // rndis_data_hdr + data_len + pad | 95 | __le32 msg_len; /* rndis_data_hdr + data_len + pad */ |
96 | __le32 data_offset; // 36 -- right after header | 96 | __le32 data_offset; /* 36 -- right after header */ |
97 | __le32 data_len; // ... real packet size | 97 | __le32 data_len; /* ... real packet size */ |
98 | 98 | ||
99 | __le32 oob_data_offset; // zero | 99 | __le32 oob_data_offset; /* zero */ |
100 | __le32 oob_data_len; // zero | 100 | __le32 oob_data_len; /* zero */ |
101 | __le32 num_oob; // zero | 101 | __le32 num_oob; /* zero */ |
102 | __le32 packet_data_offset; // zero | 102 | __le32 packet_data_offset; /* zero */ |
103 | 103 | ||
104 | __le32 packet_data_len; // zero | 104 | __le32 packet_data_len; /* zero */ |
105 | __le32 vc_handle; // zero | 105 | __le32 vc_handle; /* zero */ |
106 | __le32 reserved; // zero | 106 | __le32 reserved; /* zero */ |
107 | } __attribute__ ((packed)); | 107 | } __attribute__ ((packed)); |
108 | 108 | ||
109 | struct rndis_init { /* OUT */ | 109 | struct rndis_init { /* OUT */ |
110 | // header and: | 110 | /* header and: */ |
111 | __le32 msg_type; /* RNDIS_MSG_INIT */ | 111 | __le32 msg_type; /* RNDIS_MSG_INIT */ |
112 | __le32 msg_len; // 24 | 112 | __le32 msg_len; /* 24 */ |
113 | __le32 request_id; | 113 | __le32 request_id; |
114 | __le32 major_version; // of rndis (1.0) | 114 | __le32 major_version; /* of rndis (1.0) */ |
115 | __le32 minor_version; | 115 | __le32 minor_version; |
116 | __le32 max_transfer_size; | 116 | __le32 max_transfer_size; |
117 | } __attribute__ ((packed)); | 117 | } __attribute__ ((packed)); |
118 | 118 | ||
119 | struct rndis_init_c { /* IN */ | 119 | struct rndis_init_c { /* IN */ |
120 | // header and: | 120 | /* header and: */ |
121 | __le32 msg_type; /* RNDIS_MSG_INIT_C */ | 121 | __le32 msg_type; /* RNDIS_MSG_INIT_C */ |
122 | __le32 msg_len; | 122 | __le32 msg_len; |
123 | __le32 request_id; | 123 | __le32 request_id; |
124 | __le32 status; | 124 | __le32 status; |
125 | __le32 major_version; // of rndis (1.0) | 125 | __le32 major_version; /* of rndis (1.0) */ |
126 | __le32 minor_version; | 126 | __le32 minor_version; |
127 | __le32 device_flags; | 127 | __le32 device_flags; |
128 | __le32 medium; // zero == 802.3 | 128 | __le32 medium; /* zero == 802.3 */ |
129 | __le32 max_packets_per_message; | 129 | __le32 max_packets_per_message; |
130 | __le32 max_transfer_size; | 130 | __le32 max_transfer_size; |
131 | __le32 packet_alignment; // max 7; (1<<n) bytes | 131 | __le32 packet_alignment; /* max 7; (1<<n) bytes */ |
132 | __le32 af_list_offset; // zero | 132 | __le32 af_list_offset; /* zero */ |
133 | __le32 af_list_size; // zero | 133 | __le32 af_list_size; /* zero */ |
134 | } __attribute__ ((packed)); | 134 | } __attribute__ ((packed)); |
135 | 135 | ||
136 | struct rndis_halt { /* OUT (no reply) */ | 136 | struct rndis_halt { /* OUT (no reply) */ |
137 | // header and: | 137 | /* header and: */ |
138 | __le32 msg_type; /* RNDIS_MSG_HALT */ | 138 | __le32 msg_type; /* RNDIS_MSG_HALT */ |
139 | __le32 msg_len; | 139 | __le32 msg_len; |
140 | __le32 request_id; | 140 | __le32 request_id; |
141 | } __attribute__ ((packed)); | 141 | } __attribute__ ((packed)); |
142 | 142 | ||
143 | struct rndis_query { /* OUT */ | 143 | struct rndis_query { /* OUT */ |
144 | // header and: | 144 | /* header and: */ |
145 | __le32 msg_type; /* RNDIS_MSG_QUERY */ | 145 | __le32 msg_type; /* RNDIS_MSG_QUERY */ |
146 | __le32 msg_len; | 146 | __le32 msg_len; |
147 | __le32 request_id; | 147 | __le32 request_id; |
148 | __le32 oid; | 148 | __le32 oid; |
149 | __le32 len; | 149 | __le32 len; |
150 | __le32 offset; | 150 | __le32 offset; |
151 | /*?*/ __le32 handle; // zero | 151 | /*?*/ __le32 handle; /* zero */ |
152 | } __attribute__ ((packed)); | 152 | } __attribute__ ((packed)); |
153 | 153 | ||
154 | struct rndis_query_c { /* IN */ | 154 | struct rndis_query_c { /* IN */ |
155 | // header and: | 155 | /* header and: */ |
156 | __le32 msg_type; /* RNDIS_MSG_QUERY_C */ | 156 | __le32 msg_type; /* RNDIS_MSG_QUERY_C */ |
157 | __le32 msg_len; | 157 | __le32 msg_len; |
158 | __le32 request_id; | 158 | __le32 request_id; |
@@ -162,18 +162,18 @@ struct rndis_query_c { /* IN */ | |||
162 | } __attribute__ ((packed)); | 162 | } __attribute__ ((packed)); |
163 | 163 | ||
164 | struct rndis_set { /* OUT */ | 164 | struct rndis_set { /* OUT */ |
165 | // header and: | 165 | /* header and: */ |
166 | __le32 msg_type; /* RNDIS_MSG_SET */ | 166 | __le32 msg_type; /* RNDIS_MSG_SET */ |
167 | __le32 msg_len; | 167 | __le32 msg_len; |
168 | __le32 request_id; | 168 | __le32 request_id; |
169 | __le32 oid; | 169 | __le32 oid; |
170 | __le32 len; | 170 | __le32 len; |
171 | __le32 offset; | 171 | __le32 offset; |
172 | /*?*/ __le32 handle; // zero | 172 | /*?*/ __le32 handle; /* zero */ |
173 | } __attribute__ ((packed)); | 173 | } __attribute__ ((packed)); |
174 | 174 | ||
175 | struct rndis_set_c { /* IN */ | 175 | struct rndis_set_c { /* IN */ |
176 | // header and: | 176 | /* header and: */ |
177 | __le32 msg_type; /* RNDIS_MSG_SET_C */ | 177 | __le32 msg_type; /* RNDIS_MSG_SET_C */ |
178 | __le32 msg_len; | 178 | __le32 msg_len; |
179 | __le32 request_id; | 179 | __le32 request_id; |
@@ -181,14 +181,14 @@ struct rndis_set_c { /* IN */ | |||
181 | } __attribute__ ((packed)); | 181 | } __attribute__ ((packed)); |
182 | 182 | ||
183 | struct rndis_reset { /* IN */ | 183 | struct rndis_reset { /* IN */ |
184 | // header and: | 184 | /* header and: */ |
185 | __le32 msg_type; /* RNDIS_MSG_RESET */ | 185 | __le32 msg_type; /* RNDIS_MSG_RESET */ |
186 | __le32 msg_len; | 186 | __le32 msg_len; |
187 | __le32 reserved; | 187 | __le32 reserved; |
188 | } __attribute__ ((packed)); | 188 | } __attribute__ ((packed)); |
189 | 189 | ||
190 | struct rndis_reset_c { /* OUT */ | 190 | struct rndis_reset_c { /* OUT */ |
191 | // header and: | 191 | /* header and: */ |
192 | __le32 msg_type; /* RNDIS_MSG_RESET_C */ | 192 | __le32 msg_type; /* RNDIS_MSG_RESET_C */ |
193 | __le32 msg_len; | 193 | __le32 msg_len; |
194 | __le32 status; | 194 | __le32 status; |
@@ -196,7 +196,7 @@ struct rndis_reset_c { /* OUT */ | |||
196 | } __attribute__ ((packed)); | 196 | } __attribute__ ((packed)); |
197 | 197 | ||
198 | struct rndis_indicate { /* IN (unrequested) */ | 198 | struct rndis_indicate { /* IN (unrequested) */ |
199 | // header and: | 199 | /* header and: */ |
200 | __le32 msg_type; /* RNDIS_MSG_INDICATE */ | 200 | __le32 msg_type; /* RNDIS_MSG_INDICATE */ |
201 | __le32 msg_len; | 201 | __le32 msg_len; |
202 | __le32 status; | 202 | __le32 status; |
@@ -208,14 +208,14 @@ struct rndis_indicate { /* IN (unrequested) */ | |||
208 | } __attribute__ ((packed)); | 208 | } __attribute__ ((packed)); |
209 | 209 | ||
210 | struct rndis_keepalive { /* OUT (optionally IN) */ | 210 | struct rndis_keepalive { /* OUT (optionally IN) */ |
211 | // header and: | 211 | /* header and: */ |
212 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE */ | 212 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE */ |
213 | __le32 msg_len; | 213 | __le32 msg_len; |
214 | __le32 request_id; | 214 | __le32 request_id; |
215 | } __attribute__ ((packed)); | 215 | } __attribute__ ((packed)); |
216 | 216 | ||
217 | struct rndis_keepalive_c { /* IN (optionally OUT) */ | 217 | struct rndis_keepalive_c { /* IN (optionally OUT) */ |
218 | // header and: | 218 | /* header and: */ |
219 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE_C */ | 219 | __le32 msg_type; /* RNDIS_MSG_KEEPALIVE_C */ |
220 | __le32 msg_len; | 220 | __le32 msg_len; |
221 | __le32 request_id; | 221 | __le32 request_id; |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 0a458b861933..84a4c44c208b 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -35,6 +35,9 @@ enum port_dev_state { | |||
35 | PORT_UNREGISTERING, | 35 | PORT_UNREGISTERING, |
36 | }; | 36 | }; |
37 | 37 | ||
38 | /* USB serial flags */ | ||
39 | #define USB_SERIAL_WRITE_BUSY 0 | ||
40 | |||
38 | /** | 41 | /** |
39 | * usb_serial_port: structure for the specific ports of a device. | 42 | * usb_serial_port: structure for the specific ports of a device. |
40 | * @serial: pointer back to the struct usb_serial owner of this port. | 43 | * @serial: pointer back to the struct usb_serial owner of this port. |
@@ -49,7 +52,7 @@ enum port_dev_state { | |||
49 | * @interrupt_out_size: the size of the interrupt_out_buffer, in bytes. | 52 | * @interrupt_out_size: the size of the interrupt_out_buffer, in bytes. |
50 | * @interrupt_out_urb: pointer to the interrupt out struct urb for this port. | 53 | * @interrupt_out_urb: pointer to the interrupt out struct urb for this port. |
51 | * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe | 54 | * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe |
52 | * for this port. | 55 | * for this port. |
53 | * @bulk_in_buffer: pointer to the bulk in buffer for this port. | 56 | * @bulk_in_buffer: pointer to the bulk in buffer for this port. |
54 | * @bulk_in_size: the size of the bulk_in_buffer, in bytes. | 57 | * @bulk_in_size: the size of the bulk_in_buffer, in bytes. |
55 | * @read_urb: pointer to the bulk in struct urb for this port. | 58 | * @read_urb: pointer to the bulk in struct urb for this port. |
@@ -60,13 +63,17 @@ enum port_dev_state { | |||
60 | * @write_urb: pointer to the bulk out struct urb for this port. | 63 | * @write_urb: pointer to the bulk out struct urb for this port. |
61 | * @write_fifo: kfifo used to buffer outgoing data | 64 | * @write_fifo: kfifo used to buffer outgoing data |
62 | * @write_urb_busy: port`s writing status | 65 | * @write_urb_busy: port`s writing status |
66 | * @bulk_out_buffers: pointers to the bulk out buffers for this port | ||
67 | * @write_urbs: pointers to the bulk out urbs for this port | ||
68 | * @write_urbs_free: status bitmap the for bulk out urbs | ||
69 | * @tx_bytes: number of bytes currently in host stack queues | ||
63 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this | 70 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this |
64 | * port. | 71 | * port. |
72 | * @flags: usb serial port flags | ||
65 | * @write_wait: a wait_queue_head_t used by the port. | 73 | * @write_wait: a wait_queue_head_t used by the port. |
66 | * @work: work queue entry for the line discipline waking up. | 74 | * @work: work queue entry for the line discipline waking up. |
67 | * @throttled: nonzero if the read urb is inactive to throttle the device | 75 | * @throttled: nonzero if the read urb is inactive to throttle the device |
68 | * @throttle_req: nonzero if the tty wants to throttle us | 76 | * @throttle_req: nonzero if the tty wants to throttle us |
69 | * @console: attached usb serial console | ||
70 | * @dev: pointer to the serial device | 77 | * @dev: pointer to the serial device |
71 | * | 78 | * |
72 | * This structure is used by the usb-serial core and drivers for the specific | 79 | * This structure is used by the usb-serial core and drivers for the specific |
@@ -97,16 +104,19 @@ struct usb_serial_port { | |||
97 | struct urb *write_urb; | 104 | struct urb *write_urb; |
98 | struct kfifo write_fifo; | 105 | struct kfifo write_fifo; |
99 | int write_urb_busy; | 106 | int write_urb_busy; |
107 | |||
108 | unsigned char *bulk_out_buffers[2]; | ||
109 | struct urb *write_urbs[2]; | ||
110 | unsigned long write_urbs_free; | ||
100 | __u8 bulk_out_endpointAddress; | 111 | __u8 bulk_out_endpointAddress; |
101 | 112 | ||
102 | int tx_bytes_flight; | 113 | int tx_bytes; |
103 | int urbs_in_flight; | ||
104 | 114 | ||
115 | unsigned long flags; | ||
105 | wait_queue_head_t write_wait; | 116 | wait_queue_head_t write_wait; |
106 | struct work_struct work; | 117 | struct work_struct work; |
107 | char throttled; | 118 | char throttled; |
108 | char throttle_req; | 119 | char throttle_req; |
109 | char console; | ||
110 | unsigned long sysrq; /* sysrq timeout */ | 120 | unsigned long sysrq; /* sysrq timeout */ |
111 | struct device dev; | 121 | struct device dev; |
112 | enum port_dev_state dev_state; | 122 | enum port_dev_state dev_state; |
@@ -181,6 +191,8 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data) | |||
181 | * @id_table: pointer to a list of usb_device_id structures that define all | 191 | * @id_table: pointer to a list of usb_device_id structures that define all |
182 | * of the devices this structure can support. | 192 | * of the devices this structure can support. |
183 | * @num_ports: the number of different ports this device will have. | 193 | * @num_ports: the number of different ports this device will have. |
194 | * @bulk_in_size: bytes to allocate for bulk-in buffer (0 = end-point size) | ||
195 | * @bulk_out_size: bytes to allocate for bulk-out buffer (0 = end-point size) | ||
184 | * @calc_num_ports: pointer to a function to determine how many ports this | 196 | * @calc_num_ports: pointer to a function to determine how many ports this |
185 | * device has dynamically. It will be called after the probe() | 197 | * device has dynamically. It will be called after the probe() |
186 | * callback is called, but before attach() | 198 | * callback is called, but before attach() |
@@ -223,7 +235,9 @@ struct usb_serial_driver { | |||
223 | struct device_driver driver; | 235 | struct device_driver driver; |
224 | struct usb_driver *usb_driver; | 236 | struct usb_driver *usb_driver; |
225 | struct usb_dynids dynids; | 237 | struct usb_dynids dynids; |
226 | int max_in_flight_urbs; | 238 | |
239 | size_t bulk_in_size; | ||
240 | size_t bulk_out_size; | ||
227 | 241 | ||
228 | int (*probe)(struct usb_serial *serial, const struct usb_device_id *id); | 242 | int (*probe)(struct usb_serial *serial, const struct usb_device_id *id); |
229 | int (*attach)(struct usb_serial *serial); | 243 | int (*attach)(struct usb_serial *serial); |
@@ -269,6 +283,11 @@ struct usb_serial_driver { | |||
269 | void (*write_int_callback)(struct urb *urb); | 283 | void (*write_int_callback)(struct urb *urb); |
270 | void (*read_bulk_callback)(struct urb *urb); | 284 | void (*read_bulk_callback)(struct urb *urb); |
271 | void (*write_bulk_callback)(struct urb *urb); | 285 | void (*write_bulk_callback)(struct urb *urb); |
286 | /* Called by the generic read bulk callback */ | ||
287 | void (*process_read_urb)(struct urb *urb); | ||
288 | /* Called by the generic write implementation */ | ||
289 | int (*prepare_write_buffer)(struct usb_serial_port *port, | ||
290 | void *dest, size_t size); | ||
272 | }; | 291 | }; |
273 | #define to_usb_serial_driver(d) \ | 292 | #define to_usb_serial_driver(d) \ |
274 | container_of(d, struct usb_serial_driver, driver) | 293 | container_of(d, struct usb_serial_driver, driver) |
@@ -318,8 +337,11 @@ extern void usb_serial_generic_disconnect(struct usb_serial *serial); | |||
318 | extern void usb_serial_generic_release(struct usb_serial *serial); | 337 | extern void usb_serial_generic_release(struct usb_serial *serial); |
319 | extern int usb_serial_generic_register(int debug); | 338 | extern int usb_serial_generic_register(int debug); |
320 | extern void usb_serial_generic_deregister(void); | 339 | extern void usb_serial_generic_deregister(void); |
321 | extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port, | 340 | extern int usb_serial_generic_submit_read_urb(struct usb_serial_port *port, |
322 | gfp_t mem_flags); | 341 | gfp_t mem_flags); |
342 | extern void usb_serial_generic_process_read_urb(struct urb *urb); | ||
343 | extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port, | ||
344 | void *dest, size_t size); | ||
323 | extern int usb_serial_handle_sysrq_char(struct tty_struct *tty, | 345 | extern int usb_serial_handle_sysrq_char(struct tty_struct *tty, |
324 | struct usb_serial_port *port, | 346 | struct usb_serial_port *port, |
325 | unsigned int ch); | 347 | unsigned int ch); |
diff --git a/include/linux/usb/ulpi.h b/include/linux/usb/ulpi.h index 20675c6ebc4d..2369d07c3c87 100644 --- a/include/linux/usb/ulpi.h +++ b/include/linux/usb/ulpi.h | |||
@@ -1,6 +1,146 @@ | |||
1 | /* | ||
2 | * ulpi.h -- ULPI defines and function prorotypes | ||
3 | * | ||
4 | * Copyright (C) 2010 Nokia Corporation | ||
5 | * | ||
6 | * This software is distributed under the terms of the GNU General | ||
7 | * Public License ("GPL") as published by the Free Software Foundation, | ||
8 | * version 2 of that License. | ||
9 | */ | ||
10 | |||
1 | #ifndef __LINUX_USB_ULPI_H | 11 | #ifndef __LINUX_USB_ULPI_H |
2 | #define __LINUX_USB_ULPI_H | 12 | #define __LINUX_USB_ULPI_H |
3 | 13 | ||
14 | /*-------------------------------------------------------------------------*/ | ||
15 | |||
16 | /* | ||
17 | * Macros for Set and Clear | ||
18 | * See ULPI 1.1 specification to find the registers with Set and Clear offsets | ||
19 | */ | ||
20 | #define ULPI_SET(a) (a + 1) | ||
21 | #define ULPI_CLR(a) (a + 2) | ||
22 | |||
23 | /*-------------------------------------------------------------------------*/ | ||
24 | |||
25 | /* | ||
26 | * Register Map | ||
27 | */ | ||
28 | #define ULPI_VENDOR_ID_LOW 0x00 | ||
29 | #define ULPI_VENDOR_ID_HIGH 0x01 | ||
30 | #define ULPI_PRODUCT_ID_LOW 0x02 | ||
31 | #define ULPI_PRODUCT_ID_HIGH 0x03 | ||
32 | #define ULPI_FUNC_CTRL 0x04 | ||
33 | #define ULPI_IFC_CTRL 0x07 | ||
34 | #define ULPI_OTG_CTRL 0x0a | ||
35 | #define ULPI_USB_INT_EN_RISE 0x0d | ||
36 | #define ULPI_USB_INT_EN_FALL 0x10 | ||
37 | #define ULPI_USB_INT_STS 0x13 | ||
38 | #define ULPI_USB_INT_LATCH 0x14 | ||
39 | #define ULPI_DEBUG 0x15 | ||
40 | #define ULPI_SCRATCH 0x16 | ||
41 | /* Optional Carkit Registers */ | ||
42 | #define ULPI_CARCIT_CTRL 0x19 | ||
43 | #define ULPI_CARCIT_INT_DELAY 0x1c | ||
44 | #define ULPI_CARCIT_INT_EN 0x1d | ||
45 | #define ULPI_CARCIT_INT_STS 0x20 | ||
46 | #define ULPI_CARCIT_INT_LATCH 0x21 | ||
47 | #define ULPI_CARCIT_PLS_CTRL 0x22 | ||
48 | /* Other Optional Registers */ | ||
49 | #define ULPI_TX_POS_WIDTH 0x25 | ||
50 | #define ULPI_TX_NEG_WIDTH 0x26 | ||
51 | #define ULPI_POLARITY_RECOVERY 0x27 | ||
52 | /* Access Extended Register Set */ | ||
53 | #define ULPI_ACCESS_EXTENDED 0x2f | ||
54 | /* Vendor Specific */ | ||
55 | #define ULPI_VENDOR_SPECIFIC 0x30 | ||
56 | /* Extended Registers */ | ||
57 | #define ULPI_EXT_VENDOR_SPECIFIC 0x80 | ||
58 | |||
59 | /*-------------------------------------------------------------------------*/ | ||
60 | |||
61 | /* Function Control */ | ||
62 | #define ULPI_FUNC_CTRL_XCVRSEL (1 << 0) | ||
63 | #define ULPI_FUNC_CTRL_XCVRSEL_MASK (3 << 0) | ||
64 | #define ULPI_FUNC_CTRL_HIGH_SPEED (0 << 0) | ||
65 | #define ULPI_FUNC_CTRL_FULL_SPEED (1 << 0) | ||
66 | #define ULPI_FUNC_CTRL_LOW_SPEED (2 << 0) | ||
67 | #define ULPI_FUNC_CTRL_FS4LS (3 << 0) | ||
68 | #define ULPI_FUNC_CTRL_TERMSELECT (1 << 2) | ||
69 | #define ULPI_FUNC_CTRL_OPMODE (1 << 3) | ||
70 | #define ULPI_FUNC_CTRL_OPMODE_MASK (3 << 3) | ||
71 | #define ULPI_FUNC_CTRL_OPMODE_NORMAL (0 << 3) | ||
72 | #define ULPI_FUNC_CTRL_OPMODE_NONDRIVING (1 << 3) | ||
73 | #define ULPI_FUNC_CTRL_OPMODE_DISABLE_NRZI (2 << 3) | ||
74 | #define ULPI_FUNC_CTRL_OPMODE_NOSYNC_NOEOP (3 << 3) | ||
75 | #define ULPI_FUNC_CTRL_RESET (1 << 5) | ||
76 | #define ULPI_FUNC_CTRL_SUSPENDM (1 << 6) | ||
77 | |||
78 | /* Interface Control */ | ||
79 | #define ULPI_IFC_CTRL_6_PIN_SERIAL_MODE (1 << 0) | ||
80 | #define ULPI_IFC_CTRL_3_PIN_SERIAL_MODE (1 << 1) | ||
81 | #define ULPI_IFC_CTRL_CARKITMODE (1 << 2) | ||
82 | #define ULPI_IFC_CTRL_CLOCKSUSPENDM (1 << 3) | ||
83 | #define ULPI_IFC_CTRL_AUTORESUME (1 << 4) | ||
84 | #define ULPI_IFC_CTRL_EXTERNAL_VBUS (1 << 5) | ||
85 | #define ULPI_IFC_CTRL_PASSTHRU (1 << 6) | ||
86 | #define ULPI_IFC_CTRL_PROTECT_IFC_DISABLE (1 << 7) | ||
87 | |||
88 | /* OTG Control */ | ||
89 | #define ULPI_OTG_CTRL_ID_PULLUP (1 << 0) | ||
90 | #define ULPI_OTG_CTRL_DP_PULLDOWN (1 << 1) | ||
91 | #define ULPI_OTG_CTRL_DM_PULLDOWN (1 << 2) | ||
92 | #define ULPI_OTG_CTRL_DISCHRGVBUS (1 << 3) | ||
93 | #define ULPI_OTG_CTRL_CHRGVBUS (1 << 4) | ||
94 | #define ULPI_OTG_CTRL_DRVVBUS (1 << 5) | ||
95 | #define ULPI_OTG_CTRL_DRVVBUS_EXT (1 << 6) | ||
96 | #define ULPI_OTG_CTRL_EXTVBUSIND (1 << 7) | ||
97 | |||
98 | /* USB Interrupt Enable Rising, | ||
99 | * USB Interrupt Enable Falling, | ||
100 | * USB Interrupt Status and | ||
101 | * USB Interrupt Latch | ||
102 | */ | ||
103 | #define ULPI_INT_HOST_DISCONNECT (1 << 0) | ||
104 | #define ULPI_INT_VBUS_VALID (1 << 1) | ||
105 | #define ULPI_INT_SESS_VALID (1 << 2) | ||
106 | #define ULPI_INT_SESS_END (1 << 3) | ||
107 | #define ULPI_INT_IDGRD (1 << 4) | ||
108 | |||
109 | /* Debug */ | ||
110 | #define ULPI_DEBUG_LINESTATE0 (1 << 0) | ||
111 | #define ULPI_DEBUG_LINESTATE1 (1 << 1) | ||
112 | |||
113 | /* Carkit Control */ | ||
114 | #define ULPI_CARKIT_CTRL_CARKITPWR (1 << 0) | ||
115 | #define ULPI_CARKIT_CTRL_IDGNDDRV (1 << 1) | ||
116 | #define ULPI_CARKIT_CTRL_TXDEN (1 << 2) | ||
117 | #define ULPI_CARKIT_CTRL_RXDEN (1 << 3) | ||
118 | #define ULPI_CARKIT_CTRL_SPKLEFTEN (1 << 4) | ||
119 | #define ULPI_CARKIT_CTRL_SPKRIGHTEN (1 << 5) | ||
120 | #define ULPI_CARKIT_CTRL_MICEN (1 << 6) | ||
121 | |||
122 | /* Carkit Interrupt Enable */ | ||
123 | #define ULPI_CARKIT_INT_EN_IDFLOAT_RISE (1 << 0) | ||
124 | #define ULPI_CARKIT_INT_EN_IDFLOAT_FALL (1 << 1) | ||
125 | #define ULPI_CARKIT_INT_EN_CARINTDET (1 << 2) | ||
126 | #define ULPI_CARKIT_INT_EN_DP_RISE (1 << 3) | ||
127 | #define ULPI_CARKIT_INT_EN_DP_FALL (1 << 4) | ||
128 | |||
129 | /* Carkit Interrupt Status and | ||
130 | * Carkit Interrupt Latch | ||
131 | */ | ||
132 | #define ULPI_CARKIT_INT_IDFLOAT (1 << 0) | ||
133 | #define ULPI_CARKIT_INT_CARINTDET (1 << 1) | ||
134 | #define ULPI_CARKIT_INT_DP (1 << 2) | ||
135 | |||
136 | /* Carkit Pulse Control*/ | ||
137 | #define ULPI_CARKIT_PLS_CTRL_TXPLSEN (1 << 0) | ||
138 | #define ULPI_CARKIT_PLS_CTRL_RXPLSEN (1 << 1) | ||
139 | #define ULPI_CARKIT_PLS_CTRL_SPKRLEFT_BIASEN (1 << 2) | ||
140 | #define ULPI_CARKIT_PLS_CTRL_SPKRRIGHT_BIASEN (1 << 3) | ||
141 | |||
142 | /*-------------------------------------------------------------------------*/ | ||
143 | |||
4 | struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops, | 144 | struct otg_transceiver *otg_ulpi_create(struct otg_io_access_ops *ops, |
5 | unsigned int flags); | 145 | unsigned int flags); |
6 | 146 | ||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index df1e83dd9a54..7ae27a473818 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -43,7 +43,7 @@ struct usbnet { | |||
43 | /* protocol/interface state */ | 43 | /* protocol/interface state */ |
44 | struct net_device *net; | 44 | struct net_device *net; |
45 | int msg_enable; | 45 | int msg_enable; |
46 | unsigned long data [5]; | 46 | unsigned long data[5]; |
47 | u32 xid; | 47 | u32 xid; |
48 | u32 hard_mtu; /* count any extra framing */ | 48 | u32 hard_mtu; /* count any extra framing */ |
49 | size_t rx_urb_size; /* size for rx urbs */ | 49 | size_t rx_urb_size; /* size for rx urbs */ |
@@ -148,8 +148,8 @@ struct driver_info { | |||
148 | * much everything except custom framing and chip-specific stuff. | 148 | * much everything except custom framing and chip-specific stuff. |
149 | */ | 149 | */ |
150 | extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *); | 150 | extern int usbnet_probe(struct usb_interface *, const struct usb_device_id *); |
151 | extern int usbnet_suspend (struct usb_interface *, pm_message_t ); | 151 | extern int usbnet_suspend(struct usb_interface *, pm_message_t); |
152 | extern int usbnet_resume (struct usb_interface *); | 152 | extern int usbnet_resume(struct usb_interface *); |
153 | extern void usbnet_disconnect(struct usb_interface *); | 153 | extern void usbnet_disconnect(struct usb_interface *); |
154 | 154 | ||
155 | 155 | ||
@@ -165,8 +165,8 @@ struct cdc_state { | |||
165 | struct usb_interface *data; | 165 | struct usb_interface *data; |
166 | }; | 166 | }; |
167 | 167 | ||
168 | extern int usbnet_generic_cdc_bind (struct usbnet *, struct usb_interface *); | 168 | extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *); |
169 | extern void usbnet_cdc_unbind (struct usbnet *, struct usb_interface *); | 169 | extern void usbnet_cdc_unbind(struct usbnet *, struct usb_interface *); |
170 | 170 | ||
171 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ | 171 | /* CDC and RNDIS support the same host-chosen packet filters for IN transfers */ |
172 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ | 172 | #define DEFAULT_FILTER (USB_CDC_PACKET_TYPE_BROADCAST \ |
@@ -189,29 +189,31 @@ struct skb_data { /* skb->cb is one of these */ | |||
189 | size_t length; | 189 | size_t length; |
190 | }; | 190 | }; |
191 | 191 | ||
192 | extern int usbnet_open (struct net_device *net); | 192 | extern int usbnet_open(struct net_device *net); |
193 | extern int usbnet_stop (struct net_device *net); | 193 | extern int usbnet_stop(struct net_device *net); |
194 | extern netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | 194 | extern netdev_tx_t usbnet_start_xmit(struct sk_buff *skb, |
195 | struct net_device *net); | 195 | struct net_device *net); |
196 | extern void usbnet_tx_timeout (struct net_device *net); | 196 | extern void usbnet_tx_timeout(struct net_device *net); |
197 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 197 | extern int usbnet_change_mtu(struct net_device *net, int new_mtu); |
198 | 198 | ||
199 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 199 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
200 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); | 200 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); |
201 | extern void usbnet_defer_kevent (struct usbnet *, int); | 201 | extern void usbnet_defer_kevent(struct usbnet *, int); |
202 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 202 | extern void usbnet_skb_return(struct usbnet *, struct sk_buff *); |
203 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 203 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
204 | 204 | ||
205 | extern void usbnet_pause_rx(struct usbnet *); | 205 | extern void usbnet_pause_rx(struct usbnet *); |
206 | extern void usbnet_resume_rx(struct usbnet *); | 206 | extern void usbnet_resume_rx(struct usbnet *); |
207 | extern void usbnet_purge_paused_rxq(struct usbnet *); | 207 | extern void usbnet_purge_paused_rxq(struct usbnet *); |
208 | 208 | ||
209 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 209 | extern int usbnet_get_settings(struct net_device *net, |
210 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 210 | struct ethtool_cmd *cmd); |
211 | extern u32 usbnet_get_link (struct net_device *net); | 211 | extern int usbnet_set_settings(struct net_device *net, |
212 | extern u32 usbnet_get_msglevel (struct net_device *); | 212 | struct ethtool_cmd *cmd); |
213 | extern void usbnet_set_msglevel (struct net_device *, u32); | 213 | extern u32 usbnet_get_link(struct net_device *net); |
214 | extern void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *); | 214 | extern u32 usbnet_get_msglevel(struct net_device *); |
215 | extern void usbnet_set_msglevel(struct net_device *, u32); | ||
216 | extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *); | ||
215 | extern int usbnet_nway_reset(struct net_device *net); | 217 | extern int usbnet_nway_reset(struct net_device *net); |
216 | 218 | ||
217 | #endif /* __LINUX_USB_USBNET_H */ | 219 | #endif /* __LINUX_USB_USBNET_H */ |
diff --git a/include/linux/usb/wusb-wa.h b/include/linux/usb/wusb-wa.h index fb7c359bdfba..f9dec37f617b 100644 --- a/include/linux/usb/wusb-wa.h +++ b/include/linux/usb/wusb-wa.h | |||
@@ -87,7 +87,7 @@ enum rpipe_crs { | |||
87 | * FIXME: explain rpipes | 87 | * FIXME: explain rpipes |
88 | */ | 88 | */ |
89 | struct usb_rpipe_descriptor { | 89 | struct usb_rpipe_descriptor { |
90 | u8 bLength; | 90 | u8 bLength; |
91 | u8 bDescriptorType; | 91 | u8 bDescriptorType; |
92 | __le16 wRPipeIndex; | 92 | __le16 wRPipeIndex; |
93 | __le16 wRequests; | 93 | __le16 wRequests; |
diff --git a/include/linux/via-core.h b/include/linux/via-core.h new file mode 100644 index 000000000000..7ffb521e1a7a --- /dev/null +++ b/include/linux/via-core.h | |||
@@ -0,0 +1,219 @@ | |||
1 | /* | ||
2 | * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved. | ||
3 | * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. | ||
4 | * Copyright 2009-2010 Jonathan Corbet <corbet@lwn.net> | ||
5 | * Copyright 2010 Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public | ||
9 | * License as published by the Free Software Foundation; | ||
10 | * either version 2, or (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even | ||
14 | * the implied warranty of MERCHANTABILITY or FITNESS FOR | ||
15 | * A PARTICULAR PURPOSE.See the GNU General Public License | ||
16 | * for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., | ||
21 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
22 | */ | ||
23 | |||
24 | #ifndef __VIA_CORE_H__ | ||
25 | #define __VIA_CORE_H__ | ||
26 | #include <linux/types.h> | ||
27 | #include <linux/io.h> | ||
28 | #include <linux/spinlock.h> | ||
29 | #include <linux/pci.h> | ||
30 | |||
31 | /* | ||
32 | * A description of each known serial I2C/GPIO port. | ||
33 | */ | ||
34 | enum via_port_type { | ||
35 | VIA_PORT_NONE = 0, | ||
36 | VIA_PORT_I2C, | ||
37 | VIA_PORT_GPIO, | ||
38 | }; | ||
39 | |||
40 | enum via_port_mode { | ||
41 | VIA_MODE_OFF = 0, | ||
42 | VIA_MODE_I2C, /* Used as I2C port */ | ||
43 | VIA_MODE_GPIO, /* Two GPIO ports */ | ||
44 | }; | ||
45 | |||
46 | enum viafb_i2c_adap { | ||
47 | VIA_PORT_26 = 0, | ||
48 | VIA_PORT_31, | ||
49 | VIA_PORT_25, | ||
50 | VIA_PORT_2C, | ||
51 | VIA_PORT_3D, | ||
52 | }; | ||
53 | #define VIAFB_NUM_PORTS 5 | ||
54 | |||
55 | struct via_port_cfg { | ||
56 | enum via_port_type type; | ||
57 | enum via_port_mode mode; | ||
58 | u16 io_port; | ||
59 | u8 ioport_index; | ||
60 | }; | ||
61 | |||
62 | /* | ||
63 | * This is the global viafb "device" containing stuff needed by | ||
64 | * all subdevs. | ||
65 | */ | ||
66 | struct viafb_dev { | ||
67 | struct pci_dev *pdev; | ||
68 | int chip_type; | ||
69 | struct via_port_cfg *port_cfg; | ||
70 | /* | ||
71 | * Spinlock for access to device registers. Not yet | ||
72 | * globally used. | ||
73 | */ | ||
74 | spinlock_t reg_lock; | ||
75 | /* | ||
76 | * The framebuffer MMIO region. Little, if anything, touches | ||
77 | * this memory directly, and certainly nothing outside of the | ||
78 | * framebuffer device itself. We *do* have to be able to allocate | ||
79 | * chunks of this memory for other devices, though. | ||
80 | */ | ||
81 | unsigned long fbmem_start; | ||
82 | long fbmem_len; | ||
83 | void __iomem *fbmem; | ||
84 | #if defined(CONFIG_FB_VIA_CAMERA) || defined(CONFIG_FB_VIA_CAMERA_MODULE) | ||
85 | long camera_fbmem_offset; | ||
86 | long camera_fbmem_size; | ||
87 | #endif | ||
88 | /* | ||
89 | * The MMIO region for device registers. | ||
90 | */ | ||
91 | unsigned long engine_start; | ||
92 | unsigned long engine_len; | ||
93 | void __iomem *engine_mmio; | ||
94 | |||
95 | }; | ||
96 | |||
97 | /* | ||
98 | * Interrupt management. | ||
99 | */ | ||
100 | |||
101 | void viafb_irq_enable(u32 mask); | ||
102 | void viafb_irq_disable(u32 mask); | ||
103 | |||
104 | /* | ||
105 | * The global interrupt control register and its bits. | ||
106 | */ | ||
107 | #define VDE_INTERRUPT 0x200 /* Video interrupt flags/masks */ | ||
108 | #define VDE_I_DVISENSE 0x00000001 /* DVI sense int status */ | ||
109 | #define VDE_I_VBLANK 0x00000002 /* Vertical blank status */ | ||
110 | #define VDE_I_MCCFI 0x00000004 /* MCE compl. frame int status */ | ||
111 | #define VDE_I_VSYNC 0x00000008 /* VGA VSYNC int status */ | ||
112 | #define VDE_I_DMA0DDONE 0x00000010 /* DMA 0 descr done */ | ||
113 | #define VDE_I_DMA0TDONE 0x00000020 /* DMA 0 transfer done */ | ||
114 | #define VDE_I_DMA1DDONE 0x00000040 /* DMA 1 descr done */ | ||
115 | #define VDE_I_DMA1TDONE 0x00000080 /* DMA 1 transfer done */ | ||
116 | #define VDE_I_C1AV 0x00000100 /* Cap Eng 1 act vid end */ | ||
117 | #define VDE_I_HQV0 0x00000200 /* First HQV engine */ | ||
118 | #define VDE_I_HQV1 0x00000400 /* Second HQV engine */ | ||
119 | #define VDE_I_HQV1EN 0x00000800 /* Second HQV engine enable */ | ||
120 | #define VDE_I_C0AV 0x00001000 /* Cap Eng 0 act vid end */ | ||
121 | #define VDE_I_C0VBI 0x00002000 /* Cap Eng 0 VBI end */ | ||
122 | #define VDE_I_C1VBI 0x00004000 /* Cap Eng 1 VBI end */ | ||
123 | #define VDE_I_VSYNC2 0x00008000 /* Sec. Disp. VSYNC */ | ||
124 | #define VDE_I_DVISNSEN 0x00010000 /* DVI sense enable */ | ||
125 | #define VDE_I_VSYNC2EN 0x00020000 /* Sec Disp VSYNC enable */ | ||
126 | #define VDE_I_MCCFIEN 0x00040000 /* MC comp frame int mask enable */ | ||
127 | #define VDE_I_VSYNCEN 0x00080000 /* VSYNC enable */ | ||
128 | #define VDE_I_DMA0DDEN 0x00100000 /* DMA 0 descr done enable */ | ||
129 | #define VDE_I_DMA0TDEN 0x00200000 /* DMA 0 trans done enable */ | ||
130 | #define VDE_I_DMA1DDEN 0x00400000 /* DMA 1 descr done enable */ | ||
131 | #define VDE_I_DMA1TDEN 0x00800000 /* DMA 1 trans done enable */ | ||
132 | #define VDE_I_C1AVEN 0x01000000 /* cap 1 act vid end enable */ | ||
133 | #define VDE_I_HQV0EN 0x02000000 /* First hqv engine enable */ | ||
134 | #define VDE_I_C1VBIEN 0x04000000 /* Cap 1 VBI end enable */ | ||
135 | #define VDE_I_LVDSSI 0x08000000 /* LVDS sense interrupt */ | ||
136 | #define VDE_I_C0AVEN 0x10000000 /* Cap 0 act vid end enable */ | ||
137 | #define VDE_I_C0VBIEN 0x20000000 /* Cap 0 VBI end enable */ | ||
138 | #define VDE_I_LVDSSIEN 0x40000000 /* LVDS Sense enable */ | ||
139 | #define VDE_I_ENABLE 0x80000000 /* Global interrupt enable */ | ||
140 | |||
141 | /* | ||
142 | * DMA management. | ||
143 | */ | ||
144 | int viafb_request_dma(void); | ||
145 | void viafb_release_dma(void); | ||
146 | /* void viafb_dma_copy_out(unsigned int offset, dma_addr_t paddr, int len); */ | ||
147 | int viafb_dma_copy_out_sg(unsigned int offset, struct scatterlist *sg, int nsg); | ||
148 | |||
149 | /* | ||
150 | * DMA Controller registers. | ||
151 | */ | ||
152 | #define VDMA_MR0 0xe00 /* Mod reg 0 */ | ||
153 | #define VDMA_MR_CHAIN 0x01 /* Chaining mode */ | ||
154 | #define VDMA_MR_TDIE 0x02 /* Transfer done int enable */ | ||
155 | #define VDMA_CSR0 0xe04 /* Control/status */ | ||
156 | #define VDMA_C_ENABLE 0x01 /* DMA Enable */ | ||
157 | #define VDMA_C_START 0x02 /* Start a transfer */ | ||
158 | #define VDMA_C_ABORT 0x04 /* Abort a transfer */ | ||
159 | #define VDMA_C_DONE 0x08 /* Transfer is done */ | ||
160 | #define VDMA_MARL0 0xe20 /* Mem addr low */ | ||
161 | #define VDMA_MARH0 0xe24 /* Mem addr high */ | ||
162 | #define VDMA_DAR0 0xe28 /* Device address */ | ||
163 | #define VDMA_DQWCR0 0xe2c /* Count (16-byte) */ | ||
164 | #define VDMA_TMR0 0xe30 /* Tile mode reg */ | ||
165 | #define VDMA_DPRL0 0xe34 /* Not sure */ | ||
166 | #define VDMA_DPR_IN 0x08 /* Inbound transfer to FB */ | ||
167 | #define VDMA_DPRH0 0xe38 | ||
168 | #define VDMA_PMR0 (0xe00 + 0x134) /* Pitch mode */ | ||
169 | |||
170 | /* | ||
171 | * Useful stuff that probably belongs somewhere global. | ||
172 | */ | ||
173 | #define VGA_WIDTH 640 | ||
174 | #define VGA_HEIGHT 480 | ||
175 | |||
176 | /* | ||
177 | * Indexed port operations. Note that these are all multi-op | ||
178 | * functions; every invocation will be racy if you're not holding | ||
179 | * reg_lock. | ||
180 | */ | ||
181 | |||
182 | #define VIAStatus 0x3DA /* Non-indexed port */ | ||
183 | #define VIACR 0x3D4 | ||
184 | #define VIASR 0x3C4 | ||
185 | #define VIAGR 0x3CE | ||
186 | #define VIAAR 0x3C0 | ||
187 | |||
188 | static inline u8 via_read_reg(u16 port, u8 index) | ||
189 | { | ||
190 | outb(index, port); | ||
191 | return inb(port + 1); | ||
192 | } | ||
193 | |||
194 | static inline void via_write_reg(u16 port, u8 index, u8 data) | ||
195 | { | ||
196 | outb(index, port); | ||
197 | outb(data, port + 1); | ||
198 | } | ||
199 | |||
200 | static inline void via_write_reg_mask(u16 port, u8 index, u8 data, u8 mask) | ||
201 | { | ||
202 | u8 old; | ||
203 | |||
204 | outb(index, port); | ||
205 | old = inb(port + 1); | ||
206 | outb((data & mask) | (old & ~mask), port + 1); | ||
207 | } | ||
208 | |||
209 | #define VIA_MISC_REG_READ 0x03CC | ||
210 | #define VIA_MISC_REG_WRITE 0x03C2 | ||
211 | |||
212 | static inline void via_write_misc_reg_mask(u8 data, u8 mask) | ||
213 | { | ||
214 | u8 old = inb(VIA_MISC_REG_READ); | ||
215 | outb((data & mask) | (old & ~mask), VIA_MISC_REG_WRITE); | ||
216 | } | ||
217 | |||
218 | |||
219 | #endif /* __VIA_CORE_H__ */ | ||
diff --git a/include/linux/via-gpio.h b/include/linux/via-gpio.h new file mode 100644 index 000000000000..8281aea3dd6d --- /dev/null +++ b/include/linux/via-gpio.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * Support for viafb GPIO ports. | ||
3 | * | ||
4 | * Copyright 2009 Jonathan Corbet <corbet@lwn.net> | ||
5 | * Distributable under version 2 of the GNU General Public License. | ||
6 | */ | ||
7 | |||
8 | #ifndef __VIA_GPIO_H__ | ||
9 | #define __VIA_GPIO_H__ | ||
10 | |||
11 | extern int viafb_gpio_lookup(const char *name); | ||
12 | extern int viafb_gpio_init(void); | ||
13 | extern void viafb_gpio_exit(void); | ||
14 | #endif | ||
diff --git a/include/linux/via_i2c.h b/include/linux/via_i2c.h new file mode 100644 index 000000000000..44532e468c05 --- /dev/null +++ b/include/linux/via_i2c.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright 1998-2009 VIA Technologies, Inc. All Rights Reserved. | ||
3 | * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved. | ||
4 | |||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public | ||
7 | * License as published by the Free Software Foundation; | ||
8 | * either version 2, or (at your option) any later version. | ||
9 | |||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even | ||
12 | * the implied warranty of MERCHANTABILITY or FITNESS FOR | ||
13 | * A PARTICULAR PURPOSE.See the GNU General Public License | ||
14 | * for more details. | ||
15 | |||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., | ||
19 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
20 | */ | ||
21 | #ifndef __VIA_I2C_H__ | ||
22 | #define __VIA_I2C_H__ | ||
23 | |||
24 | #include <linux/i2c.h> | ||
25 | #include <linux/i2c-algo-bit.h> | ||
26 | |||
27 | struct via_i2c_stuff { | ||
28 | u16 i2c_port; /* GPIO or I2C port */ | ||
29 | u16 is_active; /* Being used as I2C? */ | ||
30 | struct i2c_adapter adapter; | ||
31 | struct i2c_algo_bit_data algo; | ||
32 | }; | ||
33 | |||
34 | |||
35 | int viafb_i2c_readbyte(u8 adap, u8 slave_addr, u8 index, u8 *pdata); | ||
36 | int viafb_i2c_writebyte(u8 adap, u8 slave_addr, u8 index, u8 data); | ||
37 | int viafb_i2c_readbytes(u8 adap, u8 slave_addr, u8 index, u8 *buff, int buff_len); | ||
38 | struct i2c_adapter *viafb_find_i2c_adapter(enum viafb_i2c_adap which); | ||
39 | |||
40 | extern int viafb_i2c_init(void); | ||
41 | extern void viafb_i2c_exit(void); | ||
42 | #endif /* __VIA_I2C_H__ */ | ||
diff --git a/include/linux/wait.h b/include/linux/wait.h index 76d96d035ea0..0836ccc57121 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -376,6 +376,155 @@ do { \ | |||
376 | __ret; \ | 376 | __ret; \ |
377 | }) | 377 | }) |
378 | 378 | ||
379 | |||
380 | #define __wait_event_interruptible_locked(wq, condition, exclusive, irq) \ | ||
381 | ({ \ | ||
382 | int __ret = 0; \ | ||
383 | DEFINE_WAIT(__wait); \ | ||
384 | if (exclusive) \ | ||
385 | __wait.flags |= WQ_FLAG_EXCLUSIVE; \ | ||
386 | do { \ | ||
387 | if (likely(list_empty(&__wait.task_list))) \ | ||
388 | __add_wait_queue_tail(&(wq), &__wait); \ | ||
389 | set_current_state(TASK_INTERRUPTIBLE); \ | ||
390 | if (signal_pending(current)) { \ | ||
391 | __ret = -ERESTARTSYS; \ | ||
392 | break; \ | ||
393 | } \ | ||
394 | if (irq) \ | ||
395 | spin_unlock_irq(&(wq).lock); \ | ||
396 | else \ | ||
397 | spin_unlock(&(wq).lock); \ | ||
398 | schedule(); \ | ||
399 | if (irq) \ | ||
400 | spin_lock_irq(&(wq).lock); \ | ||
401 | else \ | ||
402 | spin_lock(&(wq).lock); \ | ||
403 | } while (!(condition)); \ | ||
404 | __remove_wait_queue(&(wq), &__wait); \ | ||
405 | __set_current_state(TASK_RUNNING); \ | ||
406 | __ret; \ | ||
407 | }) | ||
408 | |||
409 | |||
410 | /** | ||
411 | * wait_event_interruptible_locked - sleep until a condition gets true | ||
412 | * @wq: the waitqueue to wait on | ||
413 | * @condition: a C expression for the event to wait for | ||
414 | * | ||
415 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
416 | * @condition evaluates to true or a signal is received. | ||
417 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
418 | * | ||
419 | * It must be called with wq.lock being held. This spinlock is | ||
420 | * unlocked while sleeping but @condition testing is done while lock | ||
421 | * is held and when this macro exits the lock is held. | ||
422 | * | ||
423 | * The lock is locked/unlocked using spin_lock()/spin_unlock() | ||
424 | * functions which must match the way they are locked/unlocked outside | ||
425 | * of this macro. | ||
426 | * | ||
427 | * wake_up_locked() has to be called after changing any variable that could | ||
428 | * change the result of the wait condition. | ||
429 | * | ||
430 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
431 | * signal and 0 if @condition evaluated to true. | ||
432 | */ | ||
433 | #define wait_event_interruptible_locked(wq, condition) \ | ||
434 | ((condition) \ | ||
435 | ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 0)) | ||
436 | |||
437 | /** | ||
438 | * wait_event_interruptible_locked_irq - sleep until a condition gets true | ||
439 | * @wq: the waitqueue to wait on | ||
440 | * @condition: a C expression for the event to wait for | ||
441 | * | ||
442 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
443 | * @condition evaluates to true or a signal is received. | ||
444 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
445 | * | ||
446 | * It must be called with wq.lock being held. This spinlock is | ||
447 | * unlocked while sleeping but @condition testing is done while lock | ||
448 | * is held and when this macro exits the lock is held. | ||
449 | * | ||
450 | * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() | ||
451 | * functions which must match the way they are locked/unlocked outside | ||
452 | * of this macro. | ||
453 | * | ||
454 | * wake_up_locked() has to be called after changing any variable that could | ||
455 | * change the result of the wait condition. | ||
456 | * | ||
457 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
458 | * signal and 0 if @condition evaluated to true. | ||
459 | */ | ||
460 | #define wait_event_interruptible_locked_irq(wq, condition) \ | ||
461 | ((condition) \ | ||
462 | ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 1)) | ||
463 | |||
464 | /** | ||
465 | * wait_event_interruptible_exclusive_locked - sleep exclusively until a condition gets true | ||
466 | * @wq: the waitqueue to wait on | ||
467 | * @condition: a C expression for the event to wait for | ||
468 | * | ||
469 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
470 | * @condition evaluates to true or a signal is received. | ||
471 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
472 | * | ||
473 | * It must be called with wq.lock being held. This spinlock is | ||
474 | * unlocked while sleeping but @condition testing is done while lock | ||
475 | * is held and when this macro exits the lock is held. | ||
476 | * | ||
477 | * The lock is locked/unlocked using spin_lock()/spin_unlock() | ||
478 | * functions which must match the way they are locked/unlocked outside | ||
479 | * of this macro. | ||
480 | * | ||
481 | * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag | ||
482 | * set thus when other process waits process on the list if this | ||
483 | * process is awaken further processes are not considered. | ||
484 | * | ||
485 | * wake_up_locked() has to be called after changing any variable that could | ||
486 | * change the result of the wait condition. | ||
487 | * | ||
488 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
489 | * signal and 0 if @condition evaluated to true. | ||
490 | */ | ||
491 | #define wait_event_interruptible_exclusive_locked(wq, condition) \ | ||
492 | ((condition) \ | ||
493 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 0)) | ||
494 | |||
495 | /** | ||
496 | * wait_event_interruptible_exclusive_locked_irq - sleep until a condition gets true | ||
497 | * @wq: the waitqueue to wait on | ||
498 | * @condition: a C expression for the event to wait for | ||
499 | * | ||
500 | * The process is put to sleep (TASK_INTERRUPTIBLE) until the | ||
501 | * @condition evaluates to true or a signal is received. | ||
502 | * The @condition is checked each time the waitqueue @wq is woken up. | ||
503 | * | ||
504 | * It must be called with wq.lock being held. This spinlock is | ||
505 | * unlocked while sleeping but @condition testing is done while lock | ||
506 | * is held and when this macro exits the lock is held. | ||
507 | * | ||
508 | * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() | ||
509 | * functions which must match the way they are locked/unlocked outside | ||
510 | * of this macro. | ||
511 | * | ||
512 | * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag | ||
513 | * set thus when other process waits process on the list if this | ||
514 | * process is awaken further processes are not considered. | ||
515 | * | ||
516 | * wake_up_locked() has to be called after changing any variable that could | ||
517 | * change the result of the wait condition. | ||
518 | * | ||
519 | * The function will return -ERESTARTSYS if it was interrupted by a | ||
520 | * signal and 0 if @condition evaluated to true. | ||
521 | */ | ||
522 | #define wait_event_interruptible_exclusive_locked_irq(wq, condition) \ | ||
523 | ((condition) \ | ||
524 | ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) | ||
525 | |||
526 | |||
527 | |||
379 | #define __wait_event_killable(wq, condition, ret) \ | 528 | #define __wait_event_killable(wq, condition, ret) \ |
380 | do { \ | 529 | do { \ |
381 | DEFINE_WAIT(__wait); \ | 530 | DEFINE_WAIT(__wait); \ |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index 5b4c6c772a9b..e6827eedf18b 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
@@ -346,6 +346,8 @@ | |||
346 | #define SIOCIWFIRST 0x8B00 | 346 | #define SIOCIWFIRST 0x8B00 |
347 | #define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ | 347 | #define SIOCIWLAST SIOCIWLASTPRIV /* 0x8BFF */ |
348 | #define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST) | 348 | #define IW_IOCTL_IDX(cmd) ((cmd) - SIOCIWFIRST) |
349 | #define IW_HANDLER(id, func) \ | ||
350 | [IW_IOCTL_IDX(id)] = func | ||
349 | 351 | ||
350 | /* Odd : get (world access), even : set (root access) */ | 352 | /* Odd : get (world access), even : set (root access) */ |
351 | #define IW_IS_SET(cmd) (!((cmd) & 0x1)) | 353 | #define IW_IS_SET(cmd) (!((cmd) & 0x1)) |
@@ -648,7 +650,7 @@ | |||
648 | * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ | 650 | * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ |
649 | #define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \ | 651 | #define IW_EVENT_CAPA_BASE(cmd) ((cmd >= SIOCIWFIRSTPRIV) ? \ |
650 | (cmd - SIOCIWFIRSTPRIV + 0x60) : \ | 652 | (cmd - SIOCIWFIRSTPRIV + 0x60) : \ |
651 | (cmd - SIOCSIWCOMMIT)) | 653 | (cmd - SIOCIWFIRST)) |
652 | #define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5) | 654 | #define IW_EVENT_CAPA_INDEX(cmd) (IW_EVENT_CAPA_BASE(cmd) >> 5) |
653 | #define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) | 655 | #define IW_EVENT_CAPA_MASK(cmd) (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) |
654 | /* Event capability constants - event autogenerated by the kernel | 656 | /* Event capability constants - event autogenerated by the kernel |