X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=rpikern;a=blobdiff_plain;f=src%2Frpi.h;h=57a1cf7eeb4fb2ae3b521870925fbe0605aa1e9b;hp=36f8ac4e52217bf972a747d7871610324e2d2cca;hb=99bdc8838f189f79ba77bfbbf41d7f1b4839ce0f;hpb=32ccc707bc0821d7ff4248fe9f58e92e9c6ebef9 diff --git a/src/rpi.h b/src/rpi.h index 36f8ac4..57a1cf7 100644 --- a/src/rpi.h +++ b/src/rpi.h @@ -3,48 +3,68 @@ #include + +#define RPI_MEM_BUS_COHERENT(addr) (((uint32_t)addr) | 0x40000000) +#define RPI_MEM_BUS_UNCACHED(addr) (((uint32_t)addr) | 0xc0000000) + + #define RPI_MBOX_FRAMEBUF 1 #define RPI_MBOX_PROP 8 #define RPI_TAG_GETMODEL 0x010001 +#define RPI_TAG_GETREV 0x010002 #define RPI_TAG_GETRAM 0x010005 #define RPI_TAG_GETVRAM 0x010006 #define RPI_TAG_SETCLOCK 0x038002 #define RPI_TAG_ALLOCFB 0x040001 #define RPI_TAG_RELEASEFB 0x048001 +#define RPI_TAG_BLANKSCR 0x040002 #define RPI_TAG_SETFBPHYS 0x048003 #define RPI_TAG_SETFBVIRT 0x048004 #define RPI_TAG_SETFBDEPTH 0x048005 +#define RPI_TAG_GETFBPITCH 0x040008 +#define RPI_TAG_SETFBOFFS 0x048009 +#define RPI_TAG_GETFBOFFS 0x040009 -struct rpi_tag_getmodel { - uint32_t id, size, res; - uint32_t model; -}; - -struct rpi_tag_getram { - uint32_t id, size, res; - uint32_t membase, memsize; +struct rpi_prop_header { + uint32_t size; + uint32_t res; }; -struct rpi_tag_setclock { +struct rpi_prop { uint32_t id, size, res; - uint32_t clock_id, rate, skip_turbo; + uint32_t data[1]; }; -struct rpi_prop_header { - uint32_t size; - uint32_t res; -}; +#define RPI_PROP_NEXT(p) \ + ((struct rpi_prop*)((char*)((p) + 1) + ((p)->size - sizeof (p)->data))) extern int rpi_model; extern uint32_t rpi_iobase; -extern uint32_t rpi_memsize, rpi_vc_memsize; +extern uint32_t rpi_mem_base, rpi_mem_size, rpi_vmem_base, rpi_vmem_size; void rpi_init(void); +void rpi_reboot(void) __attribute__((noreturn)); void rpi_mbox_send(int chan, uint32_t msg); uint32_t rpi_mbox_recv(int chan); int rpi_mbox_pending(int chan); +/* usage: + * rpi_prop(RPI_TAG_WHATEVER, foo, bar); + * rpi_prop(RPI_TAG_XYZZY, 42); + * if(rpi_prop_send() != -1) { + * struct rpi_prop *prop; + * while((prop = rpi_prop_next())) { + * ... process response tags ... + * } + * } + */ +void rpi_prop(int id, ...); +int rpi_prop_send(void); +struct rpi_prop *rpi_prop_next(void); +/* find specific tag in response */ +struct rpi_prop *rpi_prop_find(int id); + #endif /* RPI_H_ */