blob: 7868593e59975485810d0e0d210cb914920bcdd3 [file] [log] [blame]
// 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.
#pragma once
namespace component {
// Maximum transfer size we can proxy.
static constexpr size_t kProxyMaxTransferSize = 4096;
/// Header for RPC requests.
struct ProxyRequest {
uint32_t txid;
uint32_t proto_id;
};
/// Header for RPC responses.
struct ProxyResponse {
uint32_t txid;
zx_status_t status;
};
// ZX_PROTOCOL_PDEV proxy support.
enum class PdevOp {
GET_MMIO,
GET_INTERRUPT,
GET_BTI,
GET_SMC,
GET_DEVICE_INFO,
GET_BOARD_INFO,
};
struct PdevProxyRequest {
ProxyRequest header;
PdevOp op;
uint32_t index;
uint32_t flags;
};
struct PdevProxyResponse {
ProxyResponse header;
zx_off_t offset;
size_t size;
uint32_t flags;
pdev_device_info_t device_info;
pdev_board_info_t board_info;
};
// Maximum metadata size that can be returned via PDEV_DEVICE_GET_METADATA.
static constexpr uint32_t PROXY_MAX_METADATA_SIZE =
(kProxyMaxTransferSize - sizeof(PdevProxyResponse));
struct rpc_pdev_metadata_rsp_t {
PdevProxyResponse pdev;
uint8_t metadata[PROXY_MAX_METADATA_SIZE];
};
// ZX_PROTOCOL_MIPI_CSI proxy support.
enum class MipiCsiOp {
INIT,
DEINIT,
};
struct MipiCsiProxyRequest {
ProxyRequest header;
MipiCsiOp op;
mipi_info_t mipi_info;
mipi_adap_info_t adap_info;
};
// ZX_PROTOCOL_GPIO proxy support.
enum class GpioOp {
CONFIG_IN,
CONFIG_OUT,
SET_ALT_FUNCTION,
READ,
WRITE,
GET_INTERRUPT,
RELEASE_INTERRUPT,
SET_POLARITY,
};
struct GpioProxyRequest {
ProxyRequest header;
GpioOp op;
uint32_t flags;
uint32_t polarity;
uint64_t alt_function;
uint8_t value;
};
struct GpioProxyResponse {
ProxyResponse header;
uint8_t value;
};
// ZX_PROTOCOL_CLOCK proxy support.
enum class ClockOp {
ENABLE,
DISABLE,
};
struct ClockProxyRequest {
ProxyRequest header;
ClockOp op;
uint32_t index;
};
// ZX_PROTOCOL_POWER proxy support.
enum class PowerOp {
ENABLE,
DISABLE,
GET_STATUS,
GET_SUPPORTED_VOLTAGE_RANGE,
REQUEST_VOLTAGE,
WRITE_PMIC_CTRL_REG,
READ_PMIC_CTRL_REG,
};
struct PowerProxyRequest {
ProxyRequest header;
PowerOp op;
uint32_t set_voltage;
uint32_t reg_addr;
uint32_t reg_value;
};
struct PowerProxyResponse {
ProxyResponse header;
power_domain_status_t status;
uint32_t min_voltage;
uint32_t max_voltage;
uint32_t actual_voltage;
uint32_t reg_value;
};
// ZX_PROTOCOL_SYSMEM proxy support.
enum class SysmemOp {
CONNECT,
};
struct SysmemProxyRequest {
ProxyRequest header;
SysmemOp op;
};
// ZX_PROTOCOL_AMLOGIC_CANVAS proxy support.
enum class AmlogicCanvasOp {
CONFIG,
FREE,
};
struct AmlogicCanvasProxyRequest {
ProxyRequest header;
AmlogicCanvasOp op;
size_t offset;
canvas_info_t info;
uint8_t canvas_idx;
};
struct AmlogicCanvasProxyResponse {
ProxyResponse header;
uint8_t canvas_idx;
};
// ZX_PROTOCOL_ETH_BOARD proxy support.
enum class EthBoardOp {
RESET_PHY,
};
struct EthBoardProxyRequest {
ProxyRequest header;
EthBoardOp op;
};
// ZX_PROTOCOL_I2C proxy support.
enum class I2cOp {
TRANSACT,
GET_MAX_TRANSFER_SIZE,
GET_INTERRUPT,
};
struct I2cProxyRequest {
ProxyRequest header;
I2cOp op;
size_t op_count;
uint32_t flags;
};
struct I2cProxyResponse {
ProxyResponse header;
size_t size;
};
struct I2cProxyOp {
size_t length;
bool is_read;
bool stop;
};
// ZX_PROTOCOL_USB_MODE_SWITCH proxy support.
enum class UsbModeSwitchOp {
SET_MODE,
};
struct UsbModeSwitchProxyRequest {
ProxyRequest header;
UsbModeSwitchOp op;
usb_mode_t mode;
};
} // namespace component