blob: 6f7791f6e0b92df115db166fed80078af66271fc [file] [log] [blame] [edit]
#ifndef _AMFC_H_
#define _AMFC_H_
#define ALGORITHM_ZSTD 1
#define ALGORITHM_LZ4 2
#define ALGORITHM_LZ4HC 3
#define ALGORITHM_GZIP 4
#define ALGORITHM_ZLIB 5
#define ALGORITHM_DEFLAT 6
#define CMD_COMPRESS 1
#define CMD_DECOMPRESS 0
#define STATUS_IDLE 0
#define STATUS_BUSY 1
#define STATUS_MASK 1
#define IRQ_MASK (0x03 << 24)
#define IRQ_DONE (0x01 << 24)
#define IRQ_ERR (0x02 << 24)
#ifndef PAGE_SIZE
#define PAGE_SIZE 4096
#endif
#define PAGE_MASK (~(PAGE_SIZE - 1))
#define PAGE_SHIFT 12
#define ADDR_SHIFT 5
#define ZSTD_TAG 0xfd2fb528
/* error code */
#define AMFC_CMD0_ERR_SRC_SIZE0 0x01
#define AMFC_CMD0_ERR_DST_SIZE0 0x02
#define AMFC_CMD0_ERR_OWNER0 0x03
#define AMFC_CMD0_ERR_ALG 0x04
#define AMFC_CMD1_ERR_SRC_SIZE0 0x09
#define AMFC_CMD1_ERR_DST_SIZE0 0x0a
#define AMFC_CMD1_ERR_OWNER0 0x0b
#define AMFC_CMD1_ERR_ALG 0x0c
#define AMFC_ENC_SRC_PAGE_ERR 0x40
#define AMFC_ENC_DST_PAGE_ERR 0x41
#define AMFC_ENC_DST_SIZE_OVF 0x42
#define AMFC_DEC_SRC_PAGE_ERR 0x80
#define AMFC_DEC_DST_PAGE_ERR 0x81
#define AMFC_DEC_DST_SIZE_OVF 0x82
#define ZSTD_DERR_MAIN_UNDFLOW 0x87
#define ZSTD_DERR_TRI_TYPE_UNDFLOW 0x88
#define ZSTD_DERR_FSEH_LL_NCNT_UNDERFLOW 0x89
#define ZSTD_DERR_FSEH_OF_NCNT_UNDERFLOW 0x8a
#define ZSTD_DERR_FSEH_ML_NCNT_UNDERFLOW 0x8b
#define ZSTD_DERR_FSEH_HUFH_NCNT_UNDERFLOW 0x8c
#define ZSTD_DERR_FSEB_TRI_UNDFLOW 0x8d
#define ZSTD_DERR_HUFB0_UNDFLOW 0x8e
#define ZSTD_DERR_HUFB1_UNDFLOW 0x8f
#define ZSTD_DERR_HUFB2_UNDFLOW 0x90
#define ZSTD_DERR_HUFB3_UNDFLOW 0x91
#define ZSTD_DERR_FRMH_NOT_FOUND 0x92
#define ZSTD_DERR_FRMH_MAGIC_ID 0x93
#define ZSTD_DERR_FRMH_DICT_ID 0x94
#define ZSTD_DERR_BLKH_TYPE 0x95
#define ZSTD_DERR_FSEH_TLOG_HUFH 0x96
#define ZSTD_DERR_FSEH_TLOG_ML 0x97
#define ZSTD_DERR_FSEH_TLOG_OF 0x98
#define ZSTD_DERR_FSEH_TLOG_LL 0x99
#define ZSTD_DERR_FSEH_MAX_HUFH 0x9a
#define ZSTD_DERR_FSEH_MAX_ML 0x9b
#define ZSTD_DERR_FSEH_MAX_OF 0x9c
#define ZSTD_DERR_FSEH_MAX_LL 0x9d
#define ZSTD_DERR_FSEB_HUF_MAXCNT 0x9e
#define ZSTD_DERR_HUFB0_CODE 0x9f
#define ZSTD_DERR_HUFB1_CODE 0xa0
#define ZSTD_DERR_HUFB2_CODE 0xa1
#define ZSTD_DERR_HUFB3_CODE 0xa2
#define ZSTD_DERR_FSEB_OF_BIG 0xa3
#define ZSTD_DERR_FSEB_OF_OOB 0xa4
#define AMFC_ERROR_MASK (0xff << 8)
struct amfc_cmd_list {
unsigned int src_addr;
unsigned int dst_addr;
unsigned int link_addr;
unsigned int src_size;
unsigned int dst_size;
union {
unsigned int control;
struct {
unsigned irq_mask : 8;
unsigned algorithm : 4;
unsigned rsved : 12;
unsigned end : 1;
unsigned dst_scatter : 1;
unsigned src_scatter : 1;
unsigned link_mode : 1;
unsigned interrupt : 1;
unsigned ratio_check : 1;
unsigned compress : 1;
unsigned owner : 1;
};
};
unsigned int status;
unsigned int result_size;
};
int amfc_init(void);
int amfc_decompress(void *src, void *dst, ssize_t src_size, ssize_t dst_size);
#endif