16349Sqs148142 /* 26349Sqs148142 * CDDL HEADER START 36349Sqs148142 * 46349Sqs148142 * The contents of this file are subject to the terms of the 56349Sqs148142 * Common Development and Distribution License (the "License"). 66349Sqs148142 * You may not use this file except in compliance with the License. 76349Sqs148142 * 86349Sqs148142 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96349Sqs148142 * or http://www.opensolaris.org/os/licensing. 106349Sqs148142 * See the License for the specific language governing permissions 116349Sqs148142 * and limitations under the License. 126349Sqs148142 * 136349Sqs148142 * When distributing Covered Code, include this CDDL HEADER in each 146349Sqs148142 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156349Sqs148142 * If applicable, add the following below this CDDL HEADER, with the 166349Sqs148142 * fields enclosed by brackets "[]" replaced with your own identifying 176349Sqs148142 * information: Portions Copyright [yyyy] [name of copyright owner] 186349Sqs148142 * 196349Sqs148142 * CDDL HEADER END 206349Sqs148142 */ 216349Sqs148142 /* 226349Sqs148142 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 236349Sqs148142 * Use is subject to license terms. 246349Sqs148142 */ 256349Sqs148142 266349Sqs148142 #ifndef _SYS_HXGE_HXGE_DEFS_H 276349Sqs148142 #define _SYS_HXGE_HXGE_DEFS_H 286349Sqs148142 296349Sqs148142 #ifdef __cplusplus 306349Sqs148142 extern "C" { 316349Sqs148142 #endif 326349Sqs148142 336349Sqs148142 #if !defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) && \ 346349Sqs148142 !defined(__BIG_ENDIAN) && !defined(__LITTLE_ENDIAN) 356349Sqs148142 #error Host endianness not defined 366349Sqs148142 #endif 376349Sqs148142 386349Sqs148142 #if !defined(_BIT_FIELDS_HTOL) && !defined(_BIT_FIELDS_LTOH) && \ 396349Sqs148142 !defined(__BIT_FIELDS_HTOL) && !defined(__BIT_FIELDS_LTOH) 406349Sqs148142 #error Bit ordering not defined 416349Sqs148142 #endif 426349Sqs148142 436349Sqs148142 /* RDC/TDC CSR size */ 446349Sqs148142 #define DMA_CSR_SIZE 2048 456349Sqs148142 466349Sqs148142 /* 476349Sqs148142 * Define the Default RBR, RCR 486349Sqs148142 */ 496349Sqs148142 #define RBR_DEFAULT_MAX_BLKS 4096 /* each entry (16 blockaddr/64B) */ 506349Sqs148142 #define RBR_NBLK_PER_LINE 16 /* 16 block addresses per 64 B line */ 516349Sqs148142 #define RBR_DEFAULT_MAX_LEN 65472 /* 2^16 - 64 */ 526349Sqs148142 #define RBR_DEFAULT_MIN_LEN 64 /* multiple of 64 */ 536349Sqs148142 546349Sqs148142 #define SW_OFFSET_NO_OFFSET 0 556349Sqs148142 #define SW_OFFSET_64 1 /* 64 bytes */ 566349Sqs148142 #define SW_OFFSET_128 2 /* 128 bytes */ 576349Sqs148142 #define SW_OFFSET_INVALID 3 586349Sqs148142 596349Sqs148142 /* 606349Sqs148142 * RBR block descriptor is 32 bits (bits [43:12] 616349Sqs148142 */ 626349Sqs148142 #define RBR_BKADDR_SHIFT 12 636349Sqs148142 #define RCR_DEFAULT_MAX_BLKS 4096 /* each entry (8 blockaddr/64B) */ 646349Sqs148142 #define RCR_NBLK_PER_LINE 8 /* 8 block addresses per 64 B line */ 656349Sqs148142 #define RCR_DEFAULT_MAX_LEN (RCR_DEFAULT_MAX_BLKS) 666349Sqs148142 #define RCR_DEFAULT_MIN_LEN 32 676349Sqs148142 686349Sqs148142 /* DMA Channels. */ 696349Sqs148142 #define HXGE_MAX_DMCS (HXGE_MAX_RDCS + HXGE_MAX_TDCS) 706349Sqs148142 #define HXGE_MAX_RDCS 4 716349Sqs148142 #define HXGE_MAX_TDCS 4 726349Sqs148142 736349Sqs148142 #define VLAN_ETHERTYPE (0x8100) 746349Sqs148142 756349Sqs148142 /* 256 total, each blade gets 42 */ 766349Sqs148142 #define TCAM_HXGE_TCAM_MAX_ENTRY 42 776349Sqs148142 786349Sqs148142 /* 796349Sqs148142 * Locate the DMA channel start offset (PIO_VADDR) 806349Sqs148142 * (DMA virtual address space of the PIO block) 816349Sqs148142 */ 826349Sqs148142 /* TX_RNG_CFIG is not used since we are not using VADDR. */ 836349Sqs148142 #define TX_RNG_CFIG 0x1000000 846349Sqs148142 #define TDMC_PIOVADDR_OFFSET(channel) (2 * DMA_CSR_SIZE * channel) 856349Sqs148142 #define RDMC_PIOVADDR_OFFSET(channel) (TDMC_OFFSET(channel) + DMA_CSR_SIZE) 866349Sqs148142 876349Sqs148142 /* 886349Sqs148142 * PIO access using the DMC block directly (DMC) 896349Sqs148142 */ 906349Sqs148142 #define DMC_OFFSET(channel) (DMA_CSR_SIZE * channel) 916349Sqs148142 #define TDMC_OFFSET(channel) (TX_RNG_CFIG + DMA_CSR_SIZE * channel) 926349Sqs148142 936349Sqs148142 #ifdef SOLARIS 946349Sqs148142 #ifndef i386 956349Sqs148142 #define _BIT_FIELDS_BIG_ENDIAN _BIT_FIELDS_HTOL 966349Sqs148142 #else 976349Sqs148142 #define _BIT_FIELDS_LITTLE_ENDIAN _BIT_FIELDS_LTOH 986349Sqs148142 #endif 996349Sqs148142 #else 1006349Sqs148142 #define _BIT_FIELDS_LITTLE_ENDIAN _LITTLE_ENDIAN_BITFIELD 1016349Sqs148142 #endif 1026349Sqs148142 1036349Sqs148142 /* 1046349Sqs148142 * The following macros expect unsigned input values. 1056349Sqs148142 */ 1066349Sqs148142 #define TXDMA_CHANNEL_VALID(cn) (cn < HXGE_MAX_TDCS) 1076349Sqs148142 1086349Sqs148142 /* 1096349Sqs148142 * Logical device definitions. 1106349Sqs148142 */ 1116349Sqs148142 #define HXGE_INT_MAX_LD 32 1126349Sqs148142 #define HXGE_INT_MAX_LDG 32 1136349Sqs148142 1146349Sqs148142 #define HXGE_RDMA_LD_START 0 /* 0 - 3 with 4 - 7 reserved */ 1156349Sqs148142 #define HXGE_TDMA_LD_START 8 /* 8 - 11 with 12 - 15 reserved */ 1166349Sqs148142 #define HXGE_VMAC_LD 16 1176349Sqs148142 #define HXGE_PFC_LD 17 1186349Sqs148142 #define HXGE_NMAC_LD 18 1196349Sqs148142 #define HXGE_MBOX_LD_START 20 /* 20 - 23 for SW Mbox */ 1206349Sqs148142 #define HXGE_SYS_ERROR_LD 31 1216349Sqs148142 1226349Sqs148142 #define LDG_VALID(n) (n < HXGE_INT_MAX_LDG) 1236349Sqs148142 #define LD_VALID(n) (n < HXGE_INT_MAX_LD) 1246349Sqs148142 #define LD_RXDMA_LD_VALID(n) (n < HXGE_MAX_RDCS) 1256349Sqs148142 #define LD_TXDMA_LD_VALID(n) (n >= HXGE_MAX_RDCS && \ 1266349Sqs148142 ((n - HXGE_MAX_RDCS) < HXGE_MAX_TDCS))) 1276349Sqs148142 1286349Sqs148142 #define LD_TIMER_MAX 0x3f 1296349Sqs148142 #define LD_INTTIMER_VALID(n) (n <= LD_TIMER_MAX) 1306349Sqs148142 1316349Sqs148142 /* System Interrupt Data */ 1326349Sqs148142 #define SID_VECTOR_MAX 0x1f 1336349Sqs148142 #define SID_VECTOR_VALID(n) (n <= SID_VECTOR_MAX) 1346349Sqs148142 1356349Sqs148142 #define LD_IM_MASK 0x00000003ULL 1366349Sqs148142 #define LDGTITMRES_RES_MASK 0x000FFFFFULL 1376349Sqs148142 138*7584SQiyan.Sun@Sun.COM #define MIN_FRAME_SIZE 106 /* 68 byte min MTU + 38 byte header */ 139*7584SQiyan.Sun@Sun.COM #define MAX_FRAME_SIZE 9216 140*7584SQiyan.Sun@Sun.COM #define STD_FRAME_SIZE 1522 /* 1518 + 4 = 5EE + 4 */ 141*7584SQiyan.Sun@Sun.COM #define HXGE_DEFAULT_MTU 1500 142*7584SQiyan.Sun@Sun.COM /* 143*7584SQiyan.Sun@Sun.COM * sizeof (struct ether_header) + ETHERFCSL + 4 + TX_PKT_HEADER_SIZE 144*7584SQiyan.Sun@Sun.COM * 12 + 6 + 4 + 16 145*7584SQiyan.Sun@Sun.COM */ 146*7584SQiyan.Sun@Sun.COM #define MTU_TO_FRAME_SIZE 38 1476349Sqs148142 1486349Sqs148142 #ifdef __cplusplus 1496349Sqs148142 } 1506349Sqs148142 #endif 1516349Sqs148142 1526349Sqs148142 #endif /* _SYS_HXGE_HXGE_DEFS_H */ 153