1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2019, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef RPI3_MBOX_H 8*91f16700Schasinglulu #define RPI3_MBOX_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* This struct must be aligned to 16 bytes */ 13*91f16700Schasinglulu typedef struct __packed __aligned(16) rpi3_mbox_request { 14*91f16700Schasinglulu uint32_t size; /* Buffer size in bytes */ 15*91f16700Schasinglulu uint32_t code; /* Request/response code */ 16*91f16700Schasinglulu uint32_t tags[0]; 17*91f16700Schasinglulu } rpi3_mbox_request_t; 18*91f16700Schasinglulu 19*91f16700Schasinglulu #define RPI3_MBOX_BUFFER_SIZE U(256) 20*91f16700Schasinglulu 21*91f16700Schasinglulu /* Constants to perform a request/check the status of a request. */ 22*91f16700Schasinglulu #define RPI3_MBOX_PROCESS_REQUEST U(0x00000000) 23*91f16700Schasinglulu #define RPI3_MBOX_REQUEST_SUCCESSFUL U(0x80000000) 24*91f16700Schasinglulu #define RPI3_MBOX_REQUEST_ERROR U(0x80000001) 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* Command constants */ 27*91f16700Schasinglulu #define RPI3_TAG_HARDWARE_GET_BOARD_REVISION U(0x00010002) 28*91f16700Schasinglulu #define RPI3_TAG_END U(0x00000000) 29*91f16700Schasinglulu 30*91f16700Schasinglulu #define RPI3_TAG_REQUEST U(0x00000000) 31*91f16700Schasinglulu #define RPI3_TAG_IS_RESPONSE U(0x80000000) /* Set if response */ 32*91f16700Schasinglulu #define RPI3_TAG_RESPONSE_LENGTH_MASK U(0x7FFFFFFF) 33*91f16700Schasinglulu 34*91f16700Schasinglulu #define RPI3_CHANNEL_ARM_TO_VC U(0x8) 35*91f16700Schasinglulu #define RPI3_CHANNEL_MASK U(0xF) 36*91f16700Schasinglulu 37*91f16700Schasinglulu void rpi3_vc_mailbox_request_send(rpi3_mbox_request_t *req, int req_size); 38*91f16700Schasinglulu 39*91f16700Schasinglulu #endif 40