// 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 fuchsia.kernel;

using zx;

/// Maximum number of bytes in a command string
const DEBUG_COMMAND_MAX uint32 = 1024;

/// Acts on behalf of the caller to interact with privileged debug system calls.
@discoverable(server="platform")
closed protocol DebugBroker {
    /// Pass debug command through to the kernel shell.
    /// Look at zx_debug_send_command syscall handling to find valid values.
    strict SendDebugCommand(struct {
        command string:DEBUG_COMMAND_MAX;
    }) -> (struct {
        status zx.Status;
    });

    /// Sets whether kernel tracing (ktrace) is enabled or disabled.
    strict SetTracingEnabled(struct {
        enabled bool;
    }) -> (struct {
        status zx.Status;
    });
};
