blob: 6a2fb1174f6e511bf87e004792ca5f1655ed1935 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_HXGE_HXGE_DEFS_H
#define _SYS_HXGE_HXGE_DEFS_H
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) && \
!defined(__BIG_ENDIAN) && !defined(__LITTLE_ENDIAN)
#error Host endianness not defined
#endif
#if !defined(_BIT_FIELDS_HTOL) && !defined(_BIT_FIELDS_LTOH) && \
!defined(__BIT_FIELDS_HTOL) && !defined(__BIT_FIELDS_LTOH)
#error Bit ordering not defined
#endif
/* RDC/TDC CSR size */
#define DMA_CSR_SIZE 2048
/*
* Define the Default RBR, RCR
*/
#define RBR_DEFAULT_MAX_BLKS 4096 /* each entry (16 blockaddr/64B) */
#define RBR_NBLK_PER_LINE 16 /* 16 block addresses per 64 B line */
#define RBR_DEFAULT_MAX_LEN 65472 /* 2^16 - 64 */
#define RBR_DEFAULT_MIN_LEN 64 /* multiple of 64 */
#define SW_OFFSET_NO_OFFSET 0
#define SW_OFFSET_64 1 /* 64 bytes */
#define SW_OFFSET_128 2 /* 128 bytes */
#define SW_OFFSET_INVALID 3
/*
* RBR block descriptor is 32 bits (bits [43:12]
*/
#define RBR_BKADDR_SHIFT 12
#define RCR_DEFAULT_MAX_BLKS 4096 /* each entry (8 blockaddr/64B) */
#define RCR_NBLK_PER_LINE 8 /* 8 block addresses per 64 B line */
#define RCR_DEFAULT_MAX_LEN (RCR_DEFAULT_MAX_BLKS)
#define RCR_DEFAULT_MIN_LEN 32
/* DMA Channels. */
#define HXGE_MAX_DMCS (HXGE_MAX_RDCS + HXGE_MAX_TDCS)
#define HXGE_MAX_RDCS 4
#define HXGE_MAX_TDCS 4
#define VLAN_ETHERTYPE (0x8100)
/* 256 total, each blade gets 42 */
#define TCAM_HXGE_TCAM_MAX_ENTRY 42
/*
* Locate the DMA channel start offset (PIO_VADDR)
* (DMA virtual address space of the PIO block)
*/
/* TX_RNG_CFIG is not used since we are not using VADDR. */
#define TX_RNG_CFIG 0x1000000
#define TDMC_PIOVADDR_OFFSET(channel) (2 * DMA_CSR_SIZE * channel)
#define RDMC_PIOVADDR_OFFSET(channel) (TDMC_OFFSET(channel) + DMA_CSR_SIZE)
/*
* PIO access using the DMC block directly (DMC)
*/
#define DMC_OFFSET(channel) (DMA_CSR_SIZE * channel)
#define TDMC_OFFSET(channel) (TX_RNG_CFIG + DMA_CSR_SIZE * channel)
#ifdef SOLARIS
#ifndef i386
#define _BIT_FIELDS_BIG_ENDIAN _BIT_FIELDS_HTOL
#else
#define _BIT_FIELDS_LITTLE_ENDIAN _BIT_FIELDS_LTOH
#endif
#else
#define _BIT_FIELDS_LITTLE_ENDIAN _LITTLE_ENDIAN_BITFIELD
#endif
/*
* The following macros expect unsigned input values.
*/
#define TXDMA_CHANNEL_VALID(cn) (cn < HXGE_MAX_TDCS)
/*
* Logical device definitions.
*/
#define HXGE_INT_MAX_LD 32
#define HXGE_INT_MAX_LDG 32
#define HXGE_RDMA_LD_START 0 /* 0 - 3 with 4 - 7 reserved */
#define HXGE_TDMA_LD_START 8 /* 8 - 11 with 12 - 15 reserved */
#define HXGE_VMAC_LD 16
#define HXGE_PFC_LD 17
#define HXGE_NMAC_LD 18
#define HXGE_MBOX_LD_START 20 /* 20 - 23 for SW Mbox */
#define HXGE_SYS_ERROR_LD 31
#define LDG_VALID(n) (n < HXGE_INT_MAX_LDG)
#define LD_VALID(n) (n < HXGE_INT_MAX_LD)
#define LD_RXDMA_LD_VALID(n) (n < HXGE_MAX_RDCS)
#define LD_TXDMA_LD_VALID(n) (n >= HXGE_MAX_RDCS && \
((n - HXGE_MAX_RDCS) < HXGE_MAX_TDCS)))
#define LD_TIMER_MAX 0x3f
#define LD_INTTIMER_VALID(n) (n <= LD_TIMER_MAX)
/* System Interrupt Data */
#define SID_VECTOR_MAX 0x1f
#define SID_VECTOR_VALID(n) (n <= SID_VECTOR_MAX)
#define LD_IM_MASK 0x00000003ULL
#define LDGTITMRES_RES_MASK 0x000FFFFFULL
#define MIN_FRAME_SIZE 106 /* 68 byte min MTU + 38 byte header */
#define MAX_FRAME_SIZE 9216
#define STD_FRAME_SIZE 1522 /* 1518 + 4 = 5EE + 4 */
#define HXGE_DEFAULT_MTU 1500
/*
* sizeof (struct ether_header) + ETHERFCSL + 4 + TX_PKT_HEADER_SIZE
* 12 + 6 + 4 + 16
*/
#define MTU_TO_FRAME_SIZE 38
#ifdef __cplusplus
}
#endif
#endif /* _SYS_HXGE_HXGE_DEFS_H */
|