]>
Commit | Line | Data |
---|---|---|
fe8c2806 WD |
1 | <?php // php pages made with phpMyBuilder <http://kyber.dk/phpMyBuilder> ?> |
2 | <?php | |
3 | // (C) Copyright 2001 | |
b3b0fd55 | 4 | // Murray Jensen <[email protected]> |
fe8c2806 WD |
5 | // CSIRO Manufacturing Science and Technology, Preston Lab |
6 | ||
7 | // contains mysql user id and password - keep secret | |
8 | require("config.php"); | |
9 | ||
d992daf9 | 10 | if (isset($_REQUEST['logout'])) { |
fe8c2806 WD |
11 | Header("status: 401 Unauthorized"); |
12 | Header("HTTP/1.0 401 Unauthorized"); | |
13 | Header("WWW-authenticate: basic realm=\"$bddb_label\""); | |
14 | ||
15 | echo "<html><head><title>" . | |
16 | "Access to '$bddb_label' Denied" . | |
17 | "</title></head>\n"; | |
18 | echo "<body bgcolor=#ffffff><br></br><br></br><center><h1>" . | |
19 | "You must be an Authorised User " . | |
20 | "to access the '$bddb_label'" . | |
21 | "</h1>\n</center></body></html>\n"; | |
22 | exit; | |
23 | } | |
24 | ||
25 | // contents of the various enumerated types - if first item is | |
26 | // empty ('') then the enum is allowed to be null (ie "not null" | |
27 | // is not set on the column) | |
28 | ||
29 | // all column names in the database table | |
30 | $columns = array( | |
31 | 'serno','ethaddr','date','batch', | |
32 | 'type','rev','location','comments', | |
33 | 'sdram0','sdram1','sdram2','sdram3', | |
34 | 'flash0','flash1','flash2','flash3', | |
35 | 'zbt0','zbt1','zbt2','zbt3','zbt4','zbt5','zbt6','zbt7', | |
36 | 'zbt8','zbt9','zbta','zbtb','zbtc','zbtd','zbte','zbtf', | |
37 | 'xlxtyp0','xlxtyp1','xlxtyp2','xlxtyp3', | |
38 | 'xlxspd0','xlxspd1','xlxspd2','xlxspd3', | |
39 | 'xlxtmp0','xlxtmp1','xlxtmp2','xlxtmp3', | |
40 | 'xlxgrd0','xlxgrd1','xlxgrd2','xlxgrd3', | |
41 | 'cputyp','cpuspd','cpmspd','busspd', | |
42 | 'hstype','hschin','hschout' | |
43 | ); | |
44 | ||
45 | // board type | |
46 | $type_vals = array('IO','CLP','DSP','INPUT','ALT-INPUT','DISPLAY'); | |
47 | ||
d992daf9 WD |
48 | // Xilinx fpga types |
49 | $xlxtyp_vals = array('','XCV300E','XCV400E','XCV600E','XC2V2000','XC2V3000','XC2V4000','XC2V6000','XC2VP2','XC2VP4','XC2VP7','XC2VP20','XC2VP30','XC2VP50','XC4VFX20','XC4VFX40','XC4VFX60','XC4VFX100','XC4VFX140'); | |
fe8c2806 | 50 | |
d992daf9 WD |
51 | // Xilinx fpga speeds |
52 | $xlxspd_vals = array('','6','7','8','4','5','9','10','11','12'); | |
fe8c2806 | 53 | |
d992daf9 | 54 | // Xilinx fpga temperatures (commercial or industrial) |
fe8c2806 | 55 | $xlxtmp_vals = array('','COM','IND'); |
d992daf9 WD |
56 | |
57 | // Xilinx fpga grades (normal or engineering sample) | |
fe8c2806 WD |
58 | $xlxgrd_vals = array('','NORMAL','ENGSAMP'); |
59 | ||
d992daf9 WD |
60 | // CPU types |
61 | $cputyp_vals = array('','MPC8260(HIP3)','MPC8260A(HIP4)','MPC8280(HIP7)','MPC8560'); | |
62 | ||
93e14596 | 63 | // CPU/BUS/CPM clock speeds |
d992daf9 WD |
64 | $clk_vals = array('','33MHZ','66MHZ','100MHZ','133MHZ','166MHZ','200MHZ','233MHZ','266MHZ','300MHZ','333MHZ','366MHZ','400MHZ','433MHZ','466MHZ','500MHZ','533MHZ','566MHZ','600MHZ','633MHZ','666MHZ','700MHZ','733MHZ','766MHZ','800MHZ','833MHZ','866MHZ','900MHZ','933MHZ','966MHZ','1000MHZ','1033MHZ','1066MHZ','1100MHZ','1133MHZ','1166MHZ','1200MHZ','1233MHZ','1266MHZ','1300MHZ','1333MHZ'); |
65 | ||
66 | // sdram sizes (nbits array is for eeprom config file) | |
67 | $sdram_vals = array('','32M','64M','128M','256M','512M','1G','2G','4G'); | |
68 | $sdram_nbits = array(0,25,26,27,28,29,30,31,32); | |
69 | ||
70 | // flash sizes (nbits array is for eeprom config file) | |
71 | $flash_vals = array('','4M','8M','16M','32M','64M','128M','256M','512M','1G'); | |
72 | $flash_nbits = array(0,22,23,24,25,26,27,28,29,30); | |
73 | ||
74 | // zbt ram sizes (nbits array is for write into eeprom config file) | |
75 | $zbt_vals = array('','512K','1M','2M','4M','8M','16M'); | |
76 | $zbt_nbits = array(0,19,20,21,22,23,24); | |
fe8c2806 WD |
77 | |
78 | // high-speed serial attributes | |
d992daf9 WD |
79 | $hstype_vals = array('','AMCC-S2064A','Xilinx-Rockets'); |
80 | $hschin_vals = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'); | |
81 | $hschout_vals = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'); | |
fe8c2806 WD |
82 | |
83 | // value filters - used when outputting html | |
84 | function rev_filter($num) { | |
85 | if ($num == 0) | |
86 | return "001"; | |
87 | else | |
88 | return sprintf("%03d", $num); | |
89 | } | |
90 | ||
91 | function text_filter($str) { | |
92 | return urldecode($str); | |
93 | } | |
94 | ||
95 | mt_srand(time() | getmypid()); | |
96 | ||
97 | // set up MySQL connection | |
98 | mysql_connect("", $mysql_user, $mysql_pw) || die("cannot connect"); | |
99 | mysql_select_db($mysql_db) || die("cannot select db"); | |
100 | ||
101 | // page header | |
102 | function pg_head($title) | |
103 | { | |
104 | echo "<html>\n<head>\n"; | |
105 | echo "<link rel=stylesheet href=\"bddb.css\" type=\"text/css\" title=\"style sheet\"></link>\n"; | |
106 | echo "<title>$title</title>\n"; | |
107 | echo "</head>\n"; | |
108 | echo "<body>\n"; | |
109 | echo "<center><h1>$title</h1></center>\n"; | |
110 | echo "<hr></hr>\n"; | |
111 | } | |
112 | ||
113 | // page footer | |
114 | function pg_foot() | |
115 | { | |
116 | echo "<hr></hr>\n"; | |
117 | echo "<table width=\"100%\"><tr><td align=left>\n<address>" . | |
118 | "If you have any problems, email " . | |
b3b0fd55 | 119 | "<a href=\"mailto:[email protected]\">" . |
fe8c2806 WD |
120 | "Murray Jensen" . |
121 | "</a></address>\n" . | |
122 | "</td><td align=right>\n" . | |
123 | "<a href=\"index.php?logout=true\">logout</a>\n" . | |
124 | "</td></tr></table>\n"; | |
125 | echo "<p><small><i>Made with " . | |
126 | "<a href=\"http://kyber.dk/phpMyBuilder/\">" . | |
127 | "Kyber phpMyBuilder</a></i></small></p>\n"; | |
128 | echo "</body>\n"; | |
129 | echo "</html>\n"; | |
130 | } | |
131 | ||
132 | // some support functions | |
133 | ||
134 | if (!function_exists('array_search')) { | |
135 | ||
136 | function array_search($needle, $haystack, $strict = false) { | |
137 | ||
138 | if (is_array($haystack) && count($haystack)) { | |
139 | ||
140 | $ntype = gettype($needle); | |
141 | ||
142 | foreach ($haystack as $key => $value) { | |
143 | ||
144 | if ($value == $needle && (!$strict || | |
145 | gettype($value) == $ntype)) | |
146 | return $key; | |
147 | } | |
148 | } | |
149 | ||
150 | return false; | |
151 | } | |
152 | } | |
153 | ||
154 | if (!function_exists('in_array')) { | |
155 | ||
156 | function in_array($needle, $haystack, $strict = false) { | |
157 | ||
158 | if (is_array($haystack) && count($haystack)) { | |
159 | ||
160 | $ntype = gettype($needle); | |
161 | ||
162 | foreach ($haystack as $key => $value) { | |
163 | ||
164 | if ($value == $needle && (!$strict || | |
165 | gettype($value) == $ntype)) | |
166 | return true; | |
167 | } | |
168 | } | |
169 | ||
170 | return false; | |
171 | } | |
172 | } | |
173 | ||
174 | function key_in_array($key, $array) { | |
175 | return in_array($key, array_keys($array), true); | |
176 | } | |
177 | ||
178 | function enum_to_index($name, $vals) { | |
179 | $index = array_search($GLOBALS[$name], $vals); | |
180 | if ($vals[0] != '') | |
93e14596 | 181 | $index++; |
fe8c2806 WD |
182 | return $index; |
183 | } | |
184 | ||
185 | // fetch a value from an array - return empty string is not present | |
186 | function get_key_value($key, $array) { | |
187 | if (key_in_array($key, $array)) | |
188 | return $array[$key]; | |
189 | else | |
190 | return ''; | |
191 | } | |
192 | ||
193 | function fprintf() { | |
194 | $n = func_num_args(); | |
195 | if ($n < 2) | |
196 | return FALSE; | |
197 | $a = func_get_args(); | |
198 | $fp = array_shift($a); | |
199 | $x = "\$s = sprintf"; | |
200 | $sep = '('; | |
201 | foreach ($a as $z) { | |
202 | $x .= "$sep'$z'"; | |
203 | $sep = ','; | |
204 | } | |
205 | $x .= ');'; | |
206 | eval($x); | |
207 | $l = strlen($s); | |
208 | $r = fwrite($fp, $s, $l); | |
209 | if ($r != $l) | |
210 | return FALSE; | |
211 | else | |
212 | return TRUE; | |
213 | } | |
214 | ||
215 | // functions to display (print) a database table and its columns | |
216 | ||
217 | function begin_table($ncols) { | |
218 | global $table_ncols; | |
219 | $table_ncols = $ncols; | |
220 | echo "<table align=center width=\"100%\"" | |
221 | . " border=1 cellpadding=4 cols=$table_ncols>\n"; | |
222 | } | |
223 | ||
224 | function begin_field($name, $span = 0) { | |
225 | global $table_ncols; | |
226 | echo "<tr valign=top>\n"; | |
227 | echo "\t<th align=center>$name</th>\n"; | |
228 | if ($span <= 0) | |
229 | $span = $table_ncols - 1; | |
230 | if ($span > 1) | |
231 | echo "\t<td colspan=$span>\n"; | |
232 | else | |
233 | echo "\t<td>\n"; | |
234 | } | |
235 | ||
236 | function cont_field($span = 1) { | |
237 | echo "\t</td>\n"; | |
238 | if ($span > 1) | |
239 | echo "\t<td colspan=$span>\n"; | |
240 | else | |
241 | echo "\t<td>\n"; | |
242 | } | |
243 | ||
244 | function end_field() { | |
245 | echo "\t</td>\n"; | |
246 | echo "</tr>\n"; | |
247 | } | |
248 | ||
249 | function end_table() { | |
250 | echo "</table>\n"; | |
251 | } | |
252 | ||
253 | function print_field($name, $array, $size = 0, $filt='') { | |
254 | ||
255 | begin_field($name); | |
256 | ||
257 | if (key_in_array($name, $array)) | |
258 | $value = $array[$name]; | |
259 | else | |
260 | $value = ''; | |
261 | ||
262 | if ($filt != '') | |
263 | $value = $filt($value); | |
264 | ||
265 | echo "\t\t<input name=$name value=\"$value\""; | |
266 | if ($size > 0) | |
267 | echo " size=$size maxlength=$size"; | |
268 | echo "></input>\n"; | |
269 | ||
270 | end_field(); | |
271 | } | |
272 | ||
273 | function print_field_multiline($name, $array, $cols, $rows, $filt='') { | |
274 | ||
275 | begin_field($name); | |
276 | ||
277 | if (key_in_array($name, $array)) | |
278 | $value = $array[$name]; | |
279 | else | |
280 | $value = ''; | |
281 | ||
282 | if ($filt != '') | |
283 | $value = $filt($value); | |
284 | ||
285 | echo "\t\t<textarea name=$name " . | |
286 | "cols=$cols rows=$rows wrap=off>\n"; | |
287 | echo "$value"; | |
288 | echo "</textarea>\n"; | |
289 | ||
290 | end_field(); | |
291 | } | |
292 | ||
293 | // print a mysql ENUM as an html RADIO INPUT | |
294 | function print_enum($name, $array, $vals, $def = -1) { | |
295 | ||
296 | begin_field($name); | |
297 | ||
298 | if (key_in_array($name, $array)) | |
299 | $chk = array_search($array[$name], $vals, FALSE); | |
300 | else | |
301 | $chk = $def; | |
302 | ||
303 | $nval = count($vals); | |
304 | ||
305 | for ($i = 0; $i < $nval; $i++) { | |
306 | ||
307 | $val = $vals[$i]; | |
308 | if ($val == '') | |
309 | $pval = "none"; | |
310 | else | |
311 | $pval = "$val"; | |
312 | ||
313 | printf("\t\t<input type=radio name=$name" | |
314 | . " value=\"$val\"%s>$pval</input>\n", | |
315 | $i == $chk ? " checked" : ""); | |
316 | } | |
317 | ||
318 | end_field(); | |
319 | } | |
320 | ||
d992daf9 WD |
321 | // print a mysql ENUM as an html SELECT INPUT |
322 | function print_enum_select($name, $array, $vals, $def = -1) { | |
323 | ||
324 | begin_field($name); | |
325 | ||
326 | echo "\t\t<select name=$name>\n"; | |
327 | ||
328 | if (key_in_array($name, $array)) | |
329 | $chk = array_search($array[$name], $vals, FALSE); | |
330 | else | |
331 | $chk = $def; | |
332 | ||
333 | $nval = count($vals); | |
334 | ||
335 | for ($i = 0; $i < $nval; $i++) { | |
336 | ||
337 | $val = $vals[$i]; | |
338 | if ($val == '') | |
339 | $pval = "none"; | |
340 | else | |
341 | $pval = "$val"; | |
342 | ||
343 | printf("\t\t\t<option " . | |
344 | "value=\"%s\"%s>%s</option>\n", | |
345 | $val, $i == $chk ? " selected" : "", $pval); | |
346 | } | |
347 | ||
348 | echo "\t\t</select>\n"; | |
349 | ||
350 | end_field(); | |
351 | } | |
352 | ||
fe8c2806 WD |
353 | // print a group of mysql ENUMs (e.g. name0,name1,...) as an html SELECT |
354 | function print_enum_multi($base, $array, $vals, $cnt, $defs, $grp = 0) { | |
355 | ||
356 | global $table_ncols; | |
357 | ||
358 | if ($grp <= 0) | |
359 | $grp = $cnt; | |
360 | $ncell = $cnt / $grp; | |
361 | $span = ($table_ncols - 1) / $ncell; | |
362 | ||
363 | begin_field($base, $span); | |
364 | ||
365 | $nval = count($vals); | |
366 | ||
367 | for ($i = 0; $i < $cnt; $i++) { | |
368 | ||
369 | if ($i > 0 && ($i % $grp) == 0) | |
370 | cont_field($span); | |
371 | ||
372 | $name = sprintf("%s%x", $base, $i); | |
373 | ||
374 | echo "\t\t<select name=$name>\n"; | |
375 | ||
376 | if (key_in_array($name, $array)) | |
377 | $ai = array_search($array[$name], $vals, FALSE); | |
378 | else { | |
379 | if (key_in_array($i, $defs)) | |
380 | $ai = $defs[$i]; | |
381 | else | |
382 | $ai = 0; | |
383 | } | |
384 | ||
385 | for ($j = 0; $j < $nval; $j++) { | |
386 | ||
387 | $val = $vals[$j]; | |
388 | if ($val == '') | |
389 | $pval = " "; | |
390 | else | |
391 | $pval = "$val"; | |
392 | ||
393 | printf("\t\t\t<option " . | |
394 | "value=\"%s\"%s>%s</option>\n", | |
395 | $val, | |
396 | $j == $ai ? " selected" : "", | |
397 | $pval); | |
398 | } | |
399 | ||
400 | echo "\t\t</select>\n"; | |
401 | } | |
402 | ||
403 | end_field(); | |
404 | } | |
405 | ||
406 | // functions to handle the form input | |
407 | ||
408 | // fetch all the parts of an "enum_multi" into a string suitable | |
409 | // for a MySQL query | |
410 | function gather_enum_multi_query($base, $cnt) { | |
411 | ||
412 | $retval = ''; | |
413 | ||
414 | for ($i = 0; $i < $cnt; $i++) { | |
415 | ||
416 | $name = sprintf("%s%x", $base, $i); | |
417 | ||
d992daf9 | 418 | if (isset($_REQUEST[$name])) { |
fe8c2806 | 419 | $retval .= sprintf(", %s='%s'", |
d992daf9 | 420 | $name, $_REQUEST[$name]); |
fe8c2806 WD |
421 | } |
422 | } | |
423 | ||
424 | return $retval; | |
425 | } | |
426 | ||
427 | // fetch all the parts of an "enum_multi" into a string suitable | |
428 | // for a display e.g. in an html table cell | |
429 | function gather_enum_multi_print($base, $cnt, $array) { | |
430 | ||
431 | $retval = ''; | |
432 | ||
433 | for ($i = 0; $i < $cnt; $i++) { | |
434 | ||
435 | $name = sprintf("%s%x", $base, $i); | |
436 | ||
437 | if ($array[$name] != '') { | |
438 | if ($retval != '') | |
439 | $retval .= ','; | |
440 | $retval .= $array[$name]; | |
441 | } | |
442 | } | |
443 | ||
444 | return $retval; | |
445 | } | |
446 | ||
447 | // fetch all the parts of an "enum_multi" into a string suitable | |
448 | // for writing to the eeprom data file | |
449 | function gather_enum_multi_write($base, $cnt, $vals, $xfrm = array()) { | |
450 | ||
451 | $retval = ''; | |
452 | ||
453 | for ($i = 0; $i < $cnt; $i++) { | |
454 | ||
455 | $name = sprintf("%s%x", $base, $i); | |
456 | ||
457 | if ($GLOBALS[$name] != '') { | |
458 | if ($retval != '') | |
459 | $retval .= ','; | |
460 | $index = enum_to_index($name, $vals); | |
461 | if ($xfrm != array()) | |
462 | $retval .= $xfrm[$index]; | |
463 | else | |
464 | $retval .= $index; | |
465 | } | |
466 | } | |
467 | ||
468 | return $retval; | |
469 | } | |
470 | ||
471 | // count how many parts of an "enum_multi" are actually set | |
472 | function count_enum_multi($base, $cnt) { | |
473 | ||
474 | $retval = 0; | |
475 | ||
476 | for ($i = 0; $i < $cnt; $i++) { | |
477 | ||
478 | $name = sprintf("%s%x", $base, $i); | |
479 | ||
d992daf9 | 480 | if (isset($_REQUEST[$name])) |
fe8c2806 WD |
481 | $retval++; |
482 | } | |
483 | ||
484 | return $retval; | |
485 | } | |
486 | ||
487 | // ethernet address functions | |
488 | ||
489 | // generate a (possibly not unique) random vendor ethernet address | |
490 | // (setting bit 6 in the ethernet address - motorola wise i.e. bit 0 | |
491 | // is the most significant bit - means it is not an assigned ethernet | |
6dd652fa WD |
492 | // address - it is a "locally administered" address). Also, make sure |
493 | // it is NOT a multicast ethernet address (by setting bit 7 to 0). | |
494 | // e.g. the first byte of all ethernet addresses generated here will | |
495 | // have 2 in the bottom two bits (incidentally, these are the first | |
496 | // two bits transmitted on the wire, since the octets in ethernet | |
497 | // addresses are transmitted LSB first). | |
498 | ||
fe8c2806 WD |
499 | function gen_eth_addr($serno) { |
500 | ||
d992daf9 WD |
501 | $ethaddr_hgh = (mt_rand(0, 65535) & 0xfeff) | 0x0200; |
502 | $ethaddr_mid = mt_rand(0, 65535); | |
503 | $ethaddr_low = mt_rand(0, 65535); | |
fe8c2806 WD |
504 | |
505 | return sprintf("%02lx:%02lx:%02lx:%02lx:%02lx:%02lx", | |
d992daf9 WD |
506 | $ethaddr_hgh >> 8, $ethaddr_hgh & 0xff, |
507 | $ethaddr_mid >> 8, $ethaddr_mid & 0xff, | |
508 | $ethaddr_low >> 8, $ethaddr_low & 0xff); | |
fe8c2806 WD |
509 | } |
510 | ||
511 | // check that an ethernet address is valid | |
512 | function eth_addr_is_valid($ethaddr) { | |
513 | ||
514 | $ethbytes = split(':', $ethaddr); | |
515 | ||
516 | if (count($ethbytes) != 6) | |
517 | return FALSE; | |
518 | ||
519 | for ($i = 0; $i < 6; $i++) { | |
520 | $ethbyte = $ethbytes[$i]; | |
521 | if (!ereg('^[0-9a-f][0-9a-f]$', $ethbyte)) | |
522 | return FALSE; | |
523 | } | |
524 | ||
525 | return TRUE; | |
526 | } | |
527 | ||
528 | // write a simple eeprom configuration file | |
529 | function write_eeprom_cfg_file() { | |
530 | ||
531 | global $sernos, $nsernos, $bddb_cfgdir, $numerrs, $cfgerrs; | |
532 | global $date, $batch, $type_vals, $rev; | |
533 | global $sdram_vals, $sdram_nbits; | |
534 | global $flash_vals, $flash_nbits; | |
535 | global $zbt_vals, $zbt_nbits; | |
536 | global $xlxtyp_vals, $xlxspd_vals, $xlxtmp_vals, $xlxgrd_vals; | |
537 | global $cputyp, $cputyp_vals, $clk_vals; | |
538 | global $hstype, $hstype_vals, $hschin, $hschout; | |
539 | ||
540 | $numerrs = 0; | |
541 | $cfgerrs = array(); | |
542 | ||
543 | for ($i = 0; $i < $nsernos; $i++) { | |
544 | ||
545 | $serno = sprintf("%010d", $sernos[$i]); | |
546 | ||
547 | $wfp = @fopen($bddb_cfgdir . "/$serno.cfg", "w"); | |
548 | if (!$wfp) { | |
549 | $cfgerrs[$i] = 'file create fail'; | |
550 | $numerrs++; | |
551 | continue; | |
552 | } | |
553 | set_file_buffer($wfp, 0); | |
554 | ||
555 | if (!fprintf($wfp, "serno=%d\n", $sernos[$i])) { | |
556 | $cfgerrs[$i] = 'cfg wr fail (serno)'; | |
557 | fclose($wfp); | |
558 | $numerrs++; | |
559 | continue; | |
560 | } | |
561 | ||
562 | if (!fprintf($wfp, "date=%s\n", $date)) { | |
563 | $cfgerrs[$i] = 'cfg wr fail (date)'; | |
564 | fclose($wfp); | |
565 | $numerrs++; | |
566 | continue; | |
567 | } | |
568 | ||
569 | if ($batch != '') { | |
570 | if (!fprintf($wfp, "batch=%s\n", $batch)) { | |
571 | $cfgerrs[$i] = 'cfg wr fail (batch)'; | |
572 | fclose($wfp); | |
573 | $numerrs++; | |
574 | continue; | |
575 | } | |
576 | } | |
577 | ||
578 | $typei = enum_to_index("type", $type_vals); | |
579 | if (!fprintf($wfp, "type=%d\n", $typei)) { | |
580 | $cfgerrs[$i] = 'cfg wr fail (type)'; | |
581 | fclose($wfp); | |
582 | $numerrs++; | |
583 | continue; | |
584 | } | |
585 | ||
586 | if (!fprintf($wfp, "rev=%d\n", $rev)) { | |
587 | $cfgerrs[$i] = 'cfg wr fail (rev)'; | |
588 | fclose($wfp); | |
589 | $numerrs++; | |
590 | continue; | |
591 | } | |
592 | ||
593 | $s = gather_enum_multi_write("sdram", 4, | |
594 | $sdram_vals, $sdram_nbits); | |
595 | if ($s != '') { | |
596 | $b = fprintf($wfp, "sdram=%s\n", $s); | |
597 | if (!$b) { | |
598 | $cfgerrs[$i] = 'cfg wr fail (sdram)'; | |
599 | fclose($wfp); | |
600 | $numerrs++; | |
601 | continue; | |
602 | } | |
603 | } | |
604 | ||
605 | $s = gather_enum_multi_write("flash", 4, | |
606 | $flash_vals, $flash_nbits); | |
607 | if ($s != '') { | |
608 | $b = fprintf($wfp, "flash=%s\n", $s); | |
609 | if (!$b) { | |
610 | $cfgerrs[$i] = 'cfg wr fail (flash)'; | |
611 | fclose($wfp); | |
612 | $numerrs++; | |
613 | continue; | |
614 | } | |
615 | } | |
616 | ||
617 | $s = gather_enum_multi_write("zbt", 16, | |
618 | $zbt_vals, $zbt_nbits); | |
619 | if ($s != '') { | |
620 | $b = fprintf($wfp, "zbt=%s\n", $s); | |
621 | if (!$b) { | |
622 | $cfgerrs[$i] = 'cfg wr fail (zbt)'; | |
623 | fclose($wfp); | |
624 | $numerrs++; | |
625 | continue; | |
626 | } | |
627 | } | |
628 | ||
629 | $s = gather_enum_multi_write("xlxtyp", 4, $xlxtyp_vals); | |
630 | if ($s != '') { | |
631 | $b = fprintf($wfp, "xlxtyp=%s\n", $s); | |
632 | if (!$b) { | |
633 | $cfgerrs[$i] = 'cfg wr fail (xlxtyp)'; | |
634 | fclose($wfp); | |
635 | $numerrs++; | |
636 | continue; | |
637 | } | |
638 | } | |
639 | ||
640 | $s = gather_enum_multi_write("xlxspd", 4, $xlxspd_vals); | |
641 | if ($s != '') { | |
642 | $b = fprintf($wfp, "xlxspd=%s\n", $s); | |
643 | if (!$b) { | |
644 | $cfgerrs[$i] = 'cfg wr fail (xlxspd)'; | |
645 | fclose($wfp); | |
646 | $numerrs++; | |
647 | continue; | |
648 | } | |
649 | } | |
650 | ||
651 | $s = gather_enum_multi_write("xlxtmp", 4, $xlxtmp_vals); | |
652 | if ($s != '') { | |
653 | $b = fprintf($wfp, "xlxtmp=%s\n", $s); | |
654 | if (!$b) { | |
655 | $cfgerrs[$i] = 'cfg wr fail (xlxtmp)'; | |
656 | fclose($wfp); | |
657 | $numerrs++; | |
658 | continue; | |
659 | } | |
660 | } | |
661 | ||
662 | $s = gather_enum_multi_write("xlxgrd", 4, $xlxgrd_vals); | |
663 | if ($s != '') { | |
664 | $b = fprintf($wfp, "xlxgrd=%s\n", $s); | |
665 | if (!$b) { | |
666 | $cfgerrs[$i] = 'cfg wr fail (xlxgrd)'; | |
667 | fclose($wfp); | |
668 | $numerrs++; | |
669 | continue; | |
670 | } | |
671 | } | |
672 | ||
673 | if ($cputyp != '') { | |
674 | $cputypi = enum_to_index("cputyp",$cputyp_vals); | |
675 | $cpuspdi = enum_to_index("cpuspd", $clk_vals); | |
676 | $busspdi = enum_to_index("busspd", $clk_vals); | |
677 | $cpmspdi = enum_to_index("cpmspd", $clk_vals); | |
678 | $b = fprintf($wfp, "cputyp=%d\ncpuspd=%d\n" . | |
679 | "busspd=%d\ncpmspd=%d\n", | |
680 | $cputypi, $cpuspdi, $busspdi, $cpmspdi); | |
681 | if (!$b) { | |
682 | $cfgerrs[$i] = 'cfg wr fail (cputyp)'; | |
683 | fclose($wfp); | |
684 | $numerrs++; | |
685 | continue; | |
686 | } | |
687 | } | |
688 | ||
689 | if ($hstype != '') { | |
690 | $hstypei = enum_to_index("hstype",$hstype_vals); | |
691 | $b = fprintf($wfp, "hstype=%d\n" . | |
692 | "hschin=%s\nhschout=%s\n", | |
693 | $hstypei, $hschin, $hschout); | |
694 | if (!$b) { | |
695 | $cfgerrs[$i] = 'cfg wr fail (hstype)'; | |
696 | fclose($wfp); | |
697 | $numerrs++; | |
698 | continue; | |
699 | } | |
700 | } | |
701 | ||
702 | if (!fclose($wfp)) { | |
703 | $cfgerrs[$i] = 'file cls fail'; | |
704 | $numerrs++; | |
705 | } | |
706 | } | |
707 | ||
708 | return $numerrs; | |
709 | } | |
710 | ?> |