aboutsummaryrefslogtreecommitdiff
path: root/include/hw/pci-host/astro.h
blob: e2966917cd908d67f7aebca32e7861c58da88bde (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
/*
 * HP-PARISC Astro Bus connector with Elroy PCI host bridges
 */

#ifndef ASTRO_H
#define ASTRO_H

#include "hw/pci/pci_host.h"

#define ASTRO_HPA               0xfed00000

#define ROPES_PER_IOC           8       /* per Ike half or Pluto/Astro */

#define TYPE_ASTRO_CHIP "astro-chip"
OBJECT_DECLARE_SIMPLE_TYPE(AstroState, ASTRO_CHIP)

#define TYPE_ELROY_PCI_HOST_BRIDGE "elroy-pcihost"
OBJECT_DECLARE_SIMPLE_TYPE(ElroyState, ELROY_PCI_HOST_BRIDGE)

#define ELROY_NUM               4 /* # of Elroys */
#define ELROY_IRQS              8 /* IOSAPIC IRQs */

/* ASTRO Memory and I/O regions */
#define LMMIO_DIST_BASE_ADDR      0xf4000000ULL
#define LMMIO_DIST_BASE_SIZE       0x4000000ULL

#define IOS_DIST_BASE_ADDR      0xfffee00000ULL
#define IOS_DIST_BASE_SIZE           0x10000ULL

#define HF_ENABLE       0x40    /* enable HF mode (default is -1 mode) */

struct AstroState;

struct ElroyState {
    PCIHostState parent_obj;

    /* parent Astro device */
    struct AstroState *astro;

    /* HPA of this Elroy */
    hwaddr hpa;

    /* PCI bus number (Elroy number) */
    unsigned int pci_bus_num;

    uint64_t config_address;
    uint64_t config_reg_elroy;

    uint64_t status_control;
    uint64_t arb_mask;
    uint64_t mmio_base[(0x0250 - 0x200) / 8];
    uint64_t error_config;

    uint32_t iosapic_reg_select;
    uint64_t iosapic_reg[0x20];

    uint32_t ilr;

    MemoryRegion this_mem;

    MemoryRegion pci_mmio;
    MemoryRegion pci_mmio_alias;
    MemoryRegion pci_hole;
    MemoryRegion pci_io;
};

struct AstroState {
    PCIHostState parent_obj;

    uint64_t ioc_ctrl;
    uint64_t ioc_status_ctrl;
    uint64_t ioc_ranges[(0x03d8 - 0x300) / 8];
    uint64_t ioc_rope_config;
    uint64_t ioc_status_control;
    uint64_t ioc_flush_control;
    uint64_t ioc_rope_control[8];
    uint64_t tlb_ibase;
    uint64_t tlb_imask;
    uint64_t tlb_pcom;
    uint64_t tlb_tcnfg;
    uint64_t tlb_pdir_base;

    struct ElroyState *elroy[ELROY_NUM];

    MemoryRegion this_mem;

    MemoryRegion pci_mmio;
    MemoryRegion pci_io;

    IOMMUMemoryRegion iommu;
    AddressSpace iommu_as;
};

#endif