blob: bf6d3bad333754b9a6c25cd5d13907328d514cab (
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
|
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/usr/diag/attn/common/attnsvc_common.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2014 */
/* [+] 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 */
#ifndef __ATTN_ATTNSVCCOMMON_H
#define __ATTN_ATTNSVCCOMMON_H
/**
* @file attnsvc_common.H
*
* @brief HBATTN common service class definition.
*/
#include "common/attnfwd.H"
#include "common/attnlist.H"
namespace ATTN
{
/**
* @brief Service Host attention handler background service class definition.
*/
class ServiceCommon
{
public:
/**
* @brief ConfigureMode
*
* Up or down for parameter for configure methods.
*/
enum ConfigureMode
{
UP, DOWN,
};
/**
* @brief ctor
*/
ServiceCommon();
/**
* @brief dtor
*/
~ServiceCommon();
/**
* @brief processAttentions process interrupt task wakeup
*
* call prd to analyze attentions
*
* @param[i_procs] procs to check for attentions behind
*
* @post attentions analyzed by prd. attentions cleared by prd unmasked
*/
void processAttentions(const TARGETING::TargetHandleList & i_procs);
/**
* @brief handles attentions on a proc
*
* call prd to analyze attentions if attentions exist
*
* @param[i_proc] proc to check for attentions behind
*
* @post attentions analyzed by prd.
*
* @retval[0] No error
* @retval[!0] Unexpected error
*/
errlHndl_t handleAttentions(const TARGETING::TargetHandle_t i_proc);
protected:
/**
* @brief processAttnPreAck pre EOI interrupt service message
* processing
*
* Perform the interrupt service message processing steps that must
* be done before EOI can be sent by the interrupt service.
*
* @post interrupt service message ready to be acknowledged
*
* @param[in] i_proc processor target handle
*/
void processAttnPreAck(const TARGETING::TargetHandle_t i_proc);
/**
* @brief configureInterrupts enable or
* disable interrupts used by the ServiceCommon, on all
* functioning processors.
*
* @post ServiceCommon (un)hooked to/from interrupt ServiceCommon
* for local error and host interrupts.
* @post Local error and host priority set(cleared).
* @post Local error and host interrupts (un)masked at GFIR macro.
*
* @param[in] i_mode Up or down
*
* @retval[0] No error
* @retval[!0] Unexpected error
*/
errlHndl_t configureInterrupts(ConfigureMode i_mode);
/**
* @brief iv_mutex pendingAttentions protection
*/
mutex_t iv_mutex;
private:
/**
* @brief copy disabled
*/
ServiceCommon(const ServiceCommon &);
/**
* @brief assignment disabled
*/
ServiceCommon &operator=(const ServiceCommon &);
/**
* @brief AttnSvcTest Provide access to unit test.
*/
friend class ::AttnSvcTest;
friend class ::AttnProcTest;
friend class ::AttnMemTest;
};
}
#endif
|