Date: Fri, 5 Dec 2008 07:44:53 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: 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... Message-ID: <200812050744.mB57irgQ047218@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812050744.mB57irgQ047218>