There are two ways of interpreting your question.
A) How are message-signaled interrupts placed on the bus?
The answer is that the “data” value is written to the “address” value. After you claim an interrupt, you can connect it with IoConnectInterruptEx. That succeeds and returns, among other things, a table giving you information including these address and data values. First hit in this search: http://www.bing.com/search?q=IO_INTERRUPT_MESSAGE_INFO_ENTRY+structure+(Windows+Drivers)&qs=n&form=QBLH&pq=io_interrupt_message_info_entry+structure+(windows+drivers)&sc=0-0&sp=-1&sk=
It’s not even necessary for your device to contain an MSI or MSI-X capability structure for this to work. If you can make your device do a 32-bit DMA write to an arbitrary address, you can generate an interrupt. (See my post a couple of days ago about making this happen just by using ICMP.)
B) How is this generally used in drivers?
In general, most people build devices with MSI or MSI-X capabilities and they use that hardware to do those DMA writes. Those tables, though, are finite and usually somewhat smaller than you’d like. So they overclaim interrupts and use the hardware as a cache for all the possible interrupts they might want to send.
As a concrete example, imagine a NIC with a 16-entry MSI-X table in a machine with 24 processor cores. The NIC signals to NDIS that it can handle an RSS hash table of 16 entries, or alternatively, 16 MAC addresses through VMQ, and then claims 24 interrupt messages. When those get associated with a processor core, the driver swaps the interrupt for that processor into the MSI-X table at the right offset for that internal queue and away you go.
- Jake Oshins
(once and former interrupt guy)
Windows Kernel Team
-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of xxxxx@hotmail.com
Sent: Saturday, January 12, 2013 1:32 PM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] want to run ISR without additional hardware
It was elaborated on this list that MSI can be added in IRP_MN_QUERY_RESOURCE_REQUIREMENTS / IRP_MN_FILTER_RESOURCE_REQUIREMENTS.
So, naturally the question arises how to signal such an interrupt
Anybody?
NTDEV is sponsored by OSR
OSR is HIRING!! See http://www.osr.com/careers
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer