/*
 * QEMU PowerPC PowerNV Proxy PHB model
 *
 * Copyright (c) 2022, IBM Corporation.
 *
 * This code is licensed under the GPL version 2 or later. See the
 * COPYING file in the top-level directory.
 */

#ifndef PCI_HOST_PNV_PHB_H
#define PCI_HOST_PNV_PHB_H

#include "hw/pci/pcie_host.h"
#include "hw/pci/pcie_port.h"
#include "qom/object.h"

typedef struct PnvChip PnvChip;
typedef struct PnvPhb4PecState PnvPhb4PecState;

struct PnvPHB {
    PCIExpressHost parent_obj;

    uint32_t chip_id;
    uint32_t phb_id;
    uint32_t version;
    char bus_path[8];

    PnvChip *chip;

    PnvPhb4PecState *pec;

    /* The PHB backend (PnvPHB3, PnvPHB4 ...) being used */
    Object *backend;
};

#define TYPE_PNV_PHB "pnv-phb"
OBJECT_DECLARE_SIMPLE_TYPE(PnvPHB, PNV_PHB)

/*
 * PHB PCIe Root port
 */
#define PNV_PHB3_DEVICE_ID         0x03dc
#define PNV_PHB4_DEVICE_ID         0x04c1
#define PNV_PHB5_DEVICE_ID         0x0652

typedef struct PnvPHBRootPort {
    PCIESlot parent_obj;

    uint32_t version;
} PnvPHBRootPort;

#define TYPE_PNV_PHB_ROOT_PORT "pnv-phb-root-port"
OBJECT_DECLARE_SIMPLE_TYPE(PnvPHBRootPort, PNV_PHB_ROOT_PORT)

#endif /* PCI_HOST_PNV_PHB_H */
