88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston#!/usr/bin/perl -w
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# CDDL HEADER START
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# The contents of this file are subject to the terms of the
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# Common Development and Distribution License (the "License").
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# You may not use this file except in compliance with the License.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# or http://www.opensolaris.org/os/licensing.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# See the License for the specific language governing permissions
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# and limitations under the License.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# When distributing Covered Code, include this CDDL HEADER in each
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# If applicable, add the following below this CDDL HEADER, with the
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# fields enclosed by brackets "[]" replaced with your own identifying
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# information: Portions Copyright [yyyy] [name of copyright owner]
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# CDDL HEADER END
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock# Use is subject to license terms.
d91236fe104c7ea63142e053b22a39c8a30d304beschrock#
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock$num_bays = 48;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock$bay_label = "HD_ID_";
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrocksub calc_sfx_prop
d91236fe104c7ea63142e053b22a39c8a30d304beschrock{
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my $name = shift;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my $bay = shift;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my $sid = shift;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my @names = (
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "+PRSNT", "-PRSNT",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "+OK2RM", "-OK2RM",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "+FAULT", "-FAULT");
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my @masks = (
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "amask=0x0001", "dmask=0x0001",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "amask=0x0008", "dmask=0x0008",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "amask=0x0002", "dmask=0x0002");
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my @states = (
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "absent>present", "present>configured",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "configured>unconfigured", "unconfigured>configured",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "unconfigured>absent", "configured>absent",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "present>absent", "absent>configured");
d91236fe104c7ea63142e053b22a39c8a30d304beschrock my @actions = (
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "+PRSNT&+OK2RM", "+PRSNT&-OK2RM",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "+OK2RM", "-OK2RM",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "-OK2RM&-PRSNT", "-OK2RM&-PRSNT",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "-OK2RM&-PRSNT", "-OK2RM&+PRSNT");
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf "\n";
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propgroup name='%s-properties' version='1' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "name-stability='Private' data-stability='Private' >\n", $name;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propval name='fru-update-action' type='string' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "value='ipmi:fru gid=3 hdd=%d' />\n", $bay;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock for ($i = 0; $i < 6; $i++) {
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propval name='indicator-name-%d' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "type='string' value='%s' />\n", $i, $names[$i];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propval name='indicator-action-%d' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "type='string' value='ipmi:state sid=%d %s' />\n",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $i, $sid, $masks[$i];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock }
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock for ($i = 0; $i < 8; $i++) {
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propval name='indicator-rule-states-%d' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "type='string' value='%s' />\n", $i, $states[$i];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " <propval name='indicator-rule-actions-%d' " .
d91236fe104c7ea63142e053b22a39c8a30d304beschrock "type='string' value='%s' />\n", $i, $actions[$i];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock }
d91236fe104c7ea63142e053b22a39c8a30d304beschrock printf " </propgroup>\n\n";
d91236fe104c7ea63142e053b22a39c8a30d304beschrock}
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrockprint <<EOF;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock<topology name='disk' scheme='hc'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <range name='bay' min='0' max='47'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <facility name='locate' type='indicator' provider='fac_prov_ipmi' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='facility' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='type' type='uint32' value='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propmethod name='ipmi_entity' version='0' propname='entity_ref'
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston proptype='string_array' >
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argval name='format' type='string_array'>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argitem value='hdd\%d.ok2rm.led' />
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston </argval>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='offset' type='uint32' value='0' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='nparams' type='uint32' value='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <propmethod name='bay_locate_mode' version='0'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock propname='mode' proptype='uint32' mutable='1'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </facility>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <facility name='ok2rm' type='indicator' provider='fac_prov_ipmi' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='facility' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='type' type='uint32' value='2' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propmethod name='ipmi_entity' version='0' propname='entity_ref'
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston proptype='string_array' >
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argval name='format' type='string_array'>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argitem value='hdd\%d.state' />
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston </argval>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='offset' type='uint32' value='0' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='nparams' type='uint32' value='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <propmethod name='bay_indicator_mode' version='0'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock propname='mode' proptype='uint32' mutable='1'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </facility>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <facility name='service' type='indicator' provider='fac_prov_ipmi' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='facility' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='type' type='uint32' value='0' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propmethod name='ipmi_entity' version='0' propname='entity_ref'
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston proptype='string_array' >
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argval name='format' type='string_array'>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argitem value='hdd\%d.state' />
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston </argval>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='offset' type='uint32' value='0' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='nparams' type='uint32' value='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <propmethod name='bay_indicator_mode' version='0' propname='mode'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock proptype='uint32' mutable='1'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </facility>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <facility name='present' type='indicator' provider='fac_prov_ipmi' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='facility' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private' >
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='type' type='uint32' value='3' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propmethod name='ipmi_entity' version='0' propname='entity_ref'
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston proptype='string_array' >
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argval name='format' type='string_array'>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <argitem value='hdd\%d.state' />
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston </argval>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='offset' type='uint32' value='0' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <argval name='nparams' type='uint32' value='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
88045cff0aae4ed8823cd0989168e8f56927f83eRobert Johnston <propmethod name='x4500_present_mode' version='0' propname='mode'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock proptype='uint32' mutable='1'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propmethod>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </facility>
d91236fe104c7ea63142e053b22a39c8a30d304beschrockEOF
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrockmy @pci0=(1, 2, 0);
d91236fe104c7ea63142e053b22a39c8a30d304beschrockmy @pci1=(4, 3, 8, 7, 2, 1);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrockfor ($bay = 0; $bay < $num_bays; $bay++) {
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $sid = 90 + $bay;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $target = (($bay/12) + (($bay & 1) << 2));
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $index = (($bay >> 2) % 3);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $p0 = $pci0[$index];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $index = (($bay >> 1) % 6);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $p1 = $pci1[$index];
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $hpath = sprintf("/pci\@%x,0/pci1022,7458\@%x/pci11ab,11ab\@1",
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $p0, $p1);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $tpath = sprintf("/disk\@%x,0", $target);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock $apoint = sprintf(":%d", $target);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock print <<EOF;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <node instance='$bay'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='protocol' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='label' type='string' value='$bay_label$bay' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='io' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='ap-path' type='string' value='/devices$hpath$apoint' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrockEOF
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock calc_sfx_prop("sfx4500", $bay, $sid);
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrock print <<EOF;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propgroup name='binding' version='1' name-stability='Private'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock data-stability='Private'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <propval name='occupant-path' type='string'
d91236fe104c7ea63142e053b22a39c8a30d304beschrock value='$hpath$tpath' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </propgroup>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </node>
d91236fe104c7ea63142e053b22a39c8a30d304beschrockEOF
d91236fe104c7ea63142e053b22a39c8a30d304beschrock}
d91236fe104c7ea63142e053b22a39c8a30d304beschrock
d91236fe104c7ea63142e053b22a39c8a30d304beschrockprint <<EOF;
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <dependents grouping='children'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <range name='disk' min='0' max='0'>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock <enum-method name='disk' version='1' />
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </range>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </dependents>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock </range>
d91236fe104c7ea63142e053b22a39c8a30d304beschrock</topology>
d91236fe104c7ea63142e053b22a39c8a30d304beschrockEOF