blob: 6f7791f6e0b92df115db166fed80078af66271fc [file] [log] [blame]
Tao Zeng20d955f2023-08-24 10:37:38 +08001#ifndef _AMFC_H_
2#define _AMFC_H_
3
4
5#define ALGORITHM_ZSTD 1
6#define ALGORITHM_LZ4 2
7#define ALGORITHM_LZ4HC 3
8#define ALGORITHM_GZIP 4
9#define ALGORITHM_ZLIB 5
10#define ALGORITHM_DEFLAT 6
11
12#define CMD_COMPRESS 1
13#define CMD_DECOMPRESS 0
14
15#define STATUS_IDLE 0
16#define STATUS_BUSY 1
17#define STATUS_MASK 1
18
19#define IRQ_MASK (0x03 << 24)
20#define IRQ_DONE (0x01 << 24)
21#define IRQ_ERR (0x02 << 24)
22
23#ifndef PAGE_SIZE
24#define PAGE_SIZE 4096
25#endif
26#define PAGE_MASK (~(PAGE_SIZE - 1))
27#define PAGE_SHIFT 12
28
29#define ADDR_SHIFT 5
30
31#define ZSTD_TAG 0xfd2fb528
32
33/* error code */
34#define AMFC_CMD0_ERR_SRC_SIZE0 0x01
35#define AMFC_CMD0_ERR_DST_SIZE0 0x02
36#define AMFC_CMD0_ERR_OWNER0 0x03
37#define AMFC_CMD0_ERR_ALG 0x04
38
39#define AMFC_CMD1_ERR_SRC_SIZE0 0x09
40#define AMFC_CMD1_ERR_DST_SIZE0 0x0a
41#define AMFC_CMD1_ERR_OWNER0 0x0b
42#define AMFC_CMD1_ERR_ALG 0x0c
43
44#define AMFC_ENC_SRC_PAGE_ERR 0x40
45#define AMFC_ENC_DST_PAGE_ERR 0x41
46#define AMFC_ENC_DST_SIZE_OVF 0x42
47
48#define AMFC_DEC_SRC_PAGE_ERR 0x80
49#define AMFC_DEC_DST_PAGE_ERR 0x81
50#define AMFC_DEC_DST_SIZE_OVF 0x82
51
52#define ZSTD_DERR_MAIN_UNDFLOW 0x87
53#define ZSTD_DERR_TRI_TYPE_UNDFLOW 0x88
54#define ZSTD_DERR_FSEH_LL_NCNT_UNDERFLOW 0x89
55#define ZSTD_DERR_FSEH_OF_NCNT_UNDERFLOW 0x8a
56#define ZSTD_DERR_FSEH_ML_NCNT_UNDERFLOW 0x8b
57#define ZSTD_DERR_FSEH_HUFH_NCNT_UNDERFLOW 0x8c
58#define ZSTD_DERR_FSEB_TRI_UNDFLOW 0x8d
59#define ZSTD_DERR_HUFB0_UNDFLOW 0x8e
60#define ZSTD_DERR_HUFB1_UNDFLOW 0x8f
61#define ZSTD_DERR_HUFB2_UNDFLOW 0x90
62#define ZSTD_DERR_HUFB3_UNDFLOW 0x91
63#define ZSTD_DERR_FRMH_NOT_FOUND 0x92
64#define ZSTD_DERR_FRMH_MAGIC_ID 0x93
65#define ZSTD_DERR_FRMH_DICT_ID 0x94
66#define ZSTD_DERR_BLKH_TYPE 0x95
67#define ZSTD_DERR_FSEH_TLOG_HUFH 0x96
68#define ZSTD_DERR_FSEH_TLOG_ML 0x97
69#define ZSTD_DERR_FSEH_TLOG_OF 0x98
70#define ZSTD_DERR_FSEH_TLOG_LL 0x99
71#define ZSTD_DERR_FSEH_MAX_HUFH 0x9a
72#define ZSTD_DERR_FSEH_MAX_ML 0x9b
73#define ZSTD_DERR_FSEH_MAX_OF 0x9c
74#define ZSTD_DERR_FSEH_MAX_LL 0x9d
75#define ZSTD_DERR_FSEB_HUF_MAXCNT 0x9e
76#define ZSTD_DERR_HUFB0_CODE 0x9f
77#define ZSTD_DERR_HUFB1_CODE 0xa0
78#define ZSTD_DERR_HUFB2_CODE 0xa1
79#define ZSTD_DERR_HUFB3_CODE 0xa2
80#define ZSTD_DERR_FSEB_OF_BIG 0xa3
81#define ZSTD_DERR_FSEB_OF_OOB 0xa4
82
83#define AMFC_ERROR_MASK (0xff << 8)
84
85struct amfc_cmd_list {
86 unsigned int src_addr;
87 unsigned int dst_addr;
88 unsigned int link_addr;
89 unsigned int src_size;
90 unsigned int dst_size;
91 union {
92 unsigned int control;
93 struct {
94 unsigned irq_mask : 8;
95 unsigned algorithm : 4;
96 unsigned rsved : 12;
97 unsigned end : 1;
98 unsigned dst_scatter : 1;
99 unsigned src_scatter : 1;
100 unsigned link_mode : 1;
101 unsigned interrupt : 1;
102 unsigned ratio_check : 1;
103 unsigned compress : 1;
104 unsigned owner : 1;
105 };
106 };
107 unsigned int status;
108 unsigned int result_size;
109};
110
111int amfc_init(void);
112int amfc_decompress(void *src, void *dst, ssize_t src_size, ssize_t dst_size);
113
114#endif