Lines Matching refs:spec
68 name_specifier *spec)
92 strcpy(spec->buf, device_find_string_property(aliases, alias));
93 strcat(spec->buf, device_specifier + len);
96 strcpy(spec->buf, device_specifier);
100 strcpy(spec->buf, device_specifier);
104 if (strlen(spec->buf) >= sizeof(spec->buf))
108 chp = spec->buf;
115 spec->path = chp;
126 spec->value = chp;
129 if (spec->value[0] == '\0') {
130 spec->property = NULL; /*not a property*/
131 spec->value = NULL;
133 else if (spec->value[0] == '>'
134 || spec->value[0] == '<') {
135 /* an interrupt spec */
136 spec->property = NULL;
139 chp = strrchr(spec->path, '/');
141 spec->property = spec->path;
142 spec->path = strchr(spec->property, '\0');
146 spec->property = chp+1;
151 spec->name = NULL;
152 spec->base = NULL;
153 spec->unit = NULL;
154 spec->args = NULL;
155 spec->last_name = NULL;
156 spec->last_base = NULL;
157 spec->last_unit = NULL;
158 spec->last_args = NULL;
172 name_specifier *spec)
174 if (split_device_specifier(current, property_specifier, spec)) {
175 if (spec->property == NULL) {
177 char *chp = strrchr(spec->path, '/');
179 spec->property = spec->path;
180 spec->path = strrchr(spec->property, '\0');;
184 spec->property = chp+1;
199 split_device_name(name_specifier *spec)
203 spec->last_name = spec->name;
204 spec->last_base = spec->base;
205 spec->last_unit = spec->unit;
206 spec->last_args = spec->args;
208 if (spec->path[0] == '\0') {
209 spec->name = NULL;
210 spec->base = NULL;
211 spec->unit = NULL;
212 spec->args = NULL;
215 /* break the current device spec from the path */
216 spec->name = spec->path;
217 chp = strchr(spec->name, '/');
219 spec->path = strchr(spec->name, '\0');
221 spec->path = chp+1;
225 if (spec->name[0] == '(') {
226 chp = strchr(spec->name, ')');
228 spec->base = spec->name;
232 spec->base = spec->name + 1;
233 spec->name = chp + 1;
237 spec->base = spec->name;
240 chp = strchr(spec->name, '@');
242 spec->unit = NULL;
243 chp = spec->name;
248 spec->unit = chp;
253 spec->args = NULL;
256 spec->args = chp+1;
266 split_value(name_specifier *spec)
269 if (spec->value == NULL)
272 while (isspace(spec->value[0]))
273 spec->value++;
274 if (spec->value[0] == '\0') {
275 spec->value = NULL;
278 token = spec->value;
280 while (spec->value[0] != '\0' && !isspace(spec->value[0]))
281 spec->value++;
283 if (spec->value[0] != '\0') {
284 spec->value[0] = '\0';
285 spec->value++;
292 /* traverse the path specified by spec starting at current */
297 name_specifier *spec)
301 if (strncmp(spec->path, "/", strlen("/")) == 0) {
305 spec->path += strlen("/");
307 else if (strncmp(spec->path, "./", strlen("./")) == 0) {
309 spec->path += strlen("./");
311 else if (strncmp(spec->path, "../", strlen("../")) == 0) {
315 spec->path += strlen("../");
317 else if (strcmp(spec->path, ".") == 0) {
319 spec->path += strlen(".");
321 else if (strcmp(spec->path, "..") == 0) {
325 spec->path += strlen("..");
334 split_device_name(spec);
338 while (split_device_name(spec)) {
342 if (strcmp(spec->name, device_name(child)) == 0) {
343 if (spec->unit == NULL)
347 device_decode_unit(current, spec->unit, &phys);
367 name_specifier *spec)
370 if (!split_device_specifier(current, device_specifier, spec))
374 current = split_find_device(current, spec);
377 if (spec->name != NULL) {
379 current = device_create(current, spec->base, spec->name,
380 spec->unit, spec->args);
381 } while (split_device_name(spec));
793 name_specifier spec;
806 current = split_fill_path(current, device_specifier, &spec);
808 /* is there an interrupt spec */
809 if (spec.property == NULL
810 && spec.value != NULL) {
811 char *op = split_value(&spec);
815 char *my_port_name = split_value(&spec);
817 char *dest_port_name = split_value(&spec);
820 char *dest_device_name = split_value(&spec);
838 device_error(current, "unreconised interrupt spec %s\n", spec.value);
844 if (spec.property != NULL) {
845 if (strcmp(spec.value, "true") == 0)
846 device_add_boolean_property(current, spec.property, 1);
847 else if (strcmp(spec.value, "false") == 0)
848 device_add_boolean_property(current, spec.property, 0);
851 switch (spec.value[0]) {
853 parse_ihandle_property(current, spec.property, spec.value + 1);
858 char *curr = spec.value + 1;
868 device_add_array_property(current, spec.property,
873 parse_string_property(current, spec.property, spec.value);
876 spec.value++;
877 property = tree_find_property(current, spec.value);
879 device_error(current, "property %s not found\n", spec.value);
881 spec.property,
885 if (strcmp(spec.property, "reg") == 0
886 || strcmp(spec.property, "assigned-addresses") == 0
887 || strcmp(spec.property, "alternate-reg") == 0){
888 parse_reg_property(current, spec.property, spec.value);
890 else if (strcmp(spec.property, "ranges") == 0) {
891 parse_ranges_property(current, spec.property, spec.value);
893 else if (isdigit(spec.value[0])
894 || (spec.value[0] == '-' && isdigit(spec.value[1]))
895 || (spec.value[0] == '+' && isdigit(spec.value[1]))) {
896 parse_integer_property(current, spec.property, spec.value);
899 parse_string_property(current, spec.property, spec.value);
1074 ihandle_runtime_property_spec spec;
1075 device_find_ihandle_runtime_property(me, property->name, &spec);
1076 printf_filtered(" *%s", spec.full_path);
1160 printf_filtered("A device/property specifier (<spec>) has the format:\n");
1162 printf_filtered(" <spec> ::= <path> [ <value> ] ;\n");
1199 name_specifier spec;
1200 if (!split_device_specifier(root, device_specifier, &spec))
1202 me = split_find_device(root, &spec);
1203 if (spec.name != NULL)
1206 return device_create_instance(me, device_specifier, spec.last_args);
1216 name_specifier spec;
1219 split_device_specifier(root, path_to_device, &spec);
1220 if (spec.value != NULL)
1224 node = split_find_device(root, &spec);
1225 if (spec.name != NULL)
1237 name_specifier spec;
1238 if (!split_property_specifier(root, path_to_property, &spec))
1240 root = split_find_device(root, &spec);
1241 return device_find_property(root, spec.property);
1249 name_specifier spec;
1250 if (!split_property_specifier(root, path_to_property, &spec))
1252 root = split_find_device(root, &spec);
1253 return device_find_boolean_property(root, spec.property);
1261 name_specifier spec;
1262 if (!split_property_specifier(root, path_to_property, &spec))
1264 root = split_find_device(root, &spec);
1265 return device_find_integer_property(root, spec.property);
1273 name_specifier spec;
1274 if (!split_property_specifier(root, path_to_property, &spec))
1276 root = split_find_device(root, &spec);
1277 return device_find_ihandle_property(root, spec.property);
1285 name_specifier spec;
1286 if (!split_property_specifier(root, path_to_property, &spec))
1288 root = split_find_device(root, &spec);
1289 return device_find_string_property(root, spec.property);