summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/hxge/hxge_common.h
blob: 818540bb514642fa5766876f250b13f7b6b3d8a9 (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
 * 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 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_SYS_HXGE_HXGE_COMMON_H
#define	_SYS_HXGE_HXGE_COMMON_H

#include <sys/types.h>
#include <hxge_defs.h>
#include <hxge_pfc.h>
#include <hxge_common_impl.h>

#ifdef	__cplusplus
extern "C" {
#endif

#define	HXGE_DMA_START	B_TRUE
#define	HXGE_DMA_STOP	B_FALSE
#define	HXGE_TIMER_RESO	2
#define	HXGE_TIMER_LDG	2

/*
 * Receive and Transmit DMA definitions
 */
#ifdef	_DMA_USES_VIRTADDR
#define	HXGE_DMA_BLOCK		1
#else
#define	HXGE_DMA_BLOCK		(64 * 64)
#endif

#define	HXGE_RBR_RBB_MIN	128
#define	HXGE_RBR_RBB_MAX	((64 * 128) - 1)
#if defined(__sparc)
#define	HXGE_RBR_RBB_DEFAULT	1536		/* Number of RBR Blocks */
#else
#define	HXGE_RBR_RBB_DEFAULT	2048		/* Number of RBR Blocks */
#endif
#define	HXGE_RCR_MIN		(HXGE_RBR_RBB_MIN * 2)
#define	HXGE_RCR_MAX		65504			/* 2^16 - 32 */

/*
 * 4096/256 for x86 and 8192 / 256 for Sparc
 *	NOTE: RCR Ring Size should *not* enable bit 19 of the address.
 */
#if defined(__sparc)
#define	HXGE_RCR_DEFAULT	(HXGE_RBR_RBB_DEFAULT * 32)
#else
#define	HXGE_RCR_DEFAULT	(HXGE_RBR_RBB_DEFAULT * 16)
#endif

#define	HXGE_TX_RING_DEFAULT	2048
#define	HXGE_TX_RING_MAX	((64 * 128) - 1)

#define	RBR_BKSIZE_4K		0
#define	RBR_BKSIZE_8K		1
#define	RBR_BKSIZE_4K_BYTES	(4 * 1024)

#define	RBR_BUFSZ2_2K		0
#define	RBR_BUFSZ2_4K		1
#define	RBR_BUFSZ2_2K_BYTES	(2 * 1024)
#define	RBR_BUFSZ2_4K_BYTES	(4 * 1024)

#define	RBR_BUFSZ1_1K		0
#define	RBR_BUFSZ1_2K		1
#define	RBR_BUFSZ1_1K_BYTES	1024
#define	RBR_BUFSZ1_2K_BYTES	(2 * 1024)

#define	RBR_BUFSZ0_256B		0
#define	RBR_BUFSZ0_512B		1
#define	RBR_BUFSZ0_1K		2
#define	RBR_BUFSZ0_256_BYTES	256
#define	RBR_BUFSZ0_512_BYTES	512
#define	RBR_BUFSZ0_1K_BYTES	1024

/*
 * VLAN table configuration
 */
typedef struct hxge_mv_cfg {
	uint8_t		flag;			/* 0:unconfigure 1:configured */
} hxge_mv_cfg_t, *p_hxge_mv_cfg_t;

typedef struct hxge_param_map {
#if defined(_BIG_ENDIAN)
	uint32_t		rsrvd2:2;	/* [30:31] rsrvd */
	uint32_t		remove:1;	/* [29] Remove */
	uint32_t		pref:1;		/* [28] preference */
	uint32_t		rsrv:4;		/* [27:24] preference */
	uint32_t		map_to:8;	/* [23:16] map to resource */
	uint32_t		param_id:16;	/* [15:0] Param ID */
#else
	uint32_t		param_id:16;	/* [15:0] Param ID */
	uint32_t		map_to:8;	/* [23:16] map to resource */
	uint32_t		rsrv:4;		/* [27:24] preference */
	uint32_t		pref:1;		/* [28] preference */
	uint32_t		remove:1;	/* [29] Remove */
	uint32_t		rsrvd2:2;	/* [30:31] rsrvd */
#endif
} hxge_param_map_t, *p_hxge_param_map_t;

typedef struct hxge_hw_pt_cfg {
	uint32_t	start_tdc;	 /* start TDC (0 - 3)		*/
	uint32_t	max_tdcs;	 /* max TDC in sequence		*/
	uint32_t	start_rdc;	 /* start RDC (0 - 3)		*/
	uint32_t	max_rdcs;	 /* max rdc in sequence		*/
	uint32_t	rx_full_header;	 /* select the header flag	*/
	uint32_t	start_ldg;	 /* starting logical group # 	*/
	uint32_t	max_ldgs;	 /* max logical device group	*/
	uint32_t	max_ldvs;	 /* max logical devices		*/
} hxge_hw_pt_cfg_t, *p_hxge_hw_pt_cfg_t;

/* per port configuration */
typedef struct hxge_dma_pt_cfg {
	hxge_hw_pt_cfg_t hw_config;	/* hardware configuration 	*/

	uint32_t	alloc_buf_size;
	uint32_t	rbr_size;
	uint32_t	rcr_size;
} hxge_dma_pt_cfg_t, *p_hxge_dma_pt_cfg_t;

/* classification configuration */
typedef struct hxge_class_pt_cfg {
	/* VLAN table */
	hxge_mv_cfg_t	vlan_tbl[VLAN_ID_MAX + 1];
	/* class config value */
	uint32_t	init_hash;
	uint32_t	class_cfg[TCAM_CLASS_MAX];
} hxge_class_pt_cfg_t, *p_hxge_class_pt_cfg_t;

typedef struct hxge_hw_list {
	struct hxge_hw_list 	*next;
	hxge_os_mutex_t 	hxge_cfg_lock;
	hxge_os_mutex_t 	hxge_tcam_lock;
	hxge_os_mutex_t 	hxge_vlan_lock;

	hxge_dev_info_t		*parent_devp;
	struct _hxge_t		*hxge_p;
	uint32_t		ndevs;
	uint32_t 		flags;
	uint32_t 		magic;
} hxge_hw_list_t, *p_hxge_hw_list_t;

#ifdef	__cplusplus
}
#endif

#endif	/* _SYS_HXGE_HXGE_COMMON_H */