The coreboot sites support HTTPS, and requests over HTTP with SSL are also redirected. So use the more secure URLs, which also saves a request most of the times, as nothing needs to be redirected. Run the command below to replace all occurences. ``` $ git grep -l -E 'http://(www.|review.|)coreboot.org' | xargs sed -i 's,http://\(.*\)coreboot.org,https://\1coreboot.org,g' ``` Change-Id: If53f8b66f1ac72fb1a38fa392b26eade9963c369 Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-on: https://review.coreboot.org/20034 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
		
			
				
	
	
		
			287 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			287 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| my $NAME = $0;
 | |
| my $VERSION = '0.01';
 | |
| my $DATE = '2009-09-04';
 | |
| my $AUTHOR = "Ward Vandewege <ward\@jhvc.com>";
 | |
| my $COPYRIGHT = "2009";
 | |
| my $LICENSE = "GPL v3 - http://www.fsf.org/licenses/gpl.txt";
 | |
| my $URL = "https://coreboot.org";
 | |
| 
 | |
| my $DEBUG = 0;
 | |
| 
 | |
| use strict;
 | |
| 
 | |
| # Run the bkdg for k8 through pdftotext first (from the poppler package)
 | |
| 
 | |
| my @registers = ();
 | |
| my $raw_register = '';
 | |
| 
 | |
| my $name = '';
 | |
| my $description = '';
 | |
| my $step = 0;
 | |
| my $oldstep = 0;
 | |
| 
 | |
| my $previous_res = 0;
 | |
| my $previous_start = 0;
 | |
| my $previous_stop = 0;
 | |
| my $strip_empties = 0;
 | |
| 
 | |
| my $previous_bits = '';
 | |
| 
 | |
| our %info;
 | |
| 
 | |
| my %typos;
 | |
| 
 | |
| $typos{'CkeDreStrength'} = 'CkeDrvStrength';
 | |
| 
 | |
| while (<>) {
 | |
|     my $line = $_;
 | |
|     chomp($line);
 | |
| 
 | |
|     foreach my $k (keys %typos) {
 | |
|         $line =~ s/$k/$typos{$k}/;
 | |
|     }
 | |
| 
 | |
|     # Make sure we do not include headers in our output
 | |
|     if (($line =~ /^Chapter 4/) || ($line =~ /Chapter 4$/)) {
 | |
|         $oldstep = $step;
 | |
|         $step = 99;
 | |
|         next;
 | |
|     }
 | |
|     if ($step == 99) {  # header
 | |
|         if ($line =~ /Processors$/) {
 | |
|             $step = $oldstep;
 | |
|             $strip_empties = 1;
 | |
|         }
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     if ($strip_empties) {
 | |
|         # Headers are followed by two blank lines. Strip them.
 | |
|         if ($line =~ /^\s*$/) {
 | |
|             next;
 | |
|         } else {
 | |
|             $strip_empties = 0;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     if (($step % 6 == 0) && ($line =~ /^\d+\.\d+\.\d+\s+(.*)$/)) {
 | |
|         $step = 1;
 | |
|         next;
 | |
|     }
 | |
|     if ($step == 1) {
 | |
|         $description = "$line\n";
 | |
|         $step = 2;
 | |
|         next;
 | |
|     }
 | |
|     #print STDERR "STEP: $step\n";
 | |
|     #print STDERR "$line\n";
 | |
| 
 | |
|     if ((($step == 0) || ($step == 6) || ($step == 2)) && ($line =~ /^(.*)\s+Function\s+\d+:\s+Offset\s+..h$/)) {
 | |
|         $name = $1;
 | |
|         $name =~ s/ +$//;
 | |
|         $step = 3;
 | |
|         $description =~ s/\n+$//ms;
 | |
| 
 | |
|         if ($previous_bits ne '') {
 | |
|           &finish_record($previous_bits);
 | |
|           $previous_bits = ''; # reset previous_bits (used in step 6)
 | |
|         }
 | |
| 
 | |
| 
 | |
|         next;
 | |
|     } elsif ($step == 2) {
 | |
|         $description .= "$line\n";
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     if (($step == 3) && ($line =~ /^\s+Index (.+h)$/)) {
 | |
|         $raw_register= $1;
 | |
|         @registers = split(/,/,$raw_register);
 | |
|         for (my $i=0;$i<=$#registers;$i++) {
 | |
|             $registers[$i] =~ s/ //g;
 | |
|             $registers[$i] =~ s/h$//;
 | |
|         }
 | |
|         # OK, we have our register(s), so now we can print out the name and description lines.
 | |
|         print "\$info{'$registers[0]'}{'name'} = \"$name\";\n";
 | |
|         print "\$info{'$registers[0]'}{'description'} = \"$description\";\n";
 | |
|         $step = 4;
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     if (($step == 4) && ($line =~ /^Bits\s+Mnemonic\s+Function\s+R\/W\s+Reset$/)) {
 | |
|         $step = 5;
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     if (($step == 5) && (!($line =~ /^Field Descriptions$/))) {
 | |
|         $line =~ s/^ +//; # Strip leading spaces
 | |
|         my @f = split(/  +/,$line);
 | |
| 
 | |
|         # skip blank lines
 | |
|         next if (!exists($f[0]));
 | |
| 
 | |
|         # skip headers (they could be repeated if the table crosses a page boundary
 | |
|         next if ($f[0] eq 'Bits');
 | |
| 
 | |
|         # Clean up funky field separator
 | |
|         if ($f[0] =~ /\d+.+\d+/) {
 | |
|             $f[0] =~ s/[^\d]+/-/g;
 | |
|         }
 | |
| 
 | |
|         my ($start, $stop, $width) = (0,0,0);
 | |
|         if ($f[0] =~ /-/) {
 | |
|             $f[0] =~ s/^(\d+)[^\d]+(\d+)$/$1-$2/;
 | |
|             ($stop,$start) = ($1,$2);
 | |
|             $width = $stop-$start+1;
 | |
|         } else {
 | |
|           if ($f[0] =~ /^\d+$/) {
 | |
|             $start = $stop = $f[0];
 | |
|             $width = 1;
 | |
|           } else {
 | |
|             # continuation from previous line
 | |
|             $start = $stop = $width = 0;
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         # Some lines have only bit entries
 | |
|         if (($#f < 1) && ($f[0] =~ /^\d+(|\-\d+)/)) {
 | |
|           $f[4] = '';
 | |
|           $f[3] = '';
 | |
|           $f[2] = '';
 | |
|           $f[1] = '';
 | |
|         } elsif ($#f < 1) {
 | |
|           # Some lines are a continuation of the function field a line above
 | |
|           $f[4] = '';
 | |
|           $f[3] = '';
 | |
|           $f[2] = $f[0];
 | |
|           $f[1] = '';
 | |
|           $f[0] = '';
 | |
|           my $tmp = "\$info{'$registers[0]'}{'ranges'}{" . $previous_res . "}{'function'} .= \"" . $f[2] . "\";\n";
 | |
|           print &multiply($tmp,$previous_res,$previous_start,$previous_stop);
 | |
|           next;
 | |
|         }
 | |
| 
 | |
|         # Some lines have only bit and reset entries
 | |
|         if ($#f < 2) {
 | |
|           $f[4] = $f[1];
 | |
|           $f[3] = '';
 | |
|           $f[2] = '';
 | |
|           $f[1] = '';
 | |
|         }
 | |
| 
 | |
|         # Some lines have no mnemonic and no function
 | |
|         if ($#f < 3) {
 | |
|           $f[4] = $f[2];
 | |
|           $f[3] = $f[1];
 | |
|           $f[2] = '';
 | |
|           $f[1] = '';
 | |
|         }
 | |
| 
 | |
|         # functions with 'reserved' mnemonic have no function
 | |
|         if ($f[1] =~ /^reserved$/i) {
 | |
|             $f[4] = $f[3];
 | |
|             $f[3] = $f[2];
 | |
|             $f[2] = '';
 | |
|         }
 | |
| 
 | |
|         $previous_res = $f[0];
 | |
|         $previous_start = $start;
 | |
|         $previous_stop = $stop;
 | |
| 
 | |
|         # the 'range' field is not useful in this instance, but used in the 'fields' version of this block to easily go
 | |
|         # from a bit position to the corresponding range.
 | |
|         my $str = "
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'function'} = \"" . $f[2] . "\";
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'mnemonic'} = \"" . $f[1] . "\";
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'description'} = \"" . "\";
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'begin'} = $start;
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'end'} = $stop;
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'width'} = $width;
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'rw'} = \"" . $f[3] . "\";
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'reset'} = \"" . $f[4] . "\";
 | |
| \$info{'$registers[0]'}{'ranges'}{'" . $f[0] . "'}{'range'} = \"" . $f[0] . "\";
 | |
| ";
 | |
|         my $output;
 | |
| 
 | |
|         $output = &multiply($str,$f[0],$start,$stop);
 | |
| 
 | |
|         # Load the data structure here, too
 | |
|         eval($output);
 | |
| 
 | |
|         print $output . "\n\n";
 | |
|     } elsif (($step == 5) && ($line =~ /^Field Descriptions$/)) {
 | |
|         $step = 6;
 | |
|         next;
 | |
|     }
 | |
| 
 | |
|     if ($step == 6) {
 | |
|         if ($line =~ /^(.*?)\((.*?)\).+Bit(s|) +(.*?)\. (.*)$/) {
 | |
|           my $bits = $4;
 | |
|           my $desc = $5;
 | |
|           $bits =~ s/[^\d]+/-/;
 | |
| 
 | |
|           if ($previous_bits ne '') {
 | |
|             # We're done with a field description block
 | |
|             print "\$info{'$registers[0]'}{'ranges'}{'$previous_bits'}{'description'} = \"" . $info{$registers[0]}{'ranges'}{$previous_bits}{'description'} . "\";\n";
 | |
|             foreach my $k (keys %{$info{$registers[0]}{'ranges'}{$previous_bits}{'values'}}) {
 | |
|               print "\$info{'$registers[0]'}{'ranges'}{'$previous_bits'}{'values'}{'$k'} = \"" . $info{$registers[0]}{'ranges'}{$previous_bits}{'values'}{$k} . "\";\n";
 | |
|             }
 | |
|           }
 | |
| 
 | |
|           if (exists($info{$registers[0]}{'ranges'}{$bits})) {
 | |
|             print STDERR "match ($bits) on $line\n";
 | |
|             $info{$registers[0]}{'ranges'}{$bits}{'description'} = $desc . "\n";
 | |
|             $previous_bits = $bits;
 | |
|           }
 | |
|         } elsif ($previous_bits ne '') {
 | |
|           $info{$registers[0]}{'ranges'}{$previous_bits}{'description'} .= $line . "\n";
 | |
|           if ($line =~ /([0-9a-f]+b|[0-9a-f]+h) = (.*)$/i) {
 | |
|             $info{$registers[0]}{'ranges'}{$previous_bits}{'values'}{$1} = $2;
 | |
|           }
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| &finish_record($previous_bits);
 | |
| 
 | |
| 
 | |
| print "1;\n";
 | |
| 
 | |
| sub multiply {
 | |
|   my $str = shift;
 | |
|   my $range = shift;
 | |
|   my $start = shift;
 | |
|   my $stop = shift;
 | |
|   my $output = '';
 | |
|   for (my $i=$start;$i<=$stop;$i++) {
 | |
|     my $tmp = $str;
 | |
|     $tmp =~ s/\{'$range'\}/{'$i'}/g;
 | |
|     $tmp =~ s/\{'ranges'\}/{'fields'}/g;
 | |
|     $tmp .=
 | |
|     $output .= $tmp;
 | |
|   }
 | |
| 
 | |
|   #$output .= $str if (($stop - $start + 1) > 1);
 | |
|   $output .= $str;
 | |
| 
 | |
|   return $output;
 | |
| }
 | |
| 
 | |
| sub finish_record {
 | |
|   my $previous_bits = shift;
 | |
|    # We're done with a field description block
 | |
|           print "\$info{'$registers[0]'}{'ranges'}{'$previous_bits'}{'description'} = \"" . $info{$registers[0]}{'ranges'}{$previous_bits}{'description'} . "\";\n";
 | |
|           foreach my $k (keys %{$info{$registers[0]}{'ranges'}{$previous_bits}{'values'}}) {
 | |
|             print "\$info{'$registers[0]'}{'ranges'}{'$previous_bits'}{'values'}{'$k'} = \"" . $info{$registers[0]}{'ranges'}{$previous_bits}{'values'}{$k} . "\";\n";
 | |
|           }
 | |
| 
 | |
|           # End of table. If this data applies to more than one register, print duplication lines.
 | |
|           for (my $i=1;$i<=$#registers;$i++) {
 | |
|             print "\$info{'$registers[$i]'} = \$info{'$registers[0]'};\n";
 | |
|           }
 | |
| 
 | |
| }
 |