162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _N2_CORE_H 362306a36Sopenharmony_ci#define _N2_CORE_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistruct ino_blob { 862306a36Sopenharmony_ci u64 intr; 962306a36Sopenharmony_ci u64 ino; 1062306a36Sopenharmony_ci}; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct spu_mdesc_info { 1362306a36Sopenharmony_ci u64 cfg_handle; 1462306a36Sopenharmony_ci struct ino_blob *ino_table; 1562306a36Sopenharmony_ci int num_intrs; 1662306a36Sopenharmony_ci}; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct n2_crypto { 1962306a36Sopenharmony_ci struct spu_mdesc_info cwq_info; 2062306a36Sopenharmony_ci struct list_head cwq_list; 2162306a36Sopenharmony_ci}; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct n2_mau { 2462306a36Sopenharmony_ci struct spu_mdesc_info mau_info; 2562306a36Sopenharmony_ci struct list_head mau_list; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define CWQ_ENTRY_SIZE 64 2962306a36Sopenharmony_ci#define CWQ_NUM_ENTRIES 64 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define MAU_ENTRY_SIZE 64 3262306a36Sopenharmony_ci#define MAU_NUM_ENTRIES 64 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct cwq_initial_entry { 3562306a36Sopenharmony_ci u64 control; 3662306a36Sopenharmony_ci u64 src_addr; 3762306a36Sopenharmony_ci u64 auth_key_addr; 3862306a36Sopenharmony_ci u64 auth_iv_addr; 3962306a36Sopenharmony_ci u64 final_auth_state_addr; 4062306a36Sopenharmony_ci u64 enc_key_addr; 4162306a36Sopenharmony_ci u64 enc_iv_addr; 4262306a36Sopenharmony_ci u64 dest_addr; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct cwq_ext_entry { 4662306a36Sopenharmony_ci u64 len; 4762306a36Sopenharmony_ci u64 src_addr; 4862306a36Sopenharmony_ci u64 resv1; 4962306a36Sopenharmony_ci u64 resv2; 5062306a36Sopenharmony_ci u64 resv3; 5162306a36Sopenharmony_ci u64 resv4; 5262306a36Sopenharmony_ci u64 resv5; 5362306a36Sopenharmony_ci u64 resv6; 5462306a36Sopenharmony_ci}; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cistruct cwq_final_entry { 5762306a36Sopenharmony_ci u64 control; 5862306a36Sopenharmony_ci u64 src_addr; 5962306a36Sopenharmony_ci u64 resv1; 6062306a36Sopenharmony_ci u64 resv2; 6162306a36Sopenharmony_ci u64 resv3; 6262306a36Sopenharmony_ci u64 resv4; 6362306a36Sopenharmony_ci u64 resv5; 6462306a36Sopenharmony_ci u64 resv6; 6562306a36Sopenharmony_ci}; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#define CONTROL_LEN 0x000000000000ffffULL 6862306a36Sopenharmony_ci#define CONTROL_LEN_SHIFT 0 6962306a36Sopenharmony_ci#define CONTROL_HMAC_KEY_LEN 0x0000000000ff0000ULL 7062306a36Sopenharmony_ci#define CONTROL_HMAC_KEY_LEN_SHIFT 16 7162306a36Sopenharmony_ci#define CONTROL_ENC_TYPE 0x00000000ff000000ULL 7262306a36Sopenharmony_ci#define CONTROL_ENC_TYPE_SHIFT 24 7362306a36Sopenharmony_ci#define ENC_TYPE_ALG_RC4_STREAM 0x00ULL 7462306a36Sopenharmony_ci#define ENC_TYPE_ALG_RC4_NOSTREAM 0x04ULL 7562306a36Sopenharmony_ci#define ENC_TYPE_ALG_DES 0x08ULL 7662306a36Sopenharmony_ci#define ENC_TYPE_ALG_3DES 0x0cULL 7762306a36Sopenharmony_ci#define ENC_TYPE_ALG_AES128 0x10ULL 7862306a36Sopenharmony_ci#define ENC_TYPE_ALG_AES192 0x14ULL 7962306a36Sopenharmony_ci#define ENC_TYPE_ALG_AES256 0x18ULL 8062306a36Sopenharmony_ci#define ENC_TYPE_ALG_RESERVED 0x1cULL 8162306a36Sopenharmony_ci#define ENC_TYPE_ALG_MASK 0x1cULL 8262306a36Sopenharmony_ci#define ENC_TYPE_CHAINING_ECB 0x00ULL 8362306a36Sopenharmony_ci#define ENC_TYPE_CHAINING_CBC 0x01ULL 8462306a36Sopenharmony_ci#define ENC_TYPE_CHAINING_CFB 0x02ULL 8562306a36Sopenharmony_ci#define ENC_TYPE_CHAINING_COUNTER 0x03ULL 8662306a36Sopenharmony_ci#define ENC_TYPE_CHAINING_MASK 0x03ULL 8762306a36Sopenharmony_ci#define CONTROL_AUTH_TYPE 0x0000001f00000000ULL 8862306a36Sopenharmony_ci#define CONTROL_AUTH_TYPE_SHIFT 32 8962306a36Sopenharmony_ci#define AUTH_TYPE_RESERVED 0x00ULL 9062306a36Sopenharmony_ci#define AUTH_TYPE_MD5 0x01ULL 9162306a36Sopenharmony_ci#define AUTH_TYPE_SHA1 0x02ULL 9262306a36Sopenharmony_ci#define AUTH_TYPE_SHA256 0x03ULL 9362306a36Sopenharmony_ci#define AUTH_TYPE_CRC32 0x04ULL 9462306a36Sopenharmony_ci#define AUTH_TYPE_HMAC_MD5 0x05ULL 9562306a36Sopenharmony_ci#define AUTH_TYPE_HMAC_SHA1 0x06ULL 9662306a36Sopenharmony_ci#define AUTH_TYPE_HMAC_SHA256 0x07ULL 9762306a36Sopenharmony_ci#define AUTH_TYPE_TCP_CHECKSUM 0x08ULL 9862306a36Sopenharmony_ci#define AUTH_TYPE_SSL_HMAC_MD5 0x09ULL 9962306a36Sopenharmony_ci#define AUTH_TYPE_SSL_HMAC_SHA1 0x0aULL 10062306a36Sopenharmony_ci#define AUTH_TYPE_SSL_HMAC_SHA256 0x0bULL 10162306a36Sopenharmony_ci#define CONTROL_STRAND 0x000000e000000000ULL 10262306a36Sopenharmony_ci#define CONTROL_STRAND_SHIFT 37 10362306a36Sopenharmony_ci#define CONTROL_HASH_LEN 0x0000ff0000000000ULL 10462306a36Sopenharmony_ci#define CONTROL_HASH_LEN_SHIFT 40 10562306a36Sopenharmony_ci#define CONTROL_INTERRUPT 0x0001000000000000ULL 10662306a36Sopenharmony_ci#define CONTROL_STORE_FINAL_AUTH_STATE 0x0002000000000000ULL 10762306a36Sopenharmony_ci#define CONTROL_RESERVED 0x001c000000000000ULL 10862306a36Sopenharmony_ci#define CONTROL_HV_DONE 0x0004000000000000ULL 10962306a36Sopenharmony_ci#define CONTROL_HV_PROTOCOL_ERROR 0x0008000000000000ULL 11062306a36Sopenharmony_ci#define CONTROL_HV_HARDWARE_ERROR 0x0010000000000000ULL 11162306a36Sopenharmony_ci#define CONTROL_END_OF_BLOCK 0x0020000000000000ULL 11262306a36Sopenharmony_ci#define CONTROL_START_OF_BLOCK 0x0040000000000000ULL 11362306a36Sopenharmony_ci#define CONTROL_ENCRYPT 0x0080000000000000ULL 11462306a36Sopenharmony_ci#define CONTROL_OPCODE 0xff00000000000000ULL 11562306a36Sopenharmony_ci#define CONTROL_OPCODE_SHIFT 56 11662306a36Sopenharmony_ci#define OPCODE_INPLACE_BIT 0x80ULL 11762306a36Sopenharmony_ci#define OPCODE_SSL_KEYBLOCK 0x10ULL 11862306a36Sopenharmony_ci#define OPCODE_COPY 0x20ULL 11962306a36Sopenharmony_ci#define OPCODE_ENCRYPT 0x40ULL 12062306a36Sopenharmony_ci#define OPCODE_AUTH_MAC 0x41ULL 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#endif /* !(__ASSEMBLY__) */ 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci/* NCS v2.0 hypervisor interfaces */ 12562306a36Sopenharmony_ci#define HV_NCS_QTYPE_MAU 0x01 12662306a36Sopenharmony_ci#define HV_NCS_QTYPE_CWQ 0x02 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci/* ncs_qconf() 12962306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 13062306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_QCONF 13162306a36Sopenharmony_ci * ARG0: Queue type (HV_NCS_QTYPE_{MAU,CWQ}) 13262306a36Sopenharmony_ci * ARG1: Real address of queue, or handle for unconfigure 13362306a36Sopenharmony_ci * ARG2: Number of entries in queue, zero for unconfigure 13462306a36Sopenharmony_ci * RET0: status 13562306a36Sopenharmony_ci * RET1: queue handle 13662306a36Sopenharmony_ci * 13762306a36Sopenharmony_ci * Configure a queue in the stream processing unit. 13862306a36Sopenharmony_ci * 13962306a36Sopenharmony_ci * The real address given as the base must be 64-byte 14062306a36Sopenharmony_ci * aligned. 14162306a36Sopenharmony_ci * 14262306a36Sopenharmony_ci * The queue size can range from a minimum of 2 to a maximum 14362306a36Sopenharmony_ci * of 64. The queue size must be a power of two. 14462306a36Sopenharmony_ci * 14562306a36Sopenharmony_ci * To unconfigure a queue, specify a length of zero and place 14662306a36Sopenharmony_ci * the queue handle into ARG1. 14762306a36Sopenharmony_ci * 14862306a36Sopenharmony_ci * On configure success the hypervisor will set the FIRST, HEAD, 14962306a36Sopenharmony_ci * and TAIL registers to the address of the first entry in the 15062306a36Sopenharmony_ci * queue. The LAST register will be set to point to the last 15162306a36Sopenharmony_ci * entry in the queue. 15262306a36Sopenharmony_ci */ 15362306a36Sopenharmony_ci#define HV_FAST_NCS_QCONF 0x111 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci/* ncs_qinfo() 15662306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 15762306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_QINFO 15862306a36Sopenharmony_ci * ARG0: Queue handle 15962306a36Sopenharmony_ci * RET0: status 16062306a36Sopenharmony_ci * RET1: Queue type (HV_NCS_QTYPE_{MAU,CWQ}) 16162306a36Sopenharmony_ci * RET2: Queue base address 16262306a36Sopenharmony_ci * RET3: Number of entries 16362306a36Sopenharmony_ci */ 16462306a36Sopenharmony_ci#define HV_FAST_NCS_QINFO 0x112 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci/* ncs_gethead() 16762306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 16862306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_GETHEAD 16962306a36Sopenharmony_ci * ARG0: Queue handle 17062306a36Sopenharmony_ci * RET0: status 17162306a36Sopenharmony_ci * RET1: queue head offset 17262306a36Sopenharmony_ci */ 17362306a36Sopenharmony_ci#define HV_FAST_NCS_GETHEAD 0x113 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci/* ncs_gettail() 17662306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 17762306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_GETTAIL 17862306a36Sopenharmony_ci * ARG0: Queue handle 17962306a36Sopenharmony_ci * RET0: status 18062306a36Sopenharmony_ci * RET1: queue tail offset 18162306a36Sopenharmony_ci */ 18262306a36Sopenharmony_ci#define HV_FAST_NCS_GETTAIL 0x114 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci/* ncs_settail() 18562306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 18662306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_SETTAIL 18762306a36Sopenharmony_ci * ARG0: Queue handle 18862306a36Sopenharmony_ci * ARG1: New tail offset 18962306a36Sopenharmony_ci * RET0: status 19062306a36Sopenharmony_ci */ 19162306a36Sopenharmony_ci#define HV_FAST_NCS_SETTAIL 0x115 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci/* ncs_qhandle_to_devino() 19462306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 19562306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_QHANDLE_TO_DEVINO 19662306a36Sopenharmony_ci * ARG0: Queue handle 19762306a36Sopenharmony_ci * RET0: status 19862306a36Sopenharmony_ci * RET1: devino 19962306a36Sopenharmony_ci */ 20062306a36Sopenharmony_ci#define HV_FAST_NCS_QHANDLE_TO_DEVINO 0x116 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci/* ncs_sethead_marker() 20362306a36Sopenharmony_ci * TRAP: HV_FAST_TRAP 20462306a36Sopenharmony_ci * FUNCTION: HV_FAST_NCS_SETHEAD_MARKER 20562306a36Sopenharmony_ci * ARG0: Queue handle 20662306a36Sopenharmony_ci * ARG1: New head offset 20762306a36Sopenharmony_ci * RET0: status 20862306a36Sopenharmony_ci */ 20962306a36Sopenharmony_ci#define HV_FAST_NCS_SETHEAD_MARKER 0x117 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 21262306a36Sopenharmony_ciextern unsigned long sun4v_ncs_qconf(unsigned long queue_type, 21362306a36Sopenharmony_ci unsigned long queue_ra, 21462306a36Sopenharmony_ci unsigned long num_entries, 21562306a36Sopenharmony_ci unsigned long *qhandle); 21662306a36Sopenharmony_ciextern unsigned long sun4v_ncs_qinfo(unsigned long qhandle, 21762306a36Sopenharmony_ci unsigned long *queue_type, 21862306a36Sopenharmony_ci unsigned long *queue_ra, 21962306a36Sopenharmony_ci unsigned long *num_entries); 22062306a36Sopenharmony_ciextern unsigned long sun4v_ncs_gethead(unsigned long qhandle, 22162306a36Sopenharmony_ci unsigned long *head); 22262306a36Sopenharmony_ciextern unsigned long sun4v_ncs_gettail(unsigned long qhandle, 22362306a36Sopenharmony_ci unsigned long *tail); 22462306a36Sopenharmony_ciextern unsigned long sun4v_ncs_settail(unsigned long qhandle, 22562306a36Sopenharmony_ci unsigned long tail); 22662306a36Sopenharmony_ciextern unsigned long sun4v_ncs_qhandle_to_devino(unsigned long qhandle, 22762306a36Sopenharmony_ci unsigned long *devino); 22862306a36Sopenharmony_ciextern unsigned long sun4v_ncs_sethead_marker(unsigned long qhandle, 22962306a36Sopenharmony_ci unsigned long head); 23062306a36Sopenharmony_ci#endif /* !(__ASSEMBLY__) */ 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci#endif /* _N2_CORE_H */ 233