3#include <kernel/types.h>
5#include <utils/macro.h>
7#define PCI_HEADER_ID_OFFSET 0x0
8#define PCI_HEADER_ID_SIZE sizeof(uint32_t)
9#define PCI_HEADER_TYPE_OFFSET 0xE
10#define PCI_HEADER_TYPE_SIZE sizeof(uint8_t)
11#define PCI_HEADER_BAR_OFFSET(_bar) (0x10 + (_bar)*PCI_HEADER_BAR_SIZE)
12#define PCI_HEADER_BAR_SIZE sizeof(uint32_t)
14#define PCI_HEADER_COMMAND_OFFSET 0x4
15#define PCI_HEADER_COMMAND_SIZE sizeof(uint16_t)
17#define PCI_HEADER_BRIDGE_OFFSET 0x18
18#define PCI_HEADER_BRIDGE_SIZE (3 * sizeof(uint8_t))
19#define PCI_HEADER_BRIDGE_SUBORDINATE(_n) ((_n) << 16)
20#define PCI_HEADER_BRIDGE_SECONDARY(_n) ((_n) << 8)
21#define PCI_HEADER_BRIDGE_PRIMARY(_n) (_n)
23#define PCI_HEADER_INTERRUPT_LINE_OFFSET 0x3C
24#define PCI_HEADER_INTERRUPT_LINE_SIZE sizeof(uint8_t)
37pci_read_config(uint8_t bus, uint8_t
device, uint8_t offset,
size_t size);
40void pci_write_config(uint8_t bus, uint8_t
device, uint8_t offset,
size_t size,
43#define pci_read_header(_bus, _device, _header) \
44 pci_read_config(_bus, _device, CONCAT3(PCI_HEADER_, _header, _OFFSET), \
45 CONCAT3(PCI_HEADER_, _header, _SIZE))
47#define pci_write_header(_bus, _device, _header, _val) \
48 pci_write_config(_bus, _device, CONCAT3(PCI_HEADER_, _header, _OFFSET), \
49 CONCAT3(PCI_HEADER_, _header, _SIZE), _val)
Represents a device inside the kernel.
Definition: device.h:78
ID header format.
Definition: pci.h:27