⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zddebug.c

📁 zd1211b芯片的无线网卡的驱动,移植到s3c2410平台
💻 C
📖 第 1 页 / 共 3 页
字号:
		{	
                    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 + -