KT24-1110_65E-HA-651B/include_lib/system/device/vm.h

156 lines
5.5 KiB
C
Raw Normal View History

2024-11-10 10:44:17 +00:00
#ifndef _VM_H_
#define _VM_H_
#include "ioctl.h"
#include "device/device.h"
#define IOCTL_SET_VM_INFO _IOW('V', 1, 1)
#define IOCTL_GET_VM_INFO _IOW('V', 2, 1)
// enum {
// #<{(|
// * 用户自定义配置项 (0-64)
// |)}>#
// #<{(| ... |)}>#
// }
// VM define and api
typedef u16 vm_hdl;
struct vm_table {
u16 index;
u16 value_byte;
int value; //cache value which value_byte <= 4
};
typedef enum _vm_err {
VM_ERR_NONE = 0,
VM_INDEX_ERR = -0x100,
VM_INDEX_EXIST, //0xFF
VM_DATA_LEN_ERR, //0xFE
VM_READ_NO_INDEX, //0xFD
VM_READ_DATA_ERR, //0xFC
VM_WRITE_OVERFLOW, //0xFB
VM_NOT_INIT,
VM_INIT_ALREADY,
VM_DEFRAG_ERR,
VM_ERR_INIT,
VM_ERR_PROTECT
} VM_ERR;
enum {
LOAD_SPI_CODE_NO_NEED,
LOAD_SPI_CODE2CACHE,
LOAD_SPI_REGION_CODE2CACHE,
};
// vm api
/*----------------------------------------------------------------------------*/
/**@brief VM区域擦除函数
@param void
@note VM_ERR VM_ERR vm错误码
*/
/*----------------------------------------------------------------------------*/
VM_ERR vm_eraser(void);
/* --------------------------------------------------------------------------*/
/**
* @brief VM初始化函数VM操作之前都必须先初始化
*
* @param [in] dev_hdl NULL
* @param [in] vm_addr VM起始地址
* @param [in] vm_len VM总大小空间
* @param [in] vm_mode sector和按page写入
*
* @return VM_ERR vm错误码
*/
/* --------------------------------------------------------------------------*/
VM_ERR vm_init(void *dev_hdl, u32 vm_addr, u32 vm_len, u8 vm_mode);
/* --------------------------------------------------------------------------*/
/**
* @brief vm区域已经使用了多少
*
* @return (bit)
*/
/* --------------------------------------------------------------------------*/
u32 vm_get_usage(void);
/* --------------------------------------------------------------------------*/
/**
* @brief vm区域已经使用了多少main函数的board_early_init函数的前面
*
* @return (0-99)
*/
/* --------------------------------------------------------------------------*/
u8 vm_get_usage_percent(void);
/* --------------------------------------------------------------------------*/
/**
* @brief vm模块触发区域整理的警告线高度vm_init初始化之前调用vm_init会默认设置为vm_warning_line_num默认参数80%
*
* @param [in] vm_warning_line_num 线(0-100)
*/
/* --------------------------------------------------------------------------*/
void vm_set_warning_line(u8 vm_warning_line_num);
/*----------------------------------------------------------------------------*/
/**@brief VM_WARNING_LINE检测函数
@param void使
@return FALSE线TRUE
@note VM前检测
*/
/*----------------------------------------------------------------------------*/
bool vm_warning_line_check(void);
/*----------------------------------------------------------------------------*/
/**@brief VM检测是否到达百分比警告线到达则整理VM区域不到达则清除一个flash最小操作单元
@param level0VM是否需要整理vm未使用区域的操作 1VM区域
@return NON
@note vm_write写入的累计内容到达百分比警告线时会触发vm整理区域机制flashvm写操作会擦除一次最小flash操作单元vm已经使用区域大小到达警告线的时候可以完全擦除vm的未使用区域app应该在实现流程不忙碌的时候调用vm_check_all(0)VM是否需要整理
*/
/*----------------------------------------------------------------------------*/
void vm_check_all(u8 level); //level : default 0
/* --------------------------------------------------------------------------*/
/**
* @brief VM不检测是否到达警告线使flash空间并整理VM区域
*
* @return VM_ERR vm错误码
*/
/* --------------------------------------------------------------------------*/
VM_ERR vm_defrag_used(void);
/* --------------------------------------------------------------------------*/
/**
* @brief VM不检测是否到达警告线使flash空间并整理VM区域vm使用的flash区域使vm_defrag_used
*
* @return VM_ERR vm错误码
*/
/* --------------------------------------------------------------------------*/
VM_ERR vm_defrag_all(void);
/*----------------------------------------------------------------------------*/
/**@brief VM模块重置擦除掉vm占用的flash的内容耗时较长。
@return VM_ERR vm错误码
@note VM前检测
*/
/*----------------------------------------------------------------------------*/
VM_ERR vm_reset(void);
u8 get_vm_statu(void);
// io api
//s32 vm_read(vm_hdl hdl, void *data_buf, u16 len);
//s32 vm_write(vm_hdl hdl, const void *data_buf, u16 len);
void spi_port_hd(u8 level);
bool sfc_erase_zone(u32 addr, u32 len);
void vm_api_write_mult(u16 start_id, u16 end_id, void *buf, u16 len, u32 delay);
int vm_api_read_mult(u16 start_id, u16 end_id, void *buf, u16 len);
#endif //_VM_H_