LPC registers

Hi guys,
I’m trying to develop a KMDF driver to access some LPC registers (from 0x118 to 0x126) on an Atom Poulsbo with a windows embedded OS.
I read this article http://support.microsoft.com/kb/253232/en-us?fr=1 (wich is a WDM sample…) and I think that the correct way to do it is to create a filter driver on top on my LPC driver, is it correct?

Looking at my Device Manger using the “Device by Connection” view, I have the following situation:

ACPI x86-based PC
|_Microsoft ACPI-Compliant System
|_PCI bus (with a resuource tab with I/O range and Memory range set)
|_Intel SCH LPC Interface (Without the resource tab in the properties panel)
|Com port
|DMA
|

|
System Timer

All the Drivers under LPC Interface have their own resources with their own I/O ranges.
So what I have do to? Simply create an LPC Driver (like port I/O sample) and install it under LPC Interface (I don’t know how) or do I have to create a filter driver (like toasterFilter) and install the filter on top of Intel LPC Interface (which it has no resources associated…)?

Moreover, I’ve already developed a couple of driver (only for testing purpose) for the GPIO and the SMbus but up to now I’ve always read the base address accessing the CONFIG_ADDRESS register (0xcf8) which I don’t think is a good idea in general.
Both BARs are in LPC registers, so I think it would be great when the LPC driver will be installed, retrieve those information by sending a IOCTL request from a driver to another, how could achieve this?

No need for a filter here. Add a device to the ACPI portion of your BIOS
that represents your device. Put an object named _CRS under that device
which lists your I/O ports. (See http://acpi.info for details on how to do
this.)

Put another object under it named _HID with a string that represents your
device. The string can be anything. (Many people reading the ACPI spec get
the impression that it has to be of the form EISAID<…>. It doesn’t.)

Then make an INF for your driver that matches “ACPI\your_HIDstring”. Your
driver will load and be assigned your I/O ports.

You can make your SMBus drivers work similarly. Your BIOS can report those
magic resource ranges.


Jake Oshins
Hyper-V I/O Architect
Windows Kernel Group

This post implies no warranties and confers no rights.


wrote in message news:xxxxx@ntdev…
> Hi guys,
> I’m trying to develop a KMDF driver to access some LPC registers (from
> 0x118 to 0x126) on an Atom Poulsbo with a windows embedded OS.
> I read this article http://support.microsoft.com/kb/253232/en-us?fr=1
> (wich is a WDM sample…) and I think that the correct way to do it is to
> create a filter driver on top on my LPC driver, is it correct?
>
> Looking at my Device Manger using the “Device by Connection” view, I have
> the following situation:
>
> ACPI x86-based PC
> |_Microsoft ACPI-Compliant System
> |_PCI bus (with a resuource tab with I/O range and Memory range set)
> |_Intel SCH LPC Interface (Without the resource tab in the properties
> panel)
> |Com port
> |DMA
> |

> |
System Timer
>
> All the Drivers under LPC Interface have their own resources with their
> own I/O ranges.
> So what I have do to? Simply create an LPC Driver (like port I/O sample)
> and install it under LPC Interface (I don’t know how) or do I have to
> create a filter driver (like toasterFilter) and install the filter on top
> of Intel LPC Interface (which it has no resources associated…)?
>
> Moreover, I’ve already developed a couple of driver (only for testing
> purpose) for the GPIO and the SMbus but up to now I’ve always read the
> base address accessing the CONFIG_ADDRESS register (0xcf8) which I don’t
> think is a good idea in general.
> Both BARs are in LPC registers, so I think it would be great when the LPC
> driver will be installed, retrieve those information by sending a IOCTL
> request from a driver to another, how could achieve this?
>
>