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.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/mem/qos/QoSPolicy.py b/src/mem/qos/QoSPolicy.py
index f2218a725..9ccd98562 100644
--- a/src/mem/qos/QoSPolicy.py
+++ b/src/mem/qos/QoSPolicy.py
@@ -36,6 +36,7 @@
# Authors: Giacomo Travaglini
from m5.SimObject import *
+from m5.params import *
# QoS scheduler policy used to serve incoming transaction
class QoSPolicy(SimObject):
@@ -43,3 +44,40 @@ class QoSPolicy(SimObject):
abstract = True
cxx_header = "mem/qos/policy.hh"
cxx_class = 'QoS::Policy'
+
+class QoSFixedPriorityPolicy(QoSPolicy):
+ type = 'QoSFixedPriorityPolicy'
+ cxx_header = "mem/qos/policy_fixed_prio.hh"
+ cxx_class = 'QoS::FixedPriorityPolicy'
+
+ cxx_exports = [
+ PyBindMethod('initMasterName'),
+ PyBindMethod('initMasterObj'),
+ ]
+
+ _mpriorities = None
+
+ def setMasterPriority(self, master, priority):
+ if not self._mpriorities:
+ self._mpriorities = []
+
+ self._mpriorities.append([master, priority])
+
+ def init(self):
+ if not self._mpriorities:
+ print("Error, use setMasterPriority to init masters/priorities\n");
+ exit(1)
+ else:
+ for mprio in self._mpriorities:
+ master = mprio[0]
+ priority = mprio[1]
+ if isinstance(master, basestring):
+ self.getCCObject().initMasterName(
+ master, int(priority))
+ else:
+ self.getCCObject().initMasterObj(
+ master.getCCObject(), priority)
+
+ # default fixed priority value for non-listed Masters
+ qos_fixed_prio_default_prio = Param.UInt8(0,
+ "Default priority for non-listed Masters")