alistair23-linux/drivers/staging/rt3090/ap_wds.h
Bartlomiej Zolnierkiewicz 36c7928c3e Staging: add rt3090 wireless driver
This is the vendor driver for the Ralink RT3090 chipset.

It should be later cleaned and ported to use the existing rt2x00
infrastructure or just replaced by the proper version.

[ Unfortunately since it follows the same design/implementation like
  rt{286,287,307}0 drivers (already present in the staging tree)
  it is highly unlikely that it will see much love from the wireless
  development community.. ]

However since the development of the cleaner/proper version can take
significant time lets give distros (i.e. openSUSE seems to already
have the package with the original vendor driver) and users "something"
to use in the meantime.

I forward ported it to 2.6.31-rc1, ported to the Linux build system
and did some initial cleanups.  More fixes/cleanups to come later
(it seems that the driver can be made to share most of its code with
the other Ralink drivers already present in the staging tree).

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-09-15 12:01:31 -07:00

213 lines
5.1 KiB
C

/*
*************************************************************************
* Ralink Tech Inc.
* 5F., No.36, Taiyuan St., Jhubei City,
* Hsinchu County 302,
* Taiwan, R.O.C.
*
* (c) Copyright 2002-2007, Ralink Technology, Inc.
*
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
*************************************************************************
Module Name:
ap_cfg.h
Abstract:
Miniport generic portion header file
Revision History:
Who When What
-------- ---------- ----------------------------------------------
Fonchi 02-13-2007 created
*/
#ifndef _AP_WDS_H_
#define _AP_WDS_H_
#define WDS_ENTRY_RETRY_INTERVAL (100 * OS_HZ / 1000)
static inline BOOLEAN WDS_IF_UP_CHECK(
IN PRTMP_ADAPTER pAd,
IN ULONG ifidx)
{
if ((pAd->flg_wds_init != TRUE) ||
(ifidx >= MAX_WDS_ENTRY))
return FALSE;
// if (pAd->WdsTab.WdsEntry[ifidx].dev->flags & IFF_UP)
// Patch for wds ,when dirver call apmlmeperiod => APMlmeDynamicTxRateSwitching check if wds device ready
if ((pAd->WdsTab.WdsEntry[ifidx].dev != NULL) && (pAd->WdsTab.WdsEntry[ifidx].dev->flags & IFF_UP))
return TRUE;
return FALSE;
}
LONG WdsEntryAlloc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pAddr);
VOID WdsEntryDel(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pAddr);
MAC_TABLE_ENTRY *MacTableInsertWDSEntry(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pAddr,
UINT WdsTabIdx);
BOOLEAN MacTableDeleteWDSEntry(
IN PRTMP_ADAPTER pAd,
IN USHORT wcid,
IN PUCHAR pAddr);
BOOLEAN ApWdsAllowToSendPacket(
IN RTMP_ADAPTER *pAd,
IN PNDIS_PACKET pPacket,
OUT UCHAR *pWcid);
MAC_TABLE_ENTRY *WdsTableLookupByWcid(
IN PRTMP_ADAPTER pAd,
IN UCHAR wcid,
IN PUCHAR pAddr,
IN BOOLEAN bResetIdelCount);
MAC_TABLE_ENTRY *WdsTableLookup(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pAddr,
IN BOOLEAN bResetIdelCount);
MAC_TABLE_ENTRY *FindWdsEntry(
IN PRTMP_ADAPTER pAd,
IN UCHAR Wcid,
IN PUCHAR pAddr,
IN UINT32 PhyMode);
VOID WdsTableMaintenance(
IN PRTMP_ADAPTER pAd);
VOID RT28xx_WDS_Init(
IN PRTMP_ADAPTER pAd,
IN PNET_DEV net_dev);
VOID RT28xx_WDS_Close(
IN PRTMP_ADAPTER pAd);
VOID RT28xx_WDS_Remove(
IN PRTMP_ADAPTER pAd);
VOID WdsDown(
IN PRTMP_ADAPTER pAd);
VOID AsicUpdateWdsRxWCIDTable(
IN PRTMP_ADAPTER pAd);
VOID AsicUpdateWdsEncryption(
IN PRTMP_ADAPTER pAd,
IN UCHAR wcid);
VOID WdsPeerBeaconProc(
IN PRTMP_ADAPTER pAd,
IN PMAC_TABLE_ENTRY pEntry,
IN USHORT CapabilityInfo,
IN UCHAR MaxSupportedRateIn500Kbps,
IN UCHAR MaxSupportedRateLen,
IN BOOLEAN bWmmCapable,
IN ULONG ClientRalinkIe,
IN HT_CAPABILITY_IE *pHtCapability,
IN UCHAR HtCapabilityLen);
VOID APWdsInitialize(
IN PRTMP_ADAPTER pAd);
INT Show_WdsTable_Proc(
IN PRTMP_ADAPTER pAd,
IN PSTRING arg);
VOID rtmp_read_wds_from_file(
IN PRTMP_ADAPTER pAd,
PSTRING tmpbuf,
PSTRING buffer);
VOID WdsPrepareWepKeyFromMainBss(
IN PRTMP_ADAPTER pAd);
INT WdsVirtualIFSendPackets(
IN PNDIS_PACKET pSkb,
IN PNET_DEV dev);
INT WdsVirtualIF_open(
IN PNET_DEV dev);
INT WdsVirtualIF_close(
IN PNET_DEV dev);
INT WdsVirtualIF_ioctl(
IN PNET_DEV net_dev,
IN OUT struct ifreq *rq,
IN INT cmd);
/*
==========================================================================
Description:
Check the WDS Entry is valid or not.
==========================================================================
*/
static inline BOOLEAN ValidWdsEntry(
IN PRTMP_ADAPTER pAd,
IN UCHAR WdsIndex)
{
BOOLEAN result;
PMAC_TABLE_ENTRY pMacEntry;
do
{
if (WdsIndex >= MAX_WDS_ENTRY)
{
result = FALSE;
break;
}
if (pAd->WdsTab.WdsEntry[WdsIndex].Valid != TRUE)
{
result = FALSE;
break;
}
if ((pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID==0)
|| (pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID >= MAX_LEN_OF_MAC_TABLE))
{
result = FALSE;
break;
}
pMacEntry = &pAd->MacTab.Content[pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID];
if (pMacEntry->ValidAsWDS != TRUE)
{
result = FALSE;
break;
}
result = TRUE;
} while(FALSE);
return result;
}
#endif // _AP_WDS_H_ //