Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results
The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.
Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/
Hi All,
I am developing a WDF GPIO controller driver for our own ACPI GPIO. However, the ACPI document about the GPIO pins are all marked as PMIO instead of MMIO.
Our Linux team uses inb/outb to read/write the registers. I am wondering how the WDF GPIO controller driver read/write such registers.
From the sample code, the GPIO controller driver would read/write GPIO registers in the way CmResourceTypeMemory and CmResourceTypeCollection. In my case, I think CmResourceTypeCollection would be returned by calling WdfCmResourceListGetDescriptor. Do I need to call READ_PORT_*** API to read the registers?
Thanks,
Marshall
Upcoming OSR Seminars | ||
---|---|---|
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead! | ||
Kernel Debugging | 13-17 May 2024 | Live, Online |
Developing Minifilters | 1-5 Apr 2024 | Live, Online |
Internals & Software Drivers | 11-15 Mar 2024 | Live, Online |
Writing WDF Drivers | 26 Feb - 1 Mar 2024 | Live, Online |
Comments
You should be able to do something like this:
Then when you want to read/write from one you'll need to find the RESOURCE_HUB request string for the GPIO by doing something like:
Once you have the request string you'll have to open the IoTarget by name with
WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME
.From there you can use
WdfIoTargetFormatRequestForIoctl
with theIOCTL_GPIO_READ_PINS/IOCTL_GPIO_WRITE_PINS
ioctls do the equivalent of your Linux teams inb/outb IO.Once you've formated the request you can use
WdfRequestSend
to send it.It is difficult for me to believe that any modern product is still using the x86 I/O ports. How do you even handle that on an ARM system that doesn't have the special instructions?
Tim Roberts, [email protected]
Providenza & Boekelheide, Inc.