19a5557fdSlucy wang - Sun Microsystems - Beijing China /*
29a5557fdSlucy wang - Sun Microsystems - Beijing China * CDDL HEADER START
39a5557fdSlucy wang - Sun Microsystems - Beijing China *
49a5557fdSlucy wang - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
59a5557fdSlucy wang - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
69a5557fdSlucy wang - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
79a5557fdSlucy wang - Sun Microsystems - Beijing China *
89a5557fdSlucy wang - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99a5557fdSlucy wang - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
109a5557fdSlucy wang - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
119a5557fdSlucy wang - Sun Microsystems - Beijing China * and limitations under the License.
129a5557fdSlucy wang - Sun Microsystems - Beijing China *
139a5557fdSlucy wang - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
149a5557fdSlucy wang - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159a5557fdSlucy wang - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
169a5557fdSlucy wang - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
179a5557fdSlucy wang - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
189a5557fdSlucy wang - Sun Microsystems - Beijing China *
199a5557fdSlucy wang - Sun Microsystems - Beijing China * CDDL HEADER END
209a5557fdSlucy wang - Sun Microsystems - Beijing China */
2193833965Sjing xiong ERI-SUN
229a5557fdSlucy wang - Sun Microsystems - Beijing China /*
239a5557fdSlucy wang - Sun Microsystems - Beijing China * Copyright 2008 NetXen, Inc. All rights reserved.
249a5557fdSlucy wang - Sun Microsystems - Beijing China * Use is subject to license terms.
259a5557fdSlucy wang - Sun Microsystems - Beijing China */
2693833965Sjing xiong ERI-SUN
279a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic.h"
289a5557fdSlucy wang - Sun Microsystems - Beijing China
299a5557fdSlucy wang - Sun Microsystems - Beijing China static char transfer_speed_propname[] = "transfer-speed";
309a5557fdSlucy wang - Sun Microsystems - Beijing China static char speed_propname[] = "speed";
319a5557fdSlucy wang - Sun Microsystems - Beijing China static char duplex_propname[] = "full-duplex";
329a5557fdSlucy wang - Sun Microsystems - Beijing China
339a5557fdSlucy wang - Sun Microsystems - Beijing China /*
349a5557fdSlucy wang - Sun Microsystems - Beijing China * Notes:
359a5557fdSlucy wang - Sun Microsystems - Beijing China * The first character of the <name> field encodes the read/write
369a5557fdSlucy wang - Sun Microsystems - Beijing China * status of the parameter:
379a5557fdSlucy wang - Sun Microsystems - Beijing China * '-' => read-only,
389a5557fdSlucy wang - Sun Microsystems - Beijing China * '+' => read/write,
399a5557fdSlucy wang - Sun Microsystems - Beijing China * '!' => invisible!
409a5557fdSlucy wang - Sun Microsystems - Beijing China *
419a5557fdSlucy wang - Sun Microsystems - Beijing China * For writable parameters, we check for a driver property with the
429a5557fdSlucy wang - Sun Microsystems - Beijing China * same name; if found, and its value is in range, we initialise
439a5557fdSlucy wang - Sun Microsystems - Beijing China * the parameter from the property, overriding the default in the
449a5557fdSlucy wang - Sun Microsystems - Beijing China * table below.
459a5557fdSlucy wang - Sun Microsystems - Beijing China *
469a5557fdSlucy wang - Sun Microsystems - Beijing China * A NULL in the <name> field terminates the array.
479a5557fdSlucy wang - Sun Microsystems - Beijing China *
489a5557fdSlucy wang - Sun Microsystems - Beijing China * The <info> field is used here to provide the index of the
499a5557fdSlucy wang - Sun Microsystems - Beijing China * parameter to be initialised; thus it doesn't matter whether
509a5557fdSlucy wang - Sun Microsystems - Beijing China * this table is kept ordered or not.
519a5557fdSlucy wang - Sun Microsystems - Beijing China *
529a5557fdSlucy wang - Sun Microsystems - Beijing China * The <info> field in the per-instance copy, on the other hand,
539a5557fdSlucy wang - Sun Microsystems - Beijing China * is used to count assignments so that we can tell when a magic
549a5557fdSlucy wang - Sun Microsystems - Beijing China * parameter has been set via ndd (see unm_param_set()).
559a5557fdSlucy wang - Sun Microsystems - Beijing China */
569a5557fdSlucy wang - Sun Microsystems - Beijing China static const nd_param_t nd_template_10000[] = {
579a5557fdSlucy wang - Sun Microsystems - Beijing China /* info min max init r/w+name */
589a5557fdSlucy wang - Sun Microsystems - Beijing China
599a5557fdSlucy wang - Sun Microsystems - Beijing China /* Our hardware capabilities */
609a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_AUTONEG_CAP, 0, 1, 1, "-autoneg_cap" },
619a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_PAUSE_CAP, 0, 1, 1, "-pause_cap" },
629a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ASYM_PAUSE_CAP, 0, 1, 1, "-asym_pause_cap" },
639a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_10000FDX_CAP, 0, 1, 1, "-10000fdx_cap" },
649a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_1000FDX_CAP, 0, 1, 0, "-1000fdx_cap" },
659a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_1000HDX_CAP, 0, 1, 0, "-1000hdx_cap" },
669a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_100T4_CAP, 0, 1, 0, "-100T4_cap" },
679a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_100FDX_CAP, 0, 1, 0, "-100fdx_cap" },
689a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_100HDX_CAP, 0, 1, 0, "-100hdx_cap" },
699a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_10FDX_CAP, 0, 1, 0, "-10fdx_cap" },
709a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_10HDX_CAP, 0, 1, 0, "-10hdx_cap" },
719a5557fdSlucy wang - Sun Microsystems - Beijing China
729a5557fdSlucy wang - Sun Microsystems - Beijing China /* Our advertised capabilities */
739a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_AUTONEG_CAP, 0, 1, 1, "-adv_autoneg_cap" },
749a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_PAUSE_CAP, 0, 1, 1, "+adv_pause_cap" },
759a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_ASYM_PAUSE_CAP, 0, 1, 1, "+adv_asym_pause_cap" },
769a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_10000FDX_CAP, 0, 1, 1, "+adv_10000fdx_cap" },
779a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_1000FDX_CAP, 0, 1, 0, "+adv_1000fdx_cap" },
789a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_1000HDX_CAP, 0, 1, 0, "-adv_1000hdx_cap" },
799a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_100T4_CAP, 0, 1, 0, "-adv_100T4_cap" },
809a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_100FDX_CAP, 0, 1, 0, "+adv_100fdx_cap" },
819a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_100HDX_CAP, 0, 1, 0, "+adv_100hdx_cap" },
829a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_10FDX_CAP, 0, 1, 0, "+adv_10fdx_cap" },
839a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_10HDX_CAP, 0, 1, 0, "+adv_10hdx_cap" },
849a5557fdSlucy wang - Sun Microsystems - Beijing China
859a5557fdSlucy wang - Sun Microsystems - Beijing China /* Current operating modes */
869a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_STATUS, 0, 1, 0, "-link_status" },
879a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_SPEED, 0, 10000, 0, "-link_speed" },
889a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_DUPLEX, 0, 2, 0, "-link_duplex" },
899a5557fdSlucy wang - Sun Microsystems - Beijing China
909a5557fdSlucy wang - Sun Microsystems - Beijing China /* Loopback status */
919a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LOOP_MODE, 0, 2, 0, "-loop_mode" },
929a5557fdSlucy wang - Sun Microsystems - Beijing China
939a5557fdSlucy wang - Sun Microsystems - Beijing China /* Terminator */
949a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_COUNT, 0, 0, 0, NULL }
959a5557fdSlucy wang - Sun Microsystems - Beijing China };
969a5557fdSlucy wang - Sun Microsystems - Beijing China
979a5557fdSlucy wang - Sun Microsystems - Beijing China static const nd_param_t nd_template_1000[] = {
989a5557fdSlucy wang - Sun Microsystems - Beijing China /* info min max init r/w+name */
999a5557fdSlucy wang - Sun Microsystems - Beijing China
1009a5557fdSlucy wang - Sun Microsystems - Beijing China /* Our hardware capabilities */
1019a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_AUTONEG_CAP, 0, 1, 1, "-autoneg_cap" },
1029a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_PAUSE_CAP, 0, 1, 1, "-pause_cap" },
1039a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ASYM_PAUSE_CAP, 0, 1, 1, "-asym_pause_cap" },
1049a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_1000FDX_CAP, 0, 1, 1, "-1000fdx_cap" },
1059a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_1000HDX_CAP, 0, 1, 0, "-1000hdx_cap" },
1069a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_100T4_CAP, 0, 1, 0, "-100T4_cap" },
107*dda0720aSjing xiong ERI-SUN { PARAM_100FDX_CAP, 0, 1, 0, "-100fdx_cap" },
108*dda0720aSjing xiong ERI-SUN { PARAM_100HDX_CAP, 0, 1, 0, "-100hdx_cap" },
109*dda0720aSjing xiong ERI-SUN { PARAM_10FDX_CAP, 0, 1, 0, "-10fdx_cap" },
110*dda0720aSjing xiong ERI-SUN { PARAM_10HDX_CAP, 0, 1, 0, "-10hdx_cap" },
1119a5557fdSlucy wang - Sun Microsystems - Beijing China
1129a5557fdSlucy wang - Sun Microsystems - Beijing China /* Our advertised capabilities */
1139a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_AUTONEG_CAP, 0, 1, 1, "-adv_autoneg_cap" },
1149a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_PAUSE_CAP, 0, 1, 1, "+adv_pause_cap" },
1159a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_ASYM_PAUSE_CAP, 0, 1, 1, "+adv_asym_pause_cap" },
1169a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_1000FDX_CAP, 0, 1, 1, "+adv_1000fdx_cap" },
1179a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_1000HDX_CAP, 0, 1, 0, "-adv_1000hdx_cap" },
1189a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_ADV_100T4_CAP, 0, 1, 0, "-adv_100T4_cap" },
119*dda0720aSjing xiong ERI-SUN { PARAM_ADV_100FDX_CAP, 0, 1, 0, "+adv_100fdx_cap" },
120*dda0720aSjing xiong ERI-SUN { PARAM_ADV_100HDX_CAP, 0, 1, 0, "+adv_100hdx_cap" },
121*dda0720aSjing xiong ERI-SUN { PARAM_ADV_10FDX_CAP, 0, 1, 0, "+adv_10fdx_cap" },
122*dda0720aSjing xiong ERI-SUN { PARAM_ADV_10HDX_CAP, 0, 1, 0, "+adv_10hdx_cap" },
1239a5557fdSlucy wang - Sun Microsystems - Beijing China
1249a5557fdSlucy wang - Sun Microsystems - Beijing China /* Current operating modes */
1259a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_STATUS, 0, 1, 0, "-link_status" },
1269a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_SPEED, 0, 1000, 0, "-link_speed" },
1279a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LINK_DUPLEX, 0, 2, 0, "-link_duplex" },
1289a5557fdSlucy wang - Sun Microsystems - Beijing China
1299a5557fdSlucy wang - Sun Microsystems - Beijing China /* Loopback status */
1309a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_LOOP_MODE, 0, 2, 0, "-loop_mode" },
1319a5557fdSlucy wang - Sun Microsystems - Beijing China
1329a5557fdSlucy wang - Sun Microsystems - Beijing China /* Terminator */
1339a5557fdSlucy wang - Sun Microsystems - Beijing China { PARAM_COUNT, 0, 0, 0, NULL }
1349a5557fdSlucy wang - Sun Microsystems - Beijing China };
1359a5557fdSlucy wang - Sun Microsystems - Beijing China
1369a5557fdSlucy wang - Sun Microsystems - Beijing China /* ============== NDD Support Functions =============== */
1379a5557fdSlucy wang - Sun Microsystems - Beijing China
1389a5557fdSlucy wang - Sun Microsystems - Beijing China /*
1399a5557fdSlucy wang - Sun Microsystems - Beijing China * Extracts the value from the unm parameter array and prints
1409a5557fdSlucy wang - Sun Microsystems - Beijing China * the parameter value. cp points to the required parameter.
1419a5557fdSlucy wang - Sun Microsystems - Beijing China */
1429a5557fdSlucy wang - Sun Microsystems - Beijing China /* ARGSUSED */
1439a5557fdSlucy wang - Sun Microsystems - Beijing China static int
unm_param_get(queue_t * q,mblk_t * mp,caddr_t cp,cred_t * credp)1449a5557fdSlucy wang - Sun Microsystems - Beijing China unm_param_get(queue_t *q, mblk_t *mp, caddr_t cp, cred_t *credp)
1459a5557fdSlucy wang - Sun Microsystems - Beijing China {
1469a5557fdSlucy wang - Sun Microsystems - Beijing China nd_param_t *ndp;
1479a5557fdSlucy wang - Sun Microsystems - Beijing China
1489a5557fdSlucy wang - Sun Microsystems - Beijing China ndp = (nd_param_t *)(uintptr_t)cp;
1499a5557fdSlucy wang - Sun Microsystems - Beijing China (void) mi_mpprintf(mp, "%d", ndp->ndp_val);
1509a5557fdSlucy wang - Sun Microsystems - Beijing China
1519a5557fdSlucy wang - Sun Microsystems - Beijing China return (0);
1529a5557fdSlucy wang - Sun Microsystems - Beijing China }
1539a5557fdSlucy wang - Sun Microsystems - Beijing China
1549a5557fdSlucy wang - Sun Microsystems - Beijing China /*
1559a5557fdSlucy wang - Sun Microsystems - Beijing China * Validates the request to set a UNM parameter to a specific value.
1569a5557fdSlucy wang - Sun Microsystems - Beijing China * If the request is OK, the parameter is set. Also the <info> field
1579a5557fdSlucy wang - Sun Microsystems - Beijing China * is incremented to show that the parameter was touched, even though
1589a5557fdSlucy wang - Sun Microsystems - Beijing China * it may have been set to the same value it already had.
1599a5557fdSlucy wang - Sun Microsystems - Beijing China */
1609a5557fdSlucy wang - Sun Microsystems - Beijing China /* ARGSUSED */
1619a5557fdSlucy wang - Sun Microsystems - Beijing China static int
unm_param_set(queue_t * q,mblk_t * mp,char * value,caddr_t cp,cred_t * credp)1629a5557fdSlucy wang - Sun Microsystems - Beijing China unm_param_set(queue_t *q, mblk_t *mp, char *value, caddr_t cp, cred_t *credp)
1639a5557fdSlucy wang - Sun Microsystems - Beijing China {
1649a5557fdSlucy wang - Sun Microsystems - Beijing China nd_param_t *ndp;
1659a5557fdSlucy wang - Sun Microsystems - Beijing China int new_value;
1669a5557fdSlucy wang - Sun Microsystems - Beijing China char *end;
1679a5557fdSlucy wang - Sun Microsystems - Beijing China
1689a5557fdSlucy wang - Sun Microsystems - Beijing China ndp = (nd_param_t *)(uintptr_t)cp;
1699a5557fdSlucy wang - Sun Microsystems - Beijing China new_value = mi_strtol(value, &end, 10);
1709a5557fdSlucy wang - Sun Microsystems - Beijing China if (end == value)
1719a5557fdSlucy wang - Sun Microsystems - Beijing China return (EINVAL);
1729a5557fdSlucy wang - Sun Microsystems - Beijing China if (new_value < ndp->ndp_min || new_value > ndp->ndp_max)
1739a5557fdSlucy wang - Sun Microsystems - Beijing China return (EINVAL);
1749a5557fdSlucy wang - Sun Microsystems - Beijing China
1759a5557fdSlucy wang - Sun Microsystems - Beijing China ndp->ndp_val = new_value;
1769a5557fdSlucy wang - Sun Microsystems - Beijing China ndp->ndp_info += 1;
1779a5557fdSlucy wang - Sun Microsystems - Beijing China return (0);
1789a5557fdSlucy wang - Sun Microsystems - Beijing China }
1799a5557fdSlucy wang - Sun Microsystems - Beijing China
1809a5557fdSlucy wang - Sun Microsystems - Beijing China /*
1819a5557fdSlucy wang - Sun Microsystems - Beijing China * Initialise the per-instance parameter array from the global prototype,
1829a5557fdSlucy wang - Sun Microsystems - Beijing China * and register each element with the named dispatch handler using nd_load()
1839a5557fdSlucy wang - Sun Microsystems - Beijing China */
1849a5557fdSlucy wang - Sun Microsystems - Beijing China static int
unm_param_register(unm_adapter * adapter)1859a5557fdSlucy wang - Sun Microsystems - Beijing China unm_param_register(unm_adapter *adapter)
1869a5557fdSlucy wang - Sun Microsystems - Beijing China {
1879a5557fdSlucy wang - Sun Microsystems - Beijing China const nd_param_t *tmplp;
1889a5557fdSlucy wang - Sun Microsystems - Beijing China dev_info_t *dip;
1899a5557fdSlucy wang - Sun Microsystems - Beijing China nd_param_t *ndp;
1909a5557fdSlucy wang - Sun Microsystems - Beijing China caddr_t *nddpp;
1919a5557fdSlucy wang - Sun Microsystems - Beijing China pfi_t setfn;
1929a5557fdSlucy wang - Sun Microsystems - Beijing China char *nm;
1939a5557fdSlucy wang - Sun Microsystems - Beijing China int pval;
1949a5557fdSlucy wang - Sun Microsystems - Beijing China
1959a5557fdSlucy wang - Sun Microsystems - Beijing China dip = adapter->dip;
1969a5557fdSlucy wang - Sun Microsystems - Beijing China nddpp = &adapter->nd_data_p;
1979a5557fdSlucy wang - Sun Microsystems - Beijing China ASSERT(*nddpp == NULL);
1989a5557fdSlucy wang - Sun Microsystems - Beijing China
1999a5557fdSlucy wang - Sun Microsystems - Beijing China if (adapter->ahw.board_type == UNM_NIC_XGBE)
2009a5557fdSlucy wang - Sun Microsystems - Beijing China tmplp = nd_template_10000;
2019a5557fdSlucy wang - Sun Microsystems - Beijing China else
2029a5557fdSlucy wang - Sun Microsystems - Beijing China tmplp = nd_template_1000;
2039a5557fdSlucy wang - Sun Microsystems - Beijing China
2049a5557fdSlucy wang - Sun Microsystems - Beijing China for (; tmplp->ndp_name != NULL; ++tmplp) {
2059a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2069a5557fdSlucy wang - Sun Microsystems - Beijing China * Copy the template from nd_template[] into the
2079a5557fdSlucy wang - Sun Microsystems - Beijing China * proper slot in the per-instance parameters,
2089a5557fdSlucy wang - Sun Microsystems - Beijing China * then register the parameter with nd_load()
2099a5557fdSlucy wang - Sun Microsystems - Beijing China */
2109a5557fdSlucy wang - Sun Microsystems - Beijing China ndp = &adapter->nd_params[tmplp->ndp_info];
2119a5557fdSlucy wang - Sun Microsystems - Beijing China *ndp = *tmplp;
2129a5557fdSlucy wang - Sun Microsystems - Beijing China nm = &ndp->ndp_name[0];
2139a5557fdSlucy wang - Sun Microsystems - Beijing China setfn = unm_param_set;
2149a5557fdSlucy wang - Sun Microsystems - Beijing China
2159a5557fdSlucy wang - Sun Microsystems - Beijing China switch (*nm) {
2169a5557fdSlucy wang - Sun Microsystems - Beijing China default:
2179a5557fdSlucy wang - Sun Microsystems - Beijing China case '!':
2189a5557fdSlucy wang - Sun Microsystems - Beijing China continue;
2199a5557fdSlucy wang - Sun Microsystems - Beijing China
2209a5557fdSlucy wang - Sun Microsystems - Beijing China case '+':
2219a5557fdSlucy wang - Sun Microsystems - Beijing China break;
2229a5557fdSlucy wang - Sun Microsystems - Beijing China
2239a5557fdSlucy wang - Sun Microsystems - Beijing China case '-':
2249a5557fdSlucy wang - Sun Microsystems - Beijing China setfn = NULL;
2259a5557fdSlucy wang - Sun Microsystems - Beijing China break;
2269a5557fdSlucy wang - Sun Microsystems - Beijing China }
2279a5557fdSlucy wang - Sun Microsystems - Beijing China
2289a5557fdSlucy wang - Sun Microsystems - Beijing China if (!nd_load(nddpp, ++nm, unm_param_get, setfn, (caddr_t)ndp))
2299a5557fdSlucy wang - Sun Microsystems - Beijing China goto nd_fail;
2309a5557fdSlucy wang - Sun Microsystems - Beijing China
2319a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2329a5557fdSlucy wang - Sun Microsystems - Beijing China * If the parameter is writable, and there's a property
2339a5557fdSlucy wang - Sun Microsystems - Beijing China * with the same name, and its value is in range, we use
2349a5557fdSlucy wang - Sun Microsystems - Beijing China * it to initialise the parameter. If it exists but is
2359a5557fdSlucy wang - Sun Microsystems - Beijing China * out of range, it's ignored.
2369a5557fdSlucy wang - Sun Microsystems - Beijing China */
2379a5557fdSlucy wang - Sun Microsystems - Beijing China if (setfn && UNM_PROP_EXISTS(dip, nm)) {
2389a5557fdSlucy wang - Sun Microsystems - Beijing China pval = UNM_PROP_GET_INT(dip, nm);
2399a5557fdSlucy wang - Sun Microsystems - Beijing China if (pval >= ndp->ndp_min && pval <= ndp->ndp_max)
2409a5557fdSlucy wang - Sun Microsystems - Beijing China ndp->ndp_val = pval;
2419a5557fdSlucy wang - Sun Microsystems - Beijing China }
2429a5557fdSlucy wang - Sun Microsystems - Beijing China }
2439a5557fdSlucy wang - Sun Microsystems - Beijing China
2449a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "unm_param_register: OK"));
2459a5557fdSlucy wang - Sun Microsystems - Beijing China return (DDI_SUCCESS);
2469a5557fdSlucy wang - Sun Microsystems - Beijing China
2479a5557fdSlucy wang - Sun Microsystems - Beijing China nd_fail:
2489a5557fdSlucy wang - Sun Microsystems - Beijing China if (adapter->ahw.board_type == UNM_NIC_XGBE) {
2499a5557fdSlucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
2509a5557fdSlucy wang - Sun Microsystems - Beijing China "unm_param_register: FAILED at index %d [info %d]",
2519a5557fdSlucy wang - Sun Microsystems - Beijing China (int)(tmplp-nd_template_10000), tmplp->ndp_info);
2529a5557fdSlucy wang - Sun Microsystems - Beijing China } else {
2539a5557fdSlucy wang - Sun Microsystems - Beijing China cmn_err(CE_WARN,
2549a5557fdSlucy wang - Sun Microsystems - Beijing China "unm_param_register: FAILED at index %d [info %d]",
2559a5557fdSlucy wang - Sun Microsystems - Beijing China (int)(tmplp-nd_template_1000), tmplp->ndp_info);
2569a5557fdSlucy wang - Sun Microsystems - Beijing China }
2579a5557fdSlucy wang - Sun Microsystems - Beijing China nd_free(nddpp);
2589a5557fdSlucy wang - Sun Microsystems - Beijing China return (DDI_FAILURE);
2599a5557fdSlucy wang - Sun Microsystems - Beijing China }
2609a5557fdSlucy wang - Sun Microsystems - Beijing China
2619a5557fdSlucy wang - Sun Microsystems - Beijing China int
unm_nd_init(unm_adapter * adapter)2629a5557fdSlucy wang - Sun Microsystems - Beijing China unm_nd_init(unm_adapter *adapter)
2639a5557fdSlucy wang - Sun Microsystems - Beijing China {
2649a5557fdSlucy wang - Sun Microsystems - Beijing China dev_info_t *dip;
2659a5557fdSlucy wang - Sun Microsystems - Beijing China int duplex;
2669a5557fdSlucy wang - Sun Microsystems - Beijing China int speed;
2679a5557fdSlucy wang - Sun Microsystems - Beijing China
2689a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2699a5557fdSlucy wang - Sun Microsystems - Beijing China * Register all the per-instance properties, initialising
2709a5557fdSlucy wang - Sun Microsystems - Beijing China * them from the table above or from driver properties set
2719a5557fdSlucy wang - Sun Microsystems - Beijing China * in the .conf file
2729a5557fdSlucy wang - Sun Microsystems - Beijing China */
2739a5557fdSlucy wang - Sun Microsystems - Beijing China if (unm_param_register(adapter) != DDI_SUCCESS)
2749a5557fdSlucy wang - Sun Microsystems - Beijing China return (-1);
2759a5557fdSlucy wang - Sun Microsystems - Beijing China
2769a5557fdSlucy wang - Sun Microsystems - Beijing China /*
2779a5557fdSlucy wang - Sun Microsystems - Beijing China * The link speed may be forced to 1000 or 10000 Mbps using
2789a5557fdSlucy wang - Sun Microsystems - Beijing China * the property "transfer-speed". This may be done in OBP by
2799a5557fdSlucy wang - Sun Microsystems - Beijing China * using the command "apply transfer-speed=<speed> <device>".
2809a5557fdSlucy wang - Sun Microsystems - Beijing China * The speed may be 1000 or 10000 - any other value will be
2819a5557fdSlucy wang - Sun Microsystems - Beijing China * ignored. Note that this does *enables* autonegotiation, but
2829a5557fdSlucy wang - Sun Microsystems - Beijing China * restricts it to the speed specified by the property.
2839a5557fdSlucy wang - Sun Microsystems - Beijing China */
2849a5557fdSlucy wang - Sun Microsystems - Beijing China dip = adapter->dip;
2859a5557fdSlucy wang - Sun Microsystems - Beijing China if (UNM_PROP_EXISTS(dip, transfer_speed_propname)) {
2869a5557fdSlucy wang - Sun Microsystems - Beijing China
2879a5557fdSlucy wang - Sun Microsystems - Beijing China speed = UNM_PROP_GET_INT(dip, transfer_speed_propname);
2889a5557fdSlucy wang - Sun Microsystems - Beijing China
2899a5557fdSlucy wang - Sun Microsystems - Beijing China switch (speed) {
2909a5557fdSlucy wang - Sun Microsystems - Beijing China case 10000:
2919a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg = 1;
2929a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 1;
2939a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
2949a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
2959a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
2969a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
2979a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
2989a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
2999a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3009a5557fdSlucy wang - Sun Microsystems - Beijing China
3019a5557fdSlucy wang - Sun Microsystems - Beijing China case 1000:
3029a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg = 1;
3039a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 1;
3049a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 1;
3059a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
3069a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3079a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
3089a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
3099a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3109a5557fdSlucy wang - Sun Microsystems - Beijing China
3119a5557fdSlucy wang - Sun Microsystems - Beijing China case 100:
3129a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg = 1;
3139a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
3149a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3159a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 1;
3169a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 1;
3179a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
3189a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
3199a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3209a5557fdSlucy wang - Sun Microsystems - Beijing China
3219a5557fdSlucy wang - Sun Microsystems - Beijing China case 10:
3229a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg = 1;
3239a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
3249a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3259a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
3269a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3279a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 1;
3289a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 1;
3299a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3309a5557fdSlucy wang - Sun Microsystems - Beijing China
3319a5557fdSlucy wang - Sun Microsystems - Beijing China default:
3329a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3339a5557fdSlucy wang - Sun Microsystems - Beijing China }
3349a5557fdSlucy wang - Sun Microsystems - Beijing China }
3359a5557fdSlucy wang - Sun Microsystems - Beijing China
3369a5557fdSlucy wang - Sun Microsystems - Beijing China /*
3379a5557fdSlucy wang - Sun Microsystems - Beijing China * Also check the "speed" and "full-duplex" properties. Setting
3389a5557fdSlucy wang - Sun Microsystems - Beijing China * these properties will override all other settings and *disable*
3399a5557fdSlucy wang - Sun Microsystems - Beijing China * autonegotiation, so both should be specified if either one is.
3409a5557fdSlucy wang - Sun Microsystems - Beijing China * Otherwise, the unspecified parameter will be set to a default
3419a5557fdSlucy wang - Sun Microsystems - Beijing China * value (10000Mb/s, full-duplex).
3429a5557fdSlucy wang - Sun Microsystems - Beijing China */
3439a5557fdSlucy wang - Sun Microsystems - Beijing China if (UNM_PROP_EXISTS(dip, speed_propname) ||
3449a5557fdSlucy wang - Sun Microsystems - Beijing China UNM_PROP_EXISTS(dip, duplex_propname)) {
3459a5557fdSlucy wang - Sun Microsystems - Beijing China
3469a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg = 0;
3479a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 1;
3489a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 1;
3499a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 1;
3509a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 1;
3519a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 1;
3529a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 1;
3539a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 1;
3549a5557fdSlucy wang - Sun Microsystems - Beijing China
3559a5557fdSlucy wang - Sun Microsystems - Beijing China speed = UNM_PROP_GET_INT(dip, speed_propname);
3569a5557fdSlucy wang - Sun Microsystems - Beijing China duplex = UNM_PROP_GET_INT(dip, duplex_propname);
3579a5557fdSlucy wang - Sun Microsystems - Beijing China
3589a5557fdSlucy wang - Sun Microsystems - Beijing China switch (speed) {
3599a5557fdSlucy wang - Sun Microsystems - Beijing China case 10000:
3609a5557fdSlucy wang - Sun Microsystems - Beijing China default:
3619a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
3629a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3639a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
3649a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3659a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
3669a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
3679a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3689a5557fdSlucy wang - Sun Microsystems - Beijing China
3699a5557fdSlucy wang - Sun Microsystems - Beijing China case 1000:
3709a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 0;
3719a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
3729a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3739a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
3749a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
3759a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3769a5557fdSlucy wang - Sun Microsystems - Beijing China
3779a5557fdSlucy wang - Sun Microsystems - Beijing China case 100:
3789a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 0;
3799a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
3809a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3819a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
3829a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
3839a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3849a5557fdSlucy wang - Sun Microsystems - Beijing China
3859a5557fdSlucy wang - Sun Microsystems - Beijing China case 10:
3869a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 0;
3879a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
3889a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3899a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
3909a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3919a5557fdSlucy wang - Sun Microsystems - Beijing China break;
3929a5557fdSlucy wang - Sun Microsystems - Beijing China }
3939a5557fdSlucy wang - Sun Microsystems - Beijing China
3949a5557fdSlucy wang - Sun Microsystems - Beijing China switch (duplex) {
3959a5557fdSlucy wang - Sun Microsystems - Beijing China default:
3969a5557fdSlucy wang - Sun Microsystems - Beijing China case 1:
3979a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000hdx = 0;
3989a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100hdx = 0;
3999a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10hdx = 0;
4009a5557fdSlucy wang - Sun Microsystems - Beijing China break;
4019a5557fdSlucy wang - Sun Microsystems - Beijing China
4029a5557fdSlucy wang - Sun Microsystems - Beijing China case 0:
4039a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx = 0;
4049a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx = 0;
4059a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx = 0;
4069a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx = 0;
4079a5557fdSlucy wang - Sun Microsystems - Beijing China break;
4089a5557fdSlucy wang - Sun Microsystems - Beijing China }
4099a5557fdSlucy wang - Sun Microsystems - Beijing China }
4109a5557fdSlucy wang - Sun Microsystems - Beijing China
4119a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "unm_nd_init: autoneg %d"
4129a5557fdSlucy wang - Sun Microsystems - Beijing China "pause %d asym_pause %d "
4139a5557fdSlucy wang - Sun Microsystems - Beijing China "10000fdx %d "
4149a5557fdSlucy wang - Sun Microsystems - Beijing China "1000fdx %d 1000hdx %d "
4159a5557fdSlucy wang - Sun Microsystems - Beijing China "100fdx %d 100hdx %d "
4169a5557fdSlucy wang - Sun Microsystems - Beijing China "10fdx %d 10hdx %d ",
4179a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_autoneg,
4189a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_pause, adapter->param_adv_asym_pause,
4199a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10000fdx,
4209a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_1000fdx, adapter->param_adv_1000hdx,
4219a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_100fdx, adapter->param_adv_100hdx,
4229a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->param_adv_10fdx, adapter->param_adv_10hdx));
4239a5557fdSlucy wang - Sun Microsystems - Beijing China
4249a5557fdSlucy wang - Sun Microsystems - Beijing China return (0);
4259a5557fdSlucy wang - Sun Microsystems - Beijing China }
4269a5557fdSlucy wang - Sun Microsystems - Beijing China
4279a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply
unm_nd_ioctl(unm_adapter * adapter,queue_t * wq,mblk_t * mp,struct iocblk * iocp)4289a5557fdSlucy wang - Sun Microsystems - Beijing China unm_nd_ioctl(unm_adapter *adapter, queue_t *wq, mblk_t *mp, struct iocblk *iocp)
4299a5557fdSlucy wang - Sun Microsystems - Beijing China {
4309a5557fdSlucy wang - Sun Microsystems - Beijing China boolean_t ok;
4319a5557fdSlucy wang - Sun Microsystems - Beijing China int cmd;
4329a5557fdSlucy wang - Sun Microsystems - Beijing China
4339a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "unm_nd_ioctl($%p, $%p, $%p, $%p)",
4349a5557fdSlucy wang - Sun Microsystems - Beijing China (void *)adapter, (void *)wq, (void *)mp, (void *)iocp));
4359a5557fdSlucy wang - Sun Microsystems - Beijing China
4369a5557fdSlucy wang - Sun Microsystems - Beijing China cmd = iocp->ioc_cmd;
4379a5557fdSlucy wang - Sun Microsystems - Beijing China switch (cmd) {
4389a5557fdSlucy wang - Sun Microsystems - Beijing China default:
4399a5557fdSlucy wang - Sun Microsystems - Beijing China /* NOTREACHED */
4409a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(-1, (CE_WARN, "unm_nd_ioctl: invalid cmd 0x%x", cmd));
4419a5557fdSlucy wang - Sun Microsystems - Beijing China return (IOC_INVAL);
4429a5557fdSlucy wang - Sun Microsystems - Beijing China
4439a5557fdSlucy wang - Sun Microsystems - Beijing China case ND_GET:
4449a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4459a5557fdSlucy wang - Sun Microsystems - Beijing China * If nd_getset() returns B_FALSE, the command was
4469a5557fdSlucy wang - Sun Microsystems - Beijing China * not valid (e.g. unknown name), so we just tell the
4479a5557fdSlucy wang - Sun Microsystems - Beijing China * top-level ioctl code to send a NAK (with code EINVAL).
4489a5557fdSlucy wang - Sun Microsystems - Beijing China *
4499a5557fdSlucy wang - Sun Microsystems - Beijing China * Otherwise, nd_getset() will have built the reply to
4509a5557fdSlucy wang - Sun Microsystems - Beijing China * be sent (but not actually sent it), so we tell the
4519a5557fdSlucy wang - Sun Microsystems - Beijing China * caller to send the prepared reply.
4529a5557fdSlucy wang - Sun Microsystems - Beijing China */
4539a5557fdSlucy wang - Sun Microsystems - Beijing China ok = nd_getset(wq, adapter->nd_data_p, mp);
4549a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN, "unm_nd_ioctl: get %s", ok ? "OK" :
4559a5557fdSlucy wang - Sun Microsystems - Beijing China "FAIL"));
4569a5557fdSlucy wang - Sun Microsystems - Beijing China return (ok ? IOC_REPLY : IOC_INVAL);
4579a5557fdSlucy wang - Sun Microsystems - Beijing China
4589a5557fdSlucy wang - Sun Microsystems - Beijing China case ND_SET:
4599a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4609a5557fdSlucy wang - Sun Microsystems - Beijing China * All adv_* parameters are locked (read-only) while
4619a5557fdSlucy wang - Sun Microsystems - Beijing China * the device is in any sort of loopback mode ...
4629a5557fdSlucy wang - Sun Microsystems - Beijing China */
4639a5557fdSlucy wang - Sun Microsystems - Beijing China if (adapter->param_loop_mode != UNM_LOOP_NONE) {
4649a5557fdSlucy wang - Sun Microsystems - Beijing China iocp->ioc_error = EBUSY;
4659a5557fdSlucy wang - Sun Microsystems - Beijing China return (IOC_INVAL);
4669a5557fdSlucy wang - Sun Microsystems - Beijing China }
4679a5557fdSlucy wang - Sun Microsystems - Beijing China
4689a5557fdSlucy wang - Sun Microsystems - Beijing China ok = nd_getset(wq, adapter->nd_data_p, mp);
4699a5557fdSlucy wang - Sun Microsystems - Beijing China
4709a5557fdSlucy wang - Sun Microsystems - Beijing China /*
4719a5557fdSlucy wang - Sun Microsystems - Beijing China * If nd_getset() returns B_FALSE, the command was
4729a5557fdSlucy wang - Sun Microsystems - Beijing China * not valid (e.g. unknown name), so we just tell
4739a5557fdSlucy wang - Sun Microsystems - Beijing China * the top-level ioctl code to send a NAK (with code
4749a5557fdSlucy wang - Sun Microsystems - Beijing China * EINVAL by default).
4759a5557fdSlucy wang - Sun Microsystems - Beijing China *
4769a5557fdSlucy wang - Sun Microsystems - Beijing China * Otherwise, nd_getset() will have built the reply to
4779a5557fdSlucy wang - Sun Microsystems - Beijing China * be sent - but that doesn't imply success! In some
4789a5557fdSlucy wang - Sun Microsystems - Beijing China * cases, the reply it's built will have a non-zero
4799a5557fdSlucy wang - Sun Microsystems - Beijing China * error code in it (e.g. EPERM if not superuser).
4809a5557fdSlucy wang - Sun Microsystems - Beijing China * So, we also drop out in that case ...
4819a5557fdSlucy wang - Sun Microsystems - Beijing China */
4829a5557fdSlucy wang - Sun Microsystems - Beijing China DPRINTF(1, (CE_WARN,
4839a5557fdSlucy wang - Sun Microsystems - Beijing China "unm_nd_ioctl: set %s err %d autoneg %d info %d",
4849a5557fdSlucy wang - Sun Microsystems - Beijing China ok ? "OK" : "FAIL", iocp->ioc_error,
4859a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->nd_params[PARAM_ADV_AUTONEG_CAP].ndp_val,
4869a5557fdSlucy wang - Sun Microsystems - Beijing China adapter->nd_params[PARAM_ADV_AUTONEG_CAP].ndp_info));
4879a5557fdSlucy wang - Sun Microsystems - Beijing China if (!ok)
4889a5557fdSlucy wang - Sun Microsystems - Beijing China return (IOC_INVAL);
4899a5557fdSlucy wang - Sun Microsystems - Beijing China if (iocp->ioc_error)
4909a5557fdSlucy wang - Sun Microsystems - Beijing China return (IOC_REPLY);
4919a5557fdSlucy wang - Sun Microsystems - Beijing China
4929a5557fdSlucy wang - Sun Microsystems - Beijing China return (IOC_RESTART_REPLY);
4939a5557fdSlucy wang - Sun Microsystems - Beijing China }
4949a5557fdSlucy wang - Sun Microsystems - Beijing China }
4959a5557fdSlucy wang - Sun Microsystems - Beijing China
4969a5557fdSlucy wang - Sun Microsystems - Beijing China /* Free the Named Dispatch Table by calling nd_free */
4979a5557fdSlucy wang - Sun Microsystems - Beijing China void
unm_nd_cleanup(unm_adapter * adapter)4989a5557fdSlucy wang - Sun Microsystems - Beijing China unm_nd_cleanup(unm_adapter *adapter)
4999a5557fdSlucy wang - Sun Microsystems - Beijing China {
5009a5557fdSlucy wang - Sun Microsystems - Beijing China nd_free(&adapter->nd_data_p);
5019a5557fdSlucy wang - Sun Microsystems - Beijing China }
502