// Copyright 2022 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.dsp;

using zx;

// The discoverable annotation is required, otherwise the protocol bindings
// will not have a name string generated.
@discoverable
closed protocol DspDevice {
    /// Load DSP firmware.
    /// |fw_name| : The name of the firmware to load.
    /// error a zx_status value indicating failure. One of the following:
    /// `ZX_ERR_NOT_FOUND` if the firmware does not exist.
    strict LoadFirmware(struct {
        fw_name string:zx.MAX_NAME_LEN;
    }) -> () error zx.Status;

    /// Start DSP.
    /// error a zx_status value indicating failure. Two of the following:
    /// `ZX_ERR_BAD_STATE` if the DSP firmware fails to load, execute the DSP start command.
    /// `ZX_ERR_OUT_OF_RANGE` if the execution of the smcc command started by the DSP fails.
    strict Start() -> () error zx.Status;

    /// Stop DSP.
    /// error a zx_status value indicating failure. Two of the following:
    /// `ZX_ERR_BAD_STATE` if DSP is not started, execute DSP stop.
    /// `ZX_ERR_OUT_OF_RANGE` if the execution of the smcc command stopped by the DSP fails.
    strict Stop() -> () error zx.Status;
};

service Service {
    device client_end:DspDevice;
};
