From patchwork Sat Jul 28 14:32:49 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Kossifidis X-Patchwork-Id: 1251711 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 5C210E00B4 for ; Sat, 28 Jul 2012 14:33:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752612Ab2G1OdU (ORCPT ); Sat, 28 Jul 2012 10:33:20 -0400 Received: from mail-we0-f174.google.com ([74.125.82.174]:36323 "EHLO mail-we0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752387Ab2G1OdO (ORCPT ); Sat, 28 Jul 2012 10:33:14 -0400 Received: by weyx8 with SMTP id x8so2692055wey.19 for ; Sat, 28 Jul 2012 07:33:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=yySkYwQAV7h6Sm2Yt8ThMtssAvReUDMteHfQw8tEPcI=; b=lfWjThpftbrSXvlKyRgqQ+TtJq1suTh8x0kgtuqx4kYzp0QyLCpc7wzCEsh/YqOMQ6 +Kuau+l4KUeHR1Fzf2av+PZijfhKxjoQZYegCK/kx8IvAlWBsap7GJ9YdDsiOAzwuCVc SRyAIzsuk7pPw3n0H3A7tv+2PGHl2lOLNpUQnmS65nDwDLDLqhC/ohNn3+viAq2FJvpn ZMWu8aSK81VUvQVAUxceNaBV8i3XlEC/gcdoNbktOu+4+c98s80ZWWxeuy9/enH0AbGd rivLfe6F2NJyZqfKWCv/Zc38tUijDamD21ZjysMEO25bci5PlmTCI5q8ZdTE+bVTdbZc xfQQ== Received: by 10.180.20.99 with SMTP id m3mr13820947wie.16.1343485993307; Sat, 28 Jul 2012 07:33:13 -0700 (PDT) Received: from localhost.localdomain (athedsl-131073.home.otenet.gr. [85.75.87.160]) by mx.google.com with ESMTPS id o2sm6873745wiz.11.2012.07.28.07.33.11 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 28 Jul 2012 07:33:12 -0700 (PDT) From: Nick Kossifidis To: ath5k-devel@lists.ath5k.org, linux-wireless@vger.kernel.org Cc: linville@tuxdriver.com, mcgrof@gmail.com, jirislaby@gmail.com, thomas@net.t-labs.tu-berlin.de, nbd@openwrt.org, Nick Kossifidis Subject: [PATCH 2/4] ath5k: Fix range scaling when setting rate power table Date: Sat, 28 Jul 2012 17:32:49 +0300 Message-Id: <1343485971-31360-2-git-send-email-mickflemm@gmail.com> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1343485971-31360-1-git-send-email-mickflemm@gmail.com> References: <1343485971-31360-1-git-send-email-mickflemm@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org rates[i] is unsigned but txp_offset can be negative for newer parts with PDADC table. We cover the case when rates[i] + txp_offset > 63 but we must also cover the case when its < 0 or else rates[i] will underflow. Signed-off-by: Nick Kossifidis --- drivers/net/wireless/ath/ath5k/phy.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c index aa1a77d..84a9aaf 100644 --- a/drivers/net/wireless/ath/ath5k/phy.c +++ b/drivers/net/wireless/ath/ath5k/phy.c @@ -3516,6 +3516,7 @@ ath5k_setup_rate_powertable(struct ath5k_hw *ah, u16 max_pwr, { unsigned int i; u16 *rates; + s16 rate_idx_scaled = 0; /* max_pwr is power level we got from driver/user in 0.5dB * units, switch to 0.25dB units so we can compare */ @@ -3580,10 +3581,13 @@ ath5k_setup_rate_powertable(struct ath5k_hw *ah, u16 max_pwr, * match the power range set by user with the power indices * on PCDAC/PDADC table */ for (i = 0; i < 16; i++) { - rates[i] += ah->ah_txpower.txp_offset; + rate_idx_scaled = rates[i] + ah->ah_txpower.txp_offset; /* Don't get out of bounds */ - if (rates[i] > 63) - rates[i] = 63; + if (rate_idx_scaled > 63) + rate_idx_scaled = 63; + if (rate_idx_scaled < 0) + rate_idx_scaled = 0; + rates[i] = rate_idx_scaled; } }