Rev 1075 | Rev 1146 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1075 | Rev 1130 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #include "ofw.h" |
29 | #include "ofw.h" |
30 | #include "asm.h" |
30 | #include "asm.h" |
31 | #include "printf.h" |
31 | #include "printf.h" |
32 | 32 | ||
33 | #define MAX_OFW_ARGS 10 |
33 | #define MAX_OFW_ARGS 10 |
- | 34 | #define STRING_SIZE 1024 |
|
34 | 35 | ||
35 | typedef unsigned int ofw_arg_t; |
36 | typedef unsigned int ofw_arg_t; |
36 | typedef unsigned int ihandle; |
37 | typedef unsigned int ihandle; |
37 | typedef unsigned int phandle; |
38 | typedef unsigned int phandle; |
38 | 39 | ||
Line 50... | Line 51... | ||
50 | 51 | ||
51 | 52 | ||
52 | ofw_entry ofw; |
53 | ofw_entry ofw; |
53 | 54 | ||
54 | phandle ofw_chosen; |
55 | phandle ofw_chosen; |
- | 56 | phandle ofw_aliases; |
|
55 | ihandle ofw_mmu; |
57 | ihandle ofw_mmu; |
56 | ihandle ofw_stdout; |
58 | ihandle ofw_stdout; |
57 | 59 | ||
58 | 60 | ||
59 | static int ofw_call(const char *service, const int nargs, const int nret, ...) |
61 | static int ofw_call(const char *service, const int nargs, const int nret, ...) |
Line 104... | Line 106... | ||
104 | halt(); |
106 | halt(); |
105 | 107 | ||
106 | if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout, sizeof(ofw_stdout)) <= 0) |
108 | if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout, sizeof(ofw_stdout)) <= 0) |
107 | ofw_stdout = 0; |
109 | ofw_stdout = 0; |
108 | 110 | ||
- | 111 | ofw_aliases = ofw_find_device("/aliases"); |
|
- | 112 | if (ofw_aliases == -1) { |
|
- | 113 | puts("\nUnable to find /aliases device\n"); |
|
- | 114 | halt(); |
|
- | 115 | } |
|
- | 116 | ||
109 | ofw_mmu = ofw_open("/mmu"); |
117 | ofw_mmu = ofw_open("/mmu"); |
110 | if (ofw_mmu == -1) { |
118 | if (ofw_mmu == -1) { |
111 | puts("Unable to open /mmu node\n"); |
119 | puts("\nUnable to open /mmu node\n"); |
112 | halt(); |
120 | halt(); |
113 | } |
121 | } |
114 | } |
122 | } |
115 | 123 | ||
116 | 124 | ||
Line 155... | Line 163... | ||
155 | break; |
163 | break; |
156 | map->count++; |
164 | map->count++; |
157 | map->total += map->zones[i].size; |
165 | map->total += map->zones[i].size; |
158 | } |
166 | } |
159 | } |
167 | } |
- | 168 | ||
- | 169 | ||
- | 170 | int ofw_screen(screen_t *screen) |
|
- | 171 | { |
|
- | 172 | char device_name[STRING_SIZE]; |
|
- | 173 | ||
- | 174 | if (ofw_get_property(ofw_aliases, "screen", device_name, STRING_SIZE) <= 0) |
|
- | 175 | return false; |
|
- | 176 | ||
- | 177 | phandle device = ofw_find_device(device_name); |
|
- | 178 | if (device == -1) |
|
- | 179 | return false; |
|
- | 180 | ||
- | 181 | if (ofw_get_property(device, "address", &screen->addr, sizeof(screen->addr)) <= 0) |
|
- | 182 | return false; |
|
- | 183 | ||
- | 184 | if (ofw_get_property(device, "width", &screen->width, sizeof(screen->width)) <= 0) |
|
- | 185 | return false; |
|
- | 186 | ||
- | 187 | if (ofw_get_property(device, "height", &screen->height, sizeof(screen->height)) <= 0) |
|
- | 188 | return false; |
|
- | 189 | ||
- | 190 | if (ofw_get_property(device, "depth", &screen->bpp, sizeof(screen->bpp)) <= 0) |
|
- | 191 | return false; |
|
- | 192 | ||
- | 193 | if (ofw_get_property(device, "linebytes", &screen->scanline, sizeof(screen->scanline)) <= 0) |
|
- | 194 | return false; |
|
- | 195 | ||
- | 196 | return true; |
|
- | 197 | } |