7ornado 发表于 2016-12-15 20:09

请教关于outb,outw,outsb,outb_p的区别以及3c501网卡驱动的一个小问题

最近小弟在看linux代码的时候,遇上outb,outw,outsb,outb_p,inb_p,请问有什么区别呢,有什么作用呢?
                outw(0x00, RX_BUF_CLR);               
                outw(gp_start, GP_LOW);               
                outsb(DATAPORT,buf,len);       
                if (pad) {
                        while(pad--)               
                                outb(0, DATAPORT);
                }
                outw(gp_start, GP_LOW);还有在3c501网卡驱动代码中
lp->loading = 1; /*疑问*/
                lp->txing = 1;

                /*
               *        Turn interrupts back on while we spend a pleasant afternoon
               *        loading bytes into the board
               */

                spin_unlock_irqrestore(&lp->lock, flags);
               
                outw(0x00, RX_BUF_CLR);
                outw(gp_start, GP_LOW);
                outsb(DATAPORT,buf,len);
                if (pad) {
                        while(pad--)                /* Zero fill buffer tail */
                                outb(0, DATAPORT);
                }
                outw(gp_start, GP_LOW);
       
                if(lp->loading != 2) /*疑问*/
                {
                        outb(AX_XMIT, AX_CMD);
                        lp->loading=0;
                        dev->trans_start = jiffies;
                        if (el_debug > 2)
                                printk(KERN_DEBUG " queued xmit.\n");
                        dev_kfree_skb (skb);
                        return 0;
                }之前给lp->loading赋值为1,那后面明显lp->loading != 2 成立,那为什么还要if呢?关键 这个在循环里面,return不就执行一次直接跳出循环了吗?


nswcfd 发表于 2016-12-19 16:00

b单字节,w双字节,_p跟delay有关系(?)
页: [1]
查看完整版本: 请教关于outb,outw,outsb,outb_p的区别以及3c501网卡驱动的一个小问题