13dec9fcdSqs /* 23dec9fcdSqs * CDDL HEADER START 33dec9fcdSqs * 43dec9fcdSqs * The contents of this file are subject to the terms of the 53dec9fcdSqs * Common Development and Distribution License (the "License"). 63dec9fcdSqs * You may not use this file except in compliance with the License. 73dec9fcdSqs * 83dec9fcdSqs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93dec9fcdSqs * or http://www.opensolaris.org/os/licensing. 103dec9fcdSqs * See the License for the specific language governing permissions 113dec9fcdSqs * and limitations under the License. 123dec9fcdSqs * 133dec9fcdSqs * When distributing Covered Code, include this CDDL HEADER in each 143dec9fcdSqs * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153dec9fcdSqs * If applicable, add the following below this CDDL HEADER, with the 163dec9fcdSqs * fields enclosed by brackets "[]" replaced with your own identifying 173dec9fcdSqs * information: Portions Copyright [yyyy] [name of copyright owner] 183dec9fcdSqs * 193dec9fcdSqs * CDDL HEADER END 203dec9fcdSqs */ 213dec9fcdSqs 223dec9fcdSqs /* 233dec9fcdSqs * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 243dec9fcdSqs * Use is subject to license terms. 253dec9fcdSqs */ 263dec9fcdSqs 273dec9fcdSqs #ifndef _SYS_HXGE_HXGE_TXDMA_HW_H 283dec9fcdSqs #define _SYS_HXGE_HXGE_TXDMA_HW_H 293dec9fcdSqs 303dec9fcdSqs #ifdef __cplusplus 313dec9fcdSqs extern "C" { 323dec9fcdSqs #endif 333dec9fcdSqs 343dec9fcdSqs #include <hxge_defs.h> 353dec9fcdSqs #include <hxge_tdc_hw.h> 363dec9fcdSqs 373dec9fcdSqs /* 383dec9fcdSqs * Transmit Packet Descriptor Structure 393dec9fcdSqs * See Hydra PRM (Chapter 8, Section 8.1.1) 403dec9fcdSqs */ 413dec9fcdSqs typedef union _tx_desc_t { 423dec9fcdSqs uint64_t value; 433dec9fcdSqs struct { 443dec9fcdSqs #if defined(_BIG_ENDIAN) 45*fe930412Sqs uint32_t sop:1; 46*fe930412Sqs uint32_t mark:1; 47*fe930412Sqs uint32_t num_ptr:4; 48*fe930412Sqs uint32_t rsvd:1; 49*fe930412Sqs uint32_t tr_len:13; 50*fe930412Sqs uint32_t sad:12; 51*fe930412Sqs uint32_t sad_l:32; 523dec9fcdSqs #else 53*fe930412Sqs uint32_t sad_l:32; 54*fe930412Sqs uint32_t sad:12; 55*fe930412Sqs uint32_t tr_len:13; 56*fe930412Sqs uint32_t rsvd:1; 57*fe930412Sqs uint32_t num_ptr:4; 58*fe930412Sqs uint32_t mark:1; 59*fe930412Sqs uint32_t sop:1; 603dec9fcdSqs #endif 613dec9fcdSqs } bits; 623dec9fcdSqs } tx_desc_t, *p_tx_desc_t; 633dec9fcdSqs 643dec9fcdSqs /* 653dec9fcdSqs * TDC Ring Configuration 663dec9fcdSqs */ 673dec9fcdSqs #define TDC_TDR_CFG_STADDR_SHIFT 6 /* bits 18:6 */ 683dec9fcdSqs #define TDC_TDR_CFG_STADDR_MASK 0x000000000007FFC0ULL 693dec9fcdSqs #define TDC_TDR_CFG_ADDR_MASK 0x00000FFFFFFFFFC0ULL 703dec9fcdSqs #define TDC_TDR_CFG_STADDR_BASE_SHIFT 19 /* bits 43:19 */ 713dec9fcdSqs #define TDC_TDR_CFG_STADDR_BASE_MASK 0x00000FFFFFF80000ULL 723dec9fcdSqs #define TDC_TDR_CFG_LEN_SHIFT 53 /* bits 63:53 */ 733dec9fcdSqs #define TDC_TDR_CFG_LEN_MASK 0xFFE0000000000000ULL 743dec9fcdSqs #define TDC_TDR_RST_SHIFT 46 753dec9fcdSqs #define TDC_TDR_RST_MASK 0x0000400000000000ULL 763dec9fcdSqs 773dec9fcdSqs /* 783dec9fcdSqs * Transmit Event Mask 793dec9fcdSqs */ 803dec9fcdSqs #define TDC_INT_MASK_MK_MASK 0x0000000000008000ULL 813dec9fcdSqs 823dec9fcdSqs /* 833dec9fcdSqs * Trasnmit Mailbox High 843dec9fcdSqs */ 853dec9fcdSqs #define TDC_MBH_SHIFT 0 /* bit 11:0 */ 863dec9fcdSqs #define TDC_MBH_ADDR_SHIFT 32 /* bit 43:32 */ 873dec9fcdSqs #define TDC_MBH_MASK 0x0000000000000FFFULL 883dec9fcdSqs 893dec9fcdSqs /* 903dec9fcdSqs * Trasnmit Mailbox Low 913dec9fcdSqs */ 923dec9fcdSqs #define TDC_MBL_SHIFT 6 /* bit 31:6 */ 933dec9fcdSqs #define TDC_MBL_MASK 0x00000000FFFFFFC0ULL 943dec9fcdSqs 953dec9fcdSqs #define TXDMA_MAILBOX_BYTE_LENGTH 64 963dec9fcdSqs #define TXDMA_MAILBOX_UNUSED 24 973dec9fcdSqs 983dec9fcdSqs typedef struct _txdma_mailbox_t { 993dec9fcdSqs tdc_stat_t tx_cs; /* 8 bytes */ 1003dec9fcdSqs tdc_tdr_pre_head_t tx_dma_pre_st; /* 8 bytes */ 1013dec9fcdSqs tdc_tdr_head_t tx_ring_hdl; /* 8 bytes */ 1023dec9fcdSqs tdc_tdr_kick_t tx_ring_kick; /* 8 bytes */ 1033dec9fcdSqs uint32_t tx_rng_err_logh; /* 4 bytes */ 1043dec9fcdSqs uint32_t tx_rng_err_logl; /* 4 bytes */ 1053dec9fcdSqs uint8_t resv[TXDMA_MAILBOX_UNUSED]; 1063dec9fcdSqs } txdma_mailbox_t, *p_txdma_mailbox_t; 1073dec9fcdSqs 1083dec9fcdSqs /* 1093dec9fcdSqs * Internal Transmit Packet Format (16 bytes) 1103dec9fcdSqs */ 1113dec9fcdSqs #define TX_PKT_HEADER_SIZE 16 1123dec9fcdSqs #define TX_MAX_GATHER_POINTERS 15 1133dec9fcdSqs #define TX_GATHER_POINTERS_THRESHOLD 8 1143dec9fcdSqs /* 1153dec9fcdSqs * There is bugs in the hardware 1163dec9fcdSqs * and max sfter len is changed from 4096 to 4076. 1173dec9fcdSqs * 1183dec9fcdSqs * Jumbo from 9500 to 9216 1193dec9fcdSqs */ 1203dec9fcdSqs #define TX_MAX_TRANSFER_LENGTH 4076 1213dec9fcdSqs #define TX_JUMBO_MTU 9216 1223dec9fcdSqs 1233dec9fcdSqs #define TX_PKT_HEADER_PAD_SHIFT 0 /* bit 2:0 */ 1243dec9fcdSqs #define TX_PKT_HEADER_PAD_MASK 0x0000000000000007ULL 1253dec9fcdSqs #define TX_PKT_HEADER_TOT_XFER_LEN_SHIFT 16 /* bit 16:29 */ 1263dec9fcdSqs #define TX_PKT_HEADER_TOT_XFER_LEN_MASK 0x000000000000FFF8ULL 1273dec9fcdSqs #define TX_PKT_HEADER_L4STUFF_SHIFT 32 /* bit 37:32 */ 1283dec9fcdSqs #define TX_PKT_HEADER_L4STUFF_MASK 0x0000003F00000000ULL 1293dec9fcdSqs #define TX_PKT_HEADER_L4START_SHIFT 40 /* bit 45:40 */ 1303dec9fcdSqs #define TX_PKT_HEADER_L4START_MASK 0x00003F0000000000ULL 1313dec9fcdSqs #define TX_PKT_HEADER_L3START_SHIFT 48 /* bit 45:40 */ 1323dec9fcdSqs #define TX_PKT_HEADER_IHL_SHIFT 52 /* bit 52 */ 1333dec9fcdSqs #define TX_PKT_HEADER_VLAN__SHIFT 56 /* bit 56 */ 1343dec9fcdSqs #define TX_PKT_HEADER_TCP_UDP_CRC32C_SHIFT 57 /* bit 57 */ 1353dec9fcdSqs #define TX_PKT_HEADER_LLC_SHIFT 57 /* bit 57 */ 1363dec9fcdSqs #define TX_PKT_HEADER_TCP_UDP_CRC32C_SET 0x0200000000000000ULL 1373dec9fcdSqs #define TX_PKT_HEADER_TCP_UDP_CRC32C_MASK 0x0200000000000000ULL 1383dec9fcdSqs #define TX_PKT_HEADER_L4_PROTO_OP_SHIFT 2 /* bit 59:58 */ 1393dec9fcdSqs #define TX_PKT_HEADER_L4_PROTO_OP_MASK 0x0C00000000000000ULL 1403dec9fcdSqs #define TX_PKT_HEADER_V4_HDR_CS_SHIFT 60 /* bit 60 */ 1413dec9fcdSqs #define TX_PKT_HEADER_V4_HDR_CS_SET 0x1000000000000000ULL 1423dec9fcdSqs #define TX_PKT_HEADER_V4_HDR_CS_MASK 0x1000000000000000ULL 1433dec9fcdSqs #define TX_PKT_HEADER_IP_VER_SHIFT 61 /* bit 61 */ 1443dec9fcdSqs #define TX_PKT_HEADER_IP_VER_MASK 0x2000000000000000ULL 1453dec9fcdSqs #define TX_PKT_HEADER_PKT_TYPE_SHIFT 62 /* bit 62 */ 1463dec9fcdSqs #define TX_PKT_HEADER_PKT_TYPE_MASK 0x4000000000000000ULL 1473dec9fcdSqs 1483dec9fcdSqs /* L4 Prototol Operations */ 1493dec9fcdSqs #define TX_PKT_L4_PROTO_OP_NOP 0x00 1503dec9fcdSqs #define TX_PKT_L4_PROTO_OP_FULL_L4_CSUM 0x01 1513dec9fcdSqs #define TX_PKT_L4_PROTO_OP_L4_PAYLOAD_CSUM 0x02 1523dec9fcdSqs #define TX_PKT_L4_PROTO_OP_SCTP_CRC32 0x04 1533dec9fcdSqs 1543dec9fcdSqs /* Transmit Packet Types */ 1553dec9fcdSqs #define TX_PKT_PKT_TYPE_NOP 0x00 1563dec9fcdSqs #define TX_PKT_PKT_TYPE_TCP 0x01 1573dec9fcdSqs #define TX_PKT_PKT_TYPE_UDP 0x02 1583dec9fcdSqs #define TX_PKT_PKT_TYPE_SCTP 0x03 1593dec9fcdSqs 1603dec9fcdSqs typedef union _tx_pkt_header_t { 1613dec9fcdSqs uint64_t value; 1623dec9fcdSqs struct { 1633dec9fcdSqs #if defined(_BIG_ENDIAN) 164*fe930412Sqs uint32_t cksum_en_pkt_type:2; 165*fe930412Sqs uint32_t ip_ver:1; 166*fe930412Sqs uint32_t rsrvd:4; 167*fe930412Sqs uint32_t vlan:1; 168*fe930412Sqs uint32_t ihl:4; 169*fe930412Sqs uint32_t l3start:4; 170*fe930412Sqs uint32_t rsvrvd1:2; 171*fe930412Sqs uint32_t l4start:6; 172*fe930412Sqs uint32_t rsvrvd2:2; 173*fe930412Sqs uint32_t l4stuff:6; 174*fe930412Sqs uint32_t rsvrvd3:2; 175*fe930412Sqs uint32_t tot_xfer_len:14; 176*fe930412Sqs uint32_t rsrrvd4:13; 177*fe930412Sqs uint32_t pad:3; 1783dec9fcdSqs #else 179*fe930412Sqs uint32_t pad:3; 180*fe930412Sqs uint32_t rsrrvd4:13; 181*fe930412Sqs uint32_t tot_xfer_len:14; 182*fe930412Sqs uint32_t rsvrvd3:2; 183*fe930412Sqs uint32_t l4stuff:6; 184*fe930412Sqs uint32_t rsvrvd2:2; 185*fe930412Sqs uint32_t l4start:6; 186*fe930412Sqs uint32_t rsvrvd1:2; 187*fe930412Sqs uint32_t l3start:4; 188*fe930412Sqs uint32_t ihl:4; 189*fe930412Sqs uint32_t vlan:1; 190*fe930412Sqs uint32_t rsrvd:4; 191*fe930412Sqs uint32_t ip_ver:1; 192*fe930412Sqs uint32_t cksum_en_pkt_type:2; 1933dec9fcdSqs #endif 1943dec9fcdSqs } bits; 1953dec9fcdSqs } tx_pkt_header_t, *p_tx_pkt_header_t; 1963dec9fcdSqs 1973dec9fcdSqs typedef struct _tx_pkt_hdr_all_t { 1983dec9fcdSqs tx_pkt_header_t pkthdr; 1993dec9fcdSqs uint64_t reserved; 2003dec9fcdSqs } tx_pkt_hdr_all_t, *p_tx_pkt_hdr_all_t; 2013dec9fcdSqs 2023dec9fcdSqs 2033dec9fcdSqs #ifdef __cplusplus 2043dec9fcdSqs } 2053dec9fcdSqs #endif 2063dec9fcdSqs 2073dec9fcdSqs #endif /* _SYS_HXGE_HXGE_TXDMA_HW_H */ 208