KT24-1110_65E-HA-651B/include_lib/system/device/vm.h
2024-11-10 18:44:17 +08:00

156 lines
5.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 level0查询VM是否需要整理并进行一次擦除vm未使用区域的操作 1整理全VM区域
@return NON
@note 当调用vm_write写入的累计内容到达百分比警告线时会触发vm整理区域机制会长时间操作flash因此出现系统卡顿现象。虽然vm写操作会擦除一次最小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_