Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.23-r1/0104-2.6.23.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 658 - (show annotations) (download)
Mon Jun 23 21:39:39 2008 UTC (15 years, 10 months ago) by niro
File size: 32519 byte(s)
2.6.23-alx-r1: new default as we fix the via epia clocksource=tsc quircks
-linux-2.6.23.17
-fbcondecor-0.9.4
-squashfs-3.3
-unionfs-2.3.3
-ipw3945-1.2.2
-mptbase-vmware fix

1 diff --git a/drivers/net/ehea/ehea_qmr.c b/drivers/net/ehea/ehea_qmr.c
2 index c82e245..329a252 100644
3 --- a/drivers/net/ehea/ehea_qmr.c
4 +++ b/drivers/net/ehea/ehea_qmr.c
5 @@ -563,8 +563,7 @@ int ehea_destroy_qp(struct ehea_qp *qp)
6 int ehea_create_busmap( void )
7 {
8 u64 vaddr = EHEA_BUSMAP_START;
9 - unsigned long abs_max_pfn = 0;
10 - unsigned long sec_max_pfn;
11 + unsigned long high_section_index = 0;
12 int i;
13
14 /*
15 @@ -574,14 +573,10 @@ int ehea_create_busmap( void )
16 ehea_bmap.valid_sections = 0;
17
18 for (i = 0; i < NR_MEM_SECTIONS; i++)
19 - if (valid_section_nr(i)) {
20 - sec_max_pfn = section_nr_to_pfn(i);
21 - if (sec_max_pfn > abs_max_pfn)
22 - abs_max_pfn = sec_max_pfn;
23 - ehea_bmap.valid_sections++;
24 - }
25 + if (valid_section_nr(i))
26 + high_section_index = i;
27
28 - ehea_bmap.entries = abs_max_pfn / EHEA_PAGES_PER_SECTION + 1;
29 + ehea_bmap.entries = high_section_index + 1;
30 ehea_bmap.vaddr = vmalloc(ehea_bmap.entries * sizeof(*ehea_bmap.vaddr));
31
32 if (!ehea_bmap.vaddr)
33 @@ -593,6 +588,7 @@ int ehea_create_busmap( void )
34 if (pfn_valid(pfn)) {
35 ehea_bmap.vaddr[i] = vaddr;
36 vaddr += EHEA_SECTSIZE;
37 + ehea_bmap.valid_sections++;
38 } else
39 ehea_bmap.vaddr[i] = 0;
40 }
41 @@ -637,7 +633,7 @@ int ehea_reg_kernel_mr(struct ehea_adapter *adapter, struct ehea_mr *mr)
42
43 mr_len = ehea_bmap.valid_sections * EHEA_SECTSIZE;
44
45 - pt = kzalloc(EHEA_MAX_RPAGE * sizeof(u64), GFP_KERNEL);
46 + pt = kzalloc(PAGE_SIZE, GFP_KERNEL);
47 if (!pt) {
48 ehea_error("no mem");
49 ret = -ENOMEM;
50 @@ -660,8 +656,8 @@ int ehea_reg_kernel_mr(struct ehea_adapter *adapter, struct ehea_mr *mr)
51 void *sectbase = __va(i << SECTION_SIZE_BITS);
52 unsigned long k = 0;
53
54 - for (j = 0; j < (PAGES_PER_SECTION / EHEA_MAX_RPAGE);
55 - j++) {
56 + for (j = 0; j < (EHEA_PAGES_PER_SECTION /
57 + EHEA_MAX_RPAGE); j++) {
58
59 for (m = 0; m < EHEA_MAX_RPAGE; m++) {
60 pg = sectbase + ((k++) * EHEA_PAGESIZE);
61 diff --git a/drivers/net/ehea/ehea_qmr.h b/drivers/net/ehea/ehea_qmr.h
62 index b71f845..352cb38 100644
63 --- a/drivers/net/ehea/ehea_qmr.h
64 +++ b/drivers/net/ehea/ehea_qmr.h
65 @@ -39,7 +39,7 @@
66 #define EHEA_PAGESHIFT 12
67 #define EHEA_PAGESIZE (1UL << EHEA_PAGESHIFT)
68 #define EHEA_SECTSIZE (1UL << 24)
69 -#define EHEA_PAGES_PER_SECTION (EHEA_SECTSIZE >> PAGE_SHIFT)
70 +#define EHEA_PAGES_PER_SECTION (EHEA_SECTSIZE >> EHEA_PAGESHIFT)
71
72 #if (1UL << SECTION_SIZE_BITS) < EHEA_SECTSIZE
73 #error eHEA module can't work if kernel sectionsize < ehea sectionsize
74 diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
75 index 1938d6d..d68796e 100644
76 --- a/drivers/net/forcedeth.c
77 +++ b/drivers/net/forcedeth.c
78 @@ -988,7 +988,7 @@ static void nv_enable_irq(struct net_device *dev)
79 if (np->msi_flags & NV_MSI_X_ENABLED)
80 enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
81 else
82 - enable_irq(dev->irq);
83 + enable_irq(np->pci_dev->irq);
84 } else {
85 enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);
86 enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector);
87 @@ -1004,7 +1004,7 @@ static void nv_disable_irq(struct net_device *dev)
88 if (np->msi_flags & NV_MSI_X_ENABLED)
89 disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
90 else
91 - disable_irq(dev->irq);
92 + disable_irq(np->pci_dev->irq);
93 } else {
94 disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);
95 disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector);
96 @@ -1601,7 +1601,7 @@ static void nv_do_rx_refill(unsigned long data)
97 if (np->msi_flags & NV_MSI_X_ENABLED)
98 disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
99 else
100 - disable_irq(dev->irq);
101 + disable_irq(np->pci_dev->irq);
102 } else {
103 disable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);
104 }
105 @@ -1619,7 +1619,7 @@ static void nv_do_rx_refill(unsigned long data)
106 if (np->msi_flags & NV_MSI_X_ENABLED)
107 enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
108 else
109 - enable_irq(dev->irq);
110 + enable_irq(np->pci_dev->irq);
111 } else {
112 enable_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector);
113 }
114 @@ -3557,10 +3557,12 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
115 if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) {
116 if ((ret = pci_enable_msi(np->pci_dev)) == 0) {
117 np->msi_flags |= NV_MSI_ENABLED;
118 + dev->irq = np->pci_dev->irq;
119 if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) {
120 printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret);
121 pci_disable_msi(np->pci_dev);
122 np->msi_flags &= ~NV_MSI_ENABLED;
123 + dev->irq = np->pci_dev->irq;
124 goto out_err;
125 }
126
127 @@ -3623,7 +3625,7 @@ static void nv_do_nic_poll(unsigned long data)
128 if (np->msi_flags & NV_MSI_X_ENABLED)
129 disable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
130 else
131 - disable_irq_lockdep(dev->irq);
132 + disable_irq_lockdep(np->pci_dev->irq);
133 mask = np->irqmask;
134 } else {
135 if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) {
136 @@ -3641,6 +3643,8 @@ static void nv_do_nic_poll(unsigned long data)
137 }
138 np->nic_poll_irq = 0;
139
140 + /* disable_irq() contains synchronize_irq, thus no irq handler can run now */
141 +
142 if (np->recover_error) {
143 np->recover_error = 0;
144 printk(KERN_INFO "forcedeth: MAC in recoverable error state\n");
145 @@ -3677,7 +3681,6 @@ static void nv_do_nic_poll(unsigned long data)
146 }
147 }
148
149 - /* FIXME: Do we need synchronize_irq(dev->irq) here? */
150
151 writel(mask, base + NvRegIrqMask);
152 pci_push(base);
153 @@ -3690,7 +3693,7 @@ static void nv_do_nic_poll(unsigned long data)
154 if (np->msi_flags & NV_MSI_X_ENABLED)
155 enable_irq_lockdep(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector);
156 else
157 - enable_irq_lockdep(dev->irq);
158 + enable_irq_lockdep(np->pci_dev->irq);
159 } else {
160 if (np->nic_poll_irq & NVREG_IRQ_RX_ALL) {
161 nv_nic_irq_rx(0, dev);
162 @@ -4943,7 +4946,7 @@ static int nv_close(struct net_device *dev)
163 np->in_shutdown = 1;
164 spin_unlock_irq(&np->lock);
165 netif_poll_disable(dev);
166 - synchronize_irq(dev->irq);
167 + synchronize_irq(np->pci_dev->irq);
168
169 del_timer_sync(&np->oom_kick);
170 del_timer_sync(&np->nic_poll);
171 @@ -5563,6 +5566,22 @@ static struct pci_device_id pci_tbl[] = {
172 PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_31),
173 .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_MSI|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR,
174 },
175 + { /* MCP77 Ethernet Controller */
176 + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_32),
177 + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
178 + },
179 + { /* MCP77 Ethernet Controller */
180 + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_33),
181 + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
182 + },
183 + { /* MCP77 Ethernet Controller */
184 + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_34),
185 + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
186 + },
187 + { /* MCP77 Ethernet Controller */
188 + PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_35),
189 + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
190 + },
191 {0,},
192 };
193
194 diff --git a/drivers/net/pppol2tp.c b/drivers/net/pppol2tp.c
195 index abe91cb..7da0d07 100644
196 --- a/drivers/net/pppol2tp.c
197 +++ b/drivers/net/pppol2tp.c
198 @@ -487,7 +487,7 @@ static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
199 {
200 struct pppol2tp_session *session = NULL;
201 struct pppol2tp_tunnel *tunnel;
202 - unsigned char *ptr;
203 + unsigned char *ptr, *optr;
204 u16 hdrflags;
205 u16 tunnel_id, session_id;
206 int length;
207 @@ -495,7 +495,7 @@ static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
208
209 tunnel = pppol2tp_sock_to_tunnel(sock);
210 if (tunnel == NULL)
211 - goto error;
212 + goto no_tunnel;
213
214 /* UDP always verifies the packet length. */
215 __skb_pull(skb, sizeof(struct udphdr));
216 @@ -508,7 +508,7 @@ static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
217 }
218
219 /* Point to L2TP header */
220 - ptr = skb->data;
221 + optr = ptr = skb->data;
222
223 /* Get L2TP header flags */
224 hdrflags = ntohs(*(__be16*)ptr);
225 @@ -636,12 +636,14 @@ static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
226 /* If offset bit set, skip it. */
227 if (hdrflags & L2TP_HDRFLAG_O) {
228 offset = ntohs(*(__be16 *)ptr);
229 - skb->transport_header += 2 + offset;
230 - if (!pskb_may_pull(skb, skb_transport_offset(skb) + 2))
231 - goto discard;
232 + ptr += 2 + offset;
233 }
234
235 - __skb_pull(skb, skb_transport_offset(skb));
236 + offset = ptr - optr;
237 + if (!pskb_may_pull(skb, offset))
238 + goto discard;
239 +
240 + __skb_pull(skb, offset);
241
242 /* Skip PPP header, if present. In testing, Microsoft L2TP clients
243 * don't send the PPP header (PPP header compression enabled), but
244 @@ -651,6 +653,9 @@ static int pppol2tp_recv_core(struct sock *sock, struct sk_buff *skb)
245 * Note that skb->data[] isn't dereferenced from a u16 ptr here since
246 * the field may be unaligned.
247 */
248 + if (!pskb_may_pull(skb, 2))
249 + goto discard;
250 +
251 if ((skb->data[0] == 0xff) && (skb->data[1] == 0x03))
252 skb_pull(skb, 2);
253
254 @@ -708,6 +713,10 @@ discard:
255 return 0;
256
257 error:
258 + /* Put UDP header back */
259 + __skb_push(skb, sizeof(struct udphdr));
260 +
261 +no_tunnel:
262 return 1;
263 }
264
265 @@ -1049,6 +1058,8 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
266 /* Get routing info from the tunnel socket */
267 dst_release(skb->dst);
268 skb->dst = sk_dst_get(sk_tun);
269 + skb_orphan(skb);
270 + skb->sk = sk_tun;
271
272 /* Queue the packet to IP for output */
273 len = skb->len;
274 diff --git a/drivers/net/skge.c b/drivers/net/skge.c
275 index e3d8520..b3d4728 100644
276 --- a/drivers/net/skge.c
277 +++ b/drivers/net/skge.c
278 @@ -57,7 +57,7 @@
279 #define TX_WATCHDOG (5 * HZ)
280 #define NAPI_WEIGHT 64
281 #define BLINK_MS 250
282 -#define LINK_HZ (HZ/2)
283 +#define LINK_HZ HZ
284
285 MODULE_DESCRIPTION("SysKonnect Gigabit Ethernet driver");
286 MODULE_AUTHOR("Stephen Hemminger <shemminger@linux-foundation.org>");
287 @@ -992,19 +992,15 @@ static void xm_link_down(struct skge_hw *hw, int port)
288 {
289 struct net_device *dev = hw->dev[port];
290 struct skge_port *skge = netdev_priv(dev);
291 - u16 cmd, msk;
292 + u16 cmd = xm_read16(hw, port, XM_MMU_CMD);
293
294 - if (hw->phy_type == SK_PHY_XMAC) {
295 - msk = xm_read16(hw, port, XM_IMSK);
296 - msk |= XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE | XM_IS_AND;
297 - xm_write16(hw, port, XM_IMSK, msk);
298 - }
299 + xm_write16(hw, port, XM_IMSK, XM_IMSK_DISABLE);
300
301 - cmd = xm_read16(hw, port, XM_MMU_CMD);
302 cmd &= ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX);
303 xm_write16(hw, port, XM_MMU_CMD, cmd);
304 +
305 /* dummy read to ensure writing */
306 - (void) xm_read16(hw, port, XM_MMU_CMD);
307 + xm_read16(hw, port, XM_MMU_CMD);
308
309 if (netif_carrier_ok(dev))
310 skge_link_down(skge);
311 @@ -1100,7 +1096,7 @@ static void genesis_reset(struct skge_hw *hw, int port)
312
313 /* reset the statistics module */
314 xm_write32(hw, port, XM_GP_PORT, XM_GP_RES_STAT);
315 - xm_write16(hw, port, XM_IMSK, 0xffff); /* disable XMAC IRQs */
316 + xm_write16(hw, port, XM_IMSK, XM_IMSK_DISABLE);
317 xm_write32(hw, port, XM_MODE, 0); /* clear Mode Reg */
318 xm_write16(hw, port, XM_TX_CMD, 0); /* reset TX CMD Reg */
319 xm_write16(hw, port, XM_RX_CMD, 0); /* reset RX CMD Reg */
320 @@ -1138,7 +1134,7 @@ static void bcom_check_link(struct skge_hw *hw, int port)
321 u16 status;
322
323 /* read twice because of latch */
324 - (void) xm_phy_read(hw, port, PHY_BCOM_STAT);
325 + xm_phy_read(hw, port, PHY_BCOM_STAT);
326 status = xm_phy_read(hw, port, PHY_BCOM_STAT);
327
328 if ((status & PHY_ST_LSYNC) == 0) {
329 @@ -1339,7 +1335,7 @@ static void xm_phy_init(struct skge_port *skge)
330 mod_timer(&skge->link_timer, jiffies + LINK_HZ);
331 }
332
333 -static void xm_check_link(struct net_device *dev)
334 +static int xm_check_link(struct net_device *dev)
335 {
336 struct skge_port *skge = netdev_priv(dev);
337 struct skge_hw *hw = skge->hw;
338 @@ -1347,25 +1343,25 @@ static void xm_check_link(struct net_device *dev)
339 u16 status;
340
341 /* read twice because of latch */
342 - (void) xm_phy_read(hw, port, PHY_XMAC_STAT);
343 + xm_phy_read(hw, port, PHY_XMAC_STAT);
344 status = xm_phy_read(hw, port, PHY_XMAC_STAT);
345
346 if ((status & PHY_ST_LSYNC) == 0) {
347 xm_link_down(hw, port);
348 - return;
349 + return 0;
350 }
351
352 if (skge->autoneg == AUTONEG_ENABLE) {
353 u16 lpa, res;
354
355 if (!(status & PHY_ST_AN_OVER))
356 - return;
357 + return 0;
358
359 lpa = xm_phy_read(hw, port, PHY_XMAC_AUNE_LP);
360 if (lpa & PHY_B_AN_RF) {
361 printk(KERN_NOTICE PFX "%s: remote fault\n",
362 dev->name);
363 - return;
364 + return 0;
365 }
366
367 res = xm_phy_read(hw, port, PHY_XMAC_RES_ABI);
368 @@ -1381,7 +1377,7 @@ static void xm_check_link(struct net_device *dev)
369 default:
370 printk(KERN_NOTICE PFX "%s: duplex mismatch\n",
371 dev->name);
372 - return;
373 + return 0;
374 }
375
376 /* We are using IEEE 802.3z/D5.0 Table 37-4 */
377 @@ -1405,11 +1401,14 @@ static void xm_check_link(struct net_device *dev)
378
379 if (!netif_carrier_ok(dev))
380 genesis_link_up(skge);
381 + return 1;
382 }
383
384 /* Poll to check for link coming up.
385 + *
386 * Since internal PHY is wired to a level triggered pin, can't
387 - * get an interrupt when carrier is detected.
388 + * get an interrupt when carrier is detected, need to poll for
389 + * link coming up.
390 */
391 static void xm_link_timer(unsigned long arg)
392 {
393 @@ -1417,29 +1416,35 @@ static void xm_link_timer(unsigned long arg)
394 struct net_device *dev = skge->netdev;
395 struct skge_hw *hw = skge->hw;
396 int port = skge->port;
397 + int i;
398 + unsigned long flags;
399
400 if (!netif_running(dev))
401 return;
402
403 - if (netif_carrier_ok(dev)) {
404 + spin_lock_irqsave(&hw->phy_lock, flags);
405 +
406 + /*
407 + * Verify that the link by checking GPIO register three times.
408 + * This pin has the signal from the link_sync pin connected to it.
409 + */
410 + for (i = 0; i < 3; i++) {
411 + if (xm_read16(hw, port, XM_GP_PORT) & XM_GP_INP_ASS)
412 + goto link_down;
413 + }
414 +
415 + /* Re-enable interrupt to detect link down */
416 + if (xm_check_link(dev)) {
417 + u16 msk = xm_read16(hw, port, XM_IMSK);
418 + msk &= ~XM_IS_INP_ASS;
419 + xm_write16(hw, port, XM_IMSK, msk);
420 xm_read16(hw, port, XM_ISRC);
421 - if (!(xm_read16(hw, port, XM_ISRC) & XM_IS_INP_ASS))
422 - goto nochange;
423 } else {
424 - if (xm_read32(hw, port, XM_GP_PORT) & XM_GP_INP_ASS)
425 - goto nochange;
426 - xm_read16(hw, port, XM_ISRC);
427 - if (xm_read16(hw, port, XM_ISRC) & XM_IS_INP_ASS)
428 - goto nochange;
429 +link_down:
430 + mod_timer(&skge->link_timer,
431 + round_jiffies(jiffies + LINK_HZ));
432 }
433 -
434 - spin_lock(&hw->phy_lock);
435 - xm_check_link(dev);
436 - spin_unlock(&hw->phy_lock);
437 -
438 -nochange:
439 - if (netif_running(dev))
440 - mod_timer(&skge->link_timer, jiffies + LINK_HZ);
441 + spin_unlock_irqrestore(&hw->phy_lock, flags);
442 }
443
444 static void genesis_mac_init(struct skge_hw *hw, int port)
445 @@ -1683,14 +1688,16 @@ static void genesis_mac_intr(struct skge_hw *hw, int port)
446 printk(KERN_DEBUG PFX "%s: mac interrupt status 0x%x\n",
447 skge->netdev->name, status);
448
449 - if (hw->phy_type == SK_PHY_XMAC &&
450 - (status & (XM_IS_INP_ASS | XM_IS_LIPA_RC)))
451 - xm_link_down(hw, port);
452 + if (hw->phy_type == SK_PHY_XMAC && (status & XM_IS_INP_ASS)) {
453 + xm_link_down(hw, port);
454 + mod_timer(&skge->link_timer, jiffies + 1);
455 + }
456
457 if (status & XM_IS_TXF_UR) {
458 xm_write32(hw, port, XM_MODE, XM_MD_FTF);
459 ++skge->net_stats.tx_fifo_errors;
460 }
461 +
462 if (status & XM_IS_RXF_OV) {
463 xm_write32(hw, port, XM_MODE, XM_MD_FRF);
464 ++skge->net_stats.rx_fifo_errors;
465 @@ -1750,11 +1757,12 @@ static void genesis_link_up(struct skge_port *skge)
466 }
467
468 xm_write32(hw, port, XM_MODE, mode);
469 - msk = XM_DEF_MSK;
470 - if (hw->phy_type != SK_PHY_XMAC)
471 - msk |= XM_IS_INP_ASS; /* disable GP0 interrupt bit */
472
473 + /* Turn on detection of Tx underrun, Rx overrun */
474 + msk = xm_read16(hw, port, XM_IMSK);
475 + msk &= ~(XM_IS_RXF_OV | XM_IS_TXF_UR);
476 xm_write16(hw, port, XM_IMSK, msk);
477 +
478 xm_read16(hw, port, XM_ISRC);
479
480 /* get MMU Command Reg. */
481 @@ -2185,7 +2193,7 @@ static void yukon_mac_intr(struct skge_hw *hw, int port)
482 u8 status = skge_read8(hw, SK_REG(port, GMAC_IRQ_SRC));
483
484 if (netif_msg_intr(skge))
485 - printk(KERN_DEBUG PFX "%s: mac interrupt status 0x%x\n",
486 + printk(KERN_DEBUG PFX "%s: yukon mac interrupt status 0x%x\n",
487 dev->name, status);
488
489 if (status & GM_IS_RX_FF_OR) {
490 diff --git a/drivers/net/skge.h b/drivers/net/skge.h
491 index edd7146..323d6c6 100644
492 --- a/drivers/net/skge.h
493 +++ b/drivers/net/skge.h
494 @@ -2193,11 +2193,9 @@ enum {
495 XM_IS_TXF_UR = 1<<2, /* Bit 2: Transmit FIFO Underrun */
496 XM_IS_TX_COMP = 1<<1, /* Bit 1: Frame Tx Complete */
497 XM_IS_RX_COMP = 1<<0, /* Bit 0: Frame Rx Complete */
498 -};
499 -
500 -#define XM_DEF_MSK (~(XM_IS_INP_ASS | XM_IS_LIPA_RC | \
501 - XM_IS_RXF_OV | XM_IS_TXF_UR))
502
503 + XM_IMSK_DISABLE = 0xffff,
504 +};
505
506 /* XM_HW_CFG 16 bit r/w Hardware Config Register */
507 enum {
508 diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
509 index ea117fc..2575077 100644
510 --- a/drivers/net/sky2.c
511 +++ b/drivers/net/sky2.c
512 @@ -603,21 +603,22 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
513 static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
514 {
515 u32 reg1;
516 - static const u32 phy_power[]
517 - = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
518 -
519 - /* looks like this XL is back asswards .. */
520 - if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
521 - onoff = !onoff;
522 + static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
523 + static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
524
525 sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
526 reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
527 +
528 if (onoff)
529 /* Turn off phy power saving */
530 reg1 &= ~phy_power[port];
531 else
532 reg1 |= phy_power[port];
533
534 + if (onoff && hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
535 + reg1 |= coma_mode[port];
536 +
537 +
538 sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
539 sky2_pci_read32(hw, PCI_DEV_REG1);
540 sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
541 @@ -2246,20 +2247,26 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do)
542 while (hw->st_idx != hwidx) {
543 struct sky2_port *sky2;
544 struct sky2_status_le *le = hw->st_le + hw->st_idx;
545 - unsigned port = le->css & CSS_LINK_BIT;
546 + unsigned port;
547 struct net_device *dev;
548 struct sk_buff *skb;
549 u32 status;
550 u16 length;
551 + u8 opcode = le->opcode;
552 +
553 + if (!(opcode & HW_OWNER))
554 + break;
555
556 hw->st_idx = RING_NEXT(hw->st_idx, STATUS_RING_SIZE);
557
558 + port = le->css & CSS_LINK_BIT;
559 dev = hw->dev[port];
560 sky2 = netdev_priv(dev);
561 length = le16_to_cpu(le->length);
562 status = le32_to_cpu(le->status);
563
564 - switch (le->opcode & ~HW_OWNER) {
565 + le->opcode = 0;
566 + switch (opcode & ~HW_OWNER) {
567 case OP_RXSTAT:
568 ++rx[port];
569 skb = sky2_receive(dev, length, status);
570 @@ -2352,7 +2359,7 @@ static int sky2_status_intr(struct sky2_hw *hw, int to_do)
571 default:
572 if (net_ratelimit())
573 printk(KERN_WARNING PFX
574 - "unknown status opcode 0x%x\n", le->opcode);
575 + "unknown status opcode 0x%x\n", opcode);
576 }
577 }
578
579 @@ -3564,20 +3571,64 @@ static void sky2_get_regs(struct net_device *dev, struct ethtool_regs *regs,
580 {
581 const struct sky2_port *sky2 = netdev_priv(dev);
582 const void __iomem *io = sky2->hw->regs;
583 + unsigned int b;
584
585 regs->version = 1;
586 - memset(p, 0, regs->len);
587
588 - memcpy_fromio(p, io, B3_RAM_ADDR);
589 -
590 - /* skip diagnostic ram region */
591 - memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1, 0x2000 - B3_RI_WTO_R1);
592 + for (b = 0; b < 128; b++) {
593 + /* This complicated switch statement is to make sure and
594 + * only access regions that are unreserved.
595 + * Some blocks are only valid on dual port cards.
596 + * and block 3 has some special diagnostic registers that
597 + * are poison.
598 + */
599 + switch (b) {
600 + case 3:
601 + /* skip diagnostic ram region */
602 + memcpy_fromio(p + 0x10, io + 0x10, 128 - 0x10);
603 + break;
604
605 - /* copy GMAC registers */
606 - memcpy_fromio(p + BASE_GMAC_1, io + BASE_GMAC_1, 0x1000);
607 - if (sky2->hw->ports > 1)
608 - memcpy_fromio(p + BASE_GMAC_2, io + BASE_GMAC_2, 0x1000);
609 + /* dual port cards only */
610 + case 5: /* Tx Arbiter 2 */
611 + case 9: /* RX2 */
612 + case 14 ... 15: /* TX2 */
613 + case 17: case 19: /* Ram Buffer 2 */
614 + case 22 ... 23: /* Tx Ram Buffer 2 */
615 + case 25: /* Rx MAC Fifo 1 */
616 + case 27: /* Tx MAC Fifo 2 */
617 + case 31: /* GPHY 2 */
618 + case 40 ... 47: /* Pattern Ram 2 */
619 + case 52: case 54: /* TCP Segmentation 2 */
620 + case 112 ... 116: /* GMAC 2 */
621 + if (sky2->hw->ports == 1)
622 + goto reserved;
623 + /* fall through */
624 + case 0: /* Control */
625 + case 2: /* Mac address */
626 + case 4: /* Tx Arbiter 1 */
627 + case 7: /* PCI express reg */
628 + case 8: /* RX1 */
629 + case 12 ... 13: /* TX1 */
630 + case 16: case 18:/* Rx Ram Buffer 1 */
631 + case 20 ... 21: /* Tx Ram Buffer 1 */
632 + case 24: /* Rx MAC Fifo 1 */
633 + case 26: /* Tx MAC Fifo 1 */
634 + case 28 ... 29: /* Descriptor and status unit */
635 + case 30: /* GPHY 1*/
636 + case 32 ... 39: /* Pattern Ram 1 */
637 + case 48: case 50: /* TCP Segmentation 1 */
638 + case 56 ... 60: /* PCI space */
639 + case 80 ... 84: /* GMAC 1 */
640 + memcpy_fromio(p, io, 128);
641 + break;
642 + default:
643 +reserved:
644 + memset(p, 0, 128);
645 + }
646
647 + p += 128;
648 + io += 128;
649 + }
650 }
651
652 /* In order to do Jumbo packets on these chips, need to turn off the
653 diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
654 index 9034a05..f80721e 100644
655 --- a/drivers/net/tg3.c
656 +++ b/drivers/net/tg3.c
657 @@ -64,8 +64,8 @@
658
659 #define DRV_MODULE_NAME "tg3"
660 #define PFX DRV_MODULE_NAME ": "
661 -#define DRV_MODULE_VERSION "3.81"
662 -#define DRV_MODULE_RELDATE "September 5, 2007"
663 +#define DRV_MODULE_VERSION "3.81.1"
664 +#define DRV_MODULE_RELDATE "October 18, 2007"
665
666 #define TG3_DEF_MAC_MODE 0
667 #define TG3_DEF_RX_MODE 0
668 @@ -4874,6 +4874,12 @@ static void tg3_restore_pci_state(struct tg3 *tp)
669
670 pci_write_config_dword(tp->pdev, TG3PCI_COMMAND, tp->pci_cmd);
671
672 + if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
673 + pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
674 + tp->pci_cacheline_sz);
675 + pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
676 + tp->pci_lat_timer);
677 + }
678 /* Make sure PCI-X relaxed ordering bit is clear. */
679 pci_read_config_dword(tp->pdev, TG3PCI_X_CAPS, &val);
680 val &= ~PCIX_CAPS_RELAXED_ORDERING;
681 diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
682 index 8990585..e690609 100644
683 --- a/drivers/net/wireless/ipw2100.c
684 +++ b/drivers/net/wireless/ipw2100.c
685 @@ -2102,12 +2102,46 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
686 queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
687 }
688
689 +static void send_scan_event(void *data)
690 +{
691 + struct ipw2100_priv *priv = data;
692 + union iwreq_data wrqu;
693 +
694 + wrqu.data.length = 0;
695 + wrqu.data.flags = 0;
696 + wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
697 +}
698 +
699 +static void ipw2100_scan_event_later(struct work_struct *work)
700 +{
701 + send_scan_event(container_of(work, struct ipw2100_priv,
702 + scan_event_later.work));
703 +}
704 +
705 +static void ipw2100_scan_event_now(struct work_struct *work)
706 +{
707 + send_scan_event(container_of(work, struct ipw2100_priv,
708 + scan_event_now));
709 +}
710 +
711 static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
712 {
713 IPW_DEBUG_SCAN("scan complete\n");
714 /* Age the scan results... */
715 priv->ieee->scans++;
716 priv->status &= ~STATUS_SCANNING;
717 +
718 + /* Only userspace-requested scan completion events go out immediately */
719 + if (!priv->user_requested_scan) {
720 + if (!delayed_work_pending(&priv->scan_event_later))
721 + queue_delayed_work(priv->workqueue,
722 + &priv->scan_event_later,
723 + round_jiffies(msecs_to_jiffies(4000)));
724 + } else {
725 + priv->user_requested_scan = 0;
726 + cancel_delayed_work(&priv->scan_event_later);
727 + queue_work(priv->workqueue, &priv->scan_event_now);
728 + }
729 }
730
731 #ifdef CONFIG_IPW2100_DEBUG
732 @@ -4376,6 +4410,7 @@ static void ipw2100_kill_workqueue(struct ipw2100_priv *priv)
733 cancel_delayed_work(&priv->wx_event_work);
734 cancel_delayed_work(&priv->hang_check);
735 cancel_delayed_work(&priv->rf_kill);
736 + cancel_delayed_work(&priv->scan_event_later);
737 destroy_workqueue(priv->workqueue);
738 priv->workqueue = NULL;
739 }
740 @@ -6118,6 +6153,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
741 INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
742 INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
743 INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
744 + INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
745 + INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
746
747 tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
748 ipw2100_irq_tasklet, (unsigned long)priv);
749 @@ -7427,6 +7464,8 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
750 }
751
752 IPW_DEBUG_WX("Initiating scan...\n");
753 +
754 + priv->user_requested_scan = 1;
755 if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
756 IPW_DEBUG_WX("Start scan failed.\n");
757
758 diff --git a/drivers/net/wireless/ipw2100.h b/drivers/net/wireless/ipw2100.h
759 index de7d384..1ee3348 100644
760 --- a/drivers/net/wireless/ipw2100.h
761 +++ b/drivers/net/wireless/ipw2100.h
762 @@ -588,6 +588,10 @@ struct ipw2100_priv {
763 struct delayed_work wx_event_work;
764 struct delayed_work hang_check;
765 struct delayed_work rf_kill;
766 + struct work_struct scan_event_now;
767 + struct delayed_work scan_event_later;
768 +
769 + int user_requested_scan;
770
771 u32 interrupts;
772 int tx_interrupts;
773 diff --git a/drivers/net/wireless/libertas/11d.c b/drivers/net/wireless/libertas/11d.c
774 index 4cf0ff7..0560270 100644
775 --- a/drivers/net/wireless/libertas/11d.c
776 +++ b/drivers/net/wireless/libertas/11d.c
777 @@ -562,7 +562,7 @@ int libertas_cmd_802_11d_domain_info(wlan_private * priv,
778 nr_subband * sizeof(struct ieeetypes_subbandset));
779
780 cmd->size = cpu_to_le16(sizeof(pdomaininfo->action) +
781 - domain->header.len +
782 + le16_to_cpu(domain->header.len) +
783 sizeof(struct mrvlietypesheader) +
784 S_DS_GEN);
785 } else {
786 diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
787 index 4a8f5dc..86fff8d 100644
788 --- a/drivers/net/wireless/libertas/cmd.c
789 +++ b/drivers/net/wireless/libertas/cmd.c
790 @@ -185,14 +185,12 @@ static int wlan_cmd_802_11_set_wep(wlan_private * priv,
791
792 switch (pkey->len) {
793 case KEY_LEN_WEP_40:
794 - wep->keytype[i] =
795 - cpu_to_le16(cmd_type_wep_40_bit);
796 + wep->keytype[i] = cmd_type_wep_40_bit;
797 memmove(&wep->keymaterial[i], pkey->key,
798 pkey->len);
799 break;
800 case KEY_LEN_WEP_104:
801 - wep->keytype[i] =
802 - cpu_to_le16(cmd_type_wep_104_bit);
803 + wep->keytype[i] = cmd_type_wep_104_bit;
804 memmove(&wep->keymaterial[i], pkey->key,
805 pkey->len);
806 break;
807 diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
808 index 2fcc3bf..873c405 100644
809 --- a/drivers/net/wireless/libertas/wext.c
810 +++ b/drivers/net/wireless/libertas/wext.c
811 @@ -973,7 +973,7 @@ static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
812 /* Quality by TX errors */
813 priv->wstats.discard.retries = priv->stats.tx_errors;
814
815 - tx_retries = le16_to_cpu(adapter->logmsg.retry);
816 + tx_retries = le32_to_cpu(adapter->logmsg.retry);
817
818 if (tx_retries > 75)
819 tx_qual = (90 - tx_retries) * POOR / 15;
820 @@ -989,10 +989,10 @@ static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
821 (PERFECT - VERY_GOOD) / 50 + VERY_GOOD;
822 quality = min(quality, tx_qual);
823
824 - priv->wstats.discard.code = le16_to_cpu(adapter->logmsg.wepundecryptable);
825 - priv->wstats.discard.fragment = le16_to_cpu(adapter->logmsg.rxfrag);
826 + priv->wstats.discard.code = le32_to_cpu(adapter->logmsg.wepundecryptable);
827 + priv->wstats.discard.fragment = le32_to_cpu(adapter->logmsg.rxfrag);
828 priv->wstats.discard.retries = tx_retries;
829 - priv->wstats.discard.misc = le16_to_cpu(adapter->logmsg.ackfailure);
830 + priv->wstats.discard.misc = le32_to_cpu(adapter->logmsg.ackfailure);
831
832 /* Calculate quality */
833 priv->wstats.qual.qual = max(quality, (u32)100);
834 diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c
835 index e61c6d5..66704b8 100644
836 --- a/drivers/net/wireless/rtl8187_dev.c
837 +++ b/drivers/net/wireless/rtl8187_dev.c
838 @@ -78,7 +78,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
839 struct rtl8187_tx_hdr *hdr;
840 struct rtl8187_tx_info *info;
841 struct urb *urb;
842 - u32 tmp;
843 + __le16 rts_dur = 0;
844 + u32 flags;
845
846 urb = usb_alloc_urb(0, GFP_ATOMIC);
847 if (!urb) {
848 @@ -86,24 +87,24 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb,
849 return 0;
850 }
851
852 - hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
853 - tmp = skb->len - sizeof(*hdr);
854 - tmp |= RTL8187_TX_FLAG_NO_ENCRYPT;
855 - tmp |= control->rts_cts_rate << 19;
856 - tmp |= control->tx_rate << 24;
857 - if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb))
858 - tmp |= RTL8187_TX_FLAG_MORE_FRAG;
859 + flags = skb->len;
860 + flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
861 + flags |= control->rts_cts_rate << 19;
862 + flags |= control->tx_rate << 24;
863 + if (ieee80211_get_morefrag((struct ieee80211_hdr *)skb->data))
864 + flags |= RTL8187_TX_FLAG_MORE_FRAG;
865 if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
866 - tmp |= RTL8187_TX_FLAG_RTS;
867 - hdr->rts_duration =
868 - ieee80211_rts_duration(dev, skb->len, control);
869 + flags |= RTL8187_TX_FLAG_RTS;
870 + rts_dur = ieee80211_rts_duration(dev, skb->len, control);
871 }
872 if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT)
873 - tmp |= RTL8187_TX_FLAG_CTS;
874 - hdr->flags = cpu_to_le32(tmp);
875 + flags |= RTL8187_TX_FLAG_CTS;
876 +
877 + hdr = (struct rtl8187_tx_hdr *)skb_push(skb, sizeof(*hdr));
878 + hdr->flags = cpu_to_le32(flags);
879 hdr->len = 0;
880 - tmp = control->retry_limit << 8;
881 - hdr->retry = cpu_to_le32(tmp);
882 + hdr->rts_duration = rts_dur;
883 + hdr->retry = cpu_to_le32(control->retry_limit << 8);
884
885 info = (struct rtl8187_tx_info *)skb->cb;
886 info->control = kmemdup(control, sizeof(*control), GFP_ATOMIC);
887 diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c
888 index 935b144..d5c0c66 100644
889 --- a/drivers/net/wireless/zd1201.c
890 +++ b/drivers/net/wireless/zd1201.c
891 @@ -327,8 +327,8 @@ static void zd1201_usbrx(struct urb *urb)
892 memcpy(skb_put(skb, 6), &data[datalen-8], 6);
893 memcpy(skb_put(skb, 2), &data[datalen-24], 2);
894 memcpy(skb_put(skb, len), data, len);
895 - skb->dev->last_rx = jiffies;
896 skb->protocol = eth_type_trans(skb, zd->dev);
897 + skb->dev->last_rx = jiffies;
898 zd->stats.rx_packets++;
899 zd->stats.rx_bytes += skb->len;
900 netif_rx(skb);
901 @@ -384,8 +384,8 @@ static void zd1201_usbrx(struct urb *urb)
902 memcpy(skb_put(skb, 2), &data[6], 2);
903 memcpy(skb_put(skb, len), data+8, len);
904 }
905 - skb->dev->last_rx = jiffies;
906 skb->protocol = eth_type_trans(skb, zd->dev);
907 + skb->dev->last_rx = jiffies;
908 zd->stats.rx_packets++;
909 zd->stats.rx_bytes += skb->len;
910 netif_rx(skb);
911 diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
912 index a9c339e..5326301 100644
913 --- a/drivers/net/wireless/zd1211rw/zd_usb.c
914 +++ b/drivers/net/wireless/zd1211rw/zd_usb.c
915 @@ -1041,14 +1041,17 @@ error:
916 static void disconnect(struct usb_interface *intf)
917 {
918 struct net_device *netdev = zd_intf_to_netdev(intf);
919 - struct zd_mac *mac = zd_netdev_mac(netdev);
920 - struct zd_usb *usb = &mac->chip.usb;
921 + struct zd_mac *mac;
922 + struct zd_usb *usb;
923
924 /* Either something really bad happened, or we're just dealing with
925 * a DEVICE_INSTALLER. */
926 if (netdev == NULL)
927 return;
928
929 + mac = zd_netdev_mac(netdev);
930 + usb = &mac->chip.usb;
931 +
932 dev_dbg_f(zd_usb_dev(usb), "\n");
933
934 zd_netdev_disconnect(netdev);
935 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
936 index 55f307f..85d434b 100644
937 --- a/include/linux/pci_ids.h
938 +++ b/include/linux/pci_ids.h
939 @@ -1233,6 +1233,10 @@
940 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560
941 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C
942 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759
943 +#define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760
944 +#define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761
945 +#define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762
946 +#define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763
947
948 #define PCI_VENDOR_ID_IMS 0x10e0
949 #define PCI_DEVICE_ID_IMS_TT128 0x9128