xref: /illumos-gate/usr/src/uts/common/sys/dld.h (revision bbf21555)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5ba2e4443Sseb  * Common Development and Distribution License (the "License").
6ba2e4443Sseb  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
220dc2366fSVenugopal Iyer  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
2445d3dd98SRobert Mustacchi  * Copyright (c) 2017, Joyent, Inc.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef	_SYS_DLD_H
287c478bd9Sstevel@tonic-gate #define	_SYS_DLD_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate /*
310dc2366fSVenugopal Iyer  * Data-Link Driver ioctl interfaces.
32eae72b5bSSebastien Roy  *
3345d3dd98SRobert Mustacchi  * Note that the data structures defined here define an ioctl interface
34eae72b5bSSebastien Roy  * that is shared betwen user and kernel space.  The dld driver thus
35eae72b5bSSebastien Roy  * assumes that the structures have identical layout and size when
36eae72b5bSSebastien Roy  * compiled in either IPL32 or LP64.
377c478bd9Sstevel@tonic-gate  */
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate #include <sys/types.h>
407c478bd9Sstevel@tonic-gate #include <sys/stream.h>
41da14cebeSEric Cheng #include <sys/mac_flow.h>
42d62bc4baSyz #include <sys/conf.h>
43d62bc4baSyz #include <sys/sad.h>
443fd94f8cSam #include <sys/mac.h>
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
477c478bd9Sstevel@tonic-gate extern "C" {
487c478bd9Sstevel@tonic-gate #endif
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /*
51*bbf21555SRichard Lowe  * Data-Link Driver Information (text emitted by modinfo(8))
527c478bd9Sstevel@tonic-gate  */
534045d941Ssowmini #define	DLD_INFO	"Data-Link Driver"
547c478bd9Sstevel@tonic-gate 
557c478bd9Sstevel@tonic-gate /*
567c478bd9Sstevel@tonic-gate  * Options: To enable an option set the property name to a non-zero value
577c478bd9Sstevel@tonic-gate  *	    in kernel/drv/dld.conf.
587c478bd9Sstevel@tonic-gate  */
597c478bd9Sstevel@tonic-gate 
607c478bd9Sstevel@tonic-gate /*
617c478bd9Sstevel@tonic-gate  * Prevent use of the IP fast-path (direct M_DATA transmit).
627c478bd9Sstevel@tonic-gate  */
637c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_FASTPATH	"no-fastpath"
647c478bd9Sstevel@tonic-gate 
657c478bd9Sstevel@tonic-gate /*
667c478bd9Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_POLL capability.
677c478bd9Sstevel@tonic-gate  */
687c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_POLL	"no-poll"
697c478bd9Sstevel@tonic-gate 
707c478bd9Sstevel@tonic-gate /*
717c478bd9Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_ZEROCOPY capability.
727c478bd9Sstevel@tonic-gate  */
737c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_ZEROCOPY	"no-zerocopy"
747c478bd9Sstevel@tonic-gate 
759c175129Sja /*
769c175129Sja  * Prevent advertising of the DL_CAPAB_SOFTRING capability.
779c175129Sja  */
789c175129Sja #define	DLD_PROP_NO_SOFTRING	"no-softring"
799c175129Sja 
807c478bd9Sstevel@tonic-gate /*
817c478bd9Sstevel@tonic-gate  * The name of the driver.
827c478bd9Sstevel@tonic-gate  */
837c478bd9Sstevel@tonic-gate #define	DLD_DRIVER_NAME		"dld"
847c478bd9Sstevel@tonic-gate 
85da14cebeSEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
86da14cebeSEric Cheng #pragma pack(4)
87da14cebeSEric Cheng #endif
88da14cebeSEric Cheng 
897c478bd9Sstevel@tonic-gate /*
907c478bd9Sstevel@tonic-gate  * IOCTL codes and data structures.
917c478bd9Sstevel@tonic-gate  */
92eae72b5bSSebastien Roy #define	DLDIOC_ATTR	DLDIOC(0x03)
937c478bd9Sstevel@tonic-gate 
947c478bd9Sstevel@tonic-gate typedef struct dld_ioc_attr {
95da14cebeSEric Cheng 	datalink_id_t		dia_linkid;
96da14cebeSEric Cheng 	uint_t			dia_max_sdu;
977c478bd9Sstevel@tonic-gate } dld_ioc_attr_t;
987c478bd9Sstevel@tonic-gate 
99eae72b5bSSebastien Roy #define	DLDIOC_VLAN_ATTR	DLDIOC(0x04)
100d62bc4baSyz typedef struct dld_ioc_vlan_attr {
101d62bc4baSyz 	datalink_id_t	div_vlanid;
102d62bc4baSyz 	uint16_t	div_vid;
103d62bc4baSyz 	datalink_id_t	div_linkid;
104d62bc4baSyz 	boolean_t	div_force;
105d62bc4baSyz } dld_ioc_vlan_attr_t;
106d62bc4baSyz 
107eae72b5bSSebastien Roy #define	DLDIOC_PHYS_ATTR	DLDIOC(0x05)
108e7801d59Ssowmini #define	DLPI_LINKNAME_MAX	32
109e7801d59Ssowmini 
110d62bc4baSyz typedef struct dld_ioc_phys_attr {
111d62bc4baSyz 	datalink_id_t	dip_linkid;
112d62bc4baSyz 	/*
113d62bc4baSyz 	 * Whether this physical link supports vanity naming. Note that
114d62bc4baSyz 	 * physical links whose media type is not supported by GLDv3
115d62bc4baSyz 	 * can not support vanity naming.
116d62bc4baSyz 	 */
117d62bc4baSyz 	boolean_t	dip_novanity;
118d62bc4baSyz 	char		dip_dev[MAXLINKNAMELEN];
119d62bc4baSyz } dld_ioc_phys_attr_t;
120f4b3ec61Sdh 
1210ba2cbe9Sxc /*
1220ba2cbe9Sxc  * Secure objects ioctls
1230ba2cbe9Sxc  */
1240ba2cbe9Sxc typedef enum {
125a399b765Szf 	DLD_SECOBJ_CLASS_WEP = 1,
126a399b765Szf 	DLD_SECOBJ_CLASS_WPA
1270ba2cbe9Sxc } dld_secobj_class_t;
1280ba2cbe9Sxc 
1290ba2cbe9Sxc #define	DLD_SECOBJ_OPT_CREATE	0x00000001
1300ba2cbe9Sxc #define	DLD_SECOBJ_NAME_MAX	32
1310ba2cbe9Sxc #define	DLD_SECOBJ_VAL_MAX	256
1320ba2cbe9Sxc typedef struct dld_secobj {
1330ba2cbe9Sxc 	char			so_name[DLD_SECOBJ_NAME_MAX];
1340ba2cbe9Sxc 	dld_secobj_class_t	so_class;
1350ba2cbe9Sxc 	uint8_t			so_val[DLD_SECOBJ_VAL_MAX];
1360ba2cbe9Sxc 	uint_t			so_len;
1370ba2cbe9Sxc } dld_secobj_t;
1380ba2cbe9Sxc 
139eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_SET	DLDIOC(0x06)
1400ba2cbe9Sxc typedef struct dld_ioc_secobj_set {
1410ba2cbe9Sxc 	dld_secobj_t		ss_obj;
1420ba2cbe9Sxc 	uint_t			ss_flags;
1430ba2cbe9Sxc } dld_ioc_secobj_set_t;
1440ba2cbe9Sxc 
145eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_GET	DLDIOC(0x07)
1460ba2cbe9Sxc typedef struct dld_ioc_secobj_get {
1470ba2cbe9Sxc 	dld_secobj_t		sg_obj;
1480ba2cbe9Sxc 	uint_t			sg_count;
149eae72b5bSSebastien Roy 	uint_t			sg_size;
1500ba2cbe9Sxc } dld_ioc_secobj_get_t;
1510ba2cbe9Sxc 
152d62bc4baSyz /*
153d62bc4baSyz  * The following two slots were used outside of ON, so don't reuse them.
154d62bc4baSyz  *
155eae72b5bSSebastien Roy  * #define DLDIOCHOLDVLAN DLDIOC(0x08)
156eae72b5bSSebastien Roy  * #define DLDIOCRELEVLAN DLDIOC(0x09)
157d62bc4baSyz  */
158d62bc4baSyz 
159eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_UNSET	DLDIOC(0x0a)
1600ba2cbe9Sxc typedef struct dld_ioc_secobj_unset {
1610ba2cbe9Sxc 	char			su_name[DLD_SECOBJ_NAME_MAX];
1620ba2cbe9Sxc } dld_ioc_secobj_unset_t;
1630ba2cbe9Sxc 
164eae72b5bSSebastien Roy #define	DLDIOC_CREATE_VLAN	DLDIOC(0x0b)
165d62bc4baSyz typedef struct dld_ioc_create_vlan {
166d62bc4baSyz 	datalink_id_t	dic_vlanid;
167d62bc4baSyz 	datalink_id_t	dic_linkid;
168d62bc4baSyz 	uint16_t	dic_vid;
169d62bc4baSyz 	boolean_t	dic_force;
170d62bc4baSyz } dld_ioc_create_vlan_t;
171d62bc4baSyz 
172eae72b5bSSebastien Roy #define	DLDIOC_DELETE_VLAN	DLDIOC(0x0c)
173d62bc4baSyz typedef struct dld_ioc_delete_vlan {
174d62bc4baSyz 	datalink_id_t	did_linkid;
175d62bc4baSyz } dld_ioc_delete_vlan_t;
176d62bc4baSyz 
1773bc21d0aSAruna Ramakrishna - Sun Microsystems /*
1783bc21d0aSAruna Ramakrishna - Sun Microsystems  * The following constants have been removed, and the slots are open:
1793bc21d0aSAruna Ramakrishna - Sun Microsystems  *
180eae72b5bSSebastien Roy  * #define DLDIOC_SETAUTOPUSH	DLDIOC(0x0d)
181eae72b5bSSebastien Roy  * #define DLDIOC_GETAUTOPUSH	DLDIOC(0x0e)
182eae72b5bSSebastien Roy  * #define DLDIOC_CLRAUTOPUSH	DLDIOC(0x0f)
1833bc21d0aSAruna Ramakrishna - Sun Microsystems  */
184d62bc4baSyz 
185eae72b5bSSebastien Roy #define	DLDIOC_DOORSERVER	DLDIOC(0x10)
186d62bc4baSyz typedef struct dld_ioc_door {
187d62bc4baSyz 	boolean_t	did_start_door;
188d62bc4baSyz } dld_ioc_door_t;
189d62bc4baSyz 
190eae72b5bSSebastien Roy #define	DLDIOC_RENAME		DLDIOC(0x11)
191d62bc4baSyz typedef struct dld_ioc_rename {
192d62bc4baSyz 	datalink_id_t	dir_linkid1;
193d62bc4baSyz 	datalink_id_t	dir_linkid2;
194d62bc4baSyz 	char		dir_link[MAXLINKNAMELEN];
195d62bc4baSyz } dld_ioc_rename_t;
196d62bc4baSyz 
197f4b3ec61Sdh /*
1983bc21d0aSAruna Ramakrishna - Sun Microsystems  * The following constants have been removed, and the slots are open:
1993bc21d0aSAruna Ramakrishna - Sun Microsystems  *
200eae72b5bSSebastien Roy  * #define DLDIOC_SETZID	DLDIOC(0x12)
201eae72b5bSSebastien Roy  * #define DLDIOC_GETZID	DLDIOC(0x13)
202f4b3ec61Sdh  */
2033bc21d0aSAruna Ramakrishna - Sun Microsystems 
2043bc21d0aSAruna Ramakrishna - Sun Microsystems typedef struct dld_ioc_zid {
2053bc21d0aSAruna Ramakrishna - Sun Microsystems 	zoneid_t	diz_zid;
2062b24ab6bSSebastien Roy 	datalink_id_t	diz_linkid;
2073bc21d0aSAruna Ramakrishna - Sun Microsystems } dld_ioc_zid_t;
208f4b3ec61Sdh 
209d62bc4baSyz /*
210d62bc4baSyz  * data-link autopush configuration.
211d62bc4baSyz  */
212d62bc4baSyz struct dlautopush {
213d62bc4baSyz 	uint_t	dap_anchor;
214d62bc4baSyz 	uint_t	dap_npush;
215d62bc4baSyz 	char	dap_aplist[MAXAPUSH][FMNAMESZ+1];
216d62bc4baSyz };
217f4b3ec61Sdh 
218da14cebeSEric Cheng #define	DLDIOC_MACADDRGET	DLDIOC(0x15)
219da14cebeSEric Cheng typedef struct dld_ioc_macaddrget {
220da14cebeSEric Cheng 	datalink_id_t	dig_linkid;
221da14cebeSEric Cheng 	uint_t		dig_count;
222da14cebeSEric Cheng 	uint_t		dig_size;
223da14cebeSEric Cheng } dld_ioc_macaddrget_t;
224da14cebeSEric Cheng 
225da14cebeSEric Cheng /* possible flags for dmi_flags below */
226da14cebeSEric Cheng #define	DLDIOCMACADDR_USED	0x1	/* address slot used */
227da14cebeSEric Cheng 
228da14cebeSEric Cheng typedef struct dld_macaddrinfo {
229da14cebeSEric Cheng 	uint_t		dmi_slot;
230da14cebeSEric Cheng 	uint_t		dmi_flags;
231da14cebeSEric Cheng 	uint_t		dmi_addrlen;
232da14cebeSEric Cheng 	uchar_t		dmi_addr[MAXMACADDRLEN];
233da14cebeSEric Cheng 	char		dmi_client_name[MAXNAMELEN];
234da14cebeSEric Cheng 	datalink_id_t	dma_client_linkid;
235da14cebeSEric Cheng } dld_macaddrinfo_t;
236da14cebeSEric Cheng 
237da14cebeSEric Cheng /*
238da14cebeSEric Cheng  * IOCTL codes and data structures for flowadm.
239da14cebeSEric Cheng  */
240da14cebeSEric Cheng #define	DLDIOC_ADDFLOW		DLDIOC(0x16)
241da14cebeSEric Cheng typedef struct dld_ioc_addflow {
242da14cebeSEric Cheng 	datalink_id_t		af_linkid;
243da14cebeSEric Cheng 	flow_desc_t		af_flow_desc;
244da14cebeSEric Cheng 	mac_resource_props_t	af_resource_props;
245da000602SGirish Moodalbail 	char			af_name[MAXFLOWNAMELEN];
246da14cebeSEric Cheng } dld_ioc_addflow_t;
247da14cebeSEric Cheng 
248da14cebeSEric Cheng #define	DLDIOC_REMOVEFLOW	DLDIOC(0x17)
249da14cebeSEric Cheng typedef struct dld_ioc_removeflow {
250da000602SGirish Moodalbail 	char			rf_name[MAXFLOWNAMELEN];
251da14cebeSEric Cheng } dld_ioc_removeflow_t;
252da14cebeSEric Cheng 
253da14cebeSEric Cheng #define	DLDIOC_MODIFYFLOW	DLDIOC(0x18)
254da14cebeSEric Cheng typedef struct dld_ioc_modifyflow {
255da000602SGirish Moodalbail 	char			mf_name[MAXFLOWNAMELEN];
256da14cebeSEric Cheng 	mac_resource_props_t	mf_resource_props;
257da14cebeSEric Cheng } dld_ioc_modifyflow_t;
258da14cebeSEric Cheng 
259da14cebeSEric Cheng #define	DLDIOC_WALKFLOW		DLDIOC(0x19)
260da14cebeSEric Cheng typedef struct dld_ioc_walkflow {
261da14cebeSEric Cheng 	datalink_id_t		wf_linkid;
262da000602SGirish Moodalbail 	char			wf_name[MAXFLOWNAMELEN];
263da14cebeSEric Cheng 	uint32_t		wf_nflows;
264da14cebeSEric Cheng 	uint_t			wf_len;
265da14cebeSEric Cheng } dld_ioc_walkflow_t;
266da14cebeSEric Cheng 
267da14cebeSEric Cheng typedef struct dld_flowinfo {
268da14cebeSEric Cheng 	datalink_id_t		fi_linkid;
269da14cebeSEric Cheng 	flow_desc_t		fi_flow_desc;
270da14cebeSEric Cheng 	mac_resource_props_t	fi_resource_props;
271da000602SGirish Moodalbail 	char			fi_flowname[MAXFLOWNAMELEN];
272da14cebeSEric Cheng 	uint32_t		fi_pad;
273da14cebeSEric Cheng } dld_flowinfo_t;
274da14cebeSEric Cheng 
275da14cebeSEric Cheng #define	DLDIOC_USAGELOG		DLDIOC(0x1a)
276da14cebeSEric Cheng typedef struct dld_ioc_usagelog {
277da14cebeSEric Cheng 	mac_logtype_t	ul_type;
278da14cebeSEric Cheng 	boolean_t	ul_onoff;
279da14cebeSEric Cheng 	uint_t		ul_interval;
280da14cebeSEric Cheng } dld_ioc_usagelog_t;
281da14cebeSEric Cheng 
282da14cebeSEric Cheng #define	DLDIOC_SETMACPROP	DLDIOC(0x1b)
283da14cebeSEric Cheng #define	DLDIOC_GETMACPROP	DLDIOC(0x1c)
2840dc2366fSVenugopal Iyer 
2850dc2366fSVenugopal Iyer /* pr_flags can be set to a combination of the following flags */
2860dc2366fSVenugopal Iyer #define	DLD_PROP_DEFAULT	0x0001
2870dc2366fSVenugopal Iyer #define	DLD_PROP_POSSIBLE	0x0002
2883fd94f8cSam 
2893fd94f8cSam typedef struct dld_ioc_macprop_s {
2904045d941Ssowmini 	uint_t		pr_flags;
2916b9e797cSsowmini 	datalink_id_t	pr_linkid;
2923fd94f8cSam 	mac_prop_id_t	pr_num;
293afdda45fSVasumathi Sundaram - Sun Microsystems 	uint_t		pr_perm_flags;
294f1ccfd86SToomas Soome 	char		pr_name[MAXLINKPROPNAME];
295e7801d59Ssowmini 	uint_t		pr_valsize;		/* sizeof pr_val */
296e7801d59Ssowmini 	char		pr_val[1];
2973fd94f8cSam } dld_ioc_macprop_t;
298e7801d59Ssowmini 
299da14cebeSEric Cheng #define	DLDIOC_GETHWGRP		DLDIOC(0x1d)
300da14cebeSEric Cheng 
301da14cebeSEric Cheng typedef struct dld_ioc_hwgrpget {
302da14cebeSEric Cheng 	datalink_id_t	dih_linkid;
303da14cebeSEric Cheng 	uint_t		dih_n_groups;	/* number of groups included in ioc */
304da14cebeSEric Cheng 	uint_t		dih_size;
305da14cebeSEric Cheng } dld_ioc_hwgrpget_t;
306da14cebeSEric Cheng 
307da14cebeSEric Cheng #define	MAXCLIENTNAMELEN	1024
308da14cebeSEric Cheng typedef struct dld_hwgrpinfo {
309da14cebeSEric Cheng 	char	dhi_link_name[MAXLINKNAMELEN];
310da14cebeSEric Cheng 	uint_t	dhi_grp_num;
311da14cebeSEric Cheng 	uint_t	dhi_grp_type;
312da14cebeSEric Cheng 	uint_t	dhi_n_rings;
313da14cebeSEric Cheng 	uint_t	dhi_n_clnts;
3140dc2366fSVenugopal Iyer 	uint_t	dhi_rings[MAX_RINGS_PER_GROUP];
315da14cebeSEric Cheng 	char	dhi_clnts[MAXCLIENTNAMELEN];
316da14cebeSEric Cheng } dld_hwgrpinfo_t;
317da14cebeSEric Cheng 
31845d3dd98SRobert Mustacchi #define	DLDIOC_GETTRAN		DLDIOC(0x1e)
31945d3dd98SRobert Mustacchi 
32045d3dd98SRobert Mustacchi #define	DLDIOC_GETTRAN_GETNTRAN	UINT32_MAX
32145d3dd98SRobert Mustacchi 
32245d3dd98SRobert Mustacchi typedef struct dld_ioc_gettran {
32345d3dd98SRobert Mustacchi 	datalink_id_t		dgt_linkid;
32445d3dd98SRobert Mustacchi 	uint_t			dgt_tran_id;
32545d3dd98SRobert Mustacchi 	boolean_t		dgt_present;
32645d3dd98SRobert Mustacchi 	boolean_t		dgt_usable;
32745d3dd98SRobert Mustacchi } dld_ioc_gettran_t;
32845d3dd98SRobert Mustacchi 
32945d3dd98SRobert Mustacchi #define	DLDIOC_READTRAN		DLDIOC(0x1f)
33045d3dd98SRobert Mustacchi typedef struct dld_ioc_tranio {
33145d3dd98SRobert Mustacchi 	datalink_id_t	dti_linkid;
33245d3dd98SRobert Mustacchi 	uint_t		dti_tran_id;
33345d3dd98SRobert Mustacchi 	uint_t		dti_page;
33445d3dd98SRobert Mustacchi 	uint_t		dti_nbytes;
33545d3dd98SRobert Mustacchi 	uint_t		dti_off;
33645d3dd98SRobert Mustacchi 	uint64_t	dti_buf;
33745d3dd98SRobert Mustacchi } dld_ioc_tranio_t;
33845d3dd98SRobert Mustacchi 
339c1e9c696SRobert Mustacchi #define	DLDIOC_GETLED		DLDIOC(0x20)
340c1e9c696SRobert Mustacchi #define	DLDIOC_SETLED		DLDIOC(0x21)
341c1e9c696SRobert Mustacchi 
342c1e9c696SRobert Mustacchi typedef struct dld_ioc_led {
343c1e9c696SRobert Mustacchi 	datalink_id_t	dil_linkid;
344c1e9c696SRobert Mustacchi 	mac_led_mode_t	dil_supported;
345c1e9c696SRobert Mustacchi 	mac_led_mode_t	dil_active;
346c1e9c696SRobert Mustacchi 	uint_t		dil_pad;
347c1e9c696SRobert Mustacchi } dld_ioc_led_t;
348c1e9c696SRobert Mustacchi 
349da14cebeSEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
350da14cebeSEric Cheng #pragma pack()
351da14cebeSEric Cheng #endif
352da14cebeSEric Cheng 
353210db224Sericheng #ifdef _KERNEL
354da14cebeSEric Cheng 
355da14cebeSEric Cheng #define	DLD_CAPAB_DIRECT	0x00000001
356da14cebeSEric Cheng #define	DLD_CAPAB_POLL		0x00000002
357da14cebeSEric Cheng #define	DLD_CAPAB_PERIM		0x00000003
358da14cebeSEric Cheng #define	DLD_CAPAB_LSO		0x00000004
359da14cebeSEric Cheng 
360da14cebeSEric Cheng #define	DLD_ENABLE		0x00000001
361da14cebeSEric Cheng #define	DLD_DISABLE		0x00000002
362da14cebeSEric Cheng #define	DLD_QUERY		0x00000003
363da14cebeSEric Cheng 
364da14cebeSEric Cheng /*
365da14cebeSEric Cheng  * GLDv3 entry point for negotiating capabilities.
366da14cebeSEric Cheng  * This is exposed to IP after negotiation of DL_CAPAB_DLD.
367da14cebeSEric Cheng  *
368da14cebeSEric Cheng  * This function takes the following arguments:
369da14cebeSEric Cheng  * handle: used for identifying the interface to operate on (provided by dld).
370da14cebeSEric Cheng  * type: capability type.
371da14cebeSEric Cheng  * arg: points to a capability-specific structure.
372da14cebeSEric Cheng  * flags: used for indicating whether to enable or disable a capability.
373da14cebeSEric Cheng  *
374da14cebeSEric Cheng  * With this function, capability negotiation is reduced from a multi-step
375da14cebeSEric Cheng  * process to just one single function call.
376da14cebeSEric Cheng  * e.g. the following code would pass 'x' from IP to dld and obtain
377da14cebeSEric Cheng  * arg.output_arg from dld:
378da14cebeSEric Cheng  *
379da14cebeSEric Cheng  * arg.input_arg = x;
380da14cebeSEric Cheng  * rc = (*dld_capab)(handle, DLD_CAPAB_XXX, &arg, DLD_ENABLE);
381da14cebeSEric Cheng  * ill->info1 = arg.output_arg;
382da14cebeSEric Cheng  */
383da14cebeSEric Cheng typedef	int	(*dld_capab_func_t)(void *, uint_t, void *, uint_t);
384da14cebeSEric Cheng 
385da14cebeSEric Cheng /*
386da14cebeSEric Cheng  * Direct Tx/Rx capability.
387da14cebeSEric Cheng  */
388da14cebeSEric Cheng typedef struct dld_capab_direct_s {
389da14cebeSEric Cheng 	/*
390da14cebeSEric Cheng 	 * Rx entry point and handle, owned by IP.
391da14cebeSEric Cheng 	 */
392da14cebeSEric Cheng 	uintptr_t	di_rx_cf;
393da14cebeSEric Cheng 	void		*di_rx_ch;
394da14cebeSEric Cheng 
395da14cebeSEric Cheng 	/*
396da14cebeSEric Cheng 	 * Tx entry points and handle, owned by DLD.
397da14cebeSEric Cheng 	 */
398da14cebeSEric Cheng 	/* Entry point for transmitting packets */
399da14cebeSEric Cheng 	uintptr_t	di_tx_df;
400da14cebeSEric Cheng 	void		*di_tx_dh;
401da14cebeSEric Cheng 
402da14cebeSEric Cheng 	/* flow control notification callback */
403da14cebeSEric Cheng 	uintptr_t	di_tx_cb_df; /* callback registration/de-registration */
404da14cebeSEric Cheng 	void		*di_tx_cb_dh;
405ae6aa22aSVenugopal Iyer 
406ae6aa22aSVenugopal Iyer 	/* flow control "can I put on a ring" callback */
407ae6aa22aSVenugopal Iyer 	uintptr_t	di_tx_fctl_df; /* canput-like callback */
408ae6aa22aSVenugopal Iyer 	void		*di_tx_fctl_dh;
409da14cebeSEric Cheng } dld_capab_direct_t;
410da14cebeSEric Cheng 
411da14cebeSEric Cheng /*
412da14cebeSEric Cheng  * Polling/softring capability.
413da14cebeSEric Cheng  */
414da14cebeSEric Cheng #define	POLL_SOFTRING		0x00000001
415da14cebeSEric Cheng typedef struct dld_capab_poll_s {
416da14cebeSEric Cheng 	uintptr_t	poll_ring_add_cf;
417da14cebeSEric Cheng 	uintptr_t	poll_ring_remove_cf;
418da14cebeSEric Cheng 	uintptr_t	poll_ring_quiesce_cf;
419da14cebeSEric Cheng 	uintptr_t	poll_ring_restart_cf;
420da14cebeSEric Cheng 	uintptr_t	poll_ring_bind_cf;
421da14cebeSEric Cheng 	void		*poll_ring_ch;
422da14cebeSEric Cheng 	uintptr_t	poll_mac_accept_df;
423da14cebeSEric Cheng 	void		*poll_mac_dh;
424da14cebeSEric Cheng } dld_capab_poll_t;
425da14cebeSEric Cheng 
426da14cebeSEric Cheng /*
427da14cebeSEric Cheng  * LSO capability
428da14cebeSEric Cheng  */
429da14cebeSEric Cheng /*
430da14cebeSEric Cheng  * Currently supported flags for LSO.
431da14cebeSEric Cheng  */
432bd670b35SErik Nordmark #define	DLD_LSO_BASIC_TCP_IPV4	0x01	/* TCP LSO over IPv4 capability */
433bd670b35SErik Nordmark #define	DLD_LSO_BASIC_TCP_IPV6	0x02	/* TCP LSO over IPv6 capability */
434da14cebeSEric Cheng 
435da14cebeSEric Cheng typedef struct dld_capab_lso_s {
436da14cebeSEric Cheng 	uint_t  lso_flags;	/* capability flags */
43762366fbbSRobert Mustacchi 	uint_t  lso_max_tcpv4;	/* maximum TCPv4 payload */
43862366fbbSRobert Mustacchi 	uint_t  lso_max_tcpv6;	/* maximum TCPv6 payload */
439da14cebeSEric Cheng } dld_capab_lso_t;
440da14cebeSEric Cheng 
441210db224Sericheng int	dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
44261af1958SGarrett D'Amore int	dld_devt_to_instance(dev_t);
443210db224Sericheng int	dld_open(queue_t *, dev_t *, int, int, cred_t *);
4445e1743f0SToomas Soome int	dld_close(queue_t *, int, cred_t *);
445f1ccfd86SToomas Soome int	dld_wput(queue_t *, mblk_t *);
446f1ccfd86SToomas Soome int	dld_wsrv(queue_t *);
4475d460eafSCathy Zhou int	dld_str_open(queue_t *, dev_t *, void *);
4485d460eafSCathy Zhou int	dld_str_close(queue_t *);
4495d460eafSCathy Zhou void	*dld_str_private(queue_t *);
450210db224Sericheng void	dld_init_ops(struct dev_ops *, const char *);
451210db224Sericheng void	dld_fini_ops(struct dev_ops *);
452d62bc4baSyz int	dld_autopush(dev_t *, struct dlautopush *);
453da14cebeSEric Cheng 
454da14cebeSEric Cheng int	dld_add_flow(datalink_id_t, char *, flow_desc_t *,
455da14cebeSEric Cheng     mac_resource_props_t *);
456da14cebeSEric Cheng int	dld_remove_flow(char *);
457da14cebeSEric Cheng int	dld_modify_flow(char *, mac_resource_props_t *);
4582b24ab6bSSebastien Roy int	dld_walk_flow(dld_ioc_walkflow_t *, intptr_t, cred_t *);
459da14cebeSEric Cheng 
460210db224Sericheng #endif
461210db224Sericheng 
4627c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
4637c478bd9Sstevel@tonic-gate }
4647c478bd9Sstevel@tonic-gate #endif
4657c478bd9Sstevel@tonic-gate 
4667c478bd9Sstevel@tonic-gate #endif	/* _SYS_DLD_H */
467