bge: x86_64 does not have alignment constraint either
bge: Reduce status block device update size

This reduced the amount of data that device needs to DMAed into
host mmeory update status updating.

Obtained-from: FreeBSD 199679

Changes made to the above FreeBSD commit:
- We don't reduce the amount of host memory allocated for status block
- Properly comment why BCM5700 AX/BX need to have full status block
  update setting according to the Broadcom datasheet
bge: Improve TX performance on certain low end chips

These chips, e.g. BCM5761, only allow one outstanding DMA read operation,
so on TX path, mbuf chain should be packed to reduce number of DMA reads
from chip to improve performance.

hw.bgeX.force_defrag is added for PCI-E chips to enable this mbuf chain
packing.  It is not enabled by default.

Obtained-from: FreeBSD 200088
bge: Don't touch jumbo frame registers on chips which do not support them

Obtained-from: FreeBSD 200228

Unlike above FreeBSD commit, we don't change mini ring handling
bge: For dual mode PHY controllers, make sure to enable GMII

Obtained-from: OpenBSD via FreeBSD 202293
bge: Zero out the status block during initialization

Obtained-from: FreeBSD 209741
bge: Properly enable Data Fifo Protection for certain chips

Obtained-from: FreeBSD 210083
bge: Avoid using magic number

Obtained-from: FreeBSD 210152
bge: Disable UDP hardware checksum

Broadcom NetExtreme controllers always generate 0 UDP checksum.

Obtained-from: FreeBSD 211596
bge: Reduce the number of dropped frames when flow-control is enabled

Set the number of RX frames to receive after RX MBUF low watermark
has reached.  Previously it dropped incoming frames once
RX MBUF low watermark has reached.  The value used in MAC RX MBUF
low watermark is greater than or equal to 4 so receiving two more
RX frames should not be a problem.

Obtained-from: OpenBSD via FreeBSD 213255
bge: Improve 5785 performance

By allowing write DMA to request larger DMA burst size

Obtained-from: OpenBSD via FreeBSD 213333
bge: Don't prevent bge_init if IFF_RUNNING is set

This probably was old code which intended to guard against if_init()
triggered by SIOCSIFADDR in ether_ioctl().  It no longer makes sense.

Also don't call bge_init() if MTU is changed but device is not running
yet (FreeBSD 213587).
igb: Add MSI-X support

- As many RX rings will be enabled, if they are allowed by the number of
  available MSI-X vectors and number of CPUs.
- RX MSI-X vectors could be grouped to specific CPU set.  However, the
  first CPU of the CPU set must be aligned on RX MSI-X vector count; by
  default RX MSI-X vectors are grouped according to the device's software
  unit number.  Tunable hw.igbX.msix.rxoff could be used to regroup RX
  MSI-X vector to a specific set of CPUs.
- TX ring uses seperate MSI-X if possible.  TX MSI-X vector could be bound
  to a specific CPU; bydefault TX MSI-X vectors is bound to the CPU based
  on the device's software unit number.  Tunable hw.igbX.msix.txoff could
  be used to bind TX MSI-X to a specific CPU.
- Per MSI-X vector interrupt moderation sysctl hw.igbX.msiY_rate is added.
  The default interrupt rate for TX is 4000, which is enough to generate
  1.48Mpps small packets.  The default interrupt rate for RX is 6000.
- MSI-X must not be enabled on 82575 according to the specification update
  from Intel.
igb: Make sure EITR interval is within range

Suggested-by: dillon@
igb: Reduce MSI/legacy interrupt rate limit to 6000

Should work well enough as far as I have tested.
Fix more wrong sizeof() usages, part 4/x

We want struct sizes here, not pointer sizes.

Found-with: Coccinelle (http://coccinelle.lip6.fr/)
Merge branch 'master' into gsocdrm_github