diff options
Diffstat (limited to 'src/mailbox.h')
-rw-r--r-- | src/mailbox.h | 31 |
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 | ||
14 | enum | ||
15 | { | ||
16 | MAILBOX_REQUEST = 0, | ||
17 | MAILBOX_RESPONSE = 1, | ||
18 | }; | ||
19 | |||
20 | enum | ||
21 | { | ||
22 | MAILBOX_DELIVERY_ERROR = 0, | ||
23 | MAILBOX_ERROR = 0x80000001, | ||
24 | MAILBOX_SUCCESS = 0x80000000, | ||
25 | }; | ||
26 | |||
27 | enum | ||
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 | |||
14 | typedef struct Tag { | 37 | typedef 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 | ||
29 | typedef struct __attribute__((aligned(MAIL_ALIGN))) Mail { | 52 | typedef 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 | |||
35 | void mbox_init(); | 60 | void mbox_init(); |
36 | const Mail* mbox_read(uint8_t channel); | 61 | const Mail* mbox_read(uint8_t channel); |
37 | void mbox_write(uint8_t channel, const void* mail); | 62 | void mbox_write(uint8_t channel, volatile const void* mail); |
38 | 63 | ||