Index: driver/wrapndis.c =================================================================== --- driver/wrapndis.c (revision 2723) +++ driver/wrapndis.c (working copy) @@ -950,20 +950,34 @@ static void set_multicast_list(struct nd packet_filter |= NDIS_PACKET_TYPE_PROMISCUOUS | NDIS_PACKET_TYPE_ALL_LOCAL; } else if (net_dev->flags & IFF_ALLMULTI || - net_dev->mc_count > wnd->multicast_size) { + netdev_mc_count(net_dev) > wnd->multicast_size) { packet_filter |= NDIS_PACKET_TYPE_ALL_MULTICAST; TRACE2("0x%08x", packet_filter); - } else if (net_dev->mc_count > 0) { + } else if (netdev_mc_count(net_dev) > 0) { int i, size; char *buf; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) + struct netdev_hw_addr *ha; +#else struct dev_mc_list *mclist; - size = min(wnd->multicast_size, net_dev->mc_count); - TRACE2("%d, %d", wnd->multicast_size, net_dev->mc_count); +#endif + size = min(wnd->multicast_size, netdev_mc_count(net_dev)); + TRACE2("%d, %d", wnd->multicast_size, netdev_mc_count(net_dev)); buf = kmalloc(size * ETH_ALEN, GFP_KERNEL); if (!buf) { WARNING("couldn't allocate memory"); EXIT2(return); } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) + i = 0; + netdev_for_each_mc_addr(ha, net_dev) { + if (i >= size) + break; + memcpy(buf + i * ETH_ALEN, ha->addr, ETH_ALEN); + TRACE2(MACSTRSEP, MAC2STR(ha->addr)); + i++; + } +#else mclist = net_dev->mc_list; for (i = 0; i < size && mclist; mclist = mclist->next) { if (mclist->dmi_addrlen != ETH_ALEN) @@ -972,6 +986,7 @@ static void set_multicast_list(struct nd TRACE2(MACSTRSEP, MAC2STR(mclist->dmi_addr)); i++; } +#endif res = mp_set(wnd, OID_802_3_MULTICAST_LIST, buf, i * ETH_ALEN); if (res == NDIS_STATUS_SUCCESS && i > 0) packet_filter |= NDIS_PACKET_TYPE_MULTICAST; Index: driver/usb.c =================================================================== --- driver/usb.c (revision 2723) +++ driver/usb.c (working copy) @@ -191,7 +191,7 @@ static void wrap_free_urb(struct urb *ur if (wrap_urb->flags & WRAP_URB_COPY_BUFFER) { USBTRACE("freeing DMA buffer for URB: %p %p", urb, urb->transfer_buffer); - usb_buffer_free(IRP_WRAP_DEVICE(irp)->usb.udev, + usb_free_coherent(IRP_WRAP_DEVICE(irp)->usb.udev, urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma); } @@ -304,7 +304,7 @@ static struct urb *wrap_alloc_urb(struct #endif )) { urb->transfer_buffer = - usb_buffer_alloc(wd->usb.udev, buf_len, alloc_flags, + usb_alloc_coherent(wd->usb.udev, buf_len, alloc_flags, &urb->transfer_dma); if (!urb->transfer_buffer) { WARNING("couldn't allocate dma buf"); Index: driver/ntoskernel.h =================================================================== --- driver/ntoskernel.h (revision 2723) +++ driver/ntoskernel.h (working copy) @@ -324,6 +324,12 @@ typedef u32 pm_message_t; kmem_cache_create(name, size, align, flags, NULL) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34) +#define netdev_mc_count(dev) ((dev)->mc_count) +#define usb_alloc_coherent(dev, size, mem_flags, dma) (usb_buffer_alloc((dev), (size), (mem_flags), (dma))) +#define usb_free_coherent(dev, size, addr, dma) (usb_buffer_free((dev), (size), (addr), (dma))) +#endif + #include "winnt_types.h" #include "ndiswrapper.h" #include "pe_linker.h"