summaryrefslogtreecommitdiffstats
path: root/src/include/usr/fapi2/plat_hwp_invoker.H
blob: 0eace34bc9c0abe49ac4f80af088077c1e7ca750 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/include/usr/fapi2/plat_hwp_invoker.H $                    */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2015,2019                        */
/* [+] International Business Machines Corp.                              */
/*                                                                        */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/**
 *  @file plat_hwp_invoker.H
 *
 *  @brief Defines the HostBoot HWP invoker macro and a function to convert a
 *         fapi::ReturnCode to an error log
 */

///
/// @brief Defines the HostBoot FAPI2 HWP invoker macro and a function to
/// convert a fapi2::ReturnCode to an error log
///
/// Note that platform code must provide the code.
///

#ifndef PLATHWPINVOKER_H_
#define PLATHWPINVOKER_H_

#include <return_code.H>
#include <hw_access_def.H>
#include <plat_utils.H>
#include <xscom/piberror.H>

namespace fapi2 {
/*
 * @brief Resets all HWP thread_local vars
 */
void hwpResetGlobals(void);
}

/**
 * @brief HWP Invoker macro
 *
 * This macro is called by HostBoot PLAT code to invoke a HW Procedure (HWP).
 * The caller must create any necessary fapi::Targets and pass them as
 * parameters. This macro simply calls the FAPI HWP executor macro and converts
 * the returned fapi::Return code to a HostBoot error log
 *
 * ERRHNDL    - local errlHndl_t
 * FUNC       - HWP function name
 * _args_...  - Any additional arguments that the HWP requires
 */

#define FAPI_INVOKE_HWP(ERRHNDL, FUNC, _args_...) \
    {\
        fapi2::hwpResetGlobals(); \
        fapi2::ReturnCode invoke_rc; \
        FAPI_EXEC_HWP(invoke_rc, FUNC, ##_args_); \
        ERRHNDL = fapi2::rcToErrl(invoke_rc);\
        if( ERRHNDL ) {\
            ERRHNDL->collectTrace(FAPI_IMP_TRACE_NAME,256);\
            ERRHNDL->collectTrace(FAPI_TRACE_NAME,384);\
        }\
        fapi2::hwpResetGlobals(); \
    }

/**
 * @brief HWP Invoker macro that returns the fapi RC
 *
 * This macro is called by HostBoot PLAT code to invoke a HW Procedure (HWP).
 * The caller must create any necessary fapi::Targets and pass them as
 * parameters. This macro simply calls the FAPI HWP executor macro and converts
 * the returned fapi::Return code to a HostBoot error log
 *
 * ERRHNDL    - local errlHndl_t
 * _RC        - local fapi2::ReturnCode
 * FUNC       - HWP function name
 * _args_...  - Any additional arguments that the HWP requires
 */

#define FAPI_INVOKE_HWP_RC(ERRHNDL, _RC, FUNC, _args_...) \
    {\
        fapi2::hwpResetGlobals(); \
        FAPI_EXEC_HWP(_RC, FUNC, ##_args_); \
        ERRHNDL = fapi2::rcToErrl(_RC);\
        if( ERRHNDL ) {\
            ERRHNDL->collectTrace(FAPI_IMP_TRACE_NAME,256);\
            ERRHNDL->collectTrace(FAPI_TRACE_NAME,384);\
        }\
        fapi2::hwpResetGlobals(); \
    }

/**
 * @brief Pseudo-HWP Invoker macro
 *
 * This macro is called by HostBoot PLAT code to invoke a HW Procedure (HWP)
 * that does not return a ReturnCode
 *
 *  RETURN  - Local var to store the return value
 *  FUNC    - HWP function name
 * _args_...  - Any additional arguments that the HWP requires
 */
#define FAPI_CALL_HWP( RETURN, FUNC, _args_...) \
   {\
        fapi2::hwpResetGlobals(); \
        RETURN = FUNC(_args_); \
        fapi2::hwpResetGlobals(); \
   }

/**
 * @brief Pseudo-HWP Invoker macro
 *
 * This macro is called by HostBoot PLAT code to invoke a HW Procedure (HWP)
 * that does not return a ReturnCode
 *
 *  FUNC    - HWP function name
 * _args_...  - Any additional arguments that the HWP requires
 */
#define FAPI_CALL_HWP_NORETURN( FUNC, _args_...) \
   {\
        fapi2::hwpResetGlobals(); \
        FUNC(_args_); \
        fapi2::hwpResetGlobals(); \
   }


#endif // PLATHWPINVOKER_H_
OpenPOWER on IntegriCloud