OpenULINK firmware: Use C99 designated struct initializers
[openocd.git] / tcl / mmr_helpers.tcl
blobce116e4598fb5cc1c33b5552849faa6ca75c0cf9
2 proc proc_exists { NAME } {
3 set n [info commands $NAME]
4 set l [string length $n]
5 return [expr $l != 0]
8 # Give: REGISTER name - must be a global variable.
9 proc show_mmr32_reg { NAME } {
11 global $NAME
12 # we want $($NAME)
13 set a [set [set NAME]]
15 if ![catch { set v [memread32 $a] } msg ] {
16 echo [format "%15s: (0x%08x): 0x%08x" $NAME $a $v]
18 # Was a helper defined?
19 set fn show_${NAME}_helper
20 if [ proc_exists $fn ] {
21 # Then call it
22 $fn $NAME $a $v
24 return $v;
25 } else {
26 error [format "%s (%s)" $msg $NAME ]
31 # Give: NAMES - an array of names accessable
32 # in the callers symbol-scope.
33 # VAL - the bits to display.
35 proc show_mmr32_bits { NAMES VAL } {
37 upvar $NAMES MYNAMES
39 set w 5
40 foreach {IDX N} $MYNAMES {
41 set l [string length $N]
42 if { $l > $w } { set w $l }
45 for { set x 24 } { $x >= 0 } { incr x -8 } {
46 echo -n " "
47 for { set y 7 } { $y >= 0 } { incr y -1 } {
48 set s $MYNAMES([expr $x + $y])
49 echo -n [format "%2d: %-*s | " [expr $x + $y] $w $s ]
51 echo ""
53 echo -n " "
54 for { set y 7 } { $y >= 0 } { incr y -1 } {
55 echo -n [format " %d%*s | " [expr !!($VAL & (1 << ($x + $y)))] [expr $w -1] ""]
57 echo ""
62 proc show_mmr_bitfield { MSB LSB VAL FIELDNAME FIELDVALUES } {
63 set width [expr (($MSB - $LSB + 1) + 7) / 4]
64 set nval [show_normalize_bitfield $VAL $MSB $LSB ]
65 set name0 [lindex $FIELDVALUES 0 ]
66 if [ string compare $name0 _NUMBER_ ] {
67 set sval [lindex $FIELDVALUES $nval]
68 } else {
69 set sval ""
71 echo [format "%-15s: %d (0x%0*x) %s" $FIELDNAME $nval $width $nval $sval ]