summaryrefslogtreecommitdiff
path: root/src/mailbox.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailbox.h')
-rw-r--r--src/mailbox.h31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/mailbox.h b/src/mailbox.h
index e96a4ed..3cca366 100644
--- a/src/mailbox.h
+++ b/src/mailbox.h
@@ -11,6 +11,29 @@ enum
11 PROPERTY_CHANNEL = 8, 11 PROPERTY_CHANNEL = 8,
12}; 12};
13 13
14enum
15{
16 MAILBOX_REQUEST = 0,
17 MAILBOX_RESPONSE = 1,
18};
19
20enum
21{
22 MAILBOX_DELIVERY_ERROR = 0,
23 MAILBOX_ERROR = 0x80000001,
24 MAILBOX_SUCCESS = 0x80000000,
25};
26
27enum
28{
29 TAG_END = 0,
30 TAG_FRAMEBUFFER_ALLOCATE = 0x00040001,
31 TAG_FRAMEBUFFER_RELEASE = 0x00048001,
32 TAG_FRAMEBUFFER_SET_PHYSICAL_SCREEN_SIZE = 0x00048003,
33 TAG_FRAMEBUFFER_SET_VIRTUAL_SCREEN_SIZE = 0x00048004,
34 TAG_FRAMEBUFFER_SET_DEPTH = 0x00048005,
35};
36
14typedef struct Tag { 37typedef struct Tag {
15 union { 38 union {
16 uint32_t all; 39 uint32_t all;
@@ -23,16 +46,18 @@ typedef struct Tag {
23 }; 46 };
24 uint32_t size; // Buffer size. 47 uint32_t size; // Buffer size.
25 uint32_t code; // Request/response code. 48 uint32_t code; // Request/response code.
26 uint32_t data[1]; // Buffer data. 49 uint32_t data[]; // Buffer data.
27} Tag; 50} Tag;
28 51
29typedef struct __attribute__((aligned(MAIL_ALIGN))) Mail { 52typedef struct __attribute__((aligned(MAIL_ALIGN))) Mail {
30 uint32_t size; // Buffer size. 53 uint32_t size; // Buffer size.
31 uint32_t code; // Request/response code. 54 uint32_t code; // Request/response code.
32 Tag tags[1]; // Variable quantity. 55 Tag tags[]; // Variable quantity.
33} Mail; 56} Mail;
34 57
58#define MAIL_SIZE(TYPE) (sizeof(TYPE) + (2 * sizeof(uint32_t)))
59
35void mbox_init(); 60void mbox_init();
36const Mail* mbox_read(uint8_t channel); 61const Mail* mbox_read(uint8_t channel);
37void mbox_write(uint8_t channel, const void* mail); 62void mbox_write(uint8_t channel, volatile const void* mail);
38 63