Date: Sat, 9 Sep 2006 17:24:13 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 105902 for review Message-ID: <200609091724.k89HODBg081099@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=105902 Change 105902 by rwatson@rwatson_zoo on 2006/09/09 17:23:46 Integrate TrustedBSD priv branch from TrustedBSD base branch. For a detailed list of changes in this merge, see @105901. Affected files ... .. //depot/projects/trustedbsd/priv/sys/amd64/amd64/local_apic.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/amd64/amd64/machdep.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/amd64/linux32/linux32_sysvec.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/arm/at91/at91_twi.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/arm/at91/if_atereg.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/boot/i386/pxeldr/pxeldr.S#2 integrate .. //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_proto.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_syscall.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_syscalls.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_sysent.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/compat/freebsd32/syscalls.master#3 integrate .. //depot/projects/trustedbsd/priv/sys/compat/linux/linux_futex.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/conf/files.amd64#2 integrate .. //depot/projects/trustedbsd/priv/sys/contrib/pf/net/pf_ioctl.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/aic7xxx/aic7xxx_osm.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/bge/if_bge.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/dev/bge/if_bgereg.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/drmP.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/drm_drv.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/drm_pciids.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/i915_dma.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/i915_drm.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/i915_drv.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/i915_irq.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/mach64_drm.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/radeon_cp.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/radeon_drm.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/radeon_drv.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/drm/radeon_state.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/em/if_em.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/dev/em/if_em.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/dev/fdc/fdc.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/dev/ic/nec765.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/if_ndis/if_ndis_usb.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/iicbus/iic.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mfi/mfi.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mfi/mfireg.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mpt/mpt.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mpt/mpt.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mpt/mpt_cam.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/mpt/mpt_pci.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/puc/pucdata.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/re/if_re.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/sound/usb/uaudio.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ehci.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ehci_pci.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ehcivar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/hid.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_aue.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_axe.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_cdce.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_cue.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_kue.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_rue.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_udav.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_udavreg.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_ural.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/if_uralvar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/kue_fw.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ohci.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ohcivar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/sl811hs.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/sl811hsvar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ubsa.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ubser.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ucom.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ucomvar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/udbp.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ufm.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ufoma.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uftdi.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ugen.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uhci.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uhcivar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uhid.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uhub.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ukbd.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ulpt.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/umass.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/umct.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/umodem.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/ums.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uplcom.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/urio.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb_ethersubr.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb_mem.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb_port.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb_quirks.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usb_subr.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usbdi.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usbdi.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usbdi_util.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usbdi_util.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/usbdivar.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uscanner.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uvisor.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/usb/uvscom.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/dev/vge/if_vge.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/geom/gate/g_gate.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/geom/gate/g_gate.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/geom/nop/g_nop.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/geom/nop/g_nop.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/i386/acpica/Makefile#2 integrate .. //depot/projects/trustedbsd/priv/sys/i386/i386/local_apic.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/i386/i386/machdep.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/i386/i386/sys_machdep.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/i386/linux/linux_sysvec.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/kern/kern_ktr.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/kern/kern_umtx.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/kern/uipc_sockbuf.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/kern/vfs_aio.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/kern/vfs_subr.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/modules/Makefile#4 integrate .. //depot/projects/trustedbsd/priv/sys/modules/agp/Makefile#2 integrate .. //depot/projects/trustedbsd/priv/sys/modules/sound/sound/Makefile#2 integrate .. //depot/projects/trustedbsd/priv/sys/net/bpf.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/net/if.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/net/if.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/net/if_var.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_var.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/in_pcb.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/ip_output.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/raw_ip.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_input.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_output.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_subr.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_timer.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_timer.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/tcp_var.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet/udp_usrreq.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/netinet6/icmp6.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet6/ip6_forward.c#2 integrate .. //depot/projects/trustedbsd/priv/sys/netinet6/udp6_usrreq.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/pc98/cbus/fdc.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/security/audit/audit.c#4 integrate .. //depot/projects/trustedbsd/priv/sys/security/audit/audit.h#3 integrate .. //depot/projects/trustedbsd/priv/sys/security/audit/audit_bsm.c#3 integrate .. //depot/projects/trustedbsd/priv/sys/sys/mbuf.h#2 integrate .. //depot/projects/trustedbsd/priv/sys/sys/param.h#3 integrate Differences ... ==== //depot/projects/trustedbsd/priv/sys/amd64/amd64/local_apic.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.26 2006/07/12 21:22:42 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.28 2006/09/06 22:05:34 sobomax Exp $"); #include "opt_hwpmc_hooks.h" @@ -613,6 +613,18 @@ /* Send EOI first thing. */ lapic_eoi(); +#ifdef SMP + /* + * Don't do any accounting for the disabled HTT cores, since it + * will provide misleading numbers for the userland. + * + * No locking is necessary here, since even if we loose the race + * when hlt_cpus_mask changes it is not a big deal, really. + */ + if ((hlt_cpus_mask & (1 << PCPU_GET(cpuid))) != 0) + return; +#endif + /* Look up our local APIC structure for the tick counters. */ la = &lapics[PCPU_GET(apic_id)]; (*la->la_timer_count)++; ==== //depot/projects/trustedbsd/priv/sys/amd64/amd64/machdep.c#2 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.651 2006/07/27 19:47:22 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.652 2006/09/07 15:03:02 jhb Exp $"); #include "opt_atalk.h" #include "opt_atpic.h" @@ -160,8 +160,10 @@ long Maxmem = 0; long realmem = 0; -vm_paddr_t phys_avail[20]; -vm_paddr_t dump_avail[20]; +#define PHYSMAP_SIZE (2 * 30) + +vm_paddr_t phys_avail[PHYSMAP_SIZE + 2]; +vm_paddr_t dump_avail[PHYSMAP_SIZE + 2]; /* must be 2 less so 0 0 can signal end of chunks */ #define PHYS_AVAIL_ARRAY_END ((sizeof(phys_avail) / sizeof(phys_avail[0])) - 2) @@ -832,8 +834,6 @@ } #endif -#define PHYSMAP_SIZE (2 * 20) - u_int basemem; /* ==== //depot/projects/trustedbsd/priv/sys/amd64/linux32/linux32_sysvec.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.23 2006/08/17 21:06:48 netchild Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.24 2006/09/09 16:25:25 netchild Exp $"); #include "opt_compat.h" #ifndef COMPAT_IA32 @@ -124,7 +124,7 @@ static void linux32_fixlimits(struct proc *p); extern LIST_HEAD(futex_list, futex) futex_list; -extern struct mtx futex_mtx; +extern struct sx futex_sx; static eventhandler_tag linux_exit_tag; static eventhandler_tag linux_schedtail_tag; @@ -1080,7 +1080,7 @@ sx_init(&emul_lock, "emuldata lock"); sx_init(&emul_shared_lock, "emuldata->shared lock"); LIST_INIT(&futex_list); - mtx_init(&futex_mtx, "futex protection lock", NULL, MTX_DEF); + sx_init(&futex_sx, "futex protection lock"); linux_exit_tag = EVENTHANDLER_REGISTER(process_exit, linux_proc_exit, NULL, 1000); linux_schedtail_tag = EVENTHANDLER_REGISTER(schedtail, linux_schedtail, @@ -1110,7 +1110,7 @@ linux_device_unregister_handler(*ldhp); sx_destroy(&emul_lock); sx_destroy(&emul_shared_lock); - mtx_destroy(&futex_mtx); + sx_destroy(&futex_sx); EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag); EVENTHANDLER_DEREGISTER(schedtail, linux_schedtail_tag); EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag); ==== //depot/projects/trustedbsd/priv/sys/arm/at91/at91_twi.c#2 (text) ==== @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/arm/at91/at91_twi.c,v 1.3 2006/07/14 22:40:24 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/at91/at91_twi.c,v 1.4 2006/09/07 21:53:28 imp Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -128,20 +128,16 @@ sc->cwgr = TWI_CWGR_CKDIV(8 * AT91C_MASTER_CLOCK / 90000) | TWI_CWGR_CHDIV(TWI_CWGR_DIV(TWI_DEF_CLK)) | TWI_CWGR_CLDIV(TWI_CWGR_DIV(TWI_DEF_CLK)); - WR4(sc, TWI_CR, TWI_CR_SWRST); WR4(sc, TWI_CR, TWI_CR_MSEN | TWI_CR_SVDIS); WR4(sc, TWI_CWGR, sc->cwgr); - WR4(sc, TWI_IER, TWI_SR_RXRDY | TWI_SR_OVRE | TWI_SR_UNRE | TWI_SR_NACK); if ((sc->iicbus = device_add_child(dev, "iicbus", -1)) == NULL) device_printf(dev, "could not allocate iicbus instance\n"); - /* probe and attach the iicbus */ bus_generic_attach(dev); - out:; if (err) at91_twi_deactivate(dev); @@ -228,12 +224,15 @@ } static int -at91_twi_wait_stop_done(struct at91_twi_softc *sc) +at91_twi_wait(struct at91_twi_softc *sc, uint32_t bit) { int err = 0; + int counter = 10000; - while (!(RD4(sc, TWI_SR) & TWI_SR_TXCOMP)) + while (!(RD4(sc, TWI_SR) & bit) && counter-- != 0) continue; + if (counter == 0) + err = EIO; return (err); } @@ -252,7 +251,7 @@ sc = device_get_softc(dev); if (sc->sc_started) { WR4(sc, TWI_CR, TWI_CR_STOP); - err = at91_twi_wait_stop_done(sc); + err = at91_twi_wait(sc, TWI_SR_TXCOMP); } return (err); } @@ -345,7 +344,7 @@ if (!last) goto errout; WR4(sc, TWI_CR, TWI_CR_STOP); - err = at91_twi_wait_stop_done(sc); + err = at91_twi_wait(sc, TWI_SR_TXCOMP); *walker = RD4(sc, TWI_RHR) & 0xff; if (read) *read = walker - buf; @@ -419,6 +418,53 @@ return (error); } +static int +at91_twi_transfer(device_t dev, struct iic_msg *msgs, uint32_t nmsgs) +{ + struct at91_twi_softc *sc; + int i, len; + uint32_t rdwr; + uint8_t *buf; + + sc = device_get_softc(dev); + for (i = 0; i < nmsgs; i++) { + /* + * The linux atmel driver doesn't use the internal device + * address feature of twi. A separate i2c message needs to + * be written to use this. + * See http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2004-September/024411.html + * for details. + */ + rdwr = (msgs[i].flags & IIC_M_RD) ? TWI_MMR_MREAD : 0; + WR4(sc, TWI_MMR, TWI_MMR_DADR(msgs[i].slave) | rdwr); + len = msgs[i].len; + buf = msgs[i].buf; + if (len != 0 || buf == NULL) + return EINVAL; + WR4(sc, TWI_CR, TWI_CR_START); + if (msgs[i].flags & IIC_M_RD) { + while (len--) { + if (len == 0) + WR4(sc, TWI_CR, TWI_CR_STOP); + if (!at91_twi_wait(sc, TWI_SR_RXRDY)) + return EIO; + *buf++ = RD4(sc, TWI_RHR) & 0xff; + } + } else { + while (len--) { + WR4(sc, TWI_THR, *buf++); + if (len == 0) + WR4(sc, TWI_CR, TWI_CR_STOP); + if (!at91_twi_wait(sc, TWI_SR_TXRDY)) + return EIO; + } + } + if (!at91_twi_wait(sc, TWI_SR_TXCOMP)) + return EIO; + } + return 0; +} + static device_method_t at91_twi_methods[] = { /* Device interface */ DEVMETHOD(device_probe, at91_twi_probe), @@ -433,6 +479,7 @@ DEVMETHOD(iicbus_write, at91_twi_write), DEVMETHOD(iicbus_read, at91_twi_read), DEVMETHOD(iicbus_reset, at91_twi_rst_card), + DEVMETHOD(iicbus_transfer, at91_twi_transfer), { 0, 0 } }; ==== //depot/projects/trustedbsd/priv/sys/arm/at91/if_atereg.h#2 (text) ==== @@ -22,7 +22,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* $FreeBSD: src/sys/arm/at91/if_atereg.h,v 1.1 2006/02/04 23:32:13 imp Exp $ */ +/* $FreeBSD: src/sys/arm/at91/if_atereg.h,v 1.2 2006/09/07 21:50:01 imp Exp $ */ #ifndef ARM_AT91_IF_ATEREG_H #define ARM_AT91_IF_ATEREG_H @@ -52,15 +52,15 @@ #define ETH_DTE 0x58 /* Deferred Transmittion Frame Reg */ #define ETH_LCOL 0x5c /* Late Collision Register */ #define ETH_ECOL 0x60 /* Excessive Collision Register */ -#define ETH_CSE 0x64 /* Carrier Sense Error Register */ -#define ETH_TUE 0x68 /* Transmit Underrun Error Register */ -#define ETH_CDE 0x6c /* Code Error Register */ -#define ETH_ELR 0x70 /* Excessive Length Error Register */ -#define ETH_RJB 0x74 /* Receive Jabber Register */ -#define ETH_USF 0x78 /* Undersize Frame Register */ -#define ETH_SQEE 0x7c /* SQE Test Error Register */ -#define ETH_DRFC 0x80 /* Discarded RX Frame Register */ - /* 0x84 reserved */ +#define ETH_TUE 0x64 /* Transmit Underrun Error Register */ +#define ETH_CSE 0x68 /* Carrier Sense Error Register */ +#define ETH_DRFC 0x6c /* Discarded RX Frame Register */ +#define ETH_ROV 0x68 /* Receive Overrun Register */ +#define ETH_CDE 0x64 /* Code Error Register */ +#define ETH_ELR 0x78 /* Excessive Length Error Register */ +#define ETH_RJB 0x7c /* Receive Jabber Register */ +#define ETH_USF 0x80 /* Undersize Frame Register */ +#define ETH_SQEE 0x84 /* SQE Test Error Register */ /* 0x88 reserved */ /* 0x8c reserved */ #define ETH_HSH 0x90 /* EMAC Hash Address High [63:32] */ ==== //depot/projects/trustedbsd/priv/sys/boot/i386/pxeldr/pxeldr.S#2 (text+ko) ==== @@ -12,7 +12,7 @@ * warranties of merchantability and fitness for a particular * purpose. * - * $FreeBSD: src/sys/boot/i386/pxeldr/pxeldr.S,v 1.14 2006/04/11 20:53:49 sobomax Exp $ + * $FreeBSD: src/sys/boot/i386/pxeldr/pxeldr.S,v 1.15 2006/09/05 19:28:03 ru Exp $ */ /* @@ -25,6 +25,8 @@ * separate PXE-aware client just to load the loader. */ +#include <sys/reboot.h> + /* * Memory locations. */ @@ -53,10 +55,6 @@ .set KARGS_FLAGS_PXE,0x2 # flag to indicate booting from # PXE loader /* - * Boot howto bits - */ - .set RB_SERIAL,0x1000 # serial console -/* * Segment selectors. */ .set SEL_SDATA,0x8 # Supervisor data @@ -119,11 +117,11 @@ #ifdef PROBE_KEYBOARD /* * Look at the BIOS data area to see if we have an enhanced keyboard. If not, - * set the RBX_SERIAL bit in the howto byte. + * set the RBX_DUAL and RBX_SERIAL bits in the howto byte. */ testb $KEYBOARD_BIT, MEM_BIOS_KEYBOARD # keyboard present? jnz keyb # yes, so skip - orl $RB_SERIAL, (%bx) # enable serial console + orl $(RB_MULTIPLE | RB_SERIAL), (%bx) # enable serial console keyb: #endif /* ==== //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_proto.h#3 (text+ko) ==== @@ -2,7 +2,7 @@ * System call prototypes. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.60 2006/09/03 16:24:36 rwatson Exp $ + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.61 2006/09/09 01:22:13 davidxu Exp $ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.73 2006/09/03 16:17:49 rwatson Exp */ ==== //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_syscall.h#3 (text+ko) ==== @@ -2,7 +2,7 @@ * System call numbers. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.58 2006/09/03 16:24:36 rwatson Exp $ + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.59 2006/09/09 01:22:13 davidxu Exp $ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.73 2006/09/03 16:17:49 rwatson Exp */ @@ -310,5 +310,10 @@ #define FREEBSD32_SYS_thr_suspend 442 #define FREEBSD32_SYS_thr_wake 443 #define FREEBSD32_SYS_kldunloadf 444 +#define FREEBSD32_SYS_sigqueue 456 #define FREEBSD32_SYS_abort2 463 +#define FREEBSD32_SYS_thr_set_name 464 +#define FREEBSD32_SYS_thr_setscheduler 466 +#define FREEBSD32_SYS_thr_getscheduler 467 +#define FREEBSD32_SYS_thr_setschedparam 468 #define FREEBSD32_SYS_MAXSYSCALL 471 ==== //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_syscalls.c#3 (text+ko) ==== @@ -2,7 +2,7 @@ * System call names. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.49 2006/09/03 16:24:36 rwatson Exp $ + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.50 2006/09/09 01:22:13 davidxu Exp $ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.73 2006/09/03 16:17:49 rwatson Exp */ @@ -463,7 +463,7 @@ "#453", /* 453 = auditctl */ "#454", /* 454 = _umtx_op */ "#455", /* 455 = thr_new */ - "#456", /* 456 = sigqueue */ + "sigqueue", /* 456 = sigqueue */ "#457", /* 457 = kmq_open */ "#458", /* 458 = kmq_setattr */ "#459", /* 459 = kmq_timedreceive */ @@ -471,11 +471,11 @@ "#461", /* 461 = kmq_notify */ "#462", /* 462 = kmq_unlink */ "abort2", /* 463 = abort2 */ - "#464", /* 464 = thr_set_name */ + "thr_set_name", /* 464 = thr_set_name */ "#465", /* 465 = aio_fsync */ - "#466", /* 466 = thr_setscheduler */ - "#467", /* 467 = thr_getscheduler */ - "#468", /* 468 = thr_setschedparam */ + "thr_setscheduler", /* 466 = thr_setscheduler */ + "thr_getscheduler", /* 467 = thr_getscheduler */ + "thr_setschedparam", /* 468 = thr_setschedparam */ "#469", /* 469 = __getpath_fromfd */ "#470", /* 470 = __getpath_fromaddr */ }; ==== //depot/projects/trustedbsd/priv/sys/compat/freebsd32/freebsd32_sysent.c#3 (text+ko) ==== @@ -2,7 +2,7 @@ * System call switch table. * * DO NOT EDIT-- this file is automatically generated. - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.59 2006/09/03 16:24:36 rwatson Exp $ + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.60 2006/09/09 01:22:13 davidxu Exp $ * created from FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.73 2006/09/03 16:17:49 rwatson Exp */ @@ -488,7 +488,7 @@ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 453 = auditctl */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 454 = _umtx_op */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 455 = thr_new */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 456 = sigqueue */ + { AS(sigqueue_args), (sy_call_t *)sigqueue, AUE_NULL, NULL, 0, 0 }, /* 456 = sigqueue */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 457 = kmq_open */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 458 = kmq_setattr */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 459 = kmq_timedreceive */ @@ -496,11 +496,11 @@ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 461 = kmq_notify */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 462 = kmq_unlink */ { AS(abort2_args), (sy_call_t *)abort2, AUE_NULL, NULL, 0, 0 }, /* 463 = abort2 */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 464 = thr_set_name */ + { AS(thr_set_name_args), (sy_call_t *)thr_set_name, AUE_NULL, NULL, 0, 0 }, /* 464 = thr_set_name */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 465 = aio_fsync */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 466 = thr_setscheduler */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 467 = thr_getscheduler */ - { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 468 = thr_setschedparam */ + { AS(thr_setscheduler_args), (sy_call_t *)thr_setscheduler, AUE_NULL, NULL, 0, 0 }, /* 466 = thr_setscheduler */ + { AS(thr_getscheduler_args), (sy_call_t *)thr_getscheduler, AUE_NULL, NULL, 0, 0 }, /* 467 = thr_getscheduler */ + { AS(thr_setschedparam_args), (sy_call_t *)thr_setschedparam, AUE_NULL, NULL, 0, 0 }, /* 468 = thr_setschedparam */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 469 = __getpath_fromfd */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 470 = __getpath_fromaddr */ }; ==== //depot/projects/trustedbsd/priv/sys/compat/freebsd32/syscalls.master#3 (text+ko) ==== @@ -1,4 +1,4 @@ - $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.73 2006/09/03 16:17:49 rwatson Exp $ + $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.74 2006/09/09 01:22:13 davidxu Exp $ ; from: @(#)syscalls.master 8.2 (Berkeley) 1/13/94 ; from: src/sys/kern/syscalls.master 1.107 ; @@ -743,7 +743,8 @@ 453 AUE_AUDITCTL UNIMPL auditctl 454 AUE_NULL UNIMPL _umtx_op 455 AUE_NULL UNIMPL thr_new -456 AUE_NULL UNIMPL sigqueue +456 AUE_NULL NOPROTO { int sigqueue(pid_t pid, int signum, \ + void *value); } 457 AUE_NULL UNIMPL kmq_open 458 AUE_NULL UNIMPL kmq_setattr 459 AUE_NULL UNIMPL kmq_timedreceive @@ -751,10 +752,16 @@ 461 AUE_NULL UNIMPL kmq_notify 462 AUE_NULL UNIMPL kmq_unlink 463 AUE_NULL NOPROTO { int abort2(const char *why, int nargs, void **args); } -464 AUE_NULL UNIMPL thr_set_name +464 AUE_NULL NOPROTO { int thr_set_name(long id, const char *name); } 465 AUE_NULL UNIMPL aio_fsync -466 AUE_NULL UNIMPL thr_setscheduler -467 AUE_NULL UNIMPL thr_getscheduler -468 AUE_NULL UNIMPL thr_setschedparam +466 AUE_NULL NOPROTO { int thr_setscheduler(long id, int policy,\ + const struct sched_param *param, \ + int param_size); } +467 AUE_NULL NOPROTO { int thr_getscheduler(long id, int *policy,\ + struct sched_param *param, \ + int param_size); } +468 AUE_NULL NOPROTO { int thr_setschedparam(long id, \ + const struct sched_param *param, \ + int param_size); } 469 AUE_NULL UNIMPL __getpath_fromfd 470 AUE_NULL UNIMPL __getpath_fromaddr ==== //depot/projects/trustedbsd/priv/sys/compat/linux/linux_futex.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/linux/linux_futex.c,v 1.4 2006/08/26 10:36:16 netchild Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/linux/linux_futex.c,v 1.6 2006/09/09 16:25:25 netchild Exp $"); #if 0 __KERNEL_RCSID(1, "$NetBSD: linux_futex.c,v 1.5 2005/11/23 16:14:57 manu Exp $"); #endif @@ -47,6 +47,7 @@ #include <sys/queue.h> #include <sys/lock.h> #include <sys/mutex.h> +#include <sys/sx.h> #include <sys/malloc.h> #ifdef COMPAT_LINUX32 @@ -73,10 +74,10 @@ }; LIST_HEAD(futex_list, futex) futex_list; -struct mtx futex_mtx; /* this protects the LIST of futexes */ +struct sx futex_sx; /* this protects the LIST of futexes */ -#define FUTEX_LOCK mtx_lock(&futex_mtx) -#define FUTEX_UNLOCK mtx_unlock(&futex_mtx) +#define FUTEX_LOCK sx_xlock(&futex_sx) +#define FUTEX_UNLOCK sx_xunlock(&futex_sx) #define FUTEX_LOCKED 1 #define FUTEX_UNLOCKED 0 @@ -302,9 +303,6 @@ ret = futex_wake(f, args->val, NULL); futex_put(f); if (op_ret > 0) { -#ifdef DEBUG - printf("second wakeup\n"); -#endif op_ret = 0; /* * Linux uses the address of the timespec parameter @@ -346,16 +344,11 @@ return f; } } - if (locked == FUTEX_UNLOCKED) - FUTEX_UNLOCK; - /* Not found, create it */ f = malloc(sizeof(*f), M_LINUX, M_WAITOK); f->f_uaddr = uaddr; f->f_refcount = 1; TAILQ_INIT(&f->f_waiting_proc); - if (locked == FUTEX_UNLOCKED) - FUTEX_LOCK; LIST_INSERT_HEAD(&futex_list, f, f_list); if (locked == FUTEX_UNLOCKED) FUTEX_UNLOCK; @@ -421,13 +414,13 @@ FUTEX_LOCK; TAILQ_FOREACH(wp, &f->f_waiting_proc, wp_list) { if (count <= n) { - wakeup(wp); + wakeup_one(wp); count++; } else { if (newf != NULL) { /* futex_put called after tsleep */ wp->wp_new_futex = futex_get(newf->f_uaddr, FUTEX_LOCKED); - wakeup(wp); + wakeup_one(wp); } } } ==== //depot/projects/trustedbsd/priv/sys/conf/files.amd64#2 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.amd64,v 1.92 2006/08/15 12:54:28 netchild Exp $ +# $FreeBSD: src/sys/conf/files.amd64,v 1.93 2006/09/05 16:55:12 anholt Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -208,6 +208,7 @@ isa/vga_isa.c optional vga kern/link_elf_obj.c standard pci/agp_amd64.c optional agp +pci/agp_i810.c optional agp pci/agp_intel.c optional agp # # IA32 binary support ==== //depot/projects/trustedbsd/priv/sys/contrib/pf/net/pf_ioctl.c#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/contrib/pf/net/pf_ioctl.c,v 1.25 2006/07/21 09:48:13 mlaier Exp $ */ +/* $FreeBSD: src/sys/contrib/pf/net/pf_ioctl.c,v 1.26 2006/09/06 17:19:45 mlaier Exp $ */ /* $OpenBSD: pf_ioctl.c,v 1.139 2005/03/03 07:13:39 dhartmei Exp $ */ /* add: $OpenBSD: pf_ioctl.c,v 1.168 2006/07/21 01:21:17 dhartmei Exp $ */ @@ -3438,11 +3438,17 @@ struct inpcb *inp) { /* - * IPv6 does not affected ip_len/ip_off byte order changes. + * IPv6 is not affected by ip_len/ip_off byte order changes. */ int chk; - chk = pf_test6(PF_IN, ifp, m, NULL, inp); + /* + * In case of loopback traffic IPv6 uses the real interface in + * order to support scoped addresses. In order to support stateful + * filtering we have change this to lo0 as it is the case in IPv4. + */ + chk = pf_test6(PF_IN, (*m)->m_flags & M_LOOP ? &loif[0] : ifp, m, + NULL, inp); if (chk && *m) { m_freem(*m); *m = NULL; ==== //depot/projects/trustedbsd/priv/sys/dev/aic7xxx/aic7xxx_osm.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/aic7xxx/aic7xxx_osm.c,v 1.44 2005/12/04 02:12:40 ru Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/aic7xxx/aic7xxx_osm.c,v 1.45 2006/09/05 20:28:28 mjacob Exp $"); #include <dev/aic7xxx/aic7xxx_osm.h> #include <dev/aic7xxx/aic7xxx_inline.h> @@ -158,6 +158,8 @@ count = 0; sim = NULL; sim2 = NULL; + path = NULL; + path2 = NULL; /* * Create a thread to perform all recovery. ==== //depot/projects/trustedbsd/priv/sys/dev/bge/if_bge.c#3 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.143 2006/09/03 00:27:41 jmg Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.144 2006/09/09 03:36:57 ambrisko Exp $"); /* * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. @@ -326,6 +326,7 @@ static void bge_txeof(struct bge_softc *); static void bge_rxeof(struct bge_softc *); +static void bge_asf_driver_up (struct bge_softc *); static void bge_tick_locked(struct bge_softc *); static void bge_tick(void *); static void bge_stats_update(struct bge_softc *); @@ -376,7 +377,12 @@ static void bge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count); #endif -static void bge_reset(struct bge_softc *); +#define BGE_RESET_START 1 +#define BGE_RESET_STOP 2 +static void bge_sig_post_reset(struct bge_softc *, int); +static void bge_sig_legacy(struct bge_softc *, int); +static void bge_sig_pre_reset(struct bge_softc *, int); +static int bge_reset(struct bge_softc *); static void bge_link_upd(struct bge_softc *); static device_method_t bge_methods[] = { @@ -646,7 +652,6 @@ { struct bge_softc *sc; struct mii_data *mii; - sc = device_get_softc(dev); mii = device_get_softc(sc->bge_miibus); @@ -968,6 +973,84 @@ CSR_WRITE_4(sc, BGE_MAR0 + (i * 4), hashes[i]); } +static void +bge_sig_pre_reset(sc, type) + struct bge_softc *sc; + int type; +{ + /* + * Some chips don't like this so only do this if ASF is enabled + */ + if (sc->bge_asf_mode) + bge_writemem_ind(sc, BGE_SOFTWARE_GENCOMM, BGE_MAGIC_NUMBER); + + if (sc->bge_asf_mode & ASF_NEW_HANDSHAKE) { + switch (type) { + case BGE_RESET_START: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x1); /* START */ + break; + case BGE_RESET_STOP: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x2); /* UNLOAD */ + break; + } + } +} + +static void +bge_sig_post_reset(sc, type) + struct bge_softc *sc; + int type; +{ + if (sc->bge_asf_mode & ASF_NEW_HANDSHAKE) { + switch (type) { + case BGE_RESET_START: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000001); + /* START DONE */ + break; + case BGE_RESET_STOP: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000002); + break; + } + } +} + +static void +bge_sig_legacy(sc, type) + struct bge_softc *sc; + int type; +{ + if (sc->bge_asf_mode) { + switch (type) { + case BGE_RESET_START: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x1); /* START */ + break; + case BGE_RESET_STOP: + bge_writemem_ind(sc, BGE_SDI_STATUS, 0x2); /* UNLOAD */ + break; + } + } +} + +void bge_stop_fw(struct bge_softc *); +void +bge_stop_fw(sc) + struct bge_softc *sc; +{ + int i; + + if (sc->bge_asf_mode) { + bge_writemem_ind(sc, BGE_SOFTWARE_GENCOMM_FW, BGE_FW_PAUSE); + CSR_WRITE_4(sc, BGE_CPU_EVENT, + CSR_READ_4(sc, BGE_CPU_EVENT) != (1 << 14)); + + for (i = 0; i < 100; i++ ) { + if (!(CSR_READ_4(sc, BGE_CPU_EVENT) & (1 << 14))) + break; + DELAY(10); + } + } +} + /* * Do endian, PCI and DMA initialization. Also check the on-board ROM * self-test results. @@ -978,7 +1061,7 @@ uint32_t dma_rw_ctl; int i; - /* Set endian type before we access any non-PCI registers. */ + /* Set endianness before we access any non-PCI registers. */ pci_write_config(sc->bge_dev, BGE_PCI_MISC_CTL, BGE_INIT, 4); /* @@ -1070,6 +1153,12 @@ BGE_MODECTL_TX_NO_PHDR_CSUM); /* + * Tell the firmware the driver is running + */ + if (sc->bge_asf_mode & ASF_STACKUP) + BGE_SETBIT(sc, BGE_MODE_CTL, BGE_MODECTL_STACKUP); + + /* * Disable memory write invalidate. Apparently it is not supported * properly by these devices. */ @@ -1992,6 +2081,7 @@ uint32_t mac_tmp = 0; u_char eaddr[6]; int error = 0, rid; + int trys; sc = device_get_softc(dev); sc->bge_dev = dev; @@ -2059,7 +2149,38 @@ sc->bge_flags |= BGE_FLAG_PCIX; /* Try to reset the chip. */ - bge_reset(sc); + if (bge_reset(sc)) { + device_printf(sc->bge_dev, "chip reset failed\n"); + bge_release_resources(sc); + error = ENXIO; + goto fail; + } + + sc->bge_asf_mode = 0; + if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG) + == BGE_MAGIC_NUMBER) { + if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_NICCFG) + & BGE_HWCFG_ASF) { + sc->bge_asf_mode |= ASF_ENABLE; + sc->bge_asf_mode |= ASF_STACKUP; + if (sc->bge_asicrev == BGE_ASICREV_BCM5750) { + sc->bge_asf_mode |= ASF_NEW_HANDSHAKE; + } + } + } + + /* Try to reset the chip again the nice way. */ + bge_stop_fw(sc); + bge_sig_pre_reset(sc, BGE_RESET_STOP); + if (bge_reset(sc)) { + device_printf(sc->bge_dev, "chip reset failed\n"); + bge_release_resources(sc); + error = ENXIO; + goto fail; + } + + bge_sig_legacy(sc, BGE_RESET_STOP); + bge_sig_post_reset(sc, BGE_RESET_STOP); if (bge_chipinit(sc)) { device_printf(sc->bge_dev, "chip initialization failed\n"); @@ -2186,15 +2307,36 @@ sc->bge_ifmedia.ifm_media = sc->bge_ifmedia.ifm_cur->ifm_media; } else { /* - * Do transceiver setup. + * Do transceiver setup and tell the firmware the + * driver is down so we can try to get access the + * probe if ASF is running. Retry a couple of times + * if we get a conflict with the ASF firmware accessing + * the PHY. */ + BGE_CLRBIT(sc, BGE_MODE_CTL, BGE_MODECTL_STACKUP); +again: + bge_asf_driver_up(sc); + + trys = 0; if (mii_phy_probe(dev, &sc->bge_miibus, bge_ifmedia_upd, bge_ifmedia_sts)) { + if (trys++ < 4) { + device_printf(sc->bge_dev, "Try again\n"); + bge_miibus_writereg(sc->bge_dev, 1, MII_BMCR, BMCR_RESET); + goto again; + } + device_printf(sc->bge_dev, "MII without any PHY!\n"); bge_release_resources(sc); error = ENXIO; goto fail; } + + /* + * Now tell the firmware we are going up after probing the PHY + */ + if (sc->bge_asf_mode & ASF_STACKUP) + BGE_SETBIT(sc, BGE_MODE_CTL, BGE_MODECTL_STACKUP); } >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200609091724.k89HODBg081099>