From patchwork Thu Dec 20 18:57:50 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Pedersen X-Patchwork-Id: 1900831 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 677E940061 for ; Thu, 20 Dec 2012 18:58:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751427Ab2LTS6Y (ORCPT ); Thu, 20 Dec 2012 13:58:24 -0500 Received: from mail-pb0-f50.google.com ([209.85.160.50]:57997 "EHLO mail-pb0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751041Ab2LTS6X (ORCPT ); Thu, 20 Dec 2012 13:58:23 -0500 Received: by mail-pb0-f50.google.com with SMTP id wz7so2188027pbc.9 for ; Thu, 20 Dec 2012 10:58:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:x-gm-message-state; bh=vP69ei7WD5szqkyaXZYqe2QcYPTUEDLZrpEUO3kq/MU=; b=Ci8lhD6UbjxDLa3WMUXsNLd3UY17gEoSLQeLomwlwerxg1vttZ4WBUJyKmfxKi0hjn iW0WmW3qw33GsA4rWV+bYv2ieeOa9zR6ko3K0ewacqWs7w4YpJ26964+kbz/JbhO672d 91CespSEUgVC9A8q7E7rrsxsjXHVBB6ipU9KWD8+ehx8mp04x6O24mKHjteKD2kMQvEj 3X/ngWsMKcYGlHipH/oztFCnLwgY3v7PscchgzpJ53SqceAdvAknUwZB0reIQIfppKd/ PBfp+bEIsq8ZGQQOgu5qQFt22OvsAyO1YFA8uRKKjHt3bdmSXCAdYES/M3526ZodsZqs NIhw== X-Received: by 10.68.131.8 with SMTP id oi8mr32283695pbb.29.1356029902392; Thu, 20 Dec 2012 10:58:22 -0800 (PST) Received: from cable.lan (70-35-43-50.static.wiline.com. [70.35.43.50]) by mx.google.com with ESMTPS id wf8sm5461445pbc.65.2012.12.20.10.58.20 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 20 Dec 2012 10:58:21 -0800 (PST) From: Thomas Pedersen To: linville@tuxdriver.org Cc: linux-wireless@vger.kernel.org, jlopex@gmail.com, j@wl.fi, Thomas Pedersen Subject: [PATCH v2 2/3] mac80211_hwsim: beacon at beacon interval Date: Thu, 20 Dec 2012 10:57:50 -0800 Message-Id: <1356029871-17794-2-git-send-email-thomas@cozybit.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1356029871-17794-1-git-send-email-thomas@cozybit.com> References: <1356029871-17794-1-git-send-email-thomas@cozybit.com> X-Gm-Message-State: ALoCoQlBDDCJHL7BoiILT9QoZ4p+CqL3P1Yxx9WSJ0z9UKj2/iynUktNBzfaZOAmOk7eoRRPVDyp Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org A beacon period starts at TSF time 0. Spoof this by rounding the starting beacon time to a multiple of the beacon interval. Signed-off-by: Thomas Pedersen --- drivers/net/wireless/mac80211_hwsim.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 84dbfe8..0b38600 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -1044,9 +1044,14 @@ static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed) data->power_level = conf->power_level; if (!data->started || !ktime_to_ns(data->beacon_int)) hrtimer_cancel(&data->beacon_timer); - else if (!hrtimer_is_queued(&data->beacon_timer)) - hrtimer_start(&data->beacon_timer, data->beacon_int, - HRTIMER_MODE_REL); + else if (!hrtimer_is_queued(&data->beacon_timer)) { + u64 tsf = le64_to_cpu(__mac80211_hwsim_get_tsf(data)); + u64 bcn_int = ktime_to_ns(data->beacon_int) / 1000; + u64 next_tbtt = bcn_int - do_div(tsf, bcn_int); + + hrtimer_start(&data->beacon_timer, + ns_to_ktime(next_tbtt * 1000), HRTIMER_MODE_REL); + } return 0; } @@ -1099,9 +1104,15 @@ static void mac80211_hwsim_bss_info_changed(struct ieee80211_hw *hw, data->beacon_int = ns_to_ktime(info->beacon_int * 1024 * 1000); if (WARN_ON(!ktime_to_ns(data->beacon_int))) data->beacon_int = ns_to_ktime(1000 * 1000); - if (data->started && !hrtimer_is_queued(&data->beacon_timer)) + if (data->started && !hrtimer_is_queued(&data->beacon_timer)) { + u64 tsf = le64_to_cpu(__mac80211_hwsim_get_tsf(data)); + u64 bcn_int = ktime_to_ns(data->beacon_int) / 1000; + u64 next_tbtt = bcn_int - do_div(tsf, bcn_int); + hrtimer_start(&data->beacon_timer, - data->beacon_int, HRTIMER_MODE_REL); + ns_to_ktime(next_tbtt * 1000), + HRTIMER_MODE_REL); + } } if (changed & BSS_CHANGED_ERP_CTS_PROT) {