pinebuds/services/nv_section/log_section/crash_dump_section.h
2022-08-15 17:20:27 +08:00

152 lines
4.7 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __CRASH_DUMP_SECTION_H__
#define __CRASH_DUMP_SECTION_H__
#ifdef __cplusplus
extern "C" {
#endif
#if 0
#include "plat_types.h"
#define CRASH_DUMP_MAGIC_CODE 0x504D5544
#define CRASH_DUMP_ASSERT_CODE 0xEB6D0924
#define CRASH_DUMP_EXCEPTION_CODE 0xC78BA332
/*
* Total number of core registers stored
*/
#define CRASH_DUMP_REGISTERS_NUM 17
#define CRASH_DUMP_REGISTERS_NUM_BYTES ((CRASH_DUMP_REGISTERS_NUM)*4)
/*
* Number bytes to store from stack
* - this is total, not per PSP/MSP
*/
#define CRASH_DUMP_STACK_NUM_BYTES 384
#define CRASH_DUMP_FRAME_SIZE (1024*16)
typedef struct {
uint32_t magicCode; // must be CRASH_DUMP_MAGIC_CODE
int32_t seqnum; // increased by 1 per crash
uint32_t partnum; // maximum crash log count saved in the flash
uint32_t reserved;
uint32_t bufpos; // valid content in the following buf array
uint32_t liteDumpOffset;
uint32_t crashCode;
} CRASH_OUTPUT_BUF_HEADER_T;
/**
* This structure MUST be a total size
* of 0x4000
*/
struct CRASH_OUTPUT_BUF_T {
CRASH_OUTPUT_BUF_HEADER_T hdr;
uint8_t buf[CRASH_DUMP_FRAME_SIZE - sizeof(CRASH_OUTPUT_BUF_HEADER_T)];
};
/** Tell whether the system reboots because of a fresh assert or hardfault. */
bool crashdump_is_crash_happened(void);
void crashdump_set_existing_flag(uint8_t isExisting);
/**
* Tell the flash offset of the latest crash dump
* -1 means there is no crash dump in the flash.
* Other values are the valid flash offset of the latest happend crash dump log.
*/
int32_t crashdump_get_latest_flash_offset(void);
/** Tell whether there is any crash dump logs in the flash. */
bool crashdump_is_crash_dump_existing(void);
void crashdump_set_crash_happened_flag(uint8_t isHappened);
void crashdump_dumptoflash(void);
void crashdump_init_section_info(void);
#else
#include "hal_trace.h"
#define CRASH_DUMP_PREFIX "__CRASH_DUMP:"
#define CRASH_DUMP_TRACE(num,fmt, ...) TRACE(num,fmt, ##__VA_ARGS__)
#define CRASH_LOG_ALIGN(x,a) (uint32_t)(((x + a - 1)/a) * a)
#define CRASH_DUMP_SECTOR_SIZE 0x1000
#define CRASH_DUMP_BUFFER_LEN (CRASH_DUMP_SECTOR_SIZE*2)
#define CRASH_DUMP_NORFALSH_BUFFER_LEN (CRASH_DUMP_BUFFER_LEN)
#define DATA_BUFFER_STATE_FREE 0
#define DATA_BUFFER_STATE_WRITTING 0x1
#define DATA_BUFFER_STATE_WRITTEN 0x2
#define CRASH_DUMP_MAGIC_CODE 0x504D5544
#define CRASH_DUMP_VERSION 0x00010001
#define CRASH_DUMP_ASSERT_CODE 0xEB6D0924
#define CRASH_DUMP_EXCEPTION_CODE 0xC78BA332
typedef struct
{
uint32_t magic;
uint32_t version;
uint32_t seqnum;
uint8_t reseved[4];
}CRASH_DUMP_HEADER_T;
#define CRASH_DUMP_FRAME_SIZE (CRASH_DUMP_BUFFER_LEN)
typedef struct{
uint32_t offset;
uint8_t *buffer;
}CRASH_DATA_BUFFER;
void crash_dump_init(void);
void crash_dump_init_buffer(void);
int32_t crash_dump_read(uint32_t addr,uint8_t* ptr,uint32_t len);
int32_t crash_dump_write(uint32_t addr,uint8_t* ptr,uint32_t len);
void crash_dump_notify_handler(enum HAL_TRACE_STATE_T state);
void crash_dump_output_handler(const unsigned char *buf, unsigned int buf_len);
void crash_dump_fault_handler(const unsigned char *buf, unsigned int buf_len);
void crash_dump_set_flag(uint8_t is_happend);
void crash_dump_register(HAL_TRACE_APP_NOTIFY_T notify_cb,HAL_TRACE_APP_OUTPUT_T crash_output_cb,HAL_TRACE_APP_OUTPUT_T crash_fault_cb);
CRASH_DATA_BUFFER* crash_dump_get_buffer(void);
uint32_t crash_dump_get_type(void);
// --gsound crash dump -------------
typedef struct {
uint32_t magicCode; // must be CRASH_DUMP_MAGIC_CODE
uint32_t seqnum; // increased by 1 per crash
uint32_t partnum; // maximum crash log count saved in the flash
uint32_t reserved;
uint32_t bufpos; // valid content in the following buf array
uint32_t liteDumpOffset;
uint32_t crashCode;
} CRASH_OUTPUT_BUF_HEADER_T;
/**
* This structure MUST be a total size
* of 0x1000
*/
struct CRASH_OUTPUT_BUF_T {
CRASH_OUTPUT_BUF_HEADER_T hdr;
uint8_t buf[CRASH_DUMP_FRAME_SIZE - sizeof(CRASH_OUTPUT_BUF_HEADER_T)];
};
// --gsound crash dump end -------------
#endif
#ifdef __cplusplus
}
#endif
#endif