// MDI definitions for Zircon

// Top level nodes
list    kernel                            MDI_KERNEL                            1
list    cpu-map                           MDI_CPU_MAP                           2
list    platform                          MDI_PLATFORM                          3

// Common definitions
string  name                              MDI_NAME                              10
uint64  base-virt                         MDI_BASE_VIRT                         11  // virtual base address
uint64  base-phys                         MDI_BASE_PHYS                         12  // physical base address
uint64  length                            MDI_LENGTH                            13
uint32  irq                               MDI_IRQ                               14  // IRQ number

// CPU topology
//string  cpu-map.clusters.name
list    cpu-map.clusters                  MDI_CPU_CLUSTERS                      100
uint8   cpu-map.clusters.cpu-count        MDI_CPU_COUNT                         101

// platform-bus nodes
uint32  platform.vid                      MDI_PLATFORM_VID                      200
uint32  platform.pid                      MDI_PLATFORM_PID                      201
list    platform.device                   MDI_PLATFORM_DEVICE                   202
uint32  platform.device.vid               MDI_PLATFORM_DEVICE_VID               203
uint32  platform.device.pid               MDI_PLATFORM_DEVICE_PID               204
uint32  platform.device.did               MDI_PLATFORM_DEVICE_DID               205

list    platform.bus                      MDI_PLATFORM_BUS                      210

list    platform.bus.gpios                MDI_PLATFORM_BUS_GPIOS                211
uint32  platform.bus.gpios.start          MDI_PLATFORM_BUS_GPIOS_START          212
uint32  platform.bus.gpios.count          MDI_PLATFORM_BUS_GPIOS_COUNT          213
uint32  platform.bus.gpios.mmio_index     MDI_PLATFORM_BUS_GPIOS_MMIO_INDEX     214

// platform.*.mmios elements have base-phys and length
list mmios                                MDI_PLATFORM_MMIOS                    220

// list of IRQs for a platform device or bus
array[uint32] irqs                        MDI_PLATFORM_IRQS                     221

// Kernel Drivers

// ARM PSCI driver
list    kernel.arm-psci                   MDI_ARM_PSCI                          1000
boolean kernel.arm-psci.use-smc           MDI_ARM_PSCI_USE_SMC                  1001
boolean kernel.arm-psci.use-hvc           MDI_ARM_PSCI_USE_HVC                  1002

// ARM gic v3 driver
list    kernel.arm-gic-v3                 MDI_ARM_GIC_V3                        1010
// TODO:(hollande) We use virt since peripherals
//       should be accessed via a device memory mapping and presently
//       we do not have mechanisms in kernel for converting phys address
//       to peripheral address.  For now this requires keeping the base-virt
//       definition consistent with the PERIPH_BASE_VIRT definition in
//       the targets rules.mk
// GIC V3 uses base-virt
uint64  kernel.arm-gic-v3.gicd-offset     MDI_ARM_GIC_V3_GICD_OFFSET            1011
uint64  kernel.arm-gic-v3.gicr-offset     MDI_ARM_GIC_V3_GICR_OFFSET            1012
uint64  kernel.arm-gic-v3.gicr-stride     MDI_ARM_GIC_V3_GICR_STRIDE            1013
uint32  kernel.arm-gic-v3.ipi-base        MDI_ARM_GIC_V3_IPI_BASE               1014

// ARM generic timer driver
list    kernel.arm-timer                  MDI_ARM_TIMER                         1030
uint32  kernel.arm-timer.irq-phys         MDI_ARM_TIMER_IRQ_PHYS                1031 // for using physical timer
uint32  kernel.arm-timer.irq-virt         MDI_ARM_TIMER_IRQ_VIRT                1032 // for using virtual timer
uint32  kernel.arm-timer.irq-sphys        MDI_ARM_TIMER_IRQ_SPHYS               1033 // for using secure physical timer
uint32  kernel.arm-timer.freq-override    MDI_ARM_TIMER_FREQ_OVERRIDE           1034 // optional

// bcm28xx drivers
list    kernel.bcm28xx-interrupt          MDI_BCM28XX_INTERRUPT                 1040
list    kernel.bcm28xx-uart               MDI_BCM28XX_UART                      1041

// ARM pl011 uart
list    kernel.arm-pl011-uart             MDI_ARM_PL011_UART                    1050
// pl011 driver uses base-virt, base-phys and IRQ
// TODO:(hollande) See note above re: phys/virt

// qemu drivers
list    kernel.qemu-pcie                  MDI_QEMU_PCIE                         1060

// ARM gicv2 driver
list    kernel.arm-gic-v2                 MDI_ARM_GIC_V2                        1070
// ARM gicv2 also uses base-virt and base-phys
// TODO:(hollande) See note above re: phys/virt
uint64  kernel.arm-gic-v2.gicd-offset     MDI_ARM_GIC_V2_GICD_OFFSET            1071
uint64  kernel.arm-gic-v2.gicc-offset     MDI_ARM_GIC_V2_GICC_OFFSET            1072
uint32  kernel.arm-gic-v2.ipi-base        MDI_ARM_GIC_V2_IPI_BASE               1073
uint64  kernel.arm-gic-v2.msi-frame-phys  MDI_ARM_GIC_V2_MSI_FRAME_PHYS         1074
uint64  kernel.arm-gic-v2.msi-frame-virt  MDI_ARM_GIC_V2_MSI_FRAME_VIRT         1075

// AmLogic S905
list    kernel.s905-uart                  MDI_S905_UART                         1080

// VID and PID for generic platform devices (that is, devices that may be used by multiple vendors).
const PDEV_VID_GENERIC = 0
const PDEV_PID_GENERIC = 0

// Platform device IDs for generic devices
const PDEV_DID_USB_DWC3 = 1
const PDEV_DID_USB_XHCI = 2
const PDEV_DID_KPCI = 3
