Module Name: src
Committed By: jakllsch
Date: Fri Sep 14 18:46:47 UTC 2018
Modified Files:
src/sys/dev/pci: if_msk.c if_mskvar.h if_skreg.h
Log Message:
msk(4): add 64-bit DMA support
To generate a diff of this commit:
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/pci/if_msk.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/if_mskvar.h
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/if_skreg.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_msk.c
diff -u src/sys/dev/pci/if_msk.c:1.77 src/sys/dev/pci/if_msk.c:1.78
--- src/sys/dev/pci/if_msk.c:1.77 Wed Sep 12 13:52:36 2018
+++ src/sys/dev/pci/if_msk.c Fri Sep 14 18:46:47 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: if_msk.c,v 1.77 2018/09/12 13:52:36 jakllsch Exp $ */
+/* $NetBSD: if_msk.c,v 1.78 2018/09/14 18:46:47 jakllsch Exp $ */
/* $OpenBSD: if_msk.c,v 1.79 2009/10/15 17:54:56 deraadt Exp $ */
/*
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.77 2018/09/12 13:52:36 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.78 2018/09/14 18:46:47 jakllsch Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -150,6 +150,9 @@ void msk_dump_bytes(const char *, int);
static int msk_sysctl_handler(SYSCTLFN_PROTO);
static int msk_root_num;
+#define MSK_ADDR_LO(x) ((uint64_t) (x) & 0xffffffffUL)
+#define MSK_ADDR_HI(x) ((uint64_t) (x) >> 32)
+
/* supported device vendors */
static const struct msk_product {
pci_vendor_id_t msk_vendor;
@@ -409,6 +412,7 @@ msk_init_rx_ring(struct sk_if_softc *sc_
{
struct msk_chain_data *cd = &sc_if->sk_cdata;
struct msk_ring_data *rd = sc_if->sk_rdata;
+ struct msk_rx_desc *r;
int i, nexti;
memset(rd->sk_rx_ring, 0, sizeof(struct msk_rx_desc) * MSK_RX_RING_CNT);
@@ -426,6 +430,18 @@ msk_init_rx_ring(struct sk_if_softc *sc_
sc_if->sk_cdata.sk_rx_cons = 0;
sc_if->sk_cdata.sk_rx_cnt = 0;
+ /* Mark the first ring element to initialize the high address. */
+ sc_if->sk_cdata.sk_rx_hiaddr = 0;
+ r = &rd->sk_rx_ring[cd->sk_rx_prod];
+ r->sk_addr = htole32(cd->sk_rx_hiaddr);
+ r->sk_len = 0;
+ r->sk_ctl = 0;
+ r->sk_opcode = SK_Y2_BMUOPC_ADDR64 | SK_Y2_RXOPC_OWN;
+ MSK_CDRXSYNC(sc_if, cd->sk_rx_prod,
+ BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
+ SK_INC(sc_if->sk_cdata.sk_rx_prod, MSK_RX_RING_CNT);
+ sc_if->sk_cdata.sk_rx_cnt++;
+
msk_fill_rx_ring(sc_if);
return (0);
}
@@ -436,6 +452,7 @@ msk_init_tx_ring(struct sk_if_softc *sc_
struct sk_softc *sc = sc_if->sk_softc;
struct msk_chain_data *cd = &sc_if->sk_cdata;
struct msk_ring_data *rd = sc_if->sk_rdata;
+ struct msk_tx_desc *t;
bus_dmamap_t dmamap;
struct sk_txmap_entry *entry;
int i, nexti;
@@ -468,8 +485,17 @@ msk_init_tx_ring(struct sk_if_softc *sc_
sc_if->sk_cdata.sk_tx_cons = 0;
sc_if->sk_cdata.sk_tx_cnt = 0;
+ /* Mark the first ring element to initialize the high address. */
+ sc_if->sk_cdata.sk_tx_hiaddr = 0;
+ t = &rd->sk_tx_ring[cd->sk_tx_prod];
+ t->sk_addr = htole32(cd->sk_tx_hiaddr);
+ t->sk_len = 0;
+ t->sk_ctl = 0;
+ t->sk_opcode = SK_Y2_BMUOPC_ADDR64 | SK_Y2_TXOPC_OWN;
MSK_CDTXSYNC(sc_if, 0, MSK_TX_RING_CNT,
BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
+ SK_INC(sc_if->sk_cdata.sk_tx_prod, MSK_TX_RING_CNT);
+ sc_if->sk_cdata.sk_tx_cnt++;
return (0);
}
@@ -480,7 +506,8 @@ msk_newbuf(struct sk_if_softc *sc_if, bu
struct mbuf *m_new = NULL;
struct sk_chain *c;
struct msk_rx_desc *r;
- void *buf = NULL;
+ void *buf = NULL;
+ bus_addr_t addr;
MGETHDR(m_new, M_DONTWAIT, MT_DATA);
if (m_new == NULL)
@@ -501,12 +528,34 @@ msk_newbuf(struct sk_if_softc *sc_if, bu
m_adj(m_new, ETHER_ALIGN);
+ addr = dmamap->dm_segs[0].ds_addr +
+ ((vaddr_t)m_new->m_data -
+ (vaddr_t)sc_if->sk_cdata.sk_jumbo_buf);
+
+ if (sc_if->sk_cdata.sk_rx_hiaddr != MSK_ADDR_HI(addr)) {
+ c = &sc_if->sk_cdata.sk_rx_chain[sc_if->sk_cdata.sk_rx_prod];
+ r = c->sk_le;
+ c->sk_mbuf = NULL;
+ r->sk_addr = htole32(MSK_ADDR_HI(addr));
+ r->sk_len = 0;
+ r->sk_ctl = 0;
+ r->sk_opcode = SK_Y2_BMUOPC_ADDR64 | SK_Y2_RXOPC_OWN;
+ sc_if->sk_cdata.sk_rx_hiaddr = MSK_ADDR_HI(addr);
+
+ MSK_CDRXSYNC(sc_if, sc_if->sk_cdata.sk_rx_prod,
+ BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
+
+ SK_INC(sc_if->sk_cdata.sk_rx_prod, MSK_RX_RING_CNT);
+ sc_if->sk_cdata.sk_rx_cnt++;
+
+ DPRINTFN(10, ("%s: rx ADDR64: %#x\n",
+ sc_if->sk_ethercom.ec_if.if_xname, (unsigned)MSK_ADDR_HI(addr)));
+ }
+
c = &sc_if->sk_cdata.sk_rx_chain[sc_if->sk_cdata.sk_rx_prod];
r = c->sk_le;
c->sk_mbuf = m_new;
- r->sk_addr = htole32(dmamap->dm_segs[0].ds_addr +
- (((vaddr_t)m_new->m_data
- - (vaddr_t)sc_if->sk_cdata.sk_jumbo_buf)));
+ r->sk_addr = htole32(MSK_ADDR_LO(addr));
r->sk_len = htole16(SK_JLEN);
r->sk_ctl = 0;
r->sk_opcode = SK_Y2_RXOPC_PACKET | SK_Y2_RXOPC_OWN;
@@ -702,7 +751,7 @@ msk_ioctl(struct ifnet *ifp, u_long cmd,
s = splnet();
- DPRINTFN(2, ("msk_ioctl ETHER\n"));
+ DPRINTFN(2, ("msk_ioctl ETHER cmd %lx\n", cmd));
switch (cmd) {
case SIOCSIFFLAGS:
if ((error = ifioctl_common(ifp, cmd, data)) != 0)
@@ -1101,17 +1150,19 @@ msk_attach(device_t parent, device_t sel
* give the receiver 2/3 of the memory (rounded down), and the
* transmitter whatever remains.
*/
- chunk = (2 * (sc->sk_ramsize / sizeof(u_int64_t)) / 3) & ~0xff;
- sc_if->sk_rx_ramstart = 0;
- sc_if->sk_rx_ramend = sc_if->sk_rx_ramstart + chunk - 1;
- chunk = (sc->sk_ramsize / sizeof(u_int64_t)) - chunk;
- sc_if->sk_tx_ramstart = sc_if->sk_rx_ramend + 1;
- sc_if->sk_tx_ramend = sc_if->sk_tx_ramstart + chunk - 1;
-
- DPRINTFN(2, ("msk_attach: rx_ramstart=%#x rx_ramend=%#x\n"
- " tx_ramstart=%#x tx_ramend=%#x\n",
- sc_if->sk_rx_ramstart, sc_if->sk_rx_ramend,
- sc_if->sk_tx_ramstart, sc_if->sk_tx_ramend));
+ if (sc->sk_ramsize) {
+ chunk = (2 * (sc->sk_ramsize / sizeof(u_int64_t)) / 3) & ~0xff;
+ sc_if->sk_rx_ramstart = 0;
+ sc_if->sk_rx_ramend = sc_if->sk_rx_ramstart + chunk - 1;
+ chunk = (sc->sk_ramsize / sizeof(u_int64_t)) - chunk;
+ sc_if->sk_tx_ramstart = sc_if->sk_rx_ramend + 1;
+ sc_if->sk_tx_ramend = sc_if->sk_tx_ramstart + chunk - 1;
+
+ DPRINTFN(2, ("msk_attach: rx_ramstart=%#x rx_ramend=%#x\n"
+ " tx_ramstart=%#x tx_ramend=%#x\n",
+ sc_if->sk_rx_ramstart, sc_if->sk_rx_ramend,
+ sc_if->sk_tx_ramstart, sc_if->sk_tx_ramend));
+ }
/* Allocate the descriptor queues. */
if (bus_dmamem_alloc(sc->sc_dmatag, sizeof(struct msk_ring_data),
@@ -1360,7 +1411,10 @@ mskc_attach(device_t parent, device_t se
return;
}
- sc->sc_dmatag = pa->pa_dmat;
+ if (pci_dma64_available(pa))
+ sc->sc_dmatag = pa->pa_dmat64;
+ else
+ sc->sc_dmatag = pa->pa_dmat;
command = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG);
command |= PCI_COMMAND_MASTER_ENABLE;
@@ -1714,10 +1768,12 @@ msk_encap(struct sk_if_softc *sc_if, str
{
struct sk_softc *sc = sc_if->sk_softc;
struct msk_tx_desc *f = NULL;
- u_int32_t frag, cur;
- int i;
+ u_int32_t frag, cur, hiaddr, old_hiaddr, total;
+ u_int32_t entries = 0;
+ size_t i;
struct sk_txmap_entry *entry;
bus_dmamap_t txmap;
+ bus_addr_t addr;
DPRINTFN(2, ("msk_encap\n"));
@@ -1746,30 +1802,68 @@ msk_encap(struct sk_if_softc *sc_if, str
return (ENOBUFS);
}
- if (txmap->dm_nsegs > (MSK_TX_RING_CNT - sc_if->sk_cdata.sk_tx_cnt - 2)) {
+ /* Count how many tx descriptors needed. */
+ hiaddr = sc_if->sk_cdata.sk_tx_hiaddr;
+ for (total = i = 0; i < txmap->dm_nsegs; i++) {
+ if (hiaddr != MSK_ADDR_HI(txmap->dm_segs[i].ds_addr)) {
+ hiaddr = MSK_ADDR_HI(txmap->dm_segs[i].ds_addr);
+ total++;
+ }
+ total++;
+ }
+
+ if (total > MSK_TX_RING_CNT - sc_if->sk_cdata.sk_tx_cnt - 2) {
DPRINTFN(2, ("msk_encap: too few descriptors free\n"));
bus_dmamap_unload(sc->sc_dmatag, txmap);
return (ENOBUFS);
}
- DPRINTFN(2, ("msk_encap: dm_nsegs=%d\n", txmap->dm_nsegs));
+ DPRINTFN(2, ("msk_encap: dm_nsegs=%d total desc=%u\n",
+ txmap->dm_nsegs, total));
/* Sync the DMA map. */
bus_dmamap_sync(sc->sc_dmatag, txmap, 0, txmap->dm_mapsize,
BUS_DMASYNC_PREWRITE);
+ old_hiaddr = sc_if->sk_cdata.sk_tx_hiaddr;
for (i = 0; i < txmap->dm_nsegs; i++) {
+ addr = txmap->dm_segs[i].ds_addr;
+ DPRINTFN(2, ("msk_encap: addr %llx\n",
+ (unsigned long long)addr));
+ hiaddr = MSK_ADDR_HI(addr);
+
+ if (sc_if->sk_cdata.sk_tx_hiaddr != hiaddr) {
+ f = &sc_if->sk_rdata->sk_tx_ring[frag];
+ f->sk_addr = htole32(hiaddr);
+ f->sk_len = 0;
+ f->sk_ctl = 0;
+ if (i == 0)
+ f->sk_opcode = SK_Y2_BMUOPC_ADDR64;
+ else
+ f->sk_opcode = SK_Y2_BMUOPC_ADDR64 | SK_Y2_TXOPC_OWN;
+ sc_if->sk_cdata.sk_tx_hiaddr = hiaddr;
+ SK_INC(frag, MSK_TX_RING_CNT);
+ entries++;
+ DPRINTFN(10, ("%s: tx ADDR64: %#x\n",
+ sc_if->sk_ethercom.ec_if.if_xname, hiaddr));
+ }
+
f = &sc_if->sk_rdata->sk_tx_ring[frag];
- f->sk_addr = htole32(txmap->dm_segs[i].ds_addr);
+ f->sk_addr = htole32(MSK_ADDR_LO(addr));
f->sk_len = htole16(txmap->dm_segs[i].ds_len);
f->sk_ctl = 0;
- if (i == 0)
- f->sk_opcode = SK_Y2_TXOPC_PACKET;
- else
+ if (i == 0) {
+ if (hiaddr != old_hiaddr)
+ f->sk_opcode = SK_Y2_TXOPC_PACKET | SK_Y2_TXOPC_OWN;
+ else
+ f->sk_opcode = SK_Y2_TXOPC_PACKET;
+ } else
f->sk_opcode = SK_Y2_TXOPC_BUFFER | SK_Y2_TXOPC_OWN;
cur = frag;
SK_INC(frag, MSK_TX_RING_CNT);
+ entries++;
}
+ KASSERTMSG(entries == total, "entries %u total %u", entries, total);
sc_if->sk_cdata.sk_tx_chain[cur].sk_mbuf = m_head;
SIMPLEQ_REMOVE_HEAD(&sc_if->sk_txmap_head, link);
@@ -1778,7 +1872,7 @@ msk_encap(struct sk_if_softc *sc_if, str
sc_if->sk_rdata->sk_tx_ring[cur].sk_ctl |= SK_Y2_TXCTL_LASTFRAG;
/* Sync descriptors before handing to chip */
- MSK_CDTXSYNC(sc_if, *txidx, txmap->dm_nsegs,
+ MSK_CDTXSYNC(sc_if, *txidx, entries,
BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
sc_if->sk_rdata->sk_tx_ring[*txidx].sk_opcode |= SK_Y2_TXOPC_OWN;
@@ -1787,7 +1881,7 @@ msk_encap(struct sk_if_softc *sc_if, str
MSK_CDTXSYNC(sc_if, *txidx, 1,
BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
- sc_if->sk_cdata.sk_tx_cnt += txmap->dm_nsegs;
+ sc_if->sk_cdata.sk_tx_cnt += entries;
#ifdef MSK_DEBUG
if (mskdebug >= 2) {
@@ -1922,31 +2016,38 @@ msk_rxeof(struct sk_if_softc *sc_if, u_i
struct sk_softc *sc = sc_if->sk_softc;
struct ifnet *ifp = &sc_if->sk_ethercom.ec_if;
struct mbuf *m;
- struct sk_chain *cur_rx;
- int cur, total_len = len;
+ unsigned cur, prod, tail, total_len = len;
bus_dmamap_t dmamap;
- DPRINTFN(2, ("msk_rxeof\n"));
-
cur = sc_if->sk_cdata.sk_rx_cons;
+ prod = sc_if->sk_cdata.sk_rx_prod;
/* Sync the descriptor */
MSK_CDRXSYNC(sc_if, cur, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
- cur_rx = &sc_if->sk_cdata.sk_rx_chain[cur];
- if (cur_rx->sk_mbuf == NULL)
+ DPRINTFN(2, ("msk_rxeof: cur %u prod %u rx_cnt %u\n", cur, prod, sc_if->sk_cdata.sk_rx_cnt));
+
+ while (prod != cur) {
+ tail = cur;
+ SK_INC(cur, MSK_RX_RING_CNT);
+
+ sc_if->sk_cdata.sk_rx_cnt--;
+ m = sc_if->sk_cdata.sk_rx_chain[tail].sk_mbuf;
+ sc_if->sk_cdata.sk_rx_chain[tail].sk_mbuf = NULL;
+ if (m != NULL)
+ break; /* found it */
+ }
+ sc_if->sk_cdata.sk_rx_cons = cur;
+ DPRINTFN(2, ("msk_rxeof: cur %u rx_cnt %u m %p\n", cur, sc_if->sk_cdata.sk_rx_cnt, m));
+
+ if (m == NULL)
return;
dmamap = sc_if->sk_cdata.sk_rx_jumbo_map;
- SK_INC(sc_if->sk_cdata.sk_rx_cons, MSK_RX_RING_CNT);
- sc_if->sk_cdata.sk_rx_cnt--;
bus_dmamap_sync(sc_if->sk_softc->sc_dmatag, dmamap, 0,
dmamap->dm_mapsize, BUS_DMASYNC_POSTREAD);
- m = cur_rx->sk_mbuf;
- cur_rx->sk_mbuf = NULL;
-
if (total_len < SK_MIN_FRAMELEN ||
total_len > ETHER_MAX_LEN_JUMBO ||
msk_rxvalid(sc, rxstat, total_len) == 0) {
@@ -2012,6 +2113,9 @@ msk_txeof(struct sk_if_softc *sc_if)
sc_if->sk_cdata.sk_tx_cnt--;
SK_INC(idx, MSK_TX_RING_CNT);
}
+ if (idx == sc_if->sk_cdata.sk_tx_cons)
+ return;
+
ifp->if_timer = sc_if->sk_cdata.sk_tx_cnt > 0 ? 5 : 0;
if (sc_if->sk_cdata.sk_tx_cnt < MSK_TX_RING_CNT - 2)
@@ -2336,21 +2440,23 @@ msk_init(struct ifnet *ifp)
SK_TXARCTL_ON|SK_TXARCTL_FSYNC_ON);
#endif
- /* Configure RAMbuffers */
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_UNRESET);
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_START, sc_if->sk_rx_ramstart);
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_WR_PTR, sc_if->sk_rx_ramstart);
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_RD_PTR, sc_if->sk_rx_ramstart);
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_END, sc_if->sk_rx_ramend);
- SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_ON);
-
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_UNRESET);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_STORENFWD_ON);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_START, sc_if->sk_tx_ramstart);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_WR_PTR, sc_if->sk_tx_ramstart);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_RD_PTR, sc_if->sk_tx_ramstart);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_END, sc_if->sk_tx_ramend);
- SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_ON);
+ if (sc->sk_ramsize) {
+ /* Configure RAMbuffers */
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_UNRESET);
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_START, sc_if->sk_rx_ramstart);
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_WR_PTR, sc_if->sk_rx_ramstart);
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_RD_PTR, sc_if->sk_rx_ramstart);
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_END, sc_if->sk_rx_ramend);
+ SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_ON);
+
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_UNRESET);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_STORENFWD_ON);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_START, sc_if->sk_tx_ramstart);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_WR_PTR, sc_if->sk_tx_ramstart);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_RD_PTR, sc_if->sk_tx_ramstart);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_END, sc_if->sk_tx_ramend);
+ SK_IF_WRITE_4(sc_if, 1, SK_TXRBA1_CTLTST, SK_RBCTL_ON);
+ }
/* Configure BMUs */
SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_BMU_CSR, 0x00000016);
@@ -2602,7 +2708,8 @@ msk_dump_mbuf(struct mbuf *m)
while (count > 0 && m) {
printf("m=%p, m->m_data=%p, m->m_len=%d\n",
m, m->m_data, m->m_len);
- msk_dump_bytes(mtod(m, char *), m->m_len);
+ if (mskdebug >= 4)
+ msk_dump_bytes(mtod(m, char *), m->m_len);
count -= m->m_len;
m = m->m_next;
Index: src/sys/dev/pci/if_mskvar.h
diff -u src/sys/dev/pci/if_mskvar.h:1.18 src/sys/dev/pci/if_mskvar.h:1.19
--- src/sys/dev/pci/if_mskvar.h:1.18 Tue Jul 10 18:42:37 2018
+++ src/sys/dev/pci/if_mskvar.h Fri Sep 14 18:46:47 2018
@@ -1,5 +1,5 @@
/* $OpenBSD: if_mskvar.h,v 1.3 2006/12/28 16:34:42 kettenis Exp $ */
-/* $NetBSD: if_mskvar.h,v 1.18 2018/07/10 18:42:37 jdolecek Exp $ */
+/* $NetBSD: if_mskvar.h,v 1.19 2018/09/14 18:46:47 jakllsch Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -114,12 +114,14 @@ struct msk_chain_data {
struct sk_txmap_entry *sk_tx_map[MSK_TX_RING_CNT];
bus_dmamap_t sk_rx_map[MSK_RX_RING_CNT];
bus_dmamap_t sk_rx_jumbo_map;
- int sk_tx_prod;
- int sk_tx_cons;
- int sk_tx_cnt;
- int sk_rx_prod;
- int sk_rx_cons;
- int sk_rx_cnt;
+ unsigned sk_tx_prod;
+ unsigned sk_tx_cons;
+ unsigned sk_tx_cnt;
+ u_int32_t sk_tx_hiaddr;
+ unsigned sk_rx_prod;
+ unsigned sk_rx_cons;
+ unsigned sk_rx_cnt;
+ u_int32_t sk_rx_hiaddr;
/* Stick the jumbo mem management stuff here too. */
void * sk_jslots[MSK_JSLOTS];
void *sk_jumbo_buf;
Index: src/sys/dev/pci/if_skreg.h
diff -u src/sys/dev/pci/if_skreg.h:1.24 src/sys/dev/pci/if_skreg.h:1.25
--- src/sys/dev/pci/if_skreg.h:1.24 Wed Jul 11 00:46:39 2018
+++ src/sys/dev/pci/if_skreg.h Fri Sep 14 18:46:47 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: if_skreg.h,v 1.24 2018/07/11 00:46:39 kre Exp $ */
+/* $NetBSD: if_skreg.h,v 1.25 2018/09/14 18:46:47 jakllsch Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -1680,6 +1680,8 @@ struct sk_tx_desc {
#define SK_TX_RING_CNT 512
#define SK_RX_RING_CNT 256
+#define SK_Y2_BMUOPC_ADDR64 0x21
+
struct msk_rx_desc {
u_int32_t sk_addr;
u_int16_t sk_len;