From 2719d9c909db993cbd882dec592a46e7989f98a5 Mon Sep 17 00:00:00 2001 From: Hans Petter Selasky Date: Thu, 23 Jan 2014 10:18:28 +0000 Subject: [PATCH] Revert r261014. Let Kevin fix it. MFC after: 1 week --- sys/dev/usb/wlan/if_run.c | 42 +++++++++++++++--------------------- sys/dev/usb/wlan/if_runvar.h | 1 - 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/sys/dev/usb/wlan/if_run.c b/sys/dev/usb/wlan/if_run.c index 9394792fc1a7..8541a7cd1a82 100644 --- a/sys/dev/usb/wlan/if_run.c +++ b/sys/dev/usb/wlan/if_run.c @@ -1356,22 +1356,11 @@ run_efuse_read(struct run_softc *sc, uint16_t addr, uint16_t *val, int count) uint16_t reg; int error, ntries; - switch (count) { - case 1: - *val = 0xff; /* address not found */ - break; - case 2: - *val = 0xffff; /* address not found */ - addr *= 2; - break; - default: - *val = 0xffff; /* address not found */ - return (USB_ERR_INVAL); - } - if ((error = run_read(sc, RT3070_EFUSE_CTRL, &tmp)) != 0) return (error); + if (count == 2) + addr *= 2; /*- * Read one 16-byte block into registers EFUSE_DATA[0-3]: * DATA0: F E D C @@ -1392,21 +1381,21 @@ run_efuse_read(struct run_softc *sc, uint16_t addr, uint16_t *val, int count) if (ntries == 100) return (ETIMEDOUT); - if ((tmp & RT3070_EFUSE_AOUT_MASK) == RT3070_EFUSE_AOUT_MASK) + if ((tmp & RT3070_EFUSE_AOUT_MASK) == RT3070_EFUSE_AOUT_MASK) { + *val = 0xffff; /* address not found */ return (0); - + } /* determine to which 32-bit register our 16-bit word belongs */ reg = RT3070_EFUSE_DATA3 - (addr & 0xc); if ((error = run_read(sc, reg, &tmp)) != 0) return (error); - /* get correct bytes */ - *val = (uint16_t)(tmp >> (8 * (addr & 0x3))); - - /* mask for byte read, if any */ - if (count == 1) - *val &= 0xff; - + if (count == 2) + *val = (addr & 2) ? tmp >> 16 : tmp & 0xffff; + else { + tmp >>= (8 *(addr & 0x3)); + memmove(val, &tmp, sizeof(*val)); + } return (0); } @@ -3094,9 +3083,10 @@ run_bulk_tx_callbackN(struct usb_xfer *xfer, usb_error_t error, u_int index) STAILQ_REMOVE_HEAD(&pq->tx_qh, next); m = data->m; - size = (sc->mac_ver == 0x5592) ? - sizeof(data->desc) + sizeof(uint32_t) : sizeof(data->desc); - if ((m->m_pkthdr.len + size + 3 + 8) > RUN_MAX_TXSZ) { + size = (sc->mac_ver == 0x5592) ? + RUN_MAX_TXSZ + sizeof(uint32_t) : RUN_MAX_TXSZ; + if ((m->m_pkthdr.len + + sizeof(data->desc) + 3 + 8) > size) { DPRINTF("data overflow, %u bytes\n", m->m_pkthdr.len); @@ -3108,6 +3098,8 @@ run_bulk_tx_callbackN(struct usb_xfer *xfer, usb_error_t error, u_int index) } pc = usbd_xfer_get_frame(xfer, 0); + size = (sc->mac_ver == 0x5592) ? + sizeof(data->desc) + sizeof(uint32_t) : sizeof(data->desc); usbd_copy_in(pc, 0, &data->desc, size); usbd_m_copy_in(pc, size, m, 0, m->m_pkthdr.len); size += m->m_pkthdr.len; diff --git a/sys/dev/usb/wlan/if_runvar.h b/sys/dev/usb/wlan/if_runvar.h index d827ecf6b84a..63d9422c8c7c 100644 --- a/sys/dev/usb/wlan/if_runvar.h +++ b/sys/dev/usb/wlan/if_runvar.h @@ -89,7 +89,6 @@ struct run_tx_data { uint32_t align[0]; /* dummy field */ uint8_t desc[sizeof(struct rt2870_txd) + sizeof(struct rt2860_txwi)]; - uint8_t desc_extra[4]; /* used by v5592 */ uint8_t ridx; }; STAILQ_HEAD(run_tx_data_head, run_tx_data);