Hi, WE-21 for TI ACX driver... Patch for wireless-2.6 git.
Jean Signed-off-by: Jean Tourrilhes <[EMAIL PROTECTED]> ----------------------------------------------------------- --- linux/drivers/net/wireless/tiacx/ioctl.20.c 2006-08-29 15:38:59.000000000 -0700 +++ linux/drivers/net/wireless/tiacx/ioctl.c 2006-08-29 15:54:05.000000000 -0700 @@ -686,15 +686,15 @@ acx_ioctl_set_essid( adev->essid_active = 0; } else { - if (dwrq->length > IW_ESSID_MAX_SIZE+1) { + if (dwrq->length > IW_ESSID_MAX_SIZE) { result = -E2BIG; goto end_unlock; } - if (len > sizeof(adev->essid)) - len = sizeof(adev->essid); - memcpy(adev->essid, extra, len-1); - adev->essid[len-1] = '\0'; + if (len >= sizeof(adev->essid)) + len = sizeof(adev->essid) - 1; + memcpy(adev->essid, extra, len); + adev->essid[len] = '\0'; /* Paranoia: just in case there is a '\0'... */ adev->essid_len = strlen(adev->essid); adev->essid_active = 1; @@ -730,7 +730,7 @@ acx_ioctl_get_essid( if (adev->essid_active) { memcpy(extra, adev->essid, adev->essid_len); extra[adev->essid_len] = '\0'; - dwrq->length = adev->essid_len + 1; + dwrq->length = adev->essid_len; dwrq->flags = 1; } return OK; @@ -1097,7 +1097,7 @@ acx_ioctl_set_power( "due to %dus\n", ps_timeout, vwrq->value); adev->ps_hangover_period = ps_timeout; } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { - u16 ps_periods = vwrq->value / 1000000; + u16 ps_periods = vwrq->value; if (ps_periods > 255) ps_periods = 255; @@ -1160,7 +1160,7 @@ acx_ioctl_get_power( vwrq->value = adev->ps_hangover_period * 1000 / 1024; vwrq->flags = IW_POWER_TIMEOUT; } else { - vwrq->value = adev->ps_listen_interval * 1000000; + vwrq->value = adev->ps_listen_interval; vwrq->flags = IW_POWER_PERIOD|IW_POWER_RELATIVE; } if (adev->ps_options & PS_OPT_STILL_RCV_BCASTS) @@ -1381,7 +1381,7 @@ acx_ioctl_get_nick( acx_device_t *adev = ndev2adev(ndev); strcpy(extra, adev->nick); - dwrq->length = strlen(extra) + 1; + dwrq->length = strlen(extra); return OK; } @@ -1405,13 +1405,14 @@ acx_ioctl_set_nick( acx_sem_lock(adev); - if (dwrq->length > IW_ESSID_MAX_SIZE + 1) { + if (dwrq->length > IW_ESSID_MAX_SIZE) { result = -E2BIG; goto end_unlock; } - /* extra includes trailing \0, so it's ok */ + /* extra does not include trailing \0 in WE 21 and later */ strcpy(adev->nick, extra); + adev->nick[dwrq->length] = '\0'; result = OK; end_unlock: @@ -1446,13 +1447,13 @@ acx_ioctl_get_retry( if (type == IW_RETRY_LIFETIME) { vwrq->flags = IW_RETRY_LIFETIME; vwrq->value = adev->msdu_lifetime; - } else if (modifier == IW_RETRY_MAX) { - vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX; + } else if (modifier == IW_RETRY_LONG) { + vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_LONG; vwrq->value = adev->long_retry; } else { vwrq->flags = IW_RETRY_LIMIT; if (adev->long_retry != adev->short_retry) - SET_BIT(vwrq->flags, IW_RETRY_MIN); + SET_BIT(vwrq->flags, IW_RETRY_SHORT); vwrq->value = adev->short_retry; } @@ -1498,9 +1499,9 @@ acx_ioctl_set_retry( if (IW_RETRY_LIMIT == (vwrq->flags & IW_RETRY_TYPE)) { printk("old retry limits: short %d long %d\n", adev->short_retry, adev->long_retry); - if (vwrq->flags & IW_RETRY_MAX) { + if (vwrq->flags & IW_RETRY_LONG) { adev->long_retry = vwrq->value; - } else if (vwrq->flags & IW_RETRY_MIN) { + } else if (vwrq->flags & IW_RETRY_SHORT) { adev->short_retry = vwrq->value; } else { /* no modifier: set both */ - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html