1*ee41e38dSRuslan Bukin /*- 2*ee41e38dSRuslan Bukin * SPDX-License-Identifier: BSD-2-Clause 3*ee41e38dSRuslan Bukin * 4*ee41e38dSRuslan Bukin * Copyright (c) 2019 Ruslan Bukin <br@bsdpad.com> 5*ee41e38dSRuslan Bukin * 6*ee41e38dSRuslan Bukin * This software was developed by SRI International and the University of 7*ee41e38dSRuslan Bukin * Cambridge Computer Laboratory (Department of Computer Science and 8*ee41e38dSRuslan Bukin * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the 9*ee41e38dSRuslan Bukin * DARPA SSITH research programme. 10*ee41e38dSRuslan Bukin * 11*ee41e38dSRuslan Bukin * Redistribution and use in source and binary forms, with or without 12*ee41e38dSRuslan Bukin * modification, are permitted provided that the following conditions 13*ee41e38dSRuslan Bukin * are met: 14*ee41e38dSRuslan Bukin * 1. Redistributions of source code must retain the above copyright 15*ee41e38dSRuslan Bukin * notice, this list of conditions and the following disclaimer. 16*ee41e38dSRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 17*ee41e38dSRuslan Bukin * notice, this list of conditions and the following disclaimer in the 18*ee41e38dSRuslan Bukin * documentation and/or other materials provided with the distribution. 19*ee41e38dSRuslan Bukin * 20*ee41e38dSRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21*ee41e38dSRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*ee41e38dSRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*ee41e38dSRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24*ee41e38dSRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*ee41e38dSRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*ee41e38dSRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*ee41e38dSRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*ee41e38dSRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*ee41e38dSRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*ee41e38dSRuslan Bukin * SUCH DAMAGE. 31*ee41e38dSRuslan Bukin */ 32*ee41e38dSRuslan Bukin 33*ee41e38dSRuslan Bukin #ifndef _ARM64_INTEL_INTEL_SMC_H_ 34*ee41e38dSRuslan Bukin #define _ARM64_INTEL_INTEL_SMC_H_ 35*ee41e38dSRuslan Bukin 36*ee41e38dSRuslan Bukin #include <dev/psci/smccc.h> 37*ee41e38dSRuslan Bukin 38*ee41e38dSRuslan Bukin /* 39*ee41e38dSRuslan Bukin * Intel SiP return values. 40*ee41e38dSRuslan Bukin */ 41*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_STATUS_OK 0 42*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY 1 43*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_REJECTED 2 44*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR 4 45*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_REG_ERROR 5 46*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_RSU_ERROR 7 47*ee41e38dSRuslan Bukin 48*ee41e38dSRuslan Bukin /* 49*ee41e38dSRuslan Bukin * Intel SiP calls. 50*ee41e38dSRuslan Bukin */ 51*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_STD_CALL(func) \ 52*ee41e38dSRuslan Bukin SMCCC_FUNC_ID(SMCCC_YIELDING_CALL, SMCCC_64BIT_CALL, \ 53*ee41e38dSRuslan Bukin SMCCC_SIP_SERVICE_CALLS, (func)) 54*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FAST_CALL(func) \ 55*ee41e38dSRuslan Bukin SMCCC_FUNC_ID(SMCCC_FAST_CALL, SMCCC_64BIT_CALL, \ 56*ee41e38dSRuslan Bukin SMCCC_SIP_SERVICE_CALLS, (func)) 57*ee41e38dSRuslan Bukin 58*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_START 1 59*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_WRITE 2 60*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE 3 61*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_ISDONE 4 62*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_GET_MEM 5 63*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK 6 64*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_REG_READ 7 65*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_REG_WRITE 8 66*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_REG_UPDATE 9 67*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_RSU_STATUS 11 68*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FUNCID_RSU_UPDATE 12 69*ee41e38dSRuslan Bukin 70*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_START \ 71*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_START) 72*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_WRITE \ 73*ee41e38dSRuslan Bukin INTEL_SIP_SMC_STD_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_WRITE) 74*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE \ 75*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE) 76*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE \ 77*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_ISDONE) 78*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM \ 79*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_GET_MEM) 80*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_FPGA_CONFIG_LOOPBACK \ 81*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK) 82*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_REG_READ \ 83*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_REG_READ) 84*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_REG_WRITE \ 85*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_REG_WRITE) 86*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_REG_UPDATE \ 87*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_REG_UPDATE) 88*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_RSU_STATUS \ 89*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_RSU_STATUS) 90*ee41e38dSRuslan Bukin #define INTEL_SIP_SMC_RSU_UPDATE \ 91*ee41e38dSRuslan Bukin INTEL_SIP_SMC_FAST_CALL(INTEL_SIP_SMC_FUNCID_RSU_UPDATE) 92*ee41e38dSRuslan Bukin 93*ee41e38dSRuslan Bukin typedef int (*intel_smc_callfn_t)(register_t, register_t, register_t, 94*ee41e38dSRuslan Bukin register_t, register_t, register_t, register_t, register_t, 95*ee41e38dSRuslan Bukin struct arm_smccc_res *res); 96*ee41e38dSRuslan Bukin 97*ee41e38dSRuslan Bukin #endif /* _ARM64_INTEL_INTEL_SMC_H_ */ 98