octeon_cop2.h revision 229677
1229677Sgonzo/*- 2229677Sgonzo * Copyright (c) 2011, Oleksandr Tymoshenko <gonzo@FreeBSD.org> 3229677Sgonzo * All rights reserved. 4229677Sgonzo * 5229677Sgonzo * Redistribution and use in source and binary forms, with or without 6229677Sgonzo * modification, are permitted provided that the following conditions 7229677Sgonzo * are met: 8229677Sgonzo * 1. Redistributions of source code must retain the above copyright 9229677Sgonzo * notice unmodified, this list of conditions, and the following 10229677Sgonzo * disclaimer. 11229677Sgonzo * 2. Redistributions in binary form must reproduce the above copyright 12229677Sgonzo * notice, this list of conditions and the following disclaimer in the 13229677Sgonzo * documentation and/or other materials provided with the distribution. 14229677Sgonzo * 15229677Sgonzo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16229677Sgonzo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17229677Sgonzo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18229677Sgonzo * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19229677Sgonzo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20229677Sgonzo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21229677Sgonzo * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22229677Sgonzo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23229677Sgonzo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24229677Sgonzo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25229677Sgonzo * SUCH DAMAGE. 26229677Sgonzo * 27229677Sgonzo * $FreeBSD: head/sys/mips/cavium/octeon_cop2.h 229677 2012-01-06 01:23:26Z gonzo $ 28229677Sgonzo * 29229677Sgonzo */ 30229677Sgonzo 31229677Sgonzo#ifndef __OCTEON_COP2_H__ 32229677Sgonzo#define __OCTEON_COP2_H__ 33229677Sgonzo 34229677Sgonzo/* 35229677Sgonzo * COP2 registers of interest 36229677Sgonzo */ 37229677Sgonzo#define COP2_CRC_IV 0x201 38229677Sgonzo#define COP2_CRC_IV_SET COP2_CRC_IV 39229677Sgonzo#define COP2_CRC_LENGTH 0x202 40229677Sgonzo#define COP2_CRC_LENGTH_SET 0x1202 41229677Sgonzo#define COP2_CRC_POLY 0x200 42229677Sgonzo#define COP2_CRC_POLY_SET 0x4200 43229677Sgonzo#define COP2_LLM_DAT0 0x402 44229677Sgonzo#define COP2_LLM_DAT0_SET COP2_LLM_DAT0 45229677Sgonzo#define COP2_LLM_DAT1 0x40A 46229677Sgonzo#define COP2_LLM_DAT1_SET COP2_LLM_DAT1 47229677Sgonzo#define COP2_3DES_IV 0x084 48229677Sgonzo#define COP2_3DES_IV_SET COP2_3DES_IV 49229677Sgonzo#define COP2_3DES_KEY0 0x080 50229677Sgonzo#define COP2_3DES_KEY0_SET COP2_3DES_KEY0 51229677Sgonzo#define COP2_3DES_KEY1 0x081 52229677Sgonzo#define COP2_3DES_KEY1_SET COP2_3DES_KEY1 53229677Sgonzo#define COP2_3DES_KEY2 0x082 54229677Sgonzo#define COP2_3DES_KEY2_SET COP2_3DES_KEY2 55229677Sgonzo#define COP2_3DES_RESULT 0x088 56229677Sgonzo#define COP2_3DES_RESULT_SET 0x098 57229677Sgonzo#define COP2_AES_INP0 0x111 58229677Sgonzo#define COP2_AES_INP0_SET COP2_AES_INP0 59229677Sgonzo#define COP2_AES_IV0 0x102 60229677Sgonzo#define COP2_AES_IV0_SET COP2_AES_IV0 61229677Sgonzo#define COP2_AES_IV1 0x103 62229677Sgonzo#define COP2_AES_IV1_SET COP2_AES_IV1 63229677Sgonzo#define COP2_AES_KEY0 0x104 64229677Sgonzo#define COP2_AES_KEY0_SET COP2_AES_KEY0 65229677Sgonzo#define COP2_AES_KEY1 0x105 66229677Sgonzo#define COP2_AES_KEY1_SET COP2_AES_KEY1 67229677Sgonzo#define COP2_AES_KEY2 0x106 68229677Sgonzo#define COP2_AES_KEY2_SET COP2_AES_KEY2 69229677Sgonzo#define COP2_AES_KEY3 0x107 70229677Sgonzo#define COP2_AES_KEY3_SET COP2_AES_KEY3 71229677Sgonzo#define COP2_AES_KEYLEN 0x110 72229677Sgonzo#define COP2_AES_KEYLEN_SET COP2_AES_KEYLEN 73229677Sgonzo#define COP2_AES_RESULT0 0x100 74229677Sgonzo#define COP2_AES_RESULT0_SET COP2_AES_RESULT0 75229677Sgonzo#define COP2_AES_RESULT1 0x101 76229677Sgonzo#define COP2_AES_RESULT1_SET COP2_AES_RESULT1 77229677Sgonzo#define COP2_HSH_DATW0 0x240 78229677Sgonzo#define COP2_HSH_DATW0_SET COP2_HSH_DATW0 79229677Sgonzo#define COP2_HSH_DATW1 0x241 80229677Sgonzo#define COP2_HSH_DATW1_SET COP2_HSH_DATW1 81229677Sgonzo#define COP2_HSH_DATW2 0x242 82229677Sgonzo#define COP2_HSH_DATW2_SET COP2_HSH_DATW2 83229677Sgonzo#define COP2_HSH_DATW3 0x243 84229677Sgonzo#define COP2_HSH_DATW3_SET COP2_HSH_DATW3 85229677Sgonzo#define COP2_HSH_DATW4 0x244 86229677Sgonzo#define COP2_HSH_DATW4_SET COP2_HSH_DATW4 87229677Sgonzo#define COP2_HSH_DATW5 0x245 88229677Sgonzo#define COP2_HSH_DATW5_SET COP2_HSH_DATW5 89229677Sgonzo#define COP2_HSH_DATW6 0x246 90229677Sgonzo#define COP2_HSH_DATW6_SET COP2_HSH_DATW6 91229677Sgonzo#define COP2_HSH_DATW7 0x247 92229677Sgonzo#define COP2_HSH_DATW7_SET COP2_HSH_DATW7 93229677Sgonzo#define COP2_HSH_DATW8 0x248 94229677Sgonzo#define COP2_HSH_DATW8_SET COP2_HSH_DATW8 95229677Sgonzo#define COP2_HSH_DATW9 0x249 96229677Sgonzo#define COP2_HSH_DATW9_SET COP2_HSH_DATW9 97229677Sgonzo#define COP2_HSH_DATW10 0x24A 98229677Sgonzo#define COP2_HSH_DATW10_SET COP2_HSH_DATW10 99229677Sgonzo#define COP2_HSH_DATW11 0x24B 100229677Sgonzo#define COP2_HSH_DATW11_SET COP2_HSH_DATW11 101229677Sgonzo#define COP2_HSH_DATW12 0x24C 102229677Sgonzo#define COP2_HSH_DATW12_SET COP2_HSH_DATW12 103229677Sgonzo#define COP2_HSH_DATW13 0x24D 104229677Sgonzo#define COP2_HSH_DATW13_SET COP2_HSH_DATW13 105229677Sgonzo#define COP2_HSH_DATW14 0x24E 106229677Sgonzo#define COP2_HSH_DATW14_SET COP2_HSH_DATW14 107229677Sgonzo#define COP2_HSH_IVW0 0x250 108229677Sgonzo#define COP2_HSH_IVW0_SET COP2_HSH_IVW0 109229677Sgonzo#define COP2_HSH_IVW1 0x251 110229677Sgonzo#define COP2_HSH_IVW1_SET COP2_HSH_IVW1 111229677Sgonzo#define COP2_HSH_IVW2 0x252 112229677Sgonzo#define COP2_HSH_IVW2_SET COP2_HSH_IVW2 113229677Sgonzo#define COP2_HSH_IVW3 0x253 114229677Sgonzo#define COP2_HSH_IVW3_SET COP2_HSH_IVW3 115229677Sgonzo#define COP2_HSH_IVW4 0x254 116229677Sgonzo#define COP2_HSH_IVW4_SET COP2_HSH_IVW4 117229677Sgonzo#define COP2_HSH_IVW5 0x255 118229677Sgonzo#define COP2_HSH_IVW5_SET COP2_HSH_IVW5 119229677Sgonzo#define COP2_HSH_IVW6 0x256 120229677Sgonzo#define COP2_HSH_IVW6_SET COP2_HSH_IVW6 121229677Sgonzo#define COP2_HSH_IVW7 0x257 122229677Sgonzo#define COP2_HSH_IVW7_SET COP2_HSH_IVW7 123229677Sgonzo#define COP2_GFM_MULT0 0x258 124229677Sgonzo#define COP2_GFM_MULT0_SET COP2_GFM_MULT0 125229677Sgonzo#define COP2_GFM_MULT1 0x259 126229677Sgonzo#define COP2_GFM_MULT1_SET COP2_GFM_MULT1 127229677Sgonzo#define COP2_GFM_POLY 0x25E 128229677Sgonzo#define COP2_GFM_POLY_SET COP2_GFM_POLY 129229677Sgonzo#define COP2_GFM_RESULT0 0x25A 130229677Sgonzo#define COP2_GFM_RESULT0_SET COP2_GFM_RESULT0 131229677Sgonzo#define COP2_GFM_RESULT1 0x25B 132229677Sgonzo#define COP2_GFM_RESULT1_SET COP2_GFM_RESULT1 133229677Sgonzo#define COP2_HSH_DATW0_PASS1 0x040 134229677Sgonzo#define COP2_HSH_DATW0_PASS1_SET COP2_HSH_DATW0_PASS1 135229677Sgonzo#define COP2_HSH_DATW1_PASS1 0x041 136229677Sgonzo#define COP2_HSH_DATW1_PASS1_SET COP2_HSH_DATW1_PASS1 137229677Sgonzo#define COP2_HSH_DATW2_PASS1 0x042 138229677Sgonzo#define COP2_HSH_DATW2_PASS1_SET COP2_HSH_DATW2_PASS1 139229677Sgonzo#define COP2_HSH_DATW3_PASS1 0x043 140229677Sgonzo#define COP2_HSH_DATW3_PASS1_SET COP2_HSH_DATW3_PASS1 141229677Sgonzo#define COP2_HSH_DATW4_PASS1 0x044 142229677Sgonzo#define COP2_HSH_DATW4_PASS1_SET COP2_HSH_DATW4_PASS1 143229677Sgonzo#define COP2_HSH_DATW5_PASS1 0x045 144229677Sgonzo#define COP2_HSH_DATW5_PASS1_SET COP2_HSH_DATW5_PASS1 145229677Sgonzo#define COP2_HSH_DATW6_PASS1 0x046 146229677Sgonzo#define COP2_HSH_DATW6_PASS1_SET COP2_HSH_DATW6_PASS1 147229677Sgonzo#define COP2_HSH_IVW0_PASS1 0x048 148229677Sgonzo#define COP2_HSH_IVW0_PASS1_SET COP2_HSH_IVW0_PASS1 149229677Sgonzo#define COP2_HSH_IVW1_PASS1 0x049 150229677Sgonzo#define COP2_HSH_IVW1_PASS1_SET COP2_HSH_IVW1_PASS1 151229677Sgonzo#define COP2_HSH_IVW2_PASS1 0x04A 152229677Sgonzo#define COP2_HSH_IVW2_PASS1_SET COP2_HSH_IVW2_PASS1 153229677Sgonzo 154229677Sgonzo#ifndef LOCORE 155229677Sgonzo 156229677Sgonzostruct octeon_cop2_state { 157229677Sgonzo /* 3DES */ 158229677Sgonzo /* 0x0084 */ 159229677Sgonzo unsigned long _3des_iv; 160229677Sgonzo /* 0x0080..0x0082 */ 161229677Sgonzo unsigned long _3des_key[3]; 162229677Sgonzo /* 0x0088, set: 0x0098 */ 163229677Sgonzo unsigned long _3des_result; 164229677Sgonzo 165229677Sgonzo /* AES */ 166229677Sgonzo /* 0x0111 */ 167229677Sgonzo unsigned long aes_inp0; 168229677Sgonzo /* 0x0102..0x0103 */ 169229677Sgonzo unsigned long aes_iv[2]; 170229677Sgonzo /* 0x0104..0x0107 */ 171229677Sgonzo unsigned long aes_key[4]; 172229677Sgonzo /* 0x0110 */ 173229677Sgonzo unsigned long aes_keylen; 174229677Sgonzo /* 0x0100..0x0101 */ 175229677Sgonzo unsigned long aes_result[2]; 176229677Sgonzo 177229677Sgonzo /* CRC */ 178229677Sgonzo /* 0x0201 */ 179229677Sgonzo unsigned long crc_iv; 180229677Sgonzo /* 0x0202, set: 0x1202 */ 181229677Sgonzo unsigned long crc_length; 182229677Sgonzo /* 0x0200, set: 0x4200 */ 183229677Sgonzo unsigned long crc_poly; 184229677Sgonzo 185229677Sgonzo /* Low-latency memory stuff */ 186229677Sgonzo /* 0x0402, 0x040A */ 187229677Sgonzo unsigned long llm_dat[2]; 188229677Sgonzo 189229677Sgonzo /* SHA & MD5 */ 190229677Sgonzo /* 0x0240..0x024E */ 191229677Sgonzo unsigned long hsh_datw[15]; 192229677Sgonzo /* 0x0250..0x0257 */ 193229677Sgonzo unsigned long hsh_ivw[8]; 194229677Sgonzo 195229677Sgonzo /* GFM */ 196229677Sgonzo /* 0x0258..0x0259 */ 197229677Sgonzo unsigned long gfm_mult[2]; 198229677Sgonzo /* 0x025E */ 199229677Sgonzo unsigned long gfm_poly; 200229677Sgonzo /* 0x025A..0x025B */ 201229677Sgonzo unsigned long gfm_result[2]; 202229677Sgonzo}; 203229677Sgonzo 204229677Sgonzo/* Prototypes */ 205229677Sgonzo 206229677Sgonzovoid octeon_cop2_save(struct octeon_cop2_state *); 207229677Sgonzovoid octeon_cop2_restore(struct octeon_cop2_state *); 208229677Sgonzo 209229677Sgonzo#endif /* LOCORE */ 210229677Sgonzo#endif /* __OCTEON_COP2_H__ */ 211