aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware/hvmloader/config.h
blob: 7f8a90f993d6461b0cd7575abf01309ba4d0bf4d (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef __HVMLOADER_CONFIG_H__
#define __HVMLOADER_CONFIG_H__

#include <stdint.h>

enum virtual_vga { VGA_none, VGA_std, VGA_cirrus, VGA_pt };
extern enum virtual_vga virtual_vga;

extern unsigned long igd_opregion_pgbase;
#define IGD_OPREGION_PAGES 3

struct bios_config {
    const char *name;

    /* BIOS ROM image bits */
    void *image;
    unsigned int image_size;

    /* Physical address to load at */
    unsigned int bios_address;

    /* ROMS */
    void (*load_roms)(void);

    void (*bios_load)(const struct bios_config *config);

    void (*bios_info_setup)(void);
    void (*bios_info_finish)(void);

    void (*e820_setup)(void);

    void (*acpi_build_tables)(void);
    void (*create_mp_tables)(void);
    void (*create_smbios_tables)(void);
    void (*create_pir_tables)(void);
};

extern struct bios_config rombios_config;
extern struct bios_config seabios_config;
extern struct bios_config ovmf_config;

#define PAGE_SHIFT 12
#define PAGE_SIZE  (1ul << PAGE_SHIFT)

#define IOAPIC_BASE_ADDRESS 0xfec00000
#define IOAPIC_ID           0x01
#define IOAPIC_VERSION      0x11

#define LAPIC_BASE_ADDRESS  0xfee00000
#define LAPIC_ID(vcpu_id)   ((vcpu_id) * 2)

#define PCI_ISA_DEVFN       0x08    /* dev 1, fn 0 */
#define PCI_ISA_IRQ_MASK    0x0c20U /* ISA IRQs 5,10,11 are PCI connected */

/* MMIO hole: Hardcoded defaults, which can be dynamically expanded. */
#define PCI_MEM_START       0xf0000000
#define PCI_MEM_END         0xfc000000
#define PCI_MIN_BIG_BAR_SIZE          0x20000000

extern unsigned long pci_mem_start, pci_mem_end;


/* Memory map. */
#define SCRATCH_PHYSICAL_ADDRESS      0x00010000
#define HYPERCALL_PHYSICAL_ADDRESS    0x00080000
#define VGABIOS_PHYSICAL_ADDRESS      0x000C0000
#define HVMLOADER_PHYSICAL_ADDRESS    0x00100000
/* Special BIOS mappings, etc. are allocated from here upwards... */
#define RESERVED_MEMBASE              0xFC000000
/* NB. ACPI_INFO_PHYSICAL_ADDRESS *MUST* match definition in acpi/dsdt.asl! */
#define ACPI_INFO_PHYSICAL_ADDRESS    0xFC000000
#define RESERVED_MEMORY_DYNAMIC_START 0xFC001000
#define RESERVED_MEMORY_DYNAMIC_END   0xFE000000
/*
 * GUEST_RESERVED: Physical address space reserved for guest use.
 * This is not dynamically advertised to guests, so this range must *never*
 * be used for any purpose by us, in future. It must always be marked as
 * reserved in the memory map (e.g., E820_RESERVED) so that mechanisms such
 * as PCI BAR remapping do not allocate from this region.
 */
#define GUEST_RESERVED_START          0xFE700000
#define GUEST_RESERVED_END            0xFE800000

extern unsigned long scratch_start;

#endif /* __HVMLOADER_CONFIG_H__ */

/*
 * Local variables:
 * mode: C
 * c-set-style: "BSD"
 * c-basic-offset: 4
 * tab-width: 4
 * indent-tabs-mode: nil
 * End:
 */