| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved. |
| */ |
| #ifndef __APRV2_VM_H__ |
| #define __APRV2_VM_H__ |
| |
| #define APRV2_VM_MAX_DNS_SIZE (31) |
| /* Includes NULL character. */ |
| #define APRV2_VM_PKT_SERVICE_ID_MASK (0x00FF) |
| /* Bitmask of the service ID field. */ |
| |
| /* Packet Structure Definition */ |
| struct aprv2_vm_packet_t { |
| uint32_t header; |
| uint16_t src_addr; |
| uint16_t src_port; |
| uint16_t dst_addr; |
| uint16_t dst_port; |
| uint32_t token; |
| uint32_t opcode; |
| }; |
| |
| /** |
| * In order to send command/event via MM HAB, the following buffer |
| * format shall be followed, where the buffer is provided to the |
| * HAB send API. |
| * |-----cmd_id or evt_id -----| <- 32 bit, e.g. APRV2_VM_CMDID_REGISTER |
| * |-----cmd payload ----------| e.g. aprv2_vm_cmd_register_t |
| * | ... | |
| * |
| * In order to receive a command response or event ack, the following |
| * buffer format shall be followed, where the buffer is provided to |
| * the HAB receive API. |
| * |-----cmd response ---------| e.g. aprv2_vm_cmd_register_rsp_t |
| * | ... | |
| */ |
| |
| /* Registers a service with the backend APR driver. */ |
| #define APRV2_VM_CMDID_REGISTER (0x00000001) |
| |
| struct aprv2_vm_cmd_register_t { |
| uint32_t name_size; |
| /**< The service name string size in bytes. */ |
| char name[APRV2_VM_MAX_DNS_SIZE]; |
| /**< |
| * The service name string to register. |
| * |
| * A NULL name means the service does not have a name. |
| */ |
| uint16_t addr; |
| /**< |
| * The address to register. |
| * |
| * A zero value means to auto-generate a free dynamic address. |
| * A non-zero value means to directly use the statically assigned address. |
| */ |
| }; |
| |
| struct aprv2_vm_cmd_register_rsp_t { |
| int32_t status; |
| /**< The status of registration. */ |
| uint32_t handle; |
| /**< The registered service handle. */ |
| uint16_t addr; |
| /**< The actual registered address. */ |
| }; |
| |
| #define APRV2_VM_CMDID_DEREGISTER (0x00000002) |
| |
| struct aprv2_vm_cmd_deregister_t { |
| uint32_t handle; |
| /**< The registered service handle. */ |
| }; |
| |
| struct aprv2_vm_cmd_deregister_rsp_t { |
| int32_t status; |
| /**< The status of de-registration. */ |
| }; |
| |
| #define APRV2_VM_CMDID_ASYNC_SEND (0x00000003) |
| |
| struct aprv2_vm_cmd_async_send_t { |
| uint32_t handle; |
| /**< The registered service handle. */ |
| struct aprv2_vm_packet_t pkt_header; |
| /**< The packet header. */ |
| /* The apr packet payload follows */ |
| }; |
| |
| struct aprv2_vm_cmd_async_send_rsp_t { |
| int32_t status; |
| /**< The status of send. */ |
| }; |
| |
| #define APRV2_VM_EVT_RX_PKT_AVAILABLE (0x00000004) |
| |
| struct aprv2_vm_evt_rx_pkt_available_t { |
| struct aprv2_vm_packet_t pkt_header; |
| /**< The packet header. */ |
| /* The apr packet payload follows */ |
| }; |
| |
| struct aprv2_vm_ack_rx_pkt_available_t { |
| int32_t status; |
| }; |
| |
| #endif /* __APRV2_VM_H__ */ |