1*46b1fe92SAndrew Turner /*- 2*46b1fe92SAndrew Turner * Copyright (c) 2013, 2014 Robin Randhawa 3*46b1fe92SAndrew Turner * All rights reserved. 4*46b1fe92SAndrew Turner * 5*46b1fe92SAndrew Turner * Redistribution and use in source and binary forms, with or without 6*46b1fe92SAndrew Turner * modification, are permitted provided that the following conditions 7*46b1fe92SAndrew Turner * are met: 8*46b1fe92SAndrew Turner * 1. Redistributions of source code must retain the above copyright 9*46b1fe92SAndrew Turner * notice, this list of conditions and the following disclaimer. 10*46b1fe92SAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 11*46b1fe92SAndrew Turner * notice, this list of conditions and the following disclaimer in the 12*46b1fe92SAndrew Turner * documentation and/or other materials provided with the distribution. 13*46b1fe92SAndrew Turner * 14*46b1fe92SAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*46b1fe92SAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*46b1fe92SAndrew Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*46b1fe92SAndrew Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*46b1fe92SAndrew Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*46b1fe92SAndrew Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*46b1fe92SAndrew Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*46b1fe92SAndrew Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*46b1fe92SAndrew Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*46b1fe92SAndrew Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*46b1fe92SAndrew Turner * SUCH DAMAGE. 25*46b1fe92SAndrew Turner * 26*46b1fe92SAndrew Turner * $FreeBSD$ 27*46b1fe92SAndrew Turner */ 28*46b1fe92SAndrew Turner 29*46b1fe92SAndrew Turner #ifndef _MACHINE_PSCI_H_ 30*46b1fe92SAndrew Turner #define _MACHINE_PSCI_H_ 31*46b1fe92SAndrew Turner 32*46b1fe92SAndrew Turner #include <sys/types.h> 33*46b1fe92SAndrew Turner 34*46b1fe92SAndrew Turner typedef int (*psci_initfn_t)(device_t dev); 35*46b1fe92SAndrew Turner typedef int (*psci_callfn_t)(register_t, register_t, register_t, register_t); 36*46b1fe92SAndrew Turner 37*46b1fe92SAndrew Turner extern int psci_present; 38*46b1fe92SAndrew Turner 39*46b1fe92SAndrew Turner void psci_system_reset(void); 40*46b1fe92SAndrew Turner int psci_cpu_on(unsigned long, unsigned long, unsigned long); 41*46b1fe92SAndrew Turner int psci_hvc_despatch(register_t, register_t, register_t, register_t); 42*46b1fe92SAndrew Turner int psci_smc_despatch(register_t, register_t, register_t, register_t); 43*46b1fe92SAndrew Turner 44*46b1fe92SAndrew Turner 45*46b1fe92SAndrew Turner /* 46*46b1fe92SAndrew Turner * PSCI return codes. 47*46b1fe92SAndrew Turner */ 48*46b1fe92SAndrew Turner #define PSCI_RETVAL_SUCCESS 0 49*46b1fe92SAndrew Turner #define PSCI_RETVAL_NOT_SUPPORTED -1 50*46b1fe92SAndrew Turner #define PSCI_RETVAL_INVALID_PARAMS -2 51*46b1fe92SAndrew Turner #define PSCI_RETVAL_DENIED -3 52*46b1fe92SAndrew Turner #define PSCI_RETVAL_ALREADY_ON -4 53*46b1fe92SAndrew Turner #define PSCI_RETVAL_ON_PENDING -5 54*46b1fe92SAndrew Turner #define PSCI_RETVAL_INTERNAL_FAILURE -6 55*46b1fe92SAndrew Turner #define PSCI_RETVAL_NOT_PRESENT -7 56*46b1fe92SAndrew Turner #define PSCI_RETVAL_DISABLED -8 57*46b1fe92SAndrew Turner 58*46b1fe92SAndrew Turner /* 59*46b1fe92SAndrew Turner * PSCI function codes (as per PSCI v0.2). 60*46b1fe92SAndrew Turner */ 61*46b1fe92SAndrew Turner #ifdef __aarch64__ 62*46b1fe92SAndrew Turner #define PSCI_FNID_VERSION 0x84000000 63*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_SUSPEND 0xc4000001 64*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_OFF 0x84000002 65*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_ON 0xc4000003 66*46b1fe92SAndrew Turner #define PSCI_FNID_AFFINITY_INFO 0xc4000004 67*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE 0xc4000005 68*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE_INFO_TYPE 0x84000006 69*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE_INFO_UP_CPU 0xc4000007 70*46b1fe92SAndrew Turner #define PSCI_FNID_SYSTEM_OFF 0x84000008 71*46b1fe92SAndrew Turner #define PSCI_FNID_SYSTEM_RESET 0x84000009 72*46b1fe92SAndrew Turner #else 73*46b1fe92SAndrew Turner #define PSCI_FNID_VERSION 0x84000000 74*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_SUSPEND 0x84000001 75*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_OFF 0x84000002 76*46b1fe92SAndrew Turner #define PSCI_FNID_CPU_ON 0x84000003 77*46b1fe92SAndrew Turner #define PSCI_FNID_AFFINITY_INFO 0x84000004 78*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE 0x84000005 79*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE_INFO_TYPE 0x84000006 80*46b1fe92SAndrew Turner #define PSCI_FNID_MIGRATE_INFO_UP_CPU 0x84000007 81*46b1fe92SAndrew Turner #define PSCI_FNID_SYSTEM_OFF 0x84000008 82*46b1fe92SAndrew Turner #define PSCI_FNID_SYSTEM_RESET 0x84000009 83*46b1fe92SAndrew Turner #endif 84*46b1fe92SAndrew Turner 85*46b1fe92SAndrew Turner #define PSCI_VER_MAJOR(v) (((v) >> 16) & 0xFF) 86*46b1fe92SAndrew Turner #define PSCI_VER_MINOR(v) ((v) & 0xFF) 87*46b1fe92SAndrew Turner 88*46b1fe92SAndrew Turner enum psci_fn { 89*46b1fe92SAndrew Turner PSCI_FN_VERSION, 90*46b1fe92SAndrew Turner PSCI_FN_CPU_SUSPEND, 91*46b1fe92SAndrew Turner PSCI_FN_CPU_OFF, 92*46b1fe92SAndrew Turner PSCI_FN_CPU_ON, 93*46b1fe92SAndrew Turner PSCI_FN_AFFINITY_INFO, 94*46b1fe92SAndrew Turner PSCI_FN_MIGRATE, 95*46b1fe92SAndrew Turner PSCI_FN_MIGRATE_INFO_TYPE, 96*46b1fe92SAndrew Turner PSCI_FN_MIGRATE_INFO_UP_CPU, 97*46b1fe92SAndrew Turner PSCI_FN_SYSTEM_OFF, 98*46b1fe92SAndrew Turner PSCI_FN_SYSTEM_RESET, 99*46b1fe92SAndrew Turner PSCI_FN_MAX 100*46b1fe92SAndrew Turner }; 101*46b1fe92SAndrew Turner 102*46b1fe92SAndrew Turner #endif /* _MACHINE_PSCI_H_ */ 103