66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER START
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * The contents of this file are subject to the terms of the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Common Development and Distribution License (the "License").
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You may not use this file except in compliance with the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * See the License for the specific language governing permissions
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * and limitations under the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * When distributing Covered Code, include this CDDL HEADER in each
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * If applicable, add the following below this CDDL HEADER, with the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * fields enclosed by brackets "[]" replaced with your own identifying
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * information: Portions Copyright [yyyy] [name of copyright owner]
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER END
c75976d12071ddd21443266260066ba036671682pawelw * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
f76ee27a7c2e4dbe22aec6ce187c04e980f90349pawelw * The spec conveniently defines the bay number as part of the
f76ee27a7c2e4dbe22aec6ce187c04e980f90349pawelw * additional element status descriptor. However, the AES descriptor
f76ee27a7c2e4dbe22aec6ce187c04e980f90349pawelw * is technically only valid if the device is inserted. This is a
7a1efdfee8cbdecea34d3d866bbfb46e39b06e0apawelw * problem for loki because the bay numbers don't match the element
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * class index, so when a device is removed we have no way of knowing
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * *which* bay is empty. Thankfully, loki defines this value even if
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * the invalid bit is set, so we override this value, even for empty
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf if ((dep = ses_plugin_page_lookup(sp, ses_node_snapshot(np),
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf return (0);
2038334ab26baaa43c9083f35def041511c3cc1fUnknown if (dep->sadei_protocol_identifier != SPC4_PROTO_SAS ||
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf return (0);
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf s0ep = (ses2_aes_descr_sas0_eip_impl_t *)dep->sadei_protocol_specific;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf return (0);
c75976d12071ddd21443266260066ba036671682pawelw return (0);
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf VERIFY(nvlist_lookup_uint64(props, SES_PROP_ELEMENT_TYPE,
2038334ab26baaa43c9083f35def041511c3cc1fUnknown return (0);
2038334ab26baaa43c9083f35def041511c3cc1fUnknown VERIFY(nvlist_lookup_uint64(props, SES_PROP_ELEMENT_CLASS_INDEX,
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * Find the containing enclosure node and extract the STRING IN
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * information.
2038334ab26baaa43c9083f35def041511c3cc1fUnknown for (encp = np; ses_node_type(encp) != SES_NODE_ENCLOSURE;
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw if (nvlist_lookup_byte_array(encprops, SES_EN_PROP_STRING,
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw return (0);
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw * If this is an enclosure, then calculate the chassis WWN by masking
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw * off the bottom 8 bits of the WWN.
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw VERIFY(nvlist_lookup_nvlist(props, SES_EN_PROP_LID, &lid) == 0);
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw VERIFY(nvlist_lookup_uint64(lid, SPC3_NAA_INT, &wwn) == 0);
4372d277de71fc7c19cb9f41df9b8757b34e2cc5pawelw SES_NV_ADD(string, nverr, props, LIBSES_EN_PROP_CSN, serial);
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * J4500 has 4 expanders and two of them provides
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * only ARRAY DEVICE elements while the other two provides
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * fully populated SES element information.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * This behavior may cause missing corresponding enclosure
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * element for an enclousre descriptor so no element type
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * is added to the enclosure node.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * The enclosure element type is added here. Note that
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * even if the enclosure element is found and the associated
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * prop is created by libses the plugin based prop
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * overrides so there should be no side effect doing this.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * The STRING IN data is organized into a series of variable-length
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * fields, where each field can be either a key ("Fan PartNUM") or a
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * value. If the field length is less than our shortest expected
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * identifier, then something has gone awry and we assume that the data
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * is corrupt.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf return (0);
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf field + fieldlen <= (char *)stringin + len; field += fieldlen) {
2038334ab26baaa43c9083f35def041511c3cc1fUnknown * This is the part number for the enclosure itself.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf return (0);
4360436b3c604bc28d37be269ad152b4c38157c3pawelw * Part numbers for the fans, of which there are 5.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf for (i = 0; i < 5 &&
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf if (index == i &&
a022fe3e0bc959fae460b8b5b818cd1265bf4c66ls return (0);
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Part numbers for the power supplies, of which there
2038334ab26baaa43c9083f35def041511c3cc1fUnknown for (i = 0; i < 2 &&
2038334ab26baaa43c9083f35def041511c3cc1fUnknown if (index == i &&
c75976d12071ddd21443266260066ba036671682pawelw return (0);
c75976d12071ddd21443266260066ba036671682pawelw return (0);