- 论坛徽章:
- 0
|
本帖最后由 道无名 于 2010-08-16 16:27 编辑
关于从pci上读取SATA的问题。
#define PCI_ADDRESS 0xCF8
#define PCI_DATA 0xCFC
iopl(3)
addr = 0x80000000L | (0<<16) | (12<<11) | (0<<8 ) | 0x10;
outl(addr,PCI_ADDRESS);
data=inl(PCI_DATA);
printf("addr : %X\n",addr);
printf("data : %X\n",data);
我编程写完枚举pci设备后,想枚举硬盘,可从前面反应出的信息,我的硬盘不是ide的,是sata的。不能直接从端口读。于是我就从sata control的pci配置寄存器组开始读他的base address 10,14,18,1c.
我的这个0:12.0是pci枚举得出的:
00:12.0 SATA controller: ATI Technologies Inc SB600 Non-Raid-5 SATA
这个程序的问题,addr的输出来看,地址正确,可是为何这个pci配置寄存器组的base address 10,14,18,1c的输出数值都是0xffffffff
到底哪里出错了?还是说SATA的访问方式有其他的方式,可是既然都是连接到系统总线上,那么总线对应的配置寄存器组一定会有相关信息呀。我对这个十分困惑。
请大家帮忙看看,我是个新手,水平比较低微,听说这里强人高人老手很多,能否帮忙指点下!感谢! |
|