mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-03 01:50:25 +00:00
6dd652fa4d
- Hymod board database mods: add "who" field and new xilinx chip types - provide new "init_cmd_timeout()" function so code external to "common/main.c" can use the "reset_cmd_timeout()" function before entering the main loop - add DTT support for adm1021 (new file dtt/adm1021.c; config slightly different. see include/configs/hymod.h for an example (requires CONFIG_DTT_ADM1021, CONFIG_DTT_SENSORS, and CFG_DTT_ADM1021 defined) - add new "eeprom_probe()" function which has similar args and behaves in a similar way to "eeprom_read()" etc. - add 8260 FCC ethernet loopback code (new "eth_loopback_test()" function which is enabled by defining CONFIG_ETHER_LOOPBACK_TEST) - gdbtools copyright update - ensure that set_msr() executes the "sync" and "isync" instructions after the "mtmsr" instruction in cpu/mpc8260/interrupts.c - 8260 I/O ports fix: Open Drain should be set last when configuring - add SIU IRQ defines for 8260 - allow LDSCRIPT override and OBJCFLAGS initialization: change to config.mk to allow board configurations to override the GNU linker script, selected via the LDSCRIPT, make variable, and to give an initial value to the OBJCFLAGS make variable - 8260 i2c enhancement: o correctly extends the timeout depending on the size of all queued messages for both transmit and receive o will not continue with receive if transmit times out o ensures that the error callback is done for all queued tx and rx messages o correctly detects both tx and rx timeouts, only delivers one to the callback, and does not overwrite an earlier error o logic in i2c_probe now correct - add "vprintf()" function so that "panic()" function can be technically correct - many Hymod board changes
669 lines
15 KiB
PHP
669 lines
15 KiB
PHP
<?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?>
|
|
<?php
|
|
// (C) Copyright 2001
|
|
// Murray Jensen <Murray.Jensen@cmst.csiro.au>
|
|
// CSIRO Manufacturing Science and Technology, Preston Lab
|
|
|
|
// contains mysql user id and password - keep secret
|
|
require("config.php");
|
|
|
|
if (isset($logout)) {
|
|
Header("status: 401 Unauthorized");
|
|
Header("HTTP/1.0 401 Unauthorized");
|
|
Header("WWW-authenticate: basic realm=\"$bddb_label\"");
|
|
|
|
echo "<html><head><title>" .
|
|
"Access to '$bddb_label' Denied" .
|
|
"</title></head>\n";
|
|
echo "<body bgcolor=#ffffff><br></br><br></br><center><h1>" .
|
|
"You must be an Authorised User " .
|
|
"to access the '$bddb_label'" .
|
|
"</h1>\n</center></body></html>\n";
|
|
exit;
|
|
}
|
|
|
|
// contents of the various enumerated types - if first item is
|
|
// empty ('') then the enum is allowed to be null (ie "not null"
|
|
// is not set on the column)
|
|
|
|
// all column names in the database table
|
|
$columns = array(
|
|
'serno','ethaddr','date','batch',
|
|
'type','rev','location','comments',
|
|
'sdram0','sdram1','sdram2','sdram3',
|
|
'flash0','flash1','flash2','flash3',
|
|
'zbt0','zbt1','zbt2','zbt3','zbt4','zbt5','zbt6','zbt7',
|
|
'zbt8','zbt9','zbta','zbtb','zbtc','zbtd','zbte','zbtf',
|
|
'xlxtyp0','xlxtyp1','xlxtyp2','xlxtyp3',
|
|
'xlxspd0','xlxspd1','xlxspd2','xlxspd3',
|
|
'xlxtmp0','xlxtmp1','xlxtmp2','xlxtmp3',
|
|
'xlxgrd0','xlxgrd1','xlxgrd2','xlxgrd3',
|
|
'cputyp','cpuspd','cpmspd','busspd',
|
|
'hstype','hschin','hschout'
|
|
);
|
|
|
|
// board type
|
|
$type_vals = array('IO','CLP','DSP','INPUT','ALT-INPUT','DISPLAY');
|
|
|
|
// sdram sizes (nbits array is for write into eeprom config file)
|
|
$sdram_vals = array('','32M','64M','128M','256M');
|
|
$sdram_nbits = array(0,25,26,27,28);
|
|
|
|
// flash sizes (nbits array is for write into eeprom config file)
|
|
$flash_vals = array('','4M','8M','16M','32M','64M');
|
|
$flash_nbits = array(0,22,23,24,25,26);
|
|
|
|
// zbt ram sizes (nbits array is for write into eeprom config file)
|
|
$zbt_vals = array('','512K','1M','2M','4M');
|
|
$zbt_nbits = array(0,19,20,21,22);
|
|
|
|
// Xilinx attributes
|
|
$xlxtyp_vals = array('','XCV300E','XCV400E','XCV600E','XC2V2000','XC2V3000','XC2V4000','XC2V6000');
|
|
$xlxspd_vals = array('','6','7','8','4','5');
|
|
$xlxtmp_vals = array('','COM','IND');
|
|
$xlxgrd_vals = array('','NORMAL','ENGSAMP');
|
|
|
|
// processor attributes
|
|
$cputyp_vals = array('','MPC8260');
|
|
$clk_vals = array('','33MHZ','66MHZ','100MHZ','133MHZ','166MHZ','200MHZ');
|
|
|
|
// high-speed serial attributes
|
|
$hstype_vals = array('','AMCC-S2064A');
|
|
$hschin_vals = array('0','1','2','3','4');
|
|
$hschout_vals = array('0','1','2','3','4');
|
|
|
|
// value filters - used when outputting html
|
|
function rev_filter($num) {
|
|
if ($num == 0)
|
|
return "001";
|
|
else
|
|
return sprintf("%03d", $num);
|
|
}
|
|
|
|
function text_filter($str) {
|
|
return urldecode($str);
|
|
}
|
|
|
|
mt_srand(time() | getmypid());
|
|
|
|
// set up MySQL connection
|
|
mysql_connect("", $mysql_user, $mysql_pw) || die("cannot connect");
|
|
mysql_select_db($mysql_db) || die("cannot select db");
|
|
|
|
// page header
|
|
function pg_head($title)
|
|
{
|
|
echo "<html>\n<head>\n";
|
|
echo "<link rel=stylesheet href=\"bddb.css\" type=\"text/css\" title=\"style sheet\"></link>\n";
|
|
echo "<title>$title</title>\n";
|
|
echo "</head>\n";
|
|
echo "<body>\n";
|
|
echo "<center><h1>$title</h1></center>\n";
|
|
echo "<hr></hr>\n";
|
|
}
|
|
|
|
// page footer
|
|
function pg_foot()
|
|
{
|
|
echo "<hr></hr>\n";
|
|
echo "<table width=\"100%\"><tr><td align=left>\n<address>" .
|
|
"If you have any problems, email " .
|
|
"<a href=\"mailto:Murray.Jensen@cmst.csiro.au\">" .
|
|
"Murray Jensen" .
|
|
"</a></address>\n" .
|
|
"</td><td align=right>\n" .
|
|
"<a href=\"index.php?logout=true\">logout</a>\n" .
|
|
"</td></tr></table>\n";
|
|
echo "<p><small><i>Made with " .
|
|
"<a href=\"http://kyber.dk/phpMyBuilder/\">" .
|
|
"Kyber phpMyBuilder</a></i></small></p>\n";
|
|
echo "</body>\n";
|
|
echo "</html>\n";
|
|
}
|
|
|
|
// some support functions
|
|
|
|
if (!function_exists('array_search')) {
|
|
|
|
function array_search($needle, $haystack, $strict = false) {
|
|
|
|
if (is_array($haystack) && count($haystack)) {
|
|
|
|
$ntype = gettype($needle);
|
|
|
|
foreach ($haystack as $key => $value) {
|
|
|
|
if ($value == $needle && (!$strict ||
|
|
gettype($value) == $ntype))
|
|
return $key;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (!function_exists('in_array')) {
|
|
|
|
function in_array($needle, $haystack, $strict = false) {
|
|
|
|
if (is_array($haystack) && count($haystack)) {
|
|
|
|
$ntype = gettype($needle);
|
|
|
|
foreach ($haystack as $key => $value) {
|
|
|
|
if ($value == $needle && (!$strict ||
|
|
gettype($value) == $ntype))
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function key_in_array($key, $array) {
|
|
return in_array($key, array_keys($array), true);
|
|
}
|
|
|
|
function enum_to_index($name, $vals) {
|
|
$index = array_search($GLOBALS[$name], $vals);
|
|
if ($vals[0] != '')
|
|
$index++;
|
|
return $index;
|
|
}
|
|
|
|
// fetch a value from an array - return empty string is not present
|
|
function get_key_value($key, $array) {
|
|
if (key_in_array($key, $array))
|
|
return $array[$key];
|
|
else
|
|
return '';
|
|
}
|
|
|
|
function fprintf() {
|
|
$n = func_num_args();
|
|
if ($n < 2)
|
|
return FALSE;
|
|
$a = func_get_args();
|
|
$fp = array_shift($a);
|
|
$x = "\$s = sprintf";
|
|
$sep = '(';
|
|
foreach ($a as $z) {
|
|
$x .= "$sep'$z'";
|
|
$sep = ',';
|
|
}
|
|
$x .= ');';
|
|
eval($x);
|
|
$l = strlen($s);
|
|
$r = fwrite($fp, $s, $l);
|
|
if ($r != $l)
|
|
return FALSE;
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
// functions to display (print) a database table and its columns
|
|
|
|
function begin_table($ncols) {
|
|
global $table_ncols;
|
|
$table_ncols = $ncols;
|
|
echo "<table align=center width=\"100%\""
|
|
. " border=1 cellpadding=4 cols=$table_ncols>\n";
|
|
}
|
|
|
|
function begin_field($name, $span = 0) {
|
|
global $table_ncols;
|
|
echo "<tr valign=top>\n";
|
|
echo "\t<th align=center>$name</th>\n";
|
|
if ($span <= 0)
|
|
$span = $table_ncols - 1;
|
|
if ($span > 1)
|
|
echo "\t<td colspan=$span>\n";
|
|
else
|
|
echo "\t<td>\n";
|
|
}
|
|
|
|
function cont_field($span = 1) {
|
|
echo "\t</td>\n";
|
|
if ($span > 1)
|
|
echo "\t<td colspan=$span>\n";
|
|
else
|
|
echo "\t<td>\n";
|
|
}
|
|
|
|
function end_field() {
|
|
echo "\t</td>\n";
|
|
echo "</tr>\n";
|
|
}
|
|
|
|
function end_table() {
|
|
echo "</table>\n";
|
|
}
|
|
|
|
function print_field($name, $array, $size = 0, $filt='') {
|
|
|
|
begin_field($name);
|
|
|
|
if (key_in_array($name, $array))
|
|
$value = $array[$name];
|
|
else
|
|
$value = '';
|
|
|
|
if ($filt != '')
|
|
$value = $filt($value);
|
|
|
|
echo "\t\t<input name=$name value=\"$value\"";
|
|
if ($size > 0)
|
|
echo " size=$size maxlength=$size";
|
|
echo "></input>\n";
|
|
|
|
end_field();
|
|
}
|
|
|
|
function print_field_multiline($name, $array, $cols, $rows, $filt='') {
|
|
|
|
begin_field($name);
|
|
|
|
if (key_in_array($name, $array))
|
|
$value = $array[$name];
|
|
else
|
|
$value = '';
|
|
|
|
if ($filt != '')
|
|
$value = $filt($value);
|
|
|
|
echo "\t\t<textarea name=$name " .
|
|
"cols=$cols rows=$rows wrap=off>\n";
|
|
echo "$value";
|
|
echo "</textarea>\n";
|
|
|
|
end_field();
|
|
}
|
|
|
|
// print a mysql ENUM as an html RADIO INPUT
|
|
function print_enum($name, $array, $vals, $def = -1) {
|
|
|
|
begin_field($name);
|
|
|
|
if (key_in_array($name, $array))
|
|
$chk = array_search($array[$name], $vals, FALSE);
|
|
else
|
|
$chk = $def;
|
|
|
|
$nval = count($vals);
|
|
|
|
for ($i = 0; $i < $nval; $i++) {
|
|
|
|
$val = $vals[$i];
|
|
if ($val == '')
|
|
$pval = "none";
|
|
else
|
|
$pval = "$val";
|
|
|
|
printf("\t\t<input type=radio name=$name"
|
|
. " value=\"$val\"%s>$pval</input>\n",
|
|
$i == $chk ? " checked" : "");
|
|
}
|
|
|
|
end_field();
|
|
}
|
|
|
|
// print a group of mysql ENUMs (e.g. name0,name1,...) as an html SELECT
|
|
function print_enum_multi($base, $array, $vals, $cnt, $defs, $grp = 0) {
|
|
|
|
global $table_ncols;
|
|
|
|
if ($grp <= 0)
|
|
$grp = $cnt;
|
|
$ncell = $cnt / $grp;
|
|
$span = ($table_ncols - 1) / $ncell;
|
|
|
|
begin_field($base, $span);
|
|
|
|
$nval = count($vals);
|
|
|
|
for ($i = 0; $i < $cnt; $i++) {
|
|
|
|
if ($i > 0 && ($i % $grp) == 0)
|
|
cont_field($span);
|
|
|
|
$name = sprintf("%s%x", $base, $i);
|
|
|
|
echo "\t\t<select name=$name>\n";
|
|
|
|
if (key_in_array($name, $array))
|
|
$ai = array_search($array[$name], $vals, FALSE);
|
|
else {
|
|
if (key_in_array($i, $defs))
|
|
$ai = $defs[$i];
|
|
else
|
|
$ai = 0;
|
|
}
|
|
|
|
for ($j = 0; $j < $nval; $j++) {
|
|
|
|
$val = $vals[$j];
|
|
if ($val == '')
|
|
$pval = " ";
|
|
else
|
|
$pval = "$val";
|
|
|
|
printf("\t\t\t<option " .
|
|
"value=\"%s\"%s>%s</option>\n",
|
|
$val,
|
|
$j == $ai ? " selected" : "",
|
|
$pval);
|
|
}
|
|
|
|
echo "\t\t</select>\n";
|
|
}
|
|
|
|
end_field();
|
|
}
|
|
|
|
// functions to handle the form input
|
|
|
|
// fetch all the parts of an "enum_multi" into a string suitable
|
|
// for a MySQL query
|
|
function gather_enum_multi_query($base, $cnt) {
|
|
|
|
$retval = '';
|
|
|
|
for ($i = 0; $i < $cnt; $i++) {
|
|
|
|
$name = sprintf("%s%x", $base, $i);
|
|
|
|
if (isset($GLOBALS[$name])) {
|
|
$retval .= sprintf(", %s='%s'",
|
|
$name, $GLOBALS[$name]);
|
|
}
|
|
}
|
|
|
|
return $retval;
|
|
}
|
|
|
|
// fetch all the parts of an "enum_multi" into a string suitable
|
|
// for a display e.g. in an html table cell
|
|
function gather_enum_multi_print($base, $cnt, $array) {
|
|
|
|
$retval = '';
|
|
|
|
for ($i = 0; $i < $cnt; $i++) {
|
|
|
|
$name = sprintf("%s%x", $base, $i);
|
|
|
|
if ($array[$name] != '') {
|
|
if ($retval != '')
|
|
$retval .= ',';
|
|
$retval .= $array[$name];
|
|
}
|
|
}
|
|
|
|
return $retval;
|
|
}
|
|
|
|
// fetch all the parts of an "enum_multi" into a string suitable
|
|
// for writing to the eeprom data file
|
|
function gather_enum_multi_write($base, $cnt, $vals, $xfrm = array()) {
|
|
|
|
$retval = '';
|
|
|
|
for ($i = 0; $i < $cnt; $i++) {
|
|
|
|
$name = sprintf("%s%x", $base, $i);
|
|
|
|
if ($GLOBALS[$name] != '') {
|
|
if ($retval != '')
|
|
$retval .= ',';
|
|
$index = enum_to_index($name, $vals);
|
|
if ($xfrm != array())
|
|
$retval .= $xfrm[$index];
|
|
else
|
|
$retval .= $index;
|
|
}
|
|
}
|
|
|
|
return $retval;
|
|
}
|
|
|
|
// count how many parts of an "enum_multi" are actually set
|
|
function count_enum_multi($base, $cnt) {
|
|
|
|
$retval = 0;
|
|
|
|
for ($i = 0; $i < $cnt; $i++) {
|
|
|
|
$name = sprintf("%s%x", $base, $i);
|
|
|
|
if (isset($GLOBALS[$name]))
|
|
$retval++;
|
|
}
|
|
|
|
return $retval;
|
|
}
|
|
|
|
// ethernet address functions
|
|
|
|
// generate a (possibly not unique) random vendor ethernet address
|
|
// (setting bit 6 in the ethernet address - motorola wise i.e. bit 0
|
|
// is the most significant bit - means it is not an assigned ethernet
|
|
// address - it is a "locally administered" address). Also, make sure
|
|
// it is NOT a multicast ethernet address (by setting bit 7 to 0).
|
|
// e.g. the first byte of all ethernet addresses generated here will
|
|
// have 2 in the bottom two bits (incidentally, these are the first
|
|
// two bits transmitted on the wire, since the octets in ethernet
|
|
// addresses are transmitted LSB first).
|
|
|
|
function gen_eth_addr($serno) {
|
|
|
|
$ethaddr_high = (mt_rand(0, 65535) & 0xfeff) | 0x0200;
|
|
$ethaddr_low = mt_rand(0, 4294967295);
|
|
|
|
return sprintf("%02lx:%02lx:%02lx:%02lx:%02lx:%02lx",
|
|
$ethaddr_high >> 8, $ethaddr_high & 0xff,
|
|
$ethaddr_low >> 24, ($ethaddr_low >> 16) & 0xff,
|
|
($ethaddr_low >> 8) & 0xff, $ethaddr_low & 0xff);
|
|
}
|
|
|
|
// check that an ethernet address is valid
|
|
function eth_addr_is_valid($ethaddr) {
|
|
|
|
$ethbytes = split(':', $ethaddr);
|
|
|
|
if (count($ethbytes) != 6)
|
|
return FALSE;
|
|
|
|
for ($i = 0; $i < 6; $i++) {
|
|
$ethbyte = $ethbytes[$i];
|
|
if (!ereg('^[0-9a-f][0-9a-f]$', $ethbyte))
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// write a simple eeprom configuration file
|
|
function write_eeprom_cfg_file() {
|
|
|
|
global $sernos, $nsernos, $bddb_cfgdir, $numerrs, $cfgerrs;
|
|
global $date, $batch, $type_vals, $rev;
|
|
global $sdram_vals, $sdram_nbits;
|
|
global $flash_vals, $flash_nbits;
|
|
global $zbt_vals, $zbt_nbits;
|
|
global $xlxtyp_vals, $xlxspd_vals, $xlxtmp_vals, $xlxgrd_vals;
|
|
global $cputyp, $cputyp_vals, $clk_vals;
|
|
global $hstype, $hstype_vals, $hschin, $hschout;
|
|
|
|
$numerrs = 0;
|
|
$cfgerrs = array();
|
|
|
|
for ($i = 0; $i < $nsernos; $i++) {
|
|
|
|
$serno = sprintf("%010d", $sernos[$i]);
|
|
|
|
$wfp = @fopen($bddb_cfgdir . "/$serno.cfg", "w");
|
|
if (!$wfp) {
|
|
$cfgerrs[$i] = 'file create fail';
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
set_file_buffer($wfp, 0);
|
|
|
|
if (!fprintf($wfp, "serno=%d\n", $sernos[$i])) {
|
|
$cfgerrs[$i] = 'cfg wr fail (serno)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
|
|
if (!fprintf($wfp, "date=%s\n", $date)) {
|
|
$cfgerrs[$i] = 'cfg wr fail (date)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
|
|
if ($batch != '') {
|
|
if (!fprintf($wfp, "batch=%s\n", $batch)) {
|
|
$cfgerrs[$i] = 'cfg wr fail (batch)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$typei = enum_to_index("type", $type_vals);
|
|
if (!fprintf($wfp, "type=%d\n", $typei)) {
|
|
$cfgerrs[$i] = 'cfg wr fail (type)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
|
|
if (!fprintf($wfp, "rev=%d\n", $rev)) {
|
|
$cfgerrs[$i] = 'cfg wr fail (rev)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
|
|
$s = gather_enum_multi_write("sdram", 4,
|
|
$sdram_vals, $sdram_nbits);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "sdram=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (sdram)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("flash", 4,
|
|
$flash_vals, $flash_nbits);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "flash=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (flash)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("zbt", 16,
|
|
$zbt_vals, $zbt_nbits);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "zbt=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (zbt)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("xlxtyp", 4, $xlxtyp_vals);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "xlxtyp=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (xlxtyp)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("xlxspd", 4, $xlxspd_vals);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "xlxspd=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (xlxspd)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("xlxtmp", 4, $xlxtmp_vals);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "xlxtmp=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (xlxtmp)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$s = gather_enum_multi_write("xlxgrd", 4, $xlxgrd_vals);
|
|
if ($s != '') {
|
|
$b = fprintf($wfp, "xlxgrd=%s\n", $s);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (xlxgrd)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ($cputyp != '') {
|
|
$cputypi = enum_to_index("cputyp",$cputyp_vals);
|
|
$cpuspdi = enum_to_index("cpuspd", $clk_vals);
|
|
$busspdi = enum_to_index("busspd", $clk_vals);
|
|
$cpmspdi = enum_to_index("cpmspd", $clk_vals);
|
|
$b = fprintf($wfp, "cputyp=%d\ncpuspd=%d\n" .
|
|
"busspd=%d\ncpmspd=%d\n",
|
|
$cputypi, $cpuspdi, $busspdi, $cpmspdi);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (cputyp)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ($hstype != '') {
|
|
$hstypei = enum_to_index("hstype",$hstype_vals);
|
|
$b = fprintf($wfp, "hstype=%d\n" .
|
|
"hschin=%s\nhschout=%s\n",
|
|
$hstypei, $hschin, $hschout);
|
|
if (!$b) {
|
|
$cfgerrs[$i] = 'cfg wr fail (hstype)';
|
|
fclose($wfp);
|
|
$numerrs++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (!fclose($wfp)) {
|
|
$cfgerrs[$i] = 'file cls fail';
|
|
$numerrs++;
|
|
}
|
|
}
|
|
|
|
return $numerrs;
|
|
}
|
|
?>
|