/* This file is part of the program psim.
- Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
+ Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
const char *chp,
device_unit *address)
{
+ ASSERT(device_nr_address_cells(bus) > 0);
if (device_decode_unit(bus, chp, address) < 0)
device_error(current, "invalid unit address in %s", chp);
return skip_token(chp);
/* parse the numeric list */
size->nr_cells = device_nr_size_cells(bus);
nr = 0;
+ ASSERT(size->nr_cells > 0);
while (1) {
char *next;
size->cells[nr] = strtoul(curr, &next, 0);
int reg_nr;
reg_property_spec *regs;
const char *chp;
+ device *bus = device_parent(current);
/* determine the number of reg entries by counting tokens */
- nr_regs = count_entries(current, property_name, property_value, 2);
+ nr_regs = count_entries(current, property_name, property_value,
+ 1 + (device_nr_size_cells(bus) > 0));
/* create working space */
regs = zalloc(nr_regs * sizeof(*regs));
/* fill it in */
chp = property_value;
for (reg_nr = 0; reg_nr < nr_regs; reg_nr++) {
- chp = parse_address(current, device_parent(current),
- chp, ®s[reg_nr].address);
- chp = parse_size(current, device_parent(current),
- chp, ®s[reg_nr].size);
+ chp = parse_address(current, bus, chp, ®s[reg_nr].address);
+ if (device_nr_size_cells(bus) > 0)
+ chp = parse_size(current, bus, chp, ®s[reg_nr].size);
+ else
+ memset(®s[reg_nr].size, sizeof (®s[reg_nr].size), 0);
}
/* create it */
const char *value)
{
ihandle_runtime_property_spec ihandle;
- const char *chp;
- name_specifier ihandle_spec;
- /* copy over the full path */
+ /* pass the full path */
ihandle.full_path = value;
- /* copy over the args (if present) */
- chp = strchr(value, '\0');
- while (chp > value && *chp != '/' && *chp != ':')
- chp--;
- if (*chp == ':') {
- chp += 1;
- ihandle.args = chp;
- }
- else {
- ihandle.args = NULL;
- }
-
/* save this ready for the ihandle create */
- ihandle.phandle = split_fill_path(current, ihandle.full_path, &ihandle_spec);
device_add_ihandle_runtime_property(current, property,
&ihandle);
}
ihandle_runtime_property_spec spec;
device_find_ihandle_runtime_property(me, property->name, &spec);
printf_filtered(" *%s", spec.full_path);
- if (spec.args != NULL)
- printf_filtered(":%s", spec.args);
}
}
break;