// Copyright 2019 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 zx;

type PciBar = struct {
    unused uint32;
};

type PciInitArg = struct {
    unused uint32;
};

type PcieDeviceInfo = struct {
    unused uint32;
};

@transport("Syscall")
protocol ReservedWords {
    // These argument names can't used as identifiers in Go, make sure they're
    // remapped to something else.
    MyFunc(struct {
        type uint32;
        func uint32;
        g uint32;
    }) -> (struct {
        status status;
    });

    PciTypes(struct {
        bar PciBar;
        initarg PciInitArg;
        device_info PcieDeviceInfo;
    }) -> (struct {
        status status;
    });
};
