17956Sxiuyan.wang@Sun.COM /* 27956Sxiuyan.wang@Sun.COM * CDDL HEADER START 37956Sxiuyan.wang@Sun.COM * 47956Sxiuyan.wang@Sun.COM * The contents of this file are subject to the terms of the 57956Sxiuyan.wang@Sun.COM * Common Development and Distribution License (the "License"). 67956Sxiuyan.wang@Sun.COM * You may not use this file except in compliance with the License. 77956Sxiuyan.wang@Sun.COM * 87956Sxiuyan.wang@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97956Sxiuyan.wang@Sun.COM * or http://www.opensolaris.org/os/licensing. 107956Sxiuyan.wang@Sun.COM * See the License for the specific language governing permissions 117956Sxiuyan.wang@Sun.COM * and limitations under the License. 127956Sxiuyan.wang@Sun.COM * 137956Sxiuyan.wang@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 147956Sxiuyan.wang@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157956Sxiuyan.wang@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 167956Sxiuyan.wang@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 177956Sxiuyan.wang@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 187956Sxiuyan.wang@Sun.COM * 197956Sxiuyan.wang@Sun.COM * CDDL HEADER END 207956Sxiuyan.wang@Sun.COM */ 218687SJing.Xiong@Sun.COM 227956Sxiuyan.wang@Sun.COM /* 237956Sxiuyan.wang@Sun.COM * Copyright 2008 NetXen, Inc. All rights reserved. 247956Sxiuyan.wang@Sun.COM * Use is subject to license terms. 257956Sxiuyan.wang@Sun.COM */ 268687SJing.Xiong@Sun.COM 278687SJing.Xiong@Sun.COM #ifndef _UNM_NIC_CMN_H_ 288687SJing.Xiong@Sun.COM #define _UNM_NIC_CMN_H_ 298687SJing.Xiong@Sun.COM 308687SJing.Xiong@Sun.COM #ifdef __cplusplus 318687SJing.Xiong@Sun.COM extern "C" { 328687SJing.Xiong@Sun.COM #endif 337956Sxiuyan.wang@Sun.COM 347956Sxiuyan.wang@Sun.COM #ifndef sun 357956Sxiuyan.wang@Sun.COM #include "unm_nic_config.h" 367956Sxiuyan.wang@Sun.COM #include "unm_compiler_defs.h" 377956Sxiuyan.wang@Sun.COM #endif 387956Sxiuyan.wang@Sun.COM 397956Sxiuyan.wang@Sun.COM #define IP_ALIGNMENT_BYTES 2 /* make ip aligned on 16byteaddr */ 407956Sxiuyan.wang@Sun.COM #define P2_MAX_MTU (8000) 417956Sxiuyan.wang@Sun.COM #define P3_MAX_MTU (9600) 427956Sxiuyan.wang@Sun.COM #define NX_ETHERMTU 1500 437956Sxiuyan.wang@Sun.COM #define NX_MAX_ETHERHDR 32 /* This contains some padding */ 447956Sxiuyan.wang@Sun.COM 457956Sxiuyan.wang@Sun.COM #define NX_RX_NORMAL_BUF_MAX_LEN (NX_MAX_ETHERHDR + NX_ETHERMTU) 467956Sxiuyan.wang@Sun.COM #define NX_P2_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P2_MAX_MTU) 477956Sxiuyan.wang@Sun.COM #define NX_P3_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P3_MAX_MTU) 487956Sxiuyan.wang@Sun.COM 497956Sxiuyan.wang@Sun.COM #define MAX_RX_LRO_BUFFER_LENGTH ((8*1024) - 512) 507956Sxiuyan.wang@Sun.COM #define RX_LRO_DMA_MAP_LEN (MAX_RX_LRO_BUFFER_LENGTH -\ 517956Sxiuyan.wang@Sun.COM IP_ALIGNMENT_BYTES) 527956Sxiuyan.wang@Sun.COM 537956Sxiuyan.wang@Sun.COM /* Opcodes to be used with the commands */ 547956Sxiuyan.wang@Sun.COM #define TX_ETHER_PKT 0x01 557956Sxiuyan.wang@Sun.COM /* The following opcodes are for IP checksum */ 567956Sxiuyan.wang@Sun.COM #define TX_TCP_PKT 0x02 577956Sxiuyan.wang@Sun.COM #define TX_UDP_PKT 0x03 587956Sxiuyan.wang@Sun.COM #define TX_IP_PKT 0x04 597956Sxiuyan.wang@Sun.COM #define TX_TCP_LSO 0x05 607956Sxiuyan.wang@Sun.COM #define TX_IPSEC 0x06 617956Sxiuyan.wang@Sun.COM #define TX_IPSEC_CMD 0x07 627956Sxiuyan.wang@Sun.COM 637956Sxiuyan.wang@Sun.COM #define NETXEN_MAC_NOOP 0 647956Sxiuyan.wang@Sun.COM #define NETXEN_MAC_ADD 1 657956Sxiuyan.wang@Sun.COM #define NETXEN_MAC_DEL 2 667956Sxiuyan.wang@Sun.COM 677956Sxiuyan.wang@Sun.COM /* The following opcodes are for internal consumption. */ 687956Sxiuyan.wang@Sun.COM #define UNM_CONTROL_OP 0x10 697956Sxiuyan.wang@Sun.COM #define PEGNET_REQUEST 0x11 707956Sxiuyan.wang@Sun.COM #define NX_HOST_REQUEST 0x13 717956Sxiuyan.wang@Sun.COM #define NX_NIC_REQUEST 0x14 727956Sxiuyan.wang@Sun.COM #define NX_NIC_LRO_REQUEST 0x15 737956Sxiuyan.wang@Sun.COM 747956Sxiuyan.wang@Sun.COM #define NX_MAC_EVENT 0x1 757956Sxiuyan.wang@Sun.COM 767956Sxiuyan.wang@Sun.COM enum { 777956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_START = 0, 787956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_RSS, 797956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_RSS_TBL, 807956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_INTR_COALESCE, 817956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_LED, 827956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_PROMISCUOUS, 837956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_CONFIG_L2_MAC, 847956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_LRO_REQUEST, 857956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_GET_SNMP_STATS, 867956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_PROXY_START_REQUEST, 877956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_PROXY_STOP_REQUEST, 887956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_PROXY_SET_MTU, 897956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE, 907956Sxiuyan.wang@Sun.COM NX_H2P_OPCODE_GET_FINGER_PRINT_REQUEST, 917956Sxiuyan.wang@Sun.COM NX_H2P_OPCODE_INSTALL_LICENSE_REQUEST, 927956Sxiuyan.wang@Sun.COM NX_H2P_OPCODE_GET_LICENSE_CAPABILITY_REQUEST, 937956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_GET_NET_STATS, 947956Sxiuyan.wang@Sun.COM NX_NIC_H2C_OPCODE_LAST 957956Sxiuyan.wang@Sun.COM }; 967956Sxiuyan.wang@Sun.COM 977956Sxiuyan.wang@Sun.COM #define VPORT_MISS_MODE_DROP 0 /* drop all unmatched */ 987956Sxiuyan.wang@Sun.COM #define VPORT_MISS_MODE_ACCEPT_ALL 1 /* accept all packets */ 997956Sxiuyan.wang@Sun.COM #define VPORT_MISS_MODE_ACCEPT_MULTI 2 /* accept unmatched multicast */ 1007956Sxiuyan.wang@Sun.COM 1017956Sxiuyan.wang@Sun.COM #ifdef UNM_RSS 1027956Sxiuyan.wang@Sun.COM #define RSS_CNTRL_CMD 0x20 1037956Sxiuyan.wang@Sun.COM #endif 1047956Sxiuyan.wang@Sun.COM #define MAX_NUM_CARDS 4 1057956Sxiuyan.wang@Sun.COM #define MAX_NUM_PORTS 4 /* Deprecated. donot use this */ 1067956Sxiuyan.wang@Sun.COM #define MAX_NIU_PORTS MAX_NUM_PORTS 1077956Sxiuyan.wang@Sun.COM #define PORT1 0 1087956Sxiuyan.wang@Sun.COM #define PORT2 1 1097956Sxiuyan.wang@Sun.COM #define PORT3 2 1107956Sxiuyan.wang@Sun.COM #define PORT4 3 1117956Sxiuyan.wang@Sun.COM 1127956Sxiuyan.wang@Sun.COM 1137956Sxiuyan.wang@Sun.COM #define DESC_CHAIN 0xFF /* descriptor command continuation */ 1147956Sxiuyan.wang@Sun.COM 1157956Sxiuyan.wang@Sun.COM #define MAX_BUFFERS_PER_CMD 16 1167956Sxiuyan.wang@Sun.COM #define MAX_BUFFERS_PER_DESC 4 1177956Sxiuyan.wang@Sun.COM 1187956Sxiuyan.wang@Sun.COM #define NX_P2_C0 0x24 1197956Sxiuyan.wang@Sun.COM #define NX_P2_C1 0x25 1207956Sxiuyan.wang@Sun.COM 1217956Sxiuyan.wang@Sun.COM #define DUMMY_BUF_UNINIT 0x55555555 1227956Sxiuyan.wang@Sun.COM #define DUMMY_BUF_INIT 0 1237956Sxiuyan.wang@Sun.COM 1247956Sxiuyan.wang@Sun.COM /* 1257956Sxiuyan.wang@Sun.COM * Following are the states of the Phantom. Phantom will set them and 1267956Sxiuyan.wang@Sun.COM * Host will read to check if the fields are correct. 1277956Sxiuyan.wang@Sun.COM */ 1287956Sxiuyan.wang@Sun.COM #define PHAN_INITIALIZE_START 0xff00 1297956Sxiuyan.wang@Sun.COM #define PHAN_INITIALIZE_FAILED 0xffff 1307956Sxiuyan.wang@Sun.COM #define PHAN_INITIALIZE_COMPLETE 0xff01 1317956Sxiuyan.wang@Sun.COM 1327956Sxiuyan.wang@Sun.COM /* Host writes the following to notify that it has done the init-handshake */ 1337956Sxiuyan.wang@Sun.COM #define PHAN_INITIALIZE_ACK 0xf00f 1347956Sxiuyan.wang@Sun.COM 1357956Sxiuyan.wang@Sun.COM /* Following defines will be used in the status descriptor */ 1367956Sxiuyan.wang@Sun.COM #define TX_ETHER_PKT_COMPLETE 0xB /* same for both commands */ 1377956Sxiuyan.wang@Sun.COM 1387956Sxiuyan.wang@Sun.COM #define NUM_RCV_DESC_RINGS 3 /* No of Rcv Descriptor contexts */ 1397956Sxiuyan.wang@Sun.COM 1407956Sxiuyan.wang@Sun.COM /* descriptor types */ 1417956Sxiuyan.wang@Sun.COM #define RCV_DESC_NORMAL 0x01 1427956Sxiuyan.wang@Sun.COM #define RCV_DESC_JUMBO 0x02 1437956Sxiuyan.wang@Sun.COM #define RCV_DESC_LRO 0x04 1447956Sxiuyan.wang@Sun.COM #define RCV_DESC_NORMAL_CTXID 0 1457956Sxiuyan.wang@Sun.COM #define RCV_DESC_JUMBO_CTXID 1 1467956Sxiuyan.wang@Sun.COM #define RCV_DESC_LRO_CTXID 2 1477956Sxiuyan.wang@Sun.COM 1487956Sxiuyan.wang@Sun.COM #define RCV_DESC_TYPE(ID) \ 1497956Sxiuyan.wang@Sun.COM ((ID == RCV_DESC_JUMBO_CTXID) ? RCV_DESC_JUMBO : \ 1507956Sxiuyan.wang@Sun.COM ((ID == RCV_DESC_LRO_CTXID) ? RCV_DESC_LRO : (RCV_DESC_NORMAL))) 1517956Sxiuyan.wang@Sun.COM 1527956Sxiuyan.wang@Sun.COM #define RCV_DESC_TYPE_NAME(ID) \ 1537956Sxiuyan.wang@Sun.COM ((ID == RCV_DESC_JUMBO_CTXID) ? "Jumbo" : \ 1547956Sxiuyan.wang@Sun.COM (ID == RCV_DESC_LRO_CTXID) ? "LRO" : \ 1557956Sxiuyan.wang@Sun.COM (ID == RCV_DESC_NORMAL_CTXID) ? "Normal" : "Unknown") 1567956Sxiuyan.wang@Sun.COM 1577956Sxiuyan.wang@Sun.COM #define MAX_CMD_DESCRIPTORS 4096 1587956Sxiuyan.wang@Sun.COM #define MAX_CMD_DESCRIPTORS_HOST (MAX_CMD_DESCRIPTORS / 4) 1597956Sxiuyan.wang@Sun.COM 1607956Sxiuyan.wang@Sun.COM #define MAX_RCV_DESCRIPTORS 8192 1617956Sxiuyan.wang@Sun.COM #define MAX_JUMBO_RCV_DESCRIPTORS 1024 1627956Sxiuyan.wang@Sun.COM #define MAX_LRO_RCV_DESCRIPTORS 16 1637956Sxiuyan.wang@Sun.COM 1647956Sxiuyan.wang@Sun.COM #define NX_MAX_SUPPORTED_RDS_SIZE (32 * 1024) 1657956Sxiuyan.wang@Sun.COM #define NX_MAX_SUPPORTED_JUMBO_RDS_SIZE (4 * 1024) 1667956Sxiuyan.wang@Sun.COM 1677956Sxiuyan.wang@Sun.COM #define PHAN_PEG_RCV_INITIALIZED 0xff01 1687956Sxiuyan.wang@Sun.COM #define PHAN_PEG_RCV_START_INITIALIZE 0xff00 1697956Sxiuyan.wang@Sun.COM 1707956Sxiuyan.wang@Sun.COM #define get_next_index(index, length) ((((index) + 1) == length)?0:(index) +1) 1717956Sxiuyan.wang@Sun.COM 1727956Sxiuyan.wang@Sun.COM #define get_index_range(index, length, count) \ 1737956Sxiuyan.wang@Sun.COM ((((index) + (count)) >= length)? \ 1747956Sxiuyan.wang@Sun.COM (((index) + (count))-(length)):((index) + (count))) 1757956Sxiuyan.wang@Sun.COM 1767956Sxiuyan.wang@Sun.COM #define UNM_FLOW_TICKS_PER_SEC 2048 1777956Sxiuyan.wang@Sun.COM #define UNM_FLOW_TO_TV_SHIFT_SEC 11 1787956Sxiuyan.wang@Sun.COM #define UNM_FLOW_TO_TV_SHIFT_USEC 9 1797956Sxiuyan.wang@Sun.COM #define UNM_FLOW_TICK_USEC (1000000ULL/UNM_FLOW_TICKS_PER_SEC) 1807956Sxiuyan.wang@Sun.COM #define UNM_GLOBAL_TICKS_PER_SEC (4*UNM_FLOW_TICKS_PER_SEC) 1817956Sxiuyan.wang@Sun.COM #define UNM_GLOBAL_TICK_USEC (1000000ULL/UNM_GLOBAL_TICKS_PER_SEC) 1827956Sxiuyan.wang@Sun.COM 1837956Sxiuyan.wang@Sun.COM 1847956Sxiuyan.wang@Sun.COM /* 1857956Sxiuyan.wang@Sun.COM * Following data structures describe the descriptors that will be used. 1867956Sxiuyan.wang@Sun.COM * Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when 1877956Sxiuyan.wang@Sun.COM * we are doing LSO (above the 1500 size packet) only. 1887956Sxiuyan.wang@Sun.COM * This is an overhead but we need it. Let me know if you have questions. 1897956Sxiuyan.wang@Sun.COM */ 1907956Sxiuyan.wang@Sun.COM 1917956Sxiuyan.wang@Sun.COM /* 1927956Sxiuyan.wang@Sun.COM * the size of reference handle been changed to 16 bits to pass the MSS fields 1937956Sxiuyan.wang@Sun.COM * for the LSO packet 1947956Sxiuyan.wang@Sun.COM */ 1957956Sxiuyan.wang@Sun.COM 196*9436SJing.Xiong@Sun.COM #define FLAGS_MCAST 0x01 1977956Sxiuyan.wang@Sun.COM #define FLAGS_LSO_ENABLED 0x02 1987956Sxiuyan.wang@Sun.COM #define FLAGS_IPSEC_SA_ADD 0x04 199*9436SJing.Xiong@Sun.COM #define FLAGS_IPSEC_SA_DELETE 0x08 2007956Sxiuyan.wang@Sun.COM #define FLAGS_VLAN_TAGGED 0x10 2017956Sxiuyan.wang@Sun.COM 2027956Sxiuyan.wang@Sun.COM #if UNM_CONF_PROCESSOR == UNM_CONF_X86 2037956Sxiuyan.wang@Sun.COM 2047956Sxiuyan.wang@Sun.COM #ifndef U64 2057956Sxiuyan.wang@Sun.COM typedef unsigned long long U64; 2067956Sxiuyan.wang@Sun.COM typedef uint32_t U32; 2077956Sxiuyan.wang@Sun.COM typedef uint16_t U16; 2087956Sxiuyan.wang@Sun.COM typedef uint8_t U8; 2097956Sxiuyan.wang@Sun.COM #endif 2107956Sxiuyan.wang@Sun.COM 2117956Sxiuyan.wang@Sun.COM #endif 2127956Sxiuyan.wang@Sun.COM 2137956Sxiuyan.wang@Sun.COM #define NUM_SUPPORTED_RINGSETS 4 2147956Sxiuyan.wang@Sun.COM #define MAX_RING_CTX 4 2157956Sxiuyan.wang@Sun.COM #define UNM_CTX_SIGNATURE 0xdee0 2167956Sxiuyan.wang@Sun.COM #define UNM_CTX_RESET 0xbad0 2177956Sxiuyan.wang@Sun.COM #define UNM_CTX_D3_RESET 0xacc0 2187956Sxiuyan.wang@Sun.COM 2197956Sxiuyan.wang@Sun.COM /* define opcode for ctx_msg */ 2207956Sxiuyan.wang@Sun.COM #define RX_PRODUCER 0 2217956Sxiuyan.wang@Sun.COM #define RX_PRODUCER_JUMBO 1 2227956Sxiuyan.wang@Sun.COM #define RX_PRODUCER_LRO 2 2237956Sxiuyan.wang@Sun.COM #define TX_PRODUCER 3 2247956Sxiuyan.wang@Sun.COM #define UPDATE_STATUS_CONSUMER 4 2257956Sxiuyan.wang@Sun.COM #define RESET_CTX 5 2267956Sxiuyan.wang@Sun.COM 2277956Sxiuyan.wang@Sun.COM #define NUM_DB_CODE 6 2287956Sxiuyan.wang@Sun.COM 2297956Sxiuyan.wang@Sun.COM #define UNM_RCV_PRODUCER(ringid) (ringid) 2307956Sxiuyan.wang@Sun.COM #define UNM_CMD_PRODUCER TX_PRODUCER 2317956Sxiuyan.wang@Sun.COM #define UNM_RCV_STATUS_CONSUMER UPDATE_STATUS_CONSUMER 2327956Sxiuyan.wang@Sun.COM 2337956Sxiuyan.wang@Sun.COM typedef struct __msg 2347956Sxiuyan.wang@Sun.COM { 2358687SJing.Xiong@Sun.COM __uint32_t PegId:2, /* 0x2 for tx and 01 for rx */ 2368687SJing.Xiong@Sun.COM privId:1, /* must be 1 */ 2378687SJing.Xiong@Sun.COM Count:15, /* for doorbell */ 2388687SJing.Xiong@Sun.COM CtxId:10, /* Ctx_id */ 2397956Sxiuyan.wang@Sun.COM Opcode:4; /* opcode */ 2407956Sxiuyan.wang@Sun.COM }ctx_msg, CTX_MSG, *PCTX_MSG; 2417956Sxiuyan.wang@Sun.COM 2427956Sxiuyan.wang@Sun.COM typedef struct __int_msg 2437956Sxiuyan.wang@Sun.COM { 2448687SJing.Xiong@Sun.COM __uint32_t Count:18, /* INT */ 2457956Sxiuyan.wang@Sun.COM ConsumerIdx:10, 2468687SJing.Xiong@Sun.COM CtxId:4; /* Ctx_id */ 2477956Sxiuyan.wang@Sun.COM 2487956Sxiuyan.wang@Sun.COM }int_msg, INT_MSG, *PINT_MSG; 2497956Sxiuyan.wang@Sun.COM 2507956Sxiuyan.wang@Sun.COM /* For use in CRB_MPORT_MODE */ 2517956Sxiuyan.wang@Sun.COM #define MPORT_SINGLE_FUNCTION_MODE 0x1111 2527956Sxiuyan.wang@Sun.COM #define MPORT_MULTI_FUNCTION_MODE 0x2222 2537956Sxiuyan.wang@Sun.COM 2547956Sxiuyan.wang@Sun.COM typedef struct _RcvContext 2557956Sxiuyan.wang@Sun.COM { 2567956Sxiuyan.wang@Sun.COM __uint32_t RcvRingAddrLo; 2577956Sxiuyan.wang@Sun.COM __uint32_t RcvRingAddrHi; 2587956Sxiuyan.wang@Sun.COM __uint32_t RcvRingSize; 2597956Sxiuyan.wang@Sun.COM __uint32_t Rsrv; 2607956Sxiuyan.wang@Sun.COM }RcvContext; 2617956Sxiuyan.wang@Sun.COM 2627956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(64) _RingContext 2637956Sxiuyan.wang@Sun.COM { 2647956Sxiuyan.wang@Sun.COM 2657956Sxiuyan.wang@Sun.COM /* one command ring */ 2667956Sxiuyan.wang@Sun.COM __uint64_t CMD_CONSUMER_OFFSET; 2677956Sxiuyan.wang@Sun.COM __uint32_t CmdRingAddrLo; 2687956Sxiuyan.wang@Sun.COM __uint32_t CmdRingAddrHi; 2697956Sxiuyan.wang@Sun.COM __uint32_t CmdRingSize; 2707956Sxiuyan.wang@Sun.COM __uint32_t Rsrv; 2717956Sxiuyan.wang@Sun.COM 2727956Sxiuyan.wang@Sun.COM /* three receive rings */ 2737956Sxiuyan.wang@Sun.COM RcvContext RcvContext[3]; 2747956Sxiuyan.wang@Sun.COM 2757956Sxiuyan.wang@Sun.COM /* one status ring */ 2767956Sxiuyan.wang@Sun.COM __uint32_t StsRingAddrLo; 2777956Sxiuyan.wang@Sun.COM __uint32_t StsRingAddrHi; 2787956Sxiuyan.wang@Sun.COM __uint32_t StsRingSize; 2797956Sxiuyan.wang@Sun.COM 2807956Sxiuyan.wang@Sun.COM __uint32_t CtxId; 2817956Sxiuyan.wang@Sun.COM 2828687SJing.Xiong@Sun.COM __uint64_t D3_STATE_REGISTER; 2838687SJing.Xiong@Sun.COM __uint32_t DummyDmaAddrLo; 2848687SJing.Xiong@Sun.COM __uint32_t DummyDmaAddrHi; 2857956Sxiuyan.wang@Sun.COM 2867956Sxiuyan.wang@Sun.COM }POSTALIGN(64) RingContext, RING_CTX, *PRING_CTX; 2877956Sxiuyan.wang@Sun.COM 2887956Sxiuyan.wang@Sun.COM #ifdef UNM_RSS 2897956Sxiuyan.wang@Sun.COM /* 2907956Sxiuyan.wang@Sun.COM * RSS_SreInfo{} has the information for SRE to calculate the hash value 2917956Sxiuyan.wang@Sun.COM * Will be passed by the host=> as part of comd descriptor... 2927956Sxiuyan.wang@Sun.COM */ 2937956Sxiuyan.wang@Sun.COM 2947956Sxiuyan.wang@Sun.COM #if UNM_CONF_PROCESSOR == UNM_CONF_X86 2957956Sxiuyan.wang@Sun.COM typedef struct _RSS_SreInfo { 2967956Sxiuyan.wang@Sun.COM U32 HashKeySize; 2977956Sxiuyan.wang@Sun.COM U32 HashInformation; 2987956Sxiuyan.wang@Sun.COM char key[40]; 2997956Sxiuyan.wang@Sun.COM }RSS_SreInfo; 3007956Sxiuyan.wang@Sun.COM #endif 3017956Sxiuyan.wang@Sun.COM 3027956Sxiuyan.wang@Sun.COM /* 3037956Sxiuyan.wang@Sun.COM * The following Descriptor is used to send RSS commands to the 3047956Sxiuyan.wang@Sun.COM * PEG.... to be do the SRE registers.. 3057956Sxiuyan.wang@Sun.COM */ 3067956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(64) _rssCmdDesc 3077956Sxiuyan.wang@Sun.COM { 3087956Sxiuyan.wang@Sun.COM 3097956Sxiuyan.wang@Sun.COM /* 3107956Sxiuyan.wang@Sun.COM * To keep the opcode at the same location as 3117956Sxiuyan.wang@Sun.COM * the cmdDescType0, we will have to breakup the key into 3127956Sxiuyan.wang@Sun.COM * 2 areas.... Dont like it but for now will do... FSL 3137956Sxiuyan.wang@Sun.COM */ 3147956Sxiuyan.wang@Sun.COM 3157956Sxiuyan.wang@Sun.COM #if UNM_CONF_PROCESSOR == UNM_CONF_X86 3167956Sxiuyan.wang@Sun.COM U8 Key0[16]; 3177956Sxiuyan.wang@Sun.COM 3187956Sxiuyan.wang@Sun.COM U64 HashMethod:32, 3197956Sxiuyan.wang@Sun.COM HashKeySize:8, 3207956Sxiuyan.wang@Sun.COM Unused: 16, 3217956Sxiuyan.wang@Sun.COM opcode:8; 3227956Sxiuyan.wang@Sun.COM 3237956Sxiuyan.wang@Sun.COM U8 Key1[24]; 3247956Sxiuyan.wang@Sun.COM U64 Unused1; 3257956Sxiuyan.wang@Sun.COM U64 Unused2; 3267956Sxiuyan.wang@Sun.COM #else 3277956Sxiuyan.wang@Sun.COM 3287956Sxiuyan.wang@Sun.COM unm_msgword_t Key0[2]; 3297956Sxiuyan.wang@Sun.COM unm_halfmsgword_t HashMethod; 3308687SJing.Xiong@Sun.COM unm_halfmsgword_t 3317956Sxiuyan.wang@Sun.COM HashKeySize:8, 3327956Sxiuyan.wang@Sun.COM Unused:16, 3337956Sxiuyan.wang@Sun.COM opcode:8; 3347956Sxiuyan.wang@Sun.COM 3358687SJing.Xiong@Sun.COM unm_msgword_t Key1[3]; 3368687SJing.Xiong@Sun.COM unm_msgword_t Unused1; 3378687SJing.Xiong@Sun.COM unm_msgword_t Unused2; 3387956Sxiuyan.wang@Sun.COM 3397956Sxiuyan.wang@Sun.COM #endif 3407956Sxiuyan.wang@Sun.COM 3417956Sxiuyan.wang@Sun.COM } POSTALIGN(64) rssCmdDesc_t; 3427956Sxiuyan.wang@Sun.COM 3437956Sxiuyan.wang@Sun.COM 3447956Sxiuyan.wang@Sun.COM #endif /* UNM_RSS */ 3457956Sxiuyan.wang@Sun.COM 3467956Sxiuyan.wang@Sun.COM 3477956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(64) cmdDescType0 3487956Sxiuyan.wang@Sun.COM { 3497956Sxiuyan.wang@Sun.COM union { 3507956Sxiuyan.wang@Sun.COM struct { 3517956Sxiuyan.wang@Sun.COM __uint32_t tcpHdrOffset:8, /* For LSO only */ 3528687SJing.Xiong@Sun.COM ipHdrOffset:8, /* For LSO only */ 3538687SJing.Xiong@Sun.COM flags:7, /* as defined above */ 3547956Sxiuyan.wang@Sun.COM /* This location/size must not change... */ 3558687SJing.Xiong@Sun.COM opcode:6, 3568687SJing.Xiong@Sun.COM Unused:3; 3577956Sxiuyan.wang@Sun.COM /* total number of segments (buffers */ 3587956Sxiuyan.wang@Sun.COM __uint32_t numOfBuffers:8, 3597956Sxiuyan.wang@Sun.COM /* for this packet. (could be more than 4) */ 3607956Sxiuyan.wang@Sun.COM 3618687SJing.Xiong@Sun.COM /* Total size of the packet */ 3628687SJing.Xiong@Sun.COM totalLength:24; 3638687SJing.Xiong@Sun.COM }s1; 3648687SJing.Xiong@Sun.COM __uint64_t word0; 3657956Sxiuyan.wang@Sun.COM }u1; 3667956Sxiuyan.wang@Sun.COM 3678687SJing.Xiong@Sun.COM union { 3687956Sxiuyan.wang@Sun.COM struct { 3697956Sxiuyan.wang@Sun.COM __uint32_t AddrLowPart2; 3707956Sxiuyan.wang@Sun.COM __uint32_t AddrHighPart2; 3717956Sxiuyan.wang@Sun.COM }s1; 3727956Sxiuyan.wang@Sun.COM __uint64_t AddrBuffer2; 3737956Sxiuyan.wang@Sun.COM __uint64_t word1; 3747956Sxiuyan.wang@Sun.COM }u2; 3757956Sxiuyan.wang@Sun.COM 3767956Sxiuyan.wang@Sun.COM union { 3777956Sxiuyan.wang@Sun.COM struct { 3787956Sxiuyan.wang@Sun.COM /* changed to U16 to add mss */ 3797956Sxiuyan.wang@Sun.COM __uint32_t referenceHandle:16, 3807956Sxiuyan.wang@Sun.COM /* passed by NDIS_PACKET for LSO */ 3817956Sxiuyan.wang@Sun.COM mss:16; 3827956Sxiuyan.wang@Sun.COM __uint32_t port:4, 3837956Sxiuyan.wang@Sun.COM ctx_id:4, 3847956Sxiuyan.wang@Sun.COM /* LSO only : MAC+IP+TCP Hdr size */ 3857956Sxiuyan.wang@Sun.COM totalHdrLength:8, 3867956Sxiuyan.wang@Sun.COM /* IPSec offoad only */ 3877956Sxiuyan.wang@Sun.COM connID:16; 3887956Sxiuyan.wang@Sun.COM }s1; 3897956Sxiuyan.wang@Sun.COM __uint64_t word2; 3907956Sxiuyan.wang@Sun.COM }u3; 3917956Sxiuyan.wang@Sun.COM 3927956Sxiuyan.wang@Sun.COM union { 3937956Sxiuyan.wang@Sun.COM struct { 3947956Sxiuyan.wang@Sun.COM __uint32_t AddrLowPart3; 3957956Sxiuyan.wang@Sun.COM __uint32_t AddrHighPart3; 3967956Sxiuyan.wang@Sun.COM }s1; 3977956Sxiuyan.wang@Sun.COM __uint64_t AddrBuffer3; 3987956Sxiuyan.wang@Sun.COM __uint64_t word3; 3997956Sxiuyan.wang@Sun.COM }u4; 4007956Sxiuyan.wang@Sun.COM 4017956Sxiuyan.wang@Sun.COM union { 4027956Sxiuyan.wang@Sun.COM struct { 4037956Sxiuyan.wang@Sun.COM __uint32_t AddrLowPart1; 4047956Sxiuyan.wang@Sun.COM __uint32_t AddrHighPart1; 4057956Sxiuyan.wang@Sun.COM }s1; 4067956Sxiuyan.wang@Sun.COM __uint64_t AddrBuffer1; 4077956Sxiuyan.wang@Sun.COM __uint64_t word4; 4087956Sxiuyan.wang@Sun.COM }u5; 4097956Sxiuyan.wang@Sun.COM 4107956Sxiuyan.wang@Sun.COM union { 4117956Sxiuyan.wang@Sun.COM struct { 4127956Sxiuyan.wang@Sun.COM __uint32_t buffer1Length:16, 4137956Sxiuyan.wang@Sun.COM buffer2Length:16; 4147956Sxiuyan.wang@Sun.COM __uint32_t buffer3Length:16, 4157956Sxiuyan.wang@Sun.COM buffer4Length:16; 4167956Sxiuyan.wang@Sun.COM }s1; 4177956Sxiuyan.wang@Sun.COM __uint64_t word5; 4187956Sxiuyan.wang@Sun.COM }u6; 4197956Sxiuyan.wang@Sun.COM 4207956Sxiuyan.wang@Sun.COM union { 4217956Sxiuyan.wang@Sun.COM struct { 4227956Sxiuyan.wang@Sun.COM __uint32_t AddrLowPart4; 4237956Sxiuyan.wang@Sun.COM __uint32_t AddrHighPart4; 4247956Sxiuyan.wang@Sun.COM }s1; 4257956Sxiuyan.wang@Sun.COM __uint64_t AddrBuffer4; 4267956Sxiuyan.wang@Sun.COM __uint64_t word6; 4277956Sxiuyan.wang@Sun.COM }u7; 4287956Sxiuyan.wang@Sun.COM 429*9436SJing.Xiong@Sun.COM __uint64_t mcastAddr; 4307956Sxiuyan.wang@Sun.COM 4317956Sxiuyan.wang@Sun.COM } POSTALIGN(64) cmdDescType0_t; 4327956Sxiuyan.wang@Sun.COM 4337956Sxiuyan.wang@Sun.COM /* Note: sizeof(rcvDesc) should always be a mutliple of 2 */ 4347956Sxiuyan.wang@Sun.COM typedef struct rcvDesc 4357956Sxiuyan.wang@Sun.COM { 4368687SJing.Xiong@Sun.COM __uint32_t referenceHandle:16, 4377956Sxiuyan.wang@Sun.COM flags:16; 4388687SJing.Xiong@Sun.COM __uint32_t 4397956Sxiuyan.wang@Sun.COM /* allocated buffer length (usually 2K) */ 4407956Sxiuyan.wang@Sun.COM bufferLength:32; 4417956Sxiuyan.wang@Sun.COM __uint64_t AddrBuffer; 4427956Sxiuyan.wang@Sun.COM } rcvDesc_t; 4437956Sxiuyan.wang@Sun.COM 4447956Sxiuyan.wang@Sun.COM /* for status field in statusDesc_t */ 4457956Sxiuyan.wang@Sun.COM #define STATUS_NEED_CKSUM (1) 4467956Sxiuyan.wang@Sun.COM #define STATUS_CKSUM_OK (2) 4477956Sxiuyan.wang@Sun.COM #define STATUS_CKSUM_NOT_OK (3) 4487956Sxiuyan.wang@Sun.COM 4497956Sxiuyan.wang@Sun.COM /* owner bits of statusDesc_t */ 4507956Sxiuyan.wang@Sun.COM #define STATUS_OWNER_HOST (1ULL) 4517956Sxiuyan.wang@Sun.COM #define STATUS_OWNER_PHANTOM (2ULL) 4527956Sxiuyan.wang@Sun.COM #define HOST_STATUS_DESC ((STATUS_OWNER_HOST) << 48) 4537956Sxiuyan.wang@Sun.COM #define PHANTOM_STATUS_DESC ((STATUS_OWNER_PHANTOM) << 48) 4547956Sxiuyan.wang@Sun.COM 4557956Sxiuyan.wang@Sun.COM #define UNM_PROT_IP (1) 4567956Sxiuyan.wang@Sun.COM #define UNM_PROT_UNKNOWN (0) 4577956Sxiuyan.wang@Sun.COM 4587956Sxiuyan.wang@Sun.COM /* LRO specific bits of statusDesc_t */ 4597956Sxiuyan.wang@Sun.COM #define LRO_LAST_FRAG (1) 4607956Sxiuyan.wang@Sun.COM #define LRO_NORMAL_FRAG (0) 4617956Sxiuyan.wang@Sun.COM #define LRO_LAST_FRAG_DESC ((LRO_LAST_FRAG)<<63) 4627956Sxiuyan.wang@Sun.COM #define LRO_NORMAL_FRAG_DESC ((LRO_NORMAL_FRAG)<<63) 4637956Sxiuyan.wang@Sun.COM 4647956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(16) statusDesc { 4658687SJing.Xiong@Sun.COM union { 4667956Sxiuyan.wang@Sun.COM struct { 4677956Sxiuyan.wang@Sun.COM /* initially to be used but noe now */ 4687956Sxiuyan.wang@Sun.COM __uint32_t port:4, 4697956Sxiuyan.wang@Sun.COM /* completion status may not have use */ 4707956Sxiuyan.wang@Sun.COM status:4, 4717956Sxiuyan.wang@Sun.COM /* type/index of descriptor ring */ 4727956Sxiuyan.wang@Sun.COM type:4, 4737956Sxiuyan.wang@Sun.COM /* NIC mode...no use yet */ 4747956Sxiuyan.wang@Sun.COM totalLength:16, 4757956Sxiuyan.wang@Sun.COM /* handle for the associated packet */ 4767956Sxiuyan.wang@Sun.COM referenceHandle_lo:4; 4777956Sxiuyan.wang@Sun.COM /* handle for the associated packet */ 4787956Sxiuyan.wang@Sun.COM __uint32_t referenceHandle_hi:12, 4797956Sxiuyan.wang@Sun.COM /* Pkt protocol */ 4807956Sxiuyan.wang@Sun.COM prot:4, 4817956Sxiuyan.wang@Sun.COM pkt_offset:5, 4827956Sxiuyan.wang@Sun.COM /* 4837956Sxiuyan.wang@Sun.COM * This indicates the num of descriptors part of this descriptor chain. 4847956Sxiuyan.wang@Sun.COM */ 4857956Sxiuyan.wang@Sun.COM descCnt:3, 4867956Sxiuyan.wang@Sun.COM owner:2, 4877956Sxiuyan.wang@Sun.COM opcode:6; 4887956Sxiuyan.wang@Sun.COM 4897956Sxiuyan.wang@Sun.COM __uint32_t HashValue; 4907956Sxiuyan.wang@Sun.COM __uint16_t vlan; 4917956Sxiuyan.wang@Sun.COM __uint8_t HashType; 4927956Sxiuyan.wang@Sun.COM 4937956Sxiuyan.wang@Sun.COM union { 4947956Sxiuyan.wang@Sun.COM /* 4957956Sxiuyan.wang@Sun.COM * For LRO count is set 4967956Sxiuyan.wang@Sun.COM * Last LRO fragment is set when it is 4977956Sxiuyan.wang@Sun.COM * the last frag as the name says. 4987956Sxiuyan.wang@Sun.COM */ 4997956Sxiuyan.wang@Sun.COM __uint8_t lro_frag:7, last_lro_frag:1; 5007956Sxiuyan.wang@Sun.COM 5017956Sxiuyan.wang@Sun.COM /* 5027956Sxiuyan.wang@Sun.COM * Used to indicate direction in case 5037956Sxiuyan.wang@Sun.COM * of captured packets. Egress will 5047956Sxiuyan.wang@Sun.COM * contain EPG input, while ingress 5057956Sxiuyan.wang@Sun.COM * contains an skb copy. 5067956Sxiuyan.wang@Sun.COM */ 5077956Sxiuyan.wang@Sun.COM #define NX_CAP_DIRN_OUT 1 5087956Sxiuyan.wang@Sun.COM #define NX_CAP_DIRN_IN 2 5097956Sxiuyan.wang@Sun.COM __uint8_t direction; 5107956Sxiuyan.wang@Sun.COM 5117956Sxiuyan.wang@Sun.COM /* 5127956Sxiuyan.wang@Sun.COM * Currently for Legacy this is 0. 5137956Sxiuyan.wang@Sun.COM */ 5147956Sxiuyan.wang@Sun.COM __uint8_t nr_frags; 5157956Sxiuyan.wang@Sun.COM }u11; 5167956Sxiuyan.wang@Sun.COM 5177956Sxiuyan.wang@Sun.COM }s1; 5187956Sxiuyan.wang@Sun.COM __uint64_t body[2]; 5197956Sxiuyan.wang@Sun.COM }u1; 5207956Sxiuyan.wang@Sun.COM 5217956Sxiuyan.wang@Sun.COM } POSTALIGN(16) statusDesc_t; 5227956Sxiuyan.wang@Sun.COM 5237956Sxiuyan.wang@Sun.COM 5247956Sxiuyan.wang@Sun.COM #define STATUS_OWNER_NAME(sd) \ 5257956Sxiuyan.wang@Sun.COM (((sd)->u1.s1.owner == STATUS_OWNER_HOST) ? "Host" : "Phantom") 5267956Sxiuyan.wang@Sun.COM 5277956Sxiuyan.wang@Sun.COM #ifdef UNM_IPSECOFFLOAD 5287956Sxiuyan.wang@Sun.COM 5297956Sxiuyan.wang@Sun.COM #define MAX_IPSEC_SAS 1024 5307956Sxiuyan.wang@Sun.COM #define RECEIVE_IPSEC_SA_BASE 0x8000 5317956Sxiuyan.wang@Sun.COM 5327956Sxiuyan.wang@Sun.COM /* 5337956Sxiuyan.wang@Sun.COM * IPSEC related structures and defines 5347956Sxiuyan.wang@Sun.COM */ 5357956Sxiuyan.wang@Sun.COM 5367956Sxiuyan.wang@Sun.COM /* Values for DIrFlag in the ipsec_sa_t structure below: */ 5377956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_SA_DIR_INBOUND 1 5387956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_SA_DIR_OUTBOUND 2 5397956Sxiuyan.wang@Sun.COM 5407956Sxiuyan.wang@Sun.COM /* Values for Operation Field below: */ 5417956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_SA_AUTHENTICATE 1 5427956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_SA_ENDECRYPT 2 5437956Sxiuyan.wang@Sun.COM 5447956Sxiuyan.wang@Sun.COM /* COnfidential Algorithm Types: */ 5457956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_CONF_NONE 0 // NULL encryption? 5467956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_CONF_DES 1 5477956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_CONF_RESERVED 2 5487956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_CONF_3DES 3 5497956Sxiuyan.wang@Sun.COM 5507956Sxiuyan.wang@Sun.COM /* Integrity algorithm (AH) types: */ 5517956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_INTEG_NONE 0 5527956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_INTEG_MD5 1 5537956Sxiuyan.wang@Sun.COM #define UNM_IPSEC_INTEG_SHA1 2 5547956Sxiuyan.wang@Sun.COM 5557956Sxiuyan.wang@Sun.COM #define UNM_PROTOCOL_OFFSET 0x9 // from ip header begin, in bytes 5567956Sxiuyan.wang@Sun.COM #define UNM_PKT_TYPE_AH 0x33 5577956Sxiuyan.wang@Sun.COM #define UNM_PKT_TYPE_ESP 0x32 5587956Sxiuyan.wang@Sun.COM 5597956Sxiuyan.wang@Sun.COM 5607956Sxiuyan.wang@Sun.COM /* 96 bits of output for MD5/SHA1 algorithms */ 5617956Sxiuyan.wang@Sun.COM #define UNM_AHOUTPUT_LENGTH 12 5627956Sxiuyan.wang@Sun.COM /* 5637956Sxiuyan.wang@Sun.COM * 8 bytes (64 bits) of ICV value for each block of DES_CBC 5647956Sxiuyan.wang@Sun.COM * at the begin of ESP payload 5657956Sxiuyan.wang@Sun.COM */ 5667956Sxiuyan.wang@Sun.COM #define UNM_DES_ICV_LENGTH 8 5677956Sxiuyan.wang@Sun.COM 5687956Sxiuyan.wang@Sun.COM #if UNM_CONF_PROCESSOR == UNM_CONF_X86 5697956Sxiuyan.wang@Sun.COM 5707956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(512) s_ipsec_sa { 5718687SJing.Xiong@Sun.COM U32 SrcAddr; 5727956Sxiuyan.wang@Sun.COM U32 SrcMask; 5737956Sxiuyan.wang@Sun.COM U32 DestAddr; 5747956Sxiuyan.wang@Sun.COM U32 DestMask; 5757956Sxiuyan.wang@Sun.COM U32 Protocol:8, 5767956Sxiuyan.wang@Sun.COM DirFlag:4, 5777956Sxiuyan.wang@Sun.COM IntegCtxInit:2, 5787956Sxiuyan.wang@Sun.COM ConfCtxInit:2, 5797956Sxiuyan.wang@Sun.COM No_of_keys:8, 5807956Sxiuyan.wang@Sun.COM Operation:8; 5817956Sxiuyan.wang@Sun.COM U32 IntegAlg:8, 5827956Sxiuyan.wang@Sun.COM IntegKeyLen:8, 5837956Sxiuyan.wang@Sun.COM ConfAlg:8, 5847956Sxiuyan.wang@Sun.COM ConfAlgKeyLen:8; 5857956Sxiuyan.wang@Sun.COM U32 SAIndex; 5867956Sxiuyan.wang@Sun.COM U32 SPI_Id; 5877956Sxiuyan.wang@Sun.COM U64 Key1[124]; 5887956Sxiuyan.wang@Sun.COM } POSTALIGN(512) unm_ipsec_sa_t; 5897956Sxiuyan.wang@Sun.COM 5907956Sxiuyan.wang@Sun.COM #else 5917956Sxiuyan.wang@Sun.COM 5927956Sxiuyan.wang@Sun.COM typedef struct PREALIGN(512) s_ipsec_sa { 5937956Sxiuyan.wang@Sun.COM unm_halfmsgword_t SrcAddr; 5947956Sxiuyan.wang@Sun.COM unm_halfmsgword_t SrcMask; 5957956Sxiuyan.wang@Sun.COM unm_halfmsgword_t DestAddr; 5967956Sxiuyan.wang@Sun.COM unm_halfmsgword_t DestMask; 5977956Sxiuyan.wang@Sun.COM unm_halfmsgword_t Protocol:8, 5987956Sxiuyan.wang@Sun.COM DirFlag:4, 5997956Sxiuyan.wang@Sun.COM IntegCtxInit:2, 6007956Sxiuyan.wang@Sun.COM ConfCtxInit:2, 6017956Sxiuyan.wang@Sun.COM No_of_keys:8, 6027956Sxiuyan.wang@Sun.COM Operation:8; 6037956Sxiuyan.wang@Sun.COM unm_halfmsgword_t IntegAlg:8, 6047956Sxiuyan.wang@Sun.COM IntegKeyLen:8, 6057956Sxiuyan.wang@Sun.COM ConfAlg:8, 6067956Sxiuyan.wang@Sun.COM ConfAlgKeyLen:8; 6077956Sxiuyan.wang@Sun.COM unm_halfmsgword_t SAIndex:32; 6087956Sxiuyan.wang@Sun.COM unm_halfmsgword_t SPI_Id:32; 6097956Sxiuyan.wang@Sun.COM /* to round up to 1K of structure */ 6107956Sxiuyan.wang@Sun.COM unm_msgword_t Key1[124]; 6117956Sxiuyan.wang@Sun.COM } POSTALIGN(512) unm_ipsec_sa_t; 6127956Sxiuyan.wang@Sun.COM 6137956Sxiuyan.wang@Sun.COM #endif /* NOT-X86 */ 6147956Sxiuyan.wang@Sun.COM 6157956Sxiuyan.wang@Sun.COM /* Other common header formats that may be needed */ 6167956Sxiuyan.wang@Sun.COM 6177956Sxiuyan.wang@Sun.COM typedef struct _unm_ip_header_s { 6187956Sxiuyan.wang@Sun.COM U32 HdrVer:8, 6197956Sxiuyan.wang@Sun.COM diffser:8, 6207956Sxiuyan.wang@Sun.COM TotalLength:16; 6217956Sxiuyan.wang@Sun.COM U32 ipId:16, 6227956Sxiuyan.wang@Sun.COM flagfrag:16; 6237956Sxiuyan.wang@Sun.COM U32 TTL:8, 6247956Sxiuyan.wang@Sun.COM Protocol:8, 6257956Sxiuyan.wang@Sun.COM Chksum:16; 6267956Sxiuyan.wang@Sun.COM U32 srcaddr; 6277956Sxiuyan.wang@Sun.COM U32 destaddr; 6287956Sxiuyan.wang@Sun.COM } unm_ip_header_t; 6297956Sxiuyan.wang@Sun.COM 6307956Sxiuyan.wang@Sun.COM typedef struct _unm_ah_header_s { 6317956Sxiuyan.wang@Sun.COM U32 NextProto:8, 6327956Sxiuyan.wang@Sun.COM length:8, 6337956Sxiuyan.wang@Sun.COM reserved:16; 6348687SJing.Xiong@Sun.COM U32 SPI; 6358687SJing.Xiong@Sun.COM U32 seqno; 6368687SJing.Xiong@Sun.COM U16 ICV; 6378687SJing.Xiong@Sun.COM U16 ICV1; 6388687SJing.Xiong@Sun.COM U16 ICV2; 6398687SJing.Xiong@Sun.COM U16 ICV3; 6408687SJing.Xiong@Sun.COM U16 ICV4; 6418687SJing.Xiong@Sun.COM U16 ICV5; 6427956Sxiuyan.wang@Sun.COM } unm_ah_header_t; 6437956Sxiuyan.wang@Sun.COM 6447956Sxiuyan.wang@Sun.COM typedef struct _unm_esp_hdr_s { 6458687SJing.Xiong@Sun.COM U32 SPI; 6468687SJing.Xiong@Sun.COM U32 seqno; 6477956Sxiuyan.wang@Sun.COM } unm_esp_hdr_t; 6487956Sxiuyan.wang@Sun.COM 6497956Sxiuyan.wang@Sun.COM #endif /* UNM_IPSECOFFLOAD */ 6507956Sxiuyan.wang@Sun.COM 6517956Sxiuyan.wang@Sun.COM /* 6527956Sxiuyan.wang@Sun.COM * Defines for various loop counts. These determine the behaviour of the 6537956Sxiuyan.wang@Sun.COM * system. The classic tradeoff between latency and throughput. 6547956Sxiuyan.wang@Sun.COM */ 6557956Sxiuyan.wang@Sun.COM 6567956Sxiuyan.wang@Sun.COM /* 6577956Sxiuyan.wang@Sun.COM * MAX_DMA_LOOPCOUNT : After how many interations do we start the dma for 6587956Sxiuyan.wang@Sun.COM * the status descriptors. 6597956Sxiuyan.wang@Sun.COM */ 6607956Sxiuyan.wang@Sun.COM #define MAX_DMA_LOOPCOUNT (32) 6617956Sxiuyan.wang@Sun.COM 6627956Sxiuyan.wang@Sun.COM /* 6637956Sxiuyan.wang@Sun.COM * MAX_TX_DMA_LOOP_COUNT : After how many interations do we start the dma for 6647956Sxiuyan.wang@Sun.COM * the command descriptors. 6657956Sxiuyan.wang@Sun.COM */ 6667956Sxiuyan.wang@Sun.COM #define MAX_TX_DMA_LOOP_COUNT 1000 6677956Sxiuyan.wang@Sun.COM 6687956Sxiuyan.wang@Sun.COM /* 6697956Sxiuyan.wang@Sun.COM * MAX_RCV_BUFS : Max number Rx packets that can be buffered before DMA/INT 6707956Sxiuyan.wang@Sun.COM */ 6717956Sxiuyan.wang@Sun.COM #define MAX_RCV_BUFS (4096) 6727956Sxiuyan.wang@Sun.COM 6737956Sxiuyan.wang@Sun.COM /* 6747956Sxiuyan.wang@Sun.COM * XXX;shouldnt be exposed in nic_cmn.h 6757956Sxiuyan.wang@Sun.COM * DMA_MAX_RCV_BUFS : Max number Rx packets that can be buffered before DMA 6767956Sxiuyan.wang@Sun.COM */ 6777956Sxiuyan.wang@Sun.COM #define DMA_MAX_RCV_BUFS (4096) 6787956Sxiuyan.wang@Sun.COM 6797956Sxiuyan.wang@Sun.COM /* 6807956Sxiuyan.wang@Sun.COM * XXX;shouldnt be exposed in nic_cmn.h 6817956Sxiuyan.wang@Sun.COM * MAX_DMA_ENTRIES : Max number Rx dma entries can be in dma list 6827956Sxiuyan.wang@Sun.COM */ 6837956Sxiuyan.wang@Sun.COM #define MAX_DMA_ENTRIES (4096) 6847956Sxiuyan.wang@Sun.COM 6857956Sxiuyan.wang@Sun.COM 6867956Sxiuyan.wang@Sun.COM /* 6877956Sxiuyan.wang@Sun.COM * MAX_INTR_LOOPCOUNT : After how many iterations do we interrupt the 6887956Sxiuyan.wang@Sun.COM * host ? 6897956Sxiuyan.wang@Sun.COM */ 6907956Sxiuyan.wang@Sun.COM #define MAX_INTR_LOOPCOUNT (1024) 6917956Sxiuyan.wang@Sun.COM 6927956Sxiuyan.wang@Sun.COM /* 6937956Sxiuyan.wang@Sun.COM * XMIT_LOOP_THRESHOLD : How many times do we spin before we process the 6947956Sxiuyan.wang@Sun.COM * transmit buffers. 6957956Sxiuyan.wang@Sun.COM */ 6967956Sxiuyan.wang@Sun.COM #define XMIT_LOOP_THRESHOLD 0x20 6977956Sxiuyan.wang@Sun.COM 6987956Sxiuyan.wang@Sun.COM /* 6997956Sxiuyan.wang@Sun.COM * XMIT_DESC_THRESHOLD : How many descriptors pending before we process 7007956Sxiuyan.wang@Sun.COM * the descriptors. 7017956Sxiuyan.wang@Sun.COM */ 7027956Sxiuyan.wang@Sun.COM #define XMIT_DESC_THRESHOLD 0x4 7037956Sxiuyan.wang@Sun.COM 7047956Sxiuyan.wang@Sun.COM /* 7057956Sxiuyan.wang@Sun.COM * TX_DMA_THRESHOLD : When do we start the dma of the command descriptors. 7067956Sxiuyan.wang@Sun.COM * We need these number of command descriptors, or we need to exceed the 7077956Sxiuyan.wang@Sun.COM * loop count. P1 only. 7087956Sxiuyan.wang@Sun.COM */ 7097956Sxiuyan.wang@Sun.COM #define TX_DMA_THRESHOLD 16 7107956Sxiuyan.wang@Sun.COM 7117956Sxiuyan.wang@Sun.COM #if defined(UNM_IP_FILTER) 7127956Sxiuyan.wang@Sun.COM /* 7137956Sxiuyan.wang@Sun.COM * Commands. Must match the definitions in nic/Linux/include/unm_nic_ioctl.h 7147956Sxiuyan.wang@Sun.COM */ 7157956Sxiuyan.wang@Sun.COM enum { 7168687SJing.Xiong@Sun.COM UNM_IP_FILTER_CLEAR = 1, 7178687SJing.Xiong@Sun.COM UNM_IP_FILTER_ADD, 7188687SJing.Xiong@Sun.COM UNM_IP_FILTER_DEL, 7198687SJing.Xiong@Sun.COM UNM_IP_FILTER_SHOW 7207956Sxiuyan.wang@Sun.COM }; 7217956Sxiuyan.wang@Sun.COM 7227956Sxiuyan.wang@Sun.COM #define MAX_FILTER_ENTRIES 16 7237956Sxiuyan.wang@Sun.COM 7247956Sxiuyan.wang@Sun.COM typedef struct { 7258687SJing.Xiong@Sun.COM __int32_t count; 7268687SJing.Xiong@Sun.COM __uint32_t ip_addr[15]; 7277956Sxiuyan.wang@Sun.COM } unm_ip_filter_t; 7287956Sxiuyan.wang@Sun.COM #endif /* UNM_IP_FILTER */ 7297956Sxiuyan.wang@Sun.COM 7307956Sxiuyan.wang@Sun.COM enum { 7318687SJing.Xiong@Sun.COM UNM_RCV_PEG_0 = 0, 7328687SJing.Xiong@Sun.COM UNM_RCV_PEG_1 7337956Sxiuyan.wang@Sun.COM }; 7347956Sxiuyan.wang@Sun.COM 7358687SJing.Xiong@Sun.COM #ifdef __cplusplus 7368687SJing.Xiong@Sun.COM } 7378687SJing.Xiong@Sun.COM #endif 7388687SJing.Xiong@Sun.COM 7398687SJing.Xiong@Sun.COM #endif /* !_UNM_NIC_CMN_H_ */ 740