PERFORCE change 157114 for review
Marius Strobl
marius at FreeBSD.org
Tue Feb 3 13:41:16 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=157114
Change 157114 by marius at flak on 2009/02/03 21:40:36
Add glue for FreeBSD < 800016.
Affected files ...
.. //depot/projects/usiii/dev/cas/if_cas.c#2 edit
.. //depot/projects/usiii/dev/cas/if_casvar.h#2 edit
Differences ...
==== //depot/projects/usiii/dev/cas/if_cas.c#2 (text+ko) ====
@@ -812,8 +812,8 @@
sc->sc_rxcptr = 0;
/*
- * Initialize the receive descriptor rings. We leave the
- * the second ring zeroed as we don't actually use it.
+ * Initialize the first receive descriptor ring. We leave
+ * the second one zeroed as we don't actually use it.
*/
for (i = 0; i < CAS_NRXDESC; i++)
CAS_INIT_RXDESC(sc, i, i);
@@ -1620,8 +1620,13 @@
refcount_acquire(&rxds->rxds_refcount);
MEXTADD(m, (caddr_t)rxds->rxds_buf +
CAS_GET(word2, CAS_RC2_HDR_OFF) * 256 +
- ETHER_ALIGN, len, cas_free, sc,
- (void *)(uintptr_t)idx, 0, EXT_NET_DRV);
+ ETHER_ALIGN, len, cas_free,
+#if __FreeBSD_version < 800016
+ rxds,
+#else
+ sc, (void *)(uintptr_t)idx,
+#endif
+ 0, EXT_NET_DRV);
if ((m->m_flags & M_EXT) == 0) {
m_freem(m);
m = NULL;
@@ -1663,8 +1668,13 @@
refcount_acquire(&rxds->rxds_refcount);
MEXTADD(m, (caddr_t)rxds->rxds_buf +
CAS_GET(word1, CAS_RC1_DATA_OFF) +
- ETHER_ALIGN, len, cas_free, sc,
- (void *)(uintptr_t)idx, 0, EXT_NET_DRV);
+ ETHER_ALIGN, len, cas_free,
+#if __FreeBSD_version < 800016
+ rxds,
+#else
+ sc, (void *)(uintptr_t)idx,
+#endif
+ 0, EXT_NET_DRV);
if ((m->m_flags & M_EXT) == 0) {
m_freem(m);
m = NULL;
@@ -1719,10 +1729,18 @@
cas_free(void *arg1, void *arg2)
{
struct cas_rxdsoft *rxds;
- struct cas_softc *sc = arg1;
- u_int idx = (uintptr_t)arg2;
+ struct cas_softc *sc;
+ u_int idx;
+#if __FreeBSD_version < 800016
+ rxds = arg2;
+ sc = rxds->rxds_sc;
+ idx = rxds->rxds_idx;
+#else
+ sc = arg1;
+ idx = (uintptr_t)arg2;
rxds = &sc->sc_rxdsoft[idx];
+#endif
if (refcount_release(&rxds->rxds_refcount) == 0)
return;
@@ -1735,7 +1753,7 @@
cas_add_rxdesc(struct cas_softc *sc, u_int idx)
{
- CAS_INIT_RXDESC(sc, sc->sc_rxdptr, idx);
+ CAS_UPDATE_RXDESC(sc, sc->sc_rxdptr, idx);
/*
* Update the RX kick register. This register has to point to the
==== //depot/projects/usiii/dev/cas/if_casvar.h#2 (text+ko) ====
@@ -33,10 +33,6 @@
#ifndef _IF_CASVAR_H
#define _IF_CASVAR_H
-#include <sys/queue.h>
-#include <sys/callout.h>
-#include <sys/refcount.h>
-
/*
* The page size is configurable, but needs to be at least 8k (the
* default) in order to also support jumbo buffers.
@@ -129,6 +125,10 @@
void *rxds_buf; /* receive buffer */
bus_dmamap_t rxds_dmamap; /* our DMA map */
bus_addr_t rxds_paddr; /* physical address of the segment */
+#if __FreeBSD_version < 800016
+ struct cas_softc *rxds_sc; /* softc pointer */
+ u_int rxds_idx; /* our index */
+#endif
u_int rxds_refcount; /* hardware + mbuf references */
};
@@ -195,8 +195,8 @@
u_int sc_txnext; /* next ready TX descriptor */
u_int sc_txwin; /* TX desc. since last TX intr. */
- struct cas_txsq sc_txfreeq; /* free TX descsofts */
- struct cas_txsq sc_txdirtyq; /* dirty TX descsofts */
+ struct cas_txsq sc_txfreeq; /* free software TX descriptors */
+ struct cas_txsq sc_txdirtyq; /* dirty software TX descriptors */
u_int sc_rxcptr; /* next ready RX completion */
u_int sc_rxdptr; /* next ready RX descriptor */
@@ -228,18 +228,33 @@
#define CAS_CDSYNC(sc, ops) \
bus_dmamap_sync((sc)->sc_cdmatag, (sc)->sc_cddmamap, (ops));
+#define __CAS_UPDATE_RXDESC(rxd, rxds, s) \
+do { \
+ \
+ refcount_init(&(rxds)->rxds_refcount, 1); \
+ (rxd)->cd_buf_ptr = htole64((rxds)->rxds_paddr); \
+ KASSERT((s) < CAS_RD_BUF_INDEX_MASK >> CAS_RD_BUF_INDEX_SHFT, \
+ ("%s: RX buffer index too large!", __func__)); \
+ (rxd)->cd_flags = \
+ htole64((uint64_t)((s) << CAS_RD_BUF_INDEX_SHFT)); \
+} while (0)
+
+#define CAS_UPDATE_RXDESC(sc, d, s) \
+ __CAS_UPDATE_RXDESC(&(sc)->sc_rxdescs[(d)], \
+ &(sc)->sc_rxdsoft[(s)], (s))
+
+#if __FreeBSD_version < 800016
#define CAS_INIT_RXDESC(sc, d, s) \
do { \
- struct cas_rxdsoft *__rxds = &sc->sc_rxdsoft[(s)]; \
- struct cas_desc *__rxd = &sc->sc_rxdescs[(d)]; \
+ struct cas_rxdsoft *__rxds = &(sc)->sc_rxdsoft[(s)]; \
\
- refcount_init(&__rxds->rxds_refcount, 1); \
- __rxd->cd_buf_ptr = htole64(__rxds->rxds_paddr); \
- KASSERT(s < CAS_RD_BUF_INDEX_MASK >> CAS_RD_BUF_INDEX_SHFT, \
- ("%s: RX buffer index too large!", __func__)); \
- __rxd->cd_flags = \
- htole64((uint64_t)(s << CAS_RD_BUF_INDEX_SHFT)); \
+ __rxds->rxds_sc = (sc); \
+ __rxds->rxds_idx = (s); \
+ __CAS_UPDATE_RXDESC(&(sc)->sc_rxdescs[(d)], __rxds, (s)); \
} while (0)
+#else
+#define CAS_INIT_RXDESC(sc, d, s) CAS_UPDATE_RXDESC(sc, d, s)
+#endif
#define CAS_LOCK_INIT(_sc, _name) \
mtx_init(&(_sc)->sc_mtx, _name, MTX_NETWORK_LOCK, MTX_DEF)
More information about the p4-projects
mailing list