// 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
@for_deprecated_c_bindings
protocol DebugBroker {
    /// Pass debug command through to the kernel shell.
    /// Look at zx_debug_send_command syscall handling to find valid values.
    SendDebugCommand(struct {
        command string:DEBUG_COMMAND_MAX;
    }) -> (struct {
        status zx.status;
    });

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