Re: svn commit: r261014 - head/sys/dev/usb/wlan

2014-01-23 Thread Hans Petter Selasky

On 01/23/14 10:39, Kevin Lo wrote:


On 2014/01/22 17:57, Hans Petter Selasky wrote:

Author: hselasky
Date: Wed Jan 22 09:57:26 2014
New Revision: 261014
URL: http://svnweb.freebsd.org/changeset/base/261014

Log:
   - Fix some non-portable code with regard to endianness. Don't use
memmove().
   - Fix a range check for maximum transmit length.
   - Fix read from missing field when transmitting data.
   MFC after:2 weeks


I appreciate you're taking the time to fix code, but your change totally
breaks RT3573 and IQ calibration doesn't work for RT5372 and RT5572.
I think it'd be good to send me the patch for testing/review
before committing.  Thanks!

 Kevin




Hi Kevin,

That's fine. I don't have that chipset to test with. My dongle was 
working fine with the given patches. The fixes were based on code 
inspection. Will you send a new patch to fix the issues I've mentioned 
today? There are clearly some bugs in there either with or without the 
patch.


Thank you!

--HPS
___
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org


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

2014-01-22 Thread Hans Petter Selasky
Author: hselasky
Date: Wed Jan 22 09:57:26 2014
New Revision: 261014
URL: http://svnweb.freebsd.org/changeset/base/261014

Log:
  - Fix some non-portable code with regard to endianness. Don't use memmove().
  - Fix a range check for maximum transmit length.
  - Fix read from missing field when transmitting data.
  
  MFC after:2 weeks

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  Wed Jan 22 09:30:36 2014
(r261013)
+++ head/sys/dev/usb/wlan/if_run.c  Wed Jan 22 09:57:26 2014
(r261014)
@@ -1356,11 +1356,22 @@ 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 = 0x;  /* address not found */
+   addr *= 2;
+   break;
+   default:
+   *val = 0x;  /* 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
@@ -1381,21 +1392,21 @@ run_efuse_read(struct run_softc *sc, uin
if (ntries == 100)
return (ETIMEDOUT);
 
-   if ((tmp  RT3070_EFUSE_AOUT_MASK) == RT3070_EFUSE_AOUT_MASK) {
-   *val = 0x;  /* address not found */
+   if ((tmp  RT3070_EFUSE_AOUT_MASK) == RT3070_EFUSE_AOUT_MASK)
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);
 
-   if (count == 2)
-   *val = (addr  2) ? tmp  16 : tmp  0x;
-   else {
-   tmp = (8 *(addr  0x3));
-   memmove(val, tmp, sizeof(*val));
-   }
+   /* get correct bytes */
+   *val = (uint16_t)(tmp  (8 * (addr  0x3)));
+
+   /* mask for byte read, if any */
+   if (count == 1)
+   *val = 0xff;
+
return (0);
 }
 
@@ -3083,10 +3094,9 @@ tr_setup:
STAILQ_REMOVE_HEAD(pq-tx_qh, next);
 
m = data-m;
-   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) {
+   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) {
DPRINTF(data overflow, %u bytes\n,
m-m_pkthdr.len);
 
@@ -3098,8 +3108,6 @@ 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   Wed Jan 22 09:30:36 2014
(r261013)
+++ head/sys/dev/usb/wlan/if_runvar.h   Wed Jan 22 09:57:26 2014
(r261014)
@@ -89,6 +89,7 @@ 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);
___
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org