summaryrefslogtreecommitdiffstats
path: root/src/usr/scom/scomtrans.H
blob: aa8c4dd82115f1900b65619d4f17d210fc317d40 (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
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/usr/scom/scomtrans.H $                                    */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2012,2017                        */
/* [+] 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 __SCOMTRANS_H
#define __SCOMTRANS_H

#include <devicefw/driverif.H>
#include <p9_cu.H>
#include <centaur_scominfo.H>

/** @file  scomtrans.H
 *  @brief Provides the interfaces to perform a SCom
 */

namespace SCOM
{
/**
 * @brief Performs translates the scom, handles indirect and does scom
 * This function performs the translation and get the
 * correct target and continues the scom Operation.
 *
 * @param[in]   i_opType        Operation type, see DeviceFW::OperationType
 *                              in driverif.H
 * @param[in]   i_target        SCom target
 * @param[in/out] io_buffer     Read: pointer to output data storage
 *                              Write: pointer to data to be written
 * @param[in/out] io_buflen     Input: size of io_buffer (in bytes)
 *                              Output: Read: size of output data
 *                                      Write: size of data written
 * @param[in]   i_accessType    Select from DeviceFW::AccessType enum
 *                              (usrif.H)
 * @param[in]   i_args          This is an argument list for DD framework.
 *                              In this function, there's only one argument,
 *                              which is the SCom address value.
 */
errlHndl_t startScomProcess(DeviceFW::OperationType i_opType,
                  TARGETING::Target* i_target,
                  void* io_buffer,
                  size_t& io_buflen,
                  int64_t i_accessType,
                  va_list i_args);

/**
 * @brief This function translates a p9 scom address using
 *        the interface that the HW team provided.
 *
 * @param[in]      i_target      SCom target is passed in
 * @param[in]      i_type        Type of the target
 * @param[in|out]  io_addr       Address to be translated
 * @param[out]     o_needsWakeup Enable SW before scom
 * @param[in]      i_opMode      Defaults to 0 (Standard)
 * @return         errlHndl_t
 */
errlHndl_t p9_translation (TARGETING::Target * &i_target,
                           TARGETING::TYPE i_type,
                           uint64_t &io_addr,
                           bool & o_needsWakeup,
                           uint64_t i_opMode = 0);

/**
 * @brief This function translates a centaur scom address using
 *        the interface that the HW team provided.
 *
 * @param[in]      i_target      SCom target is passed in
 * @param[in]      i_type        Type of the target
 * @param[in|out]  io_addr       Address to be translated
 * @param[in]      i_opMode      Defaults to 0 (Standard)
 * @return         errlHndl_t
 */
errlHndl_t centaur_translation (TARGETING::Target * &i_target,
                                TARGETING::TYPE i_type,
                                uint64_t &io_addr,
                                uint64_t i_opMode = 0);

/**
 * @brief This function gets the p9 chip unit for this target type.
 *
 * @param[in]      i_type        Type of the target
 * @param[out]     o_chipUnit    Chip unit related to target type
 * @return         bool          True if there was an error trying to find
 *                               a chipUnit related to the inputed target type
 */
bool getChipUnitP9 (TARGETING::TYPE i_type,
                    p9ChipUnits_t &o_chipUnit);

/**
 * @brief This function gets the centaur chip unit for this target type.
 *
 * @param[in]      i_type        Type of the target
 * @param[out]     o_chipUnit    Chip unit related to target type
 * @return         bool          True if there was an error trying to find
 *                               a chipUnit related to the inputed target type
 */
bool getChipUnitCentaur (TARGETING::TYPE i_type,
                         centaurChipUnits_t &o_chipUnit);

/**
 * @brief Computes the chip/ddlevel value to be passed into translator
 *
 * @param[in]      i_target      SCom target is passed in
 * @return         uint32_t      Chip/ddlevel mode value for target,
 *                               see p9_scominfo.H for values
 */
uint32_t getChipLevel (TARGETING::Target* i_target);



}; // End namespace

#endif
OpenPOWER on IntegriCloud