blob: 9ace3d8bdff985ff7acfc6bf83118e6282bc0498 [file] [log] [blame]
// Copyright 2018 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 ddk.protocol.pci;
using zircon.syscalls.pci;
using zx;
enum PciCfg : uint16 {
VENDOR_ID = 0x00;
DEVICE_ID = 0x02;
REVISION_ID = 0x08;
CLASS_CODE = 0x09;
SUBSYSTEM_VENDOR_ID = 0x2C;
SUBSYSTEM_ID = 0x2E;
CAPABILITIES_PTR = 0x34;
};
enum PciCapId : uint8 {
NULL = 0x00;
PCI_PWR_MGMT = 0x01;
AGP = 0x02;
VPD = 0x03;
MSI = 0x05;
PCIX = 0x07;
HYPERTRANSPORT = 0x08;
VENDOR = 0x09;
DEBUG_PORT = 0x0A;
COMPACT_PCI_CRC = 0x0B;
PCI_HOT_PLUG = 0x0C;
PCI_BRIDGE_SUBSYSTEM_VID = 0x0D;
AGP8X = 0x0E;
SECURE_DEVICE = 0x0F;
PCI_EXPRESS = 0x10;
MSIX = 0x11;
SATA_DATA_NDX_CFG = 0x12;
ADVANCED_FEATURES = 0x13;
ENHANCED_ALLOCATION = 0x14;
};
[Layout = "ddk-protocol"]
protocol Pci {
GetBar(uint32 bar_id) -> (zx.status s, zircon.syscalls.pci.ZxPciBar res);
EnableBusMaster(bool enable) -> (zx.status s);
ResetDevice() -> (zx.status s);
MapInterrupt(int32 which_irq) -> (zx.status s, handle<interrupt> @handle);
QueryIrqMode(zircon.syscalls.pci.ZxPciIrqMode mode) -> (zx.status s, uint32 max_irqs);
SetIrqMode(zircon.syscalls.pci.ZxPciIrqMode mode, uint32 requested_irq_count) -> (zx.status s);
GetDeviceInfo() -> (zx.status s, zircon.syscalls.pci.ZxPcieDeviceInfo into);
ConfigRead8(uint16 offset) -> (zx.status s, uint8 value);
ConfigRead16(uint16 offset) -> (zx.status s, uint16 value);
ConfigRead32(uint16 offset) -> (zx.status s, uint32 value);
ConfigWrite8(uint16 offset, uint8 value) -> (zx.status s);
ConfigWrite16(uint16 offset, uint16 value) -> (zx.status s);
ConfigWrite32(uint16 offset, uint32 value) -> (zx.status s);
GetNextCapability(uint8 id, uint8 offset) -> (zx.status s, uint8 offset);
GetFirstCapability(uint8 id) -> (zx.status s, uint8 offset);
GetAuxdata(string args) -> (zx.status s, vector<voidptr> data);
GetBti(uint32 index) -> (zx.status s, handle<bti> bti);
};