+# Target/chain configuration scripts can either execute commands directly
+# or define a procedure which is executed once all configuration
+# scripts have completed.
+#
+# By default(classic) the config scripts will set up the target configuration
+proc init_targets {} {
+}
+
+proc set_default_target_event {t e s} {
+ if {[$t cget -event $e] == ""} {
+ $t configure -event $e $s
+ }
+}
+
+proc init_target_events {} {
+ set targets [target names]
+
+ foreach t $targets {
+ set_default_target_event $t gdb-flash-erase-start "reset init"
+ set_default_target_event $t gdb-flash-write-end "reset halt"
+ set_default_target_event $t gdb-attach "halt 1000"
+ }
+}
+
+# Additionally board config scripts can define a procedure init_board that will be executed after init and init_targets
+proc init_board {} {
+}
+
+lappend _telnet_autocomplete_skip _post_init_target_array_mem
+proc _post_init_target_array_mem {} {
+ set targets [target names]
+ lappend targets ""
+
+ foreach t $targets {
+ if {$t != ""} {
+ set t "$t "
+ }
+ eval [format {lappend ::_telnet_autocomplete_skip "%smem2array"} $t]
+ eval [format {proc {%smem2array} {arrayname bitwidth address count {phys ""}} {
+ echo "DEPRECATED! use 'read_memory' not 'mem2array'"
+
+ upvar $arrayname $arrayname
+ set $arrayname ""
+ set i 0
+
+ foreach elem [%sread_memory $address $bitwidth $count {*}$phys] {
+ set ${arrayname}($i) $elem
+ incr i
+ }
+ }} $t $t]
+ eval [format {lappend ::_telnet_autocomplete_skip "%sarray2mem"} $t]
+ eval [format {proc {%sarray2mem} {arrayname bitwidth address count {phys ""}} {
+ echo "DEPRECATED! use 'write_memory' not 'array2mem'"
+
+ upvar $arrayname $arrayname
+ set data ""
+
+ for {set i 0} {$i < $count} {incr i} {
+ lappend data [expr $${arrayname}($i)]
+ }
+
+ %swrite_memory $address $bitwidth $data {*}$phys
+ }} $t $t]
+ }
+}
+lappend post_init_commands _post_init_target_array_mem
+
+# smp_on/smp_off were already DEPRECATED in v0.11.0 through http://openocd.zylin.com/4615
+lappend _telnet_autocomplete_skip "aarch64 smp_on"
+proc "aarch64 smp_on" {args} {
+ echo "DEPRECATED! use 'aarch64 smp on' not 'aarch64 smp_on'"
+ eval aarch64 smp on $args
+}
+
+lappend _telnet_autocomplete_skip "aarch64 smp_off"
+proc "aarch64 smp_off" {args} {
+ echo "DEPRECATED! use 'aarch64 smp off' not 'aarch64 smp_off'"
+ eval aarch64 smp off $args
+}
+
+lappend _telnet_autocomplete_skip "cortex_a smp_on"
+proc "cortex_a smp_on" {args} {
+ echo "DEPRECATED! use 'cortex_a smp on' not 'cortex_a smp_on'"
+ eval cortex_a smp on $args
+}
+
+lappend _telnet_autocomplete_skip "cortex_a smp_off"
+proc "cortex_a smp_off" {args} {
+ echo "DEPRECATED! use 'cortex_a smp off' not 'cortex_a smp_off'"
+ eval cortex_a smp off $args
+}
+
+lappend _telnet_autocomplete_skip "mips_m4k smp_on"
+proc "mips_m4k smp_on" {args} {
+ echo "DEPRECATED! use 'mips_m4k smp on' not 'mips_m4k smp_on'"
+ eval mips_m4k smp on $args
+}
+
+lappend _telnet_autocomplete_skip "mips_m4k smp_off"
+proc "mips_m4k smp_off" {args} {
+ echo "DEPRECATED! use 'mips_m4k smp off' not 'mips_m4k smp_off'"
+ eval mips_m4k smp off $args
+}
+
+lappend _telnet_autocomplete_skip _post_init_target_cortex_a_cache_auto
+proc _post_init_target_cortex_a_cache_auto {} {
+ set cortex_a_found 0
+
+ foreach t [target names] {
+ if { [$t cget -type] != "cortex_a" } { continue }
+ set cortex_a_found 1
+ lappend ::_telnet_autocomplete_skip "$t cache auto"
+ proc "$t cache auto" { enable } {
+ echo "DEPRECATED! Don't use anymore '[dict get [info frame 0] proc] $enable' as it's always enabled"
+ }
+ }
+
+ if { $cortex_a_found } {
+ lappend ::_telnet_autocomplete_skip "cache auto"
+ proc "cache auto" { enable } {
+ echo "DEPRECATED! Don't use anymore 'cache auto $enable' as it's always enabled"
+ }
+ }