diff options
Diffstat (limited to 'drivers/staging/vt6656/mac.c')
-rw-r--r-- | drivers/staging/vt6656/mac.c | 328 |
1 files changed, 115 insertions, 213 deletions
diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 3ce19ddbc569..cadf7cd280c3 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -35,11 +35,7 @@ #include "desc.h" #include "mac.h" #include "80211hdr.h" -#include "rndis.h" -#include "control.h" - -//static int msglevel =MSG_LEVEL_DEBUG; -static int msglevel =MSG_LEVEL_INFO; +#include "usbpipe.h" /* * Description: @@ -54,11 +50,11 @@ static int msglevel =MSG_LEVEL_INFO; * Return Value: none * */ -void MACvWriteMultiAddr(struct vnt_private *pDevice, u64 mc_filter) +void MACvWriteMultiAddr(struct vnt_private *priv, u64 mc_filter) { __le64 le_mc = cpu_to_le64(mc_filter); - CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, MAC_REG_MAR0, + vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_MAR0, MESSAGE_REQUEST_MACREG, sizeof(le_mc), (u8 *)&le_mc); } @@ -73,31 +69,20 @@ void MACvWriteMultiAddr(struct vnt_private *pDevice, u64 mc_filter) * * */ -void MACbShutdown(struct vnt_private *pDevice) +void MACbShutdown(struct vnt_private *priv) { - CONTROLnsRequestOutAsyn(pDevice, - MESSAGE_TYPE_MACSHUTDOWN, - 0, - 0, - 0, - NULL - ); + vnt_control_out(priv, MESSAGE_TYPE_MACSHUTDOWN, 0, 0, 0, NULL); } -void MACvSetBBType(struct vnt_private *pDevice, u8 byType) +void MACvSetBBType(struct vnt_private *priv, u8 type) { - u8 pbyData[2]; - - pbyData[0] = byType; - pbyData[1] = EnCFG_BBType_MASK; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - MAC_REG_ENCFG0, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = type; + data[1] = EnCFG_BBType_MASK; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, MAC_REG_ENCFG0, + MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } /* @@ -114,20 +99,10 @@ void MACvSetBBType(struct vnt_private *pDevice, u8 byType) * Return Value: none * */ -void MACvDisableKeyEntry(struct vnt_private *pDevice, u32 uEntryIdx) +void MACvDisableKeyEntry(struct vnt_private *priv, u8 entry_idx) { - u8 byData; - - byData = (u8) uEntryIdx; - - //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); } /* @@ -144,210 +119,137 @@ void MACvDisableKeyEntry(struct vnt_private *pDevice, u32 uEntryIdx) * Return Value: none * */ -void MACvSetKeyEntry(struct vnt_private *pDevice, u16 wKeyCtl, u32 uEntryIdx, - u32 uKeyIdx, u8 *pbyAddr, u32 *pdwKey) +void MACvSetKeyEntry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx, + u32 key_idx, u8 *addr, u8 *key) { - u8 *pbyKey; - u16 wOffset; - u32 dwData1, dwData2; - int ii; - u8 pbyData[24]; - - if (pDevice->byLocalID <= MAC_REVISION_A1) - if (pDevice->vnt_mgmt.byCSSPK == KEY_CTL_CCMP) + struct vnt_mac_set_key set_key; + u16 offset; + + if (priv->byLocalID <= MAC_REVISION_A1) + if (priv->vnt_mgmt.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: %X,"\ - " KeyCtl:%X\n", wOffset, dwData1, wKeyCtl); - - 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: %X\n", - wOffset, dwData2); - - pbyKey = (u8 *)pdwKey; - - pbyData[0] = (u8)dwData1; - pbyData[1] = (u8)(dwData1>>8); - pbyData[2] = (u8)(dwData1>>16); - pbyData[3] = (u8)(dwData1>>24); - pbyData[4] = (u8)dwData2; - pbyData[5] = (u8)(dwData2>>8); - pbyData[6] = (u8)(dwData2>>16); - pbyData[7] = (u8)(dwData2>>24); - for (ii = 8; ii < 24; ii++) - pbyData[ii] = *pbyKey++; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_SETKEY, - wOffset, - (u16)uKeyIdx, - ARRAY_SIZE(pbyData), - pbyData - ); + 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); + + /* 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); + 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); } -void MACvRegBitsOff(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits) +void MACvRegBitsOff(struct vnt_private *priv, u8 reg_ofs, u8 bits) { - u8 pbyData[2]; - - pbyData[0] = 0; - pbyData[1] = byBits; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - byRegOfs, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = 0; + data[1] = bits; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, + reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvRegBitsOn(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits) +void MACvRegBitsOn(struct vnt_private *priv, u8 reg_ofs, u8 bits) { - u8 pbyData[2]; - - pbyData[0] = byBits; - pbyData[1] = byBits; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - byRegOfs, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + 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); } -void MACvWriteWord(struct vnt_private *pDevice, u8 byRegOfs, u16 wData) +void MACvWriteWord(struct vnt_private *priv, u8 reg_ofs, u16 word) { - u8 pbyData[2]; + u8 data[2]; - pbyData[0] = (u8)(wData & 0xff); - pbyData[1] = (u8)(wData >> 8); + data[0] = (u8)(word & 0xff); + data[1] = (u8)(word >> 8); - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - byRegOfs, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + vnt_control_out(priv, MESSAGE_TYPE_WRITE, + reg_ofs, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); +} +void MACvWriteBSSIDAddress(struct vnt_private *priv, u8 *addr) +{ + vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_BSSID0, + MESSAGE_REQUEST_MACREG, ETH_ALEN, addr); } -void MACvWriteBSSIDAddress(struct vnt_private *pDevice, u8 *pbyEtherAddr) +void MACvEnableProtectMD(struct vnt_private *priv) { - u8 pbyData[6]; - - pbyData[0] = *((u8 *)pbyEtherAddr); - pbyData[1] = *((u8 *)pbyEtherAddr+1); - pbyData[2] = *((u8 *)pbyEtherAddr+2); - pbyData[3] = *((u8 *)pbyEtherAddr+3); - pbyData[4] = *((u8 *)pbyEtherAddr+4); - pbyData[5] = *((u8 *)pbyEtherAddr+5); - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - MAC_REG_BSSID0, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = EnCFG_ProtectMd; + data[1] = EnCFG_ProtectMd; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, + MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvEnableProtectMD(struct vnt_private *pDevice) +void MACvDisableProtectMD(struct vnt_private *priv) { - u8 pbyData[2]; - - pbyData[0] = EnCFG_ProtectMd; - pbyData[1] = EnCFG_ProtectMd; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - MAC_REG_ENCFG0, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = 0; + data[1] = EnCFG_ProtectMd; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, + MAC_REG_ENCFG0, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvDisableProtectMD(struct vnt_private *pDevice) +void MACvEnableBarkerPreambleMd(struct vnt_private *priv) { - u8 pbyData[2]; - - pbyData[0] = 0; - pbyData[1] = EnCFG_ProtectMd; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - MAC_REG_ENCFG0, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = EnCFG_BarkerPream; + data[1] = EnCFG_BarkerPream; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, + MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvEnableBarkerPreambleMd(struct vnt_private *pDevice) +void MACvDisableBarkerPreambleMd(struct vnt_private *priv) { - u8 pbyData[2]; - - pbyData[0] = EnCFG_BarkerPream; - pbyData[1] = EnCFG_BarkerPream; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - MAC_REG_ENCFG2, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + u8 data[2]; + + data[0] = 0; + data[1] = EnCFG_BarkerPream; + + vnt_control_out(priv, MESSAGE_TYPE_WRITE_MASK, + MAC_REG_ENCFG2, MESSAGE_REQUEST_MACREG, ARRAY_SIZE(data), data); } -void MACvDisableBarkerPreambleMd(struct vnt_private *pDevice) +void MACvWriteBeaconInterval(struct vnt_private *priv, u16 interval) { - u8 pbyData[2]; - - pbyData[0] = 0; - pbyData[1] = EnCFG_BarkerPream; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - MAC_REG_ENCFG2, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - pbyData - ); + 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(struct vnt_private *pDevice, u16 wInterval) +void vnt_mac_set_led(struct vnt_private *priv, u8 state, u8 led) { - u8 pbyData[2]; - - pbyData[0] = (u8)(wInterval & 0xff); - pbyData[1] = (u8)(wInterval >> 8); - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - MAC_REG_BI, - MESSAGE_REQUEST_MACREG, - ARRAY_SIZE(pbyData), - 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; } |