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. 2459596c01SRobert 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 * 33eae72b5bSSebastien Roy * 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> 42d62bc4baSyz147064 #include <sys/conf.h> 43d62bc4baSyz147064 #include <sys/sad.h> 443fd94f8cSam223141 #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 /* 517c478bd9Sstevel@tonic-gate * Data-Link Driver Information (text emitted by modinfo(1m)) 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 757c478bd9Sstevel@tonic-gate /* 769c175129Sja97890 * Prevent advertising of the DL_CAPAB_SOFTRING capability. 779c175129Sja97890 */ 789c175129Sja97890 #define DLD_PROP_NO_SOFTRING "no-softring" 799c175129Sja97890 809c175129Sja97890 /* 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 { 95d62bc4baSyz147064 datalink_id_t dia_linkid; 96210db224Sericheng uint_t dia_max_sdu; 977c478bd9Sstevel@tonic-gate } dld_ioc_attr_t; 987c478bd9Sstevel@tonic-gate 99eae72b5bSSebastien Roy #define DLDIOC_VLAN_ATTR DLDIOC(0x04) 100d62bc4baSyz147064 typedef struct dld_ioc_vlan_attr { 101d62bc4baSyz147064 datalink_id_t div_vlanid; 102d62bc4baSyz147064 uint16_t div_vid; 103d62bc4baSyz147064 datalink_id_t div_linkid; 104d62bc4baSyz147064 boolean_t div_force; 105d62bc4baSyz147064 } dld_ioc_vlan_attr_t; 106210db224Sericheng 107eae72b5bSSebastien Roy #define DLDIOC_PHYS_ATTR DLDIOC(0x05) 108e7801d59Ssowmini #define DLPI_LINKNAME_MAX 32 109e7801d59Ssowmini 110d62bc4baSyz147064 typedef struct dld_ioc_phys_attr { 111d62bc4baSyz147064 datalink_id_t dip_linkid; 112d62bc4baSyz147064 /* 113d62bc4baSyz147064 * Whether this physical link supports vanity naming. Note that 114d62bc4baSyz147064 * physical links whose media type is not supported by GLDv3 115d62bc4baSyz147064 * can not support vanity naming. 116d62bc4baSyz147064 */ 117d62bc4baSyz147064 boolean_t dip_novanity; 118d62bc4baSyz147064 char dip_dev[MAXLINKNAMELEN]; 119d62bc4baSyz147064 } dld_ioc_phys_attr_t; 120f4b3ec61Sdh155122 1210ba2cbe9Sxc151355 /* 1220ba2cbe9Sxc151355 * Secure objects ioctls 1230ba2cbe9Sxc151355 */ 1240ba2cbe9Sxc151355 typedef enum { 125a399b765Szf162725 DLD_SECOBJ_CLASS_WEP = 1, 126a399b765Szf162725 DLD_SECOBJ_CLASS_WPA 1270ba2cbe9Sxc151355 } dld_secobj_class_t; 1280ba2cbe9Sxc151355 1290ba2cbe9Sxc151355 #define DLD_SECOBJ_OPT_CREATE 0x00000001 1300ba2cbe9Sxc151355 #define DLD_SECOBJ_NAME_MAX 32 1310ba2cbe9Sxc151355 #define DLD_SECOBJ_VAL_MAX 256 1320ba2cbe9Sxc151355 typedef struct dld_secobj { 1330ba2cbe9Sxc151355 char so_name[DLD_SECOBJ_NAME_MAX]; 1340ba2cbe9Sxc151355 dld_secobj_class_t so_class; 1350ba2cbe9Sxc151355 uint8_t so_val[DLD_SECOBJ_VAL_MAX]; 1360ba2cbe9Sxc151355 uint_t so_len; 1370ba2cbe9Sxc151355 } dld_secobj_t; 1380ba2cbe9Sxc151355 139eae72b5bSSebastien Roy #define DLDIOC_SECOBJ_SET DLDIOC(0x06) 1400ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_set { 1410ba2cbe9Sxc151355 dld_secobj_t ss_obj; 1420ba2cbe9Sxc151355 uint_t ss_flags; 1430ba2cbe9Sxc151355 } dld_ioc_secobj_set_t; 1440ba2cbe9Sxc151355 145eae72b5bSSebastien Roy #define DLDIOC_SECOBJ_GET DLDIOC(0x07) 1460ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_get { 1470ba2cbe9Sxc151355 dld_secobj_t sg_obj; 1480ba2cbe9Sxc151355 uint_t sg_count; 149eae72b5bSSebastien Roy uint_t sg_size; 1500ba2cbe9Sxc151355 } dld_ioc_secobj_get_t; 1510ba2cbe9Sxc151355 152d62bc4baSyz147064 /* 153d62bc4baSyz147064 * The following two slots were used outside of ON, so don't reuse them. 154d62bc4baSyz147064 * 155eae72b5bSSebastien Roy * #define DLDIOCHOLDVLAN DLDIOC(0x08) 156eae72b5bSSebastien Roy * #define DLDIOCRELEVLAN DLDIOC(0x09) 157d62bc4baSyz147064 */ 158d62bc4baSyz147064 159eae72b5bSSebastien Roy #define DLDIOC_SECOBJ_UNSET DLDIOC(0x0a) 1600ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_unset { 1610ba2cbe9Sxc151355 char su_name[DLD_SECOBJ_NAME_MAX]; 1620ba2cbe9Sxc151355 } dld_ioc_secobj_unset_t; 1630ba2cbe9Sxc151355 164eae72b5bSSebastien Roy #define DLDIOC_CREATE_VLAN DLDIOC(0x0b) 165d62bc4baSyz147064 typedef struct dld_ioc_create_vlan { 166d62bc4baSyz147064 datalink_id_t dic_vlanid; 167d62bc4baSyz147064 datalink_id_t dic_linkid; 168d62bc4baSyz147064 uint16_t dic_vid; 169d62bc4baSyz147064 boolean_t dic_force; 170d62bc4baSyz147064 } dld_ioc_create_vlan_t; 171d62bc4baSyz147064 172eae72b5bSSebastien Roy #define DLDIOC_DELETE_VLAN DLDIOC(0x0c) 173d62bc4baSyz147064 typedef struct dld_ioc_delete_vlan { 174d62bc4baSyz147064 datalink_id_t did_linkid; 175d62bc4baSyz147064 } dld_ioc_delete_vlan_t; 176d62bc4baSyz147064 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 */ 184d62bc4baSyz147064 185eae72b5bSSebastien Roy #define DLDIOC_DOORSERVER DLDIOC(0x10) 186d62bc4baSyz147064 typedef struct dld_ioc_door { 187d62bc4baSyz147064 boolean_t did_start_door; 188d62bc4baSyz147064 } dld_ioc_door_t; 189d62bc4baSyz147064 190eae72b5bSSebastien Roy #define DLDIOC_RENAME DLDIOC(0x11) 191d62bc4baSyz147064 typedef struct dld_ioc_rename { 192d62bc4baSyz147064 datalink_id_t dir_linkid1; 193d62bc4baSyz147064 datalink_id_t dir_linkid2; 194d62bc4baSyz147064 char dir_link[MAXLINKNAMELEN]; 195d62bc4baSyz147064 } dld_ioc_rename_t; 196d62bc4baSyz147064 197f4b3ec61Sdh155122 /* 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) 202f4b3ec61Sdh155122 */ 203f4b3ec61Sdh155122 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; 208f4b3ec61Sdh155122 209d62bc4baSyz147064 /* 210d62bc4baSyz147064 * data-link autopush configuration. 211d62bc4baSyz147064 */ 212d62bc4baSyz147064 struct dlautopush { 213d62bc4baSyz147064 uint_t dap_anchor; 214d62bc4baSyz147064 uint_t dap_npush; 215d62bc4baSyz147064 char dap_aplist[MAXAPUSH][FMNAMESZ+1]; 216d62bc4baSyz147064 }; 217f4b3ec61Sdh155122 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 288e7801d59Ssowmini 2893fd94f8cSam223141 typedef struct dld_ioc_macprop_s { 2904045d941Ssowmini uint_t pr_flags; 2916b9e797cSsowmini datalink_id_t pr_linkid; 2923fd94f8cSam223141 mac_prop_id_t pr_num; 293afdda45fSVasumathi Sundaram - Sun Microsystems uint_t pr_perm_flags; 2944045d941Ssowmini char pr_name[MAXLINKPROPNAME]; 295e7801d59Ssowmini uint_t pr_valsize; /* sizeof pr_val */ 296e7801d59Ssowmini char pr_val[1]; 2973fd94f8cSam223141 } 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 31859596c01SRobert Mustacchi #define DLDIOC_GETTRAN DLDIOC(0x1e) 31959596c01SRobert Mustacchi 32059596c01SRobert Mustacchi #define DLDIOC_GETTRAN_GETNTRAN UINT32_MAX 32159596c01SRobert Mustacchi 32259596c01SRobert Mustacchi typedef struct dld_ioc_gettran { 32359596c01SRobert Mustacchi datalink_id_t dgt_linkid; 32459596c01SRobert Mustacchi uint_t dgt_tran_id; 32559596c01SRobert Mustacchi boolean_t dgt_present; 32659596c01SRobert Mustacchi boolean_t dgt_usable; 32759596c01SRobert Mustacchi } dld_ioc_gettran_t; 32859596c01SRobert Mustacchi 32959596c01SRobert Mustacchi #define DLDIOC_READTRAN DLDIOC(0x1f) 33059596c01SRobert Mustacchi typedef struct dld_ioc_tranio { 33159596c01SRobert Mustacchi datalink_id_t dti_linkid; 33259596c01SRobert Mustacchi uint_t dti_tran_id; 33359596c01SRobert Mustacchi uint_t dti_page; 33459596c01SRobert Mustacchi uint_t dti_nbytes; 33559596c01SRobert Mustacchi uint_t dti_off; 33659596c01SRobert Mustacchi uint64_t dti_buf; 33759596c01SRobert Mustacchi } dld_ioc_tranio_t; 33859596c01SRobert Mustacchi 339*b142f83dSRobert Mustacchi #define DLDIOC_GETLED DLDIOC(0x20) 340*b142f83dSRobert Mustacchi #define DLDIOC_SETLED DLDIOC(0x21) 341*b142f83dSRobert Mustacchi 342*b142f83dSRobert Mustacchi typedef struct dld_ioc_led { 343*b142f83dSRobert Mustacchi datalink_id_t dil_linkid; 344*b142f83dSRobert Mustacchi mac_led_mode_t dil_supported; 345*b142f83dSRobert Mustacchi mac_led_mode_t dil_active; 346*b142f83dSRobert Mustacchi uint_t dil_pad; 347*b142f83dSRobert Mustacchi } dld_ioc_led_t; 348*b142f83dSRobert 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 */ 437da14cebeSEric Cheng uint_t lso_max; /* maximum payload */ 438da14cebeSEric Cheng } dld_capab_lso_t; 439da14cebeSEric Cheng 440210db224Sericheng int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); 44161af1958SGarrett D'Amore int dld_devt_to_instance(dev_t); 442210db224Sericheng int dld_open(queue_t *, dev_t *, int, int, cred_t *); 443210db224Sericheng int dld_close(queue_t *); 444210db224Sericheng void dld_wput(queue_t *, mblk_t *); 445210db224Sericheng void dld_wsrv(queue_t *); 4465d460eafSCathy Zhou int dld_str_open(queue_t *, dev_t *, void *); 4475d460eafSCathy Zhou int dld_str_close(queue_t *); 4485d460eafSCathy Zhou void *dld_str_private(queue_t *); 449210db224Sericheng void dld_init_ops(struct dev_ops *, const char *); 450210db224Sericheng void dld_fini_ops(struct dev_ops *); 451d62bc4baSyz147064 int dld_autopush(dev_t *, struct dlautopush *); 452da14cebeSEric Cheng 453da14cebeSEric Cheng int dld_add_flow(datalink_id_t, char *, flow_desc_t *, 454da14cebeSEric Cheng mac_resource_props_t *); 455da14cebeSEric Cheng int dld_remove_flow(char *); 456da14cebeSEric Cheng int dld_modify_flow(char *, mac_resource_props_t *); 4572b24ab6bSSebastien Roy int dld_walk_flow(dld_ioc_walkflow_t *, intptr_t, cred_t *); 458da14cebeSEric Cheng 459210db224Sericheng #endif 460210db224Sericheng 4617c478bd9Sstevel@tonic-gate #ifdef __cplusplus 4627c478bd9Sstevel@tonic-gate } 4637c478bd9Sstevel@tonic-gate #endif 4647c478bd9Sstevel@tonic-gate 4657c478bd9Sstevel@tonic-gate #endif /* _SYS_DLD_H */ 466