// 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.

#ifndef FUCHSIA_INCLUDE_FUCHSIA_COMMUNICATION_H_
#define FUCHSIA_INCLUDE_FUCHSIA_COMMUNICATION_H_

#include <stdint.h>

enum SemaphoreIndices
{
	kSemaphoreCompletion,
	kSemaphoreMax,
};

struct FuchsiaImgCommandPayload
{
	// The bridge sets this to nonzero when it finishes executing the bridge
	// command and modifying the output data.
	uint32_t finished_command;

	// The bridge sets this to nonzero if the last command succeeded.
	uint32_t success;

	uint64_t thread_id;

	uint32_t bridge_group;
	uint32_t function_id;

	// Input and output data will immediately follow this struct in the buffer.
	// Before the bridge call input data should be stored there, and after the
	// bridge call output data will be stored there.
	uint32_t in_data_size;
	uint32_t out_data_size;
};

#endif // FUCHSIA_INCLUDE_FUCHSIA_COMMUNICATION_H_
