xref: /f-stack/freebsd/mips/include/octeon_cop2.h (revision 22ce4aff)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2011, Oleksandr Tymoshenko <[email protected]>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice unmodified, this list of conditions, and the following
12  *    disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * $FreeBSD$
30  *
31  */
32 
33 #ifndef __OCTEON_COP2_H__
34 #define __OCTEON_COP2_H__
35 
36 /*
37  * COP2 registers of interest
38  */
39 #define	COP2_CRC_IV		0x201
40 #define	COP2_CRC_IV_SET		COP2_CRC_IV
41 #define	COP2_CRC_LENGTH		0x202
42 #define	COP2_CRC_LENGTH_SET	0x1202
43 #define	COP2_CRC_POLY		0x200
44 #define	COP2_CRC_POLY_SET	0x4200
45 #define	COP2_LLM_DAT0		0x402
46 #define	COP2_LLM_DAT0_SET	COP2_LLM_DAT0
47 #define	COP2_LLM_DAT1		0x40A
48 #define	COP2_LLM_DAT1_SET	COP2_LLM_DAT1
49 #define	COP2_3DES_IV		0x084
50 #define	COP2_3DES_IV_SET	COP2_3DES_IV
51 #define	COP2_3DES_KEY0		0x080
52 #define	COP2_3DES_KEY0_SET	COP2_3DES_KEY0
53 #define	COP2_3DES_KEY1		0x081
54 #define	COP2_3DES_KEY1_SET	COP2_3DES_KEY1
55 #define	COP2_3DES_KEY2		0x082
56 #define	COP2_3DES_KEY2_SET	COP2_3DES_KEY2
57 #define	COP2_3DES_RESULT	0x088
58 #define	COP2_3DES_RESULT_SET	0x098
59 #define	COP2_AES_INP0		0x111
60 #define	COP2_AES_INP0_SET	COP2_AES_INP0
61 #define	COP2_AES_IV0		0x102
62 #define	COP2_AES_IV0_SET	COP2_AES_IV0
63 #define	COP2_AES_IV1		0x103
64 #define	COP2_AES_IV1_SET	COP2_AES_IV1
65 #define	COP2_AES_KEY0		0x104
66 #define	COP2_AES_KEY0_SET	COP2_AES_KEY0
67 #define	COP2_AES_KEY1		0x105
68 #define	COP2_AES_KEY1_SET	COP2_AES_KEY1
69 #define	COP2_AES_KEY2		0x106
70 #define	COP2_AES_KEY2_SET	COP2_AES_KEY2
71 #define	COP2_AES_KEY3		0x107
72 #define	COP2_AES_KEY3_SET	COP2_AES_KEY3
73 #define	COP2_AES_KEYLEN		0x110
74 #define	COP2_AES_KEYLEN_SET	COP2_AES_KEYLEN
75 #define	COP2_AES_RESULT0	0x100
76 #define	COP2_AES_RESULT0_SET	COP2_AES_RESULT0
77 #define	COP2_AES_RESULT1	0x101
78 #define	COP2_AES_RESULT1_SET	COP2_AES_RESULT1
79 #define	COP2_HSH_DATW0		0x240
80 #define	COP2_HSH_DATW0_SET	COP2_HSH_DATW0
81 #define	COP2_HSH_DATW1		0x241
82 #define	COP2_HSH_DATW1_SET	COP2_HSH_DATW1
83 #define	COP2_HSH_DATW2		0x242
84 #define	COP2_HSH_DATW2_SET	COP2_HSH_DATW2
85 #define	COP2_HSH_DATW3		0x243
86 #define	COP2_HSH_DATW3_SET	COP2_HSH_DATW3
87 #define	COP2_HSH_DATW4		0x244
88 #define	COP2_HSH_DATW4_SET	COP2_HSH_DATW4
89 #define	COP2_HSH_DATW5		0x245
90 #define	COP2_HSH_DATW5_SET	COP2_HSH_DATW5
91 #define	COP2_HSH_DATW6		0x246
92 #define	COP2_HSH_DATW6_SET	COP2_HSH_DATW6
93 #define	COP2_HSH_DATW7		0x247
94 #define	COP2_HSH_DATW7_SET	COP2_HSH_DATW7
95 #define	COP2_HSH_DATW8		0x248
96 #define	COP2_HSH_DATW8_SET	COP2_HSH_DATW8
97 #define	COP2_HSH_DATW9		0x249
98 #define	COP2_HSH_DATW9_SET	COP2_HSH_DATW9
99 #define	COP2_HSH_DATW10		0x24A
100 #define	COP2_HSH_DATW10_SET	COP2_HSH_DATW10
101 #define	COP2_HSH_DATW11		0x24B
102 #define	COP2_HSH_DATW11_SET	COP2_HSH_DATW11
103 #define	COP2_HSH_DATW12		0x24C
104 #define	COP2_HSH_DATW12_SET	COP2_HSH_DATW12
105 #define	COP2_HSH_DATW13		0x24D
106 #define	COP2_HSH_DATW13_SET	COP2_HSH_DATW13
107 #define	COP2_HSH_DATW14		0x24E
108 #define	COP2_HSH_DATW14_SET	COP2_HSH_DATW14
109 #define	COP2_HSH_IVW0		0x250
110 #define	COP2_HSH_IVW0_SET	COP2_HSH_IVW0
111 #define	COP2_HSH_IVW1		0x251
112 #define	COP2_HSH_IVW1_SET	COP2_HSH_IVW1
113 #define	COP2_HSH_IVW2		0x252
114 #define	COP2_HSH_IVW2_SET	COP2_HSH_IVW2
115 #define	COP2_HSH_IVW3		0x253
116 #define	COP2_HSH_IVW3_SET	COP2_HSH_IVW3
117 #define	COP2_HSH_IVW4		0x254
118 #define	COP2_HSH_IVW4_SET	COP2_HSH_IVW4
119 #define	COP2_HSH_IVW5		0x255
120 #define	COP2_HSH_IVW5_SET	COP2_HSH_IVW5
121 #define	COP2_HSH_IVW6		0x256
122 #define	COP2_HSH_IVW6_SET	COP2_HSH_IVW6
123 #define	COP2_HSH_IVW7		0x257
124 #define	COP2_HSH_IVW7_SET	COP2_HSH_IVW7
125 #define	COP2_GFM_MULT0		0x258
126 #define	COP2_GFM_MULT0_SET	COP2_GFM_MULT0
127 #define	COP2_GFM_MULT1		0x259
128 #define	COP2_GFM_MULT1_SET	COP2_GFM_MULT1
129 #define	COP2_GFM_POLY		0x25E
130 #define	COP2_GFM_POLY_SET	COP2_GFM_POLY
131 #define	COP2_GFM_RESULT0	0x25A
132 #define	COP2_GFM_RESULT0_SET	COP2_GFM_RESULT0
133 #define	COP2_GFM_RESULT1	0x25B
134 #define	COP2_GFM_RESULT1_SET	COP2_GFM_RESULT1
135 #define	COP2_HSH_DATW0_PASS1	0x040
136 #define	COP2_HSH_DATW0_PASS1_SET	COP2_HSH_DATW0_PASS1
137 #define	COP2_HSH_DATW1_PASS1	0x041
138 #define	COP2_HSH_DATW1_PASS1_SET	COP2_HSH_DATW1_PASS1
139 #define	COP2_HSH_DATW2_PASS1	0x042
140 #define	COP2_HSH_DATW2_PASS1_SET	COP2_HSH_DATW2_PASS1
141 #define	COP2_HSH_DATW3_PASS1	0x043
142 #define	COP2_HSH_DATW3_PASS1_SET	COP2_HSH_DATW3_PASS1
143 #define	COP2_HSH_DATW4_PASS1	0x044
144 #define	COP2_HSH_DATW4_PASS1_SET	COP2_HSH_DATW4_PASS1
145 #define	COP2_HSH_DATW5_PASS1	0x045
146 #define	COP2_HSH_DATW5_PASS1_SET	COP2_HSH_DATW5_PASS1
147 #define	COP2_HSH_DATW6_PASS1	0x046
148 #define	COP2_HSH_DATW6_PASS1_SET	COP2_HSH_DATW6_PASS1
149 #define	COP2_HSH_IVW0_PASS1	0x048
150 #define	COP2_HSH_IVW0_PASS1_SET	COP2_HSH_IVW0_PASS1
151 #define	COP2_HSH_IVW1_PASS1	0x049
152 #define	COP2_HSH_IVW1_PASS1_SET	COP2_HSH_IVW1_PASS1
153 #define	COP2_HSH_IVW2_PASS1	0x04A
154 #define	COP2_HSH_IVW2_PASS1_SET	COP2_HSH_IVW2_PASS1
155 
156 #ifndef LOCORE
157 
158 struct octeon_cop2_state {
159 	/* 3DES */
160 	/* 0x0084 */
161 	unsigned long   _3des_iv;
162 	/* 0x0080..0x0082 */
163 	unsigned long   _3des_key[3];
164 	/* 0x0088, set: 0x0098 */
165 	unsigned long   _3des_result;
166 
167 	/* AES */
168 	/* 0x0111 */
169 	unsigned long   aes_inp0;
170 	/* 0x0102..0x0103 */
171 	unsigned long   aes_iv[2];
172 	/* 0x0104..0x0107 */
173 	unsigned long   aes_key[4];
174 	/* 0x0110 */
175 	unsigned long   aes_keylen;
176 	/* 0x0100..0x0101 */
177 	unsigned long   aes_result[2];
178 
179 	/* CRC */
180 	/*  0x0201 */
181 	unsigned long   crc_iv;
182 	/* 0x0202, set: 0x1202 */
183 	unsigned long   crc_length;
184 	/* 0x0200, set: 0x4200 */
185 	unsigned long   crc_poly;
186 
187 	/* Low-latency memory stuff */
188 	/* 0x0402, 0x040A */
189 	unsigned long   llm_dat[2];
190 
191 	/* SHA & MD5 */
192 	/* 0x0240..0x024E */
193 	unsigned long   hsh_datw[15];
194 	/* 0x0250..0x0257 */
195 	unsigned long   hsh_ivw[8];
196 
197 	/* GFM */
198 	/*  0x0258..0x0259 */
199 	unsigned long   gfm_mult[2];
200 	/* 0x025E */
201 	unsigned long   gfm_poly;
202 	/* 0x025A..0x025B */
203 	unsigned long   gfm_result[2];
204 };
205 
206 /* Prototypes */
207 
208 struct octeon_cop2_state* octeon_cop2_alloc_ctx(void);
209 void octeon_cop2_free_ctx(struct octeon_cop2_state *);
210 /*
211  * Save/restore part
212  */
213 void octeon_cop2_save(struct octeon_cop2_state *);
214 void octeon_cop2_restore(struct octeon_cop2_state *);
215 
216 #endif /* LOCORE */
217 #endif /* __OCTEON_COP2_H__ */
218