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