Changeset 6323989 in mainline for arch/ppc32/loader/ofw.c
- Timestamp:
- 2006-03-14T09:11:07Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2d69ee6
- Parents:
- eebd172
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/loader/ofw.c
reebd172 r6323989 30 30 #include "printf.h" 31 31 32 #define MAX_OFW_ARGS 10 33 34 typedef unsigned int ofw_arg_t; 35 typedef unsigned int ihandle; 36 typedef unsigned int phandle; 37 38 /** OpenFirmware command structure 39 * 40 */ 41 typedef struct { 42 const char *service; /**< Command name */ 43 unsigned int nargs; /**< Number of in arguments */ 44 unsigned int nret; /**< Number of out arguments */ 45 ofw_arg_t args[MAX_OFW_ARGS]; /**< List of arguments */ 46 } ofw_args_t; 47 48 typedef void (*ofw_entry)(ofw_args_t *); 49 50 32 51 ofw_entry ofw; 33 52 … … 37 56 38 57 39 void init(void) 40 { 41 ofw_chosen = ofw_find_device("/chosen"); 42 if (ofw_chosen == -1) 43 halt(); 44 45 if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout, sizeof(ofw_stdout)) <= 0) 46 ofw_stdout = 0; 47 48 ofw_mmu = ofw_open("/mmu"); 49 if (ofw_mmu == -1) { 50 puts("Unable to open /mmu node\n"); 51 halt(); 52 } 53 } 54 55 void halt(void) 56 { 57 ofw_call("exit", 0, 0); 58 } 59 60 61 int ofw_call(const char *service, const int nargs, const int nret, ...) 58 static int ofw_call(const char *service, const int nargs, const int nret, ...) 62 59 { 63 60 va_list list; … … 83 80 84 81 85 ihandle ofw_open(const char *name) 82 static phandle ofw_find_device(const char *name) 83 { 84 return ofw_call("finddevice", 1, 1, name); 85 } 86 87 88 static int ofw_get_property(const phandle device, const char *name, const void *buf, const int buflen) 89 { 90 return ofw_call("getprop", 4, 1, device, name, buf, buflen); 91 } 92 93 static ihandle ofw_open(const char *name) 86 94 { 87 95 return ofw_call("open", 1, 1, name); 96 } 97 98 99 void init(void) 100 { 101 ofw_chosen = ofw_find_device("/chosen"); 102 if (ofw_chosen == -1) 103 halt(); 104 105 if (ofw_get_property(ofw_chosen, "stdout", &ofw_stdout, sizeof(ofw_stdout)) <= 0) 106 ofw_stdout = 0; 107 108 ofw_mmu = ofw_open("/mmu"); 109 if (ofw_mmu == -1) { 110 puts("Unable to open /mmu node\n"); 111 halt(); 112 } 113 } 114 115 116 void halt(void) 117 { 118 ofw_call("exit", 0, 0); 88 119 } 89 120 … … 95 126 96 127 ofw_call("write", 3, 1, ofw_stdout, str, len); 97 }98 99 100 phandle ofw_find_device(const char *name)101 {102 return ofw_call("finddevice", 1, 1, name);103 }104 105 106 int ofw_get_property(const phandle device, const char *name, const void *buf, const int buflen)107 {108 return ofw_call("getprop", 4, 1, device, name, buf, buflen);109 128 } 110 129 … … 120 139 return ofw_call("call-method", 6, 1, "map", ofw_mmu, mode, size, virt, phys); 121 140 } 141 142 143 int ofw_memmap(memmap_t *map) 144 { 145 int i; 146 int ret; 147 148 phandle handle = ofw_find_device("/memory"); 149 if (handle == -1) 150 return false; 151 152 ret = ofw_get_property(handle, "reg", &map->zones, sizeof(map->zones)); 153 if (ret == -1) 154 return false; 155 156 map->total = 0; 157 map->count = 0; 158 for (i = 0; i < MEMMAP_MAX_RECORDS; i++) { 159 if (map->zones[i].size == 0) 160 break; 161 map->count++; 162 map->total += map->zones[i].size; 163 } 164 }
Note:
See TracChangeset
for help on using the changeset viewer.