Files
2026-08-24 10:03:24 +08:00

154 lines
4.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2018 Amlogic, Inc. All rights reserved.
*/
#ifndef __RAM_COMPRESS_H__
#define __RAM_COMPRESS_H__
#define COMPRESS_TAG_SIZE 16
#define COMPRESS_TAG_BL3Z "AML_RAMDUMPBL3Z"
#define COMPRESS_TAG_HEAD "AML_RAMDUMPHEAD"
#define COMPRESS_TAG_TAIL "AML_RAMDUMPTAIL"
/* compress unit size */
#define SZ_1M (1024 * 1024)
#define SELF_COMPRESS_THRESHOLD (4 * SZ_1M)
#define MAX_COMPRESS_SEGMENTS 8
#define ECOMPRESS_FAILE (-1L)
#define EINVALID_ARG (-2L)
#define ECOMPRESS_OVERFLOW (-3L)
#define NEED_RETRY (-32L)
#define MAX_RETRY 8
#define RETRY_STEP (2 * 1024 * 1024)
#include <stddef.h>
#include "platform_def.h"
#include "regs.h"
/********************************************************************************
* For reboot mode
********************************************************************************/
#define AMLOGIC_COLD_BOOT 0x00
#define AMLOGIC_NORMAL_BOOT 0x01
#define AMLOGIC_FACTORY_RESET_REBOOT 0x02
#define AMLOGIC_UPDATE_REBOOT 0x03
#define AMLOGIC_FASTBOOT_REBOOT 0x04
#define AMLOGIC_SUSPEND_REBOOT 0x05
#define AMLOGIC_HIBERNATE_REBOOT 0x06
#define AMLOGIC_BOOTLOADER_REBOOT 0x07
#define AMLOGIC_SHUTDOWN_REBOOT 0x08
#define AMLOGIC_RPMBP_REBOOT 0x09
#define AMLOGIC_CRASH_REBOOT 0x0b
#define AMLOGIC_KERNEL_PANIC 0x0c
#define AMLOGIC_WATCHDOG_REBOOT 0x0d
#define AMLOGIC_KERNEL_BOOTED BIT(15)
#define AMLOGIC_USERAM_MASK (0xffff7fff)
#define RAMDUMP_STICKY_DMA_MASK 0x7F
#define RAMDUMP_DDR_ALIGNED_64MB 0x04000000
#define RAMDUMP_DMA_ALIGNED_4MB 0x00400000
#define CONFIG_COMPRESS_SECTION 7
//typedef unsigned int u32;
//typedef unsigned short u16;
//typedef unsigned char u8;
/********************************************************************************
* For ramdump compress func
********************************************************************************/
enum {
RAM_COMPRESS_NORMAL = 1,
RAM_COMPRESS_COPY = 2,
RAM_COMPRESS_SET = 3 /* set ram content to same vale */
};
enum {
SECTION_ADDR_NORMAL = 1, /* 0GB ~ 3.5GB */
SECTION_ADDR_IS_REG = 2, /* 3.5GB ~ 4.0GB */
SECTION_ADDR_EXTEND = 3 /* 4.0GB ~ endGB */
};
struct ram_compress_section {
void *phy_addr;
unsigned long section_size;
unsigned int section_index : 8;
unsigned int compress_type : 8;
unsigned int set_value : 16;
unsigned int copy_size_limit;
void *copy_dest_addr;
};
struct ram_compress_full {
void *store_phy_addr;
unsigned long full_memsize;
unsigned int section_count;
struct ram_compress_section sections[MAX_COMPRESS_SEGMENTS];
};
struct ram_compress_work_info {
void (*progress_update)(unsigned long processed,
unsigned long total);
void (*hear_beat)(void);
void *temp_work_buffer;
void *temp_output_buffer;
unsigned int work_buffer_size;
unsigned int output_buffer_size;
unsigned int max_zip_section_size;
};
struct ram_compress_file_header {
char ram_compress_tag[COMPRESS_TAG_SIZE];
unsigned int section_count;
unsigned long file_size;
};
struct ram_compress_section_header {
unsigned long raw_size;
unsigned long zip_size;
unsigned int section_index : 8;
unsigned int compress_type : 8;
unsigned int set_value :16;
};
struct ram_compress_info {
unsigned long total_processed;
unsigned long total_zip_size;
unsigned long curr_processed;
unsigned long curr_zip_size;
unsigned char *output_fp;
struct ram_compress_work_info *rcwi;
};
struct rammd5_info_t {
char magic[16];
char stage[16];
unsigned int block_size;
unsigned int ddr_size;
unsigned int area1_start;
unsigned int area1_end;
unsigned int area2_start;
unsigned int area2_end;
};
void aml_ramdump_compress(struct ram_compress_full *rcf,
void *arg, unsigned long flag, unsigned long ctrl);
unsigned long ram_compress_all(struct ram_compress_full *rcf,
struct ram_compress_work_info *rcwi);
unsigned long ramdump_compress_all(struct ram_compress_full *rcf,
void *arg,
unsigned long flag,
unsigned long ctrl,
unsigned long size);
int check_reboot_reason(unsigned long *mem_size);
void save_ramp_dump(unsigned long addr, long size);
#endif /* __RAM_COMPRESS_H__ */