xref: /haiku/src/add-ons/kernel/drivers/timer/msi.h (revision 19ae20e67e91fc09cc9fc5c0e60e21e24e7a53eb)
1*79e3f901SStefano Ceccherini #ifndef _KERNEL_ARCH_x86_MSI_H
2*79e3f901SStefano Ceccherini #define _KERNEL_ARCH_x86_MSI_H
3*79e3f901SStefano Ceccherini 
4*79e3f901SStefano Ceccherini #include <SupportDefs.h>
5*79e3f901SStefano Ceccherini 
6*79e3f901SStefano Ceccherini // address register
7*79e3f901SStefano Ceccherini #define MSI_ADDRESS_BASE				0xfee00000
8*79e3f901SStefano Ceccherini #define MSI_DESTINATION_ID_SHIFT		12
9*79e3f901SStefano Ceccherini #define MSI_REDIRECTION					0x00000008
10*79e3f901SStefano Ceccherini #define MSI_NO_REDIRECTION				0x00000000
11*79e3f901SStefano Ceccherini #define MSI_DESTINATION_MODE_LOGICAL	0x00000004
12*79e3f901SStefano Ceccherini #define MSI_DESTINATION_MODE_PHYSICAL	0x00000000
13*79e3f901SStefano Ceccherini 
14*79e3f901SStefano Ceccherini // data register
15*79e3f901SStefano Ceccherini #define MSI_TRIGGER_MODE_EDGE			0x00000000
16*79e3f901SStefano Ceccherini #define MSI_TRIGGER_MODE_LEVEL			0x00008000
17*79e3f901SStefano Ceccherini #define MSI_LEVEL_DEASSERT				0x00000000
18*79e3f901SStefano Ceccherini #define MSI_LEVEL_ASSERT				0x00004000
19*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_FIXED			0x00000000
20*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_LOWEST_PRIO	0x00000100
21*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_SMI			0x00000200
22*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_NMI			0x00000400
23*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_INIT			0x00000500
24*79e3f901SStefano Ceccherini #define MSI_DELIVERY_MODE_EXT_INT		0x00000700
25*79e3f901SStefano Ceccherini 
26*79e3f901SStefano Ceccherini 
27*79e3f901SStefano Ceccherini void		msi_init();
28*79e3f901SStefano Ceccherini bool		msi_supported();
29*79e3f901SStefano Ceccherini status_t	msi_allocate_vectors(uint8 count, uint8 *startVector,
30*79e3f901SStefano Ceccherini 				uint64 *address, uint16 *data);
31*79e3f901SStefano Ceccherini void		msi_free_vectors(uint8 count, uint8 startVector);
32*79e3f901SStefano Ceccherini 
33*79e3f901SStefano Ceccherini #endif // _KERNEL_ARCH_x86_MSI_H
34