summaryrefslogtreecommitdiffstats
path: root/src/include/usr/errl/errlud.H
blob: 31d5f98c115a5d77fe7789129f97f8acf03a3f51 (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
192
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/include/usr/errl/errlud.H $                               */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2011,2014              */
/*                                                                        */
/* 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 ERRLUD_H
#define ERRLUD_H
/**
 *  @file errlud.H
 *
 *  @brief Derive the ErrlUD (user defined) error log section from the
 *  more general ErrlSctn class.
*/


#include <errl/errlsctn.H>
#include <errl/errlsctnhdr.H>



namespace ERRORLOG
{



class ErrlUD : public ErrlSctn
{


    // ErrlEntry may access private elements of this class.  Data items that
    // you would expect to be part of ErrlEntry are actually instance data
    // in this class.
    friend class ErrlEntry;


private:


    /**
     *  @brief Constructor
     *
     *  Create a user data section with the given input data.
     *
     *  @param  i_data     Pointer to data
     *  @param  i_size     Length of data
     *  @param  i_cid      Component ID of the section
     *  @param  i_ver      Section version
     *  @param  i_sst      Section type
     *
     */
    ErrlUD(
        const void *i_data,
        uint64_t    i_size,
        compId_t    i_cid,
        uint8_t     i_ver,
        uint8_t     i_sst );



    /**
     *  @brief Destructor
     *
     *  Releases allocated resources
     *
     */
    virtual ~ErrlUD();


    /**
      * @brief   Disable copy constructor and assignment operator.
      */
    ErrlUD(const ErrlUD& i_right);
    ErrlUD& operator=(const ErrlUD& i_right);


    /**
     *  @brief Data export size. Amount of flat storage (in bytes) required to
     *  store the object.
     *
     *  @return size in bytes
     */
    uint64_t flatSize();


    /**
     *  @brief Data Export facility.
     *  Exports the object into the architecturally
     *  defined format for a user data section.
     *
     *  @param[in,out] io_pBuffer Pointer to buffer where flat data will go.
     *  @param[in]     i_cbBuffer Count of bytes in target buffer
     *
     */
    uint64_t flatten( void * io_pBuffer, const uint64_t i_cbBuffer );



    /**
     * @brief Import data
     * Imports data created with flatten.
     * @param[in] i_buf, pointer to the flattened data
     * @return number of bytes consumed
     */
    uint64_t unflatten( const void * i_buf );


    /**
     *  @brief Appends data to the section.
     *  Grows the section by the given amount
     *
     *  @param[in]  i_data  Source data
     *  @param[in]  i_size  Additional size
     *
     *  @return   Size of new data or else zero on error.
     *
     */
    uint64_t addData( const void *i_data,  uint64_t i_size );




    /**
     *  @brief Data size of the section
     *
     *  The distinction is made between data size
     *  and object flat size.  This method returns
     *  the size of the data only
     *
     *  @return Length
     *
     */
    uint64_t dataSize( void ) const;



    /**
     *  @brief Data access
     *
     *  Direct Access to the data of the object
     *  ( dangerous - use with caution )
     *
     *  @return Data pointer
     *
     */
    void * data( void ) const;




    uint8_t *   iv_pData;    // Data Pointer
    uint64_t    iv_Size;     // Data Length

};



/*****************************************************************************/
// Get data size
/*****************************************************************************/
inline uint64_t ErrlUD::dataSize( void ) const
{
    return iv_Size;
}


/*****************************************************************************/
// Data access pointer
/*****************************************************************************/
inline void * ErrlUD::data( void ) const
{
    return iv_pData;
}

} // namespace
#endif /* ERRLUD_H */
OpenPOWER on IntegriCloud