📄 zddebug.c
字号:
{
if (valid_uid[UserIdBase+jj])
{
printk(KERN_ERR "UID:%d Mac:%02x:%02x:%02x:%02x:%02x:%02x\n",UserIdBase+jj, MACINCAM[0]&255, MACINCAM[1]&255, MACINCAM[2]&255, MACINCAM[3]&255,MACINCAM[4]&255,MACINCAM[5]&255);
}
MACINCAM[0]=MACINCAM[0]>>8;
MACINCAM[1]=MACINCAM[1]>>8;
MACINCAM[2]=MACINCAM[2]>>8;
MACINCAM[3]=MACINCAM[3]>>8;
MACINCAM[4]=MACINCAM[4]>>8;
MACINCAM[5]=MACINCAM[5]>>8;
}
UserIdBase = UserIdBase+4;
}
// Dump Encryption type: CAM location: 60-65
//tmpRollCallTblLow=RollCallTblLow;
//tmpRollCallTblHigh=RollCallTblHigh;
for(ii=60; ii<66; ii++)
{
data = HW_CAM_Read(&dot11Obj, ii);
UserIdBase=(ii-60)*8; //One location for 8 users.
if (UserIdBase >= 40)
{
{//location 65:For default key
printk(KERN_ERR "DefaultKeySet:%s\n",EncTypeStr[data&7]);
}
}
else
{
for(jj=0; jj<8; jj++)
{
if (valid_uid[UserIdBase+jj])
{
printk(KERN_ERR "UID:%02d:%s\n",UserIdBase+jj,EncTypeStr[data&7]);
valid_uid[UserIdBase+jj] |= ((data & 7)<<1);
}
data = data >> 4; // Next user.
}
}
}
printk(KERN_ERR "KeyContents:\n");
for (ii=0; ii<40; ii++)
{
u32 keylen;
u32 keytype;
if (valid_uid[ii])
{
keytype=valid_uid[ii]>>1;
switch(keytype){
case 2://TKIP
keylen=32;
break;
case 4://AES
keylen=16;
break;
case 1://WEP64
keylen=8;
break;
case 5://WEP128
keylen=16;
break;
default:
keylen=0;
break;
}
keylen = keylen >> 2;
printk(KERN_ERR "UID:%02d\n", ii);
for (jj=0; jj<keylen; jj++)
{
data = HW_CAM_Read(&dot11Obj, (66+(8*ii))+jj);
printk(KERN_ERR "%08x\n", data);
}
}
}
printk(KERN_ERR "\n");
}
void zd1205_cam_read(struct zd1205_private *macp, u32 addr)
{
u32 value = HW_CAM_Read(&dot11Obj, addr);
printk(KERN_ERR "Addr: 0x%08x, value = 0x%08x\n", addr, value);
}
void zd1205_cam_write(struct zd1205_private *macp, u32 addr, u32 value)
{
HW_CAM_Write(&dot11Obj, addr, value);
printk(KERN_ERR "Write value: 0x%08x to CAM address: 0x%08x\n", value, addr);
}
void zd1205_cam_rest(struct zd1205_private *macp, int mode)
{
}
int zd1205_zd_dbg_ioctl(struct zd1205_private *macp, struct zdap_ioctl *zdreq)
{
void *regp = macp->regp;
u16 zd_cmd;
u32 tmp_value;
u32 tmp_addr;
u32 CRn;
zd_cmd = zdreq->cmd;
switch(zd_cmd) {
case ZD_IOCTL_DEBUG_FLAG:
macp->debugflag = zdreq->addr;
mDebugFlag = zdreq->value;
break;
case ZD_IOCTL_REG_READ:
LockPhyReg(&dot11Obj);
tmp_value = zd_readl(zdreq->addr);
UnLockPhyReg(&dot11Obj);
zdreq->value = tmp_value;
printk(KERN_DEBUG "zd1211 read register: reg = 0x%04x, value = 0x%08x\n",
zdreq->addr, zdreq->value);
//if (copy_to_user(ifr->ifr_data, &zdreq, sizeof (zdreq)))
//return -EFAULT;
break;
case ZD_IOCTL_REG_WRITE:
LockPhyReg(&dot11Obj);
zd_writel(zdreq->value, zdreq->addr);
UnLockPhyReg(&dot11Obj);
if (zdreq->addr == RX_OFFSET_BYTE)
macp->rxOffset = zdreq->value;
break;
case ZD_IOCTL_MEM_DUMP:
zd1205_dump_data("mem", (u8 *)zdreq->addr, zdreq->value);
//memcpy(&zdreq->data[0], (u8 *)zdreq->addr, zdreq->value);
//if (copy_to_user(ifr->ifr_data, &zdreq, sizeof (zdreq)))
//return -EFAULT;
break;
case ZD_IOCTL_RATE:
/* Check for the validation of vale */
if(zdreq->value > 3 || zdreq->value < 0)
{
printk(KERN_DEBUG "zd1205: Basic Rate %x doesn't support\n", zdreq->value);
break;
}
printk(KERN_DEBUG "zd1205: Basic Rate = %x\n", zdreq->value);
zd1205_update_brate(macp, zdreq->value);
break;
case ZD_IOCTL_SNIFFER:
macp->sniffer_on = zdreq->value;
printk(KERN_DEBUG "zd1205: sniffer_on = %x\n", macp->sniffer_on);
zd1205_set_sniffer_mode(macp);
break;
case ZD_IOCTL_CAM_DUMP://Arg1: Location, Arg2: Length
{
u32 startAddr, length;
startAddr=((zdreq->addr & 0xF00)>>8)*100+
((zdreq->addr & 0xF0)>>4)*10+
(zdreq->addr & 0xF);
length=((zdreq->value & 0xF00)>>8)*100+
((zdreq->value & 0xF0)>>4)*10+
(zdreq->value & 0xF);
printk(KERN_DEBUG "zd1205: dump cam\n");
zd1205_dump_cam(macp,startAddr,length);
break;
}
case ZD_IOCTL_DUMP_PHY:
printk(KERN_DEBUG "zd1205: dump phy\n");
zd1205_dump_phy(macp);
break;
case ZD_IOCTL_READ_PHY:
case ZD_IOCTL_WRITE_PHY:
LockPhyReg(&dot11Obj);
tmp_addr = zdreq->addr;
CRn= ((tmp_addr & 0xF00)>>8)*100+
((tmp_addr & 0xF0)>>4)*10+
(tmp_addr & 0xF);
if (CRn >= 4 && CRn <= 8)//Special handling for CR4 to CR8
{
u8 cnvtbl1[]={0x20, 0x10, 0x14, 0x18, 0x1c};
tmp_addr = cnvtbl1[CRn-4];
}
else
{
tmp_addr = CRn*4;
}
if (zd_cmd == ZD_IOCTL_READ_PHY)
{
zdreq->value = zd_readl(tmp_addr);
printk(KERN_DEBUG "CR%d=0x%x\n",CRn, zdreq->value);
}
else
{// ZD_IOCTL_WRITE_PHY
zd_writel(zdreq->value, tmp_addr);
printk(KERN_DEBUG "set CR%d=0x%x\n",CRn, zdreq->value);
}
UnLockPhyReg(&dot11Obj);
break;
case ZD_IOCTL_CARD_SETTING:
printk(KERN_DEBUG "zd1205: card setting\n");
zd1205_show_card_setting(macp);
break;
case ZD_IOCTL_HASH_DUMP:
printk(KERN_DEBUG "zd1205: aid = %x\n", zdreq->value);
zd1205_show_hash(macp, zdreq->value);
break;
case ZD_IOCTL_RFD_DUMP:
printk(KERN_DEBUG "===== zd1205 rfd dump =====\n");
zd1205_dump_rfds(macp);
break;
case ZD_IOCTL_MEM_READ: {
u32 *p;
p = (u32 *) bus_to_virt(zdreq->addr);
printk(KERN_DEBUG "zd1205: read memory addr: 0x%08x value: 0x%08x\n", zdreq->addr, *p);
break;
}
case ZD_IOCTL_MEM_WRITE: {
u32 *p;
p = (u32 *) bus_to_virt(zdreq->addr);
*p = zdreq->value;
printk(KERN_DEBUG "zd1205: write value: 0x%08x to memory addr: 0x%08x\n", zdreq->value, zdreq->addr);
break;
}
case ZD_IOCTL_TX_RATE:
printk(KERN_DEBUG "zd1205: set tx rate = %d\n", zdreq->value);
if (zdreq->value < 0x0c){
macp->cardSetting.FixedRate = zdreq->value;
macp->bFixedRate = 1;
}
else
macp->bFixedRate = 0;
break;
case ZD_IOCTL_EEPROM:
printk(KERN_DEBUG "zd1205: dump eeprom\n");
zd1205_dump_eeprom(macp);
break;
/* Generate the beacon */
case ZD_IOCTL_BCN:
dot11Obj.dbg_cmd |= DBG_CMD_BEACON;
printk(KERN_DEBUG "zd1205: configuration beacon\n");
ConfigBcnFIFO();
break;
case ZD_IOCTL_REG_READ16:
tmp_value = zd1211_readl(zdreq->addr, false);
zdreq->value = tmp_value & 0xffff;
printk(KERN_DEBUG "zd1205 read register: reg = %4x, value = %4x\n",
zdreq->addr, zdreq->value);
break;
case ZD_IOCTL_REG_WRITE16:
tmp_value = zdreq->value & 0xffff;
zd1211_writel(zdreq->addr, tmp_value, false);
printk(KERN_DEBUG "zd1205 write register: reg = %4x, value = %4x\n",
zdreq->addr, zdreq->value);
break;
case ZD_IOCTL_CAM_READ:
printk(KERN_ERR "zd1205: cam read, addr: 0x%08x\n", zdreq->addr);
zd1205_cam_read(macp, zdreq->addr);
break;
case ZD_IOCTL_CAM_WRITE:
printk(KERN_ERR "zd1205: cam write, addr: 0x%08x value: 0x%08x\n", zdreq->addr, zdreq->value);
zd1205_cam_write(macp, zdreq->addr, zdreq->value);
break;
case ZD_IOCTL_CAM_RESET:
printk(KERN_ERR "zd1205: reset cam\n");
zd1205_cam_rest(macp, zdreq->value);
break;
case ZD_IOCTL_CONT_TX:
zd1205_cont_tx(macp, zdreq->value);
break;
case ZD_IOCTL_SET_MIC_CNT_ENABLE:
dot11Obj.MIC_CNT = zdreq->value>0?1:0;
printk("WPA MIC Counter Measure Feature : %s\n",
dot11Obj.MIC_CNT ? "Enable":"Disalbe");
break;
case ZD_IOCTL_GET_MIC_CNT_ENABLE:
printk("WPA MIC Counter Measure Feature : %s\n",
dot11Obj.MIC_CNT ? "Enable":"Disalbe");
break;
case ZD_IOCTL_UW_PWR :
if(zdreq->addr == 0)
printk("Current Level : %d\n",dot11Obj.UWCurrentTxLevel);
else if(zdreq->addr == 1)
{
printk("Set Current Level : %d\n", zdreq->value);
if(zdreq->value < 19 && zdreq->value >= 0)
{
dot11Obj.UWCurrentTxLevel = zdreq->value;
dot11Obj.UWDefaulTxLevel = zdreq->value;
PHY_UWTxPower(&dot11Obj, dot11Obj.UWDefaulTxLevel);
}
}
else
printk("Unknown Command : %d\n", zdreq->addr);
break;
default :
printk(KERN_ERR "zd_dbg_ioctl: error command = %x\n", zd_cmd);
break;
}
return 0;
}
int zd1205_wpa_ioctl(struct zd1205_private *macp, struct zydas_wlan_param *zdparm)
{
card_Setting_t *pSetting = &macp->cardSetting;
int ret = 0;
u8 keylen;
u8 idx;
u8 *pkey;
u8 CamEncryType=0;
u8 tmpDynKeyMode;
#ifdef HOSTAPD_SUPPORT
u8 mac_addr[80];
#endif
//Test write permission
switch(zdparm->cmd) {
case ZD_CMD_SET_ENCRYPT_KEY:
{// Dump key info:
WPADEBUG("SET_ENCRYPT_KEY: alg=%s key_idx=%d set_tx=%d key_len=%d ,WPAIeLen=%d, for " MACSTR "\n", zdparm->u.crypt.alg, zdparm->u.crypt.idx, zdparm->u.crypt.flags, zdparm->u.crypt.key_len, macp->cardSetting.WPAIeLen, MAC2STR(zdparm->sta_addr));
}
keylen = zdparm->u.crypt.key_len;
idx = zdparm->u.crypt.idx;
pkey = zdparm->u.crypt.key;
if (!strcmp(zdparm->u.crypt.alg, "NONE"))
{
U8 zero_mac[]={0,0,0,0,0,0};
CamEncryType = NO_WEP;
// pSetting->DynKeyMode = 0;
// pSetting->EncryMode=0;
// mKeyFormat=0;
zd_SetKeyInfo(zdparm->sta_addr, CamEncryType, keylen, idx, pkey);
if (zdparm->sta_addr[0] & 1)//del group key
{
if (macp->cardSetting.WPAIeLen==0)
{//802.1x dynamic WEP
mDynKeyMode = 0;
mKeyFormat = 0;
mPrivacyInvoked=FALSE;
mCap &= ~CAP_PRIVACY;
macp->cardSetting.EncryOnOff=0;
}
mWpaBcKeyLen = mGkInstalled = 0;
}
else
{
if (memcmp(zero_mac,zdparm->sta_addr, 6)==0)
{
mDynKeyMode=0;
mKeyFormat=0;
pSetting->DynKeyMode=0;
pSetting->EncryMode=0;
mDynKeyMode=0;
}
}
return ret;
}
else if (!strcmp(zdparm->u.crypt.alg, "TKIP"))
{
CamEncryType = TKIP;
//if (idx == 0)
{// Pairwise key
mKeyFormat = CamEncryType;
mDynKeyMode = pSetting->DynKeyMode = DYN_KEY_TKIP;
}
}
else if (!strcmp(zdparm->u.crypt.alg, "CCMP"))
{
CamEncryType = AES;
//if (idx == 0)
{// Pairwise key
mKeyFormat = CamEncryType;
mDynKeyMode = pSetting->DynKeyMode = DYN_KEY_AES;
}
}
else if (!strcmp(zdparm->u.crypt.alg, "WEP"))
{
if (keylen == 5)
{ // WEP 64
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -