summaryrefslogtreecommitdiff
path: root/src/mem/qos/QoSPolicy.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/qos/QoSPolicy.py')
-rw-r--r--src/mem/qos/QoSPolicy.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/mem/qos/QoSPolicy.py b/src/mem/qos/QoSPolicy.py
index 9ccd98562..6db04aca1 100644
--- a/src/mem/qos/QoSPolicy.py
+++ b/src/mem/qos/QoSPolicy.py
@@ -81,3 +81,38 @@ class QoSFixedPriorityPolicy(QoSPolicy):
# default fixed priority value for non-listed Masters
qos_fixed_prio_default_prio = Param.UInt8(0,
"Default priority for non-listed Masters")
+
+class QoSPropFairPolicy(QoSPolicy):
+ type = 'QoSPropFairPolicy'
+ cxx_header = "mem/qos/policy_pf.hh"
+ cxx_class = 'QoS::PropFairPolicy'
+
+ cxx_exports = [
+ PyBindMethod('initMasterName'),
+ PyBindMethod('initMasterObj'),
+ ]
+
+ _mscores = None
+
+ def setInitialScore(self, master, score):
+ if not self._mscores:
+ self._mscores = []
+
+ self._mscores.append([master, score])
+
+ def init(self):
+ if not self._mscores:
+ print("Error, use setInitialScore to init masters/scores\n");
+ exit(1)
+ else:
+ for mprio in self._mscores:
+ master = mprio[0]
+ score = mprio[1]
+ if isinstance(master, basestring):
+ self.getCCObject().initMasterName(
+ master, float(score))
+ else:
+ self.getCCObject().initMasterObj(
+ master.getCCObject(), float(score))
+
+ weight = Param.Float(0.5, "Pf score weight")