Sun-Fire-X4200-Server-hc-topology.xmlgen revision 940d71d237794874e18a0eb72f6564821a823517
#!/usr/local/bin/perl
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
use Getopt::Std;
# X4200-Server: platform specific begin
my $sys_supported = { "name" => "Sun-Fire-X4200-Server",
"num_bays" => "4",
"bay_label" => "HD"};
# X4200-Server: platform specific end
$IFILE = "filehandle";
$OFILE = "filehandle";
sub Usage()
{
print STDERR "Usage: xml-gen -p <platform> " .
"-i <input_xml_file> -o <output_xml_file>\n";
}
sub calc_nodes
{
# X4200-Server: platform specific begin
$controller = 0;
# X4200-Server: platform specific end
for ($bay = 0; $bay < $sys_supported->{"num_bays"}; $bay++) {
# X4200-Server: platform specific begin
$target = $bay;
# set hba path, target path, bay path, and attachment point
$hpath = "/pci\@0,0/pci1022,7450\@2/pci1000,3060\@3";
$tpath = sprintf("/sd\@%x,0", $target);
$apoint = sprintf(":scsi::dsk/c%dt%dd0",
$controller + 1, $target);
# X4200-Server: platform specific end
printf OFILE "\n <node instance='%d'>\n\n", $bay;
printf OFILE
" <propgroup name='protocol' version='1' " .
"name-stability='Private' data-stability='Private' >\n";
printf OFILE
" <propval name='label' type='string' " .
"value='%s%d' />\n",
$sys_supported->{"bay_label"}, $bay;
printf OFILE
" </propgroup>\n";
printf OFILE
" <propgroup name='io' version='1' " .
"name-stability='Private' data-stability='Private' >\n";
printf OFILE
" <propval name='ap-path' type='string' " .
"value='/devices%s%s' />\n", $hpath, $apoint;
printf OFILE
" </propgroup>\n";
# no LED support
printf OFILE
" <propgroup name='binding' version='1' " .
"name-stability='Private' data-stability='Private' >\n";
printf OFILE
" <propval name='occupant-path' type='string' " .
"value='%s%s' />\n", $hpath, $tpath;
printf OFILE
" </propgroup>\n";
printf OFILE "\n </node>\n\n";
}
}
$ok = getopts("p:i:o:h", \%options);
if ($options{'h'}) {
Usage();
exit (1);
}
$platform = $options{'p'};
$input_file = $options{'i'};
$output_file = $options{'o'};
if (!$platform || !$input_file || !$output_file) {
Usage();
exit (1);
}
open(IFILE, "< $input_file") || die("$input_file cannot be opened.");
open(OFILE, "> $output_file") || die("$output_file cannot be opened.");
my $in_chassis_range = 0;
while ($line = <IFILE>) {
chomp($line);
if ($line =~ /range\s+name\s?=\s?\Wchassis\W/) {
$in_chassis_range = 1;
}
print OFILE "$line\n";
if ($in_chassis_range && ($line =~ /<dependents/)) {
last;
}
}
print OFILE " <!--xml-gen internal storage-->\n";
printf OFILE " <range name='bay' min='0' max='%d'>\n",
$sys_supported->{"num_bays"}-1;
calc_nodes(0);
printf OFILE " <dependents grouping='children'>\n";
printf OFILE " <range name='disk' min='0' max='0'>\n";
printf OFILE " <enum-method name='disk' version='1' />\n";
printf OFILE " </range>\n";
printf OFILE " </dependents>\n\n";
printf OFILE " </range>\n";
while ($line = <IFILE>) {
print OFILE $line;
}
close OFILE;
close IFILE;