// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.hardware.syscalls.pci;

using zx;

// Defines and structures related to zx_pci_*()
// Info returned to dev manager for PCIe devices when probing.
struct PcieDeviceInfo {
    uint16 vendor_id;
    uint16 device_id;

    uint8 base_class;
    uint8 sub_class;
    uint8 program_interface;
    uint8 revision_id;

    uint8 bus_id;
    uint8 dev_id;
    uint8 func_id;

    uint8 padding1;
};

enum PciIrqMode : uint8 {
    DISABLED = 0;
    LEGACY = 1;
    LEGACY_NOACK = 2;
    MSI = 3;
    MSI_X = 4;
};

resource union PciField {
    1: uint64 addr;
    2: zx.handle:VMO handle;
};

resource struct PciBar {
    uint32 id;
    uint32 type;
    uint64 size;
    PciField u;
};
