* [PATCH 1/3] staging: vt6656: rxtx.c remove typdef PTX_BUFFER
From: Malcolm Priestley @ 2013-08-15 18:34 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
Rename to vnt_tx_buffer.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/rxtx.c | 20 ++++++++++----------
drivers/staging/vt6656/rxtx.h | 20 +++++++++-----------
2 files changed, 19 insertions(+), 21 deletions(-)
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index 9cd4158..083f58f 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -996,8 +996,8 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
u32 uNodeIndex, u16 wCurrentRate, u32 *pcbHeaderLen, u32 *pcbTotalLen)
{
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
+ struct vnt_tx_buffer *pTxBufHead;
u32 cbFrameSize, cbFrameBodySize;
- PTX_BUFFER pTxBufHead;
u32 cb802_1_H_len;
u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbMACHdLen = 0;
u32 cbFCSlen = 4, cbMICHDR = 0;
@@ -1026,7 +1026,7 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
bSoftWEP = true; /* WEP 256 */
}
- pTxBufHead = (PTX_BUFFER) usbPacketBuf;
+ pTxBufHead = (struct vnt_tx_buffer *)usbPacketBuf;
// Get pkt type
if (ntohs(psEthHeader->h_proto) > ETH_DATA_LEN) {
@@ -1489,7 +1489,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
struct vnt_tx_mgmt *pPacket)
{
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
- PTX_BUFFER pTX_Buffer;
+ struct vnt_tx_buffer *pTX_Buffer;
PSTxBufHead pTxBufHead;
PUSB_SEND_CONTEXT pContext;
struct ieee80211_hdr *pMACHeader;
@@ -1512,7 +1512,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
return CMD_STATUS_RESOURCES;
}
- pTX_Buffer = (PTX_BUFFER) (&pContext->Data[0]);
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pbyTxBufferAddr = (u8 *)&(pTX_Buffer->adwTxKey[0]);
cbFrameBodySize = pPacket->cbPayloadLen;
pTxBufHead = (PSTxBufHead) pbyTxBufferAddr;
@@ -1838,6 +1838,7 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
{
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
+ struct vnt_tx_buffer *pTX_Buffer;
u8 byPktType;
u8 *pbyTxBufferAddr;
void *pvRTS, *pvCTS, *pvTxDataHd;
@@ -1865,7 +1866,6 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
PSKeyItem pTransmitKey = NULL;
u8 *pbyIVHead, *pbyPayloadHead, *pbyMacHdr;
u32 cbExtSuppRate = 0;
- PTX_BUFFER pTX_Buffer;
PUSB_SEND_CONTEXT pContext;
pvRrvTime = pMICHDR = pvRTS = pvCTS = pvTxDataHd = NULL;
@@ -1886,7 +1886,7 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
return ;
}
- pTX_Buffer = (PTX_BUFFER)(&pContext->Data[0]);
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pbyTxBufferAddr = (u8 *)(&pTX_Buffer->adwTxKey[0]);
pTxBufHead = (PSTxBufHead) pbyTxBufferAddr;
wTxBufSize = sizeof(STxBufHead);
@@ -2218,6 +2218,7 @@ int nsDMA_tx_packet(struct vnt_private *pDevice,
{
struct net_device_stats *pStats = &pDevice->stats;
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
+ struct vnt_tx_buffer *pTX_Buffer;
u32 BytesToWrite = 0, uHeaderLen = 0;
u32 uNodeIndex = 0;
u8 byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80};
@@ -2233,7 +2234,6 @@ int nsDMA_tx_packet(struct vnt_private *pDevice,
int bNodeExist = false;
PUSB_SEND_CONTEXT pContext;
bool fConvertedPacket;
- PTX_BUFFER pTX_Buffer;
u32 status;
u16 wKeepRate = pDevice->wCurrentRate;
int bTxeapol_key = false;
@@ -2564,7 +2564,7 @@ int nsDMA_tx_packet(struct vnt_private *pDevice,
}
}
- pTX_Buffer = (PTX_BUFFER)&(pContext->Data[0]);
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pTX_Buffer->byPKTNO = (u8) (((pDevice->wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F));
pTX_Buffer->wTxByteCount = (u16)BytesToWrite;
@@ -2611,6 +2611,7 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen,
u32 uNodeIndex)
{
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
+ struct vnt_tx_buffer *pTX_Buffer;
u32 BytesToWrite = 0, uHeaderLen = 0;
u8 byPktType = PK_TYPE_11B;
int bNeedEncryption = false;
@@ -2620,7 +2621,6 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen,
PUSB_SEND_CONTEXT pContext;
u8 byPktTyp;
int fConvertedPacket;
- PTX_BUFFER pTX_Buffer;
u32 status;
u16 wKeepRate = pDevice->wCurrentRate;
@@ -2714,7 +2714,7 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen,
return false;
}
- pTX_Buffer = (PTX_BUFFER)&(pContext->Data[0]);
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pTX_Buffer->byPKTNO = (u8) (((pDevice->wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F));
pTX_Buffer->wTxByteCount = (u16)BytesToWrite;
diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h
index 3e2a877..bd1f9e2 100644
--- a/drivers/staging/vt6656/rxtx.h
+++ b/drivers/staging/vt6656/rxtx.h
@@ -32,18 +32,16 @@
#include "device.h"
#include "wcmd.h"
-typedef struct tagSTX_BUFFER
-{
- u8 byType;
- u8 byPKTNO;
- u16 wTxByteCount;
-
+struct vnt_tx_buffer {
+ u8 byType;
+ u8 byPKTNO;
+ u16 wTxByteCount;
u32 adwTxKey[4];
- u16 wFIFOCtl;
- u16 wTimeStamp;
- u16 wFragCtl;
- u16 wReserved;
-} __packed TX_BUFFER, *PTX_BUFFER;
+ u16 wFIFOCtl;
+ u16 wTimeStamp;
+ u16 wFragCtl;
+ u16 wReserved;
+} __packed;
typedef struct tagSBEACON_BUFFER
{
--
1.8.1.2
^ permalink raw reply related
* [PATCH 2/3] staging: vt6656: rxtx.c : s_bPacketToWirelessUsb remove usbPacketBuf.
From: Malcolm Priestley @ 2013-08-15 18:37 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
Move vnt_tx_buffer *pTxBufHead to argument u8 *usbPacketBuf position.
Fix the calling to s_bPacketToWirelessUsb so it attached to
the calling struct vnt_tx_buffer pTX_Buffer.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/rxtx.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index 083f58f..e37e82c 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -991,12 +991,12 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
*/
static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
- u8 *usbPacketBuf, int bNeedEncryption, u32 uSkbPacketLen, u32 uDMAIdx,
- struct ethhdr *psEthHeader, u8 *pPacket, PSKeyItem pTransmitKey,
- u32 uNodeIndex, u16 wCurrentRate, u32 *pcbHeaderLen, u32 *pcbTotalLen)
+ struct vnt_tx_buffer *pTxBufHead, int bNeedEncryption,
+ u32 uSkbPacketLen, u32 uDMAIdx, struct ethhdr *psEthHeader,
+ u8 *pPacket, PSKeyItem pTransmitKey, u32 uNodeIndex, u16 wCurrentRate,
+ u32 *pcbHeaderLen, u32 *pcbTotalLen)
{
struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
- struct vnt_tx_buffer *pTxBufHead;
u32 cbFrameSize, cbFrameBodySize;
u32 cb802_1_H_len;
u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbMACHdLen = 0;
@@ -1026,8 +1026,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
bSoftWEP = true; /* WEP 256 */
}
- pTxBufHead = (struct vnt_tx_buffer *)usbPacketBuf;
-
// Get pkt type
if (ntohs(psEthHeader->h_proto) > ETH_DATA_LEN) {
if (pDevice->dwDiagRefCount == 0) {
@@ -2541,8 +2539,10 @@ int nsDMA_tx_packet(struct vnt_private *pDevice,
}
}
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
+
fConvertedPacket = s_bPacketToWirelessUsb(pDevice, byPktType,
- (u8 *)(&pContext->Data[0]), bNeedEncryption,
+ pTX_Buffer, bNeedEncryption,
skb->len, uDMAIdx, &pDevice->sTxEthHeader,
(u8 *)skb->data, pTransmitKey, uNodeIndex,
pDevice->wCurrentRate,
@@ -2564,7 +2564,6 @@ int nsDMA_tx_packet(struct vnt_private *pDevice,
}
}
- pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pTX_Buffer->byPKTNO = (u8) (((pDevice->wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F));
pTX_Buffer->wTxByteCount = (u16)BytesToWrite;
@@ -2701,8 +2700,10 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen,
// Convert the packet to an usb frame and copy into our buffer
// and send the irp.
+ pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
+
fConvertedPacket = s_bPacketToWirelessUsb(pDevice, byPktType,
- (u8 *)(&pContext->Data[0]), bNeedEncryption,
+ pTX_Buffer, bNeedEncryption,
uDataLen, TYPE_AC0DMA, &pDevice->sTxEthHeader,
pbySkbData, pTransmitKey, uNodeIndex,
pDevice->wCurrentRate,
@@ -2714,7 +2715,6 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen,
return false;
}
- pTX_Buffer = (struct vnt_tx_buffer *)&pContext->Data[0];
pTX_Buffer->byPKTNO = (u8) (((pDevice->wCurrentRate<<4) &0x00F0) | ((pDevice->wSeqCounter - 1) & 0x000F));
pTX_Buffer->wTxByteCount = (u16)BytesToWrite;
--
1.8.1.2
^ permalink raw reply related
* [PATCH 3/3] staging: vt6656: rxtx.h : remove typedef struct tagSBEACON_BUFFER
From: Malcolm Priestley @ 2013-08-15 18:40 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
Replace with struct vnt_beacon_buffer.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/rxtx.c | 5 +++--
drivers/staging/vt6656/rxtx.h | 16 +++++++---------
2 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index e37e82c..7a4ebbc 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -1753,6 +1753,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
struct vnt_tx_mgmt *pPacket)
{
+ struct vnt_beacon_buffer *pTX_Buffer;
u32 cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN;
u32 cbHeaderSize = 0;
u16 wTxBufSize = sizeof(STxShortBufHead);
@@ -1762,7 +1763,6 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
u16 wCurrentRate;
u32 cbFrameBodySize;
u32 cbReqCount;
- PBEACON_BUFFER pTX_Buffer;
u8 *pbyTxBufferAddr;
PUSB_SEND_CONTEXT pContext;
CMD_STATUS status;
@@ -1773,7 +1773,8 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ManagementSend TX...NO CONTEXT!\n");
return status ;
}
- pTX_Buffer = (PBEACON_BUFFER) (&pContext->Data[0]);
+
+ pTX_Buffer = (struct vnt_beacon_buffer *)&pContext->Data[0];
pbyTxBufferAddr = (u8 *)&(pTX_Buffer->wFIFOCtl);
cbFrameBodySize = pPacket->cbPayloadLen;
diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h
index bd1f9e2..3e347a9 100644
--- a/drivers/staging/vt6656/rxtx.h
+++ b/drivers/staging/vt6656/rxtx.h
@@ -43,15 +43,13 @@ struct vnt_tx_buffer {
u16 wReserved;
} __packed;
-typedef struct tagSBEACON_BUFFER
-{
- u8 byType;
- u8 byPKTNO;
- u16 wTxByteCount;
-
- u16 wFIFOCtl;
- u16 wTimeStamp;
-} __packed BEACON_BUFFER, *PBEACON_BUFFER;
+struct vnt_beacon_buffer {
+ u8 byType;
+ u8 byPKTNO;
+ u16 wTxByteCount;
+ u16 wFIFOCtl;
+ u16 wTimeStamp;
+} __packed;
void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb);
int nsDMA_tx_packet(struct vnt_private *, u32 uDMAIdx, struct sk_buff *skb);
--
1.8.1.2
^ permalink raw reply related
* Re: pull-request: mac802111 2013-08-15
From: John W. Linville @ 2013-08-15 19:41 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
In-Reply-To: <1376581601.14084.14.camel@jlt4.sipsolutions.net>
On Thu, Aug 15, 2013 at 05:46:41PM +0200, Johannes Berg wrote:
> John,
>
> I have two more fixes ...
>
> This time, I have one fix from Dan Carpenter for users of
> nl80211hdr_put(), and one fix from myself fixing a regression with the
> libertas driver.
>
> Please let me know if there's any problem.
>
> johannes
>
> The following changes since commit ddfe49b42d8ad4bfdf92d63d4a74f162660d878d:
>
> mac80211: continue using disabled channels while connected (2013-07-31 21:18:17 +0200)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git for-john
>
> for you to fetch changes up to dee8a9732e713480075adbbca8eb220c5b8d1216:
>
> cfg80211: don't request disconnect if not connected (2013-08-14 14:00:19 +0200)
Pulling now...
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [GIT] [3.12] NFC updates
From: John W. Linville @ 2013-08-15 19:56 UTC (permalink / raw)
To: Samuel Ortiz; +Cc: Linux NFC, Linux Wireless
In-Reply-To: <20130814230448.GB11055@zurbaran>
On Thu, Aug 15, 2013 at 01:04:48AM +0200, Samuel Ortiz wrote:
> Hi John,
>
> This is the first NFC pull request for the 3.12 release.
>
> With this one we have:
>
> - A few pn533 improvements and minor fixes. Testing our pn533 driver
> against Google's NCI stack triggered a few issues that we fixed now.
> We also added Tx fragmentation support to this driver.
>
> - More NFC secure element handling. We added a GET_SE netlink command
> for getting all the discovered secure elements, and we defined 2
> additional secure element netlink event (transaction and connectivity).
> We also fixed a couple of typos and copy-paste bugs from the secure
> element handling code.
>
> - Firmware download support for the pn544 driver. This chipset can enter a
> special mode where it's waiting for firmware blobs to replace the
> already flashed one. We now support that mode.
>
> The following changes since commit d1e2586f484dfc36eee2b2d3a6c6c77be67ca492:
>
> mwifiex: fix build error when CONFIG_PM is not set (2013-08-12 14:36:55 -0400)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next.git tags/nfc-next-3.12-1
>
> for you to fetch changes up to 39525ee1dc78ca1f5f2fb1f764f7a141005fe440:
>
> NFC: Update secure element state (2013-08-14 01:13:40 +0200)
Pulling now...
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: Pull request: ath 20130812
From: John W. Linville @ 2013-08-15 19:54 UTC (permalink / raw)
To: Kalle Valo; +Cc: linux-wireless, ath6kl-devel, ath10k
In-Reply-To: <871u5zuhbm.fsf@kamboji.qca.qualcomm.com>
On Mon, Aug 12, 2013 at 05:14:37PM +0300, Kalle Valo wrote:
> Hi John,
>
> here's a small pull request for ath10k and ath6kl. The changes are:
>
> New features in ath10k are rx/tx checsumming in hw and survey scan
> implemented by Michal. Also he made fixes to different areas of the
> driver, most notable being fixing the case when using two streams and
> reducing the number of interface combinations to avoid firmware crashes.
> Bartosz did a clean related to how we handle SoC power save in PCI
> layer.
>
> For ath6kl Mohammed and Vasanth sent each a patch to fix two infrequent
> crashes.
>
> The following changes since commit 424121c365aed6ec93bbc8b515548df79c5af61c:
>
> ath10k: fix rts/fragmentation threshold setup (2013-07-30 18:01:21 +0300)
>
> are available in the git repository at:
>
> git://github.com/kvalo/ath.git for-linville
>
> for you to fetch changes up to 9d0e2f0772d394060bf3b17cd1f3a35574365103:
>
> ath6kl: Fix invalid pointer access on fuzz testing with AP mode (2013-08-07 10:58:59 +0300)
Pulling now...
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [PATCH-resend 0/9] ath5k/ath9k: respin/resend 5/10 MHz and CSA patches
From: John W. Linville @ 2013-08-15 20:04 UTC (permalink / raw)
To: Simon Wunderlich; +Cc: linux-wireless, Simon Wunderlich
In-Reply-To: <1376460098-26648-1-git-send-email-siwu@hrz.tu-chemnitz.de>
On Wed, Aug 14, 2013 at 08:01:29AM +0200, Simon Wunderlich wrote:
> This series contains the rebased patches for 5/10 MHz and channel switch
> announcement for ath5k/ath9k as sent in their respective series earlier. No
> modification was made. Since Johannes picked the nl/cfg/mac80211 parts
> only, these patches are still missing in the tree. John reported some
> trouble building with these patches, but I couldn't see any problems here.
>
> The series is based on wireless-testing of todays master. Please tell
> me if there are any problems (including compiler errors and kernel config)
> so I can rework if neccesary.
CC drivers/net/wireless/ath/ath9k/rc.o
drivers/net/wireless/ath/ath9k/rc.c: In function ‘ath_rate_update’:
drivers/net/wireless/ath/ath9k/rc.c:1333:3: error: invalid type argument of ‘->’ (have ‘struct cfg80211_chan_def’)
make[2]: *** [drivers/net/wireless/ath/ath9k/rc.o] Error 1
>
> Thanks!
> Simon
>
> Simon Wunderlich (9):
> ath9k: always use SIFS times from OFDM for 5/10 MHz
> ath9k: use chandef instead of channel_type
> ath9k: report 5/10 MHz channels
> ath9k: set 5/10 MHz supported channels and fix bitrate
> ath9k: announce that ath9k supports 5/10 MHz
> ath5k: report 5/10 MHz channels
> ath5k: set 5/10 MHz supported channels and fix duration
> ath5k: enable support for 5 MHz and 10 MHz channels
> ath9k: enable CSA functionality in ath9k
>
> drivers/net/wireless/ath/ath5k/ath5k.h | 1 +
> drivers/net/wireless/ath/ath5k/base.c | 59 ++++++++++++++++++----
> drivers/net/wireless/ath/ath5k/base.h | 2 +-
> drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 +-
> drivers/net/wireless/ath/ath5k/pcu.c | 2 +
> drivers/net/wireless/ath/ath5k/qcu.c | 25 ++++++++-
> drivers/net/wireless/ath/ath9k/ath9k.h | 2 +
> drivers/net/wireless/ath/ath9k/beacon.c | 21 ++++++++
> drivers/net/wireless/ath/ath9k/common.c | 67 +++++++++++++++----------
> drivers/net/wireless/ath/ath9k/common.h | 3 +-
> drivers/net/wireless/ath/ath9k/htc_drv_main.c | 5 +-
> drivers/net/wireless/ath/ath9k/hw.c | 5 +-
> drivers/net/wireless/ath/ath9k/init.c | 30 +++++++----
> drivers/net/wireless/ath/ath9k/main.c | 25 +++++++--
> drivers/net/wireless/ath/ath9k/rc.c | 9 +++-
> drivers/net/wireless/ath/ath9k/recv.c | 11 ++++
> drivers/net/wireless/ath/ath9k/xmit.c | 2 +
> 17 files changed, 206 insertions(+), 65 deletions(-)
>
> --
> 1.7.10.4
>
>
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* [PATCH 1/2] staging: vt6656: desc.h Remove typedef struct tagSRTS_* to new strutures in rxtx.h
From: Malcolm Priestley @ 2013-08-15 20:23 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
The new structures being
typedef struct tagSRTS_g -> struct vnt_rts_g
typedef struct tagSRTS_g_FB -> struct vnt_rts_g_fb
typedef struct tagSRTS_ab -> struct vnt_rts_ab
typedef struct tagSRTS_a_FB -> struct vnt_rts_a_fb
These are only needed by rxtc.c so moved to rxtx.h and
will eventually form part of the structure of
struct vnt_tx_buffer.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/desc.h | 66 -------------------------------------------
drivers/staging/vt6656/rxtx.c | 51 ++++++++++++++++++++++-----------
drivers/staging/vt6656/rxtx.h | 53 ++++++++++++++++++++++++++++++++++
3 files changed, 87 insertions(+), 83 deletions(-)
diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h
index 1a1cf34..4e2eb18 100644
--- a/drivers/staging/vt6656/desc.h
+++ b/drivers/staging/vt6656/desc.h
@@ -186,72 +186,6 @@ SRrvTime_atim, *PSRrvTime_atim;
typedef const SRrvTime_atim *PCSRrvTime_atim;
/*
- * RTS buffer header
- */
-typedef struct tagSRTS_g {
- u8 bySignalField_b;
- u8 byServiceField_b;
- u16 wTransmitLength_b;
- u8 bySignalField_a;
- u8 byServiceField_a;
- u16 wTransmitLength_a;
- u16 wDuration_ba;
- u16 wDuration_aa;
- u16 wDuration_bb;
- u16 wReserved;
- struct ieee80211_rts data;
-} __attribute__ ((__packed__))
-SRTS_g, *PSRTS_g;
-typedef const SRTS_g *PCSRTS_g;
-
-typedef struct tagSRTS_g_FB {
- u8 bySignalField_b;
- u8 byServiceField_b;
- u16 wTransmitLength_b;
- u8 bySignalField_a;
- u8 byServiceField_a;
- u16 wTransmitLength_a;
- u16 wDuration_ba;
- u16 wDuration_aa;
- u16 wDuration_bb;
- u16 wReserved;
- u16 wRTSDuration_ba_f0;
- u16 wRTSDuration_aa_f0;
- u16 wRTSDuration_ba_f1;
- u16 wRTSDuration_aa_f1;
- struct ieee80211_rts data;
-} __attribute__ ((__packed__))
-SRTS_g_FB, *PSRTS_g_FB;
-
-typedef const SRTS_g_FB *PCSRTS_g_FB;
-
-typedef struct tagSRTS_ab {
- u8 bySignalField;
- u8 byServiceField;
- u16 wTransmitLength;
- u16 wDuration;
- u16 wReserved;
- struct ieee80211_rts data;
-} __attribute__ ((__packed__))
-SRTS_ab, *PSRTS_ab;
-
-typedef const SRTS_ab *PCSRTS_ab;
-
-typedef struct tagSRTS_a_FB {
- u8 bySignalField;
- u8 byServiceField;
- u16 wTransmitLength;
- u16 wDuration;
- u16 wReserved;
- u16 wRTSDuration_f0;
- u16 wRTSDuration_f1;
- struct ieee80211_rts data;
-} __attribute__ ((__packed__))
-SRTS_a_FB, *PSRTS_a_FB;
-
-typedef const SRTS_a_FB *PCSRTS_a_FB;
-
-/*
* CTS buffer header
*/
typedef struct tagSCTS {
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index 7a4ebbc..e7ff845 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -629,7 +629,7 @@ static void s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType,
// Otherwise, we need to modified codes for them.
if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
if (byFBOption == AUTO_FB_NONE) {
- PSRTS_g pBuf = (PSRTS_g)pvRTS;
+ struct vnt_rts_g *pBuf = (struct vnt_rts_g *)pvRTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField_b), (u8 *)&(pBuf->bySignalField_b)
@@ -665,7 +665,7 @@ static void s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType,
memcpy(pBuf->data.ta, psEthHeader->h_source, ETH_ALEN);
}
else {
- PSRTS_g_FB pBuf = (PSRTS_g_FB)pvRTS;
+ struct vnt_rts_g_fb *pBuf = (struct vnt_rts_g_fb *)pvRTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField_b), (u8 *)&(pBuf->bySignalField_b)
@@ -715,7 +715,7 @@ static void s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType,
}
else if (byPktType == PK_TYPE_11A) {
if (byFBOption == AUTO_FB_NONE) {
- PSRTS_ab pBuf = (PSRTS_ab)pvRTS;
+ struct vnt_rts_ab *pBuf = (struct vnt_rts_ab *)pvRTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField), (u8 *)&(pBuf->bySignalField)
@@ -741,7 +741,7 @@ static void s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType,
memcpy(pBuf->data.ta, psEthHeader->h_source, ETH_ALEN);
}
else {
- PSRTS_a_FB pBuf = (PSRTS_a_FB)pvRTS;
+ struct vnt_rts_a_fb *pBuf = (struct vnt_rts_a_fb *)pvRTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uRTSFrameLen, pDevice->byTopOFDMBasicRate, byPktType,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField), (u8 *)&(pBuf->bySignalField)
@@ -774,7 +774,7 @@ static void s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType,
}
}
else if (byPktType == PK_TYPE_11B) {
- PSRTS_ab pBuf = (PSRTS_ab)pvRTS;
+ struct vnt_rts_ab *pBuf = (struct vnt_rts_ab *)pvRTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uRTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField), (u8 *)&(pBuf->bySignalField)
@@ -1151,10 +1151,15 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
if (bRTS == true) {//RTS_need
pvRrvTime = (PSRrvTime_gRTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS));
- pvRTS = (PSRTS_g) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR);
+ pvRTS = (struct vnt_rts_g *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gRTS) + cbMICHDR);
pvCTS = NULL;
- pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR + sizeof(SRTS_g));
- cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR + sizeof(SRTS_g) + sizeof(STxDataHead_g);
+ pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gRTS) + cbMICHDR +
+ sizeof(struct vnt_rts_g));
+ cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gRTS) +
+ cbMICHDR + sizeof(struct vnt_rts_g) +
+ sizeof(STxDataHead_g);
}
else { //RTS_needless
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
@@ -1169,10 +1174,14 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
if (bRTS == true) {//RTS_need
pvRrvTime = (PSRrvTime_gRTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS));
- pvRTS = (PSRTS_g_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR);
+ pvRTS = (struct vnt_rts_g_fb *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gRTS) + cbMICHDR);
pvCTS = NULL;
- pvTxDataHd = (PSTxDataHead_g_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR + sizeof(SRTS_g_FB));
- cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR + sizeof(SRTS_g_FB) + sizeof(STxDataHead_g_FB);
+ pvTxDataHd = (PSTxDataHead_g_FB) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gRTS) + cbMICHDR +
+ sizeof(struct vnt_rts_g_fb));
+ cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gRTS) + cbMICHDR +
+ sizeof(struct vnt_rts_g_fb) + sizeof(STxDataHead_g_FB);
}
else if (bRTS == false) { //RTS_needless
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
@@ -1189,10 +1198,14 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
if (bRTS == true) {//RTS_need
pvRrvTime = (PSRrvTime_ab) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab));
- pvRTS = (PSRTS_ab) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR);
+ pvRTS = (struct vnt_rts_ab *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_ab) + cbMICHDR);
pvCTS = NULL;
- pvTxDataHd = (PSTxDataHead_ab) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR + sizeof(SRTS_ab));
- cbHeaderLength = wTxBufSize + sizeof(PSRrvTime_ab) + cbMICHDR + sizeof(SRTS_ab) + sizeof(STxDataHead_ab);
+ pvTxDataHd = (PSTxDataHead_ab) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_ab) + cbMICHDR +
+ sizeof(struct vnt_rts_ab));
+ cbHeaderLength = wTxBufSize + sizeof(PSRrvTime_ab) + cbMICHDR +
+ sizeof(struct vnt_rts_ab) + sizeof(STxDataHead_ab);
}
else if (bRTS == false) { //RTS_needless, no MICHDR
pvRrvTime = (PSRrvTime_ab) (pbyTxBufferAddr + wTxBufSize);
@@ -1207,10 +1220,14 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
if (bRTS == true) {//RTS_need
pvRrvTime = (PSRrvTime_ab) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab));
- pvRTS = (PSRTS_a_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR);
+ pvRTS = (struct vnt_rts_a_fb *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_ab) + cbMICHDR);
pvCTS = NULL;
- pvTxDataHd = (PSTxDataHead_a_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR + sizeof(SRTS_a_FB));
- cbHeaderLength = wTxBufSize + sizeof(PSRrvTime_ab) + cbMICHDR + sizeof(SRTS_a_FB) + sizeof(STxDataHead_a_FB);
+ pvTxDataHd = (PSTxDataHead_a_FB) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_ab) + cbMICHDR +
+ sizeof(struct vnt_rts_a_fb));
+ cbHeaderLength = wTxBufSize + sizeof(PSRrvTime_ab) + cbMICHDR +
+ sizeof(struct vnt_rts_a_fb) + sizeof(STxDataHead_a_FB);
}
else if (bRTS == false) { //RTS_needless
pvRrvTime = (PSRrvTime_ab) (pbyTxBufferAddr + wTxBufSize);
diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h
index 3e347a9..8ce5bfc 100644
--- a/drivers/staging/vt6656/rxtx.h
+++ b/drivers/staging/vt6656/rxtx.h
@@ -32,6 +32,59 @@
#include "device.h"
#include "wcmd.h"
+/* RTS buffer header */
+struct vnt_rts_g {
+ u8 bySignalField_b;
+ u8 byServiceField_b;
+ u16 wTransmitLength_b;
+ u8 bySignalField_a;
+ u8 byServiceField_a;
+ u16 wTransmitLength_a;
+ u16 wDuration_ba;
+ u16 wDuration_aa;
+ u16 wDuration_bb;
+ u16 wReserved;
+ struct ieee80211_rts data;
+} __packed;
+
+struct vnt_rts_g_fb {
+ u8 bySignalField_b;
+ u8 byServiceField_b;
+ u16 wTransmitLength_b;
+ u8 bySignalField_a;
+ u8 byServiceField_a;
+ u16 wTransmitLength_a;
+ u16 wDuration_ba;
+ u16 wDuration_aa;
+ u16 wDuration_bb;
+ u16 wReserved;
+ u16 wRTSDuration_ba_f0;
+ u16 wRTSDuration_aa_f0;
+ u16 wRTSDuration_ba_f1;
+ u16 wRTSDuration_aa_f1;
+ struct ieee80211_rts data;
+} __packed;
+
+struct vnt_rts_ab {
+ u8 bySignalField;
+ u8 byServiceField;
+ u16 wTransmitLength;
+ u16 wDuration;
+ u16 wReserved;
+ struct ieee80211_rts data;
+} __packed;
+
+struct vnt_rts_a_fb {
+ u8 bySignalField;
+ u8 byServiceField;
+ u16 wTransmitLength;
+ u16 wDuration;
+ u16 wReserved;
+ u16 wRTSDuration_f0;
+ u16 wRTSDuration_f1;
+ struct ieee80211_rts data;
+} __packed;
+
struct vnt_tx_buffer {
u8 byType;
u8 byPKTNO;
--
1.8.1.2
^ permalink raw reply related
* [PATCH 2/2] staging: vt6656: desc.h Move typedef struct tagSCTS* to new structures in rxtx.h
From: Malcolm Priestley @ 2013-08-15 20:27 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
The new structures being
typedef struct tagSCTS -> struct vnt_cts
typedef struct tagSCTS_FB -> struct vnt_cts_fb
These are only needed by rxtc.c so moved to rxtx.h and
will eventually form part of the structure of
struct vnt_tx_buffer.
The linux/ieee80211.h in desc.h is no longer needed.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/desc.h | 32 ------------------------------
drivers/staging/vt6656/rxtx.c | 45 ++++++++++++++++++++++++++++---------------
drivers/staging/vt6656/rxtx.h | 23 ++++++++++++++++++++++
3 files changed, 53 insertions(+), 47 deletions(-)
diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h
index 4e2eb18..d770a78 100644
--- a/drivers/staging/vt6656/desc.h
+++ b/drivers/staging/vt6656/desc.h
@@ -33,7 +33,6 @@
#include <linux/types.h>
#include <linux/mm.h>
-#include <linux/ieee80211.h>
#include "tether.h"
@@ -186,37 +185,6 @@ SRrvTime_atim, *PSRrvTime_atim;
typedef const SRrvTime_atim *PCSRrvTime_atim;
/*
- * CTS buffer header
- */
-typedef struct tagSCTS {
- u8 bySignalField_b;
- u8 byServiceField_b;
- u16 wTransmitLength_b;
- u16 wDuration_ba;
- u16 wReserved;
- struct ieee80211_cts data;
- u16 reserved2;
-} __attribute__ ((__packed__))
-SCTS, *PSCTS;
-
-typedef const SCTS *PCSCTS;
-
-typedef struct tagSCTS_FB {
- u8 bySignalField_b;
- u8 byServiceField_b;
- u16 wTransmitLength_b;
- u16 wDuration_ba;
- u16 wReserved;
- u16 wCTSDuration_ba_f0;
- u16 wCTSDuration_ba_f1;
- struct ieee80211_cts data;
- u16 reserved2;
-} __attribute__ ((__packed__))
-SCTS_FB, *PSCTS_FB;
-
-typedef const SCTS_FB *PCSCTS_FB;
-
-/*
* TX FIFO header
*/
typedef struct tagSTxBufHead {
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index e7ff845..d9827b3 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -822,7 +822,7 @@ static void s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx,
if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA) {
// Auto Fall back
- PSCTS_FB pBuf = (PSCTS_FB)pvCTS;
+ struct vnt_cts_fb *pBuf = (struct vnt_cts_fb *)pvCTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField_b), (u8 *)&(pBuf->bySignalField_b)
@@ -844,7 +844,7 @@ static void s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx,
pBuf->data.frame_control = TYPE_CTL_CTS;
memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN);
} else { //if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA)
- PSCTS pBuf = (PSCTS)pvCTS;
+ struct vnt_cts *pBuf = (struct vnt_cts *)pvCTS;
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B,
(u16 *)&(wLen), (u8 *)&(pBuf->byServiceField_b), (u8 *)&(pBuf->bySignalField_b)
@@ -1165,9 +1165,13 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS));
pvRTS = NULL;
- pvCTS = (PSCTS) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR);
- pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS));
- cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS) + sizeof(STxDataHead_g);
+ pvCTS = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + cbMICHDR);
+ pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + cbMICHDR +
+ sizeof(struct vnt_cts));
+ cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR +
+ sizeof(struct vnt_cts) + sizeof(STxDataHead_g);
}
} else {
// Auto Fall Back
@@ -1187,9 +1191,14 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS));
pvRTS = NULL;
- pvCTS = (PSCTS_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR);
- pvTxDataHd = (PSTxDataHead_g_FB) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS_FB));
- cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS_FB) + sizeof(STxDataHead_g_FB);
+ pvCTS = (struct vnt_cts_fb *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + cbMICHDR);
+ pvTxDataHd = (PSTxDataHead_g_FB) (pbyTxBufferAddr +
+ wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR +
+ sizeof(struct vnt_cts_fb));
+ cbHeaderLength = wTxBufSize + sizeof(SRrvTime_gCTS) +
+ cbMICHDR + sizeof(struct vnt_cts_fb) +
+ sizeof(STxDataHead_g_FB);
}
} // Auto Fall Back
}
@@ -1508,7 +1517,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
PSTxBufHead pTxBufHead;
PUSB_SEND_CONTEXT pContext;
struct ieee80211_hdr *pMACHeader;
- PSCTS pCTS;
+ struct vnt_cts *pCTS;
struct ethhdr sEthHeader;
u8 byPktType, *pbyTxBufferAddr;
void *pvRTS, *pvTxDataHd, *pvRrvTime, *pMICHDR;
@@ -1647,9 +1656,12 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = NULL;
pvRTS = NULL;
- pCTS = (PSCTS) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS));
- pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + sizeof(SCTS));
- cbHeaderSize = wTxBufSize + sizeof(SRrvTime_gCTS) + sizeof(SCTS) + sizeof(STxDataHead_g);
+ pCTS = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS));
+ pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + sizeof(struct vnt_cts));
+ cbHeaderSize = wTxBufSize + sizeof(SRrvTime_gCTS) +
+ sizeof(struct vnt_cts) + sizeof(STxDataHead_g);
}
else { // 802.11a/b packet
pvRrvTime = (PSRrvTime_ab) (pbyTxBufferAddr + wTxBufSize);
@@ -2047,9 +2059,12 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
pvRrvTime = (PSRrvTime_gCTS) (pbyTxBufferAddr + wTxBufSize);
pMICHDR = (PSMICHDRHead) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS));
pvRTS = NULL;
- pvCTS = (PSCTS) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR);
- pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS));
- cbHeaderSize = wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(SCTS) + sizeof(STxDataHead_g);
+ pvCTS = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + cbMICHDR);
+ pvTxDataHd = (PSTxDataHead_g) (pbyTxBufferAddr + wTxBufSize +
+ sizeof(SRrvTime_gCTS) + cbMICHDR + sizeof(struct vnt_cts));
+ cbHeaderSize = wTxBufSize + sizeof(SRrvTime_gCTS) + cbMICHDR +
+ sizeof(struct vnt_cts) + sizeof(STxDataHead_g);
}
else {//802.11a/b packet
diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h
index 8ce5bfc..8fd5be1 100644
--- a/drivers/staging/vt6656/rxtx.h
+++ b/drivers/staging/vt6656/rxtx.h
@@ -85,6 +85,29 @@ struct vnt_rts_a_fb {
struct ieee80211_rts data;
} __packed;
+/* CTS buffer header */
+struct vnt_cts {
+ u8 bySignalField_b;
+ u8 byServiceField_b;
+ u16 wTransmitLength_b;
+ u16 wDuration_ba;
+ u16 wReserved;
+ struct ieee80211_cts data;
+ u16 reserved2;
+} __packed;
+
+struct vnt_cts_fb {
+ u8 bySignalField_b;
+ u8 byServiceField_b;
+ u16 wTransmitLength_b;
+ u16 wDuration_ba;
+ u16 wReserved;
+ u16 wCTSDuration_ba_f0;
+ u16 wCTSDuration_ba_f1;
+ struct ieee80211_cts data;
+ u16 reserved2;
+} __packed;
+
struct vnt_tx_buffer {
u8 byType;
u8 byPKTNO;
--
1.8.1.2
^ permalink raw reply related
* Re: Switching band of a dual-band WiFi device
From: Christian Gagneraud @ 2013-08-15 22:43 UTC (permalink / raw)
To: Simon Farnsworth; +Cc: linux-wireless
In-Reply-To: <1483073.ZnhDhG6Z68@f17simon>
On 15/08/13 21:03, Simon Farnsworth wrote:
> On Thursday 15 August 2013 17:11:59 Christian Gagneraud wrote:
>> Hi there,
>>
>> I am using a TP-Link TL-WDN3200 on a ubuntu 13.04 (kernel
>> 3.8.0-27-generic), and I have install relevant modules with
>> backports-3.11-rc3-1.
>>
>> I would like to switch my WiFi stick to 5GHz, I tried iwconfig wlan0
>> freq 5G, but I get ENOTSUPP.
>> Is the freq settings suppose to handle this 2.4 vs 5GHz band or is it
>> only for selecting channel frequency within a given band?
>>
>> Does linux-wireless provides a way for selecting 2.4 or 5GHz band?
>
> Linux should automatically select the right frequency band, depending on
> the frequencies in use by the device you're trying to communicate with.
> Connect to an AP in the 5GHz band, and Linux should just use 5GHz
> automatically.
>>
>> "iw phy phy11 info" tells me that in band 2, all the frequencies are
>> disabled except:
>> * 5745 MHz [149] (30.0 dBm)
>> * 5755 MHz [151] (30.0 dBm)
>> * 5765 MHz [153] (30.0 dBm)
>> * 5775 MHz [155] (30.0 dBm)
>> * 5785 MHz [157] (30.0 dBm)
>> * 5795 MHz [159] (30.0 dBm)
>> * 5805 MHz [161] (30.0 dBm)
>> * 5825 MHz [165] (30.0 dBm)
>>
> That's showing you that, with Linux's understanding of the RF regulations in
> your area, it can only transmit on certain frequencies.
OK, that's the CRDA thing, I understand now! ;)
>
>> As well, my understanding of WiFi might be a bit limited but, does a
>> dual-band WiFi device provides 2.4 and 5GHz services at the same time or
>> do I need to select one or the other myself? Or maybe I can just
>> enable/disable them manually (and separately)?
>>
> A dual-band WiFi device can only transmit and receive on one channel at a
> time. The advantage of dual-band is that it can transmit and receive on either
> the 5GHz band (which is less crowded), or the 2.4GHz band (which is more
> commonly used). There's no need to select the band manually - it will just
> use 5GHz when the other device (e.g. the AP) is using 5GHz.
>
Thanks for your answers Simon, everything is working now.
I had to change the regulatory domain of the USB stick to NZ as it comes
with CN (country of origin) and NZ/CN don't really overlap in the 5GHz band.
Regards,
Chris
^ permalink raw reply
* [TL-WN721N] No disconnect notification when AP is gone
From: Christian Gagneraud @ 2013-08-15 23:12 UTC (permalink / raw)
To: linux-wireless
Hi there,
I'm using a TP-LINK TL-WN721N, and experience a strange behaviour, I'm
running Ubuntu 13.04 (3.8.0-27-generic + backports-3.11-rc3-1).
The problem is that if I am connected to my AP and then power it off, I
never receive a disconnect notification.
I first reported the bug to the connman mailing list [1], but it was
suggested there that it could be a bug in the device driver.
At first I was using the Ubuntu kernel modules, but before reporting any
bugs, I switched to backports-3.11-rc3-1, and I still have the problem.
Any thoughts?
Regards,
Chris
[1] Latest messages haven't been archived yet, but:
https://lists.connman.net/pipermail/connman/2013-August/015401.html
^ permalink raw reply
* Re: [PATCH 1/2] staging: vt6656: desc.h Remove typedef struct tagSRTS_* to new strutures in rxtx.h
From: Joe Perches @ 2013-08-16 1:21 UTC (permalink / raw)
To: Malcolm Priestley; +Cc: gregkh, linux-wireless
In-Reply-To: <1376598205.8200.27.camel@canaries32-MCP7A>
On Thu, 2013-08-15 at 21:23 +0100, Malcolm Priestley wrote:
> The new structures being
> typedef struct tagSRTS_g -> struct vnt_rts_g
> typedef struct tagSRTS_g_FB -> struct vnt_rts_g_fb
> typedef struct tagSRTS_ab -> struct vnt_rts_ab
> typedef struct tagSRTS_a_FB -> struct vnt_rts_a_fb
>
> These are only needed by rxtc.c so moved to rxtx.h and
> will eventually form part of the structure of
> struct vnt_tx_buffer.
It would be simpler to verify these changes
if you did not do any whitespace modifications
like changing line wrapping at the same time.
^ permalink raw reply
* Re: [PATCH] backports: rename some mem functions to not break custom kernels
From: Luis R. Rodriguez @ 2013-08-16 3:14 UTC (permalink / raw)
To: Arik Nemtsov, backports; +Cc: linux-wireless, mcgrof
In-Reply-To: <1376466485-25796-1-git-send-email-arik@wizery.com>
On Wed, Aug 14, 2013 at 10:48:05AM +0300, Arik Nemtsov wrote:
> When custom patches are cherry-picked to a kernel, some symbols exported
> by backports may clash with the built-in ones. Rename the backports
> symbols using the standard backport_ prefix to prevent that.
>
> The offending symbols were exported by the patch below:
>
> commit 2ce5c22448bb45998318267c00b5d6ef9cff3170
> Author: Hauke Mehrtens <hauke@hauke-m.de>
> Date: Thu Jun 6 13:48:04 2013 +0200
>
> backports: backport some memory functions
>
> Signed-off-by: Arik Nemtsov <arik@wizery.com>
Thanks, applied and pushed. Next time please add
the backports@vger.kernel.org list.
Luis
^ permalink raw reply
* Re: [TL-WN721N] No disconnect notification when AP is gone
From: Oleksij Rempel @ 2013-08-16 7:05 UTC (permalink / raw)
To: Christian Gagneraud; +Cc: linux-wireless, ath9k-devel@lists.ath9k.org
In-Reply-To: <520D6058.7040405@gna.org>
Am 16.08.2013 01:12, schrieb Christian Gagneraud:
> Hi there,
>
> I'm using a TP-LINK TL-WN721N, and experience a strange behaviour, I'm
> running Ubuntu 13.04 (3.8.0-27-generic + backports-3.11-rc3-1).
>
> The problem is that if I am connected to my AP and then power it off, I
> never receive a disconnect notification.
>
> I first reported the bug to the connman mailing list [1], but it was
> suggested there that it could be a bug in the device driver.
>
> At first I was using the Ubuntu kernel modules, but before reporting any
> bugs, I switched to backports-3.11-rc3-1, and I still have the problem.
>
> Any thoughts?
>
> Regards,
> Chris
>
> [1] Latest messages haven't been archived yet, but:
> https://lists.connman.net/pipermail/connman/2013-August/015401.html
I assume it is Atheros ar9271 based adapter. Did you tried to use latest
firmware?
https://github.com/qca/open-ath9k-htc-firmware
If you have some time, i'll suggest you to investigate this issue so far
you can by your self.
--
Regards,
Oleksij
^ permalink raw reply
* [PATCH 2/2] rt2x00: rt2800pci: fix AUX_CTRL register setup for RT3090/3390/3593/5592
From: Gabor Juhos @ 2013-08-16 8:23 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Gabor Juhos
In-Reply-To: <1376641410-20798-1-git-send-email-juhosg@openwrt.org>
The 2011_1007_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO
driver enables PCIe wakeup for these chips as well.
Do the same in rt2x00.
References:
rt28xx_init in common/rtmp_init_intf.c
RTMPInitPCIeLinkCtrlValue in os/linux/rt_rbus_pci_drv.c
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
---
drivers/net/wireless/rt2x00/rt2800pci.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index e470fdb..182205b 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -537,9 +537,13 @@ static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev)
rt2x00mmio_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
if (rt2x00_is_pcie(rt2x00dev) &&
- (rt2x00_rt(rt2x00dev, RT3572) ||
+ (rt2x00_rt(rt2x00dev, RT3090) ||
+ rt2x00_rt(rt2x00dev, RT3390) ||
+ rt2x00_rt(rt2x00dev, RT3572) ||
+ rt2x00_rt(rt2x00dev, RT3593) ||
rt2x00_rt(rt2x00dev, RT5390) ||
- rt2x00_rt(rt2x00dev, RT5392))) {
+ rt2x00_rt(rt2x00dev, RT5392) ||
+ rt2x00_rt(rt2x00dev, RT5592))) {
rt2x00mmio_register_read(rt2x00dev, AUX_CTRL, ®);
rt2x00_set_field32(®, AUX_CTRL_FORCE_PCIE_CLK, 1);
rt2x00_set_field32(®, AUX_CTRL_WAKE_PCIE_EN, 1);
--
1.7.10
^ permalink raw reply related
* [PATCH 1/2] rt2x00: rt2800lib: introduce rt2800_get_txwi_rxwi_size helper
From: Gabor Juhos @ 2013-08-16 8:23 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless, users, Gabor Juhos
The rt2800pci driver uses the same [RT]XWI size
for all chipsets, however some chips requires
different values.
The size of the [RT]XWI structures is a constant
value for a given chipset and it does not depend
on the underlying interface. Add a helper function
which returns the correct values for the actual
chipset and use the new helper both in the rt2800usb
and in the rt2800pci drivers. This ensures that both
drivers are using the correct values.
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 23 +++++++++++++++++++++++
drivers/net/wireless/rt2x00/rt2800lib.h | 4 ++++
drivers/net/wireless/rt2x00/rt2800pci.c | 11 ++++++++---
drivers/net/wireless/rt2x00/rt2800usb.c | 11 +----------
4 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index dedc3d4..313da6a 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -521,6 +521,29 @@ void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev)
}
EXPORT_SYMBOL_GPL(rt2800_disable_wpdma);
+void rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev,
+ unsigned short *txwi_size,
+ unsigned short *rxwi_size)
+{
+ switch (rt2x00dev->chip.rt) {
+ case RT3593:
+ *txwi_size = TXWI_DESC_SIZE_4WORDS;
+ *rxwi_size = RXWI_DESC_SIZE_5WORDS;
+ break;
+
+ case RT5592:
+ *txwi_size = TXWI_DESC_SIZE_5WORDS;
+ *rxwi_size = RXWI_DESC_SIZE_6WORDS;
+ break;
+
+ default:
+ *txwi_size = TXWI_DESC_SIZE_4WORDS;
+ *rxwi_size = RXWI_DESC_SIZE_4WORDS;
+ break;
+ }
+}
+EXPORT_SYMBOL_GPL(rt2800_get_txwi_rxwi_size);
+
static bool rt2800_check_firmware_crc(const u8 *data, const size_t len)
{
u16 fw_crc;
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 6ec7394..a94ba44 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -226,4 +226,8 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
struct survey_info *survey);
void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
+void rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev,
+ unsigned short *txwi_size,
+ unsigned short *rxwi_size);
+
#endif /* RT2800LIB_H */
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 1f6a4e3..e470fdb 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -1223,12 +1223,17 @@ static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = {
static void rt2800pci_queue_init(struct data_queue *queue)
{
+ struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
+ unsigned short txwi_size, rxwi_size;
+
+ rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size);
+
switch (queue->qid) {
case QID_RX:
queue->limit = 128;
queue->data_size = AGGREGATION_SIZE;
queue->desc_size = RXD_DESC_SIZE;
- queue->winfo_size = RXWI_DESC_SIZE_4WORDS;
+ queue->winfo_size = rxwi_size;
queue->priv_size = sizeof(struct queue_entry_priv_mmio);
break;
@@ -1239,7 +1244,7 @@ static void rt2800pci_queue_init(struct data_queue *queue)
queue->limit = 64;
queue->data_size = AGGREGATION_SIZE;
queue->desc_size = TXD_DESC_SIZE;
- queue->winfo_size = TXWI_DESC_SIZE_4WORDS;
+ queue->winfo_size = txwi_size;
queue->priv_size = sizeof(struct queue_entry_priv_mmio);
break;
@@ -1247,7 +1252,7 @@ static void rt2800pci_queue_init(struct data_queue *queue)
queue->limit = 8;
queue->data_size = 0; /* No DMA required for beacons */
queue->desc_size = TXD_DESC_SIZE;
- queue->winfo_size = TXWI_DESC_SIZE_4WORDS;
+ queue->winfo_size = txwi_size;
queue->priv_size = sizeof(struct queue_entry_priv_mmio);
break;
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index fc9efdf..338034e 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -854,16 +854,7 @@ static void rt2800usb_queue_init(struct data_queue *queue)
struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
unsigned short txwi_size, rxwi_size;
- if (rt2x00_rt(rt2x00dev, RT3593)) {
- txwi_size = TXWI_DESC_SIZE_4WORDS;
- rxwi_size = RXWI_DESC_SIZE_5WORDS;
- } else if (rt2x00_rt(rt2x00dev, RT5592)) {
- txwi_size = TXWI_DESC_SIZE_5WORDS;
- rxwi_size = RXWI_DESC_SIZE_6WORDS;
- } else {
- txwi_size = TXWI_DESC_SIZE_4WORDS;
- rxwi_size = RXWI_DESC_SIZE_4WORDS;
- }
+ rt2800_get_txwi_rxwi_size(rt2x00dev, &txwi_size, &rxwi_size);
switch (queue->qid) {
case QID_RX:
--
1.7.10
^ permalink raw reply related
* Re: [PATCH-resend 0/9] ath5k/ath9k: respin/resend 5/10 MHz and CSA patches
From: Simon Wunderlich @ 2013-08-16 8:38 UTC (permalink / raw)
To: John W. Linville; +Cc: Simon Wunderlich, linux-wireless, Simon Wunderlich
In-Reply-To: <20130815200404.GH2133@tuxdriver.com>
[-- Attachment #1: Type: text/plain, Size: 1202 bytes --]
On Thu, Aug 15, 2013 at 04:04:04PM -0400, John W. Linville wrote:
> On Wed, Aug 14, 2013 at 08:01:29AM +0200, Simon Wunderlich wrote:
> > This series contains the rebased patches for 5/10 MHz and channel switch
> > announcement for ath5k/ath9k as sent in their respective series earlier. No
> > modification was made. Since Johannes picked the nl/cfg/mac80211 parts
> > only, these patches are still missing in the tree. John reported some
> > trouble building with these patches, but I couldn't see any problems here.
> >
> > The series is based on wireless-testing of todays master. Please tell
> > me if there are any problems (including compiler errors and kernel config)
> > so I can rework if neccesary.
>
> CC drivers/net/wireless/ath/ath9k/rc.o
> drivers/net/wireless/ath/ath9k/rc.c: In function ‘ath_rate_update’:
> drivers/net/wireless/ath/ath9k/rc.c:1333:3: error: invalid type argument of ‘->’ (have ‘struct cfg80211_chan_def’)
> make[2]: *** [drivers/net/wireless/ath/ath9k/rc.o] Error 1
>
Ah - I missed the ath9k rate control configuration ... thought I had it on.
Thanks a lot, I'll send a replacement patch for this one in a minute.
Simon
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply
* [PATCH-resend-v2 2/9] ath9k: use chandef instead of channel_type
From: Simon Wunderlich @ 2013-08-16 8:46 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Simon Wunderlich, Mathias Kretschmer
In-Reply-To: <1376460098-26648-3-git-send-email-siwu@hrz.tu-chemnitz.de>
To enable support for 5/10 MHz, some internal functions must be
converted from using the (old) channel_type to chandef. This is a good
chance to change all remaining occurences.
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de>
---
Changes to PATCH-resend:
* fixed compile error in rc.c
---
drivers/net/wireless/ath/ath9k/common.c | 67 +++++++++++++++----------
drivers/net/wireless/ath/ath9k/common.h | 3 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 5 +-
drivers/net/wireless/ath/ath9k/init.c | 4 +-
drivers/net/wireless/ath/ath9k/main.c | 8 ++-
drivers/net/wireless/ath/ath9k/rc.c | 4 +-
6 files changed, 51 insertions(+), 40 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c
index 344fdde..d3063c2 100644
--- a/drivers/net/wireless/ath/ath9k/common.c
+++ b/drivers/net/wireless/ath/ath9k/common.c
@@ -49,37 +49,40 @@ int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb)
}
EXPORT_SYMBOL(ath9k_cmn_get_hw_crypto_keytype);
-static u32 ath9k_get_extchanmode(struct ieee80211_channel *chan,
- enum nl80211_channel_type channel_type)
+static u32 ath9k_get_extchanmode(struct cfg80211_chan_def *chandef)
{
u32 chanmode = 0;
- switch (chan->band) {
+ switch (chandef->chan->band) {
case IEEE80211_BAND_2GHZ:
- switch (channel_type) {
- case NL80211_CHAN_NO_HT:
- case NL80211_CHAN_HT20:
+ switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_20_NOHT:
+ case NL80211_CHAN_WIDTH_20:
chanmode = CHANNEL_G_HT20;
break;
- case NL80211_CHAN_HT40PLUS:
- chanmode = CHANNEL_G_HT40PLUS;
+ case NL80211_CHAN_WIDTH_40:
+ if (chandef->center_freq1 > chandef->chan->center_freq)
+ chanmode = CHANNEL_G_HT40PLUS;
+ else
+ chanmode = CHANNEL_G_HT40MINUS;
break;
- case NL80211_CHAN_HT40MINUS:
- chanmode = CHANNEL_G_HT40MINUS;
+ default:
break;
}
break;
case IEEE80211_BAND_5GHZ:
- switch (channel_type) {
- case NL80211_CHAN_NO_HT:
- case NL80211_CHAN_HT20:
+ switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_20_NOHT:
+ case NL80211_CHAN_WIDTH_20:
chanmode = CHANNEL_A_HT20;
break;
- case NL80211_CHAN_HT40PLUS:
- chanmode = CHANNEL_A_HT40PLUS;
+ case NL80211_CHAN_WIDTH_40:
+ if (chandef->center_freq1 > chandef->chan->center_freq)
+ chanmode = CHANNEL_A_HT40PLUS;
+ else
+ chanmode = CHANNEL_A_HT40MINUS;
break;
- case NL80211_CHAN_HT40MINUS:
- chanmode = CHANNEL_A_HT40MINUS;
+ default:
break;
}
break;
@@ -94,13 +97,12 @@ static u32 ath9k_get_extchanmode(struct ieee80211_channel *chan,
* Update internal channel flags.
*/
void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan,
- struct ieee80211_channel *chan,
- enum nl80211_channel_type channel_type)
+ struct cfg80211_chan_def *chandef)
{
- ichan->channel = chan->center_freq;
- ichan->chan = chan;
+ ichan->channel = chandef->chan->center_freq;
+ ichan->chan = chandef->chan;
- if (chan->band == IEEE80211_BAND_2GHZ) {
+ if (chandef->chan->band == IEEE80211_BAND_2GHZ) {
ichan->chanmode = CHANNEL_G;
ichan->channelFlags = CHANNEL_2GHZ | CHANNEL_OFDM;
} else {
@@ -108,8 +110,22 @@ void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan,
ichan->channelFlags = CHANNEL_5GHZ | CHANNEL_OFDM;
}
- if (channel_type != NL80211_CHAN_NO_HT)
- ichan->chanmode = ath9k_get_extchanmode(chan, channel_type);
+ switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_5:
+ ichan->channelFlags |= CHANNEL_QUARTER;
+ break;
+ case NL80211_CHAN_WIDTH_10:
+ ichan->channelFlags |= CHANNEL_HALF;
+ break;
+ case NL80211_CHAN_WIDTH_20_NOHT:
+ break;
+ case NL80211_CHAN_WIDTH_20:
+ case NL80211_CHAN_WIDTH_40:
+ ichan->chanmode = ath9k_get_extchanmode(chandef);
+ break;
+ default:
+ WARN_ON(1);
+ }
}
EXPORT_SYMBOL(ath9k_cmn_update_ichannel);
@@ -125,8 +141,7 @@ struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
chan_idx = curchan->hw_value;
channel = &ah->channels[chan_idx];
- ath9k_cmn_update_ichannel(channel, curchan,
- cfg80211_get_chandef_type(&hw->conf.chandef));
+ ath9k_cmn_update_ichannel(channel, &hw->conf.chandef);
return channel;
}
diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
index 207d069..e039bcb 100644
--- a/drivers/net/wireless/ath/ath9k/common.h
+++ b/drivers/net/wireless/ath/ath9k/common.h
@@ -44,8 +44,7 @@
int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb);
void ath9k_cmn_update_ichannel(struct ath9k_channel *ichan,
- struct ieee80211_channel *chan,
- enum nl80211_channel_type channel_type);
+ struct cfg80211_chan_def *chandef);
struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
struct ath_hw *ah);
int ath9k_cmn_count_streams(unsigned int chainmask, int max);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index 5c1bec1..d442581 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1203,16 +1203,13 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || chip_reset) {
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
- enum nl80211_channel_type channel_type =
- cfg80211_get_chandef_type(&hw->conf.chandef);
int pos = curchan->hw_value;
ath_dbg(common, CONFIG, "Set channel: %d MHz\n",
curchan->center_freq);
ath9k_cmn_update_ichannel(&priv->ah->channels[pos],
- hw->conf.chandef.chan,
- channel_type);
+ &hw->conf.chandef);
if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) {
ath_err(common, "Unable to set channel\n");
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 3b56c2e..85015bf 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -726,13 +726,15 @@ static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
struct ieee80211_supported_band *sband;
struct ieee80211_channel *chan;
struct ath_hw *ah = sc->sc_ah;
+ struct cfg80211_chan_def chandef;
int i;
sband = &sc->sbands[band];
for (i = 0; i < sband->n_channels; i++) {
chan = &sband->channels[i];
ah->curchan = &ah->channels[chan->hw_value];
- ath9k_cmn_update_ichannel(ah->curchan, chan, NL80211_CHAN_HT20);
+ cfg80211_chandef_create(&chandef, chan, NL80211_CHAN_HT20);
+ ath9k_cmn_update_ichannel(ah->curchan, &chandef);
ath9k_hw_set_txpowerlimit(ah, MAX_RATE_POWER, true);
}
}
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 0bee105..ba382a8 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1201,8 +1201,6 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
- enum nl80211_channel_type channel_type =
- cfg80211_get_chandef_type(&conf->chandef);
int pos = curchan->hw_value;
int old_pos = -1;
unsigned long flags;
@@ -1210,8 +1208,8 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
- ath_dbg(common, CONFIG, "Set channel: %d MHz type: %d\n",
- curchan->center_freq, channel_type);
+ ath_dbg(common, CONFIG, "Set channel: %d MHz width: %d\n",
+ curchan->center_freq, hw->conf.chandef.width);
/* update survey stats for the old channel before switching */
spin_lock_irqsave(&common->cc_lock, flags);
@@ -1219,7 +1217,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
spin_unlock_irqrestore(&common->cc_lock, flags);
ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
- curchan, channel_type);
+ &conf->chandef);
/*
* If the operating channel changes, change the survey in-use flags
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index a3c4ca0..7e86abb 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -1326,8 +1326,8 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband,
ath_rc_init(sc, priv_sta);
ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG,
- "Operating HT Bandwidth changed to: %d\n",
- cfg80211_get_chandef_type(&sc->hw->conf.chandef));
+ "Operating Bandwidth changed to: %d\n",
+ sc->hw->conf.chandef.width);
}
}
--
1.7.10.4
^ permalink raw reply related
* Re: [PATCHv2 2/2] mac80211: non-functional change of rx handler location
From: Johannes Berg @ 2013-08-16 10:19 UTC (permalink / raw)
To: Johan Almbladh; +Cc: ordex, linux-wireless
In-Reply-To: <1376486987-23224-2-git-send-email-ja@anyfi.net>
On Wed, 2013-08-14 at 15:29 +0200, Johan Almbladh wrote:
> This patch changes the location of the rx handler functions to match
> the new order in which they are invoked.
Applied both, but I squashed them into one.
johannes
^ permalink raw reply
* Re: [PATCHv2 2/6] mac80211: split off channel switch parsing function
From: Johannes Berg @ 2013-08-16 10:25 UTC (permalink / raw)
To: Simon Wunderlich; +Cc: linux-wireless, Mathias Kretschmer, Simon Wunderlich
In-Reply-To: <1376058920-17779-3-git-send-email-siwu@hrz.tu-chemnitz.de>
On Fri, 2013-08-09 at 16:35 +0200, Simon Wunderlich wrote:
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -981,54 +981,35 @@ static void ieee80211_chswitch_timer(unsigned long data)
> ieee80211_queue_work(&sdata->local->hw, &sdata->u.mgd.chswitch_work);
> }
>
> -static void
> -ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
> - u64 timestamp, struct ieee802_11_elems *elems,
> - bool beacon)
> +int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
I think you should also move this function out of mlme.c, maybe the
(almost empty) spectmgmt.c file?
> + struct ieee802_11_elems *elems, bool beacon,
> + enum ieee80211_band current_band,
> + u32 sta_flags,
Passing sta_flags seems a bit odd - I understand the motivation but I
think it would be worthwhile to document (maybe in the kernel-doc in the
header file) which flags are used.
johannes
^ permalink raw reply
* Re: [PATCHv2 3/6] mac80211: move ibss presp generation in own function
From: Johannes Berg @ 2013-08-16 10:26 UTC (permalink / raw)
To: Simon Wunderlich; +Cc: linux-wireless, Mathias Kretschmer, Simon Wunderlich
In-Reply-To: <1376058920-17779-4-git-send-email-siwu@hrz.tu-chemnitz.de>
On Fri, 2013-08-09 at 16:35 +0200, Simon Wunderlich wrote:
> Channel Switch will later require to generate beacons without setting
> them immediately. Therefore split the presp generation in an own
> function. Splitting the original very long function might be a good idea
> anyway.
Applied.
johannes
^ permalink raw reply
* Re: [PATCHv2 4/6] mac80211: add support for CSA in IBSS mode
From: Johannes Berg @ 2013-08-16 10:33 UTC (permalink / raw)
To: Simon Wunderlich; +Cc: linux-wireless, Mathias Kretschmer, Simon Wunderlich
In-Reply-To: <1376058920-17779-5-git-send-email-siwu@hrz.tu-chemnitz.de>
On Fri, 2013-08-09 at 16:35 +0200, Simon Wunderlich wrote:
> Ths
This ;-)
> + case NL80211_IFTYPE_ADHOC:
> + if (!sdata->vif.bss_conf.ibss_joined)
> + return -EINVAL;
> +
> + if (params->chandef.width != sdata->u.ibss.chandef.width)
> + return -EINVAL;
> +
> + switch (params->chandef.width) {
> + case NL80211_CHAN_WIDTH_40:
> + if (cfg80211_get_chandef_type(¶ms->chandef) !=
> + cfg80211_get_chandef_type(&sdata->u.ibss.chandef))
> + return -EINVAL;
Is that really correct? It seems that you should be able to switch from
HT40- to HT40+ and vice versa when switching the channel?
And why disallow switching bandwidth (was above this code)? That doesn't
seem right either?
> +/* must hold sdata lock */
pretty useless comment if you have the assert in the function :)
> + rcu_read_lock();
> + ies = rcu_dereference(cbss->ies);
> + tsf = ies->tsf;
> + rcu_read_unlock();
> + cfg80211_put_bss(sdata->local->hw.wiphy, cbss);
> +
> + old_presp = rcu_dereference_protected(ifibss->presp,
> + lockdep_is_held(&sdata->wdev.mtx));
> +
> + presp = ieee80211_ibss_build_presp(sdata,
> + sdata->vif.bss_conf.beacon_int,
> + sdata->vif.bss_conf.basic_rates,
> + capability, tsf, &ifibss->chandef,
> + NULL, csa_settings);
This is pretty odd - why does the TSF have to go here? It needs to be
set by the device when transmitting anyway, no?
> +static void ieee80211_ibss_disconnect(struct ieee80211_sub_if_data *sdata)
> +{
Is this some refactoring that should be separate? I don't see how it's
really related to CSA? Maybe I'm missing something?
johannes
^ permalink raw reply
* Re: [PATCH] mac80211: implement STA CSA for drivers using channel contexts
From: Johannes Berg @ 2013-08-16 10:56 UTC (permalink / raw)
To: Arik Nemtsov; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <CA+XVXffREZsiLU_Gs646-akyW9XNcZEmQnQGsp4ihT92hP7LOw@mail.gmail.com>
On Thu, 2013-08-15 at 19:07 +0300, Arik Nemtsov wrote:
> On Thu, Aug 15, 2013 at 3:03 PM, Johannes Berg
> <johannes@sipsolutions.net> wrote:
> >> @@ -2872,6 +2872,11 @@ void ieee80211_csa_finalize_work(struct work_struct *work)
> >> if (WARN_ON(err < 0))
> >> return;
> >>
> >> + if (!local->use_chanctx) {
> >> + local->_oper_chandef = local->csa_chandef;
> >> + ieee80211_hw_config(local, 0);
> >> + }
> >
> > I don't really understand this part - I think you should add some
> > documentation or something?
>
> Basically I removed this chunk of code from
> ieee80211_vif_change_channel() and put it here - a bit later in the AP
> CSA flow.
> I don't think it does any harm.
Well, technically not, but I'm trying to reduce the places that touch
the old non-chanctx stuff, not increase them :-)
> >> @@ -453,11 +453,6 @@ int ieee80211_vif_change_channel(struct ieee80211_sub_if_data *sdata,
> >> chanctx_changed |= IEEE80211_CHANCTX_CHANGE_CHANNEL;
> >> drv_change_chanctx(local, ctx, chanctx_changed);
> >>
> >> - if (!local->use_chanctx) {
> >> - local->_oper_chandef = *chandef;
> >> - ieee80211_hw_config(local, 0);
> >> - }
> >
> > I really don't like it either - this was here so that no other code
> > really needed to be worried about non-chanctx drivers.
>
> Well right now ieee80211_chswitch_work() takes care of it, and does
> something a bit different there to accommodate the legacy behavior -
> if the chan_switch op is defined, ieee80211_hw_config is not called.
> Would you prefer that ieee80211_vif_change_channel() handle all this,
> checking interface type to do the right thing?
Well, it can't. If you look carefully then the old chan_switch op
behaviour is to let the driver switch, not switch in software
afterwards.
> I only added it since the current implementation of
> ieee80211_vif_change_channel() bails if it's false. That said, I'm not
> sure what's wrong here. This setting is per-vif.
Yeah but it's (currently) meant for interfaces controlling the CSA (i.e.
AP only right now) ... so I really think we need to make this
controllable, I think that when we want to implement it for Intel MVM
firmware then we'll let the firmware control the switch timing, etc.
None of this can even be done today or with your patch.
johannes
^ permalink raw reply
* Re: [PATCH] mac80211: add APIs to allow keeping connections after WoWLAN
From: Johannes Berg @ 2013-08-16 10:58 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <1376309240-2485-1-git-send-email-johannes@sipsolutions.net>
On Mon, 2013-08-12 at 14:07 +0200, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg@intel.com>
>
> In order to be able to (securely) keep connections alive after
> the system was suspended for WoWLAN, we need some additional
> APIs. We already have API (ieee80211_gtk_rekey_notify) to tell
> wpa_supplicant about the new replay counter if GTK rekeying
> was done by the device while the host was asleep, but that's
> not sufficient.
>
> If GTK rekeying wasn't done, we need to tell the host about
> sequence counters for the GTK (and PTK regardless of rekeying)
> that was used while asleep, add ieee80211_set_key_rx_seq() for
> that.
>
> If GTK rekeying was done, then we need to be able to disable
> the old keys (with ieee80211_remove_key()) and allocate the
> new GTK key(s) in mac80211 (with ieee80211_gtk_rekey_add()).
>
> If protocol offload (e.g. ARP) is implemented, then also the
> TX sequence counter for the PTK must be updated, using the new
> ieee80211_set_key_tx_seq() function.
Applied.
johannes
^ permalink raw reply
* pull-request: mac80211-next 2013-08-16
From: Johannes Berg @ 2013-08-16 11:01 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
[-- Attachment #1: Type: text/plain, Size: 3521 bytes --]
John,
And another set of patches for -next :-)
This time I have various improvements all over the place: IBSS, mesh,
testmode, AP client powersave handling, one of the rare rfkill patches
and some code cleanup.
Let me know if there's any problem.
johannes
The following changes since commit 73da7d5bab79ad7e16ff44d67c3fe8b9c0b33e5b:
mac80211: add channel switch command and beacon callbacks (2013-08-01 18:30:33 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git for-john
for you to fetch changes up to 27b3eb9c06a7193bdc9800cd00764a130343bc8a:
mac80211: add APIs to allow keeping connections after WoWLAN (2013-08-16 12:58:43 +0200)
----------------------------------------------------------------
Antonio Quartulli (1):
mac80211: ibss - do not scan if not needed when creating an IBSS
Chun-Yeow Yeoh (1):
mac80211: allow lowest basic rate for unicast management for mesh
David Spinadel (2):
cfg80211: add wdev to testmode cmd
mac80211: add vif to testmode cmd
Johan Almbladh (1):
mac80211: perform power save processing before decryption
Johannes Berg (4):
wireless: make TU conversion macros available
nl80211: clean up CQM settings code
mac80211: add control port protocol TX control flag
mac80211: add APIs to allow keeping connections after WoWLAN
Luis Henriques (1):
net: rfkill: Do not ignore errors from regulator_enable()
Simon Wunderlich (2):
mac80211: fix ieee80211_sta_process_chanswitch for 5/10 MHz channels
mac80211: move ibss presp generation in own function
Documentation/DocBook/80211.tmpl | 1 +
drivers/net/wireless/ath/ath6kl/testmode.c | 3 +-
drivers/net/wireless/ath/ath6kl/testmode.h | 7 +-
.../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 4 +-
drivers/net/wireless/iwlwifi/dvm/tx.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-devtrace.h | 7 +-
drivers/net/wireless/iwlwifi/mvm/time-event.c | 7 +-
drivers/net/wireless/iwlwifi/mvm/tx.c | 9 +-
drivers/net/wireless/mac80211_hwsim.c | 1 +
drivers/net/wireless/ti/wlcore/testmode.c | 3 +-
drivers/net/wireless/ti/wlcore/testmode.h | 3 +-
include/linux/ieee80211.h | 4 +
include/net/cfg80211.h | 5 +-
include/net/mac80211.h | 109 +++++-
net/mac80211/cfg.c | 15 +-
net/mac80211/ibss.c | 196 ++++++----
net/mac80211/ieee80211_i.h | 3 -
net/mac80211/key.c | 154 +++++++-
net/mac80211/mlme.c | 9 +
net/mac80211/rate.c | 23 +-
net/mac80211/rc80211_minstrel_ht.c | 5 +-
net/mac80211/rx.c | 404 ++++++++++-----------
net/mac80211/tx.c | 8 +-
net/mac80211/util.c | 2 +-
net/rfkill/rfkill-regulator.c | 8 +-
net/wireless/nl80211.c | 74 ++--
net/wireless/rdev-ops.h | 5 +-
net/wireless/trace.h | 8 +-
28 files changed, 707 insertions(+), 372 deletions(-)
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox