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 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 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 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 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 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 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