From owner-p4-projects@FreeBSD.ORG Tue Jun 10 21:12:50 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5680E106567F; Tue, 10 Jun 2008 21:12:50 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 17BDA106567D for ; Tue, 10 Jun 2008 21:12:50 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 074158FC24 for ; Tue, 10 Jun 2008 21:12:50 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m5ALCnnl058644 for ; Tue, 10 Jun 2008 21:12:49 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m5ALCnU4058640 for perforce@freebsd.org; Tue, 10 Jun 2008 21:12:49 GMT (envelope-from julian@freebsd.org) Date: Tue, 10 Jun 2008 21:12:49 GMT Message-Id: <200806102112.m5ALCnU4058640@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Cc: Subject: PERFORCE change 143262 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: Tue, 10 Jun 2008 21:12:50 -0000 http://perforce.freebsd.org/chv.cgi?CH=143262 Change 143262 by julian@julian_trafmon1 on 2008/06/10 21:12:34 IFC@143258 Affected files ... .. //depot/projects/vimage/src/sys/arm/xscale/pxa/files.pxa#2 integrate .. //depot/projects/vimage/src/sys/arm/xscale/pxa/pxa_obio.c#2 integrate .. //depot/projects/vimage/src/sys/arm/xscale/pxa/pxa_space.c#2 integrate .. //depot/projects/vimage/src/sys/dev/bce/if_bce.c#14 integrate .. //depot/projects/vimage/src/sys/dev/bce/if_bcereg.h#9 integrate .. //depot/projects/vimage/src/sys/dev/ciss/ciss.c#11 integrate .. //depot/projects/vimage/src/sys/dev/tx/if_tx.c#3 integrate .. //depot/projects/vimage/src/sys/dev/tx/if_txvar.h#2 integrate .. //depot/projects/vimage/src/sys/dev/usb/ehci.c#8 integrate .. //depot/projects/vimage/src/sys/dev/usb/ehcivar.h#3 integrate .. //depot/projects/vimage/src/sys/dev/usb/uplcom.c#7 integrate .. //depot/projects/vimage/src/sys/kern/uipc_sem.c#6 integrate .. //depot/projects/vimage/src/sys/security/audit/audit_worker.c#8 integrate Differences ... ==== //depot/projects/vimage/src/sys/arm/xscale/pxa/files.pxa#2 (text+ko) ==== @@ -1,5 +1,6 @@ -# $FreeBSD: src/sys/arm/xscale/pxa/files.pxa,v 1.1 2008/06/06 05:08:09 benno Exp $ +# $FreeBSD: src/sys/arm/xscale/pxa/files.pxa,v 1.2 2008/06/10 03:44:14 kevlo Exp $ +arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/irq_dispatch.S standard ==== //depot/projects/vimage/src/sys/arm/xscale/pxa/pxa_obio.c#2 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/pxa/pxa_obio.c,v 1.1 2008/06/06 05:08:09 benno Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/pxa/pxa_obio.c,v 1.2 2008/06/10 06:06:15 kevlo Exp $"); #include #include @@ -183,6 +183,12 @@ } static int +pxa_teardown_intr(device_t dev, device_t child, struct resource *ires, + void *cookie) +{ + return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, ires, cookie));} + +static int pxa_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) { struct obio_device *od; @@ -313,19 +319,20 @@ } static device_method_t pxa_methods[] = { - DEVMETHOD(device_identify, pxa_identify), - DEVMETHOD(device_probe, pxa_probe), - DEVMETHOD(device_attach, pxa_attach), + DEVMETHOD(device_identify, pxa_identify), + DEVMETHOD(device_probe, pxa_probe), + DEVMETHOD(device_attach, pxa_attach), - DEVMETHOD(bus_print_child, pxa_print_child), + DEVMETHOD(bus_print_child, pxa_print_child), - DEVMETHOD(bus_read_ivar, pxa_read_ivar), - DEVMETHOD(bus_setup_intr, pxa_setup_intr), + DEVMETHOD(bus_read_ivar, pxa_read_ivar), + DEVMETHOD(bus_setup_intr, pxa_setup_intr), + DEVMETHOD(bus_teardown_intr, pxa_teardown_intr), - DEVMETHOD(bus_get_resource_list, pxa_get_resource_list), - DEVMETHOD(bus_alloc_resource, pxa_alloc_resource), - DEVMETHOD(bus_release_resource, pxa_release_resource), - DEVMETHOD(bus_activate_resource, pxa_activate_resource), + DEVMETHOD(bus_get_resource_list, pxa_get_resource_list), + DEVMETHOD(bus_alloc_resource, pxa_alloc_resource), + DEVMETHOD(bus_release_resource, pxa_release_resource), + DEVMETHOD(bus_activate_resource, pxa_activate_resource), {0, 0} }; ==== //depot/projects/vimage/src/sys/arm/xscale/pxa/pxa_space.c#2 (text+ko) ==== @@ -40,7 +40,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/pxa/pxa_space.c,v 1.1 2008/06/06 05:08:09 benno Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/pxa/pxa_space.c,v 1.2 2008/06/10 03:44:14 kevlo Exp $"); #include #include @@ -48,13 +48,6 @@ #include #include -#include - -#include -#include -#include -#include - #include #include @@ -63,7 +56,6 @@ MALLOC_DEFINE(M_PXATAG, "PXA bus_space tags", "Bus_space tags for PXA"); /* Prototypes for all the bus_space structure functions */ -bs_protos(obio); bs_protos(generic); bs_protos(generic_armv4); bs_protos(pxa); @@ -77,16 +69,16 @@ (void *) 0, /* mapping/unmapping */ - obio_bs_map, - obio_bs_unmap, - obio_bs_subregion, + generic_bs_map, + generic_bs_unmap, + generic_bs_subregion, /* allocation/deallocation */ - obio_bs_alloc, - obio_bs_free, + generic_bs_alloc, + generic_bs_free, /* barrier */ - obio_bs_barrier, + generic_bs_barrier, /* read (single) */ pxa_bs_r_1, @@ -174,94 +166,6 @@ return ((bus_space_tag_t)tag); } -int -obio_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags, - bus_space_handle_t *bshp) -{ - const struct pmap_devmap *pd; - vm_paddr_t startpa, endpa, pa, offset; - vm_offset_t va; - pt_entry_t *pte; - - if ((pd = pmap_devmap_find_pa(bpa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (bpa - pd->pd_pa); - return (0); - } - - endpa = round_page(bpa + size); - offset = bpa & PAGE_MASK; - startpa = trunc_page(bpa); - - va = kmem_alloc(kernel_map, endpa - startpa); - if (va == 0) - return (ENOMEM); - - *bshp = va + offset; - - for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter(va, pa); - pte = vtopte(va); - *pte &= ~L2_S_CACHE_MASK; - PTE_SYNC(pte); - } - - return (0); -} - -int -obio_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, bus_size_t size, - bus_size_t alignment, bus_size_t boundary, int flags, bus_addr_t *bpap, - bus_space_handle_t *bshp) -{ - - panic("obio_bs_alloc(): not implemented"); -} - - -void -obio_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) -{ - vm_offset_t va, endva; - - if (pmap_devmap_find_va((vm_offset_t)t, size) != NULL) { - /* Device was statically mapped; nothing to do. */ - return; - } - - endva = round_page((vm_offset_t)t + size); - va = trunc_page((vm_offset_t)t); - - while (va < endva) { - pmap_kremove(va); - va += PAGE_SIZE; - } - kmem_free(kernel_map, va, endva - va); -} - -void -obio_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) -{ - - panic("obio_bs_free(): not implemented"); -} - -int -obio_bs_subregion(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t size, bus_space_handle_t *nbshp) -{ - - *nbshp = bsh + offset; - return (0); -} - -void -obio_bs_barrier(void *t, bus_space_handle_t bsh, bus_size_t offset, - bus_size_t len, int flags) -{ - - /* Nothing to do. */ -} #define READ_SINGLE(type, proto, base) \ type \ ==== //depot/projects/vimage/src/sys/dev/bce/if_bce.c#14 (text) ==== @@ -29,7 +29,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.40 2008/05/30 18:26:37 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.41 2008/06/10 02:19:11 davidch Exp $"); /* * The following controllers are supported by this driver: @@ -82,6 +82,11 @@ int bce_debug_bootcode_running_failure = 0; #endif +/****************************************************************************/ +/* BCE Build Time Options */ +/****************************************************************************/ +#define BCE_USE_SPLIT_HEADER 1 +/* #define BCE_NVRAM_WRITE_SUPPORT 1 */ /****************************************************************************/ /* PCI Device ID Table */ @@ -224,16 +229,22 @@ static void bce_dump_mbuf (struct bce_softc *, struct mbuf *); static void bce_dump_tx_mbuf_chain (struct bce_softc *, u16, int); static void bce_dump_rx_mbuf_chain (struct bce_softc *, u16, int); -static void bce_dump_pg_mbuf_chain (struct bce_softc *, u16, int); +#ifdef BCE_USE_SPLIT_HEADER +static void bce_dump_pg_mbuf_chain (struct bce_softc *, u16, int); +#endif static void bce_dump_txbd (struct bce_softc *, int, struct tx_bd *); static void bce_dump_rxbd (struct bce_softc *, int, struct rx_bd *); -static void bce_dump_pgbd (struct bce_softc *, int, struct rx_bd *); +#ifdef BCE_USE_SPLIT_HEADER +static void bce_dump_pgbd (struct bce_softc *, int, struct rx_bd *); +#endif static void bce_dump_l2fhdr (struct bce_softc *, int, struct l2_fhdr *); static void bce_dump_ctx (struct bce_softc *, u16); static void bce_dump_ftqs (struct bce_softc *); static void bce_dump_tx_chain (struct bce_softc *, u16, int); static void bce_dump_rx_chain (struct bce_softc *, u16, int); -static void bce_dump_pg_chain (struct bce_softc *, u16, int); +#ifdef BCE_USE_SPLIT_HEADER +static void bce_dump_pg_chain (struct bce_softc *, u16, int); +#endif static void bce_dump_status_block (struct bce_softc *); static void bce_dump_stats_block (struct bce_softc *); static void bce_dump_driver_state (struct bce_softc *); @@ -294,7 +305,9 @@ static int bce_chipinit (struct bce_softc *); static int bce_blockinit (struct bce_softc *); static int bce_get_rx_buf (struct bce_softc *, struct mbuf *, u16 *, u16 *, u32 *); -static int bce_get_pg_buf (struct bce_softc *, struct mbuf *, u16 *, u16 *); +#ifdef BCE_USE_SPLIT_HEADER +static int bce_get_pg_buf (struct bce_softc *, struct mbuf *, u16 *, u16 *); +#endif static int bce_init_tx_chain (struct bce_softc *); static void bce_free_tx_chain (struct bce_softc *); @@ -302,10 +315,12 @@ static int bce_init_rx_chain (struct bce_softc *); static void bce_fill_rx_chain (struct bce_softc *); static void bce_free_rx_chain (struct bce_softc *); - + +#ifdef BCE_USE_SPLIT_HEADER static int bce_init_pg_chain (struct bce_softc *); static void bce_fill_pg_chain (struct bce_softc *); -static void bce_free_pg_chain (struct bce_softc *); +static void bce_free_pg_chain (struct bce_softc *); +#endif static int bce_tx_encap (struct bce_softc *, struct mbuf **); static void bce_start_locked (struct ifnet *); @@ -778,10 +793,18 @@ /* Use standard mbuf sizes for buffer allocation. */ #ifdef BCE_USE_SPLIT_HEADER sc->rx_bd_mbuf_alloc_size = MHLEN; + /* Make sure offset is 16 byte aligned for hardware. */ + sc->rx_bd_mbuf_align_pad = roundup2((MSIZE - MHLEN), 16) - + (MSIZE - MHLEN); + sc->rx_bd_mbuf_data_len = sc->rx_bd_mbuf_alloc_size - + sc->rx_bd_mbuf_align_pad; + sc->pg_bd_mbuf_alloc_size = MCLBYTES; #else sc->rx_bd_mbuf_alloc_size = MCLBYTES; -#endif - sc->pg_bd_mbuf_alloc_size = MCLBYTES; + sc->rx_bd_mbuf_align_pad = roundup2(MCLBYTES, 16) - MCLBYTES; + sc->rx_bd_mbuf_data_len = sc->rx_bd_mbuf_alloc_size - + sc->rx_bd_mbuf_align_pad; +#endif ifp->if_snd.ifq_drv_maxlen = USABLE_TX_BD; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); @@ -856,6 +879,9 @@ ((sc->bce_flags & BCE_PCI_32BIT_FLAG) ? "32-bit" : "64-bit"), sc->bus_speed_mhz); printf("F/W (0x%08X); Flags( ", sc->bce_fw_ver); +#ifdef BCE_USE_SPLIT_HEADER + printf("SPLT "); +#endif if (sc->bce_flags & BCE_MFW_ENABLE_FLAG) printf("MFW "); if (sc->bce_flags & BCE_USING_MSI_FLAG) @@ -2246,6 +2272,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /* Free, unmap and destroy all page buffer descriptor chain pages. */ for (i = 0; i < PG_PAGES; i++ ) { if (sc->pg_bd_chain[i] != NULL) { @@ -2272,6 +2299,7 @@ bus_dma_tag_destroy(sc->pg_bd_chain_tag); sc->pg_bd_chain_tag = NULL; } +#endif /* Unload and destroy the TX mbuf maps. */ @@ -2308,6 +2336,7 @@ sc->rx_mbuf_tag = NULL; } +#ifdef BCE_USE_SPLIT_HEADER /* Unload and destroy the page mbuf maps. */ for (i = 0; i < TOTAL_PG_BD; i++) { if (sc->pg_mbuf_map[i] != NULL) { @@ -2324,6 +2353,7 @@ bus_dma_tag_destroy(sc->pg_mbuf_tag); sc->pg_mbuf_tag = NULL; } +#endif /* Destroy the parent tag */ if (sc->parent_tag != NULL) { @@ -2376,7 +2406,21 @@ /* Allocate any DMA memory needed by the driver. */ /* */ /* Allocates DMA memory needed for the various global structures needed by */ -/* hardware. */ +/* hardware. */ +/* */ +/* Memory alignment requirements: */ +/* -----------------+----------+----------+ */ +/* Data Structure | 5706 | 5708 | */ +/* -----------------+----------+----------+ */ +/* Status Block | 8 bytes | 8 bytes | */ +/* Statistics Block | 8 bytes | 8 bytes | */ +/* RX Buffers | 16 bytes | 16 bytes | */ +/* PG Buffers | none | none | */ +/* TX Buffers | none | none | */ +/* Chain Pages(1) | 4KiB | 4KiB | */ +/* -----------------+----------+----------+ */ +/* */ +/* (1) Must align with CPU page size (BCM_PAGE_SZIE). */ /* */ /* Returns: */ /* 0 for success, positive value for failure. */ @@ -2683,8 +2727,12 @@ /* * Create a DMA tag for RX mbufs. */ +#ifdef BCE_USE_SPLIT_HEADER max_size = max_seg_size = ((sc->rx_bd_mbuf_alloc_size < MCLBYTES) ? - MCLBYTES : sc->rx_bd_mbuf_alloc_size); + MCLBYTES : sc->rx_bd_mbuf_alloc_size); +#else + max_size = max_seg_size = MJUM9BYTES; +#endif if (bus_dma_tag_create(sc->parent_tag, 1, @@ -2715,6 +2763,7 @@ } } +#ifdef BCE_USE_SPLIT_HEADER /* * Create a DMA tag for the page buffer descriptor chain, * allocate and clear the memory, and fetch the physical @@ -2777,7 +2826,7 @@ * Create a DMA tag for page mbufs. */ max_size = max_seg_size = ((sc->pg_bd_mbuf_alloc_size < MCLBYTES) ? - MCLBYTES : sc->rx_bd_mbuf_alloc_size); + MCLBYTES : sc->pg_bd_mbuf_alloc_size); if (bus_dma_tag_create(sc->parent_tag, 1, @@ -2807,6 +2856,7 @@ goto bce_dma_alloc_exit; } } +#endif bce_dma_alloc_exit: DBPRINT(sc, BCE_VERBOSE_RESET, "Exiting %s()\n", __FUNCTION__); @@ -3449,7 +3499,9 @@ bce_disable_intr(sc); /* Free RX buffers. */ - bce_free_pg_chain(sc); +#ifdef BCE_USE_SPLIT_HEADER + bce_free_pg_chain(sc); +#endif bce_free_rx_chain(sc); /* Free TX buffers. */ @@ -3811,8 +3863,12 @@ #ifdef BCE_USE_SPLIT_HEADER MGETHDR(m_new, M_DONTWAIT, MT_DATA); #else - m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + if (sc->rx_bd_mbuf_alloc_size == MCLBYTES) + m_new = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + else + m_new = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, sc->rx_bd_mbuf_alloc_size); #endif + if (m_new == NULL) { sc->mbuf_alloc_failed++; rc = ENOBUFS; @@ -3825,9 +3881,12 @@ m_new = m; } + /* Make sure we have a valid packet header. */ M_ASSERTPKTHDR(m_new); - m_new->m_pkthdr.len = m_new->m_len = sc->rx_bd_mbuf_alloc_size; + /* Initialize the mbuf size and pad if necessary for alignment. */ + m_new->m_pkthdr.len = m_new->m_len = sc->rx_bd_mbuf_alloc_size; + m_adj(m_new, sc->rx_bd_mbuf_align_pad); /* ToDo: Consider calling m_fragment() to test error handling. */ @@ -3838,8 +3897,8 @@ /* Handle any mapping errors. */ if (error) { - BCE_PRINTF("%s(%d): Error mapping mbuf into RX chain!\n", - __FILE__, __LINE__); + BCE_PRINTF("%s(%d): Error mapping mbuf into RX chain (%d)!\n", + __FILE__, __LINE__, error); m_freem(m_new); DBRUN(sc->debug_rx_mbuf_alloc--); @@ -3861,7 +3920,7 @@ rxbd->rx_bd_haddr_hi = htole32(BCE_ADDR_HI(segs[0].ds_addr)); rxbd->rx_bd_len = htole32(segs[0].ds_len); rxbd->rx_bd_flags = htole32(RX_BD_FLAGS_START | RX_BD_FLAGS_END); - *prod_bseq += segs[0].ds_len; + *prod_bseq += segs[0].ds_len; /* Save the mbuf and update our counter. */ sc->rx_mbuf_ptr[*chain_prod] = m_new; @@ -3881,6 +3940,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Encapsulate an mbuf cluster into the page chain. */ /* */ @@ -3991,6 +4051,7 @@ return(rc); } +#endif /* BCE_USE_SPLIT_HEADER */ /****************************************************************************/ @@ -4234,8 +4295,10 @@ DBPRINT(sc, BCE_VERBOSE_RESET, "Entering %s()\n", __FUNCTION__); +#ifdef BCE_USE_SPLIT_HEADER /* Clear the jumbo page chain support. */ - CTX_WR(sc, GET_CID_ADDR(RX_CID), BCE_L2CTX_PG_BUF_SIZE, 0); + CTX_WR(sc, GET_CID_ADDR(RX_CID), BCE_L2CTX_PG_BUF_SIZE, 0); +#endif /* Free any mbufs still in the RX mbuf chain. */ for (i = 0; i < TOTAL_RX_BD; i++) { @@ -4264,6 +4327,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Allocate memory and initialize the page data structures. */ /* Assumes that bce_init_rx_chain() has not already been called. */ @@ -4312,7 +4376,11 @@ CTX_WR(sc, GET_CID_ADDR(RX_CID), BCE_L2CTX_NX_PG_BDHADDR_LO, val); /* Configure the rx_bd and page chain mbuf cluster size. */ - val = (sc->rx_bd_mbuf_alloc_size << 16) | sc->pg_bd_mbuf_alloc_size; +#ifdef BCE_USE_SPLIT_HEADER + val = (sc->rx_bd_mbuf_data_len << 16) | sc->pg_bd_mbuf_alloc_size; +#else + val = (sc->rx_bd_mbuf_data_len << 16); +#endif CTX_WR(sc, GET_CID_ADDR(RX_CID), BCE_L2CTX_PG_BUF_SIZE, val); /* Configure the context reserved for jumbo support. */ @@ -4413,6 +4481,7 @@ DBPRINT(sc, BCE_EXCESSIVE_RESET, "Exiting %s()\n", __FUNCTION__); } +#endif /* BCE_USE_SPLIT_HEADER */ /****************************************************************************/ @@ -4567,9 +4636,13 @@ { struct ifnet *ifp = sc->bce_ifp; struct l2_fhdr *l2fhdr; - unsigned int pages, pkt_len, rem_len; - u16 sw_rx_cons, sw_rx_cons_idx, sw_pg_cons, sw_pg_cons_idx, hw_rx_cons; + unsigned int pkt_len; + u16 sw_rx_cons, sw_rx_cons_idx, hw_rx_cons; u32 status; +#ifdef BCE_USE_SPLIT_HEADER + unsigned int pages, rem_len; + u16 sw_pg_cons, sw_pg_cons_idx; +#endif #ifdef BCE_DEBUG @@ -4583,17 +4656,21 @@ bus_dmamap_sync(sc->rx_bd_chain_tag, sc->rx_bd_chain_map[i], BUS_DMASYNC_POSTWRITE); +#ifdef BCE_USE_SPLIT_HEADER /* Prepare the page chain pages to be accessed by the host CPU. */ for (int i = 0; i < PG_PAGES; i++) bus_dmamap_sync(sc->pg_bd_chain_tag, - sc->pg_bd_chain_map[i], BUS_DMASYNC_POSTWRITE); + sc->pg_bd_chain_map[i], BUS_DMASYNC_POSTWRITE); +#endif /* Get the hardware's view of the RX consumer index. */ hw_rx_cons = sc->hw_rx_cons = bce_get_hw_rx_cons(sc); /* Get working copies of the driver's view of the consumer indices. */ sw_rx_cons = sc->rx_cons; - sw_pg_cons = sc->pg_cons; +#ifdef BCE_USE_SPLIT_HEADER + sw_pg_cons = sc->pg_cons; +#endif DBPRINT(sc, BCE_INFO_RECV, "%s(enter): rx_prod = 0x%04X, " "rx_cons = 0x%04X, rx_prod_bseq = 0x%08X\n", @@ -4656,10 +4733,12 @@ */ m_adj(m0, sizeof(struct l2_fhdr) + ETHER_ALIGN); + +#ifdef BCE_USE_SPLIT_HEADER /* * Check whether the received frame fits in a single * mbuf or not (i.e. packet data + FCS <= - * sc->rx_bd_mbuf_alloc_size bytes). + * sc->rx_bd_mbuf_data_len bytes). */ if (pkt_len > m0->m_len) { /* @@ -4737,7 +4816,8 @@ /* Set the total packet length. */ m0->m_pkthdr.len = m0->m_len = pkt_len; - } + } +#endif /* Remove the trailing Ethernet FCS. */ m_adj(m0, -ETHER_CRC_LEN); @@ -4825,7 +4905,9 @@ if (m0) { /* Make sure we don't lose our place when we release the lock. */ sc->rx_cons = sw_rx_cons; - sc->pg_cons = sw_pg_cons; +#ifdef BCE_USE_SPLIT_HEADER + sc->pg_cons = sw_pg_cons; +#endif BCE_UNLOCK(sc); (*ifp->if_input)(ifp, m0); @@ -4833,7 +4915,9 @@ /* Recover our place. */ sw_rx_cons = sc->rx_cons; - sw_pg_cons = sc->pg_cons; +#ifdef BCE_USE_SPLIT_HEADER + sw_pg_cons = sc->pg_cons; +#endif } /* Refresh hw_cons to see if there's new work */ @@ -4842,8 +4926,10 @@ } /* No new packets to process. Refill the RX and page chains and exit. */ +#ifdef BCE_USE_SPLIT_HEADER sc->pg_cons = sw_pg_cons; - bce_fill_pg_chain(sc); + bce_fill_pg_chain(sc); +#endif sc->rx_cons = sw_rx_cons; bce_fill_rx_chain(sc); @@ -4852,9 +4938,11 @@ bus_dmamap_sync(sc->rx_bd_chain_tag, sc->rx_bd_chain_map[i], BUS_DMASYNC_PREWRITE); +#ifdef BCE_USE_SPLIT_HEADER for (int i = 0; i < PG_PAGES; i++) bus_dmamap_sync(sc->pg_bd_chain_tag, - sc->pg_bd_chain_map[i], BUS_DMASYNC_PREWRITE); + sc->pg_bd_chain_map[i], BUS_DMASYNC_PREWRITE); +#endif DBPRINT(sc, BCE_INFO_RECV, "%s(exit): rx_prod = 0x%04X, " "rx_cons = 0x%04X, rx_prod_bseq = 0x%08X\n", @@ -5089,12 +5177,19 @@ bcopy(IF_LLADDR(sc->bce_ifp), sc->eaddr, ETHER_ADDR_LEN); bce_set_mac_addr(sc); - /* Calculate and program the hardware Ethernet MTU size. */ - if (ifp->if_mtu <= sc->pg_bd_mbuf_alloc_size) - /* Be generous on receive if we have room. */ - ether_mtu = sc->pg_bd_mbuf_alloc_size; + /* + * Calculate and program the hardware Ethernet MTU + * size. Be generous on the receive if we have room. + */ +#ifdef BCE_USE_SPLIT_HEADER + if (ifp->if_mtu <= (sc->rx_bd_mbuf_data_len + sc->pg_bd_mbuf_alloc_size)) + ether_mtu = sc->rx_bd_mbuf_data_len + sc->pg_bd_mbuf_alloc_size; +#else + if (ifp->if_mtu <= sc->rx_bd_mbuf_data_len) + ether_mtu = sc->rx_bd_mbuf_data_len; +#endif else - ether_mtu = ifp->if_mtu; + ether_mtu = ifp->if_mtu; ether_mtu += ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ETHER_CRC_LEN; @@ -5110,14 +5205,18 @@ REG_WR(sc, BCE_EMAC_RX_MTU_SIZE, ether_mtu); DBPRINT(sc, BCE_INFO_LOAD, - "%s(): rx_bd_mbuf_alloc_size = %d, pg_bd_mbuf_alloc_size = %d\n", - __FUNCTION__, sc->rx_bd_mbuf_alloc_size, sc->pg_bd_mbuf_alloc_size); + "%s(): rx_bd_mbuf_alloc_size = %d, rx_bce_mbuf_data_len = %d, " + "rx_bd_mbuf_align_pad = %d, pg_bd_mbuf_alloc_size = %d\n", + __FUNCTION__, sc->rx_bd_mbuf_alloc_size, sc->rx_bd_mbuf_data_len, + sc->rx_bd_mbuf_align_pad, sc->pg_bd_mbuf_alloc_size); /* Program appropriate promiscuous/multicast filtering. */ bce_set_rx_mode(sc); +#ifdef BCE_USE_SPLIT_HEADER /* Init page buffer descriptor chain. */ - bce_init_pg_chain(sc); + bce_init_pg_chain(sc); +#endif /* Init RX buffer descriptor chain. */ bce_init_rx_chain(sc); @@ -5583,7 +5682,24 @@ BCE_LOCK(sc); ifp->if_mtu = ifr->ifr_mtu; - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; + ifp->if_drv_flags &= ~IFF_DRV_RUNNING; +#ifdef BCE_USE_SPLIT_HEADER + /* No buffer allocation size changes are necessary. */ +#else + /* Recalculate our buffer allocation sizes. */ + if ((ifp->if_mtu + ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ETHER_CRC_LEN) > MCLBYTES) { + sc->rx_bd_mbuf_alloc_size = MJUM9BYTES; + sc->rx_bd_mbuf_align_pad = roundup2(MJUM9BYTES, 16) - MJUM9BYTES; + sc->rx_bd_mbuf_data_len = sc->rx_bd_mbuf_alloc_size - + sc->rx_bd_mbuf_align_pad; + } else { + sc->rx_bd_mbuf_alloc_size = MCLBYTES; + sc->rx_bd_mbuf_align_pad = roundup2(MCLBYTES, 16) - MCLBYTES; + sc->rx_bd_mbuf_data_len = sc->rx_bd_mbuf_alloc_size - + sc->rx_bd_mbuf_align_pad; + } +#endif + bce_init_locked(sc); BCE_UNLOCK(sc); break; @@ -6233,7 +6349,9 @@ bce_stats_update(sc); /* Top off the receive and page chains. */ - bce_fill_pg_chain(sc); +#ifdef BCE_USE_SPLIT_HEADER + bce_fill_pg_chain(sc); +#endif bce_fill_rx_chain(sc); /* Check that chip hasn't hung. */ @@ -6406,6 +6524,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Provides a sysctl interface to allow dumping the page chain. */ /* */ @@ -6431,7 +6550,8 @@ } return error; -} +} +#endif /****************************************************************************/ @@ -6923,10 +7043,12 @@ (void *)sc, 0, bce_sysctl_dump_tx_chain, "I", "Dump tx_bd chain"); +#ifdef BCE_USE_SPLIT_HEADER SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "dump_pg_chain", CTLTYPE_INT | CTLFLAG_RW, (void *)sc, 0, - bce_sysctl_dump_pg_chain, "I", "Dump page chain"); + bce_sysctl_dump_pg_chain, "I", "Dump page chain"); +#endif SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "breakpoint", CTLTYPE_INT | CTLFLAG_RW, @@ -7104,6 +7226,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Prints out the mbufs in the mbuf page chain. */ /* */ @@ -7132,7 +7255,8 @@ "----------------------------" "----------------" "----------------------------\n"); -} +} +#endif /****************************************************************************/ @@ -7226,6 +7350,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Prints out a rx_bd structure in the page chain. */ /* */ @@ -7248,7 +7373,8 @@ "flags = 0x%08X\n", idx, pgbd->rx_bd_haddr_hi, pgbd->rx_bd_haddr_lo, pgbd->rx_bd_len, pgbd->rx_bd_flags); -} +} +#endif /****************************************************************************/ @@ -7612,6 +7738,7 @@ } +#ifdef BCE_USE_SPLIT_HEADER /****************************************************************************/ /* Prints out the page chain. */ /* */ @@ -7654,7 +7781,8 @@ "----------------------------" "----------------" "----------------------------\n"); -} +} +#endif /****************************************************************************/ @@ -8091,11 +8219,13 @@ "0x%08X:%08X - (sc->rx_bd_chain) rx_bd chain virtual address\n", val_hi, val_lo); +#ifdef BCE_USE_SPLIT_HEADER val_hi = BCE_ADDR_HI(sc->pg_bd_chain); val_lo = BCE_ADDR_LO(sc->pg_bd_chain); BCE_PRINTF( "0x%08X:%08X - (sc->pg_bd_chain) page chain virtual address\n", - val_hi, val_lo); + val_hi, val_lo); +#endif val_hi = BCE_ADDR_HI(sc->tx_mbuf_ptr); val_lo = BCE_ADDR_LO(sc->tx_mbuf_ptr); @@ -8109,11 +8239,13 @@ "0x%08X:%08X - (sc->rx_mbuf_ptr) rx mbuf chain virtual address\n", val_hi, val_lo); +#ifdef BCE_USE_SPLIT_HEADER val_hi = BCE_ADDR_HI(sc->pg_mbuf_ptr); val_lo = BCE_ADDR_LO(sc->pg_mbuf_ptr); BCE_PRINTF( "0x%08X:%08X - (sc->pg_mbuf_ptr) page mbuf chain virtual address\n", - val_hi, val_lo); + val_hi, val_lo); +#endif BCE_PRINTF(" 0x%08X - (sc->interrupts_generated) h/w intrs\n", sc->interrupts_generated); @@ -8160,6 +8292,7 @@ BCE_PRINTF(" 0x%08X - (sc->free_rx_bd) free rx_bd's\n", sc->free_rx_bd); +#ifdef BCE_USE_SPLIT_HEADER BCE_PRINTF(" 0x%04X(0x%04X) - (sc->pg_prod) page producer index\n", sc->pg_prod, (u16) PG_CHAIN_IDX(sc->pg_prod)); @@ -8174,6 +8307,7 @@ BCE_PRINTF("0x%08X/%08X - (sc->pg_low_watermark) page low watermark\n", sc->pg_low_watermark, sc->max_pg_bd); +#endif BCE_PRINTF(" 0x%08X - (sc->mbuf_alloc_failed) " "mbuf alloc failures\n", @@ -8482,16 +8616,13 @@ bce_unfreeze_controller(sc); bce_dump_txbd(sc, 0, NULL); bce_dump_rxbd(sc, 0, NULL); - bce_dump_pgbd(sc, 0, NULL); bce_dump_tx_mbuf_chain(sc, 0, USABLE_TX_BD); bce_dump_rx_mbuf_chain(sc, 0, USABLE_RX_BD); - bce_dump_pg_mbuf_chain(sc, 0, USABLE_PG_BD); bce_dump_l2fhdr(sc, 0, NULL); bce_dump_ctx(sc, RX_CID); bce_dump_ftqs(sc); bce_dump_tx_chain(sc, 0, USABLE_TX_BD); bce_dump_rx_chain(sc, 0, USABLE_RX_BD); - bce_dump_pg_chain(sc, 0, USABLE_PG_BD); bce_dump_status_block(sc); bce_dump_stats_block(sc); bce_dump_driver_state(sc); @@ -8500,6 +8631,11 @@ bce_dump_txp_state(sc); bce_dump_rxp_state(sc); bce_dump_tpat_state(sc); +#ifdef BCE_USE_SPLIT_HEADER + bce_dump_pgbd(sc, 0, NULL); + bce_dump_pg_mbuf_chain(sc, 0, USABLE_PG_BD); + bce_dump_pg_chain(sc, 0, USABLE_PG_BD); +#endif } bce_dump_status_block(sc); ==== //depot/projects/vimage/src/sys/dev/bce/if_bcereg.h#9 (text) ==== @@ -26,7 +26,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/bce/if_bcereg.h,v 1.18 2008/04/11 23:10:40 davidch Exp $ + * $FreeBSD: src/sys/dev/bce/if_bcereg.h,v 1.19 2008/06/10 02:19:11 davidch Exp $ */ #ifndef _BCE_H_DEFINED @@ -131,7 +131,9 @@ /****************************************************************************/ /* Debugging macros and definitions. */ -/****************************************************************************/ +/****************************************************************************/ +/* #define BCE_DEBUG 1 */ + #define BCE_CP_LOAD 0x00000001 #define BCE_CP_SEND 0x00000002 #define BCE_CP_RECV 0x00000004 @@ -466,7 +468,7 @@ * running and there won't be any firmware-driver synchronization during a * driver reset. */ -#define FW_ACK_TIME_OUT_MS 100 +#define FW_ACK_TIME_OUT_MS 1000 #define BCE_DRV_RESET_SIGNATURE 0x00000000 @@ -4924,8 +4926,7 @@ #define BCE_MAX_JUMBO_ETHER_MTU 9018 #define BCE_MAX_JUMBO_ETHER_MTU_VLAN 9022 -// #define BCE_MAX_MTU ETHER_MAX_LEN_JUMBO + ETHER_VLAN_ENCAP_LEN /* 9022 */ - + /****************************************************************************/ /* BCE Device State Data Structure */ /****************************************************************************/ @@ -5047,7 +5048,9 @@ /* Frame size and mbuf allocation size for RX frames. */ u32 max_frame_size; - int rx_bd_mbuf_alloc_size; + int rx_bd_mbuf_alloc_size; + int rx_bd_mbuf_data_len; + int rx_bd_mbuf_align_pad; int pg_bd_mbuf_alloc_size; /* Receive mode settings (i.e promiscuous, multicast, etc.). */ ==== //depot/projects/vimage/src/sys/dev/ciss/ciss.c#11 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/ciss/ciss.c,v 1.88 2008/05/16 08:27:02 ps Exp $ + * $FreeBSD: src/sys/dev/ciss/ciss.c,v 1.89 2008/06/10 17:51:51 ps Exp $ */ /* @@ -298,6 +298,11 @@ { 0x103C, 0x323A, CISS_BOARD_SA5, "HP Smart Array" }, { 0x103C, 0x323B, CISS_BOARD_SA5, "HP Smart Array" }, { 0x103C, 0x323C, CISS_BOARD_SA5, "HP Smart Array" }, + { 0x103C, 0x3241, CISS_BOARD_SA5, "HP Smart Array P212" }, + { 0x103C, 0x3243, CISS_BOARD_SA5, "HP Smart Array P410" }, + { 0x103C, 0x3245, CISS_BOARD_SA5, "HP Smart Array P410i" }, + { 0x103C, 0x3247, CISS_BOARD_SA5, "HP Smart Array P411" }, + { 0x103C, 0x3249, CISS_BOARD_SA5, "HP Smart Array P812" }, { 0, 0, 0, NULL } }; ==== //depot/projects/vimage/src/sys/dev/tx/if_tx.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/tx/if_tx.c,v 1.97 2007/02/23 12:18:57 piso Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/tx/if_tx.c,v 1.98 2008/06/10 17:59:43 jhb Exp $"); >>> TRUNCATED FOR MAIL (1000 lines) <<<