brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 80248d3 Raw
73 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * AMD Secure Processor Dynamic Boost Control sample library4 *5 * Copyright (C) 2023 Advanced Micro Devices, Inc.6 *7 * Author: Mario Limonciello <mario.limonciello@amd.com>8 */9 10#include <assert.h>11#include <errno.h>12#include <string.h>13#include <sys/ioctl.h>14 15/* if uapi header isn't installed, this might not yet exist */16#ifndef __packed17#define __packed __attribute__((packed))18#endif19#include <linux/psp-dbc.h>20 21int get_nonce(int fd, void *nonce_out, void *signature)22{23	struct dbc_user_nonce tmp = {24		.auth_needed = !!signature,25	};26 27	assert(nonce_out);28 29	if (signature)30		memcpy(tmp.signature, signature, sizeof(tmp.signature));31 32	if (ioctl(fd, DBCIOCNONCE, &tmp))33		return errno;34	memcpy(nonce_out, tmp.nonce, sizeof(tmp.nonce));35 36	return 0;37}38 39int set_uid(int fd, __u8 *uid, __u8 *signature)40{41	struct dbc_user_setuid tmp;42 43	assert(uid);44	assert(signature);45 46	memcpy(tmp.uid, uid, sizeof(tmp.uid));47	memcpy(tmp.signature, signature, sizeof(tmp.signature));48 49	if (ioctl(fd, DBCIOCUID, &tmp))50		return errno;51	return 0;52}53 54int process_param(int fd, int msg_index, __u8 *signature, int *data)55{56	struct dbc_user_param tmp = {57		.msg_index = msg_index,58		.param = *data,59	};60 61	assert(signature);62	assert(data);63 64	memcpy(tmp.signature, signature, sizeof(tmp.signature));65 66	if (ioctl(fd, DBCIOCPARAM, &tmp))67		return errno;68 69	*data = tmp.param;70	memcpy(signature, tmp.signature, sizeof(tmp.signature));71	return 0;72}73