/*
<:copyright-BRCM:2016:DUAL/GPL:standard

   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
   All Rights Reserved

Unless you and Broadcom execute a separate written software license
agreement governing use of this software, this software is licensed
to you under the terms of the GNU General Public License version 2
(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
with the following added to such license:

   As a special exception, the copyright holders of this software give
   you permission to link this software with independent modules, and
   to copy and distribute the resulting executable under terms of your
   choice, provided that you also meet, for each linked independent
   module, the terms and conditions of the license of that module.
   An independent module is a module which is not derived from this
   software.  The special exception does not apply to any modifications
   of the software.

Not withstanding the above, under no circumstances may you combine
this software in any way with any other Broadcom software provided
under a license other than the GPL, without Broadcom's express prior
written consent.

:>
 */

#ifndef _BCMOLT_SW_ERROR_H_
#define _BCMOLT_SW_ERROR_H_

#define BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN 64
#define BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN 64

typedef struct __PACKED_ATTR_START__
{
    uint64_t first_error_time;
    uint64_t last_error_time;
    uint32_t line_number;
    uint32_t error_counter;
    uint32_t instance;
    char file_name[BCMOLT_SW_ERROR_MAX_FILE_NAME_LEN];
    char task_name[BCMOLT_SW_ERROR_MAX_TASK_NAME_LEN];
} __PACKED_ATTR_END__ bcmos_sw_error;

typedef struct __PACKED_ATTR_START__
{
    uint32_t count;
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /**< Check whether C99 is supported */
    bcmos_sw_error error[];
#else
    bcmos_sw_error error[1];
#endif
} __PACKED_ATTR_END__ bcmos_sw_error_table;

#endif /* _BCMOLT_SW_ERROR_H_ */
