xref: /openbmc/qemu/include/hw/pci-host/designware.h (revision ea9cdbcf3a0b8d5497cddf87990f1b39d8f3bb0a)
1d64e5eabSAndrey Smirnov /*
2d64e5eabSAndrey Smirnov  * Copyright (c) 2017, Impinj, Inc.
3d64e5eabSAndrey Smirnov  *
4d64e5eabSAndrey Smirnov  * Designware PCIe IP block emulation
5d64e5eabSAndrey Smirnov  *
6d64e5eabSAndrey Smirnov  * This library is free software; you can redistribute it and/or
7d64e5eabSAndrey Smirnov  * modify it under the terms of the GNU Lesser General Public
8d64e5eabSAndrey Smirnov  * License as published by the Free Software Foundation; either
9*61f3c91aSChetan Pant  * version 2.1 of the License, or (at your option) any later version.
10d64e5eabSAndrey Smirnov  *
11d64e5eabSAndrey Smirnov  * This library is distributed in the hope that it will be useful,
12d64e5eabSAndrey Smirnov  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13d64e5eabSAndrey Smirnov  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14d64e5eabSAndrey Smirnov  * Lesser General Public License for more details.
15d64e5eabSAndrey Smirnov  *
16d64e5eabSAndrey Smirnov  * You should have received a copy of the GNU Lesser General Public
17d64e5eabSAndrey Smirnov  * License along with this library; if not, see
18d64e5eabSAndrey Smirnov  * <http://www.gnu.org/licenses/>.
19d64e5eabSAndrey Smirnov  */
20d64e5eabSAndrey Smirnov 
21d64e5eabSAndrey Smirnov #ifndef DESIGNWARE_H
22d64e5eabSAndrey Smirnov #define DESIGNWARE_H
23d64e5eabSAndrey Smirnov 
24d64e5eabSAndrey Smirnov #include "hw/sysbus.h"
25d64e5eabSAndrey Smirnov #include "hw/pci/pci_bridge.h"
26db1015e9SEduardo Habkost #include "qom/object.h"
27d64e5eabSAndrey Smirnov 
28d64e5eabSAndrey Smirnov #define TYPE_DESIGNWARE_PCIE_HOST "designware-pcie-host"
298063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(DesignwarePCIEHost, DESIGNWARE_PCIE_HOST)
30d64e5eabSAndrey Smirnov 
31d64e5eabSAndrey Smirnov #define TYPE_DESIGNWARE_PCIE_ROOT "designware-pcie-root"
328063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(DesignwarePCIERoot, DESIGNWARE_PCIE_ROOT)
33d64e5eabSAndrey Smirnov 
34d64e5eabSAndrey Smirnov typedef struct DesignwarePCIEViewport {
35d64e5eabSAndrey Smirnov     DesignwarePCIERoot *root;
36d64e5eabSAndrey Smirnov 
37d64e5eabSAndrey Smirnov     MemoryRegion cfg;
38d64e5eabSAndrey Smirnov     MemoryRegion mem;
39d64e5eabSAndrey Smirnov 
40d64e5eabSAndrey Smirnov     uint64_t base;
41d64e5eabSAndrey Smirnov     uint64_t target;
42d64e5eabSAndrey Smirnov     uint32_t limit;
43d64e5eabSAndrey Smirnov     uint32_t cr[2];
44d64e5eabSAndrey Smirnov 
45d64e5eabSAndrey Smirnov     bool inbound;
46d64e5eabSAndrey Smirnov } DesignwarePCIEViewport;
47d64e5eabSAndrey Smirnov 
48d64e5eabSAndrey Smirnov typedef struct DesignwarePCIEMSIBank {
49d64e5eabSAndrey Smirnov     uint32_t enable;
50d64e5eabSAndrey Smirnov     uint32_t mask;
51d64e5eabSAndrey Smirnov     uint32_t status;
52d64e5eabSAndrey Smirnov } DesignwarePCIEMSIBank;
53d64e5eabSAndrey Smirnov 
54d64e5eabSAndrey Smirnov typedef struct DesignwarePCIEMSI {
55d64e5eabSAndrey Smirnov     uint64_t     base;
56d64e5eabSAndrey Smirnov     MemoryRegion iomem;
57d64e5eabSAndrey Smirnov 
58d64e5eabSAndrey Smirnov #define DESIGNWARE_PCIE_NUM_MSI_BANKS        1
59d64e5eabSAndrey Smirnov 
60d64e5eabSAndrey Smirnov     DesignwarePCIEMSIBank intr[DESIGNWARE_PCIE_NUM_MSI_BANKS];
61d64e5eabSAndrey Smirnov } DesignwarePCIEMSI;
62d64e5eabSAndrey Smirnov 
63d64e5eabSAndrey Smirnov struct DesignwarePCIERoot {
64d64e5eabSAndrey Smirnov     PCIBridge parent_obj;
65d64e5eabSAndrey Smirnov 
66d64e5eabSAndrey Smirnov     uint32_t atu_viewport;
67d64e5eabSAndrey Smirnov 
68d64e5eabSAndrey Smirnov #define DESIGNWARE_PCIE_VIEWPORT_OUTBOUND    0
69d64e5eabSAndrey Smirnov #define DESIGNWARE_PCIE_VIEWPORT_INBOUND     1
70d64e5eabSAndrey Smirnov #define DESIGNWARE_PCIE_NUM_VIEWPORTS        4
71d64e5eabSAndrey Smirnov 
72d64e5eabSAndrey Smirnov     DesignwarePCIEViewport viewports[2][DESIGNWARE_PCIE_NUM_VIEWPORTS];
73d64e5eabSAndrey Smirnov     DesignwarePCIEMSI msi;
74d64e5eabSAndrey Smirnov };
75d64e5eabSAndrey Smirnov 
76db1015e9SEduardo Habkost struct DesignwarePCIEHost {
77d64e5eabSAndrey Smirnov     PCIHostState parent_obj;
78d64e5eabSAndrey Smirnov 
79d64e5eabSAndrey Smirnov     DesignwarePCIERoot root;
80d64e5eabSAndrey Smirnov 
81d64e5eabSAndrey Smirnov     struct {
82d64e5eabSAndrey Smirnov         AddressSpace address_space;
83d64e5eabSAndrey Smirnov         MemoryRegion address_space_root;
84d64e5eabSAndrey Smirnov 
85d64e5eabSAndrey Smirnov         MemoryRegion memory;
86d64e5eabSAndrey Smirnov         MemoryRegion io;
87d64e5eabSAndrey Smirnov 
88d64e5eabSAndrey Smirnov         qemu_irq     irqs[4];
89d64e5eabSAndrey Smirnov     } pci;
90d64e5eabSAndrey Smirnov 
91d64e5eabSAndrey Smirnov     MemoryRegion mmio;
92db1015e9SEduardo Habkost };
93d64e5eabSAndrey Smirnov 
94d64e5eabSAndrey Smirnov #endif /* DESIGNWARE_H */
95