Skip to content
Snippets Groups Projects
Commit cfaa2643 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "lrdp-v2: register: handle None values more gracefully"

parents aff92e10 b69a4c8a
No related branches found
No related tags found
No related merge requests found
# Copyright (c) 2013, The Linux Foundation. All rights reserved. # Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 and # it under the terms of the GNU General Public License version 2 and
...@@ -47,6 +47,16 @@ class Register(object): ...@@ -47,6 +47,16 @@ class Register(object):
>>> hex(abc.value) >>> hex(abc.value)
'0x5' '0x5'
We also handle `None' values:
>>> r = Register(None, h=(3,0))
>>> r
value: None
>>> r.h
>>> r.h = 3
>>> r
value: 0x3 {h[3:0]=>0x3}
""" """
def __init__(self, value=0, **kwargs): def __init__(self, value=0, **kwargs):
...@@ -80,12 +90,16 @@ class Register(object): ...@@ -80,12 +90,16 @@ class Register(object):
def __getattr__(self, name): def __getattr__(self, name):
if name not in self._regs: if name not in self._regs:
raise AttributeError raise AttributeError
if self.value is None:
return None
msb, lsb = self._regs[name] msb, lsb = self._regs[name]
return bitops.bvalsel(msb, lsb, self.value) return bitops.bvalsel(msb, lsb, self.value)
def __setattr__(self, name, newvalue): def __setattr__(self, name, newvalue):
if name not in self._regs: if name not in self._regs:
raise AttributeError raise AttributeError
if self.value is None:
object.__setattr__(self, 'value', 0)
msb, lsb = self._regs[name] msb, lsb = self._regs[name]
val = self.value & (~bitops.bm(msb, lsb)) val = self.value & (~bitops.bm(msb, lsb))
val |= newvalue << lsb val |= newvalue << lsb
...@@ -94,6 +108,8 @@ class Register(object): ...@@ -94,6 +108,8 @@ class Register(object):
object.__setattr__(self, 'value', val) object.__setattr__(self, 'value', val)
def __repr__(self): def __repr__(self):
if self.value is None:
return 'value: None'
ret = [] ret = []
for r in sorted(self._regs, key=self._regs.get, reverse=True): for r in sorted(self._regs, key=self._regs.get, reverse=True):
msb, lsb = self._regs[r] msb, lsb = self._regs[r]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment