svn commit: r197465 - head/sys/dev/de
Pyun YongHyeon
yongari at FreeBSD.org
Thu Sep 24 17:53:01 UTC 2009
Author: yongari
Date: Thu Sep 24 17:53:00 2009
New Revision: 197465
URL: http://svn.freebsd.org/changeset/base/197465
Log:
Align Tx/Rx descriptors on 32 bytes boundary instead of PAGE_SIZE.
Also align setup descriptor on 32 bytes boundary. Tx buffer have no
alignment limitation so create dmamap without alignment
restriction[1]. Rx buffer still seems to require 4 bytes alignment
limitation but we can simply use MCLBYTES for size to map the
buffer instead of TULIP_DATA_PER_DESC as the buffer is allocated
with m_getcl(9).
de(4) supports up to TULIP_MAX_TXSEG segments for Tx buffers,
increase maximum dma segment size to TULIP_MAX_TXSEG * MCLBYTES.
While I'm here remove TULIP_DATA_PER_DESC as it is not used anymore.
This should fix de(4) breakage introduced after r176206.
Submitted by: jhb [1]
Reported by: WATANABE Kazuhiro < CQG00620 <> nifty dot ne dot jp >
Tested by: WATANABE Kazuhiro < CQG00620 <> nifty dot ne dot jp >,
Takahashi Yoshihiro < nyan <> jp dot freebsd dot org >
Modified:
head/sys/dev/de/if_de.c
head/sys/dev/de/if_devar.h
Modified: head/sys/dev/de/if_de.c
==============================================================================
--- head/sys/dev/de/if_de.c Thu Sep 24 17:11:41 2009 (r197464)
+++ head/sys/dev/de/if_de.c Thu Sep 24 17:53:00 2009 (r197465)
@@ -4491,7 +4491,7 @@ tulip_busdma_freering(tulip_ringinfo_t *
/* Allocate memory for a single descriptor ring. */
static int
tulip_busdma_allocring(device_t dev, tulip_softc_t * const sc, size_t count,
- bus_size_t maxsize, int nsegs, tulip_ringinfo_t *ri, const char *name)
+ bus_size_t align, int nsegs, tulip_ringinfo_t *ri, const char *name)
{
size_t size;
int error, i;
@@ -4499,7 +4499,7 @@ tulip_busdma_allocring(device_t dev, tul
/* First, setup a tag. */
ri->ri_max = count;
size = count * sizeof(tulip_desc_t);
- error = bus_dma_tag_create(NULL, PAGE_SIZE, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(NULL, 32, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, size, 1, size, 0, NULL, NULL,
&ri->ri_ring_tag);
if (error) {
@@ -4527,9 +4527,9 @@ tulip_busdma_allocring(device_t dev, tul
}
/* Allocate a tag for the data buffers. */
- error = bus_dma_tag_create(NULL, 4, 0,
+ error = bus_dma_tag_create(NULL, align, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
- maxsize, nsegs, TULIP_DATA_PER_DESC, 0, NULL, NULL, &ri->ri_data_tag);
+ MCLBYTES * nsegs, nsegs, MCLBYTES, 0, NULL, NULL, &ri->ri_data_tag);
if (error) {
device_printf(dev, "failed to allocate %s buffer dma tag\n", name);
return (error);
@@ -4587,8 +4587,8 @@ tulip_busdma_init(device_t dev, tulip_so
/*
* Allocate space and dmamap for transmit ring.
*/
- error = tulip_busdma_allocring(dev, sc, TULIP_TXDESCS, TULIP_DATA_PER_DESC,
- TULIP_MAX_TXSEG, &sc->tulip_txinfo, "transmit");
+ error = tulip_busdma_allocring(dev, sc, TULIP_TXDESCS, 1, TULIP_MAX_TXSEG,
+ &sc->tulip_txinfo, "transmit");
if (error)
return (error);
@@ -4599,7 +4599,7 @@ tulip_busdma_init(device_t dev, tulip_so
* a waste in practice though as an ethernet frame can easily fit
* in TULIP_RX_BUFLEN bytes.
*/
- error = tulip_busdma_allocring(dev, sc, TULIP_RXDESCS, MCLBYTES, 1,
+ error = tulip_busdma_allocring(dev, sc, TULIP_RXDESCS, 4, 1,
&sc->tulip_rxinfo, "receive");
if (error)
return (error);
@@ -4607,7 +4607,7 @@ tulip_busdma_init(device_t dev, tulip_so
/*
* Allocate a DMA tag, memory, and map for setup descriptor
*/
- error = bus_dma_tag_create(NULL, 4, 0,
+ error = bus_dma_tag_create(NULL, 32, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
sizeof(sc->tulip_setupdata), 1, sizeof(sc->tulip_setupdata), 0,
NULL, NULL, &sc->tulip_setup_tag);
Modified: head/sys/dev/de/if_devar.h
==============================================================================
--- head/sys/dev/de/if_devar.h Thu Sep 24 17:11:41 2009 (r197464)
+++ head/sys/dev/de/if_devar.h Thu Sep 24 17:53:00 2009 (r197465)
@@ -135,7 +135,6 @@ typedef struct {
* 100Mb/s cards the copying is just too much of a hit.
*/
-#define TULIP_DATA_PER_DESC 2032
#define TULIP_TXTIMER 4
#define TULIP_RXDESCS 48
#define TULIP_TXDESCS 128
More information about the svn-src-all
mailing list