svn commit: r261076 - head/sys/dev/usb/wlan

Hans Petter Selasky hselasky at FreeBSD.org
Thu Jan 23 10:18:29 UTC 2014


Author: hselasky
Date: Thu Jan 23 10:18:28 2014
New Revision: 261076
URL: http://svnweb.freebsd.org/changeset/base/261076

Log:
  Revert r261014. Let Kevin fix it.
  
  MFC after:	1 week

Modified:
  head/sys/dev/usb/wlan/if_run.c
  head/sys/dev/usb/wlan/if_runvar.h

Modified: head/sys/dev/usb/wlan/if_run.c
==============================================================================
--- head/sys/dev/usb/wlan/if_run.c	Thu Jan 23 09:37:03 2014	(r261075)
+++ head/sys/dev/usb/wlan/if_run.c	Thu Jan 23 10:18:28 2014	(r261076)
@@ -1356,22 +1356,11 @@ run_efuse_read(struct run_softc *sc, uin
 	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, uin
 	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 @@ tr_setup:
 		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 @@ tr_setup:
 		}
 
 		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;

Modified: head/sys/dev/usb/wlan/if_runvar.h
==============================================================================
--- head/sys/dev/usb/wlan/if_runvar.h	Thu Jan 23 09:37:03 2014	(r261075)
+++ head/sys/dev/usb/wlan/if_runvar.h	Thu Jan 23 10:18:28 2014	(r261076)
@@ -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);


More information about the svn-src-all mailing list