usr/src/uts/common/sys/gld.h
author masputra
Sat, 22 Oct 2005 22:50:14 -0700
changeset 741 40027a3621ac
parent 0 68f95e015346
child 2760 38f12e308f6d
permissions -rw-r--r--
PSARC 2005/082 Yosemite: UDP Performance Enhancement 4796051 Solaris needs a more complete HW checksumming support 4905227 duplicate macros in ipclassifier.h and ip.h 4915681 need hardware checksum offload for the case of IP/UDP reassembly 6201076 outbound flow-control dysfunctional, ip to ce using mdt 6223331 ipv6 flow control may corrupt UDP packets 6223809 16-bit aligned IP header should be allowed for all x86 platforms 6275398 Galaxy hangs when running lmbench 6281836 Yosemite project integration into Solaris 6281885 xge needs to support IPv6 checksum offload 6282776 IPv6 NCE fast path is not created for incoming solicitation 6304890 IP transmit-side checksum logic needs to be tightened 6304902 IP6_IN_NOCKSUM is obsolete and should be torched 6304904 UDP should reject TI_GETPEERNAME for non-connected endpoint 6306768 IP and UDP device and module definitions need to be centralized
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
 * gld - Generic LAN Driver support system for DLPI drivers.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#ifndef	_SYS_GLD_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#define	_SYS_GLD_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/ethernet.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 * Media specific MIB-II counters/statistics
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * This only includes those that aren't in the legacy counters.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
typedef union media_stats {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
	struct dot3stat {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
		/* Ethernet: RFC1643 Dot3Stats (subset) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
		uint32_t	first_coll;	/* SingleCollisionFrames */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
		uint32_t	multi_coll;	/* MultipleCollisionFrames */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
		uint32_t	sqe_error;	/* SQETestErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
		uint32_t	mac_xmt_error;	/* InternalMacTransmitErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
		uint32_t	frame_too_long;	/* FrameTooLongs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
		uint32_t	mac_rcv_error;	/* InternalMacReceiveErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
	} dot3;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
	struct dot5stat {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
		/* Token Ring: RFC1748 Dot5Stats (subset) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
		uint32_t	ace_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
		uint32_t	internal_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
		uint32_t	lost_frame_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
		uint32_t	frame_copied_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
		uint32_t	token_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
		uint32_t	freq_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
	} dot5;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
	struct fddistat {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
		/* FDDI: RFC1512 (subset) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
		uint32_t	mac_error;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
		uint32_t	mac_lost;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
		uint32_t	mac_token;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
		uint32_t	mac_tvx_expired;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
		uint32_t	mac_late;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
		uint32_t	mac_ring_op;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	} fddi;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	uint32_t		pad[16];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
} media_stats_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
#define	glds_dot3_first_coll		glds_media_specific.dot3.first_coll
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
#define	glds_dot3_multi_coll		glds_media_specific.dot3.multi_coll
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
#define	glds_dot3_sqe_error		glds_media_specific.dot3.sqe_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
#define	glds_dot3_mac_xmt_error		glds_media_specific.dot3.mac_xmt_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
#define	glds_dot3_mac_rcv_error		glds_media_specific.dot3.mac_rcv_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
#define	glds_dot3_frame_too_long	glds_media_specific.dot3.frame_too_long
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
#define	glds_dot5_line_error		glds_crc
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
#define	glds_dot5_burst_error		glds_frame
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
#define	glds_dot5_ace_error		glds_media_specific.dot5.ace_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
#define	glds_dot5_internal_error	glds_media_specific.dot5.internal_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
#define	glds_dot5_lost_frame_error   glds_media_specific.dot5.lost_frame_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
#define	glds_dot5_frame_copied_error glds_media_specific.dot5.frame_copied_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
#define	glds_dot5_token_error		glds_media_specific.dot5.token_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
#define	glds_dot5_signal_loss		glds_nocarrier
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
#define	glds_dot5_freq_error		glds_media_specific.dot5.freq_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
#define	glds_fddi_mac_error		glds_media_specific.fddi.mac_error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
#define	glds_fddi_mac_lost		glds_media_specific.fddi.mac_lost
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
#define	glds_fddi_mac_token		glds_media_specific.fddi.mac_token
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#define	glds_fddi_mac_tvx_expired	glds_media_specific.fddi.mac_tvx_expired
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
#define	glds_fddi_mac_late		glds_media_specific.fddi.mac_late
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#define	glds_fddi_mac_ring_op		glds_media_specific.fddi.mac_ring_op
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
 * structure for driver statistics
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
struct gld_stats {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	ulong_t		glds_multixmt;	/* (G) ifOutMulticastPkts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	ulong_t		glds_multircv;	/* (G) ifInMulticastPkts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	ulong_t		glds_brdcstxmt;	/* (G) ifOutBroadcastPkts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	ulong_t		glds_brdcstrcv;	/* (G) ifInBroadcastPkts */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	uint32_t	glds_blocked;	/* (G) discard: upstream flow cntrl */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	uint32_t	glds_reserved1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	uint32_t	glds_reserved2;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	uint32_t	glds_reserved3;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	uint32_t	glds_reserved4;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
	uint32_t	glds_errxmt;	/* (D) ifOutErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	uint32_t	glds_errrcv;	/* (D) ifInErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	uint32_t	glds_collisions; /* (e) Sun MIB's rsIfCollisions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	uint32_t	glds_excoll;	/* (e) dot3StatsExcessiveCollisions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	uint32_t	glds_defer;	/* (e) dot3StatsDeferredTransmissions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	uint32_t	glds_frame;	/* (e) dot3StatsAlignErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	uint32_t	glds_crc;	/* (e) dot3StatsFCSErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	uint32_t	glds_overflow;	/* (D) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	uint32_t	glds_underflow;	/* (D) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
	uint32_t	glds_short;	/* (e) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	uint32_t	glds_missed;	/* (D) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	uint32_t	glds_xmtlatecoll; /* (e) dot3StatsLateCollisions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	uint32_t	glds_nocarrier; /* (e) dot3StatsCarrierSenseErrors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	uint32_t	glds_noxmtbuf;	/* (G) ifOutDiscards */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	uint32_t	glds_norcvbuf;	/* (D) ifInDiscards */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	uint32_t	glds_intr;	/* (D) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	uint32_t	glds_xmtretry;	/* (G) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	uint64_t	glds_pktxmt64;	/* (G) 64-bit rsIfOutPackets */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	uint64_t	glds_pktrcv64;	/* (G) 64-bit rsIfInPackets */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	uint64_t	glds_bytexmt64;	/* (G) ifHCOutOctets */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	uint64_t	glds_bytercv64;	/* (G) ifHCInOctets */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
	uint64_t	glds_speed;	/* (D) ifSpeed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	uint32_t	glds_duplex;	/* (e) Invented for GLD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	uint32_t	glds_media;	/* (D) Invented for GLD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	uint32_t	glds_unknowns;	/* (G) ifInUnknownProtos */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	uint32_t	reserved[19];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	media_stats_t	glds_media_specific;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	uint32_t	glds_xmtbadinterp; /* (G) bad packet len/format */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	uint32_t	glds_rcvbadinterp; /* (G) bad packet len/format */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	uint32_t	glds_gldnorcvbuf;  /* (G) norcvbuf from inside GLD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
 * gld_mac_info structure.  Used to define the per-board data for all
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
 * drivers.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
 * The below definition of gld_mac_info contains GLD PRIVATE entries that must
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
 * not be used by the device driver. Only entries marked SET BY DRIVER should
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
 * be modified.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
#define	GLD_STATS_SIZE_ORIG	(sizeof (uint32_t) * 26) /* don't change */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
#define	GLD_KSTAT_SIZE_ORIG (sizeof (kstat_named_t) * 26) /* don't change */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
#define	GLD_PAD  ((int)GLD_KSTAT_SIZE_ORIG + (int)GLD_STATS_SIZE_ORIG)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
typedef union gld_lock {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	kmutex_t	reserved;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	krwlock_t	gldl_rw_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
} gld_lock_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
typedef struct gld_mac_info {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	struct gld_mac_info *gldm_next;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	struct gld_mac_info *gldm_prev;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	caddr_t		reserved1;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	caddr_t		reserved2;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	uint16_t	gldm_driver_version;		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	uint16_t	gldm_GLD_version;		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
	uint16_t	gldm_GLD_flags;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	uint16_t	gldm_options;			/* GLD_PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	dev_info_t	*gldm_devinfo;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	uchar_t		*gldm_vendor_addr;		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	uchar_t		*gldm_broadcast_addr;		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	gld_lock_t	gldm_lock;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	ddi_iblock_cookie_t gldm_cookie;		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	uint32_t	reserved3;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	uint32_t	reserved4;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	uint32_t	gldm_maxpkt;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	uint32_t	gldm_minpkt;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	char		*gldm_ident;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	uint32_t	gldm_type;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	uint32_t	reserved5;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
	uint32_t	gldm_addrlen;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	int32_t		gldm_saplen;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
							/* NOTE: MUST BE -2 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	unsigned char	reserved7[ETHERADDRL];		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	unsigned char	reserved8[ETHERADDRL];		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
	unsigned char	reserved9[ETHERADDRL];		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
	t_uscalar_t	gldm_ppa;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
	int32_t		reserved10;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	uint32_t	gldm_capabilities; 		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
	int32_t		gldm_linkstate;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
	uint32_t	reserved11;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	caddr_t		reserved12;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
	int32_t		reserved13;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	uint32_t	reserved14;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
	int32_t		reserved15;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	caddr_t		gldm_mac_pvt;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	caddr_t		reserved16;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	char		reserved17[GLD_PAD];		/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	caddr_t		reserved18;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
	caddr_t		gldm_private;			/* GLD PRIVATE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	int		(*gldm_reset)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	int		(*gldm_start)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	int		(*gldm_stop)();			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	int		(*gldm_set_mac_addr)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	int		(*gldm_send)();			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	int		(*gldm_set_promiscuous)();	/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	int		(*gldm_get_stats)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
	int		(*gldm_ioctl)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	int		(*gldm_set_multicast)(); 	/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	uint_t		(*gldm_intr)();			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
	int		(*gldm_mctl)();			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	int		(*gldm_send_tagged)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	 * The following MDT related entry points are Sun private,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	 * meant only for use by Sun's IPoIB (ibd) driver.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	int		(*gldm_mdt_pre)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	void		(*gldm_mdt_send)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	void		(*gldm_mdt_post)();		/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	int		gldm_mdt_sgl;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	int		gldm_mdt_segs;			/* SET BY DRIVER */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
} gld_mac_info_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
/* flags for physical promiscuous state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
#define	GLD_MAC_PROMISC_NOOP	-1	/* leave mode unchanged		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
#define	GLD_MAC_PROMISC_NONE	0	/* promiscuous mode(s) OFF	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
#define	GLD_MAC_PROMISC_PHYS	1	/* receive all packets		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
#define	GLD_MAC_PROMISC_MULTI	2	/* receive all multicast packets */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
#define	GLD_MULTI_ENABLE	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
#define	GLD_MULTI_DISABLE	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
/* flags for gldm_capabilities */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
#define	GLD_CAP_LINKSTATE	0x00000001 /* will call gld_linkstate() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
#define	GLD_CAP_CKSUM_IPHDR	0x00000008 /* IP checksum offload	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
#define	GLD_CAP_CKSUM_PARTIAL	0x00000010 /* TCP/UDP partial		*/
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   243
#define	GLD_CAP_CKSUM_FULL_V4	0x00000020 /* TCP/UDP full for IPv4	*/
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
#define	GLD_CAP_ZEROCOPY	0x00000040 /* zerocopy */
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   245
#define	GLD_CAP_CKSUM_FULL_V6	0x00000080 /* TCP/UDP full for IPv6	*/
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   246
#define	GLD_CAP_CKSUM_ANY				\
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   247
	(GLD_CAP_CKSUM_IPHDR|GLD_CAP_CKSUM_PARTIAL|	\
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
   248
	GLD_CAP_CKSUM_FULL_V4|GLD_CAP_CKSUM_FULL_V6)
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
/* values of gldm_linkstate, as passed to gld_linkstate() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
#define	GLD_LINKSTATE_DOWN	-1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
#define	GLD_LINKSTATE_UNKNOWN	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
#define	GLD_LINKSTATE_UP	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
 * media type: this identifies the media/connector currently used by the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
 * driver.  Possible types will be defined for each DLPI type defined in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
 * gldm_type.  The below definitions should be used by the device dependent
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
 * drivers to set glds_media.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
/* if driver cannot determine media/connector type  */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
#define	GLDM_UNKNOWN	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
#define	GLDM_AUI	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
#define	GLDM_BNC	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
#define	GLDM_TP		3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
#define	GLDM_FIBER	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
#define	GLDM_100BT	5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
#define	GLDM_VGANYLAN	6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
#define	GLDM_10BT	7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
#define	GLDM_RING4	8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
#define	GLDM_RING16	9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
#define	GLDM_PHYMII	10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
#define	GLDM_100BTX	11
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
#define	GLDM_100BT4	12
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
#define	GLDM_IB		14
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
/* defines for possible duplex states (glds_duplex) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
#define	GLD_DUPLEX_UNKNOWN	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
#define	GLD_DUPLEX_HALF		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
#define	GLD_DUPLEX_FULL		2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
/* Values returned from driver entry points */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
#define	GLD_SUCCESS		0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
#define	GLD_NORESOURCES		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
#define	GLD_NOTSUPPORTED	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
#define	GLD_BADARG		3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
#define	GLD_NOLINK		4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
#define	GLD_RETRY		5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
#define	GLD_FAILURE		(-1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
#if defined(_KERNEL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
/* Functions exported to drivers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
extern gld_mac_info_t *gld_mac_alloc(dev_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
extern void gld_mac_free(gld_mac_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
extern int gld_register(dev_info_t *, char *, gld_mac_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
extern int gld_unregister(gld_mac_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
extern void gld_recv(gld_mac_info_t *, mblk_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
extern void gld_recv_tagged(gld_mac_info_t *, mblk_t *, uint32_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
extern void gld_linkstate(gld_mac_info_t *, int32_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
extern void gld_sched(gld_mac_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
extern uint_t gld_intr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
extern int gld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
extern int gld_open(queue_t *, dev_t *, int, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
extern int gld_close(queue_t *, int, cred_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
extern int gld_wput(queue_t *, mblk_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
extern int gld_wsrv(queue_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
extern int gld_rsrv(queue_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
 * VLAN tag macros
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
 * Per IEEE802.1Q, a VLAN tag is made up of a 2-byte Tagged Protocol
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
 * Identifier (TPID) and two bytes of Tag/Control information (TCI).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
 * All fields should be treated as unsigned, and so a VTAG is held as
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
 * a 'uint32_t'
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
#define	VTAG_SIZE	4		/* bytes (octets)		*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
#define	VLAN_TPID_MASK	0xffff0000u
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
#define	VLAN_TPID_SHIFT	16
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
#define	VLAN_TCI_MASK	0x0000ffffu
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
#define	VLAN_TCI_SHIFT	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
#define	VLAN_PRI_MASK	0x0000e000u
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
#define	VLAN_PRI_SHIFT	13
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
#define	VLAN_CFI_MASK	0x00001000u
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
#define	VLAN_CFI_SHIFT	12
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
#define	VLAN_VID_MASK	0x00000fffu
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
#define	VLAN_VID_SHIFT	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
#define	VLAN_TPID	0x8100u		/* Per IEEE 802.1Q standard	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
#define	VLAN_CFI_ETHER	0		/* CFI on Ethernet must be 0	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
#define	VLAN_PRI_DFLT	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
#define	VLAN_PRI_MAX	7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
#define	VLAN_VID_NONE	0		/* Not a valid VID		*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
#define	VLAN_VID_MIN	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
#define	VLAN_VID_MAX	4094		/* IEEE std; 4095 is reserved	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
#define	VLAN_VTAG_NONE	0		/* Special case: "untagged"	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
 * Macros to construct a TCI or VTAG.  The user must ensure values are in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
 * range.  In particular, VID 0 is not a valid argument to these constructor
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
 * macros; when the VID is 0 (VLAN_VID_NONE), the whole VTAG should be 0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
 * (VLAN_VTAG_NONE), not 0x81000000.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
#define	GLD_MAKE_TCI(pri, cfi, vid)    (((pri) << VLAN_PRI_SHIFT) |	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
					((cfi) << VLAN_CFI_SHIFT) |	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
					((vid) << VLAN_VID_SHIFT))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
#define	GLD_MAKE_VTAG(tci)	((VLAN_TPID << VLAN_TPID_SHIFT) | (tci))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
 * Macros to construct a prototype TCI/VTAG and then convert it to a real one
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
#define	GLD_MK_PTCI(cfi, vid)	GLD_MAKE_TCI(VLAN_PRI_MAX, cfi, vid)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
#define	GLD_MK_PTAG(cfi, vid)	GLD_MAKE_VTAG(GLD_MK_PTCI(cfi, vid))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
#define	GLD_MK_PMSK(pri)	(((pri) << VLAN_PRI_SHIFT) | ~VLAN_PRI_MASK)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
#define	GLD_MK_VTAG(ptag, pri)	((ptag) & GLD_MK_PMSK(pri))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
 * Deconstruct a VTAG ...
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
#define	GLD_VTAG_TPID(vtag)	(((vtag) & VLAN_TPID_MASK) >> VLAN_TPID_SHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
#define	GLD_VTAG_TCI(vtag)	(((vtag) & VLAN_TCI_MASK) >> VLAN_TCI_SHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
#define	GLD_VTAG_PRI(vtag)	(((vtag) & VLAN_PRI_MASK) >> VLAN_PRI_SHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
#define	GLD_VTAG_CFI(vtag)	(((vtag) & VLAN_CFI_MASK) >> VLAN_CFI_SHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
#define	GLD_VTAG_VID(vtag)	(((vtag) & VLAN_VID_MASK) >> VLAN_VID_SHIFT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
#endif /* _SYS_GLD_H */