Magellan Linux

Annotation 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 - (hide annotations) (download)
Mon Jun 23 21:39:39 2008 UTC (15 years, 11 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 niro 658 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