aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/vt6656/mac.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/vt6656/mac.c')
-rw-r--r--drivers/staging/vt6656/mac.c439
1 files changed, 107 insertions, 332 deletions
diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c
index 26c19d1408c..cadf7cd280c 100644
--- a/drivers/staging/vt6656/mac.c
+++ b/drivers/staging/vt6656/mac.c
@@ -35,66 +35,7 @@
#include "desc.h"
#include "mac.h"
#include "80211hdr.h"
-#include "rndis.h"
-#include "control.h"
-
-/*--------------------- Static Definitions -------------------------*/
-//static int msglevel =MSG_LEVEL_DEBUG;
-static int msglevel =MSG_LEVEL_INFO;
-/*--------------------- Static Classes ----------------------------*/
-
-/*--------------------- Static Variables --------------------------*/
-
-/*--------------------- Static Functions --------------------------*/
-
-/*--------------------- Export Variables --------------------------*/
-
-/*--------------------- Export Functions --------------------------*/
-
-
-
-
-
-/*
- * Description:
- * Set this hash index into multicast address register bit
- *
- * Parameters:
- * In:
- * byHashIdx - Hash index to set
- * Out:
- * none
- *
- * Return Value: none
- *
- */
-void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx)
-{
- unsigned int uByteIdx;
- BYTE byBitMask;
- BYTE pbyData[2];
-
-
- // calculate byte position
- uByteIdx = byHashIdx / 8;
-
- // calculate bit position
- byBitMask = 1;
- byBitMask <<= (byHashIdx % 8);
- // turn on the bit
-
- pbyData[0] = byBitMask;
- pbyData[1] = byBitMask;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- (WORD) (MAC_REG_MAR0 + uByteIdx),
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData);
-}
-
-
+#include "usbpipe.h"
/*
* Description:
@@ -102,27 +43,20 @@ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx)
*
* Parameters:
* In:
- * uByteidx - Index of Mask
- * byData - Mask Value to write
+ * mc_filter (mac filter)
* Out:
* none
*
* Return Value: none
*
*/
-void MACvWriteMultiAddr(PSDevice pDevice, unsigned int uByteIdx, BYTE byData)
+void MACvWriteMultiAddr(struct vnt_private *priv, u64 mc_filter)
{
- BYTE byData1;
-
- byData1 = byData;
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE,
- (WORD) (MAC_REG_MAR0 + uByteIdx),
- MESSAGE_REQUEST_MACREG,
- 1,
- &byData1);
-}
+ __le64 le_mc = cpu_to_le64(mc_filter);
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_MAR0,
+ MESSAGE_REQUEST_MACREG, sizeof(le_mc), (u8 *)&le_mc);
+}
/*
* Description:
@@ -133,56 +67,22 @@ void MACvWriteMultiAddr(PSDevice pDevice, unsigned int uByteIdx, BYTE byData)
* Out:
* none
*
- * Return Value: TRUE if success; otherwise FALSE
*
*/
-BOOL MACbShutdown (PSDevice pDevice)
+void MACbShutdown(struct vnt_private *priv)
{
- CONTROLnsRequestOutAsyn(pDevice,
- MESSAGE_TYPE_MACSHUTDOWN,
- 0,
- 0,
- 0,
- NULL
- );
- return TRUE;
+ vnt_control_out(priv, MESSAGE_TYPE_MACSHUTDOWN, 0, 0, 0, NULL);
}
-void MACvSetBBType(PSDevice pDevice,BYTE byType)
+void MACvSetBBType(struct vnt_private *priv, u8 type)
{
-BYTE pbyData[2];
+ u8 data[2];
+ data[0] = type;
+ data[1] = EnCFG_BBType_MASK;
- pbyData[0] = byType;
- pbyData[1] = EnCFG_BBType_MASK;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- MAC_REG_ENCFG0,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
-}
-
-void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData)
-{
-BYTE pbyData[4];
-
- if (wOffset > 273)
- return;
- pbyData[0] = (BYTE)dwData;
- pbyData[1] = (BYTE)(dwData>>8);
- pbyData[2] = (BYTE)(dwData>>16);
- pbyData[3] = (BYTE)(dwData>>24);
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MISCFF,
- wOffset,
- 0,
- 4,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, MAC_REG_ENCFG0,
+ MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
/*
@@ -199,32 +99,12 @@ BYTE pbyData[4];
* Return Value: none
*
*/
-void MACvDisableKeyEntry(PSDevice pDevice, unsigned int uEntryIdx)
+void MACvDisableKeyEntry(struct vnt_private *priv, u8 entry_idx)
{
-WORD wOffset;
-BYTE byData;
-
-
- byData = (BYTE) uEntryIdx;
-
- wOffset = MISCFIFO_KEYETRY0;
- wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
-
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
- //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, 0);
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
-
- //issue write misc fifo command to device
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_CLRKEYENTRY,
- 0,
- 0,
- 1,
- &byData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_CLRKEYENTRY, 0, 0,
+ sizeof(entry_idx), &entry_idx);
}
-
/*
* Description:
* Set the Key by MISCFIFO
@@ -239,242 +119,137 @@ BYTE byData;
* Return Value: none
*
*/
-void MACvSetKeyEntry(PSDevice pDevice, WORD wKeyCtl,
- unsigned int uEntryIdx, unsigned int uKeyIdx,
- PBYTE pbyAddr, PDWORD pdwKey)
+void MACvSetKeyEntry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx,
+ u32 key_idx, u8 *addr, u8 *key)
{
-PBYTE pbyKey;
-WORD wOffset;
-DWORD dwData1,dwData2;
-int ii;
-BYTE pbyData[24];
-
- if ( pDevice->byLocalID <= MAC_REVISION_A1 ) {
- if ( pDevice->sMgmtObj.byCSSPK == KEY_CTL_CCMP )
- return;
- }
-
- wOffset = MISCFIFO_KEYETRY0;
- wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
-
- dwData1 = 0;
- dwData1 |= wKeyCtl;
- dwData1 <<= 16;
- dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5));
-
- DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %lX, KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);
-
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
- //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
-
- //wOffset++;
-
- dwData2 = 0;
- dwData2 |= *(pbyAddr+3);
- dwData2 <<= 8;
- dwData2 |= *(pbyAddr+2);
- dwData2 <<= 8;
- dwData2 |= *(pbyAddr+1);
- dwData2 <<= 8;
- dwData2 |= *(pbyAddr+0);
-
- DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %lX\n", wOffset, dwData2);
-
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
- //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
- //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
-
- //wOffset++;
-
- //wOffset += (uKeyIdx * 4);
-/* for (ii=0;ii<4;ii++) {
- // alway push 128 bits
- DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"3.(%d) wOffset: %d, Data: %lX\n", ii, wOffset+ii, *pdwKey);
- VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset+ii);
- VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, *pdwKey++);
- VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
- }
-*/
- pbyKey = (PBYTE)pdwKey;
-
- pbyData[0] = (BYTE)dwData1;
- pbyData[1] = (BYTE)(dwData1>>8);
- pbyData[2] = (BYTE)(dwData1>>16);
- pbyData[3] = (BYTE)(dwData1>>24);
- pbyData[4] = (BYTE)dwData2;
- pbyData[5] = (BYTE)(dwData2>>8);
- pbyData[6] = (BYTE)(dwData2>>16);
- pbyData[7] = (BYTE)(dwData2>>24);
- for (ii = 8; ii < 24; ii++)
- pbyData[ii] = *pbyKey++;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_SETKEY,
- wOffset,
- (WORD)uKeyIdx,
- 24,
- pbyData
- );
+ struct vnt_mac_set_key set_key;
+ u16 offset;
+ if (priv->byLocalID <= MAC_REVISION_A1)
+ if (priv->vnt_mgmt.byCSSPK == KEY_CTL_CCMP)
+ return;
-}
+ offset = MISCFIFO_KEYETRY0;
+ offset += (entry_idx * MISCFIFO_KEYENTRYSIZE);
+ set_key.u.write.key_ctl = cpu_to_le16(key_ctl);
+ memcpy(set_key.u.write.addr, addr, ETH_ALEN);
-void MACvRegBitsOff(PSDevice pDevice, BYTE byRegOfs, BYTE byBits)
-{
-BYTE pbyData[2];
-
- pbyData[0] = 0;
- pbyData[1] = byBits;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- byRegOfs,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
-}
+ /* swap over swap[0] and swap[1] to get correct write order */
+ swap(set_key.u.swap[0], set_key.u.swap[1]);
+ memcpy(set_key.key, key, WLAN_KEY_LEN_CCMP);
-void MACvRegBitsOn(PSDevice pDevice, BYTE byRegOfs, BYTE byBits)
-{
-BYTE pbyData[2];
+ dev_dbg(&priv->usb->dev, "offset %d key ctl %d set key %24ph\n",
+ offset, key_ctl, (u8 *)&set_key);
+ vnt_control_out(priv, MESSAGE_TYPE_SETKEY, offset,
+ (u16)key_idx, sizeof(struct vnt_mac_set_key), (u8 *)&set_key);
+}
- pbyData[0] = byBits;
- pbyData[1] = byBits;
+void MACvRegBitsOff(struct vnt_private *priv, u8 reg_ofs, u8 bits)
+{
+ u8 data[2];
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- byRegOfs,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ data[0] = 0;
+ data[1] = bits;
+
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
-void MACvWriteWord(PSDevice pDevice, BYTE byRegOfs, WORD wData)
+void MACvRegBitsOn(struct vnt_private *priv, u8 reg_ofs, u8 bits)
{
-BYTE pbyData[2];
+ u8 data[2];
+
+ data[0] = bits;
+ data[1] = bits;
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
+}
- pbyData[0] = (BYTE)(wData & 0xff);
- pbyData[1] = (BYTE)(wData >> 8);
+void MACvWriteWord(struct vnt_private *priv, u8 reg_ofs, u16 word)
+{
+ u8 data[2];
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE,
- byRegOfs,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ data[0] = (u8)(word & 0xff);
+ data[1] = (u8)(word >> 8);
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE,
+ reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
-void MACvWriteBSSIDAddress(PSDevice pDevice, PBYTE pbyEtherAddr)
+void MACvWriteBSSIDAddress(struct vnt_private *priv, u8 *addr)
{
-BYTE pbyData[6];
-
-
- pbyData[0] = *((PBYTE)pbyEtherAddr);
- pbyData[1] = *((PBYTE)pbyEtherAddr+1);
- pbyData[2] = *((PBYTE)pbyEtherAddr+2);
- pbyData[3] = *((PBYTE)pbyEtherAddr+3);
- pbyData[4] = *((PBYTE)pbyEtherAddr+4);
- pbyData[5] = *((PBYTE)pbyEtherAddr+5);
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE,
- MAC_REG_BSSID0,
- MESSAGE_REQUEST_MACREG,
- 6,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_BSSID0,
+ MESSAGE_REQUEST_MACREG, ETH_ALEN, addr);
}
-void MACvEnableProtectMD(PSDevice pDevice)
+void MACvEnableProtectMD(struct vnt_private *priv)
{
-BYTE pbyData[2];
+ u8 data[2];
+ data[0] = EnCFG_ProtectMd;
+ data[1] = EnCFG_ProtectMd;
- pbyData[0] = EnCFG_ProtectMd;
- pbyData[1] = EnCFG_ProtectMd;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- MAC_REG_ENCFG0,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
-void MACvDisableProtectMD(PSDevice pDevice)
+void MACvDisableProtectMD(struct vnt_private *priv)
{
-BYTE pbyData[2];
-
+ u8 data[2];
- pbyData[0] = 0;
- pbyData[1] = EnCFG_ProtectMd;
+ data[0] = 0;
+ data[1] = EnCFG_ProtectMd;
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- MAC_REG_ENCFG0,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
-void MACvEnableBarkerPreambleMd(PSDevice pDevice)
+void MACvEnableBarkerPreambleMd(struct vnt_private *priv)
{
-BYTE pbyData[2];
+ u8 data[2];
+ data[0] = EnCFG_BarkerPream;
+ data[1] = EnCFG_BarkerPream;
- pbyData[0] = EnCFG_BarkerPream;
- pbyData[1] = EnCFG_BarkerPream;
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- MAC_REG_ENCFG2,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
-void MACvDisableBarkerPreambleMd(PSDevice pDevice)
+void MACvDisableBarkerPreambleMd(struct vnt_private *priv)
{
-BYTE pbyData[2];
-
+ u8 data[2];
- pbyData[0] = 0;
- pbyData[1] = EnCFG_BarkerPream;
+ data[0] = 0;
+ data[1] = EnCFG_BarkerPream;
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE_MASK,
- MAC_REG_ENCFG2,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK,
+ MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
}
+void MACvWriteBeaconInterval(struct vnt_private *priv, u16 interval)
+{
+ u8 data[2];
+
+ data[0] = (u8)(interval & 0xff);
+ data[1] = (u8)(interval >> 8);
+
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE,
+ MAC_REG_BI, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
+}
-void MACvWriteBeaconInterval(PSDevice pDevice, WORD wInterval)
+void vnt_mac_set_led(struct vnt_private *priv, u8 state, u8 led)
{
-BYTE pbyData[2];
-
- pbyData[0] = (BYTE) (wInterval & 0xff);
- pbyData[1] = (BYTE) (wInterval >> 8);
-
- CONTROLnsRequestOut(pDevice,
- MESSAGE_TYPE_WRITE,
- MAC_REG_BI,
- MESSAGE_REQUEST_MACREG,
- 2,
- pbyData
- );
+ u8 data[2];
+
+ data[0] = led;
+ data[1] = state;
+
+ vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, MAC_REG_PAPEDELAY,
+ MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data);
+
+ return;
}