Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / crypto / ccp / dbc.py
blob2b91415b19407402e1997230e7d781a31ccdf5ec
1 #!/usr/bin/python3
2 # SPDX-License-Identifier: GPL-2.0
4 import ctypes
5 import os
7 DBC_UID_SIZE = 16
8 DBC_NONCE_SIZE = 16
9 DBC_SIG_SIZE = 32
11 PARAM_GET_FMAX_CAP = (0x3,)
12 PARAM_SET_FMAX_CAP = (0x4,)
13 PARAM_GET_PWR_CAP = (0x5,)
14 PARAM_SET_PWR_CAP = (0x6,)
15 PARAM_GET_GFX_MODE = (0x7,)
16 PARAM_SET_GFX_MODE = (0x8,)
17 PARAM_GET_CURR_TEMP = (0x9,)
18 PARAM_GET_FMAX_MAX = (0xA,)
19 PARAM_GET_FMAX_MIN = (0xB,)
20 PARAM_GET_SOC_PWR_MAX = (0xC,)
21 PARAM_GET_SOC_PWR_MIN = (0xD,)
22 PARAM_GET_SOC_PWR_CUR = (0xE,)
24 DEVICE_NODE = "/dev/dbc"
26 lib = ctypes.CDLL("./dbc_library.so", mode=ctypes.RTLD_GLOBAL)
29 def handle_error(code):
30 raise OSError(code, os.strerror(code))
33 def get_nonce(device, signature):
34 if not device:
35 raise ValueError("Device required")
36 buf = ctypes.create_string_buffer(DBC_NONCE_SIZE)
37 ret = lib.get_nonce(device.fileno(), ctypes.byref(buf), signature)
38 if ret:
39 handle_error(ret)
40 return buf.value
43 def set_uid(device, new_uid, signature):
44 if not signature:
45 raise ValueError("Signature required")
46 if not new_uid:
47 raise ValueError("UID required")
48 ret = lib.set_uid(device.fileno(), new_uid, signature)
49 if ret:
50 handle_error(ret)
51 return True
54 def process_param(device, message, signature, data=None):
55 if not signature:
56 raise ValueError("Signature required")
57 if type(message) != tuple:
58 raise ValueError("Expected message tuple")
59 arg = ctypes.c_int(data if data else 0)
60 sig = ctypes.create_string_buffer(signature, len(signature))
61 ret = lib.process_param(device.fileno(), message[0], ctypes.pointer(sig), ctypes.pointer(arg))
62 if ret:
63 handle_error(ret)
64 return arg.value, sig.value