1ae7636084a0cffbcae4a6ba3d7fcfda0e6a818b
[rpikern] / src / rpi.h
1 #ifndef RPI_H_
2 #define RPI_H_
3
4 #include <stdint.h>
5
6
7 #define RPI_MEM_BUS_COHERENT(addr)      (((uint32_t)addr) | 0x40000000)
8 #define RPI_MEM_BUS_UNCACHED(addr)      (((uint32_t)addr) | 0xc0000000)
9
10
11 #define RPI_MBOX_FRAMEBUF       1
12 #define RPI_MBOX_PROP           8
13
14 #define RPI_TAG_GETMODEL        0x010001
15 #define RPI_TAG_GETRAM          0x010005
16 #define RPI_TAG_GETVRAM         0x010006
17 #define RPI_TAG_SETCLOCK        0x038002
18
19 #define RPI_TAG_ALLOCFB         0x040001
20 #define RPI_TAG_RELEASEFB       0x048001
21 #define RPI_TAG_BLANKSCR        0x040002
22 #define RPI_TAG_SETFBPHYS       0x048003
23 #define RPI_TAG_SETFBVIRT       0x048004
24 #define RPI_TAG_SETFBDEPTH      0x048005
25
26 struct rpi_prop_header {
27         uint32_t size;
28         uint32_t res;
29 };
30
31 struct rpi_prop {
32         uint32_t id, size, res;
33         uint32_t data[1];
34 };
35
36 #define RPI_PROP_NEXT(p) \
37         ((struct rpi_prop*)((char*)((p) + 1) + ((p)->size - sizeof (p)->data)))
38
39 extern int rpi_model;
40 extern uint32_t rpi_iobase;
41 extern uint32_t rpi_memsize, rpi_vc_memsize;
42
43 void rpi_init(void);
44 void rpi_reboot(void) __attribute__((noreturn));
45
46 void rpi_mbox_send(int chan, uint32_t msg);
47 uint32_t rpi_mbox_recv(int chan);
48 int rpi_mbox_pending(int chan);
49
50 #endif  /* RPI_H_ */