打印

dm9000网卡驱动初始化程序问题-连载1

[复制链接]
2797|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wych1013|  楼主 | 2007-4-17 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 我最近在做网卡驱动,我会把做的过程中的问题贴出来,一来这里有高手可以解答,二来自己可以涨见识,还有就是以后研究网络驱动的盟友也可以参考参考,我会一部分一部分的贴出来的,就是麻烦高手可以给我和共同奋战在嵌入式第一线的盟友一个通俗,容易让我们懂得解释。今天是第一贴:关于网络驱动初始化段的问题。
在dx9000.c驱动程序中
1在初始化程序中
"writel(readl(gpfcon)|0xaa,gpfcon); //old"能不能把这一句换成在做字符驱动程序中的
“*(volatile unsigned int *)r_gpfcon &=(~0x00000040);"的形式阿,他们完成的任务都是一样的啊,都是写2410的寄存器。请问有什么区别?
2在初始化程序中
“outb(DM9000_VID_L, iobase);"能不能用writeb函数来实现,iobase也是通过ioremap映射到的虚拟地址

3outb(DM9000_VID_L, iobase);
id_val = inb(iobase + 4);
这么两句怎么就可以读出DM9000_VID_L寄存器的值呢?

4
#define DM9000_ID0x90000A46为什么就是这个90000A46呢?怎么定的?
#define DM9000_MIN_IO0x08000300 为什么就是这个08000300呢?怎么定的?

5outb(DM9000_VID_L, iobase);
id_val = inb(iobase + 4);
我觉得这两句不能读出DM9000里寄存器VID的值,我认为应该是
id_val=inb(iobase+DM9000_VID_L)这样才对,因为这样才是读VID的寄存器,我不知道对不对,请解释解释?

6id_val = inb(iobase + 4);这里面的iobase+4是数据地址,为什么就是数据地址呢?我怎么知道呢?

7request_region(iobase, 2, dev->name);这一句是不是应该放在初始化函数的前端,至少也要放在outb,inb语句之前吧?设备驱动程序书说:“在尚未取得对端口独占之前,我们不应对这些端口进行操作,需要先声明”。
 
 

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝