105 lines
2.6 KiB
C
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
|