From owner-p4-projects@FreeBSD.ORG Wed Jun 29 18:48:32 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 41EF116A421; Wed, 29 Jun 2005 18:48:32 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F13B516A41C for ; Wed, 29 Jun 2005 18:48:31 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id B922443D1F for ; Wed, 29 Jun 2005 18:48:31 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j5TImVON031399 for ; Wed, 29 Jun 2005 18:48:31 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j5TImVoD031396 for perforce@freebsd.org; Wed, 29 Jun 2005 18:48:31 GMT (envelope-from jhb@freebsd.org) Date: Wed, 29 Jun 2005 18:48:31 GMT Message-Id: <200506291848.j5TImVoD031396@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 79170 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jun 2005 18:48:33 -0000 http://perforce.freebsd.org/chv.cgi?CH=79170 Change 79170 by jhb@jhb_slimer on 2005/06/29 18:47:53 IFC @79168. Wanted to get Robert's fixes to the ibcs2 alternate syscall masters. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/trap.c#28 integrate .. //depot/projects/smpng/sys/amd64/include/param.h#15 integrate .. //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#13 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#21 integrate .. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_util.h#3 integrate .. //depot/projects/smpng/sys/conf/Makefile.arm#9 integrate .. //depot/projects/smpng/sys/conf/options#101 integrate .. //depot/projects/smpng/sys/contrib/pf/net/if_pfsync.c#13 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi_quirks#5 integrate .. //depot/projects/smpng/sys/dev/ata/ata-disk.c#51 integrate .. //depot/projects/smpng/sys/dev/ata/ata-queue.c#27 integrate .. //depot/projects/smpng/sys/dev/bge/if_bge.c#56 integrate .. //depot/projects/smpng/sys/dev/drm/radeon_cp.c#12 integrate .. //depot/projects/smpng/sys/dev/ep/if_ep.c#21 integrate .. //depot/projects/smpng/sys/dev/ep/if_ep_isa.c#12 integrate .. //depot/projects/smpng/sys/dev/ep/if_ep_pccard.c#19 integrate .. //depot/projects/smpng/sys/dev/ep/if_epvar.h#9 integrate .. //depot/projects/smpng/sys/dev/iicbus/if_ic.c#13 integrate .. //depot/projects/smpng/sys/dev/ral/if_ral.c#3 integrate .. //depot/projects/smpng/sys/dev/sound/pci/csa.c#14 integrate .. //depot/projects/smpng/sys/dev/sound/pci/csapcm.c#13 integrate .. //depot/projects/smpng/sys/dev/sound/pci/csareg.h#2 integrate .. //depot/projects/smpng/sys/dev/sound/pci/csavar.h#2 integrate .. //depot/projects/smpng/sys/i386/i386/trap.c#79 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_isc_syscall.h#4 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_isc_sysent.c#5 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix.h#6 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix_syscall.h#5 integrate .. //depot/projects/smpng/sys/i386/ibcs2/ibcs2_xenix_sysent.c#6 integrate .. //depot/projects/smpng/sys/i386/ibcs2/syscalls.isc#4 integrate .. //depot/projects/smpng/sys/i386/ibcs2/syscalls.xenix#4 integrate .. //depot/projects/smpng/sys/i4b/driver/i4b_ipr.c#23 integrate .. //depot/projects/smpng/sys/ia64/ia64/trap.c#74 integrate .. //depot/projects/smpng/sys/kern/kern_descrip.c#81 integrate .. //depot/projects/smpng/sys/kern/kern_mbuf.c#7 integrate .. //depot/projects/smpng/sys/modules/bge/Makefile#3 integrate .. //depot/projects/smpng/sys/net/bpf.c#51 integrate .. //depot/projects/smpng/sys/net/if_bridge.c#2 integrate .. //depot/projects/smpng/sys/net/if_disc.c#19 integrate .. //depot/projects/smpng/sys/net/if_faith.c#27 integrate .. //depot/projects/smpng/sys/net/if_gif.c#26 integrate .. //depot/projects/smpng/sys/net/if_gre.c#23 integrate .. //depot/projects/smpng/sys/net/if_loop.c#37 integrate .. //depot/projects/smpng/sys/net/if_stf.c#32 integrate .. //depot/projects/smpng/sys/net/if_tun.c#43 integrate .. //depot/projects/smpng/sys/net/route.c#26 integrate .. //depot/projects/smpng/sys/netgraph/ng_iface.c#23 integrate .. //depot/projects/smpng/sys/netgraph/ng_nat.c#2 integrate .. //depot/projects/smpng/sys/netgraph/ng_sppp.c#8 integrate .. //depot/projects/smpng/sys/netinet/ip_carp.c#7 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_ftp.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_irc.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_local.h#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_proxy.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_skinny.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_smedia.c#2 integrate .. //depot/projects/smpng/sys/netinet/libalias/alias_util.c#3 integrate .. //depot/projects/smpng/sys/netinet/tcp_input.c#73 integrate .. //depot/projects/smpng/sys/netinet/tcp_sack.c#13 integrate .. //depot/projects/smpng/sys/netinet/tcp_var.h#39 integrate .. //depot/projects/smpng/sys/pci/agp_via.c#16 integrate .. //depot/projects/smpng/sys/sys/ucred.h#26 integrate .. //depot/projects/smpng/sys/vm/uma_dbg.c#14 integrate Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/trap.c#28 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.287 2005/06/24 00:16:56 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/trap.c,v 1.288 2005/06/25 22:14:42 ups Exp $"); /* * AMD64 Trap and System call handling @@ -648,8 +648,15 @@ } #ifdef KDB - if ((debugger_on_panic || kdb_active) && kdb_trap(type, 0, frame)) - return; + if (debugger_on_panic || kdb_active) { + register_t rflags; + rflags = intr_disable(); + if (kdb_trap(type, 0, frame)) { + intr_restore(rflags); + return; + } + intr_restore(rflags); + } #endif printf("trap number = %d\n", type); if (type <= MAX_TRAP_MSG) ==== //depot/projects/smpng/sys/amd64/include/param.h#15 (text+ko) ==== @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)param.h 8.1 (Berkeley) 6/10/93 - * $FreeBSD: src/sys/amd64/include/param.h,v 1.17 2005/01/21 05:56:41 peter Exp $ + * $FreeBSD: src/sys/amd64/include/param.h,v 1.18 2005/06/29 15:13:25 jhb Exp $ */ /* @@ -84,7 +84,7 @@ #endif #ifdef SMP -#define MAXCPU 8 +#define MAXCPU 16 #else #define MAXCPU 1 #endif ==== //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#13 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.21 2005/05/24 22:10:35 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.22 2005/06/24 23:57:27 cognet Exp $"); /* * MacPPC bus dma support routines @@ -87,16 +87,19 @@ #define DMAMAP_MBUF 0x2 #define DMAMAP_UIO 0x4 #define DMAMAP_ALLOCATED 0x10 -#define DMAMAP_STATIC_BUSY 0x20 #define DMAMAP_TYPE_MASK (DMAMAP_LINEAR|DMAMAP_MBUF|DMAMAP_UIO) #define DMAMAP_COHERENT 0x8 struct bus_dmamap { bus_dma_tag_t dmat; int flags; void *buffer; + TAILQ_ENTRY(bus_dmamap) freelist; int len; }; +static TAILQ_HEAD(,bus_dmamap) dmamap_freelist = + TAILQ_HEAD_INITIALIZER(dmamap_freelist); + #define BUSDMA_STATIC_MAPS 500 static struct bus_dmamap map_pool[BUSDMA_STATIC_MAPS]; @@ -104,6 +107,17 @@ MTX_SYSINIT(busdma_mtx, &busdma_mtx, "busdma lock", MTX_DEF); +static void +arm_dmamap_freelist_init(void *dummy) +{ + int i; + + for (i = 0; i < BUSDMA_STATIC_MAPS; i++) + TAILQ_INSERT_HEAD(&dmamap_freelist, &map_pool[i], freelist); +} + +SYSINIT(busdma, SI_SUB_VM, SI_ORDER_ANY, arm_dmamap_freelist_init, NULL); + /* * Check to see if the specified page is in an allowed DMA range. */ @@ -168,35 +182,32 @@ #endif } -static bus_dmamap_t +static __inline bus_dmamap_t _busdma_alloc_dmamap(void) { - int i; bus_dmamap_t map; mtx_lock(&busdma_mtx); - for (i = 0; i < BUSDMA_STATIC_MAPS; i++) - if (!(map_pool[i].flags & DMAMAP_STATIC_BUSY)) { - bzero(&map_pool[i], sizeof(map_pool[i])); - map_pool[i].flags |= DMAMAP_STATIC_BUSY; - mtx_unlock(&busdma_mtx); - return (&map_pool[i]); - } + map = TAILQ_FIRST(&dmamap_freelist); + TAILQ_REMOVE(&dmamap_freelist, map, freelist); mtx_unlock(&busdma_mtx); - map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT | M_ZERO); - if (map) - map->flags |= DMAMAP_ALLOCATED; + if (!map) { + map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT); + if (map) + map->flags = DMAMAP_ALLOCATED; + } else + map->flags = 0; return (map); } -static void +static __inline void _busdma_free_dmamap(bus_dmamap_t map) { if (map->flags & DMAMAP_ALLOCATED) free(map, M_DEVBUF); else { mtx_lock(&busdma_mtx); - map->flags &= ~DMAMAP_STATIC_BUSY; + TAILQ_INSERT_HEAD(&dmamap_freelist, map, freelist); mtx_unlock(&busdma_mtx); } } @@ -430,7 +441,7 @@ * the starting segment on entrance, and the ending segment on exit. * first indicates if this is the first invocation of this function. */ -static int __inline +static __inline int bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs, bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap, int flags, vm_offset_t *lastaddrp, int *segp) @@ -457,7 +468,7 @@ * XXX Don't support checking for coherent mappings * XXX in user address space. */ - if (0 && __predict_true(pmap == pmap_kernel())) { + if (__predict_true(pmap == pmap_kernel())) { (void) pmap_get_pde_pte(pmap, vaddr, &pde, &ptep); if (__predict_false(pmap_pde_section(pde))) { curaddr = (*pde & L1_S_FRAME) | @@ -763,7 +774,7 @@ return; } -static void +static __inline void bus_dmamap_sync_buf(void *buf, int len, bus_dmasync_op_t op) { @@ -790,7 +801,7 @@ return; if (map->flags & DMAMAP_COHERENT) return; - if (map->len > PAGE_SIZE) { + if ((op && BUS_DMASYNC_POSTREAD) && (map->len > PAGE_SIZE)) { cpu_dcache_wbinv_all(); return; } @@ -802,7 +813,8 @@ case DMAMAP_MBUF: m = map->buffer; while (m) { - bus_dmamap_sync_buf(m->m_data, m->m_len, op); + if (m->m_len > 0) + bus_dmamap_sync_buf(m->m_data, m->m_len, op); m = m->m_next; } break; ==== //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#21 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.36 2005/06/24 17:41:28 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.37 2005/06/29 15:16:20 jhb Exp $"); #include "opt_compat.h" @@ -1232,30 +1232,20 @@ freebsd32_xxx(struct thread *td, struct freebsd32_xxx_args *uap) { int error; - caddr_t sg; struct yyy32 *p32, s32; struct yyy *p = NULL, s; - p32 = uap->zzz; - if (p32) { - sg = stackgap_init(); - p = stackgap_alloc(&sg, sizeof(struct yyy)); - uap->zzz = (struct yyy32 *)p; - error = copyin(p32, &s32, sizeof(s32)); + if (uap->zzz) { + error = copyin(uap->zzz, &s32, sizeof(s32)); if (error) return (error); /* translate in */ - error = copyout(&s, p, sizeof(s)); - if (error) - return (error); + p = &s; } - error = xxx(td, (struct xxx_args *) uap); + error = kern_xxx(td, p); if (error) return (error); - if (p32) { - error = copyin(p, &s, sizeof(s)); - if (error) - return (error); + if (uap->zzz) { /* translate out */ error = copyout(&s32, p32, sizeof(s32)); } ==== //depot/projects/smpng/sys/compat/freebsd32/freebsd32_util.h#3 (text+ko) ==== @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/compat/freebsd32/freebsd32_util.h,v 1.9 2003/12/23 02:48:11 peter Exp $ + * $FreeBSD: src/sys/compat/freebsd32/freebsd32_util.h,v 1.10 2005/06/29 15:16:20 jhb Exp $ */ #include @@ -50,27 +50,3 @@ #define FREEBSD32_PS_STRINGS \ (FREEBSD32_USRSTACK - sizeof(struct freebsd32_ps_strings)) - -static __inline caddr_t stackgap_init(void); -static __inline void *stackgap_alloc(caddr_t *, size_t); - -static __inline caddr_t -stackgap_init() -{ -#define szsigcode (*(curproc->p_sysent->sv_szsigcode)) - return (caddr_t)(((caddr_t)FREEBSD32_PS_STRINGS) - szsigcode - - SPARE_USRSPACE); -#undef szsigcode -} - -static __inline void * -stackgap_alloc(sgp, sz) - caddr_t *sgp; - size_t sz; -{ - void *p; - - p = (void *) *sgp; - *sgp += ALIGN(sz); - return p; -} ==== //depot/projects/smpng/sys/conf/Makefile.arm#9 (text+ko) ==== @@ -1,7 +1,7 @@ # Makefile.arm -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.i386 7.1 5/10/91 -# $FreeBSD: src/sys/conf/Makefile.arm,v 1.9 2005/04/13 14:49:57 imp Exp $ +# $FreeBSD: src/sys/conf/Makefile.arm,v 1.10 2005/06/27 14:33:32 cognet Exp $ # # Makefile for FreeBSD # @@ -41,6 +41,9 @@ SYSTEM_LD += -EB .endif +.if !defined(DEBUG) +CFLAGS += -mno-apcs-frame +.endif %BEFORE_DEPEND %OBJS ==== //depot/projects/smpng/sys/conf/options#101 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.508 2005/06/24 00:16:57 peter Exp $ +# $FreeBSD: src/sys/conf/options,v 1.509 2005/06/24 21:43:46 dwhite Exp $ # # On the handling of kernel options # @@ -624,6 +624,9 @@ ED_3C503 opt_ed.h ED_SIC opt_ed.h +# bge driver +BGE_FAKE_AUTONEG opt_bge.h + # wi driver WI_SYMBOL_FIRMWARE opt_wi.h ==== //depot/projects/smpng/sys/contrib/pf/net/if_pfsync.c#13 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/contrib/pf/net/if_pfsync.c,v 1.18 2005/06/12 16:46:20 mlaier Exp $ */ +/* $FreeBSD: src/sys/contrib/pf/net/if_pfsync.c,v 1.19 2005/06/26 21:00:52 mlaier Exp $ */ /* $OpenBSD: if_pfsync.c,v 1.46 2005/02/20 15:58:38 mcbride Exp $ */ /* @@ -224,6 +224,7 @@ callout_init(&sc->sc_bulk_tmo, NET_CALLOUT_MPSAFE); callout_init(&sc->sc_bulkfail_tmo, NET_CALLOUT_MPSAFE); callout_init(&sc->sc_send_tmo, NET_CALLOUT_MPSAFE); + sc->sc_ifq.ifq_maxlen = ifqmaxlen; mtx_init(&sc->sc_ifq.ifq_mtx, ifp->if_xname, "pfsync send queue", MTX_DEF); if_attach(ifp); @@ -1797,7 +1798,7 @@ pfsyncstats.pfsyncs_opackets++; #ifdef __FreeBSD__ - if (IF_HANDOFF(&sc->sc_ifq, m, NULL)) + if (!IF_HANDOFF(&sc->sc_ifq, m, NULL)) pfsyncstats.pfsyncs_oerrors++; callout_reset(&sc->sc_send_tmo, 1, pfsync_senddef, sc); #else ==== //depot/projects/smpng/sys/dev/acpica/acpi_quirks#5 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/dev/acpica/acpi_quirks,v 1.5 2005/02/22 21:54:20 jhb Exp $ +# $FreeBSD: src/sys/dev/acpica/acpi_quirks,v 1.6 2005/06/26 18:19:14 dwmalone Exp $ # # Quirks for ACPI tables can be added here. # @@ -260,6 +260,14 @@ oem_rev: FADT = 0 quirks: ACPI_Q_BROKEN +# GA-5AX (Rev 4) +# Testing indicates that the ACPI timer runs twice as fast but otherwise +# this system works normally. +name: GBT_AWRDACPI +oem: FADT "GBT " "AWRDACPI" +oem_rev: FADT <= 0x42302e31 +quirks: ACPI_Q_TIMER + # Hitachi Flora 220CX name: Hitachi_Flora_220CX oem: FADT "HTCLTD" "HTC2041 " ==== //depot/projects/smpng/sys/dev/ata/ata-disk.c#51 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-disk.c,v 1.188 2005/05/16 13:07:26 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-disk.c,v 1.189 2005/06/27 09:12:11 sos Exp $"); #include "opt_ata.h" #include @@ -203,8 +203,7 @@ struct ata_channel *ch = device_get_softc(device_get_parent(dev)); struct ata_device *atadev = device_get_softc(dev); - /* if detach pending flag set, return error */ - + /* if detach pending, return error */ if (((atadev->unit == ATA_MASTER) && !(ch->devices & ATA_ATA_MASTER)) || ((atadev->unit == ATA_SLAVE) && !(ch->devices & ATA_ATA_SLAVE))) { return 1; @@ -327,7 +326,6 @@ do { DELAY(20); } while (ch->hw.end_transaction(&request) == ATA_OP_CONTINUES); - ata_finish(&request); } if (request.status & ATA_S_ERROR) return EIO; @@ -341,14 +339,17 @@ ATA_SETMODE(device_get_parent(dev), dev); - /* enable read caching */ - ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_ENAB_RCACHE, 0, 0); + /* enable readahead caching */ + if (atadev->param.support.command1 & ATA_SUPPORT_LOOKAHEAD) + ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_ENAB_RCACHE, 0, 0); - /* enable write caching if enabled */ - if (ata_wc) - ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_ENAB_WCACHE, 0, 0); - else - ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_DIS_WCACHE, 0, 0); + /* enable write caching if supported and configured */ + if (atadev->param.support.command1 & ATA_SUPPORT_WRITECACHE) { + if (ata_wc) + ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_ENAB_WCACHE, 0, 0); + else + ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_DIS_WCACHE, 0, 0); + } /* use multiple sectors/interrupt if device supports it */ if (ad_version(atadev->param.version_major)) { ==== //depot/projects/smpng/sys/dev/ata/ata-queue.c#27 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-queue.c,v 1.49 2005/05/11 14:36:26 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-queue.c,v 1.50 2005/06/28 09:06:52 sos Exp $"); #include "opt_ata.h" #include @@ -355,6 +355,7 @@ bcopy(ccb, request->u.atapi.ccb, 16); request->data = (caddr_t)&request->u.atapi.sense_data; request->bytecount = sizeof(struct atapi_sense); + request->donecount = 0; request->transfersize = sizeof(struct atapi_sense); request->timeout = 5; request->flags &= (ATA_R_ATAPI | ATA_R_QUIET); ==== //depot/projects/smpng/sys/dev/bge/if_bge.c#56 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.90 2005/06/10 16:49:05 brooks Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.91 2005/06/24 21:43:46 dwhite Exp $"); /* * Broadcom BCM570x family gigabit ethernet driver for FreeBSD. @@ -108,6 +108,8 @@ #include +#include "opt_bge.h" + #define BGE_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP) MODULE_DEPEND(bge, pci, 1, 1, 1); @@ -3454,6 +3456,25 @@ return(EINVAL); switch(IFM_SUBTYPE(ifm->ifm_media)) { case IFM_AUTO: +#ifndef BGE_FAKE_AUTONEG + /* + * The BCM5704 ASIC appears to have a special + * mechanism for programming the autoneg + * advertisement registers in TBI mode. + */ + if (sc->bge_asicrev == BGE_ASICREV_BCM5704) { + uint32_t sgdig; + CSR_WRITE_4(sc, BGE_TX_TBI_AUTONEG, 0); + sgdig = CSR_READ_4(sc, BGE_SGDIG_CFG); + sgdig |= BGE_SGDIGCFG_AUTO| + BGE_SGDIGCFG_PAUSE_CAP| + BGE_SGDIGCFG_ASYM_PAUSE; + CSR_WRITE_4(sc, BGE_SGDIG_CFG, + sgdig|BGE_SGDIGCFG_SEND); + DELAY(5); + CSR_WRITE_4(sc, BGE_SGDIG_CFG, sgdig); + } +#endif break; case IFM_1000_SX: if ((ifm->ifm_media & IFM_GMASK) == IFM_FDX) { ==== //depot/projects/smpng/sys/dev/drm/radeon_cp.c#12 (text+ko) ==== @@ -27,7 +27,7 @@ * Kevin E. Martin * Gareth Hughes * - * $FreeBSD: src/sys/dev/drm/radeon_cp.c,v 1.13 2005/04/16 03:44:44 anholt Exp $ + * $FreeBSD: src/sys/dev/drm/radeon_cp.c,v 1.15 2005/06/28 21:38:08 anholt Exp $ */ #include "dev/drm/drmP.h" @@ -2031,8 +2031,14 @@ break; } + /* Disable initmaps because it is broken on FreeBSD, and results in + * crashes on startup for some. The proper fix will involve being + * smarter about allocating PCI resources. + */ + /* ret = drm_initmap(dev, drm_get_resource_start(dev, 2), - drm_get_resource_len(dev, 2), 2, _DRM_REGISTERS, 0); + drm_get_resource_len(dev, 2), 2, _DRM_REGISTERS, + _DRM_READ_ONLY); if (ret != 0) return ret; @@ -2041,6 +2047,7 @@ _DRM_WRITE_COMBINING); if (ret != 0) return ret; + */ /* The original method of detecting AGP is known to not work correctly, * according to Mike Harris. The solution is to walk the capabilities ==== //depot/projects/smpng/sys/dev/ep/if_ep.c#21 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep.c,v 1.137 2005/06/10 16:49:07 brooks Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep.c,v 1.138 2005/06/26 04:19:45 imp Exp $"); /* * Modified from the FreeBSD 1.1.5.1 version by: @@ -129,7 +129,7 @@ * before */ int -get_e(struct ep_softc *sc, uint16_t offset, uint16_t *result) +ep_get_e(struct ep_softc *sc, uint16_t offset, uint16_t *result) { if (eeprom_rdy(sc)) @@ -158,7 +158,7 @@ GO_WINDOW(sc, 0); for (i = EEPROM_NODE_ADDR_0; i <= EEPROM_NODE_ADDR_2; i++) { - error = get_e(sc, i, &result); + error = ep_get_e(sc, i, &result); if (error) return (error); macaddr[i] = htons(result); @@ -203,12 +203,12 @@ GO_WINDOW(sc, 0); sc->epb.cmd_off = 0; - error = get_e(sc, EEPROM_PROD_ID, &result); + error = ep_get_e(sc, EEPROM_PROD_ID, &result); if (error) goto bad; sc->epb.prod_id = result; - error = get_e(sc, EEPROM_RESOURCE_CFG, &result); + error = ep_get_e(sc, EEPROM_RESOURCE_CFG, &result); if (error) goto bad; sc->epb.res_cfg = result; ==== //depot/projects/smpng/sys/dev/ep/if_ep_isa.c#12 (text+ko) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep_isa.c,v 1.26 2005/01/20 19:39:33 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep_isa.c,v 1.27 2005/06/26 04:19:45 imp Exp $"); #include #include @@ -361,13 +361,13 @@ uint8_t cksum_high = 0; uint8_t cksum_low = 0; - error = get_e(sc, 0x0f, &val); + error = ep_get_e(sc, 0x0f, &val); if (error) return (ENXIO); cksum = val; for (i = 0; i < 0x0f; i++) { - error = get_e(sc, i, &val); + error = ep_get_e(sc, i, &val); if (error) return (ENXIO); switch (i) { ==== //depot/projects/smpng/sys/dev/ep/if_ep_pccard.c#19 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep_pccard.c,v 1.44 2005/06/24 14:36:52 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ep/if_ep_pccard.c,v 1.46 2005/06/28 21:56:04 imp Exp $"); #include #include @@ -58,121 +58,57 @@ #include #include -#include "card_if.h" #include "pccarddevs.h" -static const char *ep_pccard_identify(u_short id); - -/* - * Initialize the device - called from Slot manager. - */ -static int -ep_pccard_probe(device_t dev) +struct ep_pccard_product { - struct ep_softc *sc = device_get_softc(dev); - struct ep_board *epb = &sc->epb; - const char *desc; - uint16_t result; - int error; + struct pccard_product prod; + int chipset; +}; - error = ep_alloc(dev); - if (error) - return (error); +#define EP_CHIP_589 1 /* Classic 3c5x9 chipset */ +#define EP_CHIP_574 2 /* Roadrunner */ - /* - * It appears that the eeprom comes in two sizes. There's - * a 512 byte eeprom and a 2k eeprom. Bit 13 of the eeprom - * command register is supposed to contain the size of the - * eeprom. - */ - /* - * XXX - Certain (newer?) 3Com cards need epb->cmd_off == - * 2. Sadly, you need to have a correct cmd_off in order to - * identify the card. So we have to hit it with both and - * cross our virtual fingers. There's got to be a better way - * to do this. jyoung@accessus.net 09/11/1999 - */ +static const struct ep_pccard_product ep_pccard_products[] = { + { PCMCIA_CARD(3COM, 3C1), EP_CHIP_589 }, + { PCMCIA_CARD(3COM, 3C562), EP_CHIP_589 }, + { PCMCIA_CARD(3COM, 3C589), EP_CHIP_589 }, + { PCMCIA_CARD(3COM, 3CXEM556), EP_CHIP_589 }, + { PCMCIA_CARD(3COM, 3CXEM556INT), EP_CHIP_589 }, + { PCMCIA_CARD(3COM, 3C574), EP_CHIP_574 }, + { PCMCIA_CARD(3COM, 3CCFEM556BI), EP_CHIP_574 }, + { { NULL } } +}; - epb->cmd_off = 0; - - /* XXX check return */ - error = get_e(sc, EEPROM_PROD_ID, &result); - epb->prod_id = result; - - if ((desc = ep_pccard_identify(epb->prod_id)) == NULL) { - if (bootverbose) - device_printf(dev, "Pass 1 of 2 detection " - "failed (nonfatal) id 0x%x\n", epb->prod_id); - epb->cmd_off = 2; - /* XXX check return */ - error = get_e(sc, EEPROM_PROD_ID, &result); - epb->prod_id = result; - if ((desc = ep_pccard_identify(epb->prod_id)) == NULL) { - device_printf(dev, "Unit failed to come ready or " - "product ID unknown! (id 0x%x)\n", epb->prod_id); - ep_free(dev); - return (ENXIO); - } - } - device_set_desc(dev, desc); - - /* - * Newer cards supported by this device need to have their - * MAC address set. - */ - error = ep_get_macaddr(sc, (u_char *)&IFP2ENADDR(sc->ifp)); - - ep_free(dev); - return (0); -} - -static const char * -ep_pccard_identify(u_short id) +static const struct ep_pccard_product * +ep_pccard_lookup(device_t dev) { - /* Determine device type and associated MII capabilities */ - switch (id) { - case 0x6055: /* 3C556 */ - return ("3Com 3C556"); - case 0x4057: /* 3C574 */ - return ("3Com 3C574"); - case 0x4b57: /* 3C574B */ - return ("3Com 3C574B, Megahertz 3CCFE574BT or " - "Fast Etherlink 3C574-TX"); - case 0x2b57: /* 3CXSH572BT */ - return ("3Com OfficeConnect 572BT"); - case 0x9058: /* 3C589 */ - return ("3Com Etherlink III 3C589"); - case 0x2056: /* 3C562/3C563 */ - return ("3Com 3C562D/3C563D"); - case 0x0010: /* 3C1 */ - return ("3Com Megahertz C1"); - case 0x0035: - return ("3Com 3CCEM556"); - default: - return (NULL); - } + return ((const struct ep_pccard_product *)pccard_product_lookup(dev, + (const struct pccard_product *)ep_pccard_products, + sizeof(ep_pccard_products[0]), NULL)); } static int -ep_pccard_card_attach(struct ep_board * epb) +ep_pccard_probe(device_t dev) { - /* Determine device type and associated MII capabilities */ - switch (epb->prod_id) { - case 0x6055: /* 3C556 */ - case 0x2b57: /* 3C572BT */ - case 0x4057: /* 3C574, 3C574-TX */ - case 0x4b57: /* 3C574B */ - epb->mii_trans = 1; - return (1); - case 0x2056: /* 3C562D/3C563D */ - case 0x9058: /* 3C589 */ - case 0x0010: /* 3C1 */ - case 0x0035: /* 3C[XC]EM556 */ - epb->mii_trans = 0; - return (1); - default: - return (0); - } + const struct ep_pccard_product *pp; + int error; + uint32_t fcn = PCCARD_FUNCTION_UNSPEC; + + /* Make sure we're a network function */ + error = pccard_get_function(dev, &fcn); + if (error != 0) + return (error); + if (fcn != PCCARD_FUNCTION_NETWORK) + return (ENXIO); + + /* Check to see if we know about this card */ + if ((pp = ep_pccard_lookup(dev)) == NULL) + return EIO; + if (pp->prod.pp_name != NULL) + device_set_desc(dev, pp->prod.pp_name); + + return 0; } static int @@ -181,34 +117,30 @@ struct ep_softc *sc = device_get_softc(dev); uint16_t result; int error = 0; + const struct ep_pccard_product *pp; + if ((pp = ep_pccard_lookup(dev)) == NULL) + panic("ep_pccard_attach: can't find product in attach."); + if ((error = ep_alloc(dev))) { device_printf(dev, "ep_alloc() failed! (%d)\n", error); goto bad; } - sc->epb.cmd_off = 0; - /* XXX check return */ - error = get_e(sc, EEPROM_PROD_ID, &result); - sc->epb.prod_id = result; - - if (!ep_pccard_card_attach(&sc->epb)) { + if (pp->chipset == EP_CHIP_589) { + sc->epb.mii_trans = 0; + sc->epb.cmd_off = 0; + } else { + sc->epb.mii_trans = 1; sc->epb.cmd_off = 2; - error = get_e(sc, EEPROM_PROD_ID, &result); - sc->epb.prod_id = result; - error = get_e(sc, EEPROM_RESOURCE_CFG, &result); - sc->epb.res_cfg = result; - if (!ep_pccard_card_attach(&sc->epb)) { - device_printf(dev, - "Probe found ID, attach failed so ignore card!\n"); - error = ENXIO; - goto bad; - } } - error = get_e(sc, EEPROM_ADDR_CFG, &result); + + error = ep_get_e(sc, EEPROM_PROD_ID, &result); + sc->epb.prod_id = result; /* ROM size = 0, ROM base = 0 */ /* For now, ignore AUTO SELECT feature of 3C589B and later. */ + error = ep_get_e(sc, EEPROM_ADDR_CFG, &result); CSR_WRITE_2(sc, EP_W0_ADDRESS_CFG, result & 0xc000); /* @@ -240,8 +172,8 @@ device_printf(dev, "ep_attach() failed! (%d)\n", error); goto bad; } - if ((error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE, ep_intr, - sc, &sc->ep_intrhand))) { + if ((error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE, + ep_intr, sc, &sc->ep_intrhand))) { device_printf(dev, "bus_setup_intr() failed! (%d)\n", error); goto bad; } @@ -251,51 +183,12 @@ return (error); } -static const struct pccard_product ep_pccard_products[] = { - PCMCIA_CARD(3COM, 3C1), - PCMCIA_CARD(3COM, 3C562), - PCMCIA_CARD(3COM, 3C574), /* ROADRUNNER */ - PCMCIA_CARD(3COM, 3C589), - PCMCIA_CARD(3COM, 3CCFEM556BI), /* ROADRUNNER */ - PCMCIA_CARD(3COM, 3CXEM556), - PCMCIA_CARD(3COM, 3CXEM556INT), - {NULL} -}; - -static int -ep_pccard_match(device_t dev) -{ - const struct pccard_product *pp; - int error; - uint32_t fcn = PCCARD_FUNCTION_UNSPEC; - - /* Make sure we're a network function */ - error = pccard_get_function(dev, &fcn); - if (error != 0) - return (error); - if (fcn != PCCARD_FUNCTION_NETWORK) - return (ENXIO); - - if ((pp = pccard_product_lookup(dev, ep_pccard_products, - sizeof(ep_pccard_products[0]), NULL)) != NULL) { - if (pp->pp_name != NULL) - device_set_desc(dev, pp->pp_name); - return 0; - } - return EIO; -} - static device_method_t ep_pccard_methods[] = { /* Device interface */ - DEVMETHOD(device_probe, pccard_compat_probe), - DEVMETHOD(device_attach, pccard_compat_attach), + DEVMETHOD(device_probe, ep_pccard_probe), + DEVMETHOD(device_attach, ep_pccard_attach), DEVMETHOD(device_detach, ep_detach), - /* Card interface */ - DEVMETHOD(card_compat_match, ep_pccard_match), - DEVMETHOD(card_compat_probe, ep_pccard_probe), - DEVMETHOD(card_compat_attach, ep_pccard_attach), - {0, 0} }; ==== //depot/projects/smpng/sys/dev/ep/if_epvar.h#9 (text+ko) ==== @@ -19,7 +19,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/ep/if_epvar.h,v 1.16 2005/06/10 16:49:07 brooks Exp $ + * $FreeBSD: src/sys/dev/ep/if_epvar.h,v 1.17 2005/06/26 04:19:45 imp Exp $ */ struct ep_board { @@ -79,7 +79,7 @@ void ep_get_media(struct ep_softc *); int ep_attach(struct ep_softc *); void ep_intr(void *); -int get_e(struct ep_softc *, uint16_t, uint16_t *); +int ep_get_e(struct ep_softc *, uint16_t, uint16_t *); int ep_get_macaddr(struct ep_softc *, u_char *); #define CSR_READ_1(sc, off) (bus_space_read_1((sc)->bst, (sc)->bsh, off)) ==== //depot/projects/smpng/sys/dev/iicbus/if_ic.c#13 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/iicbus/if_ic.c,v 1.22 2005/06/10 16:49:10 brooks Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/iicbus/if_ic.c,v 1.23 2005/06/26 18:11:09 dwmalone Exp $"); /* * I2C bus IP driver @@ -374,7 +374,13 @@ int s, len, sent; >>> TRUNCATED FOR MAIL (1000 lines) <<<