PCI: Difference between revisions
Jump to navigation
Jump to search
m
→Enabling MSI: Clean up section
[unchecked revision] | [unchecked revision] |
m (→External Links: Update some links) |
m (→Enabling MSI: Clean up section) |
||
Line 1,108:
=== Enabling MSI ===
First, check that the device has a pointer to the capabilities list (
Then, traverse the capabilities list. The low 8 bits of a capability register are the ID -
The MSI capability is as
{| {{wikitable}}
|-
!
|-
|
|
| colspan="2" | Message Control
| Next
|-
|
|
| colspan="4" | Message Address [Low]
|-
|
|
| colspan="4" | [Message Address High]
|-
|
|
| colspan="2" | Reserved
| colspan="2" | Message Data
|-
|
|
| colspan="4" | [Mask]
|-
|
|
| colspan="4" | [Pending]
|}
Line 1,147:
{| {{wikitable}}
|-
!
|-
| Reserved
| Per-vector masking
| 64
| Multiple Message Enable
| Multiple Message Capable
Line 1,159:
The message address/data is architecture specific. On x86(-64), it is as follows:
<source lang="c">
*data = (vector & 0xFF) | (edgetrigger == 1 ? 0 : (1 << 15)) | (deassert == 1 ? 0 : (1 << 14));
return (0xFEE00000 | (processor << 12));
Line 1,191 ⟶ 1,190:
'''Interrupt masking'''
If capable, you can mask individual messages by setting the corresponding bit (1 <<
If a message is pending, then the corresponding bit in the pending register is set.
Note that the PCI specification doesn't specify the location of these registers if the message address is 32
=== Enabling MSI-X ===
|