MCPcopy
hub / github.com/AsahiLinux/m1n1 / RXMsg

Method RXMsg

proxyclient/hv/trace_smc.py:64–97  ·  view source on GitHub ↗
(self, msg)

Source from the content-addressed store, hash-verified

62
63 @msg(None, DIR.RX, Register64)
64 def RXMsg(self, msg):
65 if self.state.sram_addr is None:
66 self.log(f"SRAM address: {msg.value:#x}")
67 self.state.sram_addr = msg.value
68 return True
69
70 msg = SMCResult(msg.value)
71 if msg.RESULT != 0:
72 self.log(f"[{msg.ID:x}] <Err: 0x{msg.RESULT:02x}")
73 return True
74
75 if msg.ID in self.state.rb:
76 msgtype, key, size = self.state.rb.pop(msg.ID)
77 if msgtype in (SMC_READ_KEY, SMC_RW_KEY):
78 if size <= 4:
79 data = hex(msg.VALUE)
80 else:
81 data = self.hv.iface.readmem(self.state.sram_addr, msg.SIZE).hex()
82 self.log(f"[{msg.ID:x}] <R: <{key}> = {data}")
83 return True
84
85 elif msgtype == SMC_GET_KEY_INFO:
86 data = self.hv.iface.readmem(self.state.sram_addr, 6)
87 size, type, flags = struct.unpack("B4sB", data)
88 self.log(f"[{msg.ID:x}] <Info: <{key}>: size={size} type={type.decode('ascii')} flags={flags:#x}")
89 return True
90
91 elif msgtype == SMC_GET_KEY_BY_INDEX:
92 kname = msg.VALUE.to_bytes(4, byteorder="little").decode("ascii")
93 self.log(f"[{msg.ID:x}] <Key @{key}: <{kname}>")
94 return True
95
96 self.log(f"[{msg.ID:x}] <OK {msg!r}")
97 return True
98
99class SMCTracer(ASCTracer):
100 ENDPOINTS = {

Callers

nothing calls this directly

Calls 5

SMCResultClass · 0.85
decodeMethod · 0.80
logMethod · 0.45
readmemMethod · 0.45
to_bytesMethod · 0.45

Tested by

no test coverage detected