# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
# Foundation, Inc.
#
# This file is part of DejaGnu.
#
# DejaGnu is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# DejaGnu is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with DejaGnu; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

load_generic_config "gdb-comm"

proc ${board}_init { args } {
    set linux_box [target_info linux_box]
    set bozo_server [target_info bozo_server]
    remote_spawn $linux_box "$bozo_server unknown"
    remote_expect $linux_box 60 {
	-re "port is (\[0-9\]+)" {
	    set_currtarget_info netport "${linux_box}:$expect_out(1,string)"
	}
    }
}

proc ${board}_close { board } {
    set linux_box [board_info $board linux_box]
    if [board_info $linux_box exists fileid] {
	remote_send $linux_box "\003"
	remote_close $linux_box
    }
    standard_close $board
}

proc ${board}_reboot { board args } {
    remote_close $board
    unset_currtarget_info netport
    return 1
}
