我的学习之旅(45)pcnet32.c

来源:互联网 发布:软件设计师怎么挂靠 编辑:程序博客网 时间:2024/06/08 08:02
unsigned int read_pci_config(unsigned char bus, unsigned char slot, unsigned char func, unsigned char offset){    unsigned int v;    outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);    v = inl(0xcfc);    return v;}unsigned char read_pci_config_byte(unsigned char bus, unsigned char slot, unsigned char func, unsigned char offset){    unsigned char v;    outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);    v = inb(0xcfc + (offset&3));    return v;}unsigned short read_pci_config_16(unsigned char bus, unsigned char slot, unsigned char func, unsigned char offset){    unsigned short v;    outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);    v = inw(0xcfc + (offset&2));    return v;}void write_pci_config(unsigned char bus, unsigned char slot, unsigned char func, unsigned char offset,        unsigned int val){    outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);    outl(val, 0xcfc);}void write_pci_config_byte(unsigned char bus, unsigned char slot, unsigned char func, unsigned char offset, unsigned char val){    outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8);    outb(val, 0xcfc);}


pcnet32.c得放在driver目录中

按linux驱动的做法先是扫描pci设备,这个当前不搞,直接使用通过lspci命令得到的bus 、slot和func号。根据网上pcie配置空间的读取方法实现几个读取配置空间int,short和byte的函数。具体还可以参考linux 代码中的early.c

 

0 0
原创粉丝点击