Skip to content

Commit 80266ff

Browse files
hoshinolinamarcan
authored andcommitted
m1n1.constructutils: Unify version conditional syntax with Rust
Signed-off-by: Asahi Lina <[email protected]>
1 parent 82a9bf3 commit 80266ff

9 files changed

Lines changed: 131 additions & 133 deletions

File tree

proxyclient/hv/trace_agx.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from m1n1.constructutils import show_struct_trace, Ver
55
from m1n1.utils import *
66

7-
Ver.set_version(hv.u.version)
7+
Ver.set_version(hv.u)
88

99
trace_device("/arm-io/sgx", False)
1010
trace_device("/arm-io/pmp", False)

proxyclient/hv/trace_agx_defer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from m1n1.constructutils import show_struct_trace, Ver
55
from m1n1.utils import *
66

7-
Ver.set_version(hv.u.version)
7+
Ver.set_version(hv.u)
88

99
from m1n1.trace.agx import AGXTracer
1010
AGXTracer = AGXTracer._reloadcls(True)

proxyclient/hv/trace_agx_pwr.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from m1n1.constructutils import show_struct_trace, Ver
55
from m1n1.utils import *
66

7-
Ver.set_version(hv.u.version)
7+
Ver.set_version(hv.u)
88

99
trace_device("/arm-io/sgx", True)
1010
#trace_device("/arm-io/pmp", True)

proxyclient/m1n1/agx/render.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ def submit(self, cmdbuf, wait_for=None):
698698
ts1.ts2_addr = wc_3d.ts2._addr
699699
ts1.cmdqueue_ptr = self.wq_3d.info._addr
700700
ts1.unk_24 = 0x0
701-
if Ver.check("13.0 beta4"):
701+
if Ver.check("V >= V13_0B4"):
702702
ts1.unkptr_2c_0 = wc_3d.ts_flag._addr
703703
ts1.uuid = uuid_3d
704704
ts1.unk_30_padding = 0x0
@@ -715,7 +715,7 @@ def submit(self, cmdbuf, wait_for=None):
715715
ts2.ts2_addr = wc_3d.ts3._addr
716716
ts2.cmdqueue_ptr = self.wq_3d.info._addr
717717
ts2.unk_24 = 0x0
718-
if Ver.check("13.0 beta4"):
718+
if Ver.check("V >= V13_0B4"):
719719
ts2.unkptr_2c_0 = wc_3d.ts_flag._addr
720720
ts2.uuid = uuid_3d
721721
ts2.unk_30_padding = 0x0
@@ -947,7 +947,7 @@ def submit(self, cmdbuf, wait_for=None):
947947
ts1.ts2_addr = wc_ta.ts2._addr
948948
ts1.cmdqueue_ptr = self.wq_ta.info._addr
949949
ts1.unk_24 = 0x0
950-
if Ver.check("13.0 beta4"):
950+
if Ver.check("V >= V13_0B4"):
951951
ts1.unkptr_2c_0 = wc_ta.ts_flag._addr
952952
ts1.uuid = uuid_ta
953953
ts1.unk_30_padding = 0x0
@@ -964,7 +964,7 @@ def submit(self, cmdbuf, wait_for=None):
964964
ts2.ts2_addr = wc_ta.ts3._addr
965965
ts2.cmdqueue_ptr = self.wq_ta.info._addr
966966
ts2.unk_24 = 0x0
967-
if Ver.check("13.0 beta4"):
967+
if Ver.check("V >= V13_0B4"):
968968
ts2.unkptr_2c_0 = wc_ta.ts_flag._addr
969969
ts2.uuid = uuid_ta
970970
ts2.unk_30_padding = 0x0

proxyclient/m1n1/constructutils.py

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ def to_rust(cls):
646646
if isinstance(subcon, Ver):
647647
if not has_ver:
648648
s.append("")
649-
s.append(f" #[ver({subcon.rust})]")
649+
s.append(f" #[ver({subcon.cond})]")
650650
subcon = subcon.subcon
651651
has_ver = True
652652
else:
@@ -786,10 +786,17 @@ class Ver(Subconstruct):
786786
try:
787787
_version = sys.modules["m1n1.constructutils"].Ver._version
788788
except (KeyError, AttributeError):
789-
_version = [os.environ.get("AGX_FWVER", "0")]
789+
_version = {"V": os.environ.get("AGX_FWVER", "V12_3"),
790+
"G": os.environ.get("AGX_GPU", "G13")}
791+
792+
MATRIX = {
793+
"V": ["V12_1", "V12_3", "V12_4", "V13_0B4"],
794+
"G": ["G13", "G14"],
795+
}
790796

791797
def __init__(self, version, subcon):
792-
self.rust, self.min_ver, self.max_ver = self.parse_ver(version)
798+
self.cond = version
799+
self.vcheck = self.parse_ver(version)
793800
self._name = subcon.name
794801
self.subcon = subcon
795802
self.flagbuildnone = True
@@ -821,38 +828,24 @@ def _split_ver(s):
821828

822829
@classmethod
823830
def parse_ver(cls, version):
824-
def rv(s):
825-
return "V" + s.replace(" ", "").replace(".", "_").replace("beta", "b")
826-
827-
if ".." in version:
828-
v = version.split("..")
829-
min_ver = cls._split_ver(v[0])
830-
max_ver = cls._split_ver(v[1])
831-
if v[0]:
832-
rust = f"V >= {rv(v[0])} && V < {rv(v[1])}"
833-
else:
834-
rust = f"V < {rv(v[1])}"
835-
else:
836-
min_ver = cls._split_ver(version)
837-
max_ver = None
838-
rust = f"V >= {rv(version)}"
831+
expr = version.replace("&&", " and ").replace("||", " or ")
839832

840-
if min_ver is None:
841-
min_ver = (0,)
842-
if max_ver is None:
843-
max_ver = (999,)
833+
base_loc = {j: i for row in cls.MATRIX.values() for i, j in enumerate(row)}
844834

845-
return rust, min_ver, max_ver
835+
def check_ver(ver):
836+
loc = dict(base_loc)
837+
for k, v in ver.items():
838+
loc[k] = cls.MATRIX[k].index(v)
839+
return eval(expr, None, loc)
840+
841+
return check_ver
846842

847843
@classmethod
848844
def check(cls, version):
849-
_, min_ver, max_ver = cls.parse_ver(version)
850-
v = cls._split_ver(cls._version[0])
851-
return min_ver <= v < max_ver
845+
return cls.parse_ver(version)(cls._version)
852846

853847
def _active(self):
854-
v = self._split_ver(self._version[0])
855-
return self.min_ver <= v < self.max_ver
848+
return self.vcheck(self._version)
856849

857850
def _parse(self, stream, context, path):
858851
if not self._active():
@@ -871,8 +864,13 @@ def _sizeof(self, context, path):
871864
return self.subcon._sizeof(context, path)
872865

873866
@classmethod
874-
def set_version(cls, version):
875-
cls._version[0] = version
867+
def set_version_key(cls, key, version):
868+
cls._version[key] = version
869+
870+
@classmethod
871+
def set_version(cls, u):
872+
cls.set_version_key("V", u.version)
873+
cls.set_version_key("G", u.adt["/arm-io"].soc_generation.replace("H", "G"))
876874

877875
def show_struct_trace(log=print):
878876
for addr, desc in sorted(list(g_struct_trace)):

proxyclient/m1n1/fw/agx/cmdqueue.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ class WorkCommand3D(ConstructClass):
198198
subcon = Struct(
199199
"addr" / Tell,
200200
"magic" / Const(0x1, Hex(Int32ul)),
201-
Ver("13.0 beta4", "counter" / Int64ul),
201+
Ver("V >= V13_0B4", "counter" / Int64ul),
202202
"context_id" / Hex(Int32ul),
203203
"unk_8" / Hex(Int32ul),
204204
"microsequence_ptr" / Hex(Int64ul), # Command list
@@ -240,11 +240,11 @@ class WorkCommand3D(ConstructClass):
240240
"unk_918" / Int64ul,
241241
"unk_920" / Int32ul,
242242
"unk_924" / Int32ul,
243-
Ver("13.0 beta4", "unk_928_0" / Int32ul),
244-
Ver("13.0 beta4", "unk_928_4" / Int8ul),
245-
Ver("13.0 beta4", "ts_flag" / TsFlag),
246-
Ver("13.0 beta4", "unk_5e6" / Default(Int16ul, 0)),
247-
Ver("13.0 beta4", "unk_5e8" / Default(HexDump(Bytes(0x20)), bytes(0x20))),
243+
Ver("V >= V13_0B4", "unk_928_0" / Int32ul),
244+
Ver("V >= V13_0B4", "unk_928_4" / Int8ul),
245+
Ver("V >= V13_0B4", "ts_flag" / TsFlag),
246+
Ver("V >= V13_0B4", "unk_5e6" / Default(Int16ul, 0)),
247+
Ver("V >= V13_0B4", "unk_5e8" / Default(HexDump(Bytes(0x20)), bytes(0x20))),
248248
"pad_928" / Default(HexDump(Bytes(0x18)), bytes(0x18)),
249249
)
250250

@@ -281,7 +281,7 @@ class WorkCommandTA(ConstructClass):
281281
subcon = Struct(
282282
"addr" / Tell,
283283
"magic" / Const(0x0, Hex(Int32ul)),
284-
Ver("13.0 beta4", "counter" / Int64ul),
284+
Ver("V >= V13_0B4", "counter" / Int64ul),
285285
"context_id" / Hex(Int32ul),
286286
"unk_8" / Hex(Int32ul),
287287
"event_control_addr" / Hex(Int64ul),
@@ -322,13 +322,13 @@ class WorkCommandTA(ConstructClass):
322322
"unk_5d0" / Int32ul,
323323
"unk_5d4" / Int8ul,
324324
"pad_5d5" / Default(HexDump(Bytes(0x3)), bytes(0x3)),
325-
Ver("13.0 beta4", "unk_5e0" / Int32ul),
326-
Ver("13.0 beta4", "unk_5e4" / Int8ul),
327-
Ver("13.0 beta4", "ts_flag" / TsFlag),
328-
Ver("13.0 beta4", "unk_5e6" / Default(Int16ul, 0)),
329-
Ver("13.0 beta4", "unk_5e8" / Default(HexDump(Bytes(0x18)), bytes(0x18))),
325+
Ver("V >= V13_0B4", "unk_5e0" / Int32ul),
326+
Ver("V >= V13_0B4", "unk_5e4" / Int8ul),
327+
Ver("V >= V13_0B4", "ts_flag" / TsFlag),
328+
Ver("V >= V13_0B4", "unk_5e6" / Default(Int16ul, 0)),
329+
Ver("V >= V13_0B4", "unk_5e8" / Default(HexDump(Bytes(0x18)), bytes(0x18))),
330330
"pad_5d8" / Default(HexDump(Bytes(0x8)), bytes(0x8)),
331-
Ver("13.0 beta4", "pad_5e0" / Default(HexDump(Bytes(0x18)), bytes(0x18))),
331+
Ver("V >= V13_0B4", "pad_5e0" / Default(HexDump(Bytes(0x18)), bytes(0x18))),
332332
)
333333

334334
class UnknownWorkCommand(ConstructClass):

0 commit comments

Comments
 (0)