return self.values[value]
return None
+ @staticmethod
+ def mask_and_shift_to_bits(width, mask, shift):
+ bits = []
+ val = mask << shift
+ for i in range(0, width):
+ if mask & (1 << i):
+ bits.append(width - i - 1 - shift)
+ return bits
+
@staticmethod
def parse_bitfield(line, reg):
a = line.split(None, 1)
bits = []
for s in range_str.split(','):
if ':' in s:
- (start, end) = s.split(':')
+ (start, end) = map( \
+ lambda s: reg.bit_number(int(s)),
+ s.split(':'))
start = reg.bit_number(int(start))
end = reg.bit_number(int(end))
bits.extend(range(start, end + 1, 1))
+ elif '<<' in s:
+ (mask, shift) = map(lambda s: int(s.strip()),
+ s.split('<<'))
+ bits.extend(bitfield.mask_and_shift_to_bits( \
+ reg.width, mask, shift))
else:
bits.append(reg.bit_number(int(s)))
-
+
return bitfield(bits, name)
+
+
@staticmethod
def parse_value(line):
a = line.split(None, 1)
str += "%*s: 0x%x\n" \
% (name_width, field.name, v)
return str
-
+
def bit_number(self, number):
if self.bit_order == self.bit_0_is_lsb:
number = self.width - 1 - number
+ "fields in %s") % id)
order_str = t[1].strip().lower()
+ order_str = order_str.replace(' ', '-')
+
if order_str not in order_map.keys():
raise ConfigurationError(file,
"Invalid bit order %s in %s" % \
(order_str, id))
reg.bit_order = order_map[order_str]
-
+
elif t[0] == 'alias':
alias_id = t[1].strip()
value_iter = args.__iter__()
else:
value_iter = iter(sys.stdin.readline, '')
-
+
try:
for value in value_iter:
decode_value(reg, value.strip(), options)