loader: unmix wiz start/select, pnd root check
[ginge.git] / loader / host_wiz.c
CommitLineData
4d045184 1// vim:shiftwidth=2:expandtab
2#include <sys/types.h>
3#include <sys/stat.h>
4#include <fcntl.h>
5#include <unistd.h>
6#include <sys/mman.h>
7
8#include "header.h"
9#include "../common/warm.h"
10#include "realfuncs.h"
11
12static int gpiodev = -1;
13extern int memdev; // leasing from wiz_video
14
15int host_init(void)
16{
17 gpiodev = open("/dev/GPIO", O_RDONLY);
18 if (gpiodev < 0)
19 perror(PFX "couldn't open /dev/GPIO");
20
21 return 0;
22}
23
24int host_read_btns(void)
25{
26 int r, value = 0;
27
28 r = read(gpiodev, &value, 4);
29 if (value & 0x02)
30 value |= 0x05;
31 if (value & 0x08)
32 value |= 0x14;
33 if (value & 0x20)
34 value |= 0x50;
35 if (value & 0x80)
36 value |= 0x41;
37
38 return value;
39}
40
41void *host_mmap_upper(void)
42{
43 void *ret;
44 int r;
45
46 // Wiz GP2X
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)
54 goto fail;
55
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)
59 goto fail;
60
61 ret = mmap((void *)0x83100000, 0x360000, PROT_READ|PROT_WRITE|PROT_EXEC,
62 MAP_SHARED|MAP_FIXED, memdev, 0x2aa0000);
63 if (ret != (void *)0x83100000)
64 goto fail;
65
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)
69 goto fail;
70
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);
73 if (r != 0)
74 err("could not make upper mem cacheable.\n");
75
76 return (void *)0x82000000;
77
78fail:
79 err("mmap %p: ", ret);
80 perror(NULL);
81 exit(1);
82}
83