From 079cd940e727c1705e9f1b30706b9531d5aedda6 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 24 May 2025 17:04:18 -0700 Subject: Framebuffer WIP --- src/mailbox.h | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/mailbox.h') 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 PROPERTY_CHANNEL = 8, }; +enum +{ + MAILBOX_REQUEST = 0, + MAILBOX_RESPONSE = 1, +}; + +enum +{ + MAILBOX_DELIVERY_ERROR = 0, + MAILBOX_ERROR = 0x80000001, + MAILBOX_SUCCESS = 0x80000000, +}; + +enum +{ + TAG_END = 0, + TAG_FRAMEBUFFER_ALLOCATE = 0x00040001, + TAG_FRAMEBUFFER_RELEASE = 0x00048001, + TAG_FRAMEBUFFER_SET_PHYSICAL_SCREEN_SIZE = 0x00048003, + TAG_FRAMEBUFFER_SET_VIRTUAL_SCREEN_SIZE = 0x00048004, + TAG_FRAMEBUFFER_SET_DEPTH = 0x00048005, +}; + typedef struct Tag { union { uint32_t all; @@ -23,16 +46,18 @@ typedef struct Tag { }; uint32_t size; // Buffer size. uint32_t code; // Request/response code. - uint32_t data[1]; // Buffer data. + uint32_t data[]; // Buffer data. } Tag; typedef struct __attribute__((aligned(MAIL_ALIGN))) Mail { uint32_t size; // Buffer size. uint32_t code; // Request/response code. - Tag tags[1]; // Variable quantity. + Tag tags[]; // Variable quantity. } Mail; +#define MAIL_SIZE(TYPE) (sizeof(TYPE) + (2 * sizeof(uint32_t))) + void mbox_init(); const Mail* mbox_read(uint8_t channel); -void mbox_write(uint8_t channel, const void* mail); +void mbox_write(uint8_t channel, volatile const void* mail); -- cgit v1.2.3