xref: /onnv-gate/usr/src/uts/common/sys/dld.h (revision 11878:ac93462db6d7)
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 /*
22*11878SVenu.Iyer@Sun.COM  * Copyright 2010 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 /*
30*11878SVenu.Iyer@Sun.COM  * Data-Link Driver ioctl interfaces.
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>
408275SEric Cheng #include <sys/mac_flow.h>
415895Syz147064 #include <sys/conf.h>
425895Syz147064 #include <sys/sad.h>
436789Sam223141 #include <sys/mac.h>
440Sstevel@tonic-gate 
450Sstevel@tonic-gate #ifdef	__cplusplus
460Sstevel@tonic-gate extern "C" {
470Sstevel@tonic-gate #endif
480Sstevel@tonic-gate 
490Sstevel@tonic-gate /*
500Sstevel@tonic-gate  * Data-Link Driver Information (text emitted by modinfo(1m))
510Sstevel@tonic-gate  */
526512Ssowmini #define	DLD_INFO	"Data-Link Driver"
530Sstevel@tonic-gate 
540Sstevel@tonic-gate /*
550Sstevel@tonic-gate  * Options: To enable an option set the property name to a non-zero value
560Sstevel@tonic-gate  *	    in kernel/drv/dld.conf.
570Sstevel@tonic-gate  */
580Sstevel@tonic-gate 
590Sstevel@tonic-gate /*
600Sstevel@tonic-gate  * Prevent use of the IP fast-path (direct M_DATA transmit).
610Sstevel@tonic-gate  */
620Sstevel@tonic-gate #define	DLD_PROP_NO_FASTPATH	"no-fastpath"
630Sstevel@tonic-gate 
640Sstevel@tonic-gate /*
650Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_POLL capability.
660Sstevel@tonic-gate  */
670Sstevel@tonic-gate #define	DLD_PROP_NO_POLL	"no-poll"
680Sstevel@tonic-gate 
690Sstevel@tonic-gate /*
700Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_ZEROCOPY capability.
710Sstevel@tonic-gate  */
720Sstevel@tonic-gate #define	DLD_PROP_NO_ZEROCOPY	"no-zerocopy"
730Sstevel@tonic-gate 
740Sstevel@tonic-gate /*
754114Sja97890  * Prevent advertising of the DL_CAPAB_SOFTRING capability.
764114Sja97890  */
774114Sja97890 #define	DLD_PROP_NO_SOFTRING	"no-softring"
784114Sja97890 
794114Sja97890 /*
800Sstevel@tonic-gate  * The name of the driver.
810Sstevel@tonic-gate  */
820Sstevel@tonic-gate #define	DLD_DRIVER_NAME		"dld"
830Sstevel@tonic-gate 
848275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
858275SEric Cheng #pragma pack(4)
868275SEric Cheng #endif
878275SEric Cheng 
880Sstevel@tonic-gate /*
890Sstevel@tonic-gate  * IOCTL codes and data structures.
900Sstevel@tonic-gate  */
917408SSebastien.Roy@Sun.COM #define	DLDIOC_ATTR	DLDIOC(0x03)
920Sstevel@tonic-gate 
930Sstevel@tonic-gate typedef struct dld_ioc_attr {
948275SEric Cheng 	datalink_id_t		dia_linkid;
958275SEric Cheng 	uint_t			dia_max_sdu;
960Sstevel@tonic-gate } dld_ioc_attr_t;
970Sstevel@tonic-gate 
987408SSebastien.Roy@Sun.COM #define	DLDIOC_VLAN_ATTR	DLDIOC(0x04)
995895Syz147064 typedef struct dld_ioc_vlan_attr {
1005895Syz147064 	datalink_id_t	div_vlanid;
1015895Syz147064 	uint16_t	div_vid;
1025895Syz147064 	datalink_id_t	div_linkid;
1035895Syz147064 	boolean_t	div_force;
1045895Syz147064 } dld_ioc_vlan_attr_t;
105269Sericheng 
1067408SSebastien.Roy@Sun.COM #define	DLDIOC_PHYS_ATTR	DLDIOC(0x05)
1075903Ssowmini #define	DLPI_LINKNAME_MAX	32
1085903Ssowmini 
1095895Syz147064 typedef struct dld_ioc_phys_attr {
1105895Syz147064 	datalink_id_t	dip_linkid;
1115895Syz147064 	/*
1125895Syz147064 	 * Whether this physical link supports vanity naming. Note that
1135895Syz147064 	 * physical links whose media type is not supported by GLDv3
1145895Syz147064 	 * can not support vanity naming.
1155895Syz147064 	 */
1165895Syz147064 	boolean_t	dip_novanity;
1175895Syz147064 	char		dip_dev[MAXLINKNAMELEN];
1185895Syz147064 } dld_ioc_phys_attr_t;
1193448Sdh155122 
1203147Sxc151355 /*
1213147Sxc151355  * Secure objects ioctls
1223147Sxc151355  */
1233147Sxc151355 typedef enum {
1244126Szf162725 	DLD_SECOBJ_CLASS_WEP = 1,
1254126Szf162725 	DLD_SECOBJ_CLASS_WPA
1263147Sxc151355 } dld_secobj_class_t;
1273147Sxc151355 
1283147Sxc151355 #define	DLD_SECOBJ_OPT_CREATE	0x00000001
1293147Sxc151355 #define	DLD_SECOBJ_NAME_MAX	32
1303147Sxc151355 #define	DLD_SECOBJ_VAL_MAX	256
1313147Sxc151355 typedef struct dld_secobj {
1323147Sxc151355 	char			so_name[DLD_SECOBJ_NAME_MAX];
1333147Sxc151355 	dld_secobj_class_t	so_class;
1343147Sxc151355 	uint8_t			so_val[DLD_SECOBJ_VAL_MAX];
1353147Sxc151355 	uint_t			so_len;
1363147Sxc151355 } dld_secobj_t;
1373147Sxc151355 
1387408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_SET	DLDIOC(0x06)
1393147Sxc151355 typedef struct dld_ioc_secobj_set {
1403147Sxc151355 	dld_secobj_t		ss_obj;
1413147Sxc151355 	uint_t			ss_flags;
1423147Sxc151355 } dld_ioc_secobj_set_t;
1433147Sxc151355 
1447408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_GET	DLDIOC(0x07)
1453147Sxc151355 typedef struct dld_ioc_secobj_get {
1463147Sxc151355 	dld_secobj_t		sg_obj;
1473147Sxc151355 	uint_t			sg_count;
1487408SSebastien.Roy@Sun.COM 	uint_t			sg_size;
1493147Sxc151355 } dld_ioc_secobj_get_t;
1503147Sxc151355 
1515895Syz147064 /*
1525895Syz147064  * The following two slots were used outside of ON, so don't reuse them.
1535895Syz147064  *
1547408SSebastien.Roy@Sun.COM  * #define DLDIOCHOLDVLAN DLDIOC(0x08)
1557408SSebastien.Roy@Sun.COM  * #define DLDIOCRELEVLAN DLDIOC(0x09)
1565895Syz147064  */
1575895Syz147064 
1587408SSebastien.Roy@Sun.COM #define	DLDIOC_SECOBJ_UNSET	DLDIOC(0x0a)
1593147Sxc151355 typedef struct dld_ioc_secobj_unset {
1603147Sxc151355 	char			su_name[DLD_SECOBJ_NAME_MAX];
1613147Sxc151355 } dld_ioc_secobj_unset_t;
1623147Sxc151355 
1637408SSebastien.Roy@Sun.COM #define	DLDIOC_CREATE_VLAN	DLDIOC(0x0b)
1645895Syz147064 typedef struct dld_ioc_create_vlan {
1655895Syz147064 	datalink_id_t	dic_vlanid;
1665895Syz147064 	datalink_id_t	dic_linkid;
1675895Syz147064 	uint16_t	dic_vid;
1685895Syz147064 	boolean_t	dic_force;
1695895Syz147064 } dld_ioc_create_vlan_t;
1705895Syz147064 
1717408SSebastien.Roy@Sun.COM #define	DLDIOC_DELETE_VLAN	DLDIOC(0x0c)
1725895Syz147064 typedef struct dld_ioc_delete_vlan {
1735895Syz147064 	datalink_id_t	did_linkid;
1745895Syz147064 } dld_ioc_delete_vlan_t;
1755895Syz147064 
1767342SAruna.Ramakrishna@Sun.COM /*
1777342SAruna.Ramakrishna@Sun.COM  * The following constants have been removed, and the slots are open:
1787342SAruna.Ramakrishna@Sun.COM  *
1797408SSebastien.Roy@Sun.COM  * #define DLDIOC_SETAUTOPUSH	DLDIOC(0x0d)
1807408SSebastien.Roy@Sun.COM  * #define DLDIOC_GETAUTOPUSH	DLDIOC(0x0e)
1817408SSebastien.Roy@Sun.COM  * #define DLDIOC_CLRAUTOPUSH	DLDIOC(0x0f)
1827342SAruna.Ramakrishna@Sun.COM  */
1835895Syz147064 
1847408SSebastien.Roy@Sun.COM #define	DLDIOC_DOORSERVER	DLDIOC(0x10)
1855895Syz147064 typedef struct dld_ioc_door {
1865895Syz147064 	boolean_t	did_start_door;
1875895Syz147064 } dld_ioc_door_t;
1885895Syz147064 
1897408SSebastien.Roy@Sun.COM #define	DLDIOC_RENAME		DLDIOC(0x11)
1905895Syz147064 typedef struct dld_ioc_rename {
1915895Syz147064 	datalink_id_t	dir_linkid1;
1925895Syz147064 	datalink_id_t	dir_linkid2;
1935895Syz147064 	char		dir_link[MAXLINKNAMELEN];
1945895Syz147064 } dld_ioc_rename_t;
1955895Syz147064 
1963448Sdh155122 /*
1977342SAruna.Ramakrishna@Sun.COM  * The following constants have been removed, and the slots are open:
1987342SAruna.Ramakrishna@Sun.COM  *
1997408SSebastien.Roy@Sun.COM  * #define DLDIOC_SETZID	DLDIOC(0x12)
2007408SSebastien.Roy@Sun.COM  * #define DLDIOC_GETZID	DLDIOC(0x13)
2013448Sdh155122  */
2023448Sdh155122 
2037342SAruna.Ramakrishna@Sun.COM typedef struct dld_ioc_zid {
2047342SAruna.Ramakrishna@Sun.COM 	zoneid_t	diz_zid;
20510616SSebastien.Roy@Sun.COM 	datalink_id_t	diz_linkid;
2067342SAruna.Ramakrishna@Sun.COM } dld_ioc_zid_t;
2073448Sdh155122 
2085895Syz147064 /*
2095895Syz147064  * data-link autopush configuration.
2105895Syz147064  */
2115895Syz147064 struct dlautopush {
2125895Syz147064 	uint_t	dap_anchor;
2135895Syz147064 	uint_t	dap_npush;
2145895Syz147064 	char	dap_aplist[MAXAPUSH][FMNAMESZ+1];
2155895Syz147064 };
2163448Sdh155122 
2178275SEric Cheng #define	DLDIOC_MACADDRGET	DLDIOC(0x15)
2188275SEric Cheng typedef struct dld_ioc_macaddrget {
2198275SEric Cheng 	datalink_id_t	dig_linkid;
2208275SEric Cheng 	uint_t		dig_count;
2218275SEric Cheng 	uint_t		dig_size;
2228275SEric Cheng } dld_ioc_macaddrget_t;
2238275SEric Cheng 
2248275SEric Cheng /* possible flags for dmi_flags below */
2258275SEric Cheng #define	DLDIOCMACADDR_USED	0x1	/* address slot used */
2268275SEric Cheng 
2278275SEric Cheng typedef struct dld_macaddrinfo {
2288275SEric Cheng 	uint_t		dmi_slot;
2298275SEric Cheng 	uint_t		dmi_flags;
2308275SEric Cheng 	uint_t		dmi_addrlen;
2318275SEric Cheng 	uchar_t		dmi_addr[MAXMACADDRLEN];
2328275SEric Cheng 	char		dmi_client_name[MAXNAMELEN];
2338275SEric Cheng 	datalink_id_t	dma_client_linkid;
2348275SEric Cheng } dld_macaddrinfo_t;
2358275SEric Cheng 
2368275SEric Cheng /*
2378275SEric Cheng  * IOCTL codes and data structures for flowadm.
2388275SEric Cheng  */
2398275SEric Cheng #define	DLDIOC_ADDFLOW		DLDIOC(0x16)
2408275SEric Cheng typedef struct dld_ioc_addflow {
2418275SEric Cheng 	datalink_id_t		af_linkid;
2428275SEric Cheng 	flow_desc_t		af_flow_desc;
2438275SEric Cheng 	mac_resource_props_t	af_resource_props;
2448558SGirish.Moodalbail@Sun.COM 	char			af_name[MAXFLOWNAMELEN];
2458275SEric Cheng } dld_ioc_addflow_t;
2468275SEric Cheng 
2478275SEric Cheng #define	DLDIOC_REMOVEFLOW	DLDIOC(0x17)
2488275SEric Cheng typedef struct dld_ioc_removeflow {
2498558SGirish.Moodalbail@Sun.COM 	char			rf_name[MAXFLOWNAMELEN];
2508275SEric Cheng } dld_ioc_removeflow_t;
2518275SEric Cheng 
2528275SEric Cheng #define	DLDIOC_MODIFYFLOW	DLDIOC(0x18)
2538275SEric Cheng typedef struct dld_ioc_modifyflow {
2548558SGirish.Moodalbail@Sun.COM 	char			mf_name[MAXFLOWNAMELEN];
2558275SEric Cheng 	mac_resource_props_t	mf_resource_props;
2568275SEric Cheng } dld_ioc_modifyflow_t;
2578275SEric Cheng 
2588275SEric Cheng #define	DLDIOC_WALKFLOW		DLDIOC(0x19)
2598275SEric Cheng typedef struct dld_ioc_walkflow {
2608275SEric Cheng 	datalink_id_t		wf_linkid;
2618558SGirish.Moodalbail@Sun.COM 	char			wf_name[MAXFLOWNAMELEN];
2628275SEric Cheng 	uint32_t		wf_nflows;
2638275SEric Cheng 	uint_t			wf_len;
2648275SEric Cheng } dld_ioc_walkflow_t;
2658275SEric Cheng 
2668275SEric Cheng typedef struct dld_flowinfo {
2678275SEric Cheng 	datalink_id_t		fi_linkid;
2688275SEric Cheng 	flow_desc_t		fi_flow_desc;
2698275SEric Cheng 	mac_resource_props_t	fi_resource_props;
2708558SGirish.Moodalbail@Sun.COM 	char			fi_flowname[MAXFLOWNAMELEN];
2718275SEric Cheng 	uint32_t		fi_pad;
2728275SEric Cheng } dld_flowinfo_t;
2738275SEric Cheng 
2748275SEric Cheng #define	DLDIOC_USAGELOG		DLDIOC(0x1a)
2758275SEric Cheng typedef struct dld_ioc_usagelog {
2768275SEric Cheng 	mac_logtype_t	ul_type;
2778275SEric Cheng 	boolean_t	ul_onoff;
2788275SEric Cheng 	uint_t		ul_interval;
2798275SEric Cheng } dld_ioc_usagelog_t;
2808275SEric Cheng 
2818275SEric Cheng #define	DLDIOC_SETMACPROP	DLDIOC(0x1b)
2828275SEric Cheng #define	DLDIOC_GETMACPROP	DLDIOC(0x1c)
283*11878SVenu.Iyer@Sun.COM 
284*11878SVenu.Iyer@Sun.COM /* pr_flags can be set to a combination of the following flags */
285*11878SVenu.Iyer@Sun.COM #define	DLD_PROP_DEFAULT	0x0001
286*11878SVenu.Iyer@Sun.COM #define	DLD_PROP_POSSIBLE	0x0002
2875903Ssowmini 
2886789Sam223141 typedef struct dld_ioc_macprop_s {
2896512Ssowmini 	uint_t		pr_flags;
2905960Ssowmini 	datalink_id_t	pr_linkid;
2916789Sam223141 	mac_prop_id_t	pr_num;
2928118SVasumathi.Sundaram@Sun.COM 	uint_t		pr_perm_flags;
2936512Ssowmini 	char    	pr_name[MAXLINKPROPNAME];
2945903Ssowmini 	uint_t		pr_valsize;		/* sizeof pr_val */
2955903Ssowmini 	char		pr_val[1];
2966789Sam223141 } dld_ioc_macprop_t;
2975903Ssowmini 
2988275SEric Cheng #define	DLDIOC_GETHWGRP		DLDIOC(0x1d)
2998275SEric Cheng 
3008275SEric Cheng typedef struct dld_ioc_hwgrpget {
3018275SEric Cheng 	datalink_id_t	dih_linkid;
3028275SEric Cheng 	uint_t		dih_n_groups;	/* number of groups included in ioc */
3038275SEric Cheng 	uint_t		dih_size;
3048275SEric Cheng } dld_ioc_hwgrpget_t;
3058275SEric Cheng 
3068275SEric Cheng #define	MAXCLIENTNAMELEN	1024
3078275SEric Cheng typedef struct dld_hwgrpinfo {
3088275SEric Cheng 	char	dhi_link_name[MAXLINKNAMELEN];
3098275SEric Cheng 	uint_t	dhi_grp_num;
3108275SEric Cheng 	uint_t	dhi_grp_type;
3118275SEric Cheng 	uint_t	dhi_n_rings;
3128275SEric Cheng 	uint_t	dhi_n_clnts;
313*11878SVenu.Iyer@Sun.COM 	uint_t	dhi_rings[MAX_RINGS_PER_GROUP];
3148275SEric Cheng 	char	dhi_clnts[MAXCLIENTNAMELEN];
3158275SEric Cheng } dld_hwgrpinfo_t;
3168275SEric Cheng 
3178275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
3188275SEric Cheng #pragma pack()
3198275SEric Cheng #endif
3208275SEric Cheng 
321269Sericheng #ifdef _KERNEL
3228275SEric Cheng 
3238275SEric Cheng #define	DLD_CAPAB_DIRECT	0x00000001
3248275SEric Cheng #define	DLD_CAPAB_POLL		0x00000002
3258275SEric Cheng #define	DLD_CAPAB_PERIM		0x00000003
3268275SEric Cheng #define	DLD_CAPAB_LSO		0x00000004
3278275SEric Cheng 
3288275SEric Cheng #define	DLD_ENABLE		0x00000001
3298275SEric Cheng #define	DLD_DISABLE		0x00000002
3308275SEric Cheng #define	DLD_QUERY		0x00000003
3318275SEric Cheng 
3328275SEric Cheng /*
3338275SEric Cheng  * GLDv3 entry point for negotiating capabilities.
3348275SEric Cheng  * This is exposed to IP after negotiation of DL_CAPAB_DLD.
3358275SEric Cheng  *
3368275SEric Cheng  * This function takes the following arguments:
3378275SEric Cheng  * handle: used for identifying the interface to operate on (provided by dld).
3388275SEric Cheng  * type: capability type.
3398275SEric Cheng  * arg: points to a capability-specific structure.
3408275SEric Cheng  * flags: used for indicating whether to enable or disable a capability.
3418275SEric Cheng  *
3428275SEric Cheng  * With this function, capability negotiation is reduced from a multi-step
3438275SEric Cheng  * process to just one single function call.
3448275SEric Cheng  * e.g. the following code would pass 'x' from IP to dld and obtain
3458275SEric Cheng  * arg.output_arg from dld:
3468275SEric Cheng  *
3478275SEric Cheng  * arg.input_arg = x;
3488275SEric Cheng  * rc = (*dld_capab)(handle, DLD_CAPAB_XXX, &arg, DLD_ENABLE);
3498275SEric Cheng  * ill->info1 = arg.output_arg;
3508275SEric Cheng  */
3518275SEric Cheng typedef	int	(*dld_capab_func_t)(void *, uint_t, void *, uint_t);
3528275SEric Cheng 
3538275SEric Cheng /*
3548275SEric Cheng  * Direct Tx/Rx capability.
3558275SEric Cheng  */
3568275SEric Cheng typedef struct dld_capab_direct_s {
3578275SEric Cheng 	/*
3588275SEric Cheng 	 * Rx entry point and handle, owned by IP.
3598275SEric Cheng 	 */
3608275SEric Cheng 	uintptr_t	di_rx_cf;
3618275SEric Cheng 	void		*di_rx_ch;
3628275SEric Cheng 
3638275SEric Cheng 	/*
3648275SEric Cheng 	 * Tx entry points and handle, owned by DLD.
3658275SEric Cheng 	 */
3668275SEric Cheng 	/* Entry point for transmitting packets */
3678275SEric Cheng 	uintptr_t	di_tx_df;
3688275SEric Cheng 	void		*di_tx_dh;
3698275SEric Cheng 
3708275SEric Cheng 	/* flow control notification callback */
3718275SEric Cheng 	uintptr_t	di_tx_cb_df; /* callback registration/de-registration */
3728275SEric Cheng 	void		*di_tx_cb_dh;
3738833SVenu.Iyer@Sun.COM 
3748833SVenu.Iyer@Sun.COM 	/* flow control "can I put on a ring" callback */
3758833SVenu.Iyer@Sun.COM 	uintptr_t	di_tx_fctl_df; /* canput-like callback */
3768833SVenu.Iyer@Sun.COM 	void		*di_tx_fctl_dh;
3778275SEric Cheng } dld_capab_direct_t;
3788275SEric Cheng 
3798275SEric Cheng /*
3808275SEric Cheng  * Polling/softring capability.
3818275SEric Cheng  */
3828275SEric Cheng #define	POLL_SOFTRING		0x00000001
3838275SEric Cheng typedef struct dld_capab_poll_s {
3848275SEric Cheng 	uintptr_t	poll_ring_add_cf;
3858275SEric Cheng 	uintptr_t	poll_ring_remove_cf;
3868275SEric Cheng 	uintptr_t	poll_ring_quiesce_cf;
3878275SEric Cheng 	uintptr_t	poll_ring_restart_cf;
3888275SEric Cheng 	uintptr_t	poll_ring_bind_cf;
3898275SEric Cheng 	void		*poll_ring_ch;
3908275SEric Cheng 	uintptr_t	poll_mac_accept_df;
3918275SEric Cheng 	void		*poll_mac_dh;
3928275SEric Cheng } dld_capab_poll_t;
3938275SEric Cheng 
3948275SEric Cheng /*
3958275SEric Cheng  * LSO capability
3968275SEric Cheng  */
3978275SEric Cheng /*
3988275SEric Cheng  * Currently supported flags for LSO.
3998275SEric Cheng  */
40011042SErik.Nordmark@Sun.COM #define	DLD_LSO_BASIC_TCP_IPV4	0x01	/* TCP LSO over IPv4 capability */
40111042SErik.Nordmark@Sun.COM #define	DLD_LSO_BASIC_TCP_IPV6	0x02	/* TCP LSO over IPv6 capability */
4028275SEric Cheng 
4038275SEric Cheng typedef struct dld_capab_lso_s {
4048275SEric Cheng 	uint_t  lso_flags;	/* capability flags */
4058275SEric Cheng 	uint_t  lso_max;	/* maximum payload */
4068275SEric Cheng } dld_capab_lso_t;
4078275SEric Cheng 
408269Sericheng int	dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
40910654SGarrett.Damore@Sun.COM int	dld_devt_to_instance(dev_t);
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 *);
4149073SCathy.Zhou@Sun.COM int	dld_str_open(queue_t *, dev_t *, void *);
4159073SCathy.Zhou@Sun.COM int	dld_str_close(queue_t *);
4169073SCathy.Zhou@Sun.COM void	*dld_str_private(queue_t *);
417269Sericheng void	dld_init_ops(struct dev_ops *, const char *);
418269Sericheng void	dld_fini_ops(struct dev_ops *);
4195895Syz147064 int	dld_autopush(dev_t *, struct dlautopush *);
4208275SEric Cheng 
4218275SEric Cheng int	dld_add_flow(datalink_id_t, char *, flow_desc_t *,
4228275SEric Cheng     mac_resource_props_t *);
4238275SEric Cheng int	dld_remove_flow(char *);
4248275SEric Cheng int	dld_modify_flow(char *, mac_resource_props_t *);
42510616SSebastien.Roy@Sun.COM int	dld_walk_flow(dld_ioc_walkflow_t *, intptr_t, cred_t *);
4268275SEric Cheng 
427269Sericheng #endif
428269Sericheng 
4290Sstevel@tonic-gate #ifdef	__cplusplus
4300Sstevel@tonic-gate }
4310Sstevel@tonic-gate #endif
4320Sstevel@tonic-gate 
4330Sstevel@tonic-gate #endif	/* _SYS_DLD_H */
434