gld.h revision 605445d5657096e69d948ccb554c9ff024fa34df
/*
* 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
* 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 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* gld - Generic LAN Driver support system for DLPI drivers.
*/
#ifndef _SYS_GLD_H
#define _SYS_GLD_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/ethernet.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Media specific MIB-II counters/statistics
*
* This only includes those that aren't in the legacy counters.
*/
typedef union media_stats {
struct dot3stat {
/* Ethernet: RFC1643 Dot3Stats (subset) */
} dot3;
struct dot5stat {
/* Token Ring: RFC1748 Dot5Stats (subset) */
} dot5;
struct fddistat {
/* FDDI: RFC1512 (subset) */
} fddi;
#define glds_dot5_line_error glds_crc
#define glds_dot5_burst_error glds_frame
#define glds_dot5_signal_loss glds_nocarrier
/*
* structure for driver statistics
*/
struct gld_stats {
};
/*
* gld_mac_info structure. Used to define the per-board data for all
* drivers.
*
* The below definition of gld_mac_info contains GLD PRIVATE entries that must
* not be used by the device driver. Only entries marked SET BY DRIVER should
* be modified.
*/
typedef union gld_lock {
} gld_lock_t;
typedef struct gld_mac_info {
char *gldm_ident; /* SET BY DRIVER */
/* NOTE: MUST BE -2 */
int (*gldm_reset)(); /* SET BY DRIVER */
int (*gldm_start)(); /* SET BY DRIVER */
int (*gldm_stop)(); /* SET BY DRIVER */
int (*gldm_set_mac_addr)(); /* SET BY DRIVER */
int (*gldm_send)(); /* SET BY DRIVER */
int (*gldm_set_promiscuous)(); /* SET BY DRIVER */
int (*gldm_get_stats)(); /* SET BY DRIVER */
int (*gldm_ioctl)(); /* SET BY DRIVER */
int (*gldm_set_multicast)(); /* SET BY DRIVER */
int (*gldm_mctl)(); /* SET BY DRIVER */
int (*gldm_send_tagged)(); /* SET BY DRIVER */
/*
* The following MDT related entry points are Sun private,
* meant only for use by Sun's IPoIB (ibd) driver.
*/
int (*gldm_mdt_pre)(); /* SET BY DRIVER */
void (*gldm_mdt_send)(); /* SET BY DRIVER */
void (*gldm_mdt_post)(); /* SET BY DRIVER */
int gldm_mdt_sgl; /* SET BY DRIVER */
int gldm_mdt_segs; /* SET BY DRIVER */
/* flags for physical promiscuous state */
#define GLD_MAC_PROMISC_NONE 0 /* promiscuous mode(s) OFF */
#define GLD_MULTI_ENABLE 1
#define GLD_MULTI_DISABLE 0
/* flags for gldm_capabilities */
#define GLD_CAP_CKSUM_ANY \
/* values of gldm_linkstate, as passed to gld_linkstate() */
#define GLD_LINKSTATE_DOWN -1
#define GLD_LINKSTATE_UNKNOWN 0
#define GLD_LINKSTATE_UP 1
/*
* driver. Possible types will be defined for each DLPI type defined in
* gldm_type. The below definitions should be used by the device dependent
* drivers to set glds_media.
*/
#define GLDM_UNKNOWN 0
#define GLDM_AUI 1
#define GLDM_BNC 2
#define GLDM_TP 3
#define GLDM_FIBER 4
#define GLDM_100BT 5
#define GLDM_VGANYLAN 6
#define GLDM_10BT 7
#define GLDM_RING4 8
#define GLDM_RING16 9
#define GLDM_PHYMII 10
#define GLDM_100BTX 11
#define GLDM_100BT4 12
#define GLDM_IB 14
/* defines for possible duplex states (glds_duplex) */
#define GLD_DUPLEX_UNKNOWN 0
#define GLD_DUPLEX_HALF 1
#define GLD_DUPLEX_FULL 2
/* Values returned from driver entry points */
#define GLD_SUCCESS 0
#define GLD_NORESOURCES 1
#define GLD_NOTSUPPORTED 2
#define GLD_BADARG 3
#define GLD_NOLINK 4
#define GLD_RETRY 5
#define GLD_FAILURE (-1)
#if defined(_KERNEL)
/* Functions exported to drivers */
extern void gld_mac_free(gld_mac_info_t *);
extern int gld_unregister(gld_mac_info_t *);
extern void gld_sched(gld_mac_info_t *);
#endif
/*
* VLAN tag macros
*
* Per IEEE802.1Q, a VLAN tag is made up of a 2-byte Tagged Protocol
* All fields should be treated as unsigned, and so a VTAG is held as
* a 'uint32_t'
*/
#define VLAN_TPID_MASK 0xffff0000u
#define VLAN_TPID_SHIFT 16
#define VLAN_TCI_MASK 0x0000ffffu
#define VLAN_TCI_SHIFT 0
#define VLAN_PRI_MASK 0x0000e000u
#define VLAN_PRI_SHIFT 13
#define VLAN_CFI_MASK 0x00001000u
#define VLAN_CFI_SHIFT 12
#define VLAN_VID_MASK 0x00000fffu
#define VLAN_VID_SHIFT 0
#define VLAN_CFI_ETHER 0 /* CFI on Ethernet must be 0 */
#define VLAN_PRI_DFLT 0
#define VLAN_PRI_MAX 7
#define VLAN_VID_NONE 0 /* Not a valid VID */
#define VLAN_VID_MIN 1
#define VLAN_VTAG_NONE 0 /* Special case: "untagged" */
/*
* Macros to construct a TCI or VTAG. The user must ensure values are in
* range. Note that in the special case of priority tag, VLAN_VID_NONE
* is also a valid argument to these constructor macros.
*/
((cfi) << VLAN_CFI_SHIFT) | \
((vid) << VLAN_VID_SHIFT))
((pri) << VLAN_PRI_SHIFT) | \
((cfi) << VLAN_CFI_SHIFT) | \
((vid) << VLAN_VID_SHIFT))
#define GLD_TCI2VTAG(tci) \
/*
*/
/*
* Deconstruct a VTAG ...
*/
#ifdef __cplusplus
}
#endif
#endif /* _SYS_GLD_H */