huangcm
2025-09-01 53d8e046ac1bf2ebe94f671983e3d3be059df91a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef __HWMSGBOX_H__
#define    __HWMSGBOX_H__
 
#include "ibase.h"
#include "driver.h"
 
#define CPUX_TRANSMIT        1
#define COCO_RECEPTION        0
#define CPUX_RECEPTION        1
#define COCO_TRANSMIT        0
 
 
#define COCO_SEND_NUMBER    1
#define COCO_FB_NUMBER        1
#define CPUX_SEND_NUMBER    1
#define CPUX_FB_NUMBER        1
#define BYTBCALL_NUMBER        1
 
#define HWMSG_RESOLVE        0x1
#define HWMSG_FEEDBACK        0x2
#define HWMSG_SEND        0x3
 
struct msg_queue {
   u32 channel_id;
   u32 channel_addr;
   u32 channel_dir;
   u32 irq_status;
   u32 fifo_status;
};
 
typedef struct {
   arisc_device dev;
   arisc_driver *dri;
   const struct msgbox_ops *ops;
   struct msg_queue coco_send[COCO_SEND_NUMBER];
   struct msg_queue coco_feedback[COCO_FB_NUMBER];
   struct msg_queue cpux_send[CPUX_SEND_NUMBER];
   struct msg_queue cpux_feedback[CPUX_FB_NUMBER];
   struct msg_queue cpus_simsyscall[BYTBCALL_NUMBER];
} msgbox_device;
 
void msgbox_set_direction(struct msg_queue *queue, u32 qdir);
s32 msgbox_feedback(struct msg_queue *queue);
s32 msgbox_send(struct msg_queue *queue,u32 addr);
s32 msgbox_query(struct msg_queue *queue);
int msgbox_init(void);
 
 
 
 
#endif