iPXE
pcimsix.h
Go to the documentation of this file.
1#ifndef _IPXE_PCIMSIX_H
2#define _IPXE_PCIMSIX_H
3
4/** @file
5 *
6 * PCI MSI-X interrupts
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <ipxe/pci.h>
14
15/** MSI-X BAR mapped length */
16#define PCI_MSIX_LEN 0x1000
17
18/** MSI-X vector offset */
19#define PCI_MSIX_VECTOR(n) ( (n) * 0x10 )
20
21/** MSI-X vector address low 32 bits */
22#define PCI_MSIX_ADDRESS_LO 0x0
23
24/** MSI-X vector address high 32 bits */
25#define PCI_MSIX_ADDRESS_HI 0x4
26
27/** MSI-X vector data */
28#define PCI_MSIX_DATA 0x8
29
30/** MSI-X vector control */
31#define PCI_MSIX_CONTROL 0xc
32#define PCI_MSIX_CONTROL_MASK 0x00000001 /**< Vector is masked */
33
34/** MSI-X pending bit array register offset */
35#define PCI_MSIX_PBA_OFFSET(n) ( 4 * ( (n) / 32 ) )
36
37/** MSI-X pending bit array register mask */
38#define PCI_MSIX_PBA_MASK(n) ( 1U << ( (n) % 32 ) )
39
40/** PCI MSI-X capability */
41struct pci_msix {
42 /** Capability offset */
43 unsigned int cap;
44 /** Number of vectors */
45 unsigned int count;
46 /** MSI-X table */
47 void *table;
48 /** Pending bit array */
49 void *pba;
50 /** Dummy message target */
52 /** Dummy message target mapping */
54};
55
56extern int pci_msix_enable ( struct pci_device *pci, struct pci_msix *msix );
57extern void pci_msix_disable ( struct pci_device *pci, struct pci_msix *msix );
58extern void pci_msix_map ( struct pci_msix *msix, unsigned int vector,
60extern void pci_msix_control ( struct pci_msix *msix, unsigned int vector,
61 uint32_t mask );
62extern void pci_msix_dump ( struct pci_msix *msix, unsigned int vector );
63
64/**
65 * Mask MSI-X interrupt vector
66 *
67 * @v msix MSI-X capability
68 * @v vector MSI-X vector
69 */
70static inline __attribute__ (( always_inline )) void
71pci_msix_mask ( struct pci_msix *msix, unsigned int vector ) {
72
74}
75
76/**
77 * Unmask MSI-X interrupt vector
78 *
79 * @v msix MSI-X capability
80 * @v vector MSI-X vector
81 */
82static inline __attribute__ (( always_inline )) void
83pci_msix_unmask ( struct pci_msix *msix, unsigned int vector ) {
84
85 pci_msix_control ( msix, vector, 0 );
86}
87
88#endif /* _IPXE_PCIMSIX_H */
unsigned int uint32_t
Definition stdint.h:12
unsigned long physaddr_t
Definition stdint.h:20
uint8_t data[48]
Additional event data.
Definition ena.h:11
uint32_t vector
MSI-X vector.
Definition ena.h:9
uint64_t address
Base address.
Definition ena.h:13
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:921
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:951
#define __attribute__(x)
Definition compiler.h:10
PCI bus.
int pci_msix_enable(struct pci_device *pci, struct pci_msix *msix)
Enable MSI-X interrupts.
Definition pcimsix.c:137
static void pci_msix_mask(struct pci_msix *msix, unsigned int vector)
Mask MSI-X interrupt vector.
Definition pcimsix.h:71
void pci_msix_dump(struct pci_msix *msix, unsigned int vector)
Dump MSI-X interrupt state (for debugging).
Definition pcimsix.c:279
#define PCI_MSIX_CONTROL_MASK
Vector is masked.
Definition pcimsix.h:32
void pci_msix_disable(struct pci_device *pci, struct pci_msix *msix)
Disable MSI-X interrupts.
Definition pcimsix.c:208
static void pci_msix_unmask(struct pci_msix *msix, unsigned int vector)
Unmask MSI-X interrupt vector.
Definition pcimsix.h:83
void pci_msix_control(struct pci_msix *msix, unsigned int vector, uint32_t mask)
Control MSI-X interrupt vector.
Definition pcimsix.c:260
void pci_msix_map(struct pci_msix *msix, unsigned int vector, physaddr_t address, uint32_t data)
Map MSI-X interrupt vector.
Definition pcimsix.c:234
A DMA mapping.
Definition dma.h:33
A PCI device.
Definition pci.h:214
PCI MSI-X capability.
Definition pcimsix.h:41
void * pba
Pending bit array.
Definition pcimsix.h:49
unsigned int cap
Capability offset.
Definition pcimsix.h:43
uint32_t * msg
Dummy message target.
Definition pcimsix.h:51
struct dma_mapping map
Dummy message target mapping.
Definition pcimsix.h:53
unsigned int count
Number of vectors.
Definition pcimsix.h:45
void * table
MSI-X table.
Definition pcimsix.h:47