--- - branch: MAIN date: Wed Aug 29 20:39:24 UTC 2012 files: - new: '1.232' old: '1.231' path: src/sys/dev/pci/if_wm.c pathrev: src/sys/dev/pci/if_wm.c@1.232 type: modified - new: '1.48' old: '1.47' path: src/sys/dev/pci/if_wmreg.h pathrev: src/sys/dev/pci/if_wmreg.h@1.48 type: modified id: 20120829T203924Z.a9a68448fa9b2c7edeb95106fe94e5fa1035264c log: | Make vlan and all ip/ip6 checksum offload work for the I350. On newer devices, when using the legacy TX descriptors, vlan-related flags that were set on the last descriptor of a packet have to be set on the first one. For tso/checksum offloads, a new "advanced" descriptor format has to be used. Change wcd_txdescs to a union defining all types of descriptors (they are all 16-bytes wide). Define a new tx function wm_nq_start(), which handle newer devices. There is some code duplication with wm_start(), but adding support to the existing wm_start() would make it a if () {} else {} maze. This also allows to get rid of some workaround for older chips that are not needed here. Use wm_nq_start() instead of wm_start() for the I350 (this should probably be for all WM_F_NEWQUEUE devices, but I have no hardware but the I350 to test). Call ifp->if_start() instead of wm_start() where is matters. Tested on a I350, and a i80003 (which use the old format), both with and without vlans, with and without checksum offloads. module: src subject: 'CVS commit: src/sys/dev/pci' unixtime: '1346272764' user: bouyer