1 // vim:shiftwidth=2:expandtab
9 #include "../common/warm.h"
10 #include "realfuncs.h"
12 static int gpiodev = -1;
13 extern int memdev; // leasing from wiz_video
17 gpiodev = open("/dev/GPIO", O_RDONLY);
19 perror(PFX "couldn't open /dev/GPIO");
24 int host_read_btns(void)
28 r = read(gpiodev, &value, 4);
41 void *host_mmap_upper(void)
47 // <linux mem> 03460000-03ffffff 00ba0000
48 // 02aa0000-02dfffff 03100000-0345ffff 00360000
49 // <linux mem> 03000000-030fffff 00100000
50 // 03000000-03ffffff 02000000-02ffffff 01000000
51 ret = mmap((void *)0x82000000, 0x1000000, PROT_READ|PROT_WRITE|PROT_EXEC,
52 MAP_SHARED|MAP_FIXED, memdev, 0x3000000);
53 if (ret != (void *)0x82000000)
56 ret = mmap((void *)0x83000000, 0x100000, PROT_READ|PROT_WRITE|PROT_EXEC,
57 MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0);
58 if (ret != (void *)0x83000000)
61 ret = mmap((void *)0x83100000, 0x360000, PROT_READ|PROT_WRITE|PROT_EXEC,
62 MAP_SHARED|MAP_FIXED, memdev, 0x2aa0000);
63 if (ret != (void *)0x83100000)
66 ret = mmap((void *)0x83460000, 0xba0000, PROT_READ|PROT_WRITE|PROT_EXEC,
67 MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, -1, 0);
68 if (ret != (void *)0x83460000)
71 r = warm_change_cb_range(WCB_B_BIT|WCB_C_BIT, 1, (void *)0x82000000, 0x1000000);
72 r |= warm_change_cb_range(WCB_B_BIT|WCB_C_BIT, 1, (void *)0x83100000, 0x360000);
74 err("could not make upper mem cacheable.\n");
76 return (void *)0x82000000;
79 err("mmap %p: ", ret);