aboutsummaryrefslogtreecommitdiff
path: root/coverage-report/include/opal-internal.h.gcov.html
blob: f04b0fc577f937d84078358a569dd023c9e02b4c (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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang="en">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>LCOV - skiboot.info - include/opal-internal.h</title>
  <link rel="stylesheet" type="text/css" href="../gcov.css">
</head>

<body>

  <table width="100%" border=0 cellspacing=0 cellpadding=0>
    <tr><td class="title">LCOV - code coverage report</td></tr>
    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>

    <tr>
      <td width="100%">
        <table cellpadding=1 border=0 width="100%">
          <tr>
            <td width="10%" class="headerItem">Current view:</td>
            <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">include</a> - opal-internal.h<span style="font-size: 80%;"> (source / <a href="opal-internal.h.func-sort-c.html">functions</a>)</span></td>
            <td width="5%"></td>
            <td width="15%"></td>
            <td width="10%" class="headerCovTableHead">Hit</td>
            <td width="10%" class="headerCovTableHead">Total</td>
            <td width="15%" class="headerCovTableHead">Coverage</td>
          </tr>
          <tr>
            <td class="headerItem">Test:</td>
            <td class="headerValue">skiboot.info</td>
            <td></td>
            <td class="headerItem">Lines:</td>
            <td class="headerCovTableEntry">8</td>
            <td class="headerCovTableEntry">8</td>
            <td class="headerCovTableEntryHi">100.0 %</td>
          </tr>
          <tr>
            <td class="headerItem">Date:</td>
            <td class="headerValue">2023-03-28 15:19:00</td>
            <td></td>
            <td class="headerItem">Functions:</td>
            <td class="headerCovTableEntry">1</td>
            <td class="headerCovTableEntry">1</td>
            <td class="headerCovTableEntryHi">100.0 %</td>
          </tr>
          <tr>
            <td></td>
            <td></td>
            <td></td>
            <td class="headerItem">Branches:</td>
            <td class="headerCovTableEntry">0</td>
            <td class="headerCovTableEntry">0</td>
            <td class="headerCovTableEntryHi">-</td>
          </tr>
          <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
        </table>
      </td>
    </tr>

    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
  </table>

  <table cellpadding=0 cellspacing=0 border=0>
    <tr>
      <td><br></td>
    </tr>
    <tr>
      <td>
<pre class="sourceHeading">           Branch data     Line data    Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum">       1 </span>                :            : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later</a>
<a name="2"><span class="lineNum">       2 </span>                :            : /*</a>
<a name="3"><span class="lineNum">       3 </span>                :            :  * Internal header for OPAL API related things in skiboot</a>
<a name="4"><span class="lineNum">       4 </span>                :            :  *</a>
<a name="5"><span class="lineNum">       5 </span>                :            :  * Copyright 2013-2019 IBM Corp.</a>
<a name="6"><span class="lineNum">       6 </span>                :            :  */</a>
<a name="7"><span class="lineNum">       7 </span>                :            : </a>
<a name="8"><span class="lineNum">       8 </span>                :            : #ifndef __OPAL_INTERNAL_H</a>
<a name="9"><span class="lineNum">       9 </span>                :            : #define __OPAL_INTERNAL_H</a>
<a name="10"><span class="lineNum">      10 </span>                :            : </a>
<a name="11"><span class="lineNum">      11 </span>                :            : </a>
<a name="12"><span class="lineNum">      12 </span>                :            : #include &lt;skiboot.h&gt;</a>
<a name="13"><span class="lineNum">      13 </span>                :            : </a>
<a name="14"><span class="lineNum">      14 </span>                :            : /* An opal table entry */</a>
<a name="15"><span class="lineNum">      15 </span>                :            : struct opal_table_entry {</a>
<a name="16"><span class="lineNum">      16 </span>                :            :         void    *func;</a>
<a name="17"><span class="lineNum">      17 </span>                :            :         u32     token;</a>
<a name="18"><span class="lineNum">      18 </span>                :            :         u32     nargs;</a>
<a name="19"><span class="lineNum">      19 </span>                :            : };</a>
<a name="20"><span class="lineNum">      20 </span>                :            : </a>
<a name="21"><span class="lineNum">      21 </span>                :            : #ifdef __CHECKER__</a>
<a name="22"><span class="lineNum">      22 </span>                :            : #define __opal_func_test_arg(__func, __nargs) 0</a>
<a name="23"><span class="lineNum">      23 </span>                :            : #else</a>
<a name="24"><span class="lineNum">      24 </span>                :            : #define __opal_func_test_arg(__func, __nargs)                           \</a>
<a name="25"><span class="lineNum">      25 </span>                :            :         sizeof(__func( __test_args##__nargs ))</a>
<a name="26"><span class="lineNum">      26 </span>                :            : #endif</a>
<a name="27"><span class="lineNum">      27 </span>                :            : </a>
<a name="28"><span class="lineNum">      28 </span>                :            : #define opal_call(__tok, __func, __nargs)                               \</a>
<a name="29"><span class="lineNum">      29 </span>                :            : static struct opal_table_entry __e_##__func __used __section(&quot;.opal_table&quot;) = \</a>
<a name="30"><span class="lineNum">      30 </span>                :            : { .func = __func, .token = __tok,                                       \</a>
<a name="31"><span class="lineNum">      31 </span>                :            :   .nargs = __nargs + 0 * __opal_func_test_arg(__func, __nargs) }</a>
<a name="32"><span class="lineNum">      32 </span>                :            : </a>
<a name="33"><span class="lineNum">      33 </span>                :            : /* Make sure function takes args they claim.  Look away now... */</a>
<a name="34"><span class="lineNum">      34 </span>                :            : #define __test_args0</a>
<a name="35"><span class="lineNum">      35 </span>                :            : #define __test_args1 0</a>
<a name="36"><span class="lineNum">      36 </span>                :            : #define __test_args2 0,0</a>
<a name="37"><span class="lineNum">      37 </span>                :            : #define __test_args3 0,0,0</a>
<a name="38"><span class="lineNum">      38 </span>                :            : #define __test_args4 0,0,0,0</a>
<a name="39"><span class="lineNum">      39 </span>                :            : #define __test_args5 0,0,0,0,0</a>
<a name="40"><span class="lineNum">      40 </span>                :            : #define __test_args6 0,0,0,0,0,0</a>
<a name="41"><span class="lineNum">      41 </span>                :            : #define __test_args7 0,0,0,0,0,0,0</a>
<a name="42"><span class="lineNum">      42 </span>                :            : </a>
<a name="43"><span class="lineNum">      43 </span>                :            : extern struct opal_table_entry __opal_table_start[];</a>
<a name="44"><span class="lineNum">      44 </span>                :            : extern struct opal_table_entry __opal_table_end[];</a>
<a name="45"><span class="lineNum">      45 </span>                :            : </a>
<a name="46"><span class="lineNum">      46 </span>                :            : extern uint64_t opal_pending_events;</a>
<a name="47"><span class="lineNum">      47 </span>                :            : </a>
<a name="48"><span class="lineNum">      48 </span>                :            : extern struct dt_node *opal_node;</a>
<a name="49"><span class="lineNum">      49 </span>                :            : </a>
<a name="50"><span class="lineNum">      50 </span>                :            : extern void opal_table_init(void);</a>
<a name="51"><span class="lineNum">      51 </span>                :            : extern void opal_update_pending_evt(uint64_t evt_mask, uint64_t evt_values);</a>
<a name="52"><span class="lineNum">      52 </span>                :            : uint64_t opal_dynamic_event_alloc(void);</a>
<a name="53"><span class="lineNum">      53 </span>                :            : void opal_dynamic_event_free(uint64_t event);</a>
<a name="54"><span class="lineNum">      54 </span>                :            : extern void add_opal_node(void);</a>
<a name="55"><span class="lineNum">      55 </span>                :            : </a>
<a name="56"><span class="lineNum">      56 </span>                :            : #define opal_register(token, func, nargs)                               \</a>
<a name="57"><span class="lineNum">      57 </span>                :            :         __opal_register((token) + 0*__opal_func_test_arg(func, nargs),  \</a>
<a name="58"><span class="lineNum">      58 </span>                :            :                         (func), (nargs))</a>
<a name="59"><span class="lineNum">      59 </span>                :            : extern void __opal_register(uint64_t token, void *func, unsigned num_args);</a>
<a name="60"><span class="lineNum">      60 </span>                :            : </a>
<a name="61"><span class="lineNum">      61 </span>                :            : int64_t opal_quiesce(uint32_t shutdown_type, int32_t cpu);</a>
<a name="62"><span class="lineNum">      62 </span>                :            : </a>
<a name="63"><span class="lineNum">      63 </span>                :            : /* Warning: no locking at the moment, do at init time only</a>
<a name="64"><span class="lineNum">      64 </span>                :            :  *</a>
<a name="65"><span class="lineNum">      65 </span>                :            :  * XXX TODO: Add the big RCU-ish &quot;opal API lock&quot; to protect us here</a>
<a name="66"><span class="lineNum">      66 </span>                :            :  * which will also be used for other things such as runtime updates</a>
<a name="67"><span class="lineNum">      67 </span>                :            :  */</a>
<a name="68"><span class="lineNum">      68 </span>                :            : extern void opal_add_poller(void (*poller)(void *data), void *data);</a>
<a name="69"><span class="lineNum">      69 </span>                :            : extern void opal_del_poller(void (*poller)(void *data));</a>
<a name="70"><span class="lineNum">      70 </span>                :            : extern void opal_run_pollers(void);</a>
<a name="71"><span class="lineNum">      71 </span>                :            : </a>
<a name="72"><span class="lineNum">      72 </span>                :            : /*</a>
<a name="73"><span class="lineNum">      73 </span>                :            :  * Warning: no locking, only call that from the init processor</a>
<a name="74"><span class="lineNum">      74 </span>                :            :  */</a>
<a name="75"><span class="lineNum">      75 </span>                :            : extern void opal_add_host_sync_notifier(bool (*notify)(void *data), void *data);</a>
<a name="76"><span class="lineNum">      76 </span>                :            : extern void opal_del_host_sync_notifier(bool (*notify)(void *data), void *data);</a>
<a name="77"><span class="lineNum">      77 </span>                :            : </a>
<a name="78"><span class="lineNum">      78 </span>                :            : /*</a>
<a name="79"><span class="lineNum">      79 </span>                :            :  * Opal internal function prototype</a>
<a name="80"><span class="lineNum">      80 </span>                :            :  */</a>
<a name="81"><span class="lineNum">      81 </span>                :            : struct OpalHMIEvent;</a>
<a name="82"><span class="lineNum">      82 </span>                :            : extern int occ_msg_queue_occ_reset(void);</a>
<a name="83"><span class="lineNum">      83 </span>                :            : </a>
<a name="84"><span class="lineNum">      84 </span>                :            : extern unsigned long top_of_ram;</a>
<a name="85"><span class="lineNum">      85 </span>                :            : </a>
<a name="86"><span class="lineNum">      86 </span>                :            : /*</a>
<a name="87"><span class="lineNum">      87 </span>                :            :  * Returns true if the address is valid, false otherwise</a>
<a name="88"><span class="lineNum">      88 </span>                :            :  *</a>
<a name="89"><span class="lineNum">      89 </span>                :            :  * Checks if the passed address belongs to real address space</a>
<a name="90"><span class="lineNum">      90 </span>                :            :  * or 0xc000... kernel address space. It also checks that</a>
<a name="91"><span class="lineNum">      91 </span>                :            :  * addr &lt;= total physical memory. The magic value 60 comes</a>
<a name="92"><span class="lineNum">      92 </span>                :            :  * from 60 bit real address mentioned in section 5.7 of the</a>
<a name="93"><span class="lineNum">      93 </span>                :            :  * Power ISA (Book 3S).</a>
<a name="94"><span class="lineNum">      94 </span>                :            :  */</a>
<a name="95"><span class="lineNum">      95 </span>                :<span class="lineCov">         45 : static inline bool opal_addr_valid(const void *addr)</span></a>
<a name="96"><span class="lineNum">      96 </span>                :            : {</a>
<a name="97"><span class="lineNum">      97 </span>                :<span class="lineCov">         45 :         unsigned long val = (unsigned long)addr;</span></a>
<a name="98"><span class="lineNum">      98 </span>                :<span class="lineCov">         45 :         if ((val &gt;&gt; 60) != 0xc &amp;&amp; (val &gt;&gt; 60) != 0x0)</span></a>
<a name="99"><span class="lineNum">      99 </span>                :<span class="lineCov">          2 :                 return false;</span></a>
<a name="100"><span class="lineNum">     100 </span>                :<span class="lineCov">         43 :         val &amp;= ~0xf000000000000000UL;</span></a>
<a name="101"><span class="lineNum">     101 </span>                :<span class="lineCov">         43 :         if (val &gt; top_of_ram)</span></a>
<a name="102"><span class="lineNum">     102 </span>                :<span class="lineCov">          1 :                 return false;</span></a>
<a name="103"><span class="lineNum">     103 </span>                :<span class="lineCov">         42 :         return true;</span></a>
<a name="104"><span class="lineNum">     104 </span>                :            : }</a>
<a name="105"><span class="lineNum">     105 </span>                :            : </a>
<a name="106"><span class="lineNum">     106 </span>                :            : #endif /* __OPAL_INTERNAL_H */</a>
</pre>
      </td>
    </tr>
  </table>
  <br>

  <table width="100%" border=0 cellspacing=0 cellpadding=0>
    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
    <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
  </table>
  <br>

</body>
</html>