diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-alpha/barrier.h | 2 | ||||
-rw-r--r-- | include/asm-alpha/pgtable.h | 21 | ||||
-rw-r--r-- | include/asm-frv/system.h | 2 | ||||
-rw-r--r-- | include/linux/netdevice.h | 35 | ||||
-rw-r--r-- | include/linux/usb/association.h | 150 | ||||
-rw-r--r-- | include/net/irda/discovery.h | 3 | ||||
-rw-r--r-- | include/net/syncppp.h | 2 |
7 files changed, 198 insertions, 17 deletions
diff --git a/include/asm-alpha/barrier.h b/include/asm-alpha/barrier.h index 384dc08d6f53..ac78eba909bc 100644 --- a/include/asm-alpha/barrier.h +++ b/include/asm-alpha/barrier.h | |||
@@ -24,7 +24,7 @@ __asm__ __volatile__("mb": : :"memory") | |||
24 | #define smp_mb() barrier() | 24 | #define smp_mb() barrier() |
25 | #define smp_rmb() barrier() | 25 | #define smp_rmb() barrier() |
26 | #define smp_wmb() barrier() | 26 | #define smp_wmb() barrier() |
27 | #define smp_read_barrier_depends() barrier() | 27 | #define smp_read_barrier_depends() do { } while (0) |
28 | #endif | 28 | #endif |
29 | 29 | ||
30 | #define set_mb(var, value) \ | 30 | #define set_mb(var, value) \ |
diff --git a/include/asm-alpha/pgtable.h b/include/asm-alpha/pgtable.h index 05ce5fba43e3..3f0c59f6d8aa 100644 --- a/include/asm-alpha/pgtable.h +++ b/include/asm-alpha/pgtable.h | |||
@@ -287,17 +287,34 @@ extern inline pte_t pte_mkspecial(pte_t pte) { return pte; } | |||
287 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) | 287 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) |
288 | #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) | 288 | #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) |
289 | 289 | ||
290 | /* | ||
291 | * The smp_read_barrier_depends() in the following functions are required to | ||
292 | * order the load of *dir (the pointer in the top level page table) with any | ||
293 | * subsequent load of the returned pmd_t *ret (ret is data dependent on *dir). | ||
294 | * | ||
295 | * If this ordering is not enforced, the CPU might load an older value of | ||
296 | * *ret, which may be uninitialized data. See mm/memory.c:__pte_alloc for | ||
297 | * more details. | ||
298 | * | ||
299 | * Note that we never change the mm->pgd pointer after the task is running, so | ||
300 | * pgd_offset does not require such a barrier. | ||
301 | */ | ||
302 | |||
290 | /* Find an entry in the second-level page table.. */ | 303 | /* Find an entry in the second-level page table.. */ |
291 | extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) | 304 | extern inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) |
292 | { | 305 | { |
293 | return (pmd_t *) pgd_page_vaddr(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1)); | 306 | pmd_t *ret = (pmd_t *) pgd_page_vaddr(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PAGE - 1)); |
307 | smp_read_barrier_depends(); /* see above */ | ||
308 | return ret; | ||
294 | } | 309 | } |
295 | 310 | ||
296 | /* Find an entry in the third-level page table.. */ | 311 | /* Find an entry in the third-level page table.. */ |
297 | extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address) | 312 | extern inline pte_t * pte_offset_kernel(pmd_t * dir, unsigned long address) |
298 | { | 313 | { |
299 | return (pte_t *) pmd_page_vaddr(*dir) | 314 | pte_t *ret = (pte_t *) pmd_page_vaddr(*dir) |
300 | + ((address >> PAGE_SHIFT) & (PTRS_PER_PAGE - 1)); | 315 | + ((address >> PAGE_SHIFT) & (PTRS_PER_PAGE - 1)); |
316 | smp_read_barrier_depends(); /* see above */ | ||
317 | return ret; | ||
301 | } | 318 | } |
302 | 319 | ||
303 | #define pte_offset_map(dir,addr) pte_offset_kernel((dir),(addr)) | 320 | #define pte_offset_map(dir,addr) pte_offset_kernel((dir),(addr)) |
diff --git a/include/asm-frv/system.h b/include/asm-frv/system.h index cb307f8a6b48..d3a12a9079f7 100644 --- a/include/asm-frv/system.h +++ b/include/asm-frv/system.h | |||
@@ -179,7 +179,7 @@ do { \ | |||
179 | #define mb() asm volatile ("membar" : : :"memory") | 179 | #define mb() asm volatile ("membar" : : :"memory") |
180 | #define rmb() asm volatile ("membar" : : :"memory") | 180 | #define rmb() asm volatile ("membar" : : :"memory") |
181 | #define wmb() asm volatile ("membar" : : :"memory") | 181 | #define wmb() asm volatile ("membar" : : :"memory") |
182 | #define read_barrier_depends() barrier() | 182 | #define read_barrier_depends() do { } while (0) |
183 | 183 | ||
184 | #ifdef CONFIG_SMP | 184 | #ifdef CONFIG_SMP |
185 | #define smp_mb() mb() | 185 | #define smp_mb() mb() |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 7c1d4466583b..b11e6e19e96c 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -93,14 +93,16 @@ struct wireless_dev; | |||
93 | * used. | 93 | * used. |
94 | */ | 94 | */ |
95 | 95 | ||
96 | #if !defined(CONFIG_AX25) && !defined(CONFIG_AX25_MODULE) && !defined(CONFIG_TR) | 96 | #if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) |
97 | #define LL_MAX_HEADER 32 | 97 | # if defined(CONFIG_MAC80211_MESH) |
98 | # define LL_MAX_HEADER 128 | ||
99 | # else | ||
100 | # define LL_MAX_HEADER 96 | ||
101 | # endif | ||
102 | #elif defined(CONFIG_TR) | ||
103 | # define LL_MAX_HEADER 48 | ||
98 | #else | 104 | #else |
99 | #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) | 105 | # define LL_MAX_HEADER 32 |
100 | #define LL_MAX_HEADER 96 | ||
101 | #else | ||
102 | #define LL_MAX_HEADER 48 | ||
103 | #endif | ||
104 | #endif | 106 | #endif |
105 | 107 | ||
106 | #if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \ | 108 | #if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \ |
@@ -244,11 +246,16 @@ struct hh_cache | |||
244 | * | 246 | * |
245 | * We could use other alignment values, but we must maintain the | 247 | * We could use other alignment values, but we must maintain the |
246 | * relationship HH alignment <= LL alignment. | 248 | * relationship HH alignment <= LL alignment. |
249 | * | ||
250 | * LL_ALLOCATED_SPACE also takes into account the tailroom the device | ||
251 | * may need. | ||
247 | */ | 252 | */ |
248 | #define LL_RESERVED_SPACE(dev) \ | 253 | #define LL_RESERVED_SPACE(dev) \ |
249 | (((dev)->hard_header_len&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) | 254 | ((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) |
250 | #define LL_RESERVED_SPACE_EXTRA(dev,extra) \ | 255 | #define LL_RESERVED_SPACE_EXTRA(dev,extra) \ |
251 | ((((dev)->hard_header_len+extra)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) | 256 | ((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) |
257 | #define LL_ALLOCATED_SPACE(dev) \ | ||
258 | ((((dev)->hard_header_len+(dev)->needed_headroom+(dev)->needed_tailroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD) | ||
252 | 259 | ||
253 | struct header_ops { | 260 | struct header_ops { |
254 | int (*create) (struct sk_buff *skb, struct net_device *dev, | 261 | int (*create) (struct sk_buff *skb, struct net_device *dev, |
@@ -567,6 +574,13 @@ struct net_device | |||
567 | unsigned short type; /* interface hardware type */ | 574 | unsigned short type; /* interface hardware type */ |
568 | unsigned short hard_header_len; /* hardware hdr length */ | 575 | unsigned short hard_header_len; /* hardware hdr length */ |
569 | 576 | ||
577 | /* extra head- and tailroom the hardware may need, but not in all cases | ||
578 | * can this be guaranteed, especially tailroom. Some cases also use | ||
579 | * LL_MAX_HEADER instead to allocate the skb. | ||
580 | */ | ||
581 | unsigned short needed_headroom; | ||
582 | unsigned short needed_tailroom; | ||
583 | |||
570 | struct net_device *master; /* Pointer to master device of a group, | 584 | struct net_device *master; /* Pointer to master device of a group, |
571 | * which this device is member of. | 585 | * which this device is member of. |
572 | */ | 586 | */ |
@@ -715,6 +729,9 @@ struct net_device | |||
715 | struct net *nd_net; | 729 | struct net *nd_net; |
716 | #endif | 730 | #endif |
717 | 731 | ||
732 | /* mid-layer private */ | ||
733 | void *ml_priv; | ||
734 | |||
718 | /* bridge stuff */ | 735 | /* bridge stuff */ |
719 | struct net_bridge_port *br_port; | 736 | struct net_bridge_port *br_port; |
720 | /* macvlan */ | 737 | /* macvlan */ |
diff --git a/include/linux/usb/association.h b/include/linux/usb/association.h new file mode 100644 index 000000000000..07c5e3cf5898 --- /dev/null +++ b/include/linux/usb/association.h | |||
@@ -0,0 +1,150 @@ | |||
1 | /* | ||
2 | * Wireless USB - Cable Based Association | ||
3 | * | ||
4 | * Copyright (C) 2006 Intel Corporation | ||
5 | * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License version | ||
9 | * 2 as published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | #ifndef __LINUX_USB_ASSOCIATION_H | ||
13 | #define __LINUX_USB_ASSOCIATION_H | ||
14 | |||
15 | |||
16 | /* | ||
17 | * Association attributes | ||
18 | * | ||
19 | * Association Models Supplement to WUSB 1.0 T[3-1] | ||
20 | * | ||
21 | * Each field in the structures has it's ID, it's length and then the | ||
22 | * value. This is the actual definition of the field's ID and its | ||
23 | * length. | ||
24 | */ | ||
25 | struct wusb_am_attr { | ||
26 | __u8 id; | ||
27 | __u8 len; | ||
28 | }; | ||
29 | |||
30 | /* Different fields defined by the spec */ | ||
31 | #define WUSB_AR_AssociationTypeId { .id = 0x0000, .len = 2 } | ||
32 | #define WUSB_AR_AssociationSubTypeId { .id = 0x0001, .len = 2 } | ||
33 | #define WUSB_AR_Length { .id = 0x0002, .len = 4 } | ||
34 | #define WUSB_AR_AssociationStatus { .id = 0x0004, .len = 4 } | ||
35 | #define WUSB_AR_LangID { .id = 0x0008, .len = 2 } | ||
36 | #define WUSB_AR_DeviceFriendlyName { .id = 0x000b, .len = 64 } /* max */ | ||
37 | #define WUSB_AR_HostFriendlyName { .id = 0x000c, .len = 64 } /* max */ | ||
38 | #define WUSB_AR_CHID { .id = 0x1000, .len = 16 } | ||
39 | #define WUSB_AR_CDID { .id = 0x1001, .len = 16 } | ||
40 | #define WUSB_AR_ConnectionContext { .id = 0x1002, .len = 48 } | ||
41 | #define WUSB_AR_BandGroups { .id = 0x1004, .len = 2 } | ||
42 | |||
43 | /* CBAF Control Requests (AMS1.0[T4-1] */ | ||
44 | enum { | ||
45 | CBAF_REQ_GET_ASSOCIATION_INFORMATION = 0x01, | ||
46 | CBAF_REQ_GET_ASSOCIATION_REQUEST, | ||
47 | CBAF_REQ_SET_ASSOCIATION_RESPONSE | ||
48 | }; | ||
49 | |||
50 | /* | ||
51 | * CBAF USB-interface defitions | ||
52 | * | ||
53 | * No altsettings, one optional interrupt endpoint. | ||
54 | */ | ||
55 | enum { | ||
56 | CBAF_IFACECLASS = 0xef, | ||
57 | CBAF_IFACESUBCLASS = 0x03, | ||
58 | CBAF_IFACEPROTOCOL = 0x01, | ||
59 | }; | ||
60 | |||
61 | /* Association Information (AMS1.0[T4-3]) */ | ||
62 | struct wusb_cbaf_assoc_info { | ||
63 | __le16 Length; | ||
64 | __u8 NumAssociationRequests; | ||
65 | __le16 Flags; | ||
66 | __u8 AssociationRequestsArray[]; | ||
67 | } __attribute__((packed)); | ||
68 | |||
69 | /* Association Request (AMS1.0[T4-4]) */ | ||
70 | struct wusb_cbaf_assoc_request { | ||
71 | __u8 AssociationDataIndex; | ||
72 | __u8 Reserved; | ||
73 | __le16 AssociationTypeId; | ||
74 | __le16 AssociationSubTypeId; | ||
75 | __le32 AssociationTypeInfoSize; | ||
76 | } __attribute__((packed)); | ||
77 | |||
78 | enum { | ||
79 | AR_TYPE_WUSB = 0x0001, | ||
80 | AR_TYPE_WUSB_RETRIEVE_HOST_INFO = 0x0000, | ||
81 | AR_TYPE_WUSB_ASSOCIATE = 0x0001, | ||
82 | }; | ||
83 | |||
84 | /* Association Attribute header (AMS1.0[3.8]) */ | ||
85 | struct wusb_cbaf_attr_hdr { | ||
86 | __le16 id; | ||
87 | __le16 len; | ||
88 | } __attribute__((packed)); | ||
89 | |||
90 | /* Host Info (AMS1.0[T4-7]) (yeah, more headers and fields...) */ | ||
91 | struct wusb_cbaf_host_info { | ||
92 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
93 | __le16 AssociationTypeId; | ||
94 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
95 | __le16 AssociationSubTypeId; | ||
96 | struct wusb_cbaf_attr_hdr CHID_hdr; | ||
97 | struct wusb_ckhdid CHID; | ||
98 | struct wusb_cbaf_attr_hdr LangID_hdr; | ||
99 | __le16 LangID; | ||
100 | struct wusb_cbaf_attr_hdr HostFriendlyName_hdr; | ||
101 | __u8 HostFriendlyName[]; | ||
102 | } __attribute__((packed)); | ||
103 | |||
104 | /* Device Info (AMS1.0[T4-8]) | ||
105 | * | ||
106 | * I still don't get this tag'n'header stuff for each goddamn | ||
107 | * field... | ||
108 | */ | ||
109 | struct wusb_cbaf_device_info { | ||
110 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
111 | __le32 Length; | ||
112 | struct wusb_cbaf_attr_hdr CDID_hdr; | ||
113 | struct wusb_ckhdid CDID; | ||
114 | struct wusb_cbaf_attr_hdr BandGroups_hdr; | ||
115 | __le16 BandGroups; | ||
116 | struct wusb_cbaf_attr_hdr LangID_hdr; | ||
117 | __le16 LangID; | ||
118 | struct wusb_cbaf_attr_hdr DeviceFriendlyName_hdr; | ||
119 | __u8 DeviceFriendlyName[]; | ||
120 | } __attribute__((packed)); | ||
121 | |||
122 | /* Connection Context; CC_DATA - Success case (AMS1.0[T4-9]) */ | ||
123 | struct wusb_cbaf_cc_data { | ||
124 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
125 | __le16 AssociationTypeId; | ||
126 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
127 | __le16 AssociationSubTypeId; | ||
128 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
129 | __le32 Length; | ||
130 | struct wusb_cbaf_attr_hdr ConnectionContext_hdr; | ||
131 | struct wusb_ckhdid CHID; | ||
132 | struct wusb_ckhdid CDID; | ||
133 | struct wusb_ckhdid CK; | ||
134 | struct wusb_cbaf_attr_hdr BandGroups_hdr; | ||
135 | __le16 BandGroups; | ||
136 | } __attribute__((packed)); | ||
137 | |||
138 | /* CC_DATA - Failure case (AMS1.0[T4-10]) */ | ||
139 | struct wusb_cbaf_cc_data_fail { | ||
140 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
141 | __le16 AssociationTypeId; | ||
142 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
143 | __le16 AssociationSubTypeId; | ||
144 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
145 | __le16 Length; | ||
146 | struct wusb_cbaf_attr_hdr AssociationStatus_hdr; | ||
147 | __u32 AssociationStatus; | ||
148 | } __attribute__((packed)); | ||
149 | |||
150 | #endif /* __LINUX_USB_ASSOCIATION_H */ | ||
diff --git a/include/net/irda/discovery.h b/include/net/irda/discovery.h index e4efad1f9eff..0ce93398720d 100644 --- a/include/net/irda/discovery.h +++ b/include/net/irda/discovery.h | |||
@@ -57,9 +57,6 @@ typedef union { | |||
57 | __u8 byte[2]; | 57 | __u8 byte[2]; |
58 | } __u16_host_order; | 58 | } __u16_host_order; |
59 | 59 | ||
60 | /* Same purpose, different application */ | ||
61 | #define u16ho(array) (* ((__u16 *) array)) | ||
62 | |||
63 | /* Types of discovery */ | 60 | /* Types of discovery */ |
64 | typedef enum { | 61 | typedef enum { |
65 | DISCOVERY_LOG, /* What's in our discovery log */ | 62 | DISCOVERY_LOG, /* What's in our discovery log */ |
diff --git a/include/net/syncppp.h b/include/net/syncppp.h index 877efa434700..e43f4070d892 100644 --- a/include/net/syncppp.h +++ b/include/net/syncppp.h | |||
@@ -59,7 +59,7 @@ struct ppp_device | |||
59 | 59 | ||
60 | static inline struct sppp *sppp_of(struct net_device *dev) | 60 | static inline struct sppp *sppp_of(struct net_device *dev) |
61 | { | 61 | { |
62 | struct ppp_device **ppp = dev->priv; | 62 | struct ppp_device **ppp = dev->ml_priv; |
63 | BUG_ON((*ppp)->dev != dev); | 63 | BUG_ON((*ppp)->dev != dev); |
64 | return &(*ppp)->sppp; | 64 | return &(*ppp)->sppp; |
65 | } | 65 | } |