Search Linux Wireless

Re: [PATCH v3] b43: Accessing the TSF via mac80211

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sunday 25 January 2009 15:28:28 Alina Friedrichsen wrote:
> This allows the mac80211 high level code to access the TSF. This is e.g. needed for BSSID merges in the IBSS mode.
> 
> The second version adds locking and removes the now unnecessary debugfs entries.
> 
> Thanks to Michael Buesch! :)
> 
> Signed-off-by: Alina Friedrichsen <x-alina@xxxxxxx>

Signed-off-by: Michael Buesch <mb@xxxxxxxxx>

> ---
> diff -urN wireless-testing.orig/drivers/net/wireless/b43/debugfs.c wireless-testing/drivers/net/wireless/b43/debugfs.c
> --- wireless-testing.orig/drivers/net/wireless/b43/debugfs.c	2009-01-25 06:12:13.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/b43/debugfs.c	2009-01-25 14:38:30.000000000 +0100
> @@ -367,34 +367,6 @@
>  	return 0;
>  }
>  
> -/* wl->irq_lock is locked */
> -static ssize_t tsf_read_file(struct b43_wldev *dev,
> -			     char *buf, size_t bufsize)
> -{
> -	ssize_t count = 0;
> -	u64 tsf;
> -
> -	b43_tsf_read(dev, &tsf);
> -	fappend("0x%08x%08x\n",
> -		(unsigned int)((tsf & 0xFFFFFFFF00000000ULL) >> 32),
> -		(unsigned int)(tsf & 0xFFFFFFFFULL));
> -
> -	return count;
> -}
> -
> -/* wl->irq_lock is locked */
> -static int tsf_write_file(struct b43_wldev *dev,
> -			  const char *buf, size_t count)
> -{
> -	u64 tsf;
> -
> -	if (sscanf(buf, "%llu", (unsigned long long *)(&tsf)) != 1)
> -		return -EINVAL;
> -	b43_tsf_write(dev, tsf);
> -
> -	return 0;
> -}
> -
>  static ssize_t txstat_read_file(struct b43_wldev *dev,
>  				char *buf, size_t bufsize)
>  {
> @@ -691,7 +663,6 @@
>  B43_DEBUGFS_FOPS(mmio16write, NULL, mmio16write__write_file, 1);
>  B43_DEBUGFS_FOPS(mmio32read, mmio32read__read_file, mmio32read__write_file, 1);
>  B43_DEBUGFS_FOPS(mmio32write, NULL, mmio32write__write_file, 1);
> -B43_DEBUGFS_FOPS(tsf, tsf_read_file, tsf_write_file, 1);
>  B43_DEBUGFS_FOPS(txstat, txstat_read_file, NULL, 0);
>  B43_DEBUGFS_FOPS(restart, NULL, restart_write_file, 1);
>  B43_DEBUGFS_FOPS(loctls, loctls_read_file, NULL, 0);
> @@ -805,7 +776,6 @@
>  	ADD_FILE(mmio16write, 0200);
>  	ADD_FILE(mmio32read, 0600);
>  	ADD_FILE(mmio32write, 0200);
> -	ADD_FILE(tsf, 0600);
>  	ADD_FILE(txstat, 0400);
>  	ADD_FILE(restart, 0200);
>  	ADD_FILE(loctls, 0400);
> @@ -834,7 +804,6 @@
>  	debugfs_remove(e->file_mmio16write.dentry);
>  	debugfs_remove(e->file_mmio32read.dentry);
>  	debugfs_remove(e->file_mmio32write.dentry);
> -	debugfs_remove(e->file_tsf.dentry);
>  	debugfs_remove(e->file_txstat.dentry);
>  	debugfs_remove(e->file_restart.dentry);
>  	debugfs_remove(e->file_loctls.dentry);
> diff -urN wireless-testing.orig/drivers/net/wireless/b43/debugfs.h wireless-testing/drivers/net/wireless/b43/debugfs.h
> --- wireless-testing.orig/drivers/net/wireless/b43/debugfs.h	2009-01-25 06:12:13.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/b43/debugfs.h	2009-01-25 14:39:33.000000000 +0100
> @@ -46,7 +46,6 @@
>  	struct b43_dfs_file file_mmio16write;
>  	struct b43_dfs_file file_mmio32read;
>  	struct b43_dfs_file file_mmio32write;
> -	struct b43_dfs_file file_tsf;
>  	struct b43_dfs_file file_txstat;
>  	struct b43_dfs_file file_txpower_g;
>  	struct b43_dfs_file file_restart;
> diff -urN wireless-testing.orig/drivers/net/wireless/b43/main.c wireless-testing/drivers/net/wireless/b43/main.c
> --- wireless-testing.orig/drivers/net/wireless/b43/main.c	2009-01-25 06:12:13.000000000 +0100
> +++ wireless-testing/drivers/net/wireless/b43/main.c	2009-01-25 15:22:07.000000000 +0100
> @@ -3177,6 +3177,43 @@
>  	return 0;
>  }
>  
> +static u64 b43_op_get_tsf(struct ieee80211_hw *hw)
> +{
> +	struct b43_wl *wl = hw_to_b43_wl(hw);
> +	struct b43_wldev *dev;
> +	u64 tsf;
> +
> +	mutex_lock(&wl->mutex);
> +	spin_lock_irq(&wl->irq_lock);
> +	dev = wl->current_dev;
> +
> +	if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED))
> +		b43_tsf_read(dev, &tsf);
> +	else
> +		tsf = 0;
> +
> +	spin_unlock_irq(&wl->irq_lock);
> +	mutex_unlock(&wl->mutex);
> +
> +	return tsf;
> +}
> +
> +static void b43_op_set_tsf(struct ieee80211_hw *hw, u64 tsf)
> +{
> +	struct b43_wl *wl = hw_to_b43_wl(hw);
> +	struct b43_wldev *dev;
> +
> +	mutex_lock(&wl->mutex);
> +	spin_lock_irq(&wl->irq_lock);
> +	dev = wl->current_dev;
> +
> +	if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED))
> +		b43_tsf_write(dev, tsf);
> +
> +	spin_unlock_irq(&wl->irq_lock);
> +	mutex_unlock(&wl->mutex);
> +}
> +
>  static void b43_put_phy_into_reset(struct b43_wldev *dev)
>  {
>  	struct ssb_device *sdev = dev->dev;
> @@ -4296,6 +4333,8 @@
>  	.set_key		= b43_op_set_key,
>  	.get_stats		= b43_op_get_stats,
>  	.get_tx_stats		= b43_op_get_tx_stats,
> +	.get_tsf		= b43_op_get_tsf,
> +	.set_tsf		= b43_op_set_tsf,
>  	.start			= b43_op_start,
>  	.stop			= b43_op_stop,
>  	.set_tim		= b43_op_beacon_set_tim,
> 



-- 
Greetings, Michael.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux