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