blob: 2da8287715260554541a79b249ae25f4311db6da (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
//! PCI configuration constants
// Config register offsets
pub const REG_VENDOR_ID: u8 = 0x00;
pub const REG_DEVICE_ID: u8 = 0x02;
pub const REG_COMMAND: u8 = 0x04;
pub const REG_STATUS: u8 = 0x06;
pub const REG_REVISION: u8 = 0x08;
pub const REG_PROG_IF: u8 = 0x09;
pub const REG_SUBCLASS: u8 = 0x0A;
pub const REG_CLASS_CODE: u8 = 0x0B;
pub const REG_HEADER_TYPE: u8 = 0x0E;
pub const REG_BAR0: u8 = 0x10;
pub const REG_BAR1: u8 = 0x14;
pub const REG_BAR2: u8 = 0x18;
pub const REG_BAR3: u8 = 0x1C;
pub const REG_BAR4: u8 = 0x20;
pub const REG_BAR5: u8 = 0x24;
pub const REG_INTERRUPT_LINE: u8 = 0x3C;
pub const REG_INTERRUPT_PIN: u8 = 0x3D;
// Command register bits
pub const CMD_IO_SPACE: u16 = 0x01;
pub const CMD_MEMORY_SPACE: u16 = 0x02;
pub const CMD_BUS_MASTER: u16 = 0x04;
// Class codes
pub const CLASS_MASS_STORAGE: u8 = 0x01;
pub const SUBCLASS_SATA: u8 = 0x06;
// Header type bits
pub const HEADER_MULTIFUNCTION: u8 = 0x80;
// Invalid vendor
pub const VENDOR_INVALID: u16 = 0xFFFF;
// Config address bits
pub const CONFIG_ENABLE: u32 = 1 << 31;
pub const CONFIG_BUS_SHIFT: u5 = 16;
pub const CONFIG_DEVICE_SHIFT: u5 = 11;
pub const CONFIG_FUNCTION_SHIFT: u5 = 8;
pub const CONFIG_OFFSET_MASK: u8 = 0xFC;
|