blob: 33458e384dfd6e002660b0216a502f9df5df7192 [file] [log] [blame]
Andre Przywara05862fc2019-07-09 13:54:56 +01001/*
Mario Bălănicăcb759ff2023-12-06 21:36:25 +02002 * Copyright (c) 2019-2024, Arm Limited and Contributors. All rights reserved.
Andre Przywara05862fc2019-07-09 13:54:56 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef RPI3_MBOX_H
8#define RPI3_MBOX_H
9
10#include <stdint.h>
11
12/* This struct must be aligned to 16 bytes */
13typedef struct __packed __aligned(16) rpi3_mbox_request {
14 uint32_t size; /* Buffer size in bytes */
15 uint32_t code; /* Request/response code */
16 uint32_t tags[0];
17} rpi3_mbox_request_t;
18
Mario Bălănicăcb759ff2023-12-06 21:36:25 +020019/* VideoCore -> ARM */
20#define RPI3_MBOX0_READ_OFFSET ULL(0x00000000)
21#define RPI3_MBOX0_PEEK_OFFSET ULL(0x00000010)
22#define RPI3_MBOX0_SENDER_OFFSET ULL(0x00000014)
23#define RPI3_MBOX0_STATUS_OFFSET ULL(0x00000018)
24#define RPI3_MBOX0_CONFIG_OFFSET ULL(0x0000001C)
25/* ARM -> VideoCore */
26#define RPI3_MBOX1_WRITE_OFFSET ULL(0x00000020)
27#define RPI3_MBOX1_PEEK_OFFSET ULL(0x00000030)
28#define RPI3_MBOX1_SENDER_OFFSET ULL(0x00000034)
29#define RPI3_MBOX1_STATUS_OFFSET ULL(0x00000038)
30#define RPI3_MBOX1_CONFIG_OFFSET ULL(0x0000003C)
31/* Mailbox status constants */
32#define RPI3_MBOX_STATUS_FULL_MASK U(0x80000000) /* Set if full */
33#define RPI3_MBOX_STATUS_EMPTY_MASK U(0x40000000) /* Set if empty */
34
Andre Przywara05862fc2019-07-09 13:54:56 +010035#define RPI3_MBOX_BUFFER_SIZE U(256)
36
37/* Constants to perform a request/check the status of a request. */
38#define RPI3_MBOX_PROCESS_REQUEST U(0x00000000)
39#define RPI3_MBOX_REQUEST_SUCCESSFUL U(0x80000000)
40#define RPI3_MBOX_REQUEST_ERROR U(0x80000001)
41
42/* Command constants */
43#define RPI3_TAG_HARDWARE_GET_BOARD_REVISION U(0x00010002)
44#define RPI3_TAG_END U(0x00000000)
45
46#define RPI3_TAG_REQUEST U(0x00000000)
47#define RPI3_TAG_IS_RESPONSE U(0x80000000) /* Set if response */
48#define RPI3_TAG_RESPONSE_LENGTH_MASK U(0x7FFFFFFF)
49
50#define RPI3_CHANNEL_ARM_TO_VC U(0x8)
51#define RPI3_CHANNEL_MASK U(0xF)
52
53void rpi3_vc_mailbox_request_send(rpi3_mbox_request_t *req, int req_size);
54
55#endif