免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3891 | 回复: 3
打印 上一主题 下一主题

如何"写"PCI设备的Base Address 0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-12 12:19 |只看该作者 |倒序浏览
5可用积分
我们知道,PCI设备通用配置寄存器如下:

DW | Byte3 | Byte2 | Byte1 | Byte0 | Addr
---+---------------------------------------------------------+-----
0 |     Device ID     |     Vendor ID       | 00
---+---------------------------------------------------------+-----
1 |      Status     |      Command      | 04
---+---------------------------------------------------------+-----
2 |        Class Code        | Revision ID  | 08
---+---------------------------------------------------------+-----
3 |   BIST  | Header Type | Latency Timer | Cache Line | 0C
---+---------------------------------------------------------+-----
4 |           Base Address 0           | 10
---+---------------------------------------------------------+-----
5 |           Base Address 1           | 14
---+---------------------------------------------------------+-----
6 |           Base Address 2           | 18
---+---------------------------------------------------------+-----
7 |           Base Address 3           | 1C
---+---------------------------------------------------------+-----
8 |           Base Address 4           | 20
---+---------------------------------------------------------+-----
9 |           Base Address 5           | 24
---+---------------------------------------------------------+-----
10 |          CardBus CIS pointer          | 28
---+---------------------------------------------------------+-----
11 |  Subsystem Device ID  |   Subsystem Vendor ID   | 2C
---+---------------------------------------------------------+-----
12 |        Expansion ROM Base Address        | 30
---+---------------------------------------------------------+-----
13 |        Reserved(Capability List)         | 34
---+---------------------------------------------------------+-----
14 |            Reserved             | 38
---+---------------------------------------------------------+-----
15 |  Max_Lat  |  Min_Gnt  |  IRQ Pin  |  IRQ Line   | 3C
-------------------------------------------------------------------
我现在的问题是,如何"写"Base Address 0 ?
看清楚,是写,不是读啊,
比如,我现在想将该设备映射到0x80000000这个内存地址去,该怎么写?
前提是没有OS,并且不要用PCI BIOS,要用汇编程序写,
另,对于有多个function的PCI设备,比如网卡,有8个funtion,这样的设备怎么处理?每个function都要写Base Address 0吗?

大佬们,帮帮忙啊!

论坛徽章:
0
2 [报告]
发表于 2007-07-12 12:26 |只看该作者
已知: 该设备:


Bus#        Device#        Func#        Vendor        Device        Class        IRQ        IntPin

01        0D        0        10EC        8139        020000        10        1

01        0D        1        10EC        8139        020000        10        1

01        0D        2        10EC        8139        020000        10        1

01        0D        3        10EC        8139        020000        10        1

01        0D        4        10EC        8139        020000        10        1

01        0D        5        10EC        8139        020000        10        1

01        0D        6        10EC        8139        020000        10        1

01        0D        7        10EC        8139        020000        10        1

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
3 [报告]
发表于 2007-07-12 15:41 |只看该作者
8个funcation就写8个Base Address 0

写的具体过程如  
int  pci_assign_resource(struct pci_dev *dev, int i)   一样

论坛徽章:
0
4 [报告]
发表于 2007-07-13 17:43 |只看该作者
奇怪为什么要用汇编?
从每个插槽开始搜索-->找到设备-->读出Device ID ,判断是否你需要的-->找到后,用apb/ahb/DMA模式都可以写
具体如何写,你就查一下相应的配置寄存器
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP