mirror of
https://github.com/drasko/open-ameba.git
synced 2024-12-30 18:15:17 +00:00
128 lines
3.9 KiB
C
128 lines
3.9 KiB
C
|
/******************************************************************************
|
||
|
*
|
||
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of version 2 of the GNU General Public License as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||
|
* more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License along with
|
||
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||
|
*
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
#ifndef __MAILBOX_H_
|
||
|
#define __MAILBOX_H_
|
||
|
|
||
|
#include "hal_api.h"
|
||
|
#include "osdep_api.h"
|
||
|
#include "hal_util.h"
|
||
|
#ifdef CONFIG_FREERTOS
|
||
|
#include "queue.h"
|
||
|
#endif
|
||
|
|
||
|
#define MBOX_WAIT_NO_TIMEOUT 0xffffffff // waiting for send/receive message with no timeout
|
||
|
#define MBOX_WAIT_NONE 0 // No wait for send/receive message
|
||
|
|
||
|
typedef enum _MAILBOX_ID_ {
|
||
|
MBOX_ID_WLAN = 0,
|
||
|
MBOX_ID_UART = 1,
|
||
|
MBOX_ID_I2C = 2,
|
||
|
MBOX_ID_I2S = 3,
|
||
|
MBOX_ID_SPI = 4,
|
||
|
MBOX_ID_SDIO = 5,
|
||
|
MBOX_ID_SDIO_MP = 6,
|
||
|
|
||
|
MBOX_ID_MAX = 0xff
|
||
|
} MAILBOX_ID;
|
||
|
|
||
|
#if defined(CONFIG_SDIO_DEVICE_EN) && defined(CONFIG_SDIO_DEVICE_NORMAL)
|
||
|
typedef enum _MSG_TYPE_SDIO {
|
||
|
MSG_SDIO_RX_PKT=1, // request to send a SDIO RX packet to the host side
|
||
|
MSG_SDIO_C2H=2, // request to send a C2H message
|
||
|
MSG_SDIO_RPWM=3, // request to set the RPWM
|
||
|
MSG_SDIO_MP_LOOP_TXPKT=4, // request to loopback this TX packet
|
||
|
|
||
|
MSG_SDIO_MAX=0xff
|
||
|
} MSG_TYPE_SDIO;
|
||
|
#endif // end of "#ifdef CONFIG_SDIO_DEVICE_EN"
|
||
|
|
||
|
/* the data structure of a MailBox to deliver message blocks */
|
||
|
typedef struct _RTL_MAILBOX_ {
|
||
|
void *mbox_hdl; // the mailbox handle which return from OS create queue API
|
||
|
_Sema *pWakeSema; // the semaphore to wakeup the message receiving task
|
||
|
_LIST mbox_list; // the link list to chain all created mailbox
|
||
|
u8 mbox_id; /* the ID of this Mailbox, this ID is
|
||
|
used to locate the MBox for send/get message */
|
||
|
} RTL_MAILBOX, *PRTL_MAILBOX;
|
||
|
|
||
|
/* the data structure of a message block */
|
||
|
typedef struct _RTL_MSG_BLK {
|
||
|
u8 MsgType; // the message type
|
||
|
u8 Reserved; // reserved
|
||
|
u16 DateLen; // the vaild data length of the pBuf
|
||
|
u32 Para; // the optional parameters associated with this message type
|
||
|
u8 *pBuf; // point to a data buffer associated with this message type
|
||
|
} MSG_BLK, *PMSG_BLK;
|
||
|
|
||
|
/* the data structure for system level message block management */
|
||
|
typedef struct _RTL_MBOX_ROOT_ {
|
||
|
_LIST mbox_list; // the link list of all created mailbox
|
||
|
_Mutex Mutex; // the Mutex to protect the mailbox create/delete procedure
|
||
|
u8 isInitialed; // is this Mailbox link-list initialed
|
||
|
} RTL_MBOX_ROOT, *PRTL_MBOX_ROOT;
|
||
|
|
||
|
// Export Funcction API
|
||
|
extern PRTL_MAILBOX RtlMailboxCreate(
|
||
|
IN u8 MboxID,
|
||
|
IN u32 MboxSize,
|
||
|
IN _Sema *pWakeSema
|
||
|
);
|
||
|
|
||
|
extern VOID RtlMailboxDel(
|
||
|
IN PRTL_MAILBOX MboxHdl
|
||
|
);
|
||
|
|
||
|
extern u8 RtlMailboxSendToBack(
|
||
|
IN u8 MboxID,
|
||
|
IN MSG_BLK *pMsg,
|
||
|
IN u32 MSToWait,
|
||
|
IN u8 IsFromISR
|
||
|
);
|
||
|
|
||
|
extern u8 RtlMailboxSendToFront(
|
||
|
IN u8 MboxID,
|
||
|
IN MSG_BLK *pMsg,
|
||
|
IN u32 MSToWait,
|
||
|
IN u8 IsFromISR
|
||
|
);
|
||
|
|
||
|
extern u8 RtlMailboxReceive(
|
||
|
IN u8 MboxID,
|
||
|
OUT MSG_BLK *pMsg,
|
||
|
IN u32 MSToWait,
|
||
|
IN u8 IsFromISR
|
||
|
);
|
||
|
|
||
|
extern u8 RtlMailboxPeek(
|
||
|
IN u8 MboxID,
|
||
|
OUT MSG_BLK *pMsg,
|
||
|
IN u32 MSToWait,
|
||
|
IN u8 IsFromISR
|
||
|
);
|
||
|
|
||
|
extern u32 RtlMailboxMsgWaiting(
|
||
|
IN u8 MboxID,
|
||
|
IN u8 IsFromISR
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif // #ifndef __MAILBOX_H_
|
||
|
|