Files
BPI-CM9-Linux/aml-comp/uboot/bl30/rtos_sdk/drivers_aocpu/mailbox/mailbox-common.h
T
2026-08-24 10:03:24 +08:00

105 lines
2.6 KiB
C

/*
* Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
*
* SPDX-License-Identifier: MIT
*/
#ifndef __MAILBOX_COMMON_H__
#define __MAILBOX_COMMON_H__
#include "common.h"
#include "mailbox_soc.h"
#include "gcc_compiler_attributes.h"
#ifndef UNUSED
#define UNUSED(x) ((void)(x))
#endif
#define aml_writel32(val, reg) (REG32(reg) = val)
#define aml_readl32(reg) (REG32(reg))
#define xMutexInit() xSemaphoreCreateMutex()
#define xMuteLock(x) xSemaphoreTake((x), portMAX_DELAY)
#define xMuteUnlock(x) xSemaphoreGive((x))
/*
* MBOX_TASKID_SIZE: 0x8
* MHU_COMPETE_SIZE: 0x8
* MHU_ULLCTL_SIZE: 0x8
* MHU_STS_SIZE: 0x4
* MAILBOX_CMD_MAX: 0xFFFF
*/
#define MBOX_MAX_SIZE (0x80) /* 128 bytes */
#define MBOX_HEAD_SIZE (0x1c) /* include status 0x4 task id 0x8, completion 0x8 */
#define MBOX_RESEV_SIZE (0x4)
#define MBOX_DATA_SIZE (MBOX_MAX_SIZE - MBOX_HEAD_SIZE - MBOX_RESEV_SIZE)
#define MBOX_CL_ID_TAB_LEN (128)
#define ACK_OK 1
#define ACK_FAIL 2
#define MAILBOX_BUFFER_SIZE MBOX_MAX_SIZE
#define VALID_CMD_SIZE(cmd, size) \
configASSERT(cmd <= MAILBOX_CMD_MAX && size <= MAILBOX_BUFFER_SIZE)
#define VALID_BUFFER_SIZE(size) configASSERT(size <= MAILBOX_BUFFER_SIZE)
enum sync_type {
MB_ASYNC = 1,
MB_SYNC,
};
struct MbStat {
uint32_t cmd : 16;
uint32_t size : 9;
uint32_t sync : 7;
};
union MbStat_in {
struct MbStat st;
uint32_t reg;
};
struct __packed mbHeadInfo {
uint32_t status;
uint64_t taskid;
uint64_t complete;
uint64_t ullclt;
};
struct __packed mboxData {
uint32_t status;
uint64_t taskid;
uint64_t complete;
uint64_t ullclt;
uint8_t data[MBOX_DATA_SIZE];
};
struct __packed mboxPackInfo {
struct mboxData mbdata;
uint32_t ulCmd;
uint32_t ulSize;
};
extern struct xMboxChan *pxMboxChans;
extern struct xMboxIdTab *pxMboxIdTabs;
extern void *pvClientIdTab;
extern void *g_tbl_ao;
void vEnterCritical(void);
void vExitCritical(void);
void vSetMboxStats(uint32_t reg, struct MbStat st);
void vClrMboxStats(uint32_t reg);
struct xMboxChan *xGetMboxChan(uint8_t ucClientChId);
struct xMboxChan *xGetMboxChanById(uint8_t ucMboxChId);
uint32_t ulRevAddrMbox(uint8_t ucMboxChId);
void vMboxWrite(uint32_t to, void *from, long count);
void vMboxRead(void *to, uint32_t from, long count);
void *pvMboxMemSet(void *pDst, int iVal, size_t xCnt);
void *pvMboxMemCpy(void *pDst, const void *pSrc, size_t xLen);
void xGetPayloadHead(uint32_t addr, void *head);
uint32_t ulChkHtblInit(void *pHtbl);
int iMboxClientIdTabInit(void **pTab);
void vInitMboxChLock(void);
BaseType_t xRegMboxClientChId(uint8_t ucClientChId);
BaseType_t xFreeMboxClientChId(uint8_t ucClientChId);
#endif