1*c04cf9e1SMario Limonciello /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ 2*c04cf9e1SMario Limonciello /* 3*c04cf9e1SMario Limonciello * Userspace interface for AMD Dynamic Boost Control (DBC) 4*c04cf9e1SMario Limonciello * 5*c04cf9e1SMario Limonciello * Copyright (C) 2023 Advanced Micro Devices, Inc. 6*c04cf9e1SMario Limonciello * 7*c04cf9e1SMario Limonciello * Author: Mario Limonciello <[email protected]> 8*c04cf9e1SMario Limonciello */ 9*c04cf9e1SMario Limonciello 10*c04cf9e1SMario Limonciello #ifndef __PSP_DBC_USER_H__ 11*c04cf9e1SMario Limonciello #define __PSP_DBC_USER_H__ 12*c04cf9e1SMario Limonciello 13*c04cf9e1SMario Limonciello #include <linux/types.h> 14*c04cf9e1SMario Limonciello 15*c04cf9e1SMario Limonciello /** 16*c04cf9e1SMario Limonciello * DOC: AMD Dynamic Boost Control (DBC) interface 17*c04cf9e1SMario Limonciello */ 18*c04cf9e1SMario Limonciello 19*c04cf9e1SMario Limonciello #define DBC_NONCE_SIZE 16 20*c04cf9e1SMario Limonciello #define DBC_SIG_SIZE 32 21*c04cf9e1SMario Limonciello 22*c04cf9e1SMario Limonciello /** 23*c04cf9e1SMario Limonciello * struct dbc_user_nonce - Nonce exchange structure (input/output). 24*c04cf9e1SMario Limonciello * @auth_needed: Whether the PSP should authenticate this request (input). 25*c04cf9e1SMario Limonciello * 0: no authentication, PSP will return single use nonce. 26*c04cf9e1SMario Limonciello * 1: authentication: PSP will return multi-use nonce. 27*c04cf9e1SMario Limonciello * @nonce: 8 byte value used for future authentication (output). 28*c04cf9e1SMario Limonciello * @signature: Optional 32 byte signature created by software using a 29*c04cf9e1SMario Limonciello * previous nonce (input). 30*c04cf9e1SMario Limonciello */ 31*c04cf9e1SMario Limonciello struct dbc_user_nonce { 32*c04cf9e1SMario Limonciello __u32 auth_needed; 33*c04cf9e1SMario Limonciello __u8 nonce[DBC_NONCE_SIZE]; 34*c04cf9e1SMario Limonciello __u8 signature[DBC_SIG_SIZE]; 35*c04cf9e1SMario Limonciello } __packed; 36*c04cf9e1SMario Limonciello 37*c04cf9e1SMario Limonciello /** 38*c04cf9e1SMario Limonciello * Dynamic Boost Control (DBC) IOC 39*c04cf9e1SMario Limonciello * 40*c04cf9e1SMario Limonciello * possible return codes for all DBC IOCTLs: 41*c04cf9e1SMario Limonciello * 0: success 42*c04cf9e1SMario Limonciello * -EINVAL: invalid input 43*c04cf9e1SMario Limonciello * -E2BIG: excess data passed 44*c04cf9e1SMario Limonciello * -EFAULT: failed to copy to/from userspace 45*c04cf9e1SMario Limonciello * -EBUSY: mailbox in recovery or in use 46*c04cf9e1SMario Limonciello * -ENODEV: driver not bound with PSP device 47*c04cf9e1SMario Limonciello * -EACCES: request isn't authorized 48*c04cf9e1SMario Limonciello * -EINVAL: invalid parameter 49*c04cf9e1SMario Limonciello * -ETIMEDOUT: request timed out 50*c04cf9e1SMario Limonciello * -EAGAIN: invalid request for state machine 51*c04cf9e1SMario Limonciello * -ENOENT: not implemented 52*c04cf9e1SMario Limonciello * -ENFILE: overflow 53*c04cf9e1SMario Limonciello * -EPERM: invalid signature 54*c04cf9e1SMario Limonciello * -EIO: unknown error 55*c04cf9e1SMario Limonciello */ 56*c04cf9e1SMario Limonciello #define DBC_IOC_TYPE 'D' 57*c04cf9e1SMario Limonciello 58*c04cf9e1SMario Limonciello /** 59*c04cf9e1SMario Limonciello * DBCIOCNONCE - Fetch a nonce from the PSP for authenticating commands. 60*c04cf9e1SMario Limonciello * If a nonce is fetched without authentication it can only 61*c04cf9e1SMario Limonciello * be utilized for one command. 62*c04cf9e1SMario Limonciello * If a nonce is fetched with authentication it can be used 63*c04cf9e1SMario Limonciello * for multiple requests. 64*c04cf9e1SMario Limonciello */ 65*c04cf9e1SMario Limonciello #define DBCIOCNONCE _IOWR(DBC_IOC_TYPE, 0x1, struct dbc_user_nonce) 66*c04cf9e1SMario Limonciello 67*c04cf9e1SMario Limonciello #endif /* __PSP_DBC_USER_H__ */ 68