1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 20a625fd2SDavid S. Miller #ifndef _N2_CORE_H 30a625fd2SDavid S. Miller #define _N2_CORE_H 40a625fd2SDavid S. Miller 50a625fd2SDavid S. Miller #ifndef __ASSEMBLY__ 60a625fd2SDavid S. Miller 70a625fd2SDavid S. Miller struct ino_blob { 80a625fd2SDavid S. Miller u64 intr; 90a625fd2SDavid S. Miller u64 ino; 100a625fd2SDavid S. Miller }; 110a625fd2SDavid S. Miller 120a625fd2SDavid S. Miller struct spu_mdesc_info { 130a625fd2SDavid S. Miller u64 cfg_handle; 140a625fd2SDavid S. Miller struct ino_blob *ino_table; 150a625fd2SDavid S. Miller int num_intrs; 160a625fd2SDavid S. Miller }; 170a625fd2SDavid S. Miller 180a625fd2SDavid S. Miller struct n2_crypto { 190a625fd2SDavid S. Miller struct spu_mdesc_info cwq_info; 200a625fd2SDavid S. Miller struct list_head cwq_list; 210a625fd2SDavid S. Miller }; 220a625fd2SDavid S. Miller 230a625fd2SDavid S. Miller struct n2_mau { 240a625fd2SDavid S. Miller struct spu_mdesc_info mau_info; 250a625fd2SDavid S. Miller struct list_head mau_list; 260a625fd2SDavid S. Miller }; 270a625fd2SDavid S. Miller 280a625fd2SDavid S. Miller #define CWQ_ENTRY_SIZE 64 290a625fd2SDavid S. Miller #define CWQ_NUM_ENTRIES 64 300a625fd2SDavid S. Miller 310a625fd2SDavid S. Miller #define MAU_ENTRY_SIZE 64 320a625fd2SDavid S. Miller #define MAU_NUM_ENTRIES 64 330a625fd2SDavid S. Miller 340a625fd2SDavid S. Miller struct cwq_initial_entry { 350a625fd2SDavid S. Miller u64 control; 360a625fd2SDavid S. Miller u64 src_addr; 370a625fd2SDavid S. Miller u64 auth_key_addr; 380a625fd2SDavid S. Miller u64 auth_iv_addr; 390a625fd2SDavid S. Miller u64 final_auth_state_addr; 400a625fd2SDavid S. Miller u64 enc_key_addr; 410a625fd2SDavid S. Miller u64 enc_iv_addr; 420a625fd2SDavid S. Miller u64 dest_addr; 430a625fd2SDavid S. Miller }; 440a625fd2SDavid S. Miller 450a625fd2SDavid S. Miller struct cwq_ext_entry { 460a625fd2SDavid S. Miller u64 len; 470a625fd2SDavid S. Miller u64 src_addr; 480a625fd2SDavid S. Miller u64 resv1; 490a625fd2SDavid S. Miller u64 resv2; 500a625fd2SDavid S. Miller u64 resv3; 510a625fd2SDavid S. Miller u64 resv4; 520a625fd2SDavid S. Miller u64 resv5; 530a625fd2SDavid S. Miller u64 resv6; 540a625fd2SDavid S. Miller }; 550a625fd2SDavid S. Miller 560a625fd2SDavid S. Miller struct cwq_final_entry { 570a625fd2SDavid S. Miller u64 control; 580a625fd2SDavid S. Miller u64 src_addr; 590a625fd2SDavid S. Miller u64 resv1; 600a625fd2SDavid S. Miller u64 resv2; 610a625fd2SDavid S. Miller u64 resv3; 620a625fd2SDavid S. Miller u64 resv4; 630a625fd2SDavid S. Miller u64 resv5; 640a625fd2SDavid S. Miller u64 resv6; 650a625fd2SDavid S. Miller }; 660a625fd2SDavid S. Miller 670a625fd2SDavid S. Miller #define CONTROL_LEN 0x000000000000ffffULL 680a625fd2SDavid S. Miller #define CONTROL_LEN_SHIFT 0 690a625fd2SDavid S. Miller #define CONTROL_HMAC_KEY_LEN 0x0000000000ff0000ULL 700a625fd2SDavid S. Miller #define CONTROL_HMAC_KEY_LEN_SHIFT 16 710a625fd2SDavid S. Miller #define CONTROL_ENC_TYPE 0x00000000ff000000ULL 720a625fd2SDavid S. Miller #define CONTROL_ENC_TYPE_SHIFT 24 730a625fd2SDavid S. Miller #define ENC_TYPE_ALG_RC4_STREAM 0x00ULL 740a625fd2SDavid S. Miller #define ENC_TYPE_ALG_RC4_NOSTREAM 0x04ULL 750a625fd2SDavid S. Miller #define ENC_TYPE_ALG_DES 0x08ULL 760a625fd2SDavid S. Miller #define ENC_TYPE_ALG_3DES 0x0cULL 770a625fd2SDavid S. Miller #define ENC_TYPE_ALG_AES128 0x10ULL 780a625fd2SDavid S. Miller #define ENC_TYPE_ALG_AES192 0x14ULL 790a625fd2SDavid S. Miller #define ENC_TYPE_ALG_AES256 0x18ULL 800a625fd2SDavid S. Miller #define ENC_TYPE_ALG_RESERVED 0x1cULL 810a625fd2SDavid S. Miller #define ENC_TYPE_ALG_MASK 0x1cULL 820a625fd2SDavid S. Miller #define ENC_TYPE_CHAINING_ECB 0x00ULL 830a625fd2SDavid S. Miller #define ENC_TYPE_CHAINING_CBC 0x01ULL 840a625fd2SDavid S. Miller #define ENC_TYPE_CHAINING_CFB 0x02ULL 850a625fd2SDavid S. Miller #define ENC_TYPE_CHAINING_COUNTER 0x03ULL 860a625fd2SDavid S. Miller #define ENC_TYPE_CHAINING_MASK 0x03ULL 870a625fd2SDavid S. Miller #define CONTROL_AUTH_TYPE 0x0000001f00000000ULL 880a625fd2SDavid S. Miller #define CONTROL_AUTH_TYPE_SHIFT 32 890a625fd2SDavid S. Miller #define AUTH_TYPE_RESERVED 0x00ULL 900a625fd2SDavid S. Miller #define AUTH_TYPE_MD5 0x01ULL 910a625fd2SDavid S. Miller #define AUTH_TYPE_SHA1 0x02ULL 920a625fd2SDavid S. Miller #define AUTH_TYPE_SHA256 0x03ULL 930a625fd2SDavid S. Miller #define AUTH_TYPE_CRC32 0x04ULL 940a625fd2SDavid S. Miller #define AUTH_TYPE_HMAC_MD5 0x05ULL 950a625fd2SDavid S. Miller #define AUTH_TYPE_HMAC_SHA1 0x06ULL 960a625fd2SDavid S. Miller #define AUTH_TYPE_HMAC_SHA256 0x07ULL 970a625fd2SDavid S. Miller #define AUTH_TYPE_TCP_CHECKSUM 0x08ULL 980a625fd2SDavid S. Miller #define AUTH_TYPE_SSL_HMAC_MD5 0x09ULL 990a625fd2SDavid S. Miller #define AUTH_TYPE_SSL_HMAC_SHA1 0x0aULL 1000a625fd2SDavid S. Miller #define AUTH_TYPE_SSL_HMAC_SHA256 0x0bULL 1010a625fd2SDavid S. Miller #define CONTROL_STRAND 0x000000e000000000ULL 1020a625fd2SDavid S. Miller #define CONTROL_STRAND_SHIFT 37 1030a625fd2SDavid S. Miller #define CONTROL_HASH_LEN 0x0000ff0000000000ULL 1040a625fd2SDavid S. Miller #define CONTROL_HASH_LEN_SHIFT 40 1050a625fd2SDavid S. Miller #define CONTROL_INTERRUPT 0x0001000000000000ULL 1060a625fd2SDavid S. Miller #define CONTROL_STORE_FINAL_AUTH_STATE 0x0002000000000000ULL 1070a625fd2SDavid S. Miller #define CONTROL_RESERVED 0x001c000000000000ULL 1080a625fd2SDavid S. Miller #define CONTROL_HV_DONE 0x0004000000000000ULL 1090a625fd2SDavid S. Miller #define CONTROL_HV_PROTOCOL_ERROR 0x0008000000000000ULL 1100a625fd2SDavid S. Miller #define CONTROL_HV_HARDWARE_ERROR 0x0010000000000000ULL 1110a625fd2SDavid S. Miller #define CONTROL_END_OF_BLOCK 0x0020000000000000ULL 1120a625fd2SDavid S. Miller #define CONTROL_START_OF_BLOCK 0x0040000000000000ULL 1130a625fd2SDavid S. Miller #define CONTROL_ENCRYPT 0x0080000000000000ULL 1140a625fd2SDavid S. Miller #define CONTROL_OPCODE 0xff00000000000000ULL 1150a625fd2SDavid S. Miller #define CONTROL_OPCODE_SHIFT 56 1160a625fd2SDavid S. Miller #define OPCODE_INPLACE_BIT 0x80ULL 1170a625fd2SDavid S. Miller #define OPCODE_SSL_KEYBLOCK 0x10ULL 1180a625fd2SDavid S. Miller #define OPCODE_COPY 0x20ULL 1190a625fd2SDavid S. Miller #define OPCODE_ENCRYPT 0x40ULL 1200a625fd2SDavid S. Miller #define OPCODE_AUTH_MAC 0x41ULL 1210a625fd2SDavid S. Miller 1220a625fd2SDavid S. Miller #endif /* !(__ASSEMBLY__) */ 1230a625fd2SDavid S. Miller 1240a625fd2SDavid S. Miller /* NCS v2.0 hypervisor interfaces */ 1250a625fd2SDavid S. Miller #define HV_NCS_QTYPE_MAU 0x01 1260a625fd2SDavid S. Miller #define HV_NCS_QTYPE_CWQ 0x02 1270a625fd2SDavid S. Miller 1280a625fd2SDavid S. Miller /* ncs_qconf() 1290a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1300a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_QCONF 1310a625fd2SDavid S. Miller * ARG0: Queue type (HV_NCS_QTYPE_{MAU,CWQ}) 1320a625fd2SDavid S. Miller * ARG1: Real address of queue, or handle for unconfigure 1330a625fd2SDavid S. Miller * ARG2: Number of entries in queue, zero for unconfigure 1340a625fd2SDavid S. Miller * RET0: status 1350a625fd2SDavid S. Miller * RET1: queue handle 1360a625fd2SDavid S. Miller * 1370a625fd2SDavid S. Miller * Configure a queue in the stream processing unit. 1380a625fd2SDavid S. Miller * 1390a625fd2SDavid S. Miller * The real address given as the base must be 64-byte 1400a625fd2SDavid S. Miller * aligned. 1410a625fd2SDavid S. Miller * 1420a625fd2SDavid S. Miller * The queue size can range from a minimum of 2 to a maximum 1430a625fd2SDavid S. Miller * of 64. The queue size must be a power of two. 1440a625fd2SDavid S. Miller * 1450a625fd2SDavid S. Miller * To unconfigure a queue, specify a length of zero and place 1460a625fd2SDavid S. Miller * the queue handle into ARG1. 1470a625fd2SDavid S. Miller * 1480a625fd2SDavid S. Miller * On configure success the hypervisor will set the FIRST, HEAD, 1490a625fd2SDavid S. Miller * and TAIL registers to the address of the first entry in the 1500a625fd2SDavid S. Miller * queue. The LAST register will be set to point to the last 1510a625fd2SDavid S. Miller * entry in the queue. 1520a625fd2SDavid S. Miller */ 1530a625fd2SDavid S. Miller #define HV_FAST_NCS_QCONF 0x111 1540a625fd2SDavid S. Miller 1550a625fd2SDavid S. Miller /* ncs_qinfo() 1560a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1570a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_QINFO 1580a625fd2SDavid S. Miller * ARG0: Queue handle 1590a625fd2SDavid S. Miller * RET0: status 1600a625fd2SDavid S. Miller * RET1: Queue type (HV_NCS_QTYPE_{MAU,CWQ}) 1610a625fd2SDavid S. Miller * RET2: Queue base address 1620a625fd2SDavid S. Miller * RET3: Number of entries 1630a625fd2SDavid S. Miller */ 1640a625fd2SDavid S. Miller #define HV_FAST_NCS_QINFO 0x112 1650a625fd2SDavid S. Miller 1660a625fd2SDavid S. Miller /* ncs_gethead() 1670a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1680a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_GETHEAD 1690a625fd2SDavid S. Miller * ARG0: Queue handle 1700a625fd2SDavid S. Miller * RET0: status 1710a625fd2SDavid S. Miller * RET1: queue head offset 1720a625fd2SDavid S. Miller */ 1730a625fd2SDavid S. Miller #define HV_FAST_NCS_GETHEAD 0x113 1740a625fd2SDavid S. Miller 1750a625fd2SDavid S. Miller /* ncs_gettail() 1760a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1770a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_GETTAIL 1780a625fd2SDavid S. Miller * ARG0: Queue handle 1790a625fd2SDavid S. Miller * RET0: status 1800a625fd2SDavid S. Miller * RET1: queue tail offset 1810a625fd2SDavid S. Miller */ 1820a625fd2SDavid S. Miller #define HV_FAST_NCS_GETTAIL 0x114 1830a625fd2SDavid S. Miller 1840a625fd2SDavid S. Miller /* ncs_settail() 1850a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1860a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_SETTAIL 1870a625fd2SDavid S. Miller * ARG0: Queue handle 1880a625fd2SDavid S. Miller * ARG1: New tail offset 1890a625fd2SDavid S. Miller * RET0: status 1900a625fd2SDavid S. Miller */ 1910a625fd2SDavid S. Miller #define HV_FAST_NCS_SETTAIL 0x115 1920a625fd2SDavid S. Miller 1930a625fd2SDavid S. Miller /* ncs_qhandle_to_devino() 1940a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 1950a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_QHANDLE_TO_DEVINO 1960a625fd2SDavid S. Miller * ARG0: Queue handle 1970a625fd2SDavid S. Miller * RET0: status 1980a625fd2SDavid S. Miller * RET1: devino 1990a625fd2SDavid S. Miller */ 2000a625fd2SDavid S. Miller #define HV_FAST_NCS_QHANDLE_TO_DEVINO 0x116 2010a625fd2SDavid S. Miller 2020a625fd2SDavid S. Miller /* ncs_sethead_marker() 2030a625fd2SDavid S. Miller * TRAP: HV_FAST_TRAP 2040a625fd2SDavid S. Miller * FUNCTION: HV_FAST_NCS_SETHEAD_MARKER 2050a625fd2SDavid S. Miller * ARG0: Queue handle 2060a625fd2SDavid S. Miller * ARG1: New head offset 2070a625fd2SDavid S. Miller * RET0: status 2080a625fd2SDavid S. Miller */ 2090a625fd2SDavid S. Miller #define HV_FAST_NCS_SETHEAD_MARKER 0x117 2100a625fd2SDavid S. Miller 2110a625fd2SDavid S. Miller #ifndef __ASSEMBLY__ 2120a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_qconf(unsigned long queue_type, 2130a625fd2SDavid S. Miller unsigned long queue_ra, 2140a625fd2SDavid S. Miller unsigned long num_entries, 2150a625fd2SDavid S. Miller unsigned long *qhandle); 2160a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_qinfo(unsigned long qhandle, 2170a625fd2SDavid S. Miller unsigned long *queue_type, 2180a625fd2SDavid S. Miller unsigned long *queue_ra, 2190a625fd2SDavid S. Miller unsigned long *num_entries); 2200a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_gethead(unsigned long qhandle, 2210a625fd2SDavid S. Miller unsigned long *head); 2220a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_gettail(unsigned long qhandle, 2230a625fd2SDavid S. Miller unsigned long *tail); 2240a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_settail(unsigned long qhandle, 2250a625fd2SDavid S. Miller unsigned long tail); 2260a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_qhandle_to_devino(unsigned long qhandle, 2270a625fd2SDavid S. Miller unsigned long *devino); 2280a625fd2SDavid S. Miller extern unsigned long sun4v_ncs_sethead_marker(unsigned long qhandle, 2290a625fd2SDavid S. Miller unsigned long head); 2300a625fd2SDavid S. Miller #endif /* !(__ASSEMBLY__) */ 2310a625fd2SDavid S. Miller 2320a625fd2SDavid S. Miller #endif /* _N2_CORE_H */ 233