如何获取AHCI base address <二>

原创 2013年12月02日 17:52:20

我之前有篇文章有些利用第三方工具包来获取AHCI base address,这次我要讲的是利用WinRing0这个开源dll来完成这个功能。

请看WinRing0API的说明:

Support Functions for PCI Access 
C++ (OlsDef.h) *Macro
// Bus Number, Device Number and Function Number to PCI Device Address#define PciBusDevFunc(Bus, Dev, Func) ((Bus&0xFF)<<8) | ((Dev&0x1F)<<3) | (Func&7)
// PCI Device Address to Bus Number
#define PciGetBus(address)            ((address>>8) & 0xFF)
// PCI Device Address to Device Number#define PciGetDev(address)            ((address>>3) & 0x1F)
// PCI Device Address to Function Number
#define PciGetFunc(address)           (address&7)C# (OpenLibSys.cs) 
// Bus Number, Device Number and Function Number to PCI Device Addresspublic uint PciBusDevFunc(uint bus, uint dev, uint func)
{
    return ((bus&0xFF)<<8) | ((dev&0x1F)<<3) | (func&7);
}
// PCI Device Address to Bus Numberpublic uint PciGetBus(uint address)
{
    return ((address>>8) & 0xFF);
}
// PCI Device Address to Device Numberpublic uint PciGetDev(uint address)
{
    return ((address>>3) & 0x1F);
}
// PCI Device Address to Function Numberpublic uint PciGetFunc(uint address)
{
    return (address&7);
}PCI Device Address
bit description 
0- 2 Function Number 
3- 7 Device Number 
8-15 PCI Bus Number 
16-31 Reserved 

Requirements
WinRing0 1.0 or later 

啦啦啦 看到了吧 我们可以用OpenLibSys.cs中现成的

PciBusDevFunc(uint bus, uint dev, uint func)
方法,就可以得到AHCI base address啦!有木有很激动?!

  附上调用的代码

 /**getAHCIbaseAddress**/
        public string getAHCIbaseAddress()
        {
            uint address = ols.PciBusDevFunc(0x00, 0x1F, 0x02);

            //add by kelsey
            string ahciBaseAddress = "";

            // Host Bridge
            if (address != 0xFFFFFFFF)
            {
                for (int i = 0; i < 256; i += 16)
                {
                    //str += i.ToString("X2") + "|";
                    for (int j = 0; j < 16; j++)
                    {
                        if (i == 32 && j == 4)
                        {
                            ahciBaseAddress = (ols.ReadPciConfigDword(address, (byte)(i + j))).ToString("X2");
                            break;
                        }
                    }
                }
                Console.WriteLine("ahciBaseAddress ==" + ahciBaseAddress);
            }
            return ahciBaseAddress;
        }


PCI 中的base address register

PCI设备有很好的可配置型和易操作性,这很大方面要归功于其地址空间的可动态分配的特性。而动态分配地址空间就是依赖于BAR(base address register)实现的。 BAR是PCI配置...
  • yhc1991
  • yhc1991
  • 2014年05月21日 16:43
  • 923

CS8900 base address的确定方法

CS8900 base address的确定。

通过Location获取Address的使用!

转自:http://blog.csdn.net/android_tutor/article/details/5692517 大家好,上一节我讲了一下如何通过LocationManager来获取L...

[RK3288][Android6.0] WiFi之DHCP获取IP address流程

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前分析了WiFi的连接,连接上之后会获取ip地址. 自从Android6.0之后,Googl...

Android高手进阶教程(十五)之---通过Location获取Address的使用!

大家好,上一节我讲了一下如何通过LocationManager来获取Location,没有看过上一节的同学,可以点击如下链接返回查看: Android高手进阶教程十四之---Android Loca...

Android高手进阶教程(十五)之---通过Location获取Address的使用!

大家好,上一节我讲了一下如何通过LocationManager来获取Location,没有看过上一节的同学,可以点击如下链接返回查看: Android高手进阶教程十四之---Android Loca...

获取本机外网IP地址(External IP Address)示例

原文:http://www.cnblogs.com/Csharpblogs/articles/2218156.html import java.io.IOException; import java...

Android高手进阶教程(十四)---通过Location获取Address的使用!

大家好,上一节我讲了一下如何通过LocationManager来获取Location,没有看过上一节的同学,可以点击如下链接返回查看: Android高手进阶教程(十三)---Android Loc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何获取AHCI base address <二>
举报原因:
原因补充:

(最多只允许输入30个字)