forked from Imagelibrary/rtems
2011-10-18 Jennifer Averett <Jennifer.Averett@OARcorp.com>
PR 1917/bsps * console.c: Modifications to add dynamic tables for libchip serial drivers. * console_control.c, console_private.h, console_read.c, console_select.c, console_write.c: New files.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2011-10-18 Jennifer Averett <Jennifer.Averett@OARcorp.com>
|
||||||
|
|
||||||
|
PR 1917/bsps
|
||||||
|
* console.c: Modifications to add dynamic tables for libchip serial
|
||||||
|
drivers.
|
||||||
|
* console_control.c, console_private.h, console_read.c,
|
||||||
|
console_select.c, console_write.c: New files.
|
||||||
|
|
||||||
2011-08-30 Joel Sherrill <joel.sherrill@oarcorp.com>
|
2011-08-30 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
* bootcard.c: Revert patch and add comment clarifying code and need for
|
* bootcard.c: Revert patch and add comment clarifying code and need for
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Extension of the generic libchip console driver shell
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file contains the generic console driver shell used
|
* COPYRIGHT (c) 1989-2011.
|
||||||
* by all console drivers using libchip.
|
|
||||||
*
|
|
||||||
* This driver uses the termios pseudo driver.
|
|
||||||
*
|
|
||||||
* COPYRIGHT (c) 1989-1997.
|
|
||||||
* On-Line Applications Research Corporation (OAR).
|
* On-Line Applications Research Corporation (OAR).
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* The license and distribution terms for this file may be
|
||||||
@@ -16,30 +19,101 @@
|
|||||||
|
|
||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
#include <rtems/libio.h>
|
#include <rtems/libio.h>
|
||||||
#include <rtems/console.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
|
|
||||||
#include <rtems/termiostypes.h>
|
#include <rtems/termiostypes.h>
|
||||||
#include <libchip/serial.h>
|
#include <libchip/serial.h>
|
||||||
|
#include "console_private.h"
|
||||||
|
|
||||||
|
unsigned long Console_Port_Count = 0;
|
||||||
|
console_tbl **Console_Port_Tbl = NULL;
|
||||||
|
console_data *Console_Port_Data = NULL;
|
||||||
|
rtems_device_minor_number Console_Port_Minor = 0;
|
||||||
|
bool console_initialized = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configuration Information
|
* console_initialize_pointers
|
||||||
|
*
|
||||||
|
* This method is used to initialize the table of pointers to the
|
||||||
|
* serial port configuration structure entries.
|
||||||
|
*/
|
||||||
|
static void console_initialize_pointers(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if ( Console_Port_Tbl )
|
||||||
|
return;
|
||||||
|
|
||||||
|
Console_Port_Count = Console_Configuration_Count;
|
||||||
|
Console_Port_Tbl = malloc( Console_Port_Count * sizeof( console_tbl * ) );
|
||||||
|
if (Console_Port_Tbl == NULL)
|
||||||
|
rtems_panic("No memory for console pointers");
|
||||||
|
|
||||||
|
for (i=0 ; i < Console_Port_Count ; i++)
|
||||||
|
Console_Port_Tbl[i] = &Console_Configuration_Ports[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_register_devices
|
||||||
|
*
|
||||||
|
* This method is used to add dynamically discovered devices to the
|
||||||
|
* set of serial ports supported.
|
||||||
|
*/
|
||||||
|
void console_register_devices(
|
||||||
|
console_tbl *new_ports,
|
||||||
|
size_t number_of_ports
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int old_number_of_ports;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
console_initialize_pointers();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_initialize has been invoked so it is now too late to
|
||||||
|
* register devices.
|
||||||
|
*/
|
||||||
|
if ( console_initialized == true ) {
|
||||||
|
printk( "Attempt to register console devices after driver initialized\n" );
|
||||||
|
rtems_fatal_error_occurred( 0xdead0001 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate memory for the console port extension
|
||||||
|
*/
|
||||||
|
old_number_of_ports = Console_Port_Count;
|
||||||
|
Console_Port_Count += number_of_ports;
|
||||||
|
Console_Port_Tbl = realloc(
|
||||||
|
Console_Port_Tbl,
|
||||||
|
Console_Port_Count * sizeof( console_tbl * )
|
||||||
|
);
|
||||||
|
if ( Console_Port_Tbl == NULL ) {
|
||||||
|
printk( "Unable to allocate pointer table for registering console devices\n" );
|
||||||
|
rtems_fatal_error_occurred( 0xdead0002 );
|
||||||
|
}
|
||||||
|
|
||||||
|
Console_Port_Data = calloc( Console_Port_Count, sizeof( console_data ) );
|
||||||
|
if ( Console_Port_Data == NULL ) {
|
||||||
|
printk( "Unable to allocate data table for console devices\n" );
|
||||||
|
rtems_fatal_error_occurred( 0xdead0003 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now add the new devices at the end.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern console_data Console_Port_Data[];
|
for (i=0 ; i < number_of_ports ; i++) {
|
||||||
extern unsigned long Console_Port_Count;
|
Console_Port_Tbl[old_number_of_ports + i] = &new_ports[i];
|
||||||
extern rtems_device_minor_number Console_Port_Minor;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*
|
||||||
*
|
|
||||||
* console_open
|
* console_open
|
||||||
*
|
*
|
||||||
* open a port as a termios console.
|
* open a port as a termios console.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rtems_device_driver console_open(
|
rtems_device_driver console_open(
|
||||||
rtems_device_major_number major,
|
rtems_device_major_number major,
|
||||||
rtems_device_minor_number minor,
|
rtems_device_minor_number minor,
|
||||||
@@ -65,7 +139,7 @@ rtems_device_driver console_open(
|
|||||||
* Open the port as a termios console driver.
|
* Open the port as a termios console driver.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cptr = &Console_Port_Tbl[minor];
|
cptr = Console_Port_Tbl[minor];
|
||||||
Callbacks.firstOpen = cptr->pDeviceFns->deviceFirstOpen;
|
Callbacks.firstOpen = cptr->pDeviceFns->deviceFirstOpen;
|
||||||
Callbacks.lastClose = cptr->pDeviceFns->deviceLastClose;
|
Callbacks.lastClose = cptr->pDeviceFns->deviceLastClose;
|
||||||
Callbacks.pollRead = cptr->pDeviceFns->deviceRead;
|
Callbacks.pollRead = cptr->pDeviceFns->deviceRead;
|
||||||
@@ -105,13 +179,13 @@ rtems_device_driver console_open(
|
|||||||
*/
|
*/
|
||||||
if ( minor != Console_Port_Minor ) {
|
if ( minor != Console_Port_Minor ) {
|
||||||
/*
|
/*
|
||||||
* If this is not the console we do not want ECHO and
|
* If this is not the console we do not want ECHO and so forth
|
||||||
* so forth
|
|
||||||
*/
|
*/
|
||||||
IoctlArgs.iop = args->iop;
|
IoctlArgs.iop = args->iop;
|
||||||
IoctlArgs.command = RTEMS_IO_GET_ATTRIBUTES;
|
IoctlArgs.command = RTEMS_IO_GET_ATTRIBUTES;
|
||||||
IoctlArgs.buffer = &Termios;
|
IoctlArgs.buffer = &Termios;
|
||||||
rtems_termios_ioctl( &IoctlArgs );
|
rtems_termios_ioctl( &IoctlArgs );
|
||||||
|
|
||||||
Termios.c_lflag = ICANON;
|
Termios.c_lflag = ICANON;
|
||||||
IoctlArgs.command = RTEMS_IO_SET_ATTRIBUTES;
|
IoctlArgs.command = RTEMS_IO_SET_ATTRIBUTES;
|
||||||
rtems_termios_ioctl( &IoctlArgs );
|
rtems_termios_ioctl( &IoctlArgs );
|
||||||
@@ -119,21 +193,19 @@ rtems_device_driver console_open(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
|
if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
|
||||||
Console_Port_Tbl[minor].pDeviceFlow &&
|
cptr->pDeviceFlow &&
|
||||||
Console_Port_Tbl[minor].pDeviceFlow->deviceStartRemoteTx) {
|
cptr->pDeviceFlow->deviceStartRemoteTx) {
|
||||||
Console_Port_Tbl[minor].pDeviceFlow->deviceStartRemoteTx(minor);
|
cptr->pDeviceFlow->deviceStartRemoteTx(minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*
|
||||||
*
|
|
||||||
* console_close
|
* console_close
|
||||||
*
|
*
|
||||||
* This routine closes a port that has been opened as console.
|
* This routine closes a port that has been opened as console.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rtems_device_driver console_close(
|
rtems_device_driver console_close(
|
||||||
rtems_device_major_number major,
|
rtems_device_major_number major,
|
||||||
rtems_device_minor_number minor,
|
rtems_device_minor_number minor,
|
||||||
@@ -142,8 +214,11 @@ rtems_device_driver console_close(
|
|||||||
{
|
{
|
||||||
rtems_libio_open_close_args_t *args = arg;
|
rtems_libio_open_close_args_t *args = arg;
|
||||||
struct rtems_termios_tty *current_tty;
|
struct rtems_termios_tty *current_tty;
|
||||||
|
console_tbl *cptr;
|
||||||
|
|
||||||
/* Get tty pointeur from the Console_Port_Data */
|
cptr = Console_Port_Tbl[minor];
|
||||||
|
|
||||||
|
/* Get tty pointer from the Console_Port_Data */
|
||||||
current_tty = Console_Port_Data[minor].termios_data;
|
current_tty = Console_Port_Data[minor].termios_data;
|
||||||
|
|
||||||
/* Get the tty refcount to determine if we need to do deviceStopRemoteTx.
|
/* Get the tty refcount to determine if we need to do deviceStopRemoteTx.
|
||||||
@@ -151,111 +226,93 @@ rtems_device_driver console_close(
|
|||||||
*/
|
*/
|
||||||
if ( (current_tty->refcount == 1) ) {
|
if ( (current_tty->refcount == 1) ) {
|
||||||
if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
|
if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
|
||||||
Console_Port_Tbl[minor].pDeviceFlow &&
|
cptr->pDeviceFlow &&
|
||||||
Console_Port_Tbl[minor].pDeviceFlow->deviceStopRemoteTx) {
|
cptr->pDeviceFlow->deviceStopRemoteTx) {
|
||||||
Console_Port_Tbl[minor].pDeviceFlow->deviceStopRemoteTx(minor);
|
cptr->pDeviceFlow->deviceStopRemoteTx(minor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rtems_termios_close (arg);
|
return rtems_termios_close (arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*
|
||||||
*
|
|
||||||
* console_read
|
|
||||||
*
|
|
||||||
* This routine uses the termios driver to read a character.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver console_read(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void * arg
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return rtems_termios_read (arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* console_write
|
|
||||||
*
|
|
||||||
* this routine uses the termios driver to write a character.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver console_write(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void * arg
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return rtems_termios_write (arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* console_control
|
|
||||||
*
|
|
||||||
* this routine uses the termios driver to process io
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver console_control(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void * arg
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return rtems_termios_ioctl (arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* console_initialize
|
* console_initialize
|
||||||
*
|
*
|
||||||
* Routine called to initialize the console device driver.
|
* Routine called to initialize the console device driver.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rtems_device_driver console_initialize(
|
rtems_device_driver console_initialize(
|
||||||
rtems_device_major_number major,
|
rtems_device_major_number major,
|
||||||
rtems_device_minor_number minor,
|
rtems_device_minor_number minor_arg,
|
||||||
void *arg
|
void *arg
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
rtems_status_code sc = RTEMS_SUCCESSFUL;
|
rtems_status_code status;
|
||||||
bool first = true;
|
rtems_device_minor_number minor;
|
||||||
|
console_tbl *port;
|
||||||
|
|
||||||
rtems_termios_initialize();
|
|
||||||
|
|
||||||
for (minor = 0; minor < Console_Port_Count; ++minor) {
|
|
||||||
const console_tbl *device = &Console_Port_Tbl [minor];
|
|
||||||
|
|
||||||
if (
|
|
||||||
(device->deviceProbe == NULL || device->deviceProbe(minor))
|
|
||||||
&& device->pDeviceFns->deviceProbe(minor)
|
|
||||||
) {
|
|
||||||
device->pDeviceFns->deviceInitialize(minor);
|
|
||||||
if (first) {
|
|
||||||
first = false;
|
|
||||||
Console_Port_Minor = minor;
|
|
||||||
sc = rtems_io_register_name(CONSOLE_DEVICE_NAME, major, minor);
|
|
||||||
if (sc != RTEMS_SUCCESSFUL) {
|
|
||||||
rtems_fatal_error_occurred(sc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (device->sDeviceName != NULL) {
|
|
||||||
sc = rtems_io_register_name(device->sDeviceName, major, minor);
|
|
||||||
if (sc != RTEMS_SUCCESSFUL) {
|
|
||||||
rtems_fatal_error_occurred(sc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (first) {
|
|
||||||
/*
|
/*
|
||||||
* Failed to find a working device
|
* If we have no devices which were registered earlier then we
|
||||||
|
* must still initialize pointers and set Console_Port_Data.
|
||||||
*/
|
*/
|
||||||
rtems_fatal_error_occurred(RTEMS_IO_ERROR);
|
if ( ! Console_Port_Tbl ) {
|
||||||
|
console_initialize_pointers();
|
||||||
|
Console_Port_Data = calloc( Console_Port_Count, sizeof( console_data ) );
|
||||||
|
if ( Console_Port_Data == NULL ) {
|
||||||
|
printk( "Unable to allocate data table for console devices\n" );
|
||||||
|
rtems_fatal_error_occurred( 0xdead0003 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_initialize has been invoked so it is now too late to
|
||||||
|
* register devices.
|
||||||
|
*/
|
||||||
|
console_initialized = true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the termio interface, our table of pointers to device
|
||||||
|
* information structures, and determine if the user has explicitly
|
||||||
|
* specified which device is to be used for the console.
|
||||||
|
*/
|
||||||
|
rtems_termios_initialize();
|
||||||
|
bsp_console_select();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iterate over all of the console devices we know about
|
||||||
|
* and initialize them.
|
||||||
|
*/
|
||||||
|
for (minor=0 ; minor < Console_Port_Count ; minor++) {
|
||||||
|
/*
|
||||||
|
* First perform the configuration dependent probe, then the
|
||||||
|
* device dependent probe
|
||||||
|
*/
|
||||||
|
port = Console_Port_Tbl[minor];
|
||||||
|
|
||||||
|
if ( (!port->deviceProbe || port->deviceProbe(minor)) &&
|
||||||
|
port->pDeviceFns->deviceProbe(minor)) {
|
||||||
|
|
||||||
|
status = rtems_io_register_name( port->sDeviceName, major, minor );
|
||||||
|
if (status != RTEMS_SUCCESSFUL) {
|
||||||
|
printk( "Unable to register /dev/console\n" );
|
||||||
|
rtems_fatal_error_occurred(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (minor == Console_Port_Minor) {
|
||||||
|
if (RTEMS_DEBUG)
|
||||||
|
printk( "Register %s as the CONSOLE\n", port->sDeviceName );
|
||||||
|
status = rtems_io_register_name( "dev/console", major, minor );
|
||||||
|
if (status != RTEMS_SUCCESSFUL) {
|
||||||
|
printk( "Unable to register /dev/console\n" );
|
||||||
|
rtems_fatal_error_occurred(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the hardware device.
|
||||||
|
*/
|
||||||
|
port->pDeviceFns->deviceInitialize(minor);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|||||||
46
c/src/lib/libbsp/shared/console_control.c
Normal file
46
c/src/lib/libbsp/shared/console_control.c
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Generic libchip console io_ctl extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is an extension of the generic console driver
|
||||||
|
* shell used by all console drivers using libchip.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <libchip/serial.h>
|
||||||
|
#include "console_private.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_control
|
||||||
|
*
|
||||||
|
* this routine uses the termios driver to process io
|
||||||
|
*/
|
||||||
|
rtems_device_driver console_control(
|
||||||
|
rtems_device_major_number major,
|
||||||
|
rtems_device_minor_number minor,
|
||||||
|
void * arg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return rtems_termios_ioctl (arg);
|
||||||
|
}
|
||||||
92
c/src/lib/libbsp/shared/console_private.h
Normal file
92
c/src/lib/libbsp/shared/console_private.h
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Extension of the generic libchip console driver shell
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PC386_CONSOLE_PRIVATE_h
|
||||||
|
#define _PC386_CONSOLE_PRIVATE_h
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern rtems_device_minor_number Console_Port_Minor;
|
||||||
|
extern rtems_device_minor_number BSPPrintkPort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief bsp_console_select
|
||||||
|
*
|
||||||
|
* This function selects the port to be used as console
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void bsp_console_select(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief bsp_com_outch
|
||||||
|
*
|
||||||
|
* This function puts a character out of the console port.
|
||||||
|
*
|
||||||
|
* @param[in] ch specifies the character to write
|
||||||
|
*/
|
||||||
|
extern void bsp_com_outch(char ch);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief bsp_com_inch
|
||||||
|
*
|
||||||
|
* This function gets a character from the console
|
||||||
|
* port.
|
||||||
|
*
|
||||||
|
* @return This method returns the character that
|
||||||
|
* was retrieved from the console port.
|
||||||
|
*/
|
||||||
|
extern int bsp_com_inch(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* This function
|
||||||
|
*
|
||||||
|
* @return This method returns
|
||||||
|
*/
|
||||||
|
int vt_ioctl( unsigned int cmd, unsigned long arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief console_register_devices
|
||||||
|
*
|
||||||
|
* This function expands the console table to include previous
|
||||||
|
* ports and the array of new ports specified.
|
||||||
|
*
|
||||||
|
* @param[in] new_ports specifies an array of new ports to register
|
||||||
|
* @param[in] number_of_ports specifies the number of elements
|
||||||
|
* in the new_ports array
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void console_register_devices(
|
||||||
|
console_tbl *new_ports,
|
||||||
|
size_t number_of_ports
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**@}*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/* end of include file */
|
||||||
45
c/src/lib/libbsp/shared/console_read.c
Normal file
45
c/src/lib/libbsp/shared/console_read.c
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Generic libchip console read extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is an extension of the generic console driver
|
||||||
|
* shell used by all console drivers using libchip.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <libchip/serial.h>
|
||||||
|
#include "console_private.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_read
|
||||||
|
*
|
||||||
|
* This routine uses the termios driver to read a character.
|
||||||
|
*/
|
||||||
|
rtems_device_driver console_read(
|
||||||
|
rtems_device_major_number major,
|
||||||
|
rtems_device_minor_number minor,
|
||||||
|
void * arg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return rtems_termios_read (arg);
|
||||||
|
}
|
||||||
102
c/src/lib/libbsp/shared/console_select.c
Normal file
102
c/src/lib/libbsp/shared/console_select.c
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Generic libchip console select
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file contains a routine to select the
|
||||||
|
* console based upon a number of criteria.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 2011.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <libchip/serial.h>
|
||||||
|
#include "console_private.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Method to return true if the device associated with the
|
||||||
|
* minor number probs available.
|
||||||
|
*/
|
||||||
|
static bool bsp_Is_Available( rtems_device_minor_number minor )
|
||||||
|
{
|
||||||
|
console_tbl *cptr = Console_Port_Tbl[minor];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First perform the configuration dependent probe, then the
|
||||||
|
* device dependent probe
|
||||||
|
*/
|
||||||
|
if ((!cptr->deviceProbe || cptr->deviceProbe(minor)) &&
|
||||||
|
cptr->pDeviceFns->deviceProbe(minor)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Method to return the first available device.
|
||||||
|
*/
|
||||||
|
static rtems_device_minor_number bsp_First_Available_Device( void )
|
||||||
|
{
|
||||||
|
rtems_device_minor_number minor;
|
||||||
|
|
||||||
|
for (minor=0; minor < Console_Port_Count ; minor++) {
|
||||||
|
console_tbl *cptr = Console_Port_Tbl[minor];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First perform the configuration dependent probe, then the
|
||||||
|
* device dependent probe
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((!cptr->deviceProbe || cptr->deviceProbe(minor)) &&
|
||||||
|
cptr->pDeviceFns->deviceProbe(minor)) {
|
||||||
|
return minor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error No devices were found. We will want to bail here.
|
||||||
|
*/
|
||||||
|
rtems_fatal_error_occurred(RTEMS_IO_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bsp_console_select(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset Console_Port_Minor and
|
||||||
|
* BSPPrintkPort here if desired.
|
||||||
|
*
|
||||||
|
* This default version allows the bsp to set these
|
||||||
|
* values at creation and will not touch them again
|
||||||
|
* unless the selected port number is not available.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the device that was selected isn't available then
|
||||||
|
* let the user know and select the first available device.
|
||||||
|
*/
|
||||||
|
if ( !bsp_Is_Available( Console_Port_Minor ) ) {
|
||||||
|
printk(
|
||||||
|
"Error finding %s setting console to first available\n",
|
||||||
|
Console_Port_Tbl[Console_Port_Minor]->sDeviceName
|
||||||
|
);
|
||||||
|
Console_Port_Minor = bsp_First_Available_Device();
|
||||||
|
}
|
||||||
|
}
|
||||||
45
c/src/lib/libbsp/shared/console_write.c
Normal file
45
c/src/lib/libbsp/shared/console_write.c
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @ingroup Console
|
||||||
|
*
|
||||||
|
* @brief Generic libchip console write extension
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is an extension of the generic console driver
|
||||||
|
* shell used by all console drivers using libchip.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <libchip/serial.h>
|
||||||
|
#include "console_private.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* console_write
|
||||||
|
*
|
||||||
|
* this routine uses the termios driver to write a character.
|
||||||
|
*/
|
||||||
|
rtems_device_driver console_write(
|
||||||
|
rtems_device_major_number major,
|
||||||
|
rtems_device_minor_number minor,
|
||||||
|
void * arg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return rtems_termios_write (arg);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user