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 */ 21*8687SJing.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 */ 267956Sxiuyan.wang@Sun.COM /* 277956Sxiuyan.wang@Sun.COM * Data types and structure for HAL - NIC interface. 287956Sxiuyan.wang@Sun.COM * 297956Sxiuyan.wang@Sun.COM */ 307956Sxiuyan.wang@Sun.COM 317956Sxiuyan.wang@Sun.COM #ifndef _NXHAL_NIC_INTERFACE_H_ 327956Sxiuyan.wang@Sun.COM #define _NXHAL_NIC_INTERFACE_H_ 337956Sxiuyan.wang@Sun.COM 34*8687SJing.Xiong@Sun.COM #ifdef __cplusplus 35*8687SJing.Xiong@Sun.COM extern "C" { 36*8687SJing.Xiong@Sun.COM #endif 37*8687SJing.Xiong@Sun.COM 387956Sxiuyan.wang@Sun.COM /* 397956Sxiuyan.wang@Sun.COM * Simple Types 407956Sxiuyan.wang@Sun.COM */ 417956Sxiuyan.wang@Sun.COM 427956Sxiuyan.wang@Sun.COM typedef U32 nx_reg_addr_t; 437956Sxiuyan.wang@Sun.COM 447956Sxiuyan.wang@Sun.COM /* 457956Sxiuyan.wang@Sun.COM * Root crb-based firmware commands 467956Sxiuyan.wang@Sun.COM */ 477956Sxiuyan.wang@Sun.COM 487956Sxiuyan.wang@Sun.COM /* 497956Sxiuyan.wang@Sun.COM * CRB Root Command 507956Sxiuyan.wang@Sun.COM * A single set of crbs is used across all physical/virtual 517956Sxiuyan.wang@Sun.COM * functions for capability queries, initialization, and 527956Sxiuyan.wang@Sun.COM * context creation/destruction. 537956Sxiuyan.wang@Sun.COM * 547956Sxiuyan.wang@Sun.COM * There are 4 CRBS: 557956Sxiuyan.wang@Sun.COM * Command/Response CRB 567956Sxiuyan.wang@Sun.COM * Argument1 CRB 577956Sxiuyan.wang@Sun.COM * Argument2 CRB 587956Sxiuyan.wang@Sun.COM * Argument3 CRB 597956Sxiuyan.wang@Sun.COM * Signature CRB 607956Sxiuyan.wang@Sun.COM * 617956Sxiuyan.wang@Sun.COM * The cmd/rsp crb is always intiated by the host via 627956Sxiuyan.wang@Sun.COM * a command code and always responded by the card with 637956Sxiuyan.wang@Sun.COM * a response code. The cmd and rsp codes are disjoint. 647956Sxiuyan.wang@Sun.COM * The sequence of use is always CMD, RSP, CLEAR CMD. 657956Sxiuyan.wang@Sun.COM * 667956Sxiuyan.wang@Sun.COM * The arguments are for passing in command specific 677956Sxiuyan.wang@Sun.COM * and response specific parameters/data. 687956Sxiuyan.wang@Sun.COM * 697956Sxiuyan.wang@Sun.COM * The signature is composed of a magic value, the 707956Sxiuyan.wang@Sun.COM * pci function id, and a command sequence id: 717956Sxiuyan.wang@Sun.COM * [7:0] = pci function 727956Sxiuyan.wang@Sun.COM * [15:8] = version 737956Sxiuyan.wang@Sun.COM * [31:16] = magic of 0xcafe 747956Sxiuyan.wang@Sun.COM * 757956Sxiuyan.wang@Sun.COM * The pci function allows the card to take correct 767956Sxiuyan.wang@Sun.COM * action for the given particular commands. 777956Sxiuyan.wang@Sun.COM * The firmware will attempt to detect 787956Sxiuyan.wang@Sun.COM * an errant driver that has died while holding 797956Sxiuyan.wang@Sun.COM * the root crb hardware lock. Such an error condition 807956Sxiuyan.wang@Sun.COM * shows up as the cmd/rsp crb stuck in a non-clear state. 817956Sxiuyan.wang@Sun.COM * 827956Sxiuyan.wang@Sun.COM * Interface Sequence: 837956Sxiuyan.wang@Sun.COM * Host always makes requests and firmware always responds. 847956Sxiuyan.wang@Sun.COM * Note that data field is always set prior to command field. 857956Sxiuyan.wang@Sun.COM * 867956Sxiuyan.wang@Sun.COM * [READ] CMD/RSP CRB ARGUMENT FIELD 877956Sxiuyan.wang@Sun.COM * Host grab lock 887956Sxiuyan.wang@Sun.COM * Host -> CMD optional parameter 897956Sxiuyan.wang@Sun.COM * FW <- (Good) RSP-OK DATA 907956Sxiuyan.wang@Sun.COM * FW <- (Fail) RSP-FAIL optional failure code 917956Sxiuyan.wang@Sun.COM * Host -> CLEAR 927956Sxiuyan.wang@Sun.COM * Host release lock 937956Sxiuyan.wang@Sun.COM * 947956Sxiuyan.wang@Sun.COM * [WRITE] CMD/RSP CRB ARGUMENT FIELD 957956Sxiuyan.wang@Sun.COM * Host grab lock 967956Sxiuyan.wang@Sun.COM * Host -> CMD DATA 977956Sxiuyan.wang@Sun.COM * FW <- (Good) RSP-OK optional write status 987956Sxiuyan.wang@Sun.COM * FW <- (Write) RSP-FAIL optional failure code 997956Sxiuyan.wang@Sun.COM * Host -> CLEAR 1007956Sxiuyan.wang@Sun.COM * Host release lock 1017956Sxiuyan.wang@Sun.COM */ 1027956Sxiuyan.wang@Sun.COM 1037956Sxiuyan.wang@Sun.COM 1047956Sxiuyan.wang@Sun.COM /* 1057956Sxiuyan.wang@Sun.COM * CMD/RSP 1067956Sxiuyan.wang@Sun.COM */ 1077956Sxiuyan.wang@Sun.COM 1087956Sxiuyan.wang@Sun.COM #define NX_CDRP_SIGNATURE_TO_PCIFN(sign) ((sign) & 0xff) 1097956Sxiuyan.wang@Sun.COM #define NX_CDRP_SIGNATURE_TO_VERSION(sign) (((sign)>>8) & 0xff) 1107956Sxiuyan.wang@Sun.COM #define NX_CDRP_SIGNATURE_TO_MAGIC(sign) (((sign)>>16) & 0xffff) 1117956Sxiuyan.wang@Sun.COM #define NX_CDRP_SIGNATURE_VALID(sign) \ 1127956Sxiuyan.wang@Sun.COM (NX_CDRP_SIGNATURE_TO_MAGIC(sign) == 0xcafe && \ 1137956Sxiuyan.wang@Sun.COM NX_CDRP_SIGNATURE_TO_PCIFN(sign) < 8) 1147956Sxiuyan.wang@Sun.COM #define NX_CDRP_SIGNATURE_MAKE(pcifn, version) \ 1157956Sxiuyan.wang@Sun.COM (((pcifn) & 0xff) | \ 1167956Sxiuyan.wang@Sun.COM (((version) & 0xff) << 8) | \ 1177956Sxiuyan.wang@Sun.COM ((u32)0xcafe << 16)) 1187956Sxiuyan.wang@Sun.COM 1197956Sxiuyan.wang@Sun.COM #define NX_CDRP_CLEAR 0x00000000 1207956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_BIT 0x80000000 1217956Sxiuyan.wang@Sun.COM 1227956Sxiuyan.wang@Sun.COM /* 1237956Sxiuyan.wang@Sun.COM * All responses must have the NX_CDRP_CMD_BIT cleared 1247956Sxiuyan.wang@Sun.COM * in the crb NX_CDRP_CRB_OFFSET. 1257956Sxiuyan.wang@Sun.COM */ 1267956Sxiuyan.wang@Sun.COM 1277956Sxiuyan.wang@Sun.COM #define NX_CDRP_FORM_RSP(rsp) (rsp) 1287956Sxiuyan.wang@Sun.COM #define NX_CDRP_IS_RSP(rsp) (((rsp) & NX_CDRP_CMD_BIT) == 0) 1297956Sxiuyan.wang@Sun.COM 1307956Sxiuyan.wang@Sun.COM #define NX_CDRP_RSP_OK 0x00000001 1317956Sxiuyan.wang@Sun.COM #define NX_CDRP_RSP_FAIL 0x00000002 1327956Sxiuyan.wang@Sun.COM #define NX_CDRP_RSP_TIMEOUT 0x00000003 1337956Sxiuyan.wang@Sun.COM 1347956Sxiuyan.wang@Sun.COM /* 1357956Sxiuyan.wang@Sun.COM * All commands must have the NX_CDRP_CMD_BIT set in 1367956Sxiuyan.wang@Sun.COM * the crb NX_CDRP_CRB_OFFSET. 1377956Sxiuyan.wang@Sun.COM * The macros below do not have it explicitly set to 1387956Sxiuyan.wang@Sun.COM * allow their use in lookup tables 1397956Sxiuyan.wang@Sun.COM */ 1407956Sxiuyan.wang@Sun.COM #define NX_CDRP_FORM_CMD(cmd) (NX_CDRP_CMD_BIT | (cmd)) 1417956Sxiuyan.wang@Sun.COM #define NX_CDRP_IS_CMD(cmd) (((cmd) & NX_CDRP_CMD_BIT) != 0) 1427956Sxiuyan.wang@Sun.COM 1437956Sxiuyan.wang@Sun.COM /* [CMD] Capability Vector [RSP] Capability Vector */ 1447956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_SUBMIT_CAPABILITIES 0x00000001 1457956Sxiuyan.wang@Sun.COM 1467956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] Query Value */ 1477956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_READ_MAX_RDS_PER_CTX 0x00000002 1487956Sxiuyan.wang@Sun.COM 1497956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] Query Value */ 1507956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_READ_MAX_SDS_PER_CTX 0x00000003 1517956Sxiuyan.wang@Sun.COM 1527956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] Query Value */ 1537956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_READ_MAX_RULES_PER_CTX 0x00000004 1547956Sxiuyan.wang@Sun.COM 1557956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] Query Value */ 1567956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_READ_MAX_RX_CTX 0x00000005 1577956Sxiuyan.wang@Sun.COM 1587956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] Query Value */ 1597956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_READ_MAX_TX_CTX 0x00000006 1607956Sxiuyan.wang@Sun.COM 1617956Sxiuyan.wang@Sun.COM /* [CMD] Rx Config DMA Addr [RSP] rcode */ 1627956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_CREATE_RX_CTX 0x00000007 1637956Sxiuyan.wang@Sun.COM 1647956Sxiuyan.wang@Sun.COM /* [CMD] Rx Context Handle, Reset Kind [RSP] rcode */ 1657956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_DESTROY_RX_CTX 0x00000008 1667956Sxiuyan.wang@Sun.COM 1677956Sxiuyan.wang@Sun.COM /* [CMD] Tx Config DMA Addr [RSP] rcode */ 1687956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_CREATE_TX_CTX 0x00000009 1697956Sxiuyan.wang@Sun.COM 1707956Sxiuyan.wang@Sun.COM /* [CMD] Tx Context Handle, Reset Kind [RSP] rcode */ 1717956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_DESTROY_TX_CTX 0x0000000a 1727956Sxiuyan.wang@Sun.COM 1737956Sxiuyan.wang@Sun.COM /* [CMD] Stat setup dma addr - [RSP] Handle, rcode */ 1747956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_SETUP_STATISTICS 0x0000000e 1757956Sxiuyan.wang@Sun.COM 1767956Sxiuyan.wang@Sun.COM /* [CMD] Handle - [RSP] rcode */ 1777956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_GET_STATISTICS 0x0000000f 1787956Sxiuyan.wang@Sun.COM 1797956Sxiuyan.wang@Sun.COM /* [CMD] Handle - [RSP] rcode */ 1807956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_DELETE_STATISTICS 0x00000010 1817956Sxiuyan.wang@Sun.COM 1827956Sxiuyan.wang@Sun.COM /* [CMD] - [RSP] rcode */ 1837956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_GEN_INT 0x00000011 1847956Sxiuyan.wang@Sun.COM 1857956Sxiuyan.wang@Sun.COM /* [CMD] MTU - [RSP] rcode */ 1867956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_SET_MTU 0x00000012 1877956Sxiuyan.wang@Sun.COM 1887956Sxiuyan.wang@Sun.COM #define NX_CDRP_CMD_MAX 0x00000013 1897956Sxiuyan.wang@Sun.COM 1907956Sxiuyan.wang@Sun.COM /* 1917956Sxiuyan.wang@Sun.COM * Capabilities 1927956Sxiuyan.wang@Sun.COM */ 1937956Sxiuyan.wang@Sun.COM 1947956Sxiuyan.wang@Sun.COM #define NX_CAP_BIT(class, bit) (1 << bit) 1957956Sxiuyan.wang@Sun.COM 1967956Sxiuyan.wang@Sun.COM /* Class 0 (i.e. ARGS 1) */ 1977956Sxiuyan.wang@Sun.COM #define NX_CAP0_LEGACY_CONTEXT NX_CAP_BIT(0, 0) 1987956Sxiuyan.wang@Sun.COM #define NX_CAP0_MULTI_CONTEXT NX_CAP_BIT(0, 1) 1997956Sxiuyan.wang@Sun.COM #define NX_CAP0_LEGACY_MN NX_CAP_BIT(0, 2) 2007956Sxiuyan.wang@Sun.COM #define NX_CAP0_LEGACY_MS NX_CAP_BIT(0, 3) 2017956Sxiuyan.wang@Sun.COM #define NX_CAP0_CUT_THROUGH NX_CAP_BIT(0, 4) 2027956Sxiuyan.wang@Sun.COM #define NX_CAP0_LRO NX_CAP_BIT(0, 5) 2037956Sxiuyan.wang@Sun.COM #define NX_CAP0_LSO NX_CAP_BIT(0, 6) 2047956Sxiuyan.wang@Sun.COM #define NX_CAP0_JUMBO_CONTIGUOUS NX_CAP_BIT(0, 7) 2057956Sxiuyan.wang@Sun.COM #define NX_CAP0_LRO_CONTIGUOUS NX_CAP_BIT(0, 8) 2067956Sxiuyan.wang@Sun.COM 2077956Sxiuyan.wang@Sun.COM /* Class 1 (i.e. ARGS 2) */ 2087956Sxiuyan.wang@Sun.COM #define NX_CAP1_NIC NX_CAP_BIT(1, 0) 2097956Sxiuyan.wang@Sun.COM #define NX_CAP1_PXE NX_CAP_BIT(1, 1) 2107956Sxiuyan.wang@Sun.COM #define NX_CAP1_CHIMNEY NX_CAP_BIT(1, 2) 2117956Sxiuyan.wang@Sun.COM #define NX_CAP1_LSA NX_CAP_BIT(1, 3) 2127956Sxiuyan.wang@Sun.COM #define NX_CAP1_RDMA NX_CAP_BIT(1, 4) 2137956Sxiuyan.wang@Sun.COM #define NX_CAP1_ISCSI NX_CAP_BIT(1, 5) 2147956Sxiuyan.wang@Sun.COM #define NX_CAP1_FCOE NX_CAP_BIT(1, 6) 2157956Sxiuyan.wang@Sun.COM 2167956Sxiuyan.wang@Sun.COM /* Class 2 (i.e. ARGS 3) */ 2177956Sxiuyan.wang@Sun.COM 2187956Sxiuyan.wang@Sun.COM /* 2197956Sxiuyan.wang@Sun.COM * Rules 2207956Sxiuyan.wang@Sun.COM */ 2217956Sxiuyan.wang@Sun.COM 2227956Sxiuyan.wang@Sun.COM typedef U32 nx_rx_rule_type_t; 2237956Sxiuyan.wang@Sun.COM 2247956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_DEFAULT 0 2257956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_MAC 1 2267956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_MAC_VLAN 2 2277956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_MAC_RSS 3 2287956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_MAC_VLAN_RSS 4 2297956Sxiuyan.wang@Sun.COM #define NX_RX_RULETYPE_MAX 5 2307956Sxiuyan.wang@Sun.COM 2317956Sxiuyan.wang@Sun.COM typedef U32 nx_rx_rule_cmd_t; 2327956Sxiuyan.wang@Sun.COM 2337956Sxiuyan.wang@Sun.COM #define NX_RX_RULECMD_ADD 0 2347956Sxiuyan.wang@Sun.COM #define NX_RX_RULECMD_REMOVE 1 2357956Sxiuyan.wang@Sun.COM #define NX_RX_RULECMD_MAX 2 2367956Sxiuyan.wang@Sun.COM 2377956Sxiuyan.wang@Sun.COM typedef struct nx_rx_rule_arg_s { 2387956Sxiuyan.wang@Sun.COM union { 2397956Sxiuyan.wang@Sun.COM struct { 2407956Sxiuyan.wang@Sun.COM char mac[6]; 2417956Sxiuyan.wang@Sun.COM } m; 2427956Sxiuyan.wang@Sun.COM struct { 2437956Sxiuyan.wang@Sun.COM char mac[6]; 2447956Sxiuyan.wang@Sun.COM char vlan; 2457956Sxiuyan.wang@Sun.COM } mv; 2467956Sxiuyan.wang@Sun.COM struct { 2477956Sxiuyan.wang@Sun.COM char mac[6]; 2487956Sxiuyan.wang@Sun.COM } mr; 2497956Sxiuyan.wang@Sun.COM struct { 2507956Sxiuyan.wang@Sun.COM char mac[6]; 2517956Sxiuyan.wang@Sun.COM char vlan; 2527956Sxiuyan.wang@Sun.COM } mvr; 2537956Sxiuyan.wang@Sun.COM } s1; 2547956Sxiuyan.wang@Sun.COM /* will be union of all the different args for rules */ 2557956Sxiuyan.wang@Sun.COM U64 data; 2567956Sxiuyan.wang@Sun.COM } nx_rx_rule_arg_t; 2577956Sxiuyan.wang@Sun.COM 2587956Sxiuyan.wang@Sun.COM typedef struct nx_rx_rule_s { 2597956Sxiuyan.wang@Sun.COM U32 id; 2607956Sxiuyan.wang@Sun.COM U32 active; 2617956Sxiuyan.wang@Sun.COM nx_rx_rule_arg_t arg; 2627956Sxiuyan.wang@Sun.COM nx_rx_rule_type_t type; 2637956Sxiuyan.wang@Sun.COM } nx_rx_rule_t; 2647956Sxiuyan.wang@Sun.COM 2657956Sxiuyan.wang@Sun.COM /* MSG - REQUIRES TX CONTEXT */ 2667956Sxiuyan.wang@Sun.COM 2677956Sxiuyan.wang@Sun.COM /* 2687956Sxiuyan.wang@Sun.COM * The rules can be added/deleted from both the 2697956Sxiuyan.wang@Sun.COM * host and card sides so rq/rsp are similar. 2707956Sxiuyan.wang@Sun.COM */ 2717956Sxiuyan.wang@Sun.COM typedef struct nx_hostmsg_rx_rule_s { 2727956Sxiuyan.wang@Sun.COM nx_rx_rule_cmd_t cmd; 2737956Sxiuyan.wang@Sun.COM nx_rx_rule_t rule; 2747956Sxiuyan.wang@Sun.COM } nx_hostmsg_rx_rule_t; 2757956Sxiuyan.wang@Sun.COM 2767956Sxiuyan.wang@Sun.COM typedef struct nx_cardmsg_rx_rule_s { 2777956Sxiuyan.wang@Sun.COM nx_rcode_t rcode; 2787956Sxiuyan.wang@Sun.COM nx_rx_rule_cmd_t cmd; 2797956Sxiuyan.wang@Sun.COM nx_rx_rule_t rule; 2807956Sxiuyan.wang@Sun.COM } nx_cardmsg_rx_rule_t; 2817956Sxiuyan.wang@Sun.COM 2827956Sxiuyan.wang@Sun.COM 2837956Sxiuyan.wang@Sun.COM /* 2847956Sxiuyan.wang@Sun.COM * Common to Rx/Tx contexts 2857956Sxiuyan.wang@Sun.COM */ 2867956Sxiuyan.wang@Sun.COM 2877956Sxiuyan.wang@Sun.COM /* 2887956Sxiuyan.wang@Sun.COM * Context states 2897956Sxiuyan.wang@Sun.COM */ 2907956Sxiuyan.wang@Sun.COM 2917956Sxiuyan.wang@Sun.COM typedef U32 nx_host_ctx_state_t; 2927956Sxiuyan.wang@Sun.COM 2937956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_FREED 0 /* Invalid state */ 2947956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_ALLOCATED 1 /* Not committed */ 2957956Sxiuyan.wang@Sun.COM /* The following states imply FW is aware of context */ 2967956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_ACTIVE 2 2977956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_DISABLED 3 2987956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_QUIESCED 4 2997956Sxiuyan.wang@Sun.COM #define NX_HOST_CTX_STATE_MAX 5 3007956Sxiuyan.wang@Sun.COM 3017956Sxiuyan.wang@Sun.COM /* 3027956Sxiuyan.wang@Sun.COM * Interrupt mask crb use must be set identically on the Tx 3037956Sxiuyan.wang@Sun.COM * and Rx context configs across a pci function 3047956Sxiuyan.wang@Sun.COM */ 3057956Sxiuyan.wang@Sun.COM 3067956Sxiuyan.wang@Sun.COM /* Rx and Tx have unique interrupt/crb */ 3077956Sxiuyan.wang@Sun.COM #define NX_HOST_INT_CRB_MODE_UNIQUE 0 3087956Sxiuyan.wang@Sun.COM /* Rx and Tx share a common interrupt/crb */ 3097956Sxiuyan.wang@Sun.COM #define NX_HOST_INT_CRB_MODE_SHARED 1 /* <= LEGACY */ 3107956Sxiuyan.wang@Sun.COM /* Rx does not use a crb */ 3117956Sxiuyan.wang@Sun.COM #define NX_HOST_INT_CRB_MODE_NORX 2 3127956Sxiuyan.wang@Sun.COM /* Tx does not use a crb */ 3137956Sxiuyan.wang@Sun.COM #define NX_HOST_INT_CRB_MODE_NOTX 3 3147956Sxiuyan.wang@Sun.COM /* Neither Rx nor Tx use a crb */ 3157956Sxiuyan.wang@Sun.COM #define NX_HOST_INT_CRB_MODE_NORXTX 4 3167956Sxiuyan.wang@Sun.COM 3177956Sxiuyan.wang@Sun.COM /* 3187956Sxiuyan.wang@Sun.COM * Destroy Rx/Tx 3197956Sxiuyan.wang@Sun.COM */ 3207956Sxiuyan.wang@Sun.COM 3217956Sxiuyan.wang@Sun.COM #define NX_DESTROY_CTX_RESET 0 3227956Sxiuyan.wang@Sun.COM #define NX_DESTROY_CTX_D3_RESET 1 3237956Sxiuyan.wang@Sun.COM #define NX_DESTROY_CTX_MAX 2 3247956Sxiuyan.wang@Sun.COM 3257956Sxiuyan.wang@Sun.COM 3267956Sxiuyan.wang@Sun.COM /* 3277956Sxiuyan.wang@Sun.COM * Tx 3287956Sxiuyan.wang@Sun.COM */ 3297956Sxiuyan.wang@Sun.COM 3307956Sxiuyan.wang@Sun.COM /* 3317956Sxiuyan.wang@Sun.COM * Components of the host-request for Tx context creation. 3327956Sxiuyan.wang@Sun.COM * CRB - DOES NOT REQUIRE Rx/TX CONTEXT 3337956Sxiuyan.wang@Sun.COM */ 3347956Sxiuyan.wang@Sun.COM 3357956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_cds_ring_s { 3367956Sxiuyan.wang@Sun.COM U64 host_phys_addr; /* Ring base addr */ 3377956Sxiuyan.wang@Sun.COM U32 ring_size; /* Ring entries */ 3387956Sxiuyan.wang@Sun.COM U32 rsvd; /* Padding */ 3397956Sxiuyan.wang@Sun.COM } nx_hostrq_cds_ring_t; 3407956Sxiuyan.wang@Sun.COM 3417956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_tx_ctx_s { 3427956Sxiuyan.wang@Sun.COM U64 host_rsp_dma_addr; /* Response dma'd here */ 3437956Sxiuyan.wang@Sun.COM U64 cmd_cons_dma_addr; /* */ 3447956Sxiuyan.wang@Sun.COM U64 dummy_dma_addr; /* */ 3457956Sxiuyan.wang@Sun.COM U32 capabilities[4]; /* Flag bit vector */ 3467956Sxiuyan.wang@Sun.COM U32 host_int_crb_mode; /* Interrupt crb usage */ 3477956Sxiuyan.wang@Sun.COM U32 rsvd1; /* Padding */ 3487956Sxiuyan.wang@Sun.COM U16 rsvd2; /* Padding */ 3497956Sxiuyan.wang@Sun.COM U16 interrupt_ctl; 3507956Sxiuyan.wang@Sun.COM U16 msi_index; 3517956Sxiuyan.wang@Sun.COM U16 rsvd3; /* Padding */ 3527956Sxiuyan.wang@Sun.COM nx_hostrq_cds_ring_t cds_ring; /* Desc of cds ring */ 3537956Sxiuyan.wang@Sun.COM U8 reserved[128]; /* future expansion */ 3547956Sxiuyan.wang@Sun.COM } nx_hostrq_tx_ctx_t; 3557956Sxiuyan.wang@Sun.COM 3567956Sxiuyan.wang@Sun.COM typedef struct nx_cardrsp_cds_ring_s { 3577956Sxiuyan.wang@Sun.COM U32 host_producer_crb; /* Crb to use */ 3587956Sxiuyan.wang@Sun.COM U32 interrupt_crb; /* Crb to use */ 3597956Sxiuyan.wang@Sun.COM } nx_cardrsp_cds_ring_t; 3607956Sxiuyan.wang@Sun.COM 3617956Sxiuyan.wang@Sun.COM typedef struct nx_cardrsp_tx_ctx_s { 3627956Sxiuyan.wang@Sun.COM U32 host_ctx_state; /* Starting state */ 3637956Sxiuyan.wang@Sun.COM U16 context_id; /* Handle for context */ 3647956Sxiuyan.wang@Sun.COM U8 phys_port; /* Physical id of port */ 3657956Sxiuyan.wang@Sun.COM U8 virt_port; /* Virtual/Logical id of port */ 3667956Sxiuyan.wang@Sun.COM nx_cardrsp_cds_ring_t cds_ring; /* Card cds settings */ 3677956Sxiuyan.wang@Sun.COM U8 reserved[128]; /* future expansion */ 3687956Sxiuyan.wang@Sun.COM } nx_cardrsp_tx_ctx_t; 3697956Sxiuyan.wang@Sun.COM 3707956Sxiuyan.wang@Sun.COM #define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) \ 3717956Sxiuyan.wang@Sun.COM (sizeof (HOSTRQ_TX)) 3727956Sxiuyan.wang@Sun.COM 3737956Sxiuyan.wang@Sun.COM #define SIZEOF_CARDRSP_TX(CARDRSP_TX) \ 3747956Sxiuyan.wang@Sun.COM (sizeof (CARDRSP_TX)) 3757956Sxiuyan.wang@Sun.COM 3767956Sxiuyan.wang@Sun.COM /* 3777956Sxiuyan.wang@Sun.COM * Rx 3787956Sxiuyan.wang@Sun.COM */ 3797956Sxiuyan.wang@Sun.COM 3807956Sxiuyan.wang@Sun.COM /* 3817956Sxiuyan.wang@Sun.COM * RDS ring mapping to producer crbs 3827956Sxiuyan.wang@Sun.COM */ 3837956Sxiuyan.wang@Sun.COM 3847956Sxiuyan.wang@Sun.COM /* Each ring has a unique crb */ 3857956Sxiuyan.wang@Sun.COM #define NX_HOST_RDS_CRB_MODE_UNIQUE 0 /* <= LEGACY */ 3867956Sxiuyan.wang@Sun.COM 3877956Sxiuyan.wang@Sun.COM /* 3887956Sxiuyan.wang@Sun.COM * All configured RDS Rings share common crb: 3897956Sxiuyan.wang@Sun.COM * 1 Ring - same as unique 3907956Sxiuyan.wang@Sun.COM * 2 Rings - 16, 16 3917956Sxiuyan.wang@Sun.COM * 3 Rings - 10, 10, 10 3927956Sxiuyan.wang@Sun.COM */ 3937956Sxiuyan.wang@Sun.COM #define NX_HOST_RDS_CRB_MODE_SHARED 1 3947956Sxiuyan.wang@Sun.COM 3957956Sxiuyan.wang@Sun.COM /* 3967956Sxiuyan.wang@Sun.COM * Bit usage is specified per-ring using the 3977956Sxiuyan.wang@Sun.COM * ring's size. Sum of bit lengths must be <= 32. 3987956Sxiuyan.wang@Sun.COM * Packing is [Ring N] ... [Ring 1][Ring 0] 3997956Sxiuyan.wang@Sun.COM */ 4007956Sxiuyan.wang@Sun.COM #define NX_HOST_RDS_CRB_MODE_CUSTOM 2 4017956Sxiuyan.wang@Sun.COM #define NX_HOST_RDS_CRB_MODE_MAX 3 4027956Sxiuyan.wang@Sun.COM 4037956Sxiuyan.wang@Sun.COM 4047956Sxiuyan.wang@Sun.COM /* 4057956Sxiuyan.wang@Sun.COM * RDS Ting Types 4067956Sxiuyan.wang@Sun.COM */ 4077956Sxiuyan.wang@Sun.COM 4087956Sxiuyan.wang@Sun.COM #define NX_RDS_RING_TYPE_NORMAL 0 4097956Sxiuyan.wang@Sun.COM #define NX_RDS_RING_TYPE_JUMBO 1 4107956Sxiuyan.wang@Sun.COM #define NX_RDS_RING_TYPE_LRO 2 4117956Sxiuyan.wang@Sun.COM #define NX_RDS_RING_TYPE_MAX 3 4127956Sxiuyan.wang@Sun.COM 4137956Sxiuyan.wang@Sun.COM /* 4147956Sxiuyan.wang@Sun.COM * Components of the host-request for Rx context creation. 4157956Sxiuyan.wang@Sun.COM * CRB - DOES NOT REQUIRE Rx/TX CONTEXT 4167956Sxiuyan.wang@Sun.COM */ 4177956Sxiuyan.wang@Sun.COM 4187956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_sds_ring_s { 4197956Sxiuyan.wang@Sun.COM U64 host_phys_addr; /* Ring base addr */ 4207956Sxiuyan.wang@Sun.COM U32 ring_size; /* Ring entries */ 4217956Sxiuyan.wang@Sun.COM U16 msi_index; 4227956Sxiuyan.wang@Sun.COM U16 rsvd; /* Padding */ 4237956Sxiuyan.wang@Sun.COM } nx_hostrq_sds_ring_t; 4247956Sxiuyan.wang@Sun.COM 4257956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_rds_ring_s { 4267956Sxiuyan.wang@Sun.COM U64 host_phys_addr; /* Ring base addr */ 4277956Sxiuyan.wang@Sun.COM U64 buff_size; /* Packet buffer size */ 4287956Sxiuyan.wang@Sun.COM U32 ring_size; /* Ring entries */ 4297956Sxiuyan.wang@Sun.COM U32 ring_kind; /* Class of ring */ 4307956Sxiuyan.wang@Sun.COM } nx_hostrq_rds_ring_t; 4317956Sxiuyan.wang@Sun.COM 4327956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_rx_ctx_s { 4337956Sxiuyan.wang@Sun.COM U64 host_rsp_dma_addr; /* Response dma'd here */ 4347956Sxiuyan.wang@Sun.COM U32 capabilities[4]; /* Flag bit vector */ 4357956Sxiuyan.wang@Sun.COM U32 host_int_crb_mode; /* Interrupt crb usage */ 4367956Sxiuyan.wang@Sun.COM U32 host_rds_crb_mode; /* RDS crb usage */ 437*8687SJing.Xiong@Sun.COM /* These ring offsets are relative to end of structure */ 4387956Sxiuyan.wang@Sun.COM U32 rds_ring_offset; /* Offset to RDS config */ 4397956Sxiuyan.wang@Sun.COM U32 sds_ring_offset; /* Offset to SDS config */ 4407956Sxiuyan.wang@Sun.COM U16 num_rds_rings; /* Count of RDS rings */ 4417956Sxiuyan.wang@Sun.COM U16 num_sds_rings; /* Count of SDS rings */ 4427956Sxiuyan.wang@Sun.COM U16 rsvd1; /* Padding */ 4437956Sxiuyan.wang@Sun.COM U16 rsvd2; /* Padding */ 4447956Sxiuyan.wang@Sun.COM U8 reserved[128]; /* reserve space for future expansion */ 4457956Sxiuyan.wang@Sun.COM /* 4467956Sxiuyan.wang@Sun.COM * MUST BE 64-bit aligned. 4477956Sxiuyan.wang@Sun.COM * The following is packed: 4487956Sxiuyan.wang@Sun.COM * - N hostrq_rds_rings 4497956Sxiuyan.wang@Sun.COM * - N hostrq_sds_rings 4507956Sxiuyan.wang@Sun.COM */ 4517956Sxiuyan.wang@Sun.COM } nx_hostrq_rx_ctx_t; 4527956Sxiuyan.wang@Sun.COM 4537956Sxiuyan.wang@Sun.COM typedef struct nx_cardrsp_rds_ring_s { 4547956Sxiuyan.wang@Sun.COM U32 host_producer_crb; /* Crb to use */ 4557956Sxiuyan.wang@Sun.COM U32 rsvd1; /* Padding */ 4567956Sxiuyan.wang@Sun.COM } nx_cardrsp_rds_ring_t; 4577956Sxiuyan.wang@Sun.COM 4587956Sxiuyan.wang@Sun.COM typedef struct nx_cardrsp_sds_ring_s { 4597956Sxiuyan.wang@Sun.COM U32 host_consumer_crb; /* Crb to use */ 4607956Sxiuyan.wang@Sun.COM U32 interrupt_crb; /* Crb to use */ 4617956Sxiuyan.wang@Sun.COM } nx_cardrsp_sds_ring_t; 4627956Sxiuyan.wang@Sun.COM 4637956Sxiuyan.wang@Sun.COM typedef struct nx_cardrsp_rx_ctx_s { 464*8687SJing.Xiong@Sun.COM /* These ring offsets are relative to end of structure */ 4657956Sxiuyan.wang@Sun.COM U32 rds_ring_offset; /* Offset to RDS config */ 4667956Sxiuyan.wang@Sun.COM U32 sds_ring_offset; /* Offset to SDS config */ 4677956Sxiuyan.wang@Sun.COM U32 host_ctx_state; /* Starting State */ 4687956Sxiuyan.wang@Sun.COM U32 num_fn_per_port; /* How many PCI fn share the port */ 4697956Sxiuyan.wang@Sun.COM U16 num_rds_rings; /* Count of RDS rings */ 4707956Sxiuyan.wang@Sun.COM U16 num_sds_rings; /* Count of SDS rings */ 4717956Sxiuyan.wang@Sun.COM U16 context_id; /* Handle for context */ 4727956Sxiuyan.wang@Sun.COM U8 phys_port; /* Physical id of port */ 4737956Sxiuyan.wang@Sun.COM U8 virt_port; /* Virtual/Logical id of port */ 4747956Sxiuyan.wang@Sun.COM U8 reserved[128]; /* save space for future expansion */ 4757956Sxiuyan.wang@Sun.COM /* 4767956Sxiuyan.wang@Sun.COM * MUST BE 64-bit aligned. 4777956Sxiuyan.wang@Sun.COM * The following is packed: 4787956Sxiuyan.wang@Sun.COM * - N cardrsp_rds_rings 4797956Sxiuyan.wang@Sun.COM * - N cardrs_sds_rings 4807956Sxiuyan.wang@Sun.COM */ 4817956Sxiuyan.wang@Sun.COM } nx_cardrsp_rx_ctx_t; 4827956Sxiuyan.wang@Sun.COM 4837956Sxiuyan.wang@Sun.COM #define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \ 4847956Sxiuyan.wang@Sun.COM (sizeof (HOSTRQ_RX) + \ 4857956Sxiuyan.wang@Sun.COM (rds_rings)*(sizeof (nx_hostrq_rds_ring_t)) + \ 4867956Sxiuyan.wang@Sun.COM (sds_rings)*(sizeof (nx_hostrq_sds_ring_t))) 4877956Sxiuyan.wang@Sun.COM 4887956Sxiuyan.wang@Sun.COM #define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) \ 4897956Sxiuyan.wang@Sun.COM (sizeof (CARDRSP_RX) + \ 4907956Sxiuyan.wang@Sun.COM (rds_rings)*(sizeof (nx_cardrsp_rds_ring_t)) + \ 4917956Sxiuyan.wang@Sun.COM (sds_rings)*(sizeof (nx_cardrsp_sds_ring_t))) 4927956Sxiuyan.wang@Sun.COM 4937956Sxiuyan.wang@Sun.COM 4947956Sxiuyan.wang@Sun.COM /* 4957956Sxiuyan.wang@Sun.COM * Statistics 4967956Sxiuyan.wang@Sun.COM */ 4977956Sxiuyan.wang@Sun.COM 4987956Sxiuyan.wang@Sun.COM /* 4997956Sxiuyan.wang@Sun.COM * The model of statistics update to use 5007956Sxiuyan.wang@Sun.COM */ 5017956Sxiuyan.wang@Sun.COM 5027956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_MODE_INVALID 0 5037956Sxiuyan.wang@Sun.COM 5047956Sxiuyan.wang@Sun.COM /* 5057956Sxiuyan.wang@Sun.COM * Permanent setup; Updates are only sent on explicit request 5067956Sxiuyan.wang@Sun.COM * NX_CDRP_CMD_GET_STATISTICS) 5077956Sxiuyan.wang@Sun.COM */ 5087956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_MODE_PULL 1 5097956Sxiuyan.wang@Sun.COM 5107956Sxiuyan.wang@Sun.COM /* 5117956Sxiuyan.wang@Sun.COM * Permanent setup; Updates are sent automatically and on 5127956Sxiuyan.wang@Sun.COM * explicit request (NX_CDRP_CMD_GET_STATISTICS) 5137956Sxiuyan.wang@Sun.COM */ 5147956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_MODE_PUSH 2 5157956Sxiuyan.wang@Sun.COM 5167956Sxiuyan.wang@Sun.COM /* One time stat update. */ 5177956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_MODE_SINGLE_SHOT 3 5187956Sxiuyan.wang@Sun.COM 5197956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_MODE_MAX 4 5207956Sxiuyan.wang@Sun.COM 5217956Sxiuyan.wang@Sun.COM /* 5227956Sxiuyan.wang@Sun.COM * What set of stats 5237956Sxiuyan.wang@Sun.COM */ 5247956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_INVALID 0 5257956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_NIC_RX_CORE 1 5267956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_NIC_TX_CORE 2 5277956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_NIC_RX_ALL 3 5287956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_NIC_TX_ALL 4 5297956Sxiuyan.wang@Sun.COM #define NX_STATISTICS_TYPE_MAX 5 5307956Sxiuyan.wang@Sun.COM 5317956Sxiuyan.wang@Sun.COM 5327956Sxiuyan.wang@Sun.COM /* 5337956Sxiuyan.wang@Sun.COM * Request to setup statistics gathering. 5347956Sxiuyan.wang@Sun.COM * CRB - DOES NOT REQUIRE Rx/TX CONTEXT 5357956Sxiuyan.wang@Sun.COM */ 5367956Sxiuyan.wang@Sun.COM 5377956Sxiuyan.wang@Sun.COM typedef struct nx_hostrq_stat_setup_s { 5387956Sxiuyan.wang@Sun.COM U64 host_stat_buffer; /* Where to dma stats */ 5397956Sxiuyan.wang@Sun.COM U32 host_stat_size; /* Size of stat buffer */ 5407956Sxiuyan.wang@Sun.COM U16 context_id; /* Which context */ 5417956Sxiuyan.wang@Sun.COM U16 stat_type; /* What class of stats */ 5427956Sxiuyan.wang@Sun.COM U16 stat_mode; /* When to update */ 5437956Sxiuyan.wang@Sun.COM U16 stat_interval; /* Frequency of update */ 5447956Sxiuyan.wang@Sun.COM } nx_hostrq_stat_setup_t; 5457956Sxiuyan.wang@Sun.COM 546*8687SJing.Xiong@Sun.COM #ifdef __cplusplus 547*8687SJing.Xiong@Sun.COM } 548*8687SJing.Xiong@Sun.COM #endif 5497956Sxiuyan.wang@Sun.COM 5507956Sxiuyan.wang@Sun.COM #endif /* _NXHAL_NIC_INTERFACE_H_ */ 551