/*
 * SPDX-License-Identifier: GPL-2.0-or-later
 * Copyright (C) 2023 IBM Corp.
 *
 * IBM Local bus and connected device structures.
 */
#ifndef FSI_LBUS_H
#define FSI_LBUS_H

#include "exec/memory.h"
#include "hw/qdev-core.h"

#define TYPE_FSI_LBUS_DEVICE "fsi.lbus.device"
OBJECT_DECLARE_TYPE(FSILBusDevice, FSILBusDeviceClass, FSI_LBUS_DEVICE)

#define FSI_LBUS_MEM_REGION_SIZE  (2 * 1024 * 1024)
#define FSI_LBUSDEV_IOMEM_START   0xc00 /* 3K used by CFAM config etc */

typedef struct FSILBusDevice {
    DeviceState parent;

    MemoryRegion iomem;
} FSILBusDevice;

typedef struct FSILBusDeviceClass {
    DeviceClass parent;

    uint32_t config;
} FSILBusDeviceClass;

#define TYPE_FSI_LBUS "fsi.lbus"
OBJECT_DECLARE_SIMPLE_TYPE(FSILBus, FSI_LBUS)

typedef struct FSILBus {
    BusState bus;

    MemoryRegion mr;
} FSILBus;

#endif /* FSI_LBUS_H */