svn commit: r185631 - in user/kmacy/HEAD_fast_multi_xmit/sys/dev: aac acpica adb ale asmc ata ata/chipsets ath ath/ath_hal ath/ath_hal/ar5210 ath/ath_hal/ar5211 ath/ath_hal/ar5212 ath/ath_hal/ar531...

Kip Macy kmacy at FreeBSD.org
Thu Dec 4 23:44:53 PST 2008


Author: kmacy
Date: Fri Dec  5 07:44:52 2008
New Revision: 185631
URL: http://svn.freebsd.org/changeset/base/185631

Log:
  IFC 184756:185625 part 6

Added:
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_alereg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_alevar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_debug.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_decode.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_desc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_devid.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v1.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v1.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v14.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v14.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v3.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_eeprom_v3.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_internal.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_regdomain.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ah_soc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_interrupts.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_keycache.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_power.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_recv.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210desc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5210reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5210/ar5k_0007.ini
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_interrupts.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_keycache.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_power.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_recv.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211desc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/ar5211reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5211/boss.ini
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2316.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2317.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2413.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar2425.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5111.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5112.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212.ini
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_eeprom.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_gpio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_interrupts.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_keycache.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_power.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212desc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5212reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5311reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5212/ar5413.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_eeprom.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_gpio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_interrupts.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_misc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_power.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5312reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5312/ar5315_gpio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar2133.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416.ini
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_adcdc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_adcgain.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_cal_iq.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_eeprom.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_gpio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_keycache.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_power.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416desc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar9160.ini
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_hal/ar5416/ar9160_attach.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_core.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_core.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_intel.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_tsc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_tsc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/u3g2.c
Deleted:
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci_pccard.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usbdevs
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/urio2_ioctl.h
Modified:
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/asmc/asmc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/ata-pci.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/ata-queue.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ata/chipsets/ata-marvell.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ah_osdep.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ah_osdep.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/amrr/amrr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/onoe/onoe.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/sample/sample.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/ath_rate/sample/sample.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_ath.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_ath_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ath/if_athvar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/bce/if_bce.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/bce/if_bcereg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus_cis.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbus_device.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cardbus/cardbusvar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/coretemp/coretemp.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_ael1002.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_common.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_ctl_defs.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_t3_hw.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/common/cxgb_xgmac.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_config.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_main.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_multiq.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_sge.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/sys/uipc_mvec.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_resource.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_tom.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/ulp/tom/cxgb_tom_sysctl.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/dcons/dcons_crom.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/dcons/dcons_os.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_80003es2lan.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82540.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82541.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82542.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82543.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82571.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82575.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_82575.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_api.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_api.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_defines.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_hw.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_ich8lan.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_ich8lan.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_mac.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_mac.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_manage.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_nvm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_osdep.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_osdep.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/e1000_regs.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_igb.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fb/s3_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fdc/fdc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fdc/fdc_pccard.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxp.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxpreg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/fxp/if_fxpvar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/glxsb/glxsb.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_amd.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_amd.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_arm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ia64.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_logging.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_mod.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_pentium.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_pentium.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_piv.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_piv.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_powerpc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ppro.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_ppro.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_sparc64.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/hwpmc_x86.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/hwpmc/pmc_events.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/if_ndis/if_ndis.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ipmi/ipmi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_cam.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_sm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_soc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/isc_subr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsi_subr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/iscsi/initiator/iscsivar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ispfw/ispfw.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_82598.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_api.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_api.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_common.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_common.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_osdep.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_phy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_phy.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ixgbe/ixgbe_type.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jme.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jmereg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/jme/if_jmevar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/k8temp/k8temp.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_disk.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_ioctl.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfi_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfireg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mfi/mfivar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mii/truephy.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mmc/mmcsd.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mn/if_mn.c   (props changed)
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/msk/if_msk.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mxge/if_mxge.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/mxge/if_mxge_var.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/nmdm/nmdm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/nxge/xge-osdep.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/patm/if_patm_intr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbb.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbb_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/pccbb/pccbbvar.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/pci/pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/if_plip.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/immio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpbb.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpt.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/lpt.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/pcfclock.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_1284.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_base.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppb_msq.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppbconf.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppbconf.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/ppi.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/pps.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpo.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpoio.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppbus/vpoio.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppc/ppc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/ppc/ppc_acpi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/random/randomdev.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/random/randomdev_soft.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/re/if_re.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/sdhci/sdhci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/sio/sio_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/sio/sio_puc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/sound/pci/hda/hdac.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/sound/pci/hda/hdac_private.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/syscons/sysmouse.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/uart/uart_dev_quicc.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_aue.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_upgt.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_zyd.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/if_zydreg.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/rio500_usb.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/u3g.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/ugen.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb_quirks.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usb_subr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdevs
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdi.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb/usbdi.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/bluetooth/ng_ubt2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/at91dci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/at91dci_atmelarm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ehci2_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/musb2_otg.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/musb2_otg_atmelarm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2_atmelarm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/ohci2_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uhci2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uhci2_pci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/usb2_bus.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/usb2_controller.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/controller/uss820dci_atmelarm.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_busdma.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_core.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_dev.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_dev.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_device.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_generic.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_handle_request.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_hub.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_msctest.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_msctest.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_request.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_sw_transfer.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_transfer.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_transfer.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/core/usb2_util.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/ethernet/if_aue2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/image/uscanner2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/Makefile
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_devid.h   (contents, props changed)
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_devtable.h   (contents, props changed)
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_ioctl.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/include/usb2_standard.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/quirk/usb2_quirk.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/ubsa2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/ugensa2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/serial/uvscom2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/sound/uaudio2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/ata-usb2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/umass2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/usb2/storage/urio2.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/vge/if_vge.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/vr/if_vr.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/blkfront/blkfront.c
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/blkfront/block.h
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/xen/netfront/netfront.c

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c	Fri Dec  5 07:43:51 2008	(r185630)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/aac/aac_pci.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -168,8 +168,6 @@ struct aac_ident
 	 "ICP ICP9014RO SCSI RAID"},
 	{0x9005, 0x0285, 0x9005, 0x0294, AAC_HWIF_I960RX, 0,
 	 "Adaptec SATA RAID 2026ZCR"},
-	{0x9005, 0x0285, 0x103c, 0x3227, AAC_HWIF_I960RX, 0,
-	 "Adaptec SATA RAID 2610SA"},
 	{0x9005, 0x0285, 0x9005, 0x0296, AAC_HWIF_I960RX, 0,
 	 "Adaptec SCSI RAID 2240S"},
 	{0x9005, 0x0285, 0x9005, 0x0297, AAC_HWIF_I960RX, 0,

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c	Fri Dec  5 07:43:51 2008	(r185630)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -158,6 +158,8 @@ static int	acpi_child_pnpinfo_str_method
 #if defined(__i386__) || defined(__amd64__)
 static void	acpi_enable_pcie(void);
 #endif
+static void	acpi_hint_device_unit(device_t acdev, device_t child,
+		    const char *name, int *unitp);
 
 static device_method_t acpi_methods[] = {
     /* Device interface */
@@ -187,6 +189,7 @@ static device_method_t acpi_methods[] = 
     DEVMETHOD(bus_deactivate_resource,	bus_generic_deactivate_resource),
     DEVMETHOD(bus_setup_intr,		bus_generic_setup_intr),
     DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
+    DEVMETHOD(bus_hint_device_unit,	acpi_hint_device_unit),
 
     /* ACPI bus */
     DEVMETHOD(acpi_id_probe,		acpi_device_id_probe),
@@ -949,6 +952,89 @@ acpi_get_rlist(device_t dev, device_t ch
     return (&ad->ad_rl);
 }
 
+static int
+acpi_match_resource_hint(device_t dev, int type, long value)
+{
+    struct acpi_device *ad = device_get_ivars(dev);
+    struct resource_list *rl = &ad->ad_rl;
+    struct resource_list_entry *rle;
+
+    STAILQ_FOREACH(rle, rl, link) {
+	if (rle->type != type)
+	    continue;
+	if (rle->start <= value && rle->end >= value)
+	    return (1);
+    }
+    return (0);
+}
+
+/*
+ * Wire device unit numbers based on resource matches in hints.
+ */
+static void
+acpi_hint_device_unit(device_t acdev, device_t child, const char *name,
+    int *unitp)
+{
+    const char *s;
+    long value;
+    int line, matches, unit;
+
+    /*
+     * Iterate over all the hints for the devices with the specified
+     * name to see if one's resources are a subset of this device.
+     */
+    line = 0;
+    for (;;) {
+	if (resource_find_dev(&line, name, &unit, "at", NULL) != 0)
+	    break;
+
+	/* Must have an "at" for acpi or isa. */
+	resource_string_value(name, unit, "at", &s);
+	if (!(strcmp(s, "acpi0") == 0 || strcmp(s, "acpi") == 0 ||
+	    strcmp(s, "isa0") == 0 || strcmp(s, "isa") == 0))
+	    continue;
+
+	/*
+	 * Check for matching resources.  We must have at least one,
+	 * and all resources specified have to match.
+	 *
+	 * XXX: We may want to revisit this to be more lenient and wire
+	 * as long as it gets one match.
+	 */
+	matches = 0;
+	if (resource_long_value(name, unit, "port", &value) == 0) {
+	    if (acpi_match_resource_hint(child, SYS_RES_IOPORT, value))
+		matches++;
+	    else
+		continue;
+	}
+	if (resource_long_value(name, unit, "maddr", &value) == 0) {
+	    if (acpi_match_resource_hint(child, SYS_RES_MEMORY, value))
+		matches++;
+	    else
+		continue;
+	}
+	if (resource_long_value(name, unit, "irq", &value) == 0) {
+	    if (acpi_match_resource_hint(child, SYS_RES_IRQ, value))
+		matches++;
+	    else
+		continue;
+	}
+	if (resource_long_value(name, unit, "drq", &value) == 0) {
+	    if (acpi_match_resource_hint(child, SYS_RES_DRQ, value))
+		matches++;
+	    else
+		continue;
+	}
+
+	if (matches > 0) {
+	    /* We have a winner! */
+	    *unitp = unit;
+	    break;
+	}
+    }
+}
+
 /*
  * Pre-allocate/manage all memory and IO resources.  Since rman can't handle
  * duplicates, we merge any in the sysresource attach routine.

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c	Fri Dec  5 07:43:51 2008	(r185630)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_hpet.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -83,7 +83,9 @@ hpet_enable(struct acpi_hpet_softc *sc)
 	uint32_t val;
 
 	val = bus_read_4(sc->mem_res, HPET_CONFIG);
-	bus_write_4(sc->mem_res, HPET_CONFIG, val | HPET_CNF_ENABLE);
+	val &= ~HPET_CNF_LEG_RT;
+	val |= HPET_CNF_ENABLE;
+	bus_write_4(sc->mem_res, HPET_CONFIG, val);
 }
 
 static void
@@ -92,7 +94,8 @@ hpet_disable(struct acpi_hpet_softc *sc)
 	uint32_t val;
 
 	val = bus_read_4(sc->mem_res, HPET_CONFIG);
-	bus_write_4(sc->mem_res, HPET_CONFIG, val & ~HPET_CNF_ENABLE);
+	val &= ~HPET_CNF_ENABLE;
+	bus_write_4(sc->mem_res, HPET_CONFIG, val);
 }
 
 /* Discover the HPET via the ACPI table of the same name. */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c	Fri Dec  5 07:43:51 2008	(r185630)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/acpica/acpi_pcib.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -127,7 +127,6 @@ prt_attach_devices(ACPI_PCI_ROUTING_TABL
 int
 acpi_pcib_attach(device_t dev, ACPI_BUFFER *prt, int busno)
 {
-    device_t			child;
     ACPI_STATUS			status;
 
     ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@@ -157,7 +156,7 @@ acpi_pcib_attach(device_t dev, ACPI_BUFF
     /*
      * Attach the PCI bus proper.
      */
-    if ((child = device_add_child(dev, "pci", busno)) == NULL) {
+    if (device_add_child(dev, "pci", busno) == NULL) {
 	device_printf(device_get_parent(dev), "couldn't attach pci bus\n");
 	return_VALUE(ENXIO);
     }

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c	Fri Dec  5 07:43:51 2008	(r185630)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/adb/adb_bus.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -134,7 +134,7 @@ adb_bus_enumerate(void *xdev)
 	/* Enumerate bus */
 	next_free = 8;
 
-	for (i = 1; i < 7; i++) {
+	for (i = 1; i <= 7; i++) {
 	    int8_t first_relocated = -1;
 	    int reply = 0;
 

Added: user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/ale/if_ale.c	Fri Dec  5 07:44:52 2008	(r185631)
@@ -0,0 +1,3106 @@
+/*-
+ * Copyright (c) 2008, Pyun YongHyeon <yongari at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Driver for Atheros AR8121/AR8113/AR8114 PCIe Ethernet. */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/sysctl.h>
+#include <sys/taskqueue.h>
+
+#include <net/bpf.h>
+#include <net/if.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_dl.h>
+#include <net/if_llc.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_vlan_var.h>
+
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <netinet/tcp.h>
+
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+
+#include <machine/atomic.h>
+#include <machine/bus.h>
+#include <machine/in_cksum.h>
+
+#include <dev/ale/if_alereg.h>
+#include <dev/ale/if_alevar.h>
+
+/* "device miibus" required.  See GENERIC if you get errors here. */
+#include "miibus_if.h"
+
+/* For more information about Tx checksum offload issues see ale_encap(). */
+#define	ALE_CSUM_FEATURES	(CSUM_TCP | CSUM_UDP)
+#ifndef	IFCAP_VLAN_HWTSO
+#define	IFCAP_VLAN_HWTSO	0
+#endif
+
+MODULE_DEPEND(ale, pci, 1, 1, 1);
+MODULE_DEPEND(ale, ether, 1, 1, 1);
+MODULE_DEPEND(ale, miibus, 1, 1, 1);
+
+/* Tunables. */
+static int msi_disable = 0;
+static int msix_disable = 0;
+TUNABLE_INT("hw.ale.msi_disable", &msi_disable);
+TUNABLE_INT("hw.ale.msix_disable", &msix_disable);
+
+/*
+ * Devices supported by this driver.
+ */
+static struct ale_dev {
+	uint16_t	ale_vendorid;
+	uint16_t	ale_deviceid;
+	const char	*ale_name;
+} ale_devs[] = {
+    { VENDORID_ATHEROS, DEVICEID_ATHEROS_AR81XX,
+    "Atheros AR8121/AR8113/AR8114 PCIe Ethernet" },
+};
+
+static int	ale_attach(device_t);
+static int	ale_check_boundary(struct ale_softc *);
+static int	ale_detach(device_t);
+static int	ale_dma_alloc(struct ale_softc *);
+static void	ale_dma_free(struct ale_softc *);
+static void	ale_dmamap_cb(void *, bus_dma_segment_t *, int, int);
+static int	ale_encap(struct ale_softc *, struct mbuf **);
+static void	ale_get_macaddr(struct ale_softc *);
+static void	ale_init(void *);
+static void	ale_init_locked(struct ale_softc *);
+static void	ale_init_rx_pages(struct ale_softc *);
+static void	ale_init_tx_ring(struct ale_softc *);
+static void	ale_int_task(void *, int);
+static int	ale_intr(void *);
+static int	ale_ioctl(struct ifnet *, u_long, caddr_t);
+static void	ale_link_task(void *, int);
+static void	ale_mac_config(struct ale_softc *);
+static int	ale_miibus_readreg(device_t, int, int);
+static void	ale_miibus_statchg(device_t);
+static int	ale_miibus_writereg(device_t, int, int, int);
+static int	ale_mediachange(struct ifnet *);
+static void	ale_mediastatus(struct ifnet *, struct ifmediareq *);
+static void	ale_phy_reset(struct ale_softc *);
+static int	ale_probe(device_t);
+static void	ale_reset(struct ale_softc *);
+static int	ale_resume(device_t);
+static void	ale_rx_update_page(struct ale_softc *, struct ale_rx_page **,
+    uint32_t, uint32_t *);
+static void	ale_rxcsum(struct ale_softc *, struct mbuf *, uint32_t);
+static int	ale_rxeof(struct ale_softc *sc, int);
+static void	ale_rxfilter(struct ale_softc *);
+static void	ale_rxvlan(struct ale_softc *);
+static void	ale_setlinkspeed(struct ale_softc *);
+static void	ale_setwol(struct ale_softc *);
+static int	ale_shutdown(device_t);
+static void	ale_start(struct ifnet *);
+static void	ale_stats_clear(struct ale_softc *);
+static void	ale_stats_update(struct ale_softc *);
+static void	ale_stop(struct ale_softc *);
+static void	ale_stop_mac(struct ale_softc *);
+static int	ale_suspend(device_t);
+static void	ale_sysctl_node(struct ale_softc *);
+static void	ale_tick(void *);
+static void	ale_tx_task(void *, int);
+static void	ale_txeof(struct ale_softc *);
+static void	ale_watchdog(struct ale_softc *);
+static int	sysctl_int_range(SYSCTL_HANDLER_ARGS, int, int);
+static int	sysctl_hw_ale_proc_limit(SYSCTL_HANDLER_ARGS);
+static int	sysctl_hw_ale_int_mod(SYSCTL_HANDLER_ARGS);
+
+static device_method_t ale_methods[] = {
+	/* Device interface. */
+	DEVMETHOD(device_probe,		ale_probe),
+	DEVMETHOD(device_attach,	ale_attach),
+	DEVMETHOD(device_detach,	ale_detach),
+	DEVMETHOD(device_shutdown,	ale_shutdown),
+	DEVMETHOD(device_suspend,	ale_suspend),
+	DEVMETHOD(device_resume,	ale_resume),
+
+	/* MII interface. */
+	DEVMETHOD(miibus_readreg,	ale_miibus_readreg),
+	DEVMETHOD(miibus_writereg,	ale_miibus_writereg),
+	DEVMETHOD(miibus_statchg,	ale_miibus_statchg),
+
+	{ NULL, NULL }
+};
+
+static driver_t ale_driver = {
+	"ale",
+	ale_methods,
+	sizeof(struct ale_softc)
+};
+
+static devclass_t ale_devclass;
+
+DRIVER_MODULE(ale, pci, ale_driver, ale_devclass, 0, 0);
+DRIVER_MODULE(miibus, ale, miibus_driver, miibus_devclass, 0, 0);
+
+static struct resource_spec ale_res_spec_mem[] = {
+	{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
+	{ -1,			0,		0 }
+};
+
+static struct resource_spec ale_irq_spec_legacy[] = {
+	{ SYS_RES_IRQ,		0,		RF_ACTIVE | RF_SHAREABLE },
+	{ -1,			0,		0 }
+};
+
+static struct resource_spec ale_irq_spec_msi[] = {
+	{ SYS_RES_IRQ,		1,		RF_ACTIVE },
+	{ -1,			0,		0 }
+};
+
+static struct resource_spec ale_irq_spec_msix[] = {
+	{ SYS_RES_IRQ,		1,		RF_ACTIVE },
+	{ -1,			0,		0 }
+};
+
+static int
+ale_miibus_readreg(device_t dev, int phy, int reg)
+{
+	struct ale_softc *sc;
+	uint32_t v;
+	int i;
+
+	sc = device_get_softc(dev);
+
+	if (phy != sc->ale_phyaddr)
+		return (0);
+
+	CSR_WRITE_4(sc, ALE_MDIO, MDIO_OP_EXECUTE | MDIO_OP_READ |
+	    MDIO_SUP_PREAMBLE | MDIO_CLK_25_4 | MDIO_REG_ADDR(reg));
+	for (i = ALE_PHY_TIMEOUT; i > 0; i--) {
+		DELAY(5);
+		v = CSR_READ_4(sc, ALE_MDIO);
+		if ((v & (MDIO_OP_EXECUTE | MDIO_OP_BUSY)) == 0)
+			break;
+	}
+
+	if (i == 0) {
+		device_printf(sc->ale_dev, "phy read timeout : %d\n", reg);
+		return (0);
+	}
+
+	return ((v & MDIO_DATA_MASK) >> MDIO_DATA_SHIFT);
+}
+
+static int
+ale_miibus_writereg(device_t dev, int phy, int reg, int val)
+{
+	struct ale_softc *sc;
+	uint32_t v;
+	int i;
+
+	sc = device_get_softc(dev);
+
+	if (phy != sc->ale_phyaddr)
+		return (0);
+
+	CSR_WRITE_4(sc, ALE_MDIO, MDIO_OP_EXECUTE | MDIO_OP_WRITE |
+	    (val & MDIO_DATA_MASK) << MDIO_DATA_SHIFT |
+	    MDIO_SUP_PREAMBLE | MDIO_CLK_25_4 | MDIO_REG_ADDR(reg));
+	for (i = ALE_PHY_TIMEOUT; i > 0; i--) {
+		DELAY(5);
+		v = CSR_READ_4(sc, ALE_MDIO);
+		if ((v & (MDIO_OP_EXECUTE | MDIO_OP_BUSY)) == 0)
+			break;
+	}
+
+	if (i == 0)
+		device_printf(sc->ale_dev, "phy write timeout : %d\n", reg);
+
+	return (0);
+}
+
+static void
+ale_miibus_statchg(device_t dev)
+{
+	struct ale_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	taskqueue_enqueue(taskqueue_swi, &sc->ale_link_task);
+}
+
+static void
+ale_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
+{
+	struct ale_softc *sc;
+	struct mii_data *mii;
+
+	sc = ifp->if_softc;
+	ALE_LOCK(sc);
+	mii = device_get_softc(sc->ale_miibus);
+
+	mii_pollstat(mii);
+	ALE_UNLOCK(sc);
+	ifmr->ifm_status = mii->mii_media_status;
+	ifmr->ifm_active = mii->mii_media_active;
+}
+
+static int
+ale_mediachange(struct ifnet *ifp)
+{
+	struct ale_softc *sc;
+	struct mii_data *mii;
+	struct mii_softc *miisc;
+	int error;
+
+	sc = ifp->if_softc;
+	ALE_LOCK(sc);
+	mii = device_get_softc(sc->ale_miibus);
+	if (mii->mii_instance != 0) {
+		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
+			mii_phy_reset(miisc);
+	}
+	error = mii_mediachg(mii);
+	ALE_UNLOCK(sc);
+
+	return (error);
+}
+
+static int
+ale_probe(device_t dev)
+{
+	struct ale_dev *sp;
+	int i;
+	uint16_t vendor, devid;
+
+	vendor = pci_get_vendor(dev);
+	devid = pci_get_device(dev);
+	sp = ale_devs;
+	for (i = 0; i < sizeof(ale_devs) / sizeof(ale_devs[0]); i++) {
+		if (vendor == sp->ale_vendorid &&
+		    devid == sp->ale_deviceid) {
+			device_set_desc(dev, sp->ale_name);
+			return (BUS_PROBE_DEFAULT);
+		}
+		sp++;
+	}
+
+	return (ENXIO);
+}
+
+static void
+ale_get_macaddr(struct ale_softc *sc)
+{
+	uint32_t ea[2], reg;
+	int i, vpdc;
+
+	reg = CSR_READ_4(sc, ALE_SPI_CTRL);
+	if ((reg & SPI_VPD_ENB) != 0) {
+		reg &= ~SPI_VPD_ENB;
+		CSR_WRITE_4(sc, ALE_SPI_CTRL, reg);
+	}
+
+	if (pci_find_extcap(sc->ale_dev, PCIY_VPD, &vpdc) == 0) {
+		/*
+		 * PCI VPD capability found, let TWSI reload EEPROM.
+		 * This will set ethernet address of controller.
+		 */
+		CSR_WRITE_4(sc, ALE_TWSI_CTRL, CSR_READ_4(sc, ALE_TWSI_CTRL) |
+		    TWSI_CTRL_SW_LD_START);
+		for (i = 100; i > 0; i--) {
+			DELAY(1000);
+			reg = CSR_READ_4(sc, ALE_TWSI_CTRL);
+			if ((reg & TWSI_CTRL_SW_LD_START) == 0)
+				break;
+		}
+		if (i == 0)
+			device_printf(sc->ale_dev,
+			    "reloading EEPROM timeout!\n");
+	} else {
+		if (bootverbose)
+			device_printf(sc->ale_dev,
+			    "PCI VPD capability not found!\n");
+	}
+
+	ea[0] = CSR_READ_4(sc, ALE_PAR0);
+	ea[1] = CSR_READ_4(sc, ALE_PAR1);
+	sc->ale_eaddr[0] = (ea[1] >> 8) & 0xFF;
+	sc->ale_eaddr[1] = (ea[1] >> 0) & 0xFF;
+	sc->ale_eaddr[2] = (ea[0] >> 24) & 0xFF;
+	sc->ale_eaddr[3] = (ea[0] >> 16) & 0xFF;
+	sc->ale_eaddr[4] = (ea[0] >> 8) & 0xFF;
+	sc->ale_eaddr[5] = (ea[0] >> 0) & 0xFF;
+}
+
+static void
+ale_phy_reset(struct ale_softc *sc)
+{
+
+	/* Reset magic from Linux. */
+	CSR_WRITE_2(sc, ALE_GPHY_CTRL,
+	    GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE | GPHY_CTRL_SEL_ANA_RESET |
+	    GPHY_CTRL_PHY_PLL_ON);
+	DELAY(1000);
+	CSR_WRITE_2(sc, ALE_GPHY_CTRL,
+	    GPHY_CTRL_EXT_RESET | GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE |
+	    GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_PLL_ON);
+	DELAY(1000);
+
+#define	ATPHY_DBG_ADDR		0x1D
+#define	ATPHY_DBG_DATA		0x1E
+
+	/* Enable hibernation mode. */
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x0B);
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_DATA, 0xBC00);
+	/* Set Class A/B for all modes. */
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x00);
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_DATA, 0x02EF);
+	/* Enable 10BT power saving. */
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x12);
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_DATA, 0x4C04);
+	/* Adjust 1000T power. */
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x04);
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x8BBB);
+	/* 10BT center tap voltage. */
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x05);
+	ale_miibus_writereg(sc->ale_dev, sc->ale_phyaddr,
+	    ATPHY_DBG_ADDR, 0x2C46);
+
+#undef	ATPHY_DBG_ADDR
+#undef	ATPHY_DBG_DATA
+	DELAY(1000);
+}
+
+static int
+ale_attach(device_t dev)
+{
+	struct ale_softc *sc;
+	struct ifnet *ifp;
+	uint16_t burst;
+	int error, i, msic, msixc, pmc;
+	uint32_t rxf_len, txf_len;
+
+	error = 0;
+	sc = device_get_softc(dev);
+	sc->ale_dev = dev;
+
+	mtx_init(&sc->ale_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
+	    MTX_DEF);
+	callout_init_mtx(&sc->ale_tick_ch, &sc->ale_mtx, 0);
+	TASK_INIT(&sc->ale_int_task, 0, ale_int_task, sc);
+	TASK_INIT(&sc->ale_link_task, 0, ale_link_task, sc);
+
+	/* Map the device. */
+	pci_enable_busmaster(dev);
+	sc->ale_res_spec = ale_res_spec_mem;
+	sc->ale_irq_spec = ale_irq_spec_legacy;
+	error = bus_alloc_resources(dev, sc->ale_res_spec, sc->ale_res);
+	if (error != 0) {
+		device_printf(dev, "cannot allocate memory resources.\n");
+		goto fail;
+	}
+
+	/* Set PHY address. */
+	sc->ale_phyaddr = ALE_PHY_ADDR;
+
+	/* Reset PHY. */
+	ale_phy_reset(sc);
+
+	/* Reset the ethernet controller. */
+	ale_reset(sc);
+
+	/* Get PCI and chip id/revision. */
+	sc->ale_rev = pci_get_revid(dev);
+	if (sc->ale_rev >= 0xF0) {
+		/* L2E Rev. B. AR8114 */
+		sc->ale_flags |= ALE_FLAG_FASTETHER;
+	} else {
+		if ((CSR_READ_4(sc, ALE_PHY_STATUS) & PHY_STATUS_100M) != 0) {
+			/* L1E AR8121 */
+			sc->ale_flags |= ALE_FLAG_JUMBO;
+		} else {
+			/* L2E Rev. A. AR8113 */
+			sc->ale_flags |= ALE_FLAG_FASTETHER;
+		}
+	}
+	/*
+	 * All known controllers seems to require 4 bytes alignment
+	 * of Tx buffers to make Tx checksum offload with custom
+	 * checksum generation method work.
+	 */
+	sc->ale_flags |= ALE_FLAG_TXCSUM_BUG;
+	/*
+	 * All known controllers seems to have issues on Rx checksum
+	 * offload for fragmented IP datagrams.
+	 */
+	sc->ale_flags |= ALE_FLAG_RXCSUM_BUG;
+	/*
+	 * Don't use Tx CMB. It is known to cause RRS update failure
+	 * under certain circumstances. Typical phenomenon of the
+	 * issue would be unexpected sequence number encountered in
+	 * Rx handler.
+	 */
+	sc->ale_flags |= ALE_FLAG_TXCMB_BUG;
+	sc->ale_chip_rev = CSR_READ_4(sc, ALE_MASTER_CFG) >>
+	    MASTER_CHIP_REV_SHIFT;
+	if (bootverbose) {
+		device_printf(dev, "PCI device revision : 0x%04x\n",
+		    sc->ale_rev);
+		device_printf(dev, "Chip id/revision : 0x%04x\n",
+		    sc->ale_chip_rev);
+	}
+	txf_len = CSR_READ_4(sc, ALE_SRAM_TX_FIFO_LEN);
+	rxf_len = CSR_READ_4(sc, ALE_SRAM_RX_FIFO_LEN);
+	/*
+	 * Uninitialized hardware returns an invalid chip id/revision
+	 * as well as 0xFFFFFFFF for Tx/Rx fifo length.
+	 */
+	if (sc->ale_chip_rev == 0xFFFF || txf_len == 0xFFFFFFFF ||
+	    rxf_len == 0xFFFFFFF) {
+		device_printf(dev,"chip revision : 0x%04x, %u Tx FIFO "
+		    "%u Rx FIFO -- not initialized?\n", sc->ale_chip_rev,
+		    txf_len, rxf_len);
+		error = ENXIO;
+		goto fail;
+	}
+	device_printf(dev, "%u Tx FIFO, %u Rx FIFO\n", txf_len, rxf_len);
+
+	/* Allocate IRQ resources. */
+	msixc = pci_msix_count(dev);
+	msic = pci_msi_count(dev);
+	if (bootverbose) {
+		device_printf(dev, "MSIX count : %d\n", msixc);
+		device_printf(dev, "MSI count : %d\n", msic);
+	}
+
+	/* Prefer MSIX over MSI. */
+	if (msix_disable == 0 || msi_disable == 0) {
+		if (msix_disable == 0 && msixc == ALE_MSIX_MESSAGES &&
+		    pci_alloc_msix(dev, &msixc) == 0) {
+			if (msic == ALE_MSIX_MESSAGES) {
+				device_printf(dev, "Using %d MSIX messages.\n",
+				    msixc);
+				sc->ale_flags |= ALE_FLAG_MSIX;
+				sc->ale_irq_spec = ale_irq_spec_msix;
+			} else
+				pci_release_msi(dev);
+		}
+		if (msi_disable == 0 && (sc->ale_flags & ALE_FLAG_MSIX) == 0 &&
+		    msic == ALE_MSI_MESSAGES &&
+		    pci_alloc_msi(dev, &msic) == 0) {
+			if (msic == ALE_MSI_MESSAGES) {
+				device_printf(dev, "Using %d MSI messages.\n",
+				    msic);
+				sc->ale_flags |= ALE_FLAG_MSI;
+				sc->ale_irq_spec = ale_irq_spec_msi;
+			} else
+				pci_release_msi(dev);
+		}
+	}
+
+	error = bus_alloc_resources(dev, sc->ale_irq_spec, sc->ale_irq);
+	if (error != 0) {
+		device_printf(dev, "cannot allocate IRQ resources.\n");
+		goto fail;
+	}
+
+	/* Get DMA parameters from PCIe device control register. */
+	if (pci_find_extcap(dev, PCIY_EXPRESS, &i) == 0) {
+		sc->ale_flags |= ALE_FLAG_PCIE;
+		burst = pci_read_config(dev, i + 0x08, 2);
+		/* Max read request size. */
+		sc->ale_dma_rd_burst = ((burst >> 12) & 0x07) <<
+		    DMA_CFG_RD_BURST_SHIFT;
+		/* Max payload size. */
+		sc->ale_dma_wr_burst = ((burst >> 5) & 0x07) <<
+		    DMA_CFG_WR_BURST_SHIFT;
+		if (bootverbose) {
+			device_printf(dev, "Read request size : %d bytes.\n",
+			    128 << ((burst >> 12) & 0x07));
+			device_printf(dev, "TLP payload size : %d bytes.\n",
+			    128 << ((burst >> 5) & 0x07));
+		}
+	} else {
+		sc->ale_dma_rd_burst = DMA_CFG_RD_BURST_128;
+		sc->ale_dma_wr_burst = DMA_CFG_WR_BURST_128;
+	}
+
+	/* Create device sysctl node. */
+	ale_sysctl_node(sc);
+
+	if ((error = ale_dma_alloc(sc) != 0))
+		goto fail;
+
+	/* Load station address. */
+	ale_get_macaddr(sc);
+
+	ifp = sc->ale_ifp = if_alloc(IFT_ETHER);
+	if (ifp == NULL) {
+		device_printf(dev, "cannot allocate ifnet structure.\n");
+		error = ENXIO;
+		goto fail;
+	}
+
+	ifp->if_softc = sc;
+	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
+	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+	ifp->if_ioctl = ale_ioctl;
+	ifp->if_start = ale_start;
+	ifp->if_init = ale_init;
+	ifp->if_snd.ifq_drv_maxlen = ALE_TX_RING_CNT - 1;
+	IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen);
+	IFQ_SET_READY(&ifp->if_snd);
+	ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4;
+	ifp->if_hwassist = ALE_CSUM_FEATURES | CSUM_TSO;
+	if (pci_find_extcap(dev, PCIY_PMG, &pmc) == 0) {
+		sc->ale_flags |= ALE_FLAG_PMCAP;
+		ifp->if_capabilities |= IFCAP_WOL_MAGIC | IFCAP_WOL_MCAST;
+	}
+	ifp->if_capenable = ifp->if_capabilities;
+
+	/* Set up MII bus. */
+	if ((error = mii_phy_probe(dev, &sc->ale_miibus, ale_mediachange,
+	    ale_mediastatus)) != 0) {
+		device_printf(dev, "no PHY found!\n");
+		goto fail;
+	}
+
+	ether_ifattach(ifp, sc->ale_eaddr);
+
+	/* VLAN capability setup. */
+	ifp->if_capabilities |= IFCAP_VLAN_MTU;
+	ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM;
+	ifp->if_capenable = ifp->if_capabilities;
+
+	/* Tell the upper layer(s) we support long frames. */
+	ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
+
+	/* Create local taskq. */
+	TASK_INIT(&sc->ale_tx_task, 1, ale_tx_task, ifp);
+	sc->ale_tq = taskqueue_create_fast("ale_taskq", M_WAITOK,
+	    taskqueue_thread_enqueue, &sc->ale_tq);
+	if (sc->ale_tq == NULL) {
+		device_printf(dev, "could not create taskqueue.\n");
+		ether_ifdetach(ifp);
+		error = ENXIO;
+		goto fail;
+	}
+	taskqueue_start_threads(&sc->ale_tq, 1, PI_NET, "%s taskq",
+	    device_get_nameunit(sc->ale_dev));
+
+	if ((sc->ale_flags & ALE_FLAG_MSIX) != 0)
+		msic = ALE_MSIX_MESSAGES;
+	else if ((sc->ale_flags & ALE_FLAG_MSI) != 0)
+		msic = ALE_MSI_MESSAGES;
+	else
+		msic = 1;
+	for (i = 0; i < msic; i++) {
+		error = bus_setup_intr(dev, sc->ale_irq[i],
+		    INTR_TYPE_NET | INTR_MPSAFE, ale_intr, NULL, sc,
+		    &sc->ale_intrhand[i]);
+		if (error != 0)
+			break;
+	}
+	if (error != 0) {
+		device_printf(dev, "could not set up interrupt handler.\n");
+		taskqueue_free(sc->ale_tq);
+		sc->ale_tq = NULL;
+		ether_ifdetach(ifp);
+		goto fail;
+	}
+
+fail:
+	if (error != 0)
+		ale_detach(dev);
+
+	return (error);
+}
+
+static int
+ale_detach(device_t dev)
+{
+	struct ale_softc *sc;
+	struct ifnet *ifp;
+	int i, msic;
+
+	sc = device_get_softc(dev);
+
+	ifp = sc->ale_ifp;
+	if (device_is_attached(dev)) {
+		ALE_LOCK(sc);
+		sc->ale_flags |= ALE_FLAG_DETACH;
+		ale_stop(sc);
+		ALE_UNLOCK(sc);
+		callout_drain(&sc->ale_tick_ch);
+		taskqueue_drain(sc->ale_tq, &sc->ale_int_task);
+		taskqueue_drain(sc->ale_tq, &sc->ale_tx_task);
+		taskqueue_drain(taskqueue_swi, &sc->ale_link_task);
+		ether_ifdetach(ifp);
+	}
+
+	if (sc->ale_tq != NULL) {
+		taskqueue_drain(sc->ale_tq, &sc->ale_int_task);
+		taskqueue_free(sc->ale_tq);
+		sc->ale_tq = NULL;
+	}
+
+	if (sc->ale_miibus != NULL) {
+		device_delete_child(dev, sc->ale_miibus);
+		sc->ale_miibus = NULL;
+	}
+	bus_generic_detach(dev);
+	ale_dma_free(sc);
+
+	if (ifp != NULL) {
+		if_free(ifp);
+		sc->ale_ifp = NULL;
+	}
+
+	if ((sc->ale_flags & ALE_FLAG_MSIX) != 0)
+		msic = ALE_MSIX_MESSAGES;
+	else if ((sc->ale_flags & ALE_FLAG_MSI) != 0)
+		msic = ALE_MSI_MESSAGES;
+	else
+		msic = 1;
+	for (i = 0; i < msic; i++) {
+		if (sc->ale_intrhand[i] != NULL) {
+			bus_teardown_intr(dev, sc->ale_irq[i],
+			    sc->ale_intrhand[i]);
+			sc->ale_intrhand[i] = NULL;
+		}
+	}
+
+	bus_release_resources(dev, sc->ale_irq_spec, sc->ale_irq);
+	if ((sc->ale_flags & (ALE_FLAG_MSI | ALE_FLAG_MSIX)) != 0)
+		pci_release_msi(dev);
+	bus_release_resources(dev, sc->ale_res_spec, sc->ale_res);
+	mtx_destroy(&sc->ale_mtx);
+
+	return (0);
+}
+
+#define	ALE_SYSCTL_STAT_ADD32(c, h, n, p, d)	\
+	    SYSCTL_ADD_UINT(c, h, OID_AUTO, n, CTLFLAG_RD, p, 0, d)
+
+#if __FreeBSD_version > 800000
+#define	ALE_SYSCTL_STAT_ADD64(c, h, n, p, d)	\
+	    SYSCTL_ADD_QUAD(c, h, OID_AUTO, n, CTLFLAG_RD, p, d)
+#else
+#define	ALE_SYSCTL_STAT_ADD64(c, h, n, p, d)	\
+	    SYSCTL_ADD_ULONG(c, h, OID_AUTO, n, CTLFLAG_RD, p, d)
+#endif
+
+static void
+ale_sysctl_node(struct ale_softc *sc)
+{
+	struct sysctl_ctx_list *ctx;
+	struct sysctl_oid_list *child, *parent;
+	struct sysctl_oid *tree;
+	struct ale_hw_stats *stats;
+	int error;
+
+	stats = &sc->ale_stats;
+	ctx = device_get_sysctl_ctx(sc->ale_dev);
+	child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->ale_dev));
+
+	SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_rx_mod",
+	    CTLTYPE_INT | CTLFLAG_RW, &sc->ale_int_rx_mod, 0,
+	    sysctl_hw_ale_int_mod, "I", "ale Rx interrupt moderation");
+	SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "int_tx_mod",
+	    CTLTYPE_INT | CTLFLAG_RW, &sc->ale_int_tx_mod, 0,
+	    sysctl_hw_ale_int_mod, "I", "ale Tx interrupt moderation");
+	/* Pull in device tunables. */
+	sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT;
+	error = resource_int_value(device_get_name(sc->ale_dev),
+	    device_get_unit(sc->ale_dev), "int_rx_mod", &sc->ale_int_rx_mod);
+	if (error == 0) {
+		if (sc->ale_int_rx_mod < ALE_IM_TIMER_MIN ||
+		    sc->ale_int_rx_mod > ALE_IM_TIMER_MAX) {
+			device_printf(sc->ale_dev, "int_rx_mod value out of "
+			    "range; using default: %d\n",
+			    ALE_IM_RX_TIMER_DEFAULT);
+			sc->ale_int_rx_mod = ALE_IM_RX_TIMER_DEFAULT;
+		}
+	}
+	sc->ale_int_tx_mod = ALE_IM_TX_TIMER_DEFAULT;
+	error = resource_int_value(device_get_name(sc->ale_dev),
+	    device_get_unit(sc->ale_dev), "int_tx_mod", &sc->ale_int_tx_mod);
+	if (error == 0) {
+		if (sc->ale_int_tx_mod < ALE_IM_TIMER_MIN ||
+		    sc->ale_int_tx_mod > ALE_IM_TIMER_MAX) {
+			device_printf(sc->ale_dev, "int_tx_mod value out of "
+			    "range; using default: %d\n",
+			    ALE_IM_TX_TIMER_DEFAULT);
+			sc->ale_int_tx_mod = ALE_IM_TX_TIMER_DEFAULT;
+		}
+	}
+	SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "process_limit",
+	    CTLTYPE_INT | CTLFLAG_RW, &sc->ale_process_limit, 0,
+	    sysctl_hw_ale_proc_limit, "I",
+	    "max number of Rx events to process");
+	/* Pull in device tunables. */
+	sc->ale_process_limit = ALE_PROC_DEFAULT;
+	error = resource_int_value(device_get_name(sc->ale_dev),
+	    device_get_unit(sc->ale_dev), "process_limit",
+	    &sc->ale_process_limit);
+	if (error == 0) {
+		if (sc->ale_process_limit < ALE_PROC_MIN ||
+		    sc->ale_process_limit > ALE_PROC_MAX) {
+			device_printf(sc->ale_dev,
+			    "process_limit value out of range; "
+			    "using default: %d\n", ALE_PROC_DEFAULT);
+			sc->ale_process_limit = ALE_PROC_DEFAULT;
+		}
+	}
+
+	/* Misc statistics. */
+	ALE_SYSCTL_STAT_ADD32(ctx, child, "reset_brk_seq",
+	    &stats->reset_brk_seq,
+	    "Controller resets due to broken Rx sequnce number");
+
+	tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD,
+	    NULL, "ATE statistics");
+	parent = SYSCTL_CHILDREN(tree);
+
+	/* Rx statistics. */
+	tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD,
+	    NULL, "Rx MAC statistics");
+	child = SYSCTL_CHILDREN(tree);
+	ALE_SYSCTL_STAT_ADD32(ctx, child, "good_frames",
+	    &stats->rx_frames, "Good frames");
+	ALE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames",
+	    &stats->rx_bcast_frames, "Good broadcast frames");
+	ALE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames",
+	    &stats->rx_mcast_frames, "Good multicast frames");
+	ALE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames",

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list