xref: /onnv-gate/usr/src/uts/common/sys/dld.h (revision 8833:8adf20bc60e3)
10Sstevel@tonic-gate /*
20Sstevel@tonic-gate  * CDDL HEADER START
30Sstevel@tonic-gate  *
40Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
52311Sseb  * Common Development and Distribution License (the "License").
62311Sseb  * You may not use this file except in compliance with the License.
70Sstevel@tonic-gate  *
80Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
90Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
100Sstevel@tonic-gate  * See the License for the specific language governing permissions
110Sstevel@tonic-gate  * and limitations under the License.
120Sstevel@tonic-gate  *
130Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
140Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
150Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
160Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
170Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
180Sstevel@tonic-gate  *
190Sstevel@tonic-gate  * CDDL HEADER END
200Sstevel@tonic-gate  */
210Sstevel@tonic-gate /*
228558SGirish.Moodalbail@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
230Sstevel@tonic-gate  * Use is subject to license terms.
240Sstevel@tonic-gate  */
250Sstevel@tonic-gate 
260Sstevel@tonic-gate #ifndef	_SYS_DLD_H
270Sstevel@tonic-gate #define	_SYS_DLD_H
280Sstevel@tonic-gate 
290Sstevel@tonic-gate /*
300Sstevel@tonic-gate  * Data-Link Driver (public header).
317408SSebastien.Roy@Sun.COM  *
327408SSebastien.Roy@Sun.COM  * Note that the datastructures defined here define an ioctl interface
337408SSebastien.Roy@Sun.COM  * that is shared betwen user and kernel space.  The dld driver thus
347408SSebastien.Roy@Sun.COM  * assumes that the structures have identical layout and size when
357408SSebastien.Roy@Sun.COM  * compiled in either IPL32 or LP64.
360Sstevel@tonic-gate  */
370Sstevel@tonic-gate 
380Sstevel@tonic-gate #include <sys/types.h>
390Sstevel@tonic-gate #include <sys/stream.h>
407408SSebastien.Roy@Sun.COM #include <sys/dld_ioc.h>
418275SEric Cheng #include <sys/mac_flow.h>
425895Syz147064 #include <sys/conf.h>
435895Syz147064 #include <sys/sad.h>
440Sstevel@tonic-gate #include <net/if.h>
455903Ssowmini #include <sys/ddi.h>
465903Ssowmini #include <sys/sunddi.h>
476789Sam223141 #include <sys/mac.h>
480Sstevel@tonic-gate 
490Sstevel@tonic-gate #ifdef	__cplusplus
500Sstevel@tonic-gate extern "C" {
510Sstevel@tonic-gate #endif
520Sstevel@tonic-gate 
530Sstevel@tonic-gate /*
540Sstevel@tonic-gate  * Data-Link Driver Information (text emitted by modinfo(1m))
550Sstevel@tonic-gate  */
566512Ssowmini #define	DLD_INFO	"Data-Link Driver"
570Sstevel@tonic-gate 
580Sstevel@tonic-gate /*
590Sstevel@tonic-gate  * Options: To enable an option set the property name to a non-zero value
600Sstevel@tonic-gate  *	    in kernel/drv/dld.conf.
610Sstevel@tonic-gate  */
620Sstevel@tonic-gate 
630Sstevel@tonic-gate /*
640Sstevel@tonic-gate  * Prevent use of the IP fast-path (direct M_DATA transmit).
650Sstevel@tonic-gate  */
660Sstevel@tonic-gate #define	DLD_PROP_NO_FASTPATH	"no-fastpath"
670Sstevel@tonic-gate 
680Sstevel@tonic-gate /*
690Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_POLL capability.
700Sstevel@tonic-gate  */
710Sstevel@tonic-gate #define	DLD_PROP_NO_POLL	"no-poll"
720Sstevel@tonic-gate 
730Sstevel@tonic-gate /*
740Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_ZEROCOPY capability.
750Sstevel@tonic-gate  */
760Sstevel@tonic-gate #define	DLD_PROP_NO_ZEROCOPY	"no-zerocopy"
770Sstevel@tonic-gate 
780Sstevel@tonic-gate /*
794114Sja97890  * Prevent advertising of the DL_CAPAB_SOFTRING capability.
804114Sja97890  */
814114Sja97890 #define	DLD_PROP_NO_SOFTRING	"no-softring"
824114Sja97890 
834114Sja97890 /*
840Sstevel@tonic-gate  * The name of the driver.
850Sstevel@tonic-gate  */
860Sstevel@tonic-gate #define	DLD_DRIVER_NAME		"dld"
870Sstevel@tonic-gate 
888275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
898275SEric Cheng #pragma pack(4)
908275SEric Cheng #endif
918275SEric Cheng 
920Sstevel@tonic-gate /*
930Sstevel@tonic-gate  * IOCTL codes and data structures.
940Sstevel@tonic-gate  */
957408SSebastien.Roy@Sun.COM #define	DLDIOC_ATTR	DLDIOC(0x03)
960Sstevel@tonic-gate 
970Sstevel@tonic-gate typedef struct dld_ioc_attr {
988275SEric Cheng 	datalink_id_t		dia_linkid;
998275SEric Cheng 	uint_t			dia_max_sdu;
1000Sstevel@tonic-gate } dld_ioc_attr_t;
1010Sstevel@tonic-gate 
1027408SSebastien.Roy@Sun.COM #define	DLDIOC_VLAN_ATTR	DLDIOC(0x04)
1035895Syz147064 typedef struct dld_ioc_vlan_attr {
1045895Syz147064 	datalink_id_t	div_vlanid;
1055895Syz147064 	uint16_t	div_vid;
1065895Syz147064 	datalink_id_t	div_linkid;
1075895Syz147064 	boolean_t	div_force;
1085895Syz147064 } dld_ioc_vlan_attr_t;
109269Sericheng 
1107408SSebastien.Roy@Sun.COM #define	DLDIOC_PHYS_ATTR	DLDIOC(0x05)
1115903Ssowmini #define	DLPI_LINKNAME_MAX	32
1125903Ssowmini 
1135895Syz147064 typedef struct dld_ioc_phys_attr {
1145895Syz147064 	datalink_id_t	dip_linkid;
1155895Syz147064 	/*
1165895Syz147064 	 * Whether this physical link supports vanity naming. Note that
1175895Syz147064 	 * physical links whose media type is not supported by GLDv3
1185895Syz147064 	 * can not support vanity naming.
1195895Syz147064 	 */
1205895Syz147064 	boolean_t	dip_novanity;
1215895Syz147064 	char		dip_dev[MAXLINKNAMELEN];
1225895Syz147064 } dld_ioc_phys_attr_t;
1233448Sdh155122 
1243147Sxc151355 /*
1253147Sxc151355  * Secure objects ioctls
1263147Sxc151355  */
1273147Sxc151355 typedef enum {
1284126Szf162725 	DLD_SECOBJ_CLASS_WEP = 1,
1294126Szf162725 	DLD_SECOBJ_CLASS_WPA
1303147Sxc151355 } dld_secobj_class_t;
1313147Sxc151355 
1323147Sxc151355 #define	DLD_SECOBJ_OPT_CREATE	0x00000001
1333147Sxc151355 #define	DLD_SECOBJ_NAME_MAX	32
1343147Sxc151355 #define	DLD_SECOBJ_VAL_MAX	256
1353147Sxc151355 typedef struct dld_secobj {
1363147Sxc151355 	char			so_name[DLD_SECOBJ_NAME_MAX];
1373147Sxc151355 	dld_secobj_class_t	so_class;
1383147Sxc151355 	uint8_t			so_val[DLD_SECOBJ_VAL_MAX];
1393147Sxc151355 	uint_t			so_len;
1403147Sxc151355 } dld_secobj_t;
1413147Sxc151355 
1427408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_SET	DLDIOC(0x06)
1433147Sxc151355 typedef struct dld_ioc_secobj_set {
1443147Sxc151355 	dld_secobj_t		ss_obj;
1453147Sxc151355 	uint_t			ss_flags;
1463147Sxc151355 } dld_ioc_secobj_set_t;
1473147Sxc151355 
1487408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_GET	DLDIOC(0x07)
1493147Sxc151355 typedef struct dld_ioc_secobj_get {
1503147Sxc151355 	dld_secobj_t		sg_obj;
1513147Sxc151355 	uint_t			sg_count;
1527408SSebastien.Roy@Sun.COM 	uint_t			sg_size;
1533147Sxc151355 } dld_ioc_secobj_get_t;
1543147Sxc151355 
1555895Syz147064 /*
1565895Syz147064  * The following two slots were used outside of ON, so don't reuse them.
1575895Syz147064  *
1587408SSebastien.Roy@Sun.COM  * #define DLDIOCHOLDVLAN DLDIOC(0x08)
1597408SSebastien.Roy@Sun.COM  * #define DLDIOCRELEVLAN DLDIOC(0x09)
1605895Syz147064  */
1615895Syz147064 
1627408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_UNSET	DLDIOC(0x0a)
1633147Sxc151355 typedef struct dld_ioc_secobj_unset {
1643147Sxc151355 	char			su_name[DLD_SECOBJ_NAME_MAX];
1653147Sxc151355 } dld_ioc_secobj_unset_t;
1663147Sxc151355 
1677408SSebastien.Roy@Sun.COM #define	DLDIOC_CREATE_VLAN	DLDIOC(0x0b)
1685895Syz147064 typedef struct dld_ioc_create_vlan {
1695895Syz147064 	datalink_id_t	dic_vlanid;
1705895Syz147064 	datalink_id_t	dic_linkid;
1715895Syz147064 	uint16_t	dic_vid;
1725895Syz147064 	boolean_t	dic_force;
1735895Syz147064 } dld_ioc_create_vlan_t;
1745895Syz147064 
1757408SSebastien.Roy@Sun.COM #define	DLDIOC_DELETE_VLAN	DLDIOC(0x0c)
1765895Syz147064 typedef struct dld_ioc_delete_vlan {
1775895Syz147064 	datalink_id_t	did_linkid;
1785895Syz147064 } dld_ioc_delete_vlan_t;
1795895Syz147064 
1807342SAruna.Ramakrishna@Sun.COM /*
1817342SAruna.Ramakrishna@Sun.COM  * The following constants have been removed, and the slots are open:
1827342SAruna.Ramakrishna@Sun.COM  *
1837408SSebastien.Roy@Sun.COM  * #define DLDIOC_SETAUTOPUSH	DLDIOC(0x0d)
1847408SSebastien.Roy@Sun.COM  * #define DLDIOC_GETAUTOPUSH	DLDIOC(0x0e)
1857408SSebastien.Roy@Sun.COM  * #define DLDIOC_CLRAUTOPUSH	DLDIOC(0x0f)
1867342SAruna.Ramakrishna@Sun.COM  */
1875895Syz147064 
1887408SSebastien.Roy@Sun.COM #define	DLDIOC_DOORSERVER	DLDIOC(0x10)
1895895Syz147064 typedef struct dld_ioc_door {
1905895Syz147064 	boolean_t	did_start_door;
1915895Syz147064 } dld_ioc_door_t;
1925895Syz147064 
1937408SSebastien.Roy@Sun.COM #define	DLDIOC_RENAME		DLDIOC(0x11)
1945895Syz147064 typedef struct dld_ioc_rename {
1955895Syz147064 	datalink_id_t	dir_linkid1;
1965895Syz147064 	datalink_id_t	dir_linkid2;
1975895Syz147064 	char		dir_link[MAXLINKNAMELEN];
1985895Syz147064 } dld_ioc_rename_t;
1995895Syz147064 
2003448Sdh155122 /*
2017342SAruna.Ramakrishna@Sun.COM  * The following constants have been removed, and the slots are open:
2027342SAruna.Ramakrishna@Sun.COM  *
2037408SSebastien.Roy@Sun.COM  * #define DLDIOC_SETZID	DLDIOC(0x12)
2047408SSebastien.Roy@Sun.COM  * #define DLDIOC_GETZID	DLDIOC(0x13)
2053448Sdh155122  */
2063448Sdh155122 
2077342SAruna.Ramakrishna@Sun.COM typedef struct dld_ioc_zid {
2087342SAruna.Ramakrishna@Sun.COM 	zoneid_t	diz_zid;
2097342SAruna.Ramakrishna@Sun.COM 	char		diz_link[MAXLINKNAMELEN];
2107342SAruna.Ramakrishna@Sun.COM } dld_ioc_zid_t;
2113448Sdh155122 
2125895Syz147064 /*
2135895Syz147064  * data-link autopush configuration.
2145895Syz147064  */
2155895Syz147064 struct dlautopush {
2165895Syz147064 	uint_t	dap_anchor;
2175895Syz147064 	uint_t	dap_npush;
2185895Syz147064 	char	dap_aplist[MAXAPUSH][FMNAMESZ+1];
2195895Syz147064 };
2203448Sdh155122 
2218275SEric Cheng #define	DLDIOC_MACADDRGET	DLDIOC(0x15)
2228275SEric Cheng typedef struct dld_ioc_macaddrget {
2238275SEric Cheng 	datalink_id_t	dig_linkid;
2248275SEric Cheng 	uint_t		dig_count;
2258275SEric Cheng 	uint_t		dig_size;
2268275SEric Cheng } dld_ioc_macaddrget_t;
2278275SEric Cheng 
2288275SEric Cheng /* possible flags for dmi_flags below */
2298275SEric Cheng #define	DLDIOCMACADDR_USED	0x1	/* address slot used */
2308275SEric Cheng 
2318275SEric Cheng typedef struct dld_macaddrinfo {
2328275SEric Cheng 	uint_t		dmi_slot;
2338275SEric Cheng 	uint_t		dmi_flags;
2348275SEric Cheng 	uint_t		dmi_addrlen;
2358275SEric Cheng 	uchar_t		dmi_addr[MAXMACADDRLEN];
2368275SEric Cheng 	char		dmi_client_name[MAXNAMELEN];
2378275SEric Cheng 	datalink_id_t	dma_client_linkid;
2388275SEric Cheng } dld_macaddrinfo_t;
2398275SEric Cheng 
2408275SEric Cheng /*
2418275SEric Cheng  * IOCTL codes and data structures for flowadm.
2428275SEric Cheng  */
2438275SEric Cheng #define	DLDIOC_ADDFLOW		DLDIOC(0x16)
2448275SEric Cheng typedef struct dld_ioc_addflow {
2458275SEric Cheng 	datalink_id_t		af_linkid;
2468275SEric Cheng 	flow_desc_t		af_flow_desc;
2478275SEric Cheng 	mac_resource_props_t	af_resource_props;
2488558SGirish.Moodalbail@Sun.COM 	char			af_name[MAXFLOWNAMELEN];
2498275SEric Cheng } dld_ioc_addflow_t;
2508275SEric Cheng 
2518275SEric Cheng #define	DLDIOC_REMOVEFLOW	DLDIOC(0x17)
2528275SEric Cheng typedef struct dld_ioc_removeflow {
2538558SGirish.Moodalbail@Sun.COM 	char			rf_name[MAXFLOWNAMELEN];
2548275SEric Cheng } dld_ioc_removeflow_t;
2558275SEric Cheng 
2568275SEric Cheng #define	DLDIOC_MODIFYFLOW	DLDIOC(0x18)
2578275SEric Cheng typedef struct dld_ioc_modifyflow {
2588558SGirish.Moodalbail@Sun.COM 	char			mf_name[MAXFLOWNAMELEN];
2598275SEric Cheng 	mac_resource_props_t	mf_resource_props;
2608275SEric Cheng } dld_ioc_modifyflow_t;
2618275SEric Cheng 
2628275SEric Cheng #define	DLDIOC_WALKFLOW		DLDIOC(0x19)
2638275SEric Cheng typedef struct dld_ioc_walkflow {
2648275SEric Cheng 	datalink_id_t		wf_linkid;
2658558SGirish.Moodalbail@Sun.COM 	char			wf_name[MAXFLOWNAMELEN];
2668275SEric Cheng 	uint32_t		wf_nflows;
2678275SEric Cheng 	uint_t			wf_len;
2688275SEric Cheng } dld_ioc_walkflow_t;
2698275SEric Cheng 
2708275SEric Cheng typedef struct dld_flowinfo {
2718275SEric Cheng 	datalink_id_t		fi_linkid;
2728275SEric Cheng 	flow_desc_t		fi_flow_desc;
2738275SEric Cheng 	mac_resource_props_t	fi_resource_props;
2748558SGirish.Moodalbail@Sun.COM 	char			fi_flowname[MAXFLOWNAMELEN];
2758275SEric Cheng 	uint32_t		fi_pad;
2768275SEric Cheng } dld_flowinfo_t;
2778275SEric Cheng 
2788275SEric Cheng #define	DLDIOC_USAGELOG		DLDIOC(0x1a)
2798275SEric Cheng typedef struct dld_ioc_usagelog {
2808275SEric Cheng 	mac_logtype_t	ul_type;
2818275SEric Cheng 	boolean_t	ul_onoff;
2828275SEric Cheng 	uint_t		ul_interval;
2838275SEric Cheng } dld_ioc_usagelog_t;
2848275SEric Cheng 
2858275SEric Cheng #define	DLDIOC_SETMACPROP	DLDIOC(0x1b)
2868275SEric Cheng #define	DLDIOC_GETMACPROP	DLDIOC(0x1c)
2876789Sam223141 #define	MAC_PROP_VERSION	1
2885903Ssowmini 
2896789Sam223141 typedef struct dld_ioc_macprop_s {
2905903Ssowmini 	int		pr_version;
2916512Ssowmini 	uint_t		pr_flags;
2925960Ssowmini 	datalink_id_t	pr_linkid;
2936789Sam223141 	mac_prop_id_t	pr_num;
2948118SVasumathi.Sundaram@Sun.COM 	uint_t		pr_perm_flags;
2956512Ssowmini 	char    	pr_name[MAXLINKPROPNAME];
2965903Ssowmini 	uint_t		pr_valsize;		/* sizeof pr_val */
2975903Ssowmini 	char		pr_val[1];
2986789Sam223141 } dld_ioc_macprop_t;
2995903Ssowmini 
3008275SEric Cheng #define	DLDIOC_GETHWGRP		DLDIOC(0x1d)
3018275SEric Cheng 
3028275SEric Cheng typedef struct dld_ioc_hwgrpget {
3038275SEric Cheng 	datalink_id_t	dih_linkid;
3048275SEric Cheng 	uint_t		dih_n_groups;	/* number of groups included in ioc */
3058275SEric Cheng 	uint_t		dih_size;
3068275SEric Cheng } dld_ioc_hwgrpget_t;
3078275SEric Cheng 
3088275SEric Cheng #define	MAXCLIENTNAMELEN	1024
3098275SEric Cheng typedef struct dld_hwgrpinfo {
3108275SEric Cheng 	char	dhi_link_name[MAXLINKNAMELEN];
3118275SEric Cheng 	uint_t	dhi_grp_num;
3128275SEric Cheng 	uint_t	dhi_grp_type;
3138275SEric Cheng 	uint_t	dhi_n_rings;
3148275SEric Cheng 	uint_t	dhi_n_clnts;
3158275SEric Cheng 	/* XXXX later we should use dhi_n_clnts * MAXNAMELEN for dhi_clnts */
3168275SEric Cheng 	char	dhi_clnts[MAXCLIENTNAMELEN];
3178275SEric Cheng } dld_hwgrpinfo_t;
3188275SEric Cheng 
3198275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
3208275SEric Cheng #pragma pack()
3218275SEric Cheng #endif
3228275SEric Cheng 
323269Sericheng #ifdef _KERNEL
3248275SEric Cheng 
3258275SEric Cheng #define	DLD_CAPAB_DIRECT	0x00000001
3268275SEric Cheng #define	DLD_CAPAB_POLL		0x00000002
3278275SEric Cheng #define	DLD_CAPAB_PERIM		0x00000003
3288275SEric Cheng #define	DLD_CAPAB_LSO		0x00000004
3298275SEric Cheng 
3308275SEric Cheng #define	DLD_ENABLE		0x00000001
3318275SEric Cheng #define	DLD_DISABLE		0x00000002
3328275SEric Cheng #define	DLD_QUERY		0x00000003
3338275SEric Cheng 
3348275SEric Cheng /*
3358275SEric Cheng  * GLDv3 entry point for negotiating capabilities.
3368275SEric Cheng  * This is exposed to IP after negotiation of DL_CAPAB_DLD.
3378275SEric Cheng  *
3388275SEric Cheng  * This function takes the following arguments:
3398275SEric Cheng  * handle: used for identifying the interface to operate on (provided by dld).
3408275SEric Cheng  * type: capability type.
3418275SEric Cheng  * arg: points to a capability-specific structure.
3428275SEric Cheng  * flags: used for indicating whether to enable or disable a capability.
3438275SEric Cheng  *
3448275SEric Cheng  * With this function, capability negotiation is reduced from a multi-step
3458275SEric Cheng  * process to just one single function call.
3468275SEric Cheng  * e.g. the following code would pass 'x' from IP to dld and obtain
3478275SEric Cheng  * arg.output_arg from dld:
3488275SEric Cheng  *
3498275SEric Cheng  * arg.input_arg = x;
3508275SEric Cheng  * rc = (*dld_capab)(handle, DLD_CAPAB_XXX, &arg, DLD_ENABLE);
3518275SEric Cheng  * ill->info1 = arg.output_arg;
3528275SEric Cheng  */
3538275SEric Cheng typedef	int	(*dld_capab_func_t)(void *, uint_t, void *, uint_t);
3548275SEric Cheng 
3558275SEric Cheng /*
3568275SEric Cheng  * Direct Tx/Rx capability.
3578275SEric Cheng  */
3588275SEric Cheng typedef struct dld_capab_direct_s {
3598275SEric Cheng 	/*
3608275SEric Cheng 	 * Rx entry point and handle, owned by IP.
3618275SEric Cheng 	 */
3628275SEric Cheng 	uintptr_t	di_rx_cf;
3638275SEric Cheng 	void		*di_rx_ch;
3648275SEric Cheng 
3658275SEric Cheng 	/*
3668275SEric Cheng 	 * Tx entry points and handle, owned by DLD.
3678275SEric Cheng 	 */
3688275SEric Cheng 	/* Entry point for transmitting packets */
3698275SEric Cheng 	uintptr_t	di_tx_df;
3708275SEric Cheng 	void		*di_tx_dh;
3718275SEric Cheng 
3728275SEric Cheng 	/* flow control notification callback */
3738275SEric Cheng 	uintptr_t	di_tx_cb_df; /* callback registration/de-registration */
3748275SEric Cheng 	void		*di_tx_cb_dh;
375*8833SVenu.Iyer@Sun.COM 
376*8833SVenu.Iyer@Sun.COM 	/* flow control "can I put on a ring" callback */
377*8833SVenu.Iyer@Sun.COM 	uintptr_t	di_tx_fctl_df; /* canput-like callback */
378*8833SVenu.Iyer@Sun.COM 	void		*di_tx_fctl_dh;
3798275SEric Cheng } dld_capab_direct_t;
3808275SEric Cheng 
3818275SEric Cheng /*
3828275SEric Cheng  * Polling/softring capability.
3838275SEric Cheng  */
3848275SEric Cheng #define	POLL_SOFTRING		0x00000001
3858275SEric Cheng typedef struct dld_capab_poll_s {
3868275SEric Cheng 	uintptr_t	poll_ring_add_cf;
3878275SEric Cheng 	uintptr_t	poll_ring_remove_cf;
3888275SEric Cheng 	uintptr_t	poll_ring_quiesce_cf;
3898275SEric Cheng 	uintptr_t	poll_ring_restart_cf;
3908275SEric Cheng 	uintptr_t	poll_ring_bind_cf;
3918275SEric Cheng 	void		*poll_ring_ch;
3928275SEric Cheng 	uintptr_t	poll_mac_accept_df;
3938275SEric Cheng 	void		*poll_mac_dh;
3948275SEric Cheng } dld_capab_poll_t;
3958275SEric Cheng 
3968275SEric Cheng /*
3978275SEric Cheng  * LSO capability
3988275SEric Cheng  */
3998275SEric Cheng /*
4008275SEric Cheng  * Currently supported flags for LSO.
4018275SEric Cheng  */
4028275SEric Cheng #define	DLD_LSO_TX_BASIC_TCP_IPV4	0x01	/* TCP LSO capability */
4038275SEric Cheng 
4048275SEric Cheng typedef struct dld_capab_lso_s {
4058275SEric Cheng 	uint_t  lso_flags;	/* capability flags */
4068275SEric Cheng 	uint_t  lso_max;	/* maximum payload */
4078275SEric Cheng } dld_capab_lso_t;
4088275SEric Cheng 
409269Sericheng int	dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
410269Sericheng int	dld_open(queue_t *, dev_t *, int, int, cred_t *);
411269Sericheng int	dld_close(queue_t *);
412269Sericheng void	dld_wput(queue_t *, mblk_t *);
413269Sericheng void	dld_wsrv(queue_t *);
414269Sericheng void	dld_init_ops(struct dev_ops *, const char *);
415269Sericheng void	dld_fini_ops(struct dev_ops *);
4165895Syz147064 int	dld_autopush(dev_t *, struct dlautopush *);
4178275SEric Cheng 
4188275SEric Cheng int	dld_add_flow(datalink_id_t, char *, flow_desc_t *,
4198275SEric Cheng     mac_resource_props_t *);
4208275SEric Cheng int	dld_remove_flow(char *);
4218275SEric Cheng int	dld_modify_flow(char *, mac_resource_props_t *);
4228275SEric Cheng int	dld_walk_flow(dld_ioc_walkflow_t *, intptr_t);
4238275SEric Cheng 
424269Sericheng #endif
425269Sericheng 
4260Sstevel@tonic-gate #ifdef	__cplusplus
4270Sstevel@tonic-gate }
4280Sstevel@tonic-gate #endif
4290Sstevel@tonic-gate 
4300Sstevel@tonic-gate #endif	/* _SYS_DLD_H */
431