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

📄 zddebug.c

📁 ZYDAS zd1211b driver for Linux2.4
💻 C
📖 第 1 页 / 共 3 页
字号:
                        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;        default :                printk(KERN_ERR "zd_dbg_ioctl: error command = %x\n", zd_cmd);                break;        }        return 0;}void zd1205_cont_tx(struct zd1205_private *macp, u8 rate){        void *reg = dot11Obj.reg;        static u8 LastCont_TX_Rate=0;        printk(KERN_ERR "ZDContinuousTx,Rate=%d\n",rate);        //if (le32_to_cpu(pZDRD->ZDRdLength) < sizeof(ZD_RD_STRUCT))        //{        //   pZDRD->ZDRdLength = cpu_to_le32(sizeof(ZD_RD_STRUCT));        //    *BytesNeeded = sizeof(ZD_RD_STRUCT);        //    *BytesRead = 0;        //    Status = NDIS_STATUS_BUFFER_TOO_SHORT;        //    break;        //}        //macp->bContinueTxMode = le32_to_cpu(pZDRD->Buffer[0]);        //macp->bContinueTx = le32_to_cpu(pZDRD->Buffer[1]);        /* Use the Fixed Rate instead of LastSentTxRate */        //macp->LastZDContinuousTxRate = macp->cardSetting.LastSentTxRate;        //macp->LastZDContinuousTxRate = macp->cardSetting.FixedRate;        // Roger 2004-11-10 , Set for Dr.Wang request , set 0x0001c4 when CCK mode with AL2230        if (dot11Obj.rfMode == AL2230_RF)        {                //if (macp->cardSetting.LastSentTxRate > 3) {                if (LastCont_TX_Rate > 3) {                        HW_Set_IF_Synthesizer(&dot11Obj, 0x0005a4);                }                //else if (macp->cardSetting.LastSentTxRate <= 3) {                else if (LastCont_TX_Rate <= 3) {                        HW_Set_IF_Synthesizer(&dot11Obj, 0x0001c4);                }        }        LastCont_TX_Rate = rate;        if(rate <= RATE_54M)        {  // Start                u8	tmpChr = 0;                u32	RateTmp= 0;                u32	tmpvalue;                u32	nLoop;                LockPhyReg(&dot11Obj);                dot11Obj.SetReg(reg, ZD1205_CR2, 0x3F);                dot11Obj.SetReg(reg, ZD1205_CR138, 0x28);                dot11Obj.SetReg(reg, ZD1205_CR33, 0x20);                // Query CR60 until change to 0x04                nLoop = 200;                while(nLoop--) {                        dot11Obj.DelayUs(10*1000); // sleep 10ms                        tmpvalue = dot11Obj.GetReg(reg, ZD1205_CR60);                        if(tmpvalue == 0x04)                                break;                }                UnLockPhyReg(&dot11Obj);                printk(KERN_DEBUG "Start ContTx_Normal\n");                dot11Obj.bContinueTx = 1;                LockPhyReg(&dot11Obj);                /* In order to avoid the uninitial length problem,                   force to set length to 0x20.                 */                dot11Obj.SetReg(reg, ZD1205_CR134, 0x20);                UnLockPhyReg(&dot11Obj);                switch (rate) {                case RATE_6M: //6M                        RateTmp = 0xB;                        break;                case RATE_9M: //9M                        RateTmp = 0xF;                        break;                case RATE_12M: //12M                        RateTmp = 0xA;                        break;                case RATE_18M: //18M                        RateTmp = 0xE;                        break;                case RATE_24M: //24M                        RateTmp = 0x9;                        break;                case RATE_36M: //36M                        RateTmp = 0xD;                        break;                case RATE_48M:   //48M                        RateTmp = 0x8;                        break;                case RATE_54M:   //54M                        RateTmp = 0xC;                        break;                default:                        RateTmp = 0;                        break;                }                printk(KERN_DEBUG "RateTmp=0x%08x\n", RateTmp);                if (RateTmp) {                        LockPhyReg(&dot11Obj);                        dot11Obj.SetReg(reg, ZD1205_CR132, RateTmp);                        //AcquireCtrOfPhyReg(Adapter);                        tmpvalue = dot11Obj.GetReg(reg, ZD1205_CR159);                        tmpvalue &= ~(BIT_0 + BIT_1 );                        tmpvalue |= BIT_2;                        dot11Obj.SetReg(reg, ZD1205_CR159, tmpvalue);                        dot11Obj.SetReg(reg, 0x644, 7);                        tmpvalue = dot11Obj.GetReg(reg, 0x648);                        tmpvalue &= ~BIT_0;                        dot11Obj.SetReg(reg, 0x648, tmpvalue);                        UnLockPhyReg(&dot11Obj);                }                tmpChr = LastCont_TX_Rate;                printk(KERN_DEBUG "tmpChr=0x%x\n", tmpChr);#if 0                if (macp->preambleMode == 1)                        macp->cardSetting.PreambleType = 0x00;                else if (macp->preambleMode == 2)                        macp->cardSetting.PreambleType = 0x20;#endif                if (macp->cardSetting.PreambleType == SHORT_PREAMBLE) {                        // short premable                        tmpChr |= BIT_5;                } else {                        // long premable                        tmpChr &= ~BIT_5;                }                if (macp->RegionCode == 0x10)                        tmpChr &= ~BIT_6;   //USA                if (macp->RegionCode == 0x40)                        tmpChr |= BIT_6;    //japan                LockPhyReg(&dot11Obj);                dot11Obj.SetReg(reg, ZD1205_CR5, tmpChr);                dot11Obj.SetReg(reg, 0x644, 3);                UnLockPhyReg(&dot11Obj);        } else        {                u32	tmpvalue;                // Roger 2004-11-10 , Set for Dr.Wang request , set 0x0001c4 when CCK mode with AL2230                if (dot11Obj.rfMode == AL2230_RF) {                        HW_Set_IF_Synthesizer(&dot11Obj, 0x0005a4);                }                LockPhyReg(&dot11Obj);                dot11Obj.SetReg(reg, ZD1205_CR2, 0x26);                dot11Obj.SetReg(reg, ZD1205_CR138, 0xA8);                dot11Obj.SetReg(reg, ZD1205_CR33, 0x08);                UnLockPhyReg(&dot11Obj);                printk(KERN_DEBUG "Stop Normal Continuous Transmit\n");                dot11Obj.bContinueTx = 0;                LockPhyReg(&dot11Obj);                macp->PHYTestTimer = 30;                //                      ZD1205_WRITE_REGISTER(Adapter,CR122, 0x0);                UnLockPhyReg(&dot11Obj);                if (LastCont_TX_Rate >= 4) {                        LockPhyReg(&dot11Obj);                        tmpvalue = dot11Obj.GetReg(reg, ZD1205_CR159);                        tmpvalue &= ~(BIT_0 + BIT_1 + BIT_2 );                        dot11Obj.SetReg(reg, ZD1205_CR159, tmpvalue);                        dot11Obj.SetReg(reg, 0x644, 0);                        tmpvalue = dot11Obj.GetReg(reg, 0x648);                        tmpvalue |= BIT_0;                        dot11Obj.SetReg(reg, 0x648, tmpvalue);                        UnLockPhyReg(&dot11Obj);                } else {                        LockPhyReg(&dot11Obj);                        dot11Obj.SetReg(reg, 0x644, 0);                        tmpvalue = dot11Obj.GetReg(reg, 0x648);                        tmpvalue |= BIT_0;                        dot11Obj.SetReg(reg, 0x648, tmpvalue);                        UnLockPhyReg(&dot11Obj);                }                //dot11Obj.SetReg(reg, ZD_PS_Ctrl, 0x1);                //Roger 2004-11-16 SoftwareReset here to solve RX fail after TxContinue problem                {                        //zd1205_device_reset(macp);                        //Card resetting , copying from driver of ZyNOS                        //It's a little different from ours                        u32  tmp_value;                        /* Update the value of Beacon Interval and Pre TBTT */                        update_beacon_interval(macp, 0x2);                        zd_writel(0x01, Pre_TBTT);                        LockPhyReg(&dot11Obj);                        dot11Obj.SetReg(dot11Obj.reg, ZD1205_PHY_END, 0x8);                        tmp_value = zd_readl(PS_Ctrl);                        zd_writel(tmp_value | BIT_5, PS_Ctrl);                        dot11Obj.SetReg(dot11Obj.reg, ZD1205_PHY_END, 0x0);                        UnLockPhyReg(&dot11Obj);                        dot11Obj.bDeviceInSleep = 1;                        dot11Obj.DelayUs(5000);                }        }        return 0;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -