root/drivers/greybus/arpc.h
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
/*
 * Copyright(c) 2016 Google Inc. All rights reserved.
 * Copyright(c) 2016 Linaro Ltd. All rights reserved.
 */

#ifndef __ARPC_H
#define __ARPC_H

/* APBridgeA RPC (ARPC) */

enum arpc_result {
        ARPC_SUCCESS            = 0x00,
        ARPC_NO_MEMORY          = 0x01,
        ARPC_INVALID            = 0x02,
        ARPC_TIMEOUT            = 0x03,
        ARPC_UNKNOWN_ERROR      = 0xff,
};

struct arpc_request_message {
        __le16  id;             /* RPC unique id */
        __le16  size;           /* Size in bytes of header + payload */
        __u8    type;           /* RPC type */
        __u8    data[]; /* ARPC data */
} __packed;

struct arpc_response_message {
        __le16  id;             /* RPC unique id */
        __u8    result;         /* Result of RPC */
} __packed;

/* ARPC requests */
#define ARPC_TYPE_CPORT_CONNECTED               0x01
#define ARPC_TYPE_CPORT_QUIESCE                 0x02
#define ARPC_TYPE_CPORT_CLEAR                   0x03
#define ARPC_TYPE_CPORT_FLUSH                   0x04
#define ARPC_TYPE_CPORT_SHUTDOWN                0x05

struct arpc_cport_connected_req {
        __le16 cport_id;
} __packed;

struct arpc_cport_quiesce_req {
        __le16 cport_id;
        __le16 peer_space;
        __le16 timeout;
} __packed;

struct arpc_cport_clear_req {
        __le16 cport_id;
} __packed;

struct arpc_cport_flush_req {
        __le16 cport_id;
} __packed;

struct arpc_cport_shutdown_req {
        __le16 cport_id;
        __le16 timeout;
        __u8 phase;
} __packed;

#endif  /* __ARPC_H */