File: rtas_dump

package info (click to toggle)
powerpc-ibm-utils 1.2.12-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 1,656 kB
  • sloc: ansic: 13,684; sh: 3,088; perl: 832; makefile: 110
file content (117 lines) | stat: -rwxr-xr-x 2,945 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#! /usr/bin/perl 
#
# This updated version of the rtas_dump script will
# do everything the original rtas_dump script does except
# it does it cleaner and without as many cmdline options.
#
# Copyright (C) 2004 International Business Machines
# Common Public License Version 1.0 (see COPYRIGHT)
#
# Author: Nathan Fontenot <nfont@austin.ibm.com>
# 

use vars qw/ %opt /;

use Getopt::Long;

$re_decode = $ENV{RTAS_EVENT_DECODE} || "/usr/sbin/rtas_event_decode";

#
# usage statement
#
sub usage()
{
	print "Usage: rtas_dump [OPTIONS]\n";
	print "Dump the contents of an RTAS event, by default RTAS events\n";
	print "are read from stdin unless the -f flag is used.\n\n";
	print " -d         debug flag, passed through to rtas_event_decode\n";
	print " -f <FILE>  dump the RTAS events from <FILE>\n";
	print " -h         print this message and exit\n";
	print " -n <NUM>   only dump RTAS event number <NUM>\n";
	print " -v         dump the entire RTAS event, not just the header\n";
	print " -w <width> set the output character width\n";
	
	exit 1;
}

#
# Read in the contents of an RTAS event and invoke rtas_event_decode on it.
#
sub handle_rtas_event()
{
	my ($event_no) = @_;

	$re_decode_args = "$re_decode_args -n $event_no";
	
	# create the pipe to rtas_event_decode
	open EVENT_DECODE, "| $re_decode $re_decode_args";

	while(<$fh>) {
		($crud, $data) = split (/RTAS/);
		$rtas_str = $rtas_str . "RTAS" . $data;
		if (/RTAS event end/) {
			print EVENT_DECODE $rtas_str;
			$rtas_str = "";
			last;
		}
	}

	close EVENT_DECODE;
}

#
# Main
#

# process cmdline args
Getopt::Long::Configure("bundling");
GetOptions("help|h"     => \$help_flag,
           "dump_raw|d" => \$debug_flag,
           "file|f=s"   => \$filename,
           "n=i"        => \$event_no,
	   "w=i"        => \$width,
           "verbose|v+" => \$verbose) or usage();
           
usage() if $help_flag;

# make sure the rtas_event_decode application is available
-e $re_decode or die "File $re_decode does not exist and is needed by rtas_dump.\n";

-x $re_decode or die "File $re_decode is not executable.\n";

# get a reference to our input filehandle
if ($filename) {
	open INPUT_FILE, $filename;
	$fh = \*INPUT_FILE;
	$close_input_file = 1;
} else {
	$fh = \*STDIN;
}

# create the arg list to rtas_event_decode
$re_decode_args = "$re_decode_args -d" if $debug_flag;
$re_decode_args = "$re_decode_args -v" if $verbose;
$re_decode_args = "$re_decode_args -w $width" if $width;

while (<$fh>) {
	if (/RTAS event begin/) { 
		# found the beginning of an RTAS event, process it.
		($crud, $data) = split (/RTAS:/);
		($this_event_no, $d) = split (' ', $data);
		if ($event_no) {
			if ($event_no == $this_event_no) {
				$rtas_str = $rtas_str . "RTAS:" . $data;
				&handle_rtas_event($this_event_no);
			}
		} else {
			$rtas_str = $rtas_str . "RTAS:" . $data;
			&handle_rtas_event($this_event_no);
		}

		next;
	}
}

if ($close_input_file) {
	close INPUT_FILE;
}