1 // SPDX-License-Identifier: GPL-2.0-only 1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 2 /* 3 * AMD Secure Processor Dynamic Boost Control 3 * AMD Secure Processor Dynamic Boost Control sample library 4 * 4 * 5 * Copyright (C) 2023 Advanced Micro Devices, 5 * Copyright (C) 2023 Advanced Micro Devices, Inc. 6 * 6 * 7 * Author: Mario Limonciello <mario.limonciell 7 * Author: Mario Limonciello <mario.limonciello@amd.com> 8 */ 8 */ 9 9 10 #include <assert.h> 10 #include <assert.h> 11 #include <errno.h> 11 #include <errno.h> 12 #include <string.h> 12 #include <string.h> 13 #include <sys/ioctl.h> 13 #include <sys/ioctl.h> 14 14 15 /* if uapi header isn't installed, this might 15 /* if uapi header isn't installed, this might not yet exist */ 16 #ifndef __packed 16 #ifndef __packed 17 #define __packed __attribute__((packed)) 17 #define __packed __attribute__((packed)) 18 #endif 18 #endif 19 #include <linux/psp-dbc.h> 19 #include <linux/psp-dbc.h> 20 20 21 int get_nonce(int fd, void *nonce_out, void *s 21 int get_nonce(int fd, void *nonce_out, void *signature) 22 { 22 { 23 struct dbc_user_nonce tmp = { 23 struct dbc_user_nonce tmp = { 24 .auth_needed = !!signature, 24 .auth_needed = !!signature, 25 }; 25 }; 26 26 27 assert(nonce_out); 27 assert(nonce_out); 28 28 29 if (signature) 29 if (signature) 30 memcpy(tmp.signature, signatur 30 memcpy(tmp.signature, signature, sizeof(tmp.signature)); 31 31 32 if (ioctl(fd, DBCIOCNONCE, &tmp)) 32 if (ioctl(fd, DBCIOCNONCE, &tmp)) 33 return errno; 33 return errno; 34 memcpy(nonce_out, tmp.nonce, sizeof(tm 34 memcpy(nonce_out, tmp.nonce, sizeof(tmp.nonce)); 35 35 36 return 0; 36 return 0; 37 } 37 } 38 38 39 int set_uid(int fd, __u8 *uid, __u8 *signature 39 int set_uid(int fd, __u8 *uid, __u8 *signature) 40 { 40 { 41 struct dbc_user_setuid tmp; 41 struct dbc_user_setuid tmp; 42 42 43 assert(uid); 43 assert(uid); 44 assert(signature); 44 assert(signature); 45 45 46 memcpy(tmp.uid, uid, sizeof(tmp.uid)); 46 memcpy(tmp.uid, uid, sizeof(tmp.uid)); 47 memcpy(tmp.signature, signature, sizeo 47 memcpy(tmp.signature, signature, sizeof(tmp.signature)); 48 48 49 if (ioctl(fd, DBCIOCUID, &tmp)) 49 if (ioctl(fd, DBCIOCUID, &tmp)) 50 return errno; 50 return errno; 51 return 0; 51 return 0; 52 } 52 } 53 53 54 int process_param(int fd, int msg_index, __u8 54 int process_param(int fd, int msg_index, __u8 *signature, int *data) 55 { 55 { 56 struct dbc_user_param tmp = { 56 struct dbc_user_param tmp = { 57 .msg_index = msg_index, 57 .msg_index = msg_index, 58 .param = *data, 58 .param = *data, 59 }; 59 }; 60 int ret; 60 int ret; 61 61 62 assert(signature); 62 assert(signature); 63 assert(data); 63 assert(data); 64 64 65 memcpy(tmp.signature, signature, sizeo 65 memcpy(tmp.signature, signature, sizeof(tmp.signature)); 66 66 67 if (ioctl(fd, DBCIOCPARAM, &tmp)) 67 if (ioctl(fd, DBCIOCPARAM, &tmp)) 68 return errno; 68 return errno; 69 69 70 *data = tmp.param; 70 *data = tmp.param; 71 memcpy(signature, tmp.signature, sizeo 71 memcpy(signature, tmp.signature, sizeof(tmp.signature)); 72 return 0; 72 return 0; 73 } 73 } 74 74
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.