forked from Imagelibrary/rtems
@@ -1,168 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/*
|
||||
* RTEMS remote gdb over serial line
|
||||
*
|
||||
* This file declares intialization functions to add
|
||||
* a gdb remote debug stub to an RTEMS system.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SERDBG_H
|
||||
#define _SERDBG_H
|
||||
|
||||
#include <rtems.h>
|
||||
#include <termios.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint32_t baudrate; /* debug baud rate, e.g. 57600 */
|
||||
void (*callout)(void); /* callout pointer during polling */
|
||||
int (*open_io)(const char *dev_name, uint32_t baudrate); /* I/O open fnc */
|
||||
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||
bool skip_init_bkpt; /* if TRUE, do not stop when initializing */
|
||||
} serdbg_conf_t;
|
||||
|
||||
/*
|
||||
* must be defined in init module...
|
||||
*/
|
||||
extern serdbg_conf_t serdbg_conf;
|
||||
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void putDebugChar
|
||||
(
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| send character to remote debugger |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
char c /* char to send */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int getDebugChar
|
||||
(
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| get character from remote debugger |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void /* <none> */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void serdbg_exceptionHandler
|
||||
(
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| hook directly to an exception vector |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int vecnum, /* vector index to hook at */
|
||||
void *vector /* address of handler function */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int serdbg_init
|
||||
(
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| initialize remote gdb session over serial line |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| rtems_status_code |
|
||||
\*=========================================================================*/
|
||||
|
||||
/*
|
||||
* stuff from serdbgio.c
|
||||
*/
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int serdbg_open
|
||||
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| try to open given serial debug port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
const char *dev_name, /* name of device to open */
|
||||
uint32_t baudrate /* baud rate to use */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| 0 on success, -1 and errno otherwise |
|
||||
\*=========================================================================*/
|
||||
|
||||
|
||||
extern int serdbg_init_dbg(void);
|
||||
|
||||
/*
|
||||
* Assumed to be provided by the BSP
|
||||
*/
|
||||
extern void set_debug_traps(void);
|
||||
extern void breakpoint(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SERDBG_H */
|
||||
@@ -1,101 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief Adds a GDB remote Debug Stub to an RTEMS System
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SERDBGCNF_H
|
||||
#define _SERDBGCNF_H
|
||||
|
||||
#include <rtems/serdbg.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_INIT
|
||||
|
||||
/*
|
||||
* fallback for baud rate to use
|
||||
*/
|
||||
#ifndef CONFIGURE_SERDBG_BAUDRATE
|
||||
#define CONFIGURE_SERDBG_BAUDRATE 9600
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fallback for device name to use
|
||||
*/
|
||||
#ifndef CONFIGURE_SERDBG_DEVNAME
|
||||
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty01"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fill in serdbg_conf structure
|
||||
*/
|
||||
serdbg_conf_t serdbg_conf = {
|
||||
CONFIGURE_SERDBG_BAUDRATE,
|
||||
|
||||
#ifdef CONFIGURE_SERDBG_CALLOUT
|
||||
CONFIGURE_SERDBG_CALLOUT,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||
serdbg_open,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
|
||||
CONFIGURE_SERDBG_DEVNAME,
|
||||
|
||||
#ifdef CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||
true,
|
||||
#else
|
||||
false,
|
||||
#endif
|
||||
};
|
||||
|
||||
int serdbg_init(void) {
|
||||
#ifdef CONFIGURE_USE_SERDBG
|
||||
return serdbg_init_dbg();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* CONFIGURE_INIT */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SERDBGCNF_H */
|
||||
@@ -1,116 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/*
|
||||
* This file declares intialization functions to add
|
||||
* printk polled output via termios polled drivers.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _TERMIOS_PRINTK_H
|
||||
#define _TERMIOS_PRINTK_H
|
||||
|
||||
#include <rtems.h>
|
||||
#include <termios.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint32_t baudrate; /* debug baud rate, e.g. 57600 */
|
||||
void (*callout)(void); /* callout pointer during polling */
|
||||
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||
} termios_printk_conf_t;
|
||||
|
||||
/*
|
||||
* must be defined in init module...
|
||||
*/
|
||||
extern termios_printk_conf_t termios_printk_conf;
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void termios_printk_outputchar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| send one character to serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
char c /* character to print */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int termios_printk_inputchar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| wait for one character from serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
void /* none */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| received character |
|
||||
\*=========================================================================*/
|
||||
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int termios_printk_open
|
||||
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| try to open given serial debug port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
const char *dev_name, /* name of device to open */
|
||||
uint32_t baudrate /* baud rate to use */
|
||||
);
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| 0 on success, -1 and errno otherwise |
|
||||
\*=========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _TERMIOS_PRINTK_H */
|
||||
@@ -1,91 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief Adds printk Support via Polled termios
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _TERMIOS_PRINTK_CNF_H
|
||||
#define _TERMIOS_PRINTK_CNF_H
|
||||
|
||||
#include <rtems/termios_printk.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_INIT
|
||||
|
||||
/*
|
||||
* fallback for baud rate to use
|
||||
*/
|
||||
#ifndef CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fallback for device name to use
|
||||
*/
|
||||
#ifndef CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||
/*
|
||||
* fill in termios_printk_conf structure
|
||||
*/
|
||||
termios_printk_conf_t termios_printk_conf = {
|
||||
CONFIGURE_TERMIOS_PRINTK_BAUDRATE,
|
||||
|
||||
#ifdef CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||
CONFIGURE_TERMIOS_PRINTK_CALLOUT,
|
||||
#else
|
||||
NULL,
|
||||
#endif
|
||||
CONFIGURE_TERMIOS_PRINTK_DEVNAME,
|
||||
};
|
||||
#endif
|
||||
|
||||
int termios_printk_init(void) {
|
||||
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||
return termios_printk_open(termios_printk_conf.devname,
|
||||
termios_printk_conf.baudrate);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* CONFIGURE_INIT */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _TERMIOS_PRINTK_CNF_H */
|
||||
@@ -1,134 +0,0 @@
|
||||
This directory contains three useful packages related to the termios I/O
|
||||
system:
|
||||
|
||||
PACKAGE SERDBGIO
|
||||
================
|
||||
"serdbgio" provides the "serial gdb" standard I/O functions "getDebugChar"
|
||||
and "putDebugChar" for any device driver supporting polled termios mode.
|
||||
|
||||
The initialization function "serdbg_open" opens the v.24 port intended
|
||||
for the serial debug connection, and sets the desired baud rate. The
|
||||
"getDebugChar" and "putDebugChar" functions then interact with the
|
||||
corresponding driver using the calls intended for polled termios
|
||||
operation.
|
||||
|
||||
Specification for the debug device, baud rate and other parameters is
|
||||
done in a global structure of type "serdbg_conf_t". A configuration
|
||||
mechanism quite similar to the overall RTEMS configuration is available.
|
||||
|
||||
PACKAGE SERDBG
|
||||
==============
|
||||
"serdbg" provides a means to optionally initialize and/or start a
|
||||
serial gdb session as soon as possible, this means as soon as all
|
||||
drivers have been initialized. The serial debug I/O functions can
|
||||
either be integrated as special routines of the BSP drivers, or using
|
||||
the package "serdbgio"
|
||||
|
||||
PACKAGE TERMIOS_PRINTK
|
||||
======================
|
||||
"termios_printk" provides a standard output function suitable to use
|
||||
with "printk". It uses the same technique as serdbgio, hooking the
|
||||
interface between a polled device driver and the termios system.
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
============
|
||||
|
||||
- These two packages can be used with any polled termios device
|
||||
driver.
|
||||
- For standard initialization, they need a modified "bsppost.c"
|
||||
to perform the initialization calls.
|
||||
|
||||
USAGE
|
||||
=====
|
||||
|
||||
For using these packages add the following to your "init" module or
|
||||
your "system.h" file (Note: most macro settings fall back to a
|
||||
default, if not set.):
|
||||
|
||||
/*
|
||||
* CONFIGURE_USE_SERDBG
|
||||
* set this macro, if you want to connect gdb over a serial line
|
||||
* when set, the debug stub will be connected after driver
|
||||
* initialization in "bsppost.c"
|
||||
*/
|
||||
#define CONFIGURE_USE_SERDBG
|
||||
|
||||
|
||||
/*
|
||||
* CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||
* set this macro, if you do not want the gdb interface to wait for a
|
||||
* debugger connection directly after initialization
|
||||
* If you set this macro, the gdb stub will only hook various
|
||||
* exception vectors when called from "bsppost.c".
|
||||
*/
|
||||
/* #define CONFIGURE_SERDBG_SKIP_INIT_BKPT */
|
||||
|
||||
/*
|
||||
* CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||
* set this macro, if you want "serdbgio" to provide the I/O
|
||||
* functions for the serial gdb connection
|
||||
*/
|
||||
#define CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||
|
||||
/*
|
||||
* CONFIGURE_SERDBG_DEVNAME
|
||||
* use this macro to specify the serial device to use
|
||||
* for "serdbgio".
|
||||
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||
*/
|
||||
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty03"
|
||||
|
||||
/*
|
||||
* CONFIGURE_SERDBG_BAUDRATE
|
||||
* use this macro to specify the baud rate to use
|
||||
* for "serdbgio".
|
||||
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||
*/
|
||||
#define CONFIGURE_SERDBG_BAUDRATE 57600
|
||||
|
||||
/*
|
||||
* CONFIGURE_SERDBG_CALLOUT
|
||||
* use this macro to specify a routine that will called during I/O polling
|
||||
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||
* tickling a watchdog
|
||||
*/
|
||||
/* #define CONFIGURE_SERDBG_CALLOUT tickle_my_watchdog_fnc */
|
||||
|
||||
#include <serdbgcnf.h>
|
||||
|
||||
/*
|
||||
* CONFIGURE_USE_TERMIOS_PRINTK
|
||||
* set this macro, if you want printk output to be sent to a serial
|
||||
* driver using the polled termios interface
|
||||
* when set, the printk output function will be connected after driver
|
||||
* initialization in "bsppost.c"
|
||||
*/
|
||||
#define CONFIGURE_USE_TERMIOS_PRINTK
|
||||
|
||||
/*
|
||||
* CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||
* use this macro to specify the serial device to use
|
||||
* for printk output.
|
||||
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||
*/
|
||||
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||
|
||||
/*
|
||||
* CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||
* use this macro to specify the baudrate to use
|
||||
* for printk output.
|
||||
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||
*/
|
||||
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||
|
||||
/*
|
||||
* CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||
* use this macro to specify a routine that will called during I/O polling
|
||||
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||
* tickling a watchdog
|
||||
*/
|
||||
/* #define CONFIGURE_TERMIOS_PRINTK_CALLOUT tickle_my_watchdog_fnc */
|
||||
|
||||
#include <termios_printk_cnf.h>
|
||||
@@ -1,105 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/*
|
||||
* RTEMS remote gdb over serial line
|
||||
*
|
||||
* This file contains intialization and utility functions to add
|
||||
* a gdb remote debug stub to an RTEMS system.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <rtems/serdbg.h>
|
||||
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int serdbg_init_dbg
|
||||
(
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| initialize remote gdb session over serial line |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| rtems_status_code |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
static bool is_initialized = false;
|
||||
|
||||
rtems_status_code rc = RTEMS_SUCCESSFUL;
|
||||
|
||||
if (is_initialized) {
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
is_initialized = true;
|
||||
/*
|
||||
* try to open serial device
|
||||
*/
|
||||
if (rc == RTEMS_SUCCESSFUL) {
|
||||
if ((serdbg_conf.open_io != NULL) &&
|
||||
(0 > serdbg_conf.open_io(serdbg_conf.devname,serdbg_conf.baudrate))) {
|
||||
fprintf(stderr,
|
||||
"remote_gdb_init: cannot open device %s "
|
||||
"for gdb connection:%s\n",serdbg_conf.devname,strerror(errno));
|
||||
rc = RTEMS_IO_ERROR;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* initialize gdb stub
|
||||
*/
|
||||
if (rc == RTEMS_SUCCESSFUL) {
|
||||
set_debug_traps();
|
||||
}
|
||||
/*
|
||||
* now activate gdb stub
|
||||
*/
|
||||
if ((rc == RTEMS_SUCCESSFUL) &&
|
||||
!serdbg_conf.skip_init_bkpt) {
|
||||
breakpoint();
|
||||
}
|
||||
|
||||
/*
|
||||
* return to original function
|
||||
* this may be already unter gdb control
|
||||
*/
|
||||
return rc;
|
||||
}
|
||||
@@ -1,264 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/*
|
||||
* TERMIOS serial gdb interface support
|
||||
* the functions in this file allow the standard gdb stubs like
|
||||
* "m68k-stub.c" to access any serial interfaces that work with
|
||||
* RTEMS termios in polled mode
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio_.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h> /* close */
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <rtems/termiostypes.h>
|
||||
#include <rtems/serdbg.h>
|
||||
|
||||
|
||||
/*
|
||||
* internal variables
|
||||
*/
|
||||
int serdbg_fd = -1;
|
||||
struct rtems_termios_tty *serdbg_tty;
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int serdbg_open
|
||||
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| try to open given serial debug port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
const char *dev_name, /* name of device to open */
|
||||
uint32_t baudrate /* baud rate to use */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| 0 on success, -1 and errno otherwise |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
bool err_occurred = false;
|
||||
rtems_libio_t *iop = NULL;
|
||||
struct termios act_termios;
|
||||
tcflag_t baudcode = B0;
|
||||
|
||||
#define FD_STORE_CNT 3
|
||||
int fd_store[FD_STORE_CNT];
|
||||
int fd_store_used = 0;
|
||||
|
||||
/*
|
||||
* translate baudrate into baud code
|
||||
*/
|
||||
switch(baudrate) {
|
||||
case 50: baudcode = B50; break;
|
||||
case 75: baudcode = B75; break;
|
||||
case 110: baudcode = B110; break;
|
||||
case 134: baudcode = B134; break;
|
||||
case 150: baudcode = B150; break;
|
||||
case 200: baudcode = B200; break;
|
||||
case 300: baudcode = B300; break;
|
||||
case 600: baudcode = B600; break;
|
||||
case 1200: baudcode = B1200; break;
|
||||
case 1800: baudcode = B1800; break;
|
||||
case 2400: baudcode = B2400; break;
|
||||
case 4800: baudcode = B4800; break;
|
||||
case 9600: baudcode = B9600; break;
|
||||
case 19200: baudcode = B19200; break;
|
||||
case 38400: baudcode = B38400; break;
|
||||
case 57600: baudcode = B57600; break;
|
||||
case 115200: baudcode = B115200; break;
|
||||
case 230400: baudcode = B230400; break;
|
||||
case 460800: baudcode = B460800; break;
|
||||
default : err_occurred = true; errno = EINVAL; break;
|
||||
}
|
||||
|
||||
/*
|
||||
* open device for serdbg operation
|
||||
* skip any fds that are between 0..2, because they are
|
||||
* reserved for stdin/out/err
|
||||
*/
|
||||
if (!err_occurred &&
|
||||
(dev_name != NULL) &&
|
||||
(dev_name[0] != '\0')) {
|
||||
do {
|
||||
serdbg_fd = open(dev_name,O_RDWR);
|
||||
if (serdbg_fd < 0) {
|
||||
err_occurred = true;
|
||||
}
|
||||
else {
|
||||
if (serdbg_fd < 3) {
|
||||
if (fd_store_used >= FD_STORE_CNT) {
|
||||
err_occurred = true;
|
||||
}
|
||||
else {
|
||||
fd_store[fd_store_used++] = serdbg_fd;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (!err_occurred &&
|
||||
(serdbg_fd < 3));
|
||||
}
|
||||
/*
|
||||
* close any fds, that have been placed in fd_store
|
||||
* so fd 0..2 are reusable again
|
||||
*/
|
||||
while (--fd_store_used >= 0) {
|
||||
close(fd_store[fd_store_used]);
|
||||
}
|
||||
|
||||
/*
|
||||
* capture tty structure
|
||||
*/
|
||||
if (!err_occurred) {
|
||||
iop = rtems_libio_iop(serdbg_fd);
|
||||
serdbg_tty = iop->data1;
|
||||
}
|
||||
/*
|
||||
* set device baudrate
|
||||
* (and transp mode, this is not really needed)
|
||||
* ...
|
||||
*/
|
||||
/*
|
||||
* ... get fd settings
|
||||
*/
|
||||
if (!err_occurred &&
|
||||
(0 != tcgetattr(serdbg_fd,&act_termios))) {
|
||||
err_occurred = true;
|
||||
}
|
||||
if (!err_occurred) {
|
||||
act_termios.c_iflag
|
||||
&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
||||
|INLCR|IGNCR|ICRNL|IXON);
|
||||
act_termios.c_oflag
|
||||
&= ~OPOST;
|
||||
|
||||
act_termios.c_lflag
|
||||
&= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
||||
|
||||
cfsetospeed(&act_termios,baudcode);
|
||||
cfsetispeed(&act_termios,baudcode);
|
||||
|
||||
if (0 != tcsetattr(serdbg_fd,TCSANOW,&act_termios)) {
|
||||
err_occurred = true;
|
||||
}
|
||||
}
|
||||
return (err_occurred
|
||||
? -1
|
||||
: 0);
|
||||
}
|
||||
|
||||
void putDebugChar(char c) __attribute__ ((__weak__));
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void putDebugChar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| send one character to serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
char c /* character to print */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
/*
|
||||
* call serdbg polling callout, if available
|
||||
*/
|
||||
if (serdbg_conf.callout != NULL) {
|
||||
serdbg_conf.callout();
|
||||
}
|
||||
/*
|
||||
* check, whether debug serial port is available
|
||||
*/
|
||||
if ((serdbg_tty != NULL) &&
|
||||
(serdbg_tty->device.write != NULL)) {
|
||||
/*
|
||||
* send character to debug serial port
|
||||
*/
|
||||
serdbg_tty->device.write(serdbg_tty->minor,&c,1);
|
||||
}
|
||||
}
|
||||
|
||||
int getDebugChar(void) __attribute__ ((__weak__));
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int getDebugChar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| wait for one character from serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
void /* none */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| received character |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
int c = -1;
|
||||
/*
|
||||
* check, whether debug serial port is available
|
||||
*/
|
||||
if ((serdbg_tty != NULL) &&
|
||||
(serdbg_tty->device.pollRead != NULL)) {
|
||||
do {
|
||||
/*
|
||||
* call serdbg polling callout, if available
|
||||
*/
|
||||
if (serdbg_conf.callout != NULL) {
|
||||
serdbg_conf.callout();
|
||||
}
|
||||
/*
|
||||
* get character from debug serial port
|
||||
*/
|
||||
c = serdbg_tty->device.pollRead(serdbg_tty->minor);
|
||||
} while (c < 0);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
@@ -1,245 +0,0 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/*
|
||||
* TERMIOS printk support
|
||||
* this module performs low-level printk output using
|
||||
* a polled termios driver
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 IMD Ingenieurbuero fuer Microcomputertechnik
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/libio_.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
|
||||
#include <rtems/termiostypes.h>
|
||||
#include <rtems/bspIo.h>
|
||||
#include <rtems/termios_printk.h>
|
||||
|
||||
/*
|
||||
* internal variables
|
||||
*/
|
||||
int termios_printk_fd = -1;
|
||||
struct rtems_termios_tty *termios_printk_tty;
|
||||
|
||||
static void _termios_printk_null_char(
|
||||
char c RTEMS_UNUSED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BSP_output_char_function_type BSP_output_char = _termios_printk_null_char;
|
||||
BSP_polling_getchar_function_type BSP_poll_char;
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
void termios_printk_outputchar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| send one character to serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
char c /* character to print */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| <none> |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
/*
|
||||
* check, whether printk serial port is available
|
||||
*/
|
||||
|
||||
if ((termios_printk_tty != NULL) &&
|
||||
(termios_printk_tty->device.write != NULL)) {
|
||||
/*
|
||||
* call termios_printk polling callout, if available
|
||||
*/
|
||||
if (termios_printk_conf.callout != NULL) {
|
||||
termios_printk_conf.callout();
|
||||
}
|
||||
/*
|
||||
* send character to debug serial port
|
||||
*/
|
||||
termios_printk_tty->device.write(termios_printk_tty->minor,&c,1);
|
||||
}
|
||||
}
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int termios_printk_inputchar
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| wait for one character from serial port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
void /* none */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| received character |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
int c = -1;
|
||||
/*
|
||||
* check, whether debug serial port is available
|
||||
*/
|
||||
if ((termios_printk_tty != NULL) &&
|
||||
(termios_printk_tty->device.pollRead != NULL)) {
|
||||
do {
|
||||
/*
|
||||
* call termios_printk polling callout, if available
|
||||
*/
|
||||
if (termios_printk_conf.callout != NULL) {
|
||||
termios_printk_conf.callout();
|
||||
}
|
||||
/*
|
||||
* get character from debug serial port
|
||||
*/
|
||||
c = termios_printk_tty->device.pollRead(termios_printk_tty->minor);
|
||||
} while (c < 0);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
/*=========================================================================*\
|
||||
| Function: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
int termios_printk_open
|
||||
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Purpose: |
|
||||
| try to open given serial debug port |
|
||||
+---------------------------------------------------------------------------+
|
||||
| Input Parameters: |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
(
|
||||
const char *dev_name, /* name of device to open */
|
||||
uint32_t baudrate /* baud rate to use */
|
||||
)
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| Return Value: |
|
||||
| 0 on success, -1 and errno otherwise |
|
||||
\*=========================================================================*/
|
||||
{
|
||||
bool err_occurred = false;
|
||||
rtems_libio_t *iop = NULL;
|
||||
struct termios act_termios;
|
||||
tcflag_t baudcode = B0;
|
||||
|
||||
if (termios_printk_fd >= 0) {
|
||||
/*
|
||||
* already initialized
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* translate baudrate into baud code
|
||||
*/
|
||||
switch(baudrate) {
|
||||
case 50: baudcode = B50; break;
|
||||
case 75: baudcode = B75; break;
|
||||
case 110: baudcode = B110; break;
|
||||
case 134: baudcode = B134; break;
|
||||
case 150: baudcode = B150; break;
|
||||
case 200: baudcode = B200; break;
|
||||
case 300: baudcode = B300; break;
|
||||
case 600: baudcode = B600; break;
|
||||
case 1200: baudcode = B1200; break;
|
||||
case 1800: baudcode = B1800; break;
|
||||
case 2400: baudcode = B2400; break;
|
||||
case 4800: baudcode = B4800; break;
|
||||
case 9600: baudcode = B9600; break;
|
||||
case 19200: baudcode = B19200; break;
|
||||
case 38400: baudcode = B38400; break;
|
||||
case 57600: baudcode = B57600; break;
|
||||
case 115200: baudcode = B115200; break;
|
||||
case 230400: baudcode = B230400; break;
|
||||
case 460800: baudcode = B460800; break;
|
||||
default : err_occurred = true; errno = EINVAL; break;
|
||||
}
|
||||
/*
|
||||
* open device for serdbg operation
|
||||
*/
|
||||
if (!err_occurred &&
|
||||
(dev_name != NULL) &&
|
||||
(dev_name[0] != '\0')) {
|
||||
termios_printk_fd = open(dev_name,O_RDWR);
|
||||
if (termios_printk_fd < 0) {
|
||||
err_occurred = true;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* capture tty structure
|
||||
*/
|
||||
if (!err_occurred) {
|
||||
iop = rtems_libio_iop(termios_printk_fd);
|
||||
termios_printk_tty = iop->data1;
|
||||
}
|
||||
/*
|
||||
* set device baudrate
|
||||
* (and transp mode, this is not really needed)
|
||||
* ...
|
||||
*/
|
||||
/*
|
||||
* ... get fd settings
|
||||
*/
|
||||
if (!err_occurred &&
|
||||
(0 != tcgetattr(termios_printk_fd,&act_termios))) {
|
||||
err_occurred = true;
|
||||
}
|
||||
if (!err_occurred) {
|
||||
|
||||
cfsetospeed(&act_termios,baudcode);
|
||||
cfsetispeed(&act_termios,baudcode);
|
||||
|
||||
if (0 != tcsetattr(termios_printk_fd,TCSANOW,&act_termios)) {
|
||||
err_occurred = true;
|
||||
}
|
||||
}
|
||||
if (!err_occurred) {
|
||||
BSP_output_char = termios_printk_outputchar;
|
||||
BSP_poll_char = termios_printk_inputchar;
|
||||
}
|
||||
return (err_occurred
|
||||
? -1
|
||||
: 0);
|
||||
}
|
||||
@@ -165,8 +165,6 @@ install:
|
||||
- cpukit/include/rtems/rtems-rfs.h
|
||||
- cpukit/include/rtems/rtemsdialer.h
|
||||
- cpukit/include/rtems/scheduler.h
|
||||
- cpukit/include/rtems/serdbg.h
|
||||
- cpukit/include/rtems/serdbgcnf.h
|
||||
- cpukit/include/rtems/serial_mouse.h
|
||||
- cpukit/include/rtems/seterr.h
|
||||
- cpukit/include/rtems/shell.h
|
||||
@@ -178,8 +176,6 @@ install:
|
||||
- cpukit/include/rtems/stdio-redirect.h
|
||||
- cpukit/include/rtems/stringto.h
|
||||
- cpukit/include/rtems/sysinit.h
|
||||
- cpukit/include/rtems/termios_printk.h
|
||||
- cpukit/include/rtems/termios_printk_cnf.h
|
||||
- cpukit/include/rtems/termiostypes.h
|
||||
- cpukit/include/rtems/thread.h
|
||||
- cpukit/include/rtems/timecounter.h
|
||||
|
||||
Reference in New Issue
Block a user