change log for rtems (2011-10-18)

rtems-vc at rtems.org rtems-vc at rtems.org
Tue Oct 18 19:10:19 UTC 2011


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com

	* mrfs_support/fs_support.c: Resolved name conflict that was causing a
	compiler error.

M   1.13  testsuites/fstests/ChangeLog
M    1.4  testsuites/fstests/mrfs_support/fs_support.c

diff -u rtems/testsuites/fstests/ChangeLog:1.12 rtems/testsuites/fstests/ChangeLog:1.13
--- rtems/testsuites/fstests/ChangeLog:1.12	Fri Sep 30 07:57:07 2011
+++ rtems/testsuites/fstests/ChangeLog	Tue Oct 18 13:19:36 2011
@@ -1,3 +1,8 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com
+
+	* mrfs_support/fs_support.c: Resolved name conflict that was causing a
+	compiler error.
+
 2011-09-30	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* fsrdwr/init.c: Use %zd to print size_t.

diff -u rtems/testsuites/fstests/mrfs_support/fs_support.c:1.3 rtems/testsuites/fstests/mrfs_support/fs_support.c:1.4
--- rtems/testsuites/fstests/mrfs_support/fs_support.c:1.3	Wed Sep  7 02:32:05 2011
+++ rtems/testsuites/fstests/mrfs_support/fs_support.c	Tue Oct 18 13:19:36 2011
@@ -26,7 +26,7 @@
 
 #define BLOCK_SIZE (512)
 
-rtems_rfs_format_config config = {
+rtems_rfs_format_config rfs_config = {
 block_size:BLOCK_SIZE
 };
 
@@ -40,7 +40,7 @@
 
   init_ramdisk ();
 
-  rc = rtems_rfs_format (RAMDISK_PATH, &config);
+  rc = rtems_rfs_format (RAMDISK_PATH, &rfs_config);
   rtems_test_assert (rc == 0);
 
   rc = mount (RAMDISK_PATH,


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at 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.

M  1.191  c/src/lib/libbsp/shared/ChangeLog
M   1.17  c/src/lib/libbsp/shared/console.c
A    1.1  c/src/lib/libbsp/shared/console_control.c
A    1.1  c/src/lib/libbsp/shared/console_private.h
A    1.1  c/src/lib/libbsp/shared/console_read.c
A    1.1  c/src/lib/libbsp/shared/console_select.c
A    1.1  c/src/lib/libbsp/shared/console_write.c

diff -u rtems/c/src/lib/libbsp/shared/ChangeLog:1.190 rtems/c/src/lib/libbsp/shared/ChangeLog:1.191
--- rtems/c/src/lib/libbsp/shared/ChangeLog:1.190	Tue Aug 30 07:16:24 2011
+++ rtems/c/src/lib/libbsp/shared/ChangeLog	Tue Oct 18 13:23:51 2011
@@ -1,3 +1,11 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at 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 at oarcorp.com>
 
 	* bootcard.c: Revert patch and add comment clarifying code and need for

diff -u rtems/c/src/lib/libbsp/shared/console.c:1.16 rtems/c/src/lib/libbsp/shared/console.c:1.17
--- rtems/c/src/lib/libbsp/shared/console.c:1.16	Mon Mar 21 03:19:19 2011
+++ rtems/c/src/lib/libbsp/shared/console.c	Tue Oct 18 13:23:51 2011
@@ -1,10 +1,13 @@
-/*
- *  This file contains the generic console driver shell used
- *  by all console drivers using libchip.
+/**
+ * @file
  *
- *  This driver uses the termios pseudo driver.
+ * @ingroup Console
  *
- *  COPYRIGHT (c) 1989-1997.
+ * @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
@@ -16,30 +19,101 @@
 
 #include <bsp.h>
 #include <rtems/libio.h>
-#include <rtems/console.h>
 #include <stdlib.h>
 #include <assert.h>
 #include <termios.h>
 
 #include <rtems/termiostypes.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;
 
-extern console_data  Console_Port_Data[];
-extern unsigned long  Console_Port_Count;
-extern rtems_device_minor_number  Console_Port_Minor;
+  if ( Console_Port_Tbl )
+    return;
 
-/*PAGE
+  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.
+   */
+  
+  for (i=0 ; i < number_of_ports ; i++) {
+    Console_Port_Tbl[old_number_of_ports + i] = &new_ports[i];
+  }
+}
+
+/*
  *  console_open
  *
  *  open a port as a termios console.
- *
  */
-
 rtems_device_driver console_open(
   rtems_device_major_number major,
   rtems_device_minor_number minor,
@@ -65,17 +139,17 @@
    * Open the port as a termios console driver.
    */
 
-  cptr = &Console_Port_Tbl[minor];
+  cptr = Console_Port_Tbl[minor];
   Callbacks.firstOpen            = cptr->pDeviceFns->deviceFirstOpen;
   Callbacks.lastClose            = cptr->pDeviceFns->deviceLastClose;
   Callbacks.pollRead             = cptr->pDeviceFns->deviceRead;
   Callbacks.write                = cptr->pDeviceFns->deviceWrite;
   Callbacks.setAttributes        = cptr->pDeviceFns->deviceSetAttributes;
   if (cptr->pDeviceFlow != NULL) {
-    Callbacks.stopRemoteTx = cptr->pDeviceFlow->deviceStopRemoteTx;
+    Callbacks.stopRemoteTx  = cptr->pDeviceFlow->deviceStopRemoteTx;
     Callbacks.startRemoteTx = cptr->pDeviceFlow->deviceStartRemoteTx;
   } else {
-    Callbacks.stopRemoteTx = NULL;
+    Callbacks.stopRemoteTx  = NULL;
     Callbacks.startRemoteTx = NULL;
   }
   Callbacks.outputUsesInterrupts = cptr->pDeviceFns->deviceOutputUsesInterrupts;
@@ -85,7 +159,7 @@
    *        Console_Port_Tbl[minor].ulHysteresis);
    */
 
-  status = rtems_termios_open ( major, minor, arg, &Callbacks );
+  status = rtems_termios_open( major, minor, arg, &Callbacks );
   Console_Port_Data[minor].termios_data = args->iop->data1;
 
   /* Get tty pointur from the Console_Port_Data */
@@ -103,37 +177,35 @@
     /*
      * If it's the first open, modified, if need, the port parameters
      */
-    if (minor!=Console_Port_Minor) {
+    if ( minor != Console_Port_Minor ) {
       /*
-       * If this is not the console we do not want ECHO and
-       * so forth
+       * If this is not the console we do not want ECHO and so forth
        */
-      IoctlArgs.iop=args->iop;
-      IoctlArgs.command=RTEMS_IO_GET_ATTRIBUTES;
-      IoctlArgs.buffer=&Termios;
-      rtems_termios_ioctl(&IoctlArgs);
-      Termios.c_lflag=ICANON;
-      IoctlArgs.command=RTEMS_IO_SET_ATTRIBUTES;
-      rtems_termios_ioctl(&IoctlArgs);
+      IoctlArgs.iop     = args->iop;
+      IoctlArgs.command = RTEMS_IO_GET_ATTRIBUTES;
+      IoctlArgs.buffer  = &Termios;
+      rtems_termios_ioctl( &IoctlArgs );
+
+      Termios.c_lflag   = ICANON;
+      IoctlArgs.command = RTEMS_IO_SET_ATTRIBUTES;
+      rtems_termios_ioctl( &IoctlArgs );
     }
   }
 
   if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
-      Console_Port_Tbl[minor].pDeviceFlow &&
-      Console_Port_Tbl[minor].pDeviceFlow->deviceStartRemoteTx) {
-    Console_Port_Tbl[minor].pDeviceFlow->deviceStartRemoteTx(minor);
+      cptr->pDeviceFlow &&
+      cptr->pDeviceFlow->deviceStartRemoteTx) {
+    cptr->pDeviceFlow->deviceStartRemoteTx(minor);
   }
 
   return status;
 }
 
-/*PAGE
- *
+/*
  *  console_close
  *
  *  This routine closes a port that has been opened as console.
  */
-
 rtems_device_driver console_close(
   rtems_device_major_number major,
   rtems_device_minor_number minor,
@@ -142,8 +214,11 @@
 {
   rtems_libio_open_close_args_t *args = arg;
   struct rtems_termios_tty      *current_tty;
+  console_tbl                   *cptr;
+
+  cptr  = Console_Port_Tbl[minor];
 
-  /* Get tty pointeur from the Console_Port_Data */
+  /* Get tty pointer from the Console_Port_Data */
   current_tty = Console_Port_Data[minor].termios_data;
 
   /* Get the tty refcount to determine if we need to do deviceStopRemoteTx.
@@ -151,111 +226,93 @@
    */
   if ( (current_tty->refcount == 1) ) {
     if ( (args->iop->flags&LIBIO_FLAGS_READ) &&
-          Console_Port_Tbl[minor].pDeviceFlow &&
-          Console_Port_Tbl[minor].pDeviceFlow->deviceStopRemoteTx) {
-      Console_Port_Tbl[minor].pDeviceFlow->deviceStopRemoteTx(minor);
+          cptr->pDeviceFlow &&
+          cptr->pDeviceFlow->deviceStopRemoteTx) {
+      cptr->pDeviceFlow->deviceStopRemoteTx(minor);
     }
   }
 
   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
  *
  *  Routine called to initialize the console device driver.
  */
-
 rtems_device_driver console_initialize(
   rtems_device_major_number  major,
-  rtems_device_minor_number  minor,
+  rtems_device_minor_number  minor_arg,
   void                      *arg
 )
 {
-  rtems_status_code sc = RTEMS_SUCCESSFUL;
-  bool first = true;
+  rtems_status_code          status;
+  rtems_device_minor_number  minor;
+  console_tbl               *port;
 
+  /*
+   * If we have no devices which were registered earlier then we
+   * must still initialize pointers and set Console_Port_Data.
+   */
+  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];
 
-  for (minor = 0; minor < Console_Port_Count; ++minor) {
-    const console_tbl *device = &Console_Port_Tbl [minor];
+    if ( (!port->deviceProbe || port->deviceProbe(minor)) &&
+         port->pDeviceFns->deviceProbe(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);
-        }
+      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 (device->sDeviceName != NULL) {
-        sc = rtems_io_register_name(device->sDeviceName, major, minor);
-        if (sc != RTEMS_SUCCESSFUL) {
-          rtems_fatal_error_occurred(sc);
+
+      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);
         }
       }
-    }
-  }
 
-  if (first) {
-    /*
-     * Failed to find a working device
-     */
-    rtems_fatal_error_occurred(RTEMS_IO_ERROR);
+      /*
+       * Initialize the hardware device.
+       */
+      port->pDeviceFns->deviceInitialize(minor);
+
+    }
   }
 
   return RTEMS_SUCCESSFUL;

diff -u /dev/null rtems/c/src/lib/libbsp/shared/console_control.c:1.1
--- /dev/null	Tue Oct 18 14:10:12 2011
+++ rtems/c/src/lib/libbsp/shared/console_control.c	Tue Oct 18 13:23:51 2011
@@ -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);
+}

diff -u /dev/null rtems/c/src/lib/libbsp/shared/console_private.h:1.1
--- /dev/null	Tue Oct 18 14:10:12 2011
+++ rtems/c/src/lib/libbsp/shared/console_private.h	Tue Oct 18 13:23:51 2011
@@ -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 */

diff -u /dev/null rtems/c/src/lib/libbsp/shared/console_read.c:1.1
--- /dev/null	Tue Oct 18 14:10:12 2011
+++ rtems/c/src/lib/libbsp/shared/console_read.c	Tue Oct 18 13:23:51 2011
@@ -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);
+}

diff -u /dev/null rtems/c/src/lib/libbsp/shared/console_select.c:1.1
--- /dev/null	Tue Oct 18 14:10:12 2011
+++ rtems/c/src/lib/libbsp/shared/console_select.c	Tue Oct 18 13:23:51 2011
@@ -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();
+  }
+}

diff -u /dev/null rtems/c/src/lib/libbsp/shared/console_write.c:1.1
--- /dev/null	Tue Oct 18 14:10:12 2011
+++ rtems/c/src/lib/libbsp/shared/console_write.c	Tue Oct 18 13:23:51 2011
@@ -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);
+}


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/console-config.c, console/hsu.c: Modifications
	to add dynamic tables for libchip serial drivers.

M   1.39  c/src/lib/libbsp/arm/lpc32xx/ChangeLog
M   1.15  c/src/lib/libbsp/arm/lpc32xx/Makefile.am
M    1.3  c/src/lib/libbsp/arm/lpc32xx/console/console-config.c
M    1.3  c/src/lib/libbsp/arm/lpc32xx/console/hsu.c

diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.38 rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.39
--- rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog:1.38	Thu Sep 22 02:09:07 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/ChangeLog	Tue Oct 18 13:25:15 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/console-config.c, console/hsu.c: Modifications
+	to add dynamic tables for libchip serial drivers.
+
 2011-09-22	Sebastian Huber <sebastian.huber at embedded-brains.de>
 
 	* make/custom/lpc32xx.inc: Workaround for GCC bug 50106.

diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/Makefile.am:1.14 rtems/c/src/lib/libbsp/arm/lpc32xx/Makefile.am:1.15
--- rtems/c/src/lib/libbsp/arm/lpc32xx/Makefile.am:1.14	Fri Jul  1 08:05:06 2011
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/Makefile.am	Tue Oct 18 13:25:15 2011
@@ -109,8 +109,12 @@
 
 # Console
 libbsp_a_SOURCES += ../../shared/console.c \
+        ../../shared/console_select.c \
 	console/console-config.c \
-	console/hsu.c
+	console/hsu.c \
+        ../../shared/console_read.c \
+        ../../shared/console_write.c \
+        ../../shared/console_control.c
 
 # Clock
 libbsp_a_SOURCES += ../shared/lpc/clock/lpc-clock-config.c

diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c:1.2 rtems/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c:1.3
--- rtems/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c:1.2	Fri Apr  9 07:25:21 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c	Tue Oct 18 13:25:15 2011
@@ -42,11 +42,9 @@
   reg [i] = val;
 }
 
-rtems_device_minor_number Console_Port_Minor = 0;
-
 /* FIXME: Console selection */
 
-console_tbl Console_Port_Tbl [] = {
+console_tbl Console_Configuration_Ports [] = {
   #ifdef LPC32XX_CONFIG_U5CLK
     {
       .sDeviceName = "/dev/ttyS5",
@@ -197,8 +195,6 @@
 };
 
 #define LPC32XX_UART_COUNT \
-  (sizeof(Console_Port_Tbl) / sizeof(Console_Port_Tbl [0]))
-
-unsigned long Console_Port_Count = LPC32XX_UART_COUNT;
+  (sizeof(Console_Configuration_Ports) / sizeof(Console_Configuration_Ports [0]))
 
-console_data Console_Port_Data [LPC32XX_UART_COUNT];
+unsigned long Console_Configuration_Count = LPC32XX_UART_COUNT;

diff -u rtems/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c:1.2 rtems/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c:1.3
--- rtems/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c:1.2	Mon Aug 23 02:25:47 2010
+++ rtems/c/src/lib/libbsp/arm/lpc32xx/console/hsu.c	Tue Oct 18 13:25:15 2011
@@ -64,7 +64,7 @@
 {
   rtems_libio_open_close_args_t *oca = arg;
   struct rtems_termios_tty *tty = oca->iop->data1;
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   console_data *cd = &Console_Port_Data [minor];
   volatile lpc32xx_hsu *hsu = (volatile lpc32xx_hsu *) ct->ulCtrlPort1;
 
@@ -77,7 +77,7 @@
 
 static ssize_t lpc32xx_hsu_write(int minor, const char *buf, size_t len)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   console_data *cd = &Console_Port_Data [minor];
   volatile lpc32xx_hsu *hsu = (volatile lpc32xx_hsu *) ct->ulCtrlPort1;
   size_t tx_level = (hsu->level & HSU_LEVEL_TX_MASK) >> HSU_LEVEL_TX_SHIFT;
@@ -101,7 +101,7 @@
 static void lpc32xx_hsu_interrupt_handler(void *arg)
 {
   int minor = (int) arg;
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   console_data *cd = &Console_Port_Data [minor];
   volatile lpc32xx_hsu *hsu = (volatile lpc32xx_hsu *) ct->ulCtrlPort1;
 
@@ -141,7 +141,7 @@
 
 static void lpc32xx_hsu_initialize(int minor)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   console_data *cd = &Console_Port_Data [minor];
   volatile lpc32xx_hsu *hsu = (volatile lpc32xx_hsu *) ct->ulCtrlPort1;
 
@@ -166,7 +166,7 @@
 
 static int lpc32xx_hsu_set_attributes(int minor, const struct termios *term)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   volatile lpc32xx_hsu *hsu = (volatile lpc32xx_hsu *) ct->ulCtrlPort1;
   int baud_flags = term->c_cflag & CBAUD;
 


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/console-config.c: Modifications to add dynamic
	tables for libchip serial drivers.

M   1.74  c/src/lib/libbsp/arm/lpc24xx/ChangeLog
M   1.38  c/src/lib/libbsp/arm/lpc24xx/Makefile.am
M    1.7  c/src/lib/libbsp/arm/lpc24xx/console/console-config.c

diff -u rtems/c/src/lib/libbsp/arm/lpc24xx/ChangeLog:1.73 rtems/c/src/lib/libbsp/arm/lpc24xx/ChangeLog:1.74
--- rtems/c/src/lib/libbsp/arm/lpc24xx/ChangeLog:1.73	Mon Oct 17 05:39:59 2011
+++ rtems/c/src/lib/libbsp/arm/lpc24xx/ChangeLog	Tue Oct 18 13:25:35 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/console-config.c: Modifications to add dynamic
+	tables for libchip serial drivers.
+
 2011-10-17	Sebastian Huber <sebastian.huber at embedded-brains.de>
 
 	* include/start-config.h, make/custom/lpc24xx_plx800_rom_int.cfg,

diff -u rtems/c/src/lib/libbsp/arm/lpc24xx/Makefile.am:1.37 rtems/c/src/lib/libbsp/arm/lpc24xx/Makefile.am:1.38
--- rtems/c/src/lib/libbsp/arm/lpc24xx/Makefile.am:1.37	Mon Oct 17 05:39:59 2011
+++ rtems/c/src/lib/libbsp/arm/lpc24xx/Makefile.am	Tue Oct 18 13:25:35 2011
@@ -111,7 +111,9 @@
 
 # Console
 libbsp_a_SOURCES += ../../shared/console.c \
-	console/console-config.c
+    console/console-config.c ../../shared/console_select.c \
+    ../../shared/console_read.c ../../shared/console_write.c \
+    ../../shared/console_control.c
 
 # Clock
 libbsp_a_SOURCES += ../shared/lpc/clock/lpc-clock-config.c

diff -u rtems/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c:1.6 rtems/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c:1.7
--- rtems/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c:1.6	Thu May 19 07:30:00 2011
+++ rtems/c/src/lib/libbsp/arm/lpc24xx/console/console-config.c	Tue Oct 18 13:25:35 2011
@@ -89,9 +89,7 @@
   }
 #endif
 
-rtems_device_minor_number Console_Port_Minor = 0;
-
-console_tbl Console_Port_Tbl [] = {
+console_tbl Console_Configuration_Ports [] = {
   #ifdef LPC24XX_CONFIG_CONSOLE
     {
       .sDeviceName = "/dev/ttyS0",
@@ -179,8 +177,5 @@
 };
 
 #define LPC24XX_UART_COUNT \
-  (sizeof(Console_Port_Tbl) / sizeof(Console_Port_Tbl [0]))
-
-unsigned long Console_Port_Count = LPC24XX_UART_COUNT;
-
-console_data Console_Port_Data [LPC24XX_UART_COUNT];
+  (sizeof(Console_Configuration_Ports) / sizeof(console_tbl))
+unsigned long Console_Configuration_Count = LPC24XX_UART_COUNT;


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/uart.c: Modifications to add dynamic tables for
	libchip serial drivers.

M  1.120  c/src/lib/libbsp/arm/edb7312/ChangeLog
M   1.42  c/src/lib/libbsp/arm/edb7312/Makefile.am
M    1.9  c/src/lib/libbsp/arm/edb7312/console/uart.c
M   1.65  c/src/lib/libbsp/arm/gp32/ChangeLog
M   1.25  c/src/lib/libbsp/arm/gp32/Makefile.am
M    1.7  c/src/lib/libbsp/arm/gp32/console/uart.c
M   1.59  c/src/lib/libbsp/arm/rtl22xx/ChangeLog
M   1.19  c/src/lib/libbsp/arm/rtl22xx/Makefile.am
M    1.8  c/src/lib/libbsp/arm/rtl22xx/console/uart.c

diff -u rtems/c/src/lib/libbsp/arm/edb7312/ChangeLog:1.119 rtems/c/src/lib/libbsp/arm/edb7312/ChangeLog:1.120
--- rtems/c/src/lib/libbsp/arm/edb7312/ChangeLog:1.119	Sun Jun 19 03:12:17 2011
+++ rtems/c/src/lib/libbsp/arm/edb7312/ChangeLog	Tue Oct 18 13:26:36 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/uart.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-06-19	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* Makefile.am: Fix broken path to clockdrv_shell.h.

diff -u rtems/c/src/lib/libbsp/arm/edb7312/Makefile.am:1.41 rtems/c/src/lib/libbsp/arm/edb7312/Makefile.am:1.42
--- rtems/c/src/lib/libbsp/arm/edb7312/Makefile.am:1.41	Sun Jun 19 03:12:17 2011
+++ rtems/c/src/lib/libbsp/arm/edb7312/Makefile.am	Tue Oct 18 13:26:36 2011
@@ -44,7 +44,9 @@
 libbsp_a_SOURCES += clock/clockdrv.c
 libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
 # console
-libbsp_a_SOURCES += console/uart.c ../../shared/console.c
+libbsp_a_SOURCES += console/uart.c ../../shared/console.c \
+    ../../shared/console_select.c  ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c 
 # timer
 libbsp_a_SOURCES += timer/timer.c
 # abort

diff -u rtems/c/src/lib/libbsp/arm/edb7312/console/uart.c:1.8 rtems/c/src/lib/libbsp/arm/edb7312/console/uart.c:1.9
--- rtems/c/src/lib/libbsp/arm/edb7312/console/uart.c:1.8	Wed Apr 14 04:27:31 2010
+++ rtems/c/src/lib/libbsp/arm/edb7312/console/uart.c	Tue Oct 18 13:26:36 2011
@@ -31,9 +31,8 @@
 static void    uart_write_polled(int minor, char c);
 static int     uart_set_attributes(int minor, const struct termios *t);
 
-unsigned long Console_Port_Count = NUM_DEVS;
-console_data  Console_Port_Data[NUM_DEVS];
-rtems_device_minor_number  Console_Port_Minor = 0;
+unsigned long Console_Configuration_Count = NUM_DEVS;
+
 console_fns uart_fns =
 {
     libchip_serial_default_probe,
@@ -46,7 +45,7 @@
     uart_set_attributes,
     FALSE
 };
-console_tbl Console_Port_Tbl[] = {
+console_tbl Console_Configuration_Ports[] = {
     {
         "/dev/com0",                      /* sDeviceName */
         SERIAL_CUSTOM,                    /* deviceType */
@@ -92,9 +91,9 @@
     char        c;
     int         err;
 
-    data_reg = (uint32_t*)Console_Port_Tbl[minor].ulDataPort;
-    ctrl_reg1 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort1;
-    ctrl_reg2 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort2;
+    data_reg  = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort;
+    ctrl_reg1 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort1;
+    ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2;
 
     if ((*ctrl_reg2 & EP7312_UART_URXFE1) != 0) {
         return -1;
@@ -115,9 +114,9 @@
     size_t i;
     char c;
 
-    data_reg = (uint32_t*)Console_Port_Tbl[minor].ulDataPort;
-    ctrl_reg1 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort1;
-    ctrl_reg2 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort2;
+    data_reg  = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort;
+    ctrl_reg1 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort1;
+    ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2;
 
     for (i = 0; i < len; i++) {
         /* Wait for fifo to have room */
@@ -138,9 +137,9 @@
     volatile uint32_t   *ctrl_reg1;
     volatile uint32_t   *ctrl_reg2;
 
-    data_reg = (uint32_t*)Console_Port_Tbl[minor].ulDataPort;
-    ctrl_reg1 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort1;
-    ctrl_reg2 = (uint32_t*)Console_Port_Tbl[minor].ulCtrlPort2;
+    data_reg  = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort;
+    ctrl_reg1 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort1;
+    ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2;
 
     /*   *ctrl_reg = (BSP_UART_DATA8       |
                  BSP_UART_STOP1       |

diff -u rtems/c/src/lib/libbsp/arm/gp32/ChangeLog:1.64 rtems/c/src/lib/libbsp/arm/gp32/ChangeLog:1.65
--- rtems/c/src/lib/libbsp/arm/gp32/ChangeLog:1.64	Fri Feb 11 05:48:14 2011
+++ rtems/c/src/lib/libbsp/arm/gp32/ChangeLog	Tue Oct 18 13:26:07 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/uart.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-02-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* startup/bspreset.c, startup/bspstart.c:

diff -u rtems/c/src/lib/libbsp/arm/gp32/Makefile.am:1.24 rtems/c/src/lib/libbsp/arm/gp32/Makefile.am:1.25
--- rtems/c/src/lib/libbsp/arm/gp32/Makefile.am:1.24	Fri Apr 30 09:30:09 2010
+++ rtems/c/src/lib/libbsp/arm/gp32/Makefile.am	Tue Oct 18 13:26:07 2011
@@ -39,7 +39,9 @@
     startup/memmap.c ../../shared/bootcard.c ../../shared/sbrk.c \
     ../../shared/gnatinstallhandler.c
 # console
-libbsp_a_SOURCES += console/uart.c ../../shared/console.c
+libbsp_a_SOURCES += console/uart.c ../../shared/console.c \
+    ../../shared/console_select.c  ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c 
 # IRQ
 include_bsp_HEADERS += ../../shared/include/irq-generic.h \
 	../../shared/include/irq-info.h

diff -u rtems/c/src/lib/libbsp/arm/gp32/console/uart.c:1.6 rtems/c/src/lib/libbsp/arm/gp32/console/uart.c:1.7
--- rtems/c/src/lib/libbsp/arm/gp32/console/uart.c:1.6	Sun Apr 25 21:33:57 2010
+++ rtems/c/src/lib/libbsp/arm/gp32/console/uart.c	Tue Oct 18 13:26:07 2011
@@ -46,11 +46,7 @@
 static int     uart_set_attributes(int minor, const struct termios *t);
 
 /* These are used by code in console.c */
-unsigned long Console_Port_Count = NUM_DEVS;
-console_data  Console_Port_Data[NUM_DEVS];
-
-/* rtems console uses the following minor number */
-rtems_device_minor_number  Console_Port_Minor = 0;
+unsigned long Console_Configuration_Count = NUM_DEVS;
 
 /* Pointers to functions for handling the UART. */
 console_fns uart_fns =
@@ -73,7 +69,7 @@
  * by console.c, but may be used by drivers in libchip
  *
  */
-console_tbl Console_Port_Tbl[] = {
+console_tbl Console_Configuration_Ports[] = {
     {
         "/dev/com0",                      /* sDeviceName */
         SERIAL_CUSTOM,                    /* deviceType */

diff -u rtems/c/src/lib/libbsp/arm/rtl22xx/ChangeLog:1.58 rtems/c/src/lib/libbsp/arm/rtl22xx/ChangeLog:1.59
--- rtems/c/src/lib/libbsp/arm/rtl22xx/ChangeLog:1.58	Fri Oct  7 06:00:48 2011
+++ rtems/c/src/lib/libbsp/arm/rtl22xx/ChangeLog	Tue Oct 18 13:24:51 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/uart.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-10-07	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* make/custom/rtl22xx_t.cfg: Remove USE_THUMB (Violates *.cfg

diff -u rtems/c/src/lib/libbsp/arm/rtl22xx/Makefile.am:1.18 rtems/c/src/lib/libbsp/arm/rtl22xx/Makefile.am:1.19
--- rtems/c/src/lib/libbsp/arm/rtl22xx/Makefile.am:1.18	Fri Apr 30 09:24:03 2010
+++ rtems/c/src/lib/libbsp/arm/rtl22xx/Makefile.am	Tue Oct 18 13:24:51 2011
@@ -41,7 +41,9 @@
     ../../shared/bootcard.c ../../shared/sbrk.c \
     ../../shared/gnatinstallhandler.c
 # console
-libbsp_a_SOURCES += ../../shared/console.c
+libbsp_a_SOURCES += ../../shared/console.c \
+    ../../shared/console_select.c ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 # IRQ
 include_bsp_HEADERS += ../../shared/include/irq-generic.h \
 	../../shared/include/irq-info.h

diff -u rtems/c/src/lib/libbsp/arm/rtl22xx/console/uart.c:1.7 rtems/c/src/lib/libbsp/arm/rtl22xx/console/uart.c:1.8
--- rtems/c/src/lib/libbsp/arm/rtl22xx/console/uart.c:1.7	Fri Apr 30 09:24:03 2010
+++ rtems/c/src/lib/libbsp/arm/rtl22xx/console/uart.c	Tue Oct 18 13:24:51 2011
@@ -45,11 +45,7 @@
 static int     uart_set_attributes(int minor, const struct termios *t);
 
 /* These are used by code in console.c */
-unsigned long Console_Port_Count = NUM_DEVS;
-console_data  Console_Port_Data[NUM_DEVS];
-
-/* rtems console uses the following minor number */
-rtems_device_minor_number  Console_Port_Minor = 0;
+unsigned long Console_Configuration_Count = NUM_DEVS;
 
 /* Pointers to functions for handling the UART. */
 console_fns uart_fns =
@@ -72,7 +68,7 @@
  * by console.c, but may be used by drivers in libchip
  *
  */
-console_tbl Console_Port_Tbl[] = {
+console_tbl Console_Configuration_Ports[] = {
     {
         "/dev/console",                   /* sDeviceName */
         SERIAL_CUSTOM,                    /* deviceType */


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/uarts.c: Modifications to add dynamic tables for
	libchip serial drivers.

M   1.75  c/src/lib/libbsp/arm/csb337/ChangeLog
M   1.34  c/src/lib/libbsp/arm/csb337/Makefile.am
M    1.8  c/src/lib/libbsp/arm/csb337/console/uarts.c
M   1.28  c/src/lib/libbsp/arm/gumstix/ChangeLog
M    1.9  c/src/lib/libbsp/arm/gumstix/Makefile.am
M    1.3  c/src/lib/libbsp/arm/gumstix/console/uarts.c

diff -u rtems/c/src/lib/libbsp/arm/csb337/ChangeLog:1.74 rtems/c/src/lib/libbsp/arm/csb337/ChangeLog:1.75
--- rtems/c/src/lib/libbsp/arm/csb337/ChangeLog:1.74	Wed Feb  2 08:57:45 2011
+++ rtems/c/src/lib/libbsp/arm/csb337/ChangeLog	Tue Oct 18 13:26:54 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/uarts.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-02-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.68, automake-1.11.1.

diff -u rtems/c/src/lib/libbsp/arm/csb337/Makefile.am:1.33 rtems/c/src/lib/libbsp/arm/csb337/Makefile.am:1.34
--- rtems/c/src/lib/libbsp/arm/csb337/Makefile.am:1.33	Fri Apr 30 09:44:17 2010
+++ rtems/c/src/lib/libbsp/arm/csb337/Makefile.am	Tue Oct 18 13:26:55 2011
@@ -61,7 +61,9 @@
     startup/memmap.c ../../shared/bootcard.c ../../shared/sbrk.c \
     ../../shared/gnatinstallhandler.c
 # console
-libbsp_a_SOURCES += ../../shared/console.c console/uarts.c
+libbsp_a_SOURCES += ../../shared/console.c console/uarts.c \
+    ../../shared/console_select.c  ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c 
 # IRQ
 include_bsp_HEADERS += ../../shared/include/irq-generic.h \
 	../../shared/include/irq-info.h

diff -u rtems/c/src/lib/libbsp/arm/csb337/console/uarts.c:1.7 rtems/c/src/lib/libbsp/arm/csb337/console/uarts.c:1.8
--- rtems/c/src/lib/libbsp/arm/csb337/console/uarts.c:1.7	Mon Nov 30 16:00:35 2009
+++ rtems/c/src/lib/libbsp/arm/csb337/console/uarts.c	Tue Oct 18 13:26:55 2011
@@ -18,7 +18,7 @@
  *  Joel Sherrill, 2009.
  *
  *  $Id$
-*/
+ */
 
 #include <bsp.h>
 #include <rtems/libio.h>
@@ -31,8 +31,6 @@
 #include <libchip/sersupp.h>
 #include <bspopts.h>
 
-/* rtems console uses the following minor number */
-rtems_device_minor_number  Console_Port_Minor = 0;
 extern console_fns dbgu_fns;
 
 #if ENABLE_LCD
@@ -82,8 +80,7 @@
   USART0_DEV + USART1_DEV + USART2_DEV + USART3_DEV)
 
 /* These are used by code in console.c */
-unsigned long Console_Port_Count = NUM_DEVS;
-console_data  Console_Port_Data[NUM_DEVS];
+unsigned long Console_Configuration_Count = NUM_DEVS;
 
 /*
  * There's one item in array for each UART.
@@ -94,7 +91,7 @@
  * when we add other types of UARTS we will need to move this
  * structure to a generic uart.c file with only this in it
  */
-console_tbl Console_Port_Tbl[] = {
+console_tbl Console_Configuration_Ports[] = {
   {
     "/dev/console",    /* sDeviceName */
     SERIAL_CUSTOM,     /* deviceType */
@@ -244,5 +241,5 @@
 
 console_tbl *BSP_get_uart_from_minor(int minor)
 {
-    return &Console_Port_Tbl[minor];
+    return Console_Port_Tbl[minor];
 }

diff -u rtems/c/src/lib/libbsp/arm/gumstix/ChangeLog:1.27 rtems/c/src/lib/libbsp/arm/gumstix/ChangeLog:1.28
--- rtems/c/src/lib/libbsp/arm/gumstix/ChangeLog:1.27	Wed Feb  2 08:57:53 2011
+++ rtems/c/src/lib/libbsp/arm/gumstix/ChangeLog	Tue Oct 18 13:25:50 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/uarts.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-02-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.68, automake-1.11.1.

diff -u rtems/c/src/lib/libbsp/arm/gumstix/Makefile.am:1.8 rtems/c/src/lib/libbsp/arm/gumstix/Makefile.am:1.9
--- rtems/c/src/lib/libbsp/arm/gumstix/Makefile.am:1.8	Fri Apr 30 09:27:24 2010
+++ rtems/c/src/lib/libbsp/arm/gumstix/Makefile.am	Tue Oct 18 13:25:50 2011
@@ -39,7 +39,9 @@
   ../../shared/bspclean.c startup/bspstart.c startup/memmap.c
 
 #console
-libbsp_a_SOURCES += console/uarts.c ../../shared/console.c
+libbsp_a_SOURCES += console/uarts.c ../../shared/console.c \
+  ../../shared/console_select.c  ../../shared/console_control.c \
+  ../../shared/console_read.c ../../shared/console_write.c 
 # IRQ
 include_bsp_HEADERS += ../../shared/include/irq-generic.h \
 	../../shared/include/irq-info.h

diff -u rtems/c/src/lib/libbsp/arm/gumstix/console/uarts.c:1.2 rtems/c/src/lib/libbsp/arm/gumstix/console/uarts.c:1.3
--- rtems/c/src/lib/libbsp/arm/gumstix/console/uarts.c:1.2	Sun Nov 29 08:53:00 2009
+++ rtems/c/src/lib/libbsp/arm/gumstix/console/uarts.c	Tue Oct 18 13:25:50 2011
@@ -27,11 +27,8 @@
 #define NUM_DEVS       1
 
 /* These are used by code in console.c */
-unsigned long Console_Port_Count = NUM_DEVS;
-console_data  Console_Port_Data[NUM_DEVS];
+unsigned long Console_Configuration_Count = NUM_DEVS;
 
-/* rtems console uses the following minor number */
-rtems_device_minor_number  Console_Port_Minor = 0;
 extern console_fns ffuart_fns;
 
 /*
@@ -43,7 +40,7 @@
  * when we add other types of UARTS we will need to move this
  * structure to a generic uart.c file with only this in it
  */
-console_tbl Console_Port_Tbl[] = {
+console_tbl Console_Configuration_Ports[] = {
     {
         "/dev/console",    /* sDeviceName */
         SERIAL_CUSTOM,     /* deviceType */
@@ -67,5 +64,5 @@
 
 console_tbl *BSP_get_uart_from_minor(int minor)
 {
-    return &Console_Port_Tbl[minor];
+    return Console_Port_Tbl[minor];
 }


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am: Modifications to add dynamic tables for libchip serial
	drivers.

M   1.33  c/src/lib/libbsp/arm/smdk2410/ChangeLog
M   1.17  c/src/lib/libbsp/arm/smdk2410/Makefile.am
M    1.9  c/src/lib/libbsp/sparc64/niagara/ChangeLog
M    1.3  c/src/lib/libbsp/sparc64/niagara/Makefile.am
M   1.10  c/src/lib/libbsp/sparc64/usiii/ChangeLog
M    1.4  c/src/lib/libbsp/sparc64/usiii/Makefile.am

diff -u rtems/c/src/lib/libbsp/arm/smdk2410/ChangeLog:1.32 rtems/c/src/lib/libbsp/arm/smdk2410/ChangeLog:1.33
--- rtems/c/src/lib/libbsp/arm/smdk2410/ChangeLog:1.32	Fri Feb 11 05:48:22 2011
+++ rtems/c/src/lib/libbsp/arm/smdk2410/ChangeLog	Tue Oct 18 13:24:13 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am: Modifications to add dynamic tables for libchip serial
+	drivers.
+
 2011-02-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* startup/bspreset.c:

diff -u rtems/c/src/lib/libbsp/arm/smdk2410/Makefile.am:1.16 rtems/c/src/lib/libbsp/arm/smdk2410/Makefile.am:1.17
--- rtems/c/src/lib/libbsp/arm/smdk2410/Makefile.am:1.16	Fri Apr 30 08:54:08 2010
+++ rtems/c/src/lib/libbsp/arm/smdk2410/Makefile.am	Tue Oct 18 13:24:13 2011
@@ -39,7 +39,10 @@
     ../../shared/bsppredriverhook.c ../../shared/bspgetworkarea.c \
     ../../shared/gnatinstallhandler.c
 # console
-libbsp_a_SOURCES += ../gp32/console/uart.c ../../shared/console.c
+libbsp_a_SOURCES += ../gp32/console/uart.c ../../shared/console.c \
+    ../../shared/console_select.c \
+    ../../shared/console_read.c ../../shared/console_write.c \
+    ../../shared/console_control.c
 # IRQ
 include_bsp_HEADERS += ../../shared/include/irq-generic.h \
 	../../shared/include/irq-info.h

diff -u rtems/c/src/lib/libbsp/sparc64/niagara/ChangeLog:1.8 rtems/c/src/lib/libbsp/sparc64/niagara/ChangeLog:1.9
--- rtems/c/src/lib/libbsp/sparc64/niagara/ChangeLog:1.8	Mon Jun 20 05:30:39 2011
+++ rtems/c/src/lib/libbsp/sparc64/niagara/ChangeLog	Tue Oct 18 13:28:37 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am: Modifications to add dynamic tables for libchip serial
+	drivers.
+
 2011-06-20	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* Makefile.am: Don't reference non-existing files.

diff -u rtems/c/src/lib/libbsp/sparc64/niagara/Makefile.am:1.2 rtems/c/src/lib/libbsp/sparc64/niagara/Makefile.am:1.3
--- rtems/c/src/lib/libbsp/sparc64/niagara/Makefile.am:1.2	Mon Jun 20 05:30:38 2011
+++ rtems/c/src/lib/libbsp/sparc64/niagara/Makefile.am	Tue Oct 18 13:28:37 2011
@@ -63,7 +63,9 @@
 #clock_SOURCES = ../../shared/clock_driver_simidle.c
 clock_SOURCES = ../shared/clock/ckinit.c
 
-console_SOURCES = ../../shared/console.c  ../shared/console/conscfg.c
+console_SOURCES = ../../shared/console.c  ../shared/console/conscfg.c \
+    ../../shared/console_select.c ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 
 timer_SOURCES = ../../shared/timerstub.c
 

diff -u rtems/c/src/lib/libbsp/sparc64/usiii/ChangeLog:1.9 rtems/c/src/lib/libbsp/sparc64/usiii/ChangeLog:1.10
--- rtems/c/src/lib/libbsp/sparc64/usiii/ChangeLog:1.9	Thu Oct  6 11:44:56 2011
+++ rtems/c/src/lib/libbsp/sparc64/usiii/ChangeLog	Tue Oct 18 13:27:51 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am: Modifications to add dynamic tables for libchip serial
+	drivers.
+
 2011-10-06	Gedare Bloom <giddyup44 at yahoo.com>
 
 	PR 1919/bsp

diff -u rtems/c/src/lib/libbsp/sparc64/usiii/Makefile.am:1.3 rtems/c/src/lib/libbsp/sparc64/usiii/Makefile.am:1.4
--- rtems/c/src/lib/libbsp/sparc64/usiii/Makefile.am:1.3	Thu Oct  6 11:44:56 2011
+++ rtems/c/src/lib/libbsp/sparc64/usiii/Makefile.am	Tue Oct 18 13:27:51 2011
@@ -114,7 +114,9 @@
 #clock_SOURCES = ../../shared/clock_driver_simidle.c
 clock_SOURCES = ../shared/clock/ckinit.c
 
-console_SOURCES = ../../shared/console.c  ../shared/console/conscfg.c
+console_SOURCES = ../../shared/console.c  ../shared/console/conscfg.c \
+    ../../shared/console_select.c  ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 
 timer_SOURCES = ../../shared/timerstub.c
 


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* shared/console/conscfg.c: Modifications to add dynamic tables for
	libchip serial drivers.

M   1.13  c/src/lib/libbsp/sparc64/ChangeLog
M    1.4  c/src/lib/libbsp/sparc64/shared/console/conscfg.c

diff -u rtems/c/src/lib/libbsp/sparc64/ChangeLog:1.12 rtems/c/src/lib/libbsp/sparc64/ChangeLog:1.13
--- rtems/c/src/lib/libbsp/sparc64/ChangeLog:1.12	Thu Oct  6 11:46:36 2011
+++ rtems/c/src/lib/libbsp/sparc64/ChangeLog	Tue Oct 18 13:29:18 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* shared/console/conscfg.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-10-06	Gedare Bloom <giddyup44 at yahoo.com>
 
 	PR 1920/bsp

diff -u rtems/c/src/lib/libbsp/sparc64/shared/console/conscfg.c:1.3 rtems/c/src/lib/libbsp/sparc64/shared/console/conscfg.c:1.4
--- rtems/c/src/lib/libbsp/sparc64/shared/console/conscfg.c:1.3	Mon Mar 21 03:21:41 2011
+++ rtems/c/src/lib/libbsp/sparc64/shared/console/conscfg.c	Tue Oct 18 13:29:18 2011
@@ -67,7 +67,7 @@
 };
 
 
-console_tbl     Console_Port_Tbl[] = {
+console_tbl     Console_Configuration_Ports[] = {
 {
    NULL,                                   /* sDeviceName */
    SERIAL_CUSTOM,                    	   /* deviceType */
@@ -97,11 +97,7 @@
 
 #define NUM_CONSOLE_PORTS 1
 
-unsigned long  Console_Port_Count = NUM_CONSOLE_PORTS;
-
-console_data  Console_Port_Data[NUM_CONSOLE_PORTS];
-
-rtems_device_minor_number  Console_Port_Minor;
+unsigned long  Console_Configuration_Count = NUM_CONSOLE_PORTS;
 
 
 /* putchar/getchar for printk */


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/erc32_console.c: Modifications to add dynamic
	tables for libchip serial drivers.

M  1.170  c/src/lib/libbsp/sparc/erc32/ChangeLog
M   1.59  c/src/lib/libbsp/sparc/erc32/Makefile.am
M    1.4  c/src/lib/libbsp/sparc/erc32/console/erc32_console.c

diff -u rtems/c/src/lib/libbsp/sparc/erc32/ChangeLog:1.169 rtems/c/src/lib/libbsp/sparc/erc32/ChangeLog:1.170
--- rtems/c/src/lib/libbsp/sparc/erc32/ChangeLog:1.169	Sun Jun 19 01:49:20 2011
+++ rtems/c/src/lib/libbsp/sparc/erc32/ChangeLog	Tue Oct 18 13:30:22 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/erc32_console.c: Modifications to add dynamic
+	tables for libchip serial drivers.
+
 2011-06-19	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* Makefile.am: Fix broken path to clockdrv_shell.h.

diff -u rtems/c/src/lib/libbsp/sparc/erc32/Makefile.am:1.58 rtems/c/src/lib/libbsp/sparc/erc32/Makefile.am:1.59
--- rtems/c/src/lib/libbsp/sparc/erc32/Makefile.am:1.58	Sun Jun 19 01:49:20 2011
+++ rtems/c/src/lib/libbsp/sparc/erc32/Makefile.am	Tue Oct 18 13:30:22 2011
@@ -44,7 +44,9 @@
 # gnatsupp
 libbsp_a_SOURCES += gnatsupp/gnatsupp.c ../../sparc/shared/gnatcommon.c
 # console
-libbsp_a_SOURCES += console/erc32_console.c ../../shared/console.c
+libbsp_a_SOURCES += console/erc32_console.c ../../shared/console.c \
+    ../../shared/console_select.c  ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 # debugio
 libbsp_a_SOURCES += console/debugputs.c
 # clock

diff -u rtems/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c:1.3 rtems/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c:1.4
--- rtems/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c:1.3	Thu Mar  3 08:03:41 2011
+++ rtems/c/src/lib/libbsp/sparc/erc32/console/erc32_console.c	Tue Oct 18 13:30:22 2011
@@ -58,8 +58,6 @@
 #endif
 static void erc32_console_initialize(int minor);
 
-rtems_device_minor_number Console_Port_Minor = 0;
-
 #if (CONSOLE_USE_INTERRUPTS)
   console_fns erc32_fns = {
     libchip_serial_default_probe,           /* deviceProbe */
@@ -86,7 +84,7 @@
   };
 #endif
 
-console_tbl Console_Port_Tbl [] = {
+console_tbl Console_Configuration_Ports [] = {
   {
     .sDeviceName = "/dev/console_a",
     .deviceType = SERIAL_CUSTOM,
@@ -130,9 +128,7 @@
 /* always exactly two uarts for erc32 */
 #define ERC32_UART_COUNT (2)
 
-unsigned long Console_Port_Count = ERC32_UART_COUNT;
-
-console_data Console_Port_Data [ERC32_UART_COUNT];
+unsigned long Console_Configuration_Count = ERC32_UART_COUNT;
 
 static int erc32_console_first_open(int major, int minor, void *arg)
 {
@@ -143,7 +139,7 @@
   
   rtems_libio_open_close_args_t *oca = arg;
   struct rtems_termios_tty *tty = oca->iop->data1;
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   console_data *cd = &Console_Port_Data [minor];
   
   cd->termios_data = tty;


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* console/config.c: Modifications to add dynamic tables for libchip
	serial drivers.

M  1.126  c/src/lib/libbsp/sh/gensh2/ChangeLog
M    1.5  c/src/lib/libbsp/sh/gensh2/console/config.c

diff -u rtems/c/src/lib/libbsp/sh/gensh2/ChangeLog:1.125 rtems/c/src/lib/libbsp/sh/gensh2/ChangeLog:1.126
--- rtems/c/src/lib/libbsp/sh/gensh2/ChangeLog:1.125	Wed Feb  2 09:00:28 2011
+++ rtems/c/src/lib/libbsp/sh/gensh2/ChangeLog	Tue Oct 18 13:31:09 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* console/config.c: Modifications to add dynamic tables for libchip
+	serial drivers.
+
 2011-02-02	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* configure.ac: Require autoconf-2.68, automake-1.11.1.

diff -u rtems/c/src/lib/libbsp/sh/gensh2/console/config.c:1.4 rtems/c/src/lib/libbsp/sh/gensh2/console/config.c:1.5
--- rtems/c/src/lib/libbsp/sh/gensh2/console/config.c:1.4	Wed Apr 21 11:01:46 2004
+++ rtems/c/src/lib/libbsp/sh/gensh2/console/config.c	Tue Oct 18 13:31:09 2011
@@ -80,7 +80,7 @@
     { 0 }
 };
 
-console_tbl	Console_Port_Tbl[] = {
+console_tbl	Console_Configuration_Ports[] = {
     {
         "/dev/sci0",            /* sDeviceName */
         SERIAL_CUSTOM,          /* deviceType */
@@ -125,10 +125,6 @@
  *  Declare some information used by the console driver
  */
 
-#define NUM_CONSOLE_PORTS (sizeof(Console_Port_Tbl)/sizeof(console_tbl))
+#define NUM_CONSOLE_PORTS (sizeof(Console_Configuration_Ports)/sizeof(console_tbl))
 
-unsigned long  Console_Port_Count =  NUM_CONSOLE_PORTS;
-
-console_data  Console_Port_Data[NUM_CONSOLE_PORTS];
-
-rtems_device_minor_number  Console_Port_Minor;
+unsigned long  Console_Configuration_Count =  NUM_CONSOLE_PORTS;


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/console-config.c, console/uart-bridge-master.c,
	console/uart-bridge-slave.c, startup/bspstart.c: Modifications to add
	dynamic tables for libchip serial drivers.

M    1.3  c/src/lib/libbsp/powerpc/qoriq/ChangeLog
M    1.3  c/src/lib/libbsp/powerpc/qoriq/Makefile.am
M    1.2  c/src/lib/libbsp/powerpc/qoriq/console/console-config.c
M    1.2  c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c
M    1.2  c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c
M    1.2  c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/ChangeLog:1.2 rtems/c/src/lib/libbsp/powerpc/qoriq/ChangeLog:1.3
--- rtems/c/src/lib/libbsp/powerpc/qoriq/ChangeLog:1.2	Wed Aug 31 10:55:51 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/ChangeLog	Tue Oct 18 13:32:22 2011
@@ -1,3 +1,10 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/console-config.c, console/uart-bridge-master.c,
+	console/uart-bridge-slave.c, startup/bspstart.c: Modifications to add
+	dynamic tables for libchip serial drivers.
+
 2011-08-31	Sebastian Huber <sebastian.huber at embedded-brains.de>
 
 	* startup/linkcmds.base: Removed file.

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/Makefile.am:1.2 rtems/c/src/lib/libbsp/powerpc/qoriq/Makefile.am:1.3
--- rtems/c/src/lib/libbsp/powerpc/qoriq/Makefile.am:1.2	Wed Aug 31 10:55:51 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/Makefile.am	Tue Oct 18 13:32:22 2011
@@ -94,9 +94,14 @@
 
 # Console
 libbsp_a_SOURCES += ../../shared/console.c \
+        ../../shared/console_select.c \
 	console/uart-bridge-master.c \
 	console/uart-bridge-slave.c \
-	console/console-config.c
+	console/console-config.c \
+        ../../shared/console_read.c \
+        ../../shared/console_write.c \
+        ../../shared/console_control.c
+
 
 # RTC
 libbsp_a_SOURCES += ../../shared/tod.c \

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/console/console-config.c:1.1 rtems/c/src/lib/libbsp/powerpc/qoriq/console/console-config.c:1.2
--- rtems/c/src/lib/libbsp/powerpc/qoriq/console/console-config.c:1.1	Thu Jul 21 10:18:00 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/console/console-config.c	Tue Oct 18 13:32:22 2011
@@ -28,6 +28,7 @@
 
 #include <libchip/serial.h>
 #include <libchip/ns16550.h>
+#include "../../../shared/console_private.h"
 
 #include <bspopts.h>
 #include <bsp/irq.h>
@@ -116,13 +117,8 @@
   }
 #endif
 
-unsigned long Console_Port_Count = CONSOLE_COUNT;
-
-rtems_device_minor_number Console_Port_Minor;
-
-console_data Console_Port_Data [CONSOLE_COUNT];
-
-console_tbl Console_Port_Tbl [CONSOLE_COUNT] = {
+unsigned long Console_Configuration_Count = CONSOLE_COUNT;
+console_tbl Console_Configuration_Ports [CONSOLE_COUNT] = {
   #if QORIQ_UART_0_ENABLE
     {
       .sDeviceName = "/dev/ttyS0",
@@ -193,7 +189,7 @@
 
 static void output_char(char c)
 {
-  const console_fns *con = Console_Port_Tbl [Console_Port_Minor].pDeviceFns;
+  const console_fns *con = Console_Port_Tbl [Console_Port_Minor]->pDeviceFns;
   
   if (c == '\n') {
     con->deviceWritePolled((int) Console_Port_Minor, '\r');

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c:1.1 rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c:1.2
--- rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c:1.1	Thu Jul 21 10:18:00 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-master.c	Tue Oct 18 13:32:23 2011
@@ -150,7 +150,7 @@
 
 static void initialize(int minor)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl [minor];
   uart_bridge_master_control *control = ct->pDeviceParams;
   intercom_type type = control->type;
 

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c:1.1 rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c:1.2
--- rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c:1.1	Thu Jul 21 10:18:00 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/console/uart-bridge-slave.c	Tue Oct 18 13:32:23 2011
@@ -129,7 +129,7 @@
 {
   rtems_libio_open_close_args_t *oc = (rtems_libio_open_close_args_t *) arg;
   struct rtems_termios_tty *tty = (struct rtems_termios_tty *) oc->iop->data1;
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl[minor];
   console_data *cd = &Console_Port_Data [minor];
   uart_bridge_slave_control *control = ct->pDeviceParams;
   intercom_type type = control->type;
@@ -145,7 +145,7 @@
 
 static int last_close(int major, int minor, void *arg)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl[minor];
   uart_bridge_slave_control *control = ct->pDeviceParams;
 
   qoriq_intercom_service_remove(control->type);
@@ -156,7 +156,7 @@
 static ssize_t write_with_interrupts(int minor, const char *buf, size_t len)
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl[minor];
   uart_bridge_slave_control *control = ct->pDeviceParams;
   intercom_packet *packet = qoriq_intercom_allocate_packet(
     control->type,
@@ -183,7 +183,7 @@
 
 static void write_polled(int minor, char c)
 {
-  console_tbl *ct = &Console_Port_Tbl [minor];
+  console_tbl *ct = Console_Port_Tbl[minor];
   uart_bridge_slave_control *control = ct->pDeviceParams;
   intercom_packet *packet = qoriq_intercom_allocate_packet(
     control->type,

diff -u rtems/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c:1.1 rtems/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c:1.2
--- rtems/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c:1.1	Thu Jul 21 10:18:01 2011
+++ rtems/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c	Tue Oct 18 13:32:23 2011
@@ -95,7 +95,7 @@
 
   /* Initialize some console parameters */
   for (i = 0; i < Console_Port_Count; ++i) {
-    console_tbl *ct = &Console_Port_Tbl [i];
+    console_tbl *ct = &Console_Configuration_Ports[i];
 
     ct->ulClock = BSP_bus_frequency;
 


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/console-config.c, startup/bspstart.c:
	Modifications to add dynamic tables for libchip serial drivers.

M  1.108  c/src/lib/libbsp/powerpc/gen83xx/ChangeLog
M   1.35  c/src/lib/libbsp/powerpc/gen83xx/Makefile.am
M    1.4  c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c
M   1.33  c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c

diff -u rtems/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog:1.107 rtems/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog:1.108
--- rtems/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog:1.107	Mon Sep 26 05:08:29 2011
+++ rtems/c/src/lib/libbsp/powerpc/gen83xx/ChangeLog	Tue Oct 18 13:32:48 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/console-config.c, startup/bspstart.c:
+	Modifications to add dynamic tables for libchip serial drivers.
+
 2011-09-27	Sebastian Huber <sebastian.huber at embedded-brains.de>
 
 	* make/custom/mpc8309som.cfg, startup/linkcmds.mpc8309som: New file.

diff -u rtems/c/src/lib/libbsp/powerpc/gen83xx/Makefile.am:1.34 rtems/c/src/lib/libbsp/powerpc/gen83xx/Makefile.am:1.35
--- rtems/c/src/lib/libbsp/powerpc/gen83xx/Makefile.am:1.34	Mon Sep 26 05:08:29 2011
+++ rtems/c/src/lib/libbsp/powerpc/gen83xx/Makefile.am	Tue Oct 18 13:32:49 2011
@@ -84,7 +84,11 @@
 
 # console
 libbsp_a_SOURCES += ../../shared/console.c \
-	console/console-config.c
+        ../../shared/console_select.c \
+	console/console-config.c \
+        ../../shared/console_read.c \
+        ../../shared/console_write.c \
+        ../../shared/console_control.c
 # bsp_i2c
 libbsp_a_SOURCES += i2c/i2c_init.c
 # bsp_spi

diff -u rtems/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c:1.3 rtems/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c:1.4
--- rtems/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c:1.3	Mon Sep 26 05:08:29 2011
+++ rtems/c/src/lib/libbsp/powerpc/gen83xx/console/console-config.c	Tue Oct 18 13:32:49 2011
@@ -24,6 +24,7 @@
 
 #include <libchip/serial.h>
 #include <libchip/ns16550.h>
+#include "../../../shared/console_private.h"
 
 #include <mpc83xx/mpc83xx.h>
 
@@ -56,13 +57,9 @@
   reg [i] = val; 
 }
 
-unsigned long Console_Port_Count = PORT_COUNT;
+unsigned long Console_Configuration_Count = PORT_COUNT;
 
-rtems_device_minor_number Console_Port_Minor = 0;
-
-console_data Console_Port_Data [PORT_COUNT];
-
-console_tbl Console_Port_Tbl [PORT_COUNT] = {
+console_tbl Console_Configuration_Ports [PORT_COUNT] = {
   {
     .sDeviceName = "/dev/ttyS0",
     .deviceType = SERIAL_NS16550,
@@ -115,7 +112,7 @@
 
 static void gen83xx_output_char(char c)
 {
-  const console_fns *console = Console_Port_Tbl [Console_Port_Minor].pDeviceFns;
+  const console_fns *console = Console_Port_Tbl [Console_Port_Minor]->pDeviceFns;
   
   if (c == '\n') {
     console->deviceWritePolled((int) Console_Port_Minor, '\r');

diff -u rtems/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c:1.32 rtems/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c:1.33
--- rtems/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c:1.32	Tue Jun  7 08:34:30 2011
+++ rtems/c/src/lib/libbsp/powerpc/gen83xx/startup/bspstart.c	Tue Oct 18 13:32:49 2011
@@ -121,10 +121,10 @@
 
   /* Initialize some console parameters */
   for (i = 0; i < Console_Port_Count; ++i) {
-    Console_Port_Tbl [i].ulClock = BSP_bus_frequency;
+    Console_Configuration_Ports [i].ulClock = BSP_bus_frequency;
 
     #ifdef HAS_UBOOT
-      Console_Port_Tbl [i].pDeviceParams =
+      Console_Configuration_Ports [i].pDeviceParams =
         (void *) bsp_uboot_board_info.bi_baudrate;
     #endif
   }


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, preinstall.am, console/config.c, console/mc68360_scc.c,
	console/ns16550cfg.c, console/printk_support.c: Modifications to add
	dynamic tables for libchip serial drivers.

M   1.98  c/src/lib/libbsp/powerpc/ep1a/ChangeLog
M   1.35  c/src/lib/libbsp/powerpc/ep1a/Makefile.am
M   1.10  c/src/lib/libbsp/powerpc/ep1a/console/config.c
M    1.7  c/src/lib/libbsp/powerpc/ep1a/console/mc68360_scc.c
M    1.7  c/src/lib/libbsp/powerpc/ep1a/console/ns16550cfg.c
M    1.2  c/src/lib/libbsp/powerpc/ep1a/console/printk_support.c
M   1.14  c/src/lib/libbsp/powerpc/ep1a/preinstall.am

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/ChangeLog:1.97 rtems/c/src/lib/libbsp/powerpc/ep1a/ChangeLog:1.98
--- rtems/c/src/lib/libbsp/powerpc/ep1a/ChangeLog:1.97	Wed Aug 24 04:51:30 2011
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/ChangeLog	Tue Oct 18 13:33:03 2011
@@ -1,3 +1,10 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, preinstall.am, console/config.c, console/mc68360_scc.c,
+	console/ns16550cfg.c, console/printk_support.c: Modifications to add
+	dynamic tables for libchip serial drivers.
+
 2011-08-24	Sebastian Huber <sebastian.huber at embedded-brains.de>
 
 	* console/polled_io.c: Update due to API changes.

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/Makefile.am:1.34 rtems/c/src/lib/libbsp/powerpc/ep1a/Makefile.am:1.35
--- rtems/c/src/lib/libbsp/powerpc/ep1a/Makefile.am:1.34	Tue Aug 23 13:06:08 2011
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/Makefile.am	Tue Oct 18 13:33:03 2011
@@ -48,13 +48,17 @@
     ../../powerpc/shared/motorola/motorola.h \
     ../../powerpc/shared/residual/residual.h \
     ../../powerpc/shared/residual/pnp.h \
-    ../../powerpc/shared/console/consoleIo.h console/rsPMCQ1.h
+    ../../powerpc/shared/console/consoleIo.h console/rsPMCQ1.h \
+    ../../shared/console_private.h
+
 # console
-libbsp_a_SOURCES += ../../shared/console.c console/ns16550cfg.c \
+libbsp_a_SOURCES += console/ns16550cfg.c \
     console/mc68360_scc.c console/rsPMCQ1.c console/alloc360.c \
     console/init68360.c console/config.c console/printk_support.c \
-    console/config.c
-
+    ../../shared/console.c ../../shared/console_select.c \
+    ../../shared/console_read.c ../../shared/console_write.c \
+    ../../shared/console_control.c
+ 
 include_bsp_HEADERS += ../../powerpc/shared/openpic/openpic.h
 # openpic
 libbsp_a_SOURCES += ../../powerpc/shared/openpic/openpic.h \

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/console/config.c:1.9 rtems/c/src/lib/libbsp/powerpc/ep1a/console/config.c:1.10
--- rtems/c/src/lib/libbsp/powerpc/ep1a/console/config.c:1.9	Tue Aug 23 13:06:08 2011
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/console/config.c	Tue Oct 18 13:33:04 2011
@@ -81,7 +81,7 @@
  * ulIntVector	This encodes the interrupt vector of the device.
  *
  */
-console_tbl	Console_Port_Tbl[] = {
+console_tbl	Console_Configuration_Ports[] = {
         /*
          *  NS16550 Chips provide first COM1 and COM2 Ports.
          */
@@ -363,12 +363,12 @@
         }
 };
 
-/* rtems console uses the following minor number */
-rtems_device_minor_number  Console_Port_Minor = 0;
-
-#define NUM_CONSOLE_PORTS (sizeof(Console_Port_Tbl)/sizeof(console_tbl))
-unsigned long	Console_Port_Count = NUM_CONSOLE_PORTS;
-console_data    Console_Port_Data[NUM_CONSOLE_PORTS];
+/* 
+ *  Define a variable that contains the number of statically configured
+ *  console devices.
+ */
+unsigned long  Console_Configuration_Count = \
+    (sizeof(Console_Configuration_Ports)/sizeof(console_tbl));
 
 static bool config_68360_scc_base_probe(int minor, unsigned long busNo, unsigned long slotNo, int channel)
 {
@@ -386,7 +386,7 @@
   if (!chip)
     return false;
 
-  Console_Port_Tbl[minor].pDeviceParams = &chip->port[ channel-1 ];
+  Console_Port_Tbl[minor]->pDeviceParams = &chip->port[ channel-1 ];
   chip->port[ channel-1 ].minor         = minor;
   return true;
 }

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/console/mc68360_scc.c:1.6 rtems/c/src/lib/libbsp/powerpc/ep1a/console/mc68360_scc.c:1.7
--- rtems/c/src/lib/libbsp/powerpc/ep1a/console/mc68360_scc.c:1.6	Thu Dec 17 02:42:16 2009
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/console/mc68360_scc.c	Tue Oct 18 13:33:04 2011
@@ -48,7 +48,7 @@
 M68360_t    M68360_chips = NULL;
 
 #define SYNC     eieio
-#define mc68360_scc_Is_422( _minor ) (Console_Port_Tbl[minor].sDeviceName[7] == '4' )
+#define mc68360_scc_Is_422( _minor ) (Console_Port_Tbl[minor]->sDeviceName[7] == '4' )
 
 
 void mc68360_scc_nullFunc(void) {}
@@ -147,7 +147,7 @@
 
 void mc68360_sccShow_Regs(int minor){
   M68360_serial_ports_t  ptr;
-  ptr   = Console_Port_Tbl[minor].pDeviceParams;
+  ptr   = Console_Port_Tbl[minor]->pDeviceParams;
 
   printk( "scce 0x%08x", &ptr->pSCCR->scce );
   printk( " 0x%04x\n", ptr->pSCCR->scce );
@@ -343,7 +343,7 @@
 #endif
 
 
-  ptr   = Console_Port_Tbl[minor].pDeviceParams;
+  ptr   = Console_Port_Tbl[minor]->pDeviceParams;
   m360  = ptr->chip->m360;
 
   /*
@@ -402,11 +402,11 @@
 
 #ifdef DEBUG_360
   printk("mc68360_scc_initialize_interrupts: minor %d\n", minor );
-  printk("Console_Port_Tbl[minor].pDeviceParams 0x%08x\n",
-    Console_Port_Tbl[minor].pDeviceParams );
+  printk("Console_Port_Tbl[minor]->pDeviceParams 0x%08x\n",
+    Console_Port_Tbl[minor]->pDeviceParams );
 #endif
 
-  ptr   = Console_Port_Tbl[minor].pDeviceParams;
+  ptr   = Console_Port_Tbl[minor]->pDeviceParams;
   m360  = ptr->chip->m360;
 
 #ifdef DEBUG_360
@@ -671,7 +671,7 @@
     mc68360_length_count=0;
 #endif
 
-  ptr   = Console_Port_Tbl[minor].pDeviceParams;
+  ptr   = Console_Port_Tbl[minor]->pDeviceParams;
 
   /*
    *  We are using interrupt driven output and termios only sends us
@@ -744,7 +744,7 @@
 printk("mc68360_scc_set_attributes\n");
 #endif
 
-   ptr   = Console_Port_Tbl[minor].pDeviceParams;
+   ptr   = Console_Port_Tbl[minor]->pDeviceParams;
    m360  = ptr->chip->m360;
 
    switch (t->c_cflag & CBAUD)

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/console/ns16550cfg.c:1.6 rtems/c/src/lib/libbsp/powerpc/ep1a/console/ns16550cfg.c:1.7
--- rtems/c/src/lib/libbsp/powerpc/ep1a/console/ns16550cfg.c:1.6	Fri Feb 11 06:44:30 2011
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/console/ns16550cfg.c	Tue Oct 18 13:33:04 2011
@@ -12,8 +12,9 @@
  */
 
 #include <rtems.h>
+#include <libchip/serial.h>
+#include <libchip/ns16550.h>
 #include <bsp.h>
-#include "console.h"
 
 typedef struct uart_reg
 {

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/console/printk_support.c:1.1 rtems/c/src/lib/libbsp/powerpc/ep1a/console/printk_support.c:1.2
--- rtems/c/src/lib/libbsp/powerpc/ep1a/console/printk_support.c:1.1	Tue Aug 23 13:06:08 2011
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/console/printk_support.c	Tue Oct 18 13:33:04 2011
@@ -16,10 +16,10 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <termios.h>
-
-#include "console.h"
 #include <rtems/bspIo.h>
 
+rtems_device_minor_number         BSPPrintkPort = 0;
+
 /* const char arg to be compatible with BSP_output_char decl. */
 void
 debug_putc_onlcr(const char c)

diff -u rtems/c/src/lib/libbsp/powerpc/ep1a/preinstall.am:1.13 rtems/c/src/lib/libbsp/powerpc/ep1a/preinstall.am:1.14
--- rtems/c/src/lib/libbsp/powerpc/ep1a/preinstall.am:1.13	Fri Oct 23 02:32:44 2009
+++ rtems/c/src/lib/libbsp/powerpc/ep1a/preinstall.am	Tue Oct 18 13:33:03 2011
@@ -93,6 +93,10 @@
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/rsPMCQ1.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/rsPMCQ1.h
 
+$(PROJECT_INCLUDE)/bsp/console_private.h: ../../shared/console_private.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/console_private.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/console_private.h
+
 $(PROJECT_INCLUDE)/bsp/openpic.h: ../../powerpc/shared/openpic/openpic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/openpic.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/openpic.h


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/consolelite.c: Modifications to add dynamic
	tables for libchip serial drivers.

M   1.63  c/src/lib/libbsp/powerpc/virtex/ChangeLog
M   1.19  c/src/lib/libbsp/powerpc/virtex/Makefile.am
M    1.5  c/src/lib/libbsp/powerpc/virtex/console/consolelite.c

diff -u rtems/c/src/lib/libbsp/powerpc/virtex/ChangeLog:1.62 rtems/c/src/lib/libbsp/powerpc/virtex/ChangeLog:1.63
--- rtems/c/src/lib/libbsp/powerpc/virtex/ChangeLog:1.62	Sat Jun 18 02:23:22 2011
+++ rtems/c/src/lib/libbsp/powerpc/virtex/ChangeLog	Tue Oct 18 13:34:01 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/consolelite.c: Modifications to add dynamic
+	tables for libchip serial drivers.
+
 2011-06-18	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* Makefile.am: Remove references to non-existing files.

diff -u rtems/c/src/lib/libbsp/powerpc/virtex/Makefile.am:1.18 rtems/c/src/lib/libbsp/powerpc/virtex/Makefile.am:1.19
--- rtems/c/src/lib/libbsp/powerpc/virtex/Makefile.am:1.18	Sat Jun 18 02:23:22 2011
+++ rtems/c/src/lib/libbsp/powerpc/virtex/Makefile.am	Tue Oct 18 13:34:02 2011
@@ -43,8 +43,9 @@
 # dlentry
 libbsp_a_SOURCES += dlentry/dlentry.S
 # bspconsole
-libbsp_a_SOURCES += console/consolelite.c ../../shared/console.c
-
+libbsp_a_SOURCES += console/consolelite.c ../../shared/console.c \
+    ../../shared/console_select.c ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c 
 include_bsp_HEADERS = include/opbintctrl.h
 # opbintctrl
 libbsp_a_SOURCES += opbintctrl/opbintctrl.c

diff -u rtems/c/src/lib/libbsp/powerpc/virtex/console/consolelite.c:1.4 rtems/c/src/lib/libbsp/powerpc/virtex/console/consolelite.c:1.5
--- rtems/c/src/lib/libbsp/powerpc/virtex/console/consolelite.c:1.4	Sun May 23 00:42:35 2010
+++ rtems/c/src/lib/libbsp/powerpc/virtex/console/consolelite.c	Tue Oct 18 13:34:02 2011
@@ -121,7 +121,7 @@
 
 void xlite_init (int minor )
 {
-   uint32_t base = Console_Port_Tbl[minor].ulCtrlPort1;
+   uint32_t base = Console_Port_Tbl[minor]->ulCtrlPort1;
 
    /* clear status register */
    *((volatile uint32_t*)(base+STAT_REG)) = 0;
@@ -137,7 +137,7 @@
   void    *arg
 )
 {
-   uint32_t base = Console_Port_Tbl[minor].ulCtrlPort1;
+   uint32_t base = Console_Port_Tbl[minor]->ulCtrlPort1;
 
    /* the lite uarts have hardcoded baud & serial parms so no port
     * conditioning is needed.  We're running polled so no interrupt
@@ -167,7 +167,7 @@
 
 int xlite_read_polled (int minor )
 {
-   uint32_t base = Console_Port_Tbl[minor].ulCtrlPort1;
+   uint32_t base = Console_Port_Tbl[minor]->ulCtrlPort1;
 
    unsigned int status = xlite_uart_status(base);
 
@@ -186,7 +186,7 @@
   size_t      len
 )
 {
-   uint32_t base = Console_Port_Tbl[minor].ulCtrlPort1;
+   uint32_t base = Console_Port_Tbl[minor]->ulCtrlPort1;
    int nwrite = 0;
 
    /*
@@ -210,7 +210,7 @@
   char  c
 )
 {
-   uint32_t base = Console_Port_Tbl[minor].ulCtrlPort1;
+   uint32_t base = Console_Port_Tbl[minor]->ulCtrlPort1;
    xlite_write_char(base, c);
    return;
 }
@@ -251,7 +251,7 @@
 */
 
 
-console_tbl     Console_Port_Tbl[] = {
+console_tbl     Console_Configuration_Ports[] = {
 {
   "/dev/ttyS0",                             /* sDeviceName */
    SERIAL_CUSTOM,                           /* deviceType */
@@ -333,17 +333,10 @@
 
 
 
-#define NUM_CONSOLE_PORTS (sizeof(Console_Port_Tbl)/sizeof(console_tbl))
-
-unsigned long			Console_Port_Count = NUM_CONSOLE_PORTS;
-console_data			Console_Port_Data[NUM_CONSOLE_PORTS];
-rtems_device_minor_number	Console_Port_Minor;
-
-
-
-
-
+#define NUM_CONSOLE_PORTS \
+  (sizeof(Console_Configuration_Ports)/sizeof(console_tbl))
 
+unsigned long Console_Configuration_Count = NUM_CONSOLE_PORTS;
 
 
 #include <rtems/bspIo.h>


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* Makefile.am, console/conscfg.c: Modifications to add dynamic tables
	for libchip serial drivers.

M  1.115  c/src/lib/libbsp/m68k/sim68000/ChangeLog
M   1.37  c/src/lib/libbsp/m68k/sim68000/Makefile.am
M    1.8  c/src/lib/libbsp/m68k/sim68000/console/conscfg.c
M  1.135  c/src/lib/libbsp/mips/genmongoosev/ChangeLog
M   1.40  c/src/lib/libbsp/mips/genmongoosev/Makefile.am
M   1.10  c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c

diff -u rtems/c/src/lib/libbsp/m68k/sim68000/ChangeLog:1.114 rtems/c/src/lib/libbsp/m68k/sim68000/ChangeLog:1.115
--- rtems/c/src/lib/libbsp/m68k/sim68000/ChangeLog:1.114	Fri Feb 11 06:34:24 2011
+++ rtems/c/src/lib/libbsp/m68k/sim68000/ChangeLog	Tue Oct 18 13:35:25 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/conscfg.c: Modifications to add dynamic tables
+	for libchip serial drivers.
+
 2011-02-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* include/bsp.h:

diff -u rtems/c/src/lib/libbsp/m68k/sim68000/Makefile.am:1.36 rtems/c/src/lib/libbsp/m68k/sim68000/Makefile.am:1.37
--- rtems/c/src/lib/libbsp/m68k/sim68000/Makefile.am:1.36	Thu Oct  2 16:39:02 2008
+++ rtems/c/src/lib/libbsp/m68k/sim68000/Makefile.am	Tue Oct 18 13:35:25 2011
@@ -40,7 +40,9 @@
 # clock
 libbsp_a_SOURCES += clock/clockdrv.c ../../../shared/clockdrv_shell.h
 # console
-libbsp_a_SOURCES += console/conscfg.c ../../shared/console.c
+libbsp_a_SOURCES += console/conscfg.c ../../shared/console.c \
+    ../../shared/console_select.c ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 # debugio
 libbsp_a_SOURCES += console/debugio.c
 # timer

diff -u rtems/c/src/lib/libbsp/m68k/sim68000/console/conscfg.c:1.7 rtems/c/src/lib/libbsp/m68k/sim68000/console/conscfg.c:1.8
--- rtems/c/src/lib/libbsp/m68k/sim68000/console/conscfg.c:1.7	Fri Aug 28 13:20:12 2009
+++ rtems/c/src/lib/libbsp/m68k/sim68000/console/conscfg.c	Tue Oct 18 13:35:25 2011
@@ -38,7 +38,7 @@
 #define MC68681_FUNCTIONS &mc68681_fns_polled
 #endif
 
-console_tbl  Console_Port_Tbl[] = {
+console_tbl  Console_Configuration_Ports[] = {
   {
     "/dev/com0",                        /* sDeviceName */
     SERIAL_MC68681,                     /* deviceType */
@@ -64,10 +64,6 @@
  *  Declare some information used by the console driver
  */
 
-#define NUM_CONSOLE_PORTS (sizeof(Console_Port_Tbl)/sizeof(console_tbl))
+#define NUM_CONSOLE_PORTS (sizeof(Console_Configuration_Ports)/sizeof(console_tbl))
 
-unsigned long  Console_Port_Count = NUM_CONSOLE_PORTS;
-
-console_data  Console_Port_Data[NUM_CONSOLE_PORTS];
-
-rtems_device_minor_number  Console_Port_Minor;
+unsigned long  Console_Configuration_Count = NUM_CONSOLE_PORTS;

diff -u rtems/c/src/lib/libbsp/mips/genmongoosev/ChangeLog:1.134 rtems/c/src/lib/libbsp/mips/genmongoosev/ChangeLog:1.135
--- rtems/c/src/lib/libbsp/mips/genmongoosev/ChangeLog:1.134	Sun Jun 19 02:27:07 2011
+++ rtems/c/src/lib/libbsp/mips/genmongoosev/ChangeLog	Tue Oct 18 13:34:46 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* Makefile.am, console/conscfg.c: Modifications to add dynamic tables
+	for libchip serial drivers.
+
 2011-06-19	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* Makefile.am: Fix broken path to clockdrv_shell.h.

diff -u rtems/c/src/lib/libbsp/mips/genmongoosev/Makefile.am:1.39 rtems/c/src/lib/libbsp/mips/genmongoosev/Makefile.am:1.40
--- rtems/c/src/lib/libbsp/mips/genmongoosev/Makefile.am:1.39	Sun Jun 19 02:27:07 2011
+++ rtems/c/src/lib/libbsp/mips/genmongoosev/Makefile.am	Tue Oct 18 13:34:47 2011
@@ -40,7 +40,9 @@
 libbsp_a_SOURCES += clock/clockdrv.c
 libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
 # console
-libbsp_a_SOURCES += console/conscfg.c ../../shared/console.c
+libbsp_a_SOURCES += console/conscfg.c ../../shared/console.c \
+    ../../shared/console_select.c ../../shared/console_control.c \
+    ../../shared/console_read.c ../../shared/console_write.c
 # timer
 libbsp_a_SOURCES += timer/timer.c
 

diff -u rtems/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c:1.9 rtems/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c:1.10
--- rtems/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c:1.9	Wed Apr 14 03:59:02 2010
+++ rtems/c/src/lib/libbsp/mips/genmongoosev/console/conscfg.c	Tue Oct 18 13:34:47 2011
@@ -28,7 +28,7 @@
 #define MG5UART_FUNCTIONS &mg5uart_fns_polled
 #endif
 
-console_tbl     Console_Port_Tbl[] = {
+console_tbl     Console_Configuration_Ports[] = {
 {
   "/dev/com0",                             /* sDeviceName */
    SERIAL_MG5UART,                         /* deviceType */
@@ -73,13 +73,9 @@
  *  Declare some information used by the console driver
  */
 
-#define NUM_CONSOLE_PORTS (sizeof(Console_Port_Tbl)/sizeof(console_tbl))
+#define NUM_CONSOLE_PORTS (sizeof(Console_Configuration_Ports)/sizeof(console_tbl))
 
-unsigned long  Console_Port_Count = NUM_CONSOLE_PORTS;
-
-console_data  Console_Port_Data[NUM_CONSOLE_PORTS];
-
-rtems_device_minor_number  Console_Port_Minor;
+unsigned long  Console_Configuration_Count = NUM_CONSOLE_PORTS;
 
 /*
  *  printk() support that simply routes printk to stderr


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* sh7045/sci/sci_termios.c: Modifications to add dynamic tables for
	libchip serial drivers.

M   1.66  c/src/lib/libcpu/sh/ChangeLog
M    1.9  c/src/lib/libcpu/sh/sh7045/sci/sci_termios.c

diff -u rtems/c/src/lib/libcpu/sh/ChangeLog:1.65 rtems/c/src/lib/libcpu/sh/ChangeLog:1.66
--- rtems/c/src/lib/libcpu/sh/ChangeLog:1.65	Fri Feb 11 03:57:25 2011
+++ rtems/c/src/lib/libcpu/sh/ChangeLog	Tue Oct 18 13:37:32 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* sh7045/sci/sci_termios.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-02-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* sh7032/delay/delay.c, sh7032/score/cpu_asm.c,

diff -u rtems/c/src/lib/libcpu/sh/sh7045/sci/sci_termios.c:1.8 rtems/c/src/lib/libcpu/sh/sh7045/sci/sci_termios.c:1.9
--- rtems/c/src/lib/libcpu/sh/sh7045/sci/sci_termios.c:1.8	Fri Feb 11 03:57:25 2011
+++ rtems/c/src/lib/libcpu/sh/sh7045/sci/sci_termios.c	Tue Oct 18 13:37:32 2011
@@ -38,15 +38,15 @@
  * Some handy macros
  */
 #define SH_SCI_REG_DATA(_data, _minor, _register) \
- (write8(_data, Console_Port_Tbl[_minor].ulCtrlPort1 + (_register)))
+ (write8(_data, Console_Port_Tbl[_minor]->ulCtrlPort1 + (_register)))
 
 #define SH_SCI_REG_FLAG(_flag, _minor, _register) \
- (write8(read8(Console_Port_Tbl[_minor].ulCtrlPort1 + (_register)) | (_flag), \
-         Console_Port_Tbl[_minor].ulCtrlPort1 + (_register)))
+ (write8(read8(Console_Port_Tbl[_minor]->ulCtrlPort1 + (_register)) | (_flag), \
+         Console_Port_Tbl[_minor]->ulCtrlPort1 + (_register)))
 
 #define SH_SCI_REG_MASK(_flag, _minor, _register) \
- (write8(read8(Console_Port_Tbl[_minor].ulCtrlPort1 + (_register)) & ~(_flag), \
-         Console_Port_Tbl[_minor].ulCtrlPort1 + (_register)))
+ (write8(read8(Console_Port_Tbl[_minor]->ulCtrlPort1 + (_register)) & ~(_flag),\
+         Console_Port_Tbl[_minor]->ulCtrlPort1 + (_register)))
 
 /*
  * NOTE: Some SH variants have 3 sci devices
@@ -131,13 +131,13 @@
     int minor;
 
     for (minor = 0; minor < Console_Port_Count; minor++) {
-        if (Console_Port_Tbl[minor].ulIntVector == vector) {
+        if (Console_Port_Tbl[minor]->ulIntVector == vector) {
             char   temp8;
 
             /*
              * FIXME: error handling should be added
              */
-            temp8 = read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_RDR);
+            temp8 = read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_RDR);
 
             rtems_termios_enqueue_raw_characters(
                 Console_Port_Data[minor].termios_data, &temp8, 1);
@@ -158,7 +158,7 @@
     int minor;
 
     for (minor = 0; minor < Console_Port_Count; minor++) {
-        if (Console_Port_Tbl[minor].ulDataPort == vector) {
+        if (Console_Port_Tbl[minor]->ulDataPort == vector) {
             /*
              * FIXME: Error handling should be added
              */
@@ -224,7 +224,7 @@
     /*
      * Disable IRQ of SCIx
      */
-    status = sh_set_irq_priority( Console_Port_Tbl[minor].ulIntVector, 0);
+    status = sh_set_irq_priority( Console_Port_Tbl[minor]->ulIntVector, 0);
 
     if (status != RTEMS_SUCCESSFUL)
         rtems_fatal_error_occurred(status);
@@ -236,7 +236,7 @@
      */
     status = rtems_interrupt_catch(
         sh_sci_rx_isr,
-        Console_Port_Tbl[minor].ulIntVector,
+        Console_Port_Tbl[minor]->ulIntVector,
         &old_isr);
 
     if (status != RTEMS_SUCCESSFUL)
@@ -244,7 +244,7 @@
 
     status = rtems_interrupt_catch(
         sh_sci_tx_isr,
-        Console_Port_Tbl[minor].ulDataPort,
+        Console_Port_Tbl[minor]->ulDataPort,
         &old_isr);
 
     if (status != RTEMS_SUCCESSFUL)
@@ -256,8 +256,8 @@
     SH_SCI_REG_FLAG(SCI_RIE, minor, SCI_SCR);
 
     status = sh_set_irq_priority(
-        Console_Port_Tbl[minor].ulIntVector,
-        Console_Port_Tbl[minor].ulCtrlPort2);
+        Console_Port_Tbl[minor]->ulIntVector,
+        Console_Port_Tbl[minor]->ulCtrlPort2);
 
     if (status != RTEMS_SUCCESSFUL)
         rtems_fatal_error_occurred(status);
@@ -292,28 +292,28 @@
     SH_SCI_REG_DATA(0x00, minor, SCI_SCR);
 
     /* set SMR and BRR - baudrate and format */
-    sh_sci_set_attributes(minor, Console_Port_Tbl[minor].pDeviceParams);
+    sh_sci_set_attributes(minor, Console_Port_Tbl[minor]->pDeviceParams);
 
     for (a=0; a < 10000L; a++) {                      /* Delay */
         __asm__ volatile ("nop");
     }
 
     write8((SCI_RE | SCI_TE),              /* enable async. Tx and Rx */
-           Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SCR);
+           Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SCR);
 
     /*
      * clear error flags
      */
-    temp8 = read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SSR);
+    temp8 = read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SSR);
     while(temp8 & (SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER)) {
         /* flush input */
-        temp8 = read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_RDR);
+        temp8 = read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_RDR);
 
         /* clear some flags */
-        SH_SCI_REG_FLAG((SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), minor, SCI_SSR);
+        SH_SCI_REG_FLAG((SCI_RDRF|SCI_ORER|SCI_FER|SCI_PER), minor, SCI_SSR);
 
         /* check if everything is OK */
-        temp8 = read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SSR);
+        temp8 = read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SSR);
     }
 
     /* Clear RDRF flag */
@@ -325,7 +325,7 @@
     /*
      * Interrupt setup
      */
-    if (Console_Port_Tbl[minor].pDeviceFns->deviceOutputUsesInterrupts) {
+    if (Console_Port_Tbl[minor]->pDeviceFns->deviceOutputUsesInterrupts) {
         SH_SCI_REG_FLAG(SCI_RIE, minor, SCI_SCR);
     }
 
@@ -345,7 +345,7 @@
     /* FIXME: Incomplete */
 
     /* Shutdown interrupts if necessary */
-    if (Console_Port_Tbl[minor].pDeviceFns->deviceOutputUsesInterrupts)
+    if (Console_Port_Tbl[minor]->pDeviceFns->deviceOutputUsesInterrupts)
     {
         SH_SCI_REG_MASK((SCI_TIE | SCI_RIE), minor, SCI_SCR);
     }
@@ -408,7 +408,7 @@
     /*
      * Wait for end of previous character
      */
-    while(!(read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SSR) & SCI_TDRE));
+    while(!(read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SSR) & SCI_TDRE));
     /*
      * Send the character
      */
@@ -430,14 +430,14 @@
     /*
      * Check if input buffer is full
      */
-    if (read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SSR) & SCI_RDRF) {
-        inbyte = read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_RDR);
+    if (read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SSR) & SCI_RDRF) {
+        inbyte = read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_RDR);
         SH_SCI_REG_MASK(SCI_RDRF, minor, SCI_SSR);
 
         /*
          * Check for errors
          */
-        if (read8(Console_Port_Tbl[minor].ulCtrlPort1 + SCI_SSR) &
+        if (read8(Console_Port_Tbl[minor]->ulCtrlPort1 + SCI_SSR) &
            (SCI_ORER | SCI_FER | SCI_PER)) {
             SH_SCI_REG_MASK((SCI_ORER | SCI_FER | SCI_PER), minor, SCI_SSR);
             return -1;


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* mongoosev/duart/mg5uart.c: Modifications to add dynamic tables for
	libchip serial drivers.

M  1.103  c/src/lib/libcpu/mips/ChangeLog
M   1.15  c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c

diff -u rtems/c/src/lib/libcpu/mips/ChangeLog:1.102 rtems/c/src/lib/libcpu/mips/ChangeLog:1.103
--- rtems/c/src/lib/libcpu/mips/ChangeLog:1.102	Fri Feb 11 03:37:38 2011
+++ rtems/c/src/lib/libcpu/mips/ChangeLog	Tue Oct 18 13:39:05 2011
@@ -1,3 +1,9 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* mongoosev/duart/mg5uart.c: Modifications to add dynamic tables for
+	libchip serial drivers.
+
 2011-02-11	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* au1x00/vectorisrs/vectorisrs.c:

diff -u rtems/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c:1.14 rtems/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c:1.15
--- rtems/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c:1.14	Sun Jan 30 11:42:26 2011
+++ rtems/c/src/lib/libcpu/mips/mongoosev/duart/mg5uart.c	Tue Oct 18 13:39:05 2011
@@ -88,8 +88,8 @@
   uint32_t               shift;
   rtems_interrupt_level  Irql;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   /*
    *  Set the baud rate
@@ -161,7 +161,7 @@
    *  Now write the registers
    */
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_CMD_SHIFT;
   else
     shift = MONGOOSEV_UART1_CMD_SHIFT;
@@ -197,14 +197,14 @@
   unsigned int pMG5UART;
   unsigned int pMG5UART_port;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   pmg5uartContext->mate = -1;
 
   for (port=0 ; port<Console_Port_Count ; port++ ) {
-    if ( Console_Port_Tbl[port].ulCtrlPort1 == pMG5UART &&
-         Console_Port_Tbl[port].ulCtrlPort2 != pMG5UART_port ) {
+    if ( Console_Port_Tbl[port]->ulCtrlPort1 == pMG5UART &&
+         Console_Port_Tbl[port]->ulCtrlPort2 != pMG5UART_port ) {
       pmg5uartContext->mate = port;
       break;
     }
@@ -233,10 +233,10 @@
 
   mg5uart_initialize_context( minor, pmg5uartContext );
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
      shift = MONGOOSEV_UART0_CMD_SHIFT;
   else
      shift = MONGOOSEV_UART1_CMD_SHIFT;
@@ -278,11 +278,11 @@
 
   rtems_interrupt_level  Irql;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  vector        = Console_Port_Tbl[minor].ulIntVector;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  vector        = Console_Port_Tbl[minor]->ulIntVector;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_CMD_SHIFT;
   else
     shift = MONGOOSEV_UART1_CMD_SHIFT;
@@ -332,8 +332,8 @@
   uint32_t      shift;
   rtems_interrupt_level  Irql;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   /*
    *  Disable interrupts from this channel and then disable it totally.
@@ -343,7 +343,7 @@
 
   cmd = MONGOOSEV_UART_CMD_TX_DISABLE | MONGOOSEV_UART_CMD_RX_DISABLE;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_CMD_SHIFT;
   else
     shift = MONGOOSEV_UART1_CMD_SHIFT;
@@ -380,10 +380,10 @@
   int                     shift;
   int                     timeout;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_IRQ_SHIFT;
   else
     shift = MONGOOSEV_UART1_IRQ_SHIFT;
@@ -454,8 +454,8 @@
     int   minor; \
     \
     for(minor=0 ; minor<Console_Port_Count ; minor++) { \
-      if( Console_Port_Tbl[minor].deviceType == SERIAL_MG5UART && \
-          vector == Console_Port_Tbl[minor].ulIntVector + _OFFSET ) { \
+      if( Console_Port_Tbl[minor]->deviceType == SERIAL_MG5UART && \
+          vector == Console_Port_Tbl[minor]->ulIntVector + _OFFSET ) { \
         mg5uart_process_isr_ ## _TYPE (minor); \
 	return; \
       } \
@@ -478,9 +478,9 @@
   uint32_t                pMG5UART;
   int                     shift;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_IRQ_SHIFT;
   else
     shift = MONGOOSEV_UART1_IRQ_SHIFT;
@@ -523,11 +523,11 @@
    uint32_t        pMG5UART;
    int             shift;
 
-   pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
+   pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
 
    mg5uart_enable_interrupts(minor, MG5UART_ENABLE_ALL_EXCEPT_TX);
 
-   if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+   if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
       shift = MONGOOSEV_UART0_IRQ_SHIFT;
    else
       shift = MONGOOSEV_UART1_IRQ_SHIFT;
@@ -580,7 +580,7 @@
   uint32_t   pMG5UART_port;
   char       c;
 
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   /* reading the RX buffer automatically resets the interrupt flag */
 
@@ -609,7 +609,7 @@
   mg5uart_init(minor);
 
   Console_Port_Data[minor].bActive = FALSE;
-  v = Console_Port_Tbl[minor].ulIntVector;
+  v = Console_Port_Tbl[minor]->ulIntVector;
 
   set_vector(mg5uart_isr_rx_frame_error,   v + MG5UART_IRQ_RX_FRAME_ERROR, 1);
   set_vector(mg5uart_isr_rx_overrun_error, v + MG5UART_IRQ_RX_OVERRUN_ERROR, 1);
@@ -639,7 +639,7 @@
   uint32_t        Irql;
   uint32_t        pMG5UART_port;
 
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   /*
    *  We are using interrupt driven output and termios only sends us
@@ -715,10 +715,10 @@
   uint32_t                status;
   uint32_t                tmp,shift;
 
-  pMG5UART      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMG5UART_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMG5UART      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMG5UART_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_IRQ_SHIFT;
   else
     shift = MONGOOSEV_UART1_IRQ_SHIFT;
@@ -762,7 +762,7 @@
 
   baud_requested = rtems_termios_baud_to_number( baud_requested );
 
-  clock = (uint32_t) Console_Port_Tbl[minor].ulClock;
+  clock = (uint32_t) Console_Port_Tbl[minor]->ulClock;
   if (!clock)
     rtems_fatal_error_occurred(RTEMS_INVALID_NUMBER);
 
@@ -813,13 +813,13 @@
   uint32_t              shift;
   rtems_interrupt_level  Irql;
 
-  pMG5UART = Console_Port_Tbl[minor].ulCtrlPort1;
+  pMG5UART = Console_Port_Tbl[minor]->ulCtrlPort1;
 
   /*
    *  Enable interrupts on RX and TX -- not break
    */
 
-  if ( Console_Port_Tbl[minor].ulDataPort == MG5UART_UART0 )
+  if ( Console_Port_Tbl[minor]->ulDataPort == MG5UART_UART0 )
     shift = MONGOOSEV_UART0_IRQ_SHIFT;
   else
     shift = MONGOOSEV_UART1_IRQ_SHIFT;


 *jennifer*:
2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>

	PR 1917/bsps
	* libchip/serial/mc68681.c, libchip/serial/ns16550.c,
	libchip/serial/serial.h, libchip/serial/z85c30.c: Modifications to
	add dynamic tables for libchip serial drivers.

M  1.562  c/src/ChangeLog
M   1.41  c/src/libchip/serial/mc68681.c
M   1.51  c/src/libchip/serial/ns16550.c
M   1.20  c/src/libchip/serial/serial.h
M   1.33  c/src/libchip/serial/z85c30.c

diff -u rtems/c/src/ChangeLog:1.561 rtems/c/src/ChangeLog:1.562
--- rtems/c/src/ChangeLog:1.561	Mon Oct 17 06:56:31 2011
+++ rtems/c/src/ChangeLog	Tue Oct 18 13:40:27 2011
@@ -1,3 +1,10 @@
+2011-10-18	Jennifer Averett <Jennifer.Averett at OARcorp.com>
+
+	PR 1917/bsps
+	* libchip/serial/mc68681.c, libchip/serial/ns16550.c,
+	libchip/serial/serial.h, libchip/serial/z85c30.c: Modifications to
+	add dynamic tables for libchip serial drivers.
+
 2011-10-17	Ralf Corsépius <ralf.corsepius at rtems.org>
 
 	* libchip/rtc/icm7170.c (icm7170_get_time): Remove unused var setReg.

diff -u rtems/c/src/libchip/serial/mc68681.c:1.40 rtems/c/src/libchip/serial/mc68681.c:1.41
--- rtems/c/src/libchip/serial/mc68681.c:1.40	Mon Oct 10 23:56:22 2011
+++ rtems/c/src/libchip/serial/mc68681.c	Tue Oct 18 13:40:27 2011
@@ -99,9 +99,9 @@
   setRegister_f          setReg;
   rtems_interrupt_level  Irql;
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  Set the baud rate
@@ -195,14 +195,14 @@
   unsigned int pMC68681;
   unsigned int pMC68681_port;
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
 
   pmc68681Context->mate = -1;
 
   for (port=0 ; port<Console_Port_Count ; port++ ) {
-    if ( Console_Port_Tbl[port].ulCtrlPort1 == pMC68681 &&
-         Console_Port_Tbl[port].ulCtrlPort2 != pMC68681_port ) {
+    if ( Console_Port_Tbl[port]->ulCtrlPort1 == pMC68681 &&
+         Console_Port_Tbl[port]->ulCtrlPort2 != pMC68681_port ) {
       pmc68681Context->mate = port;
       pmc68681Context->imr  = 0;
       break;
@@ -230,9 +230,9 @@
 
   mc68681_initialize_context( minor, pmc68681Context );
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  Reset everything and leave this port disabled.
@@ -282,10 +282,10 @@
   unsigned int			 status;
 
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg        = Console_Port_Tbl[minor].setRegister;
-  vector        = Console_Port_Tbl[minor].ulIntVector;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
+  vector        = Console_Port_Tbl[minor]->ulIntVector;
 
   /* XXX default baud rate should be from configuration table */
 
@@ -332,9 +332,9 @@
   uint32_t        pMC68681_port;
   setRegister_f   setReg;
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  Disable interrupts from this channel and then disable it totally.
@@ -365,9 +365,9 @@
   getRegister_f           getReg;
   setRegister_f           setReg;
 
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  getReg        = Console_Port_Tbl[minor].getRegister;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  getReg        = Console_Port_Tbl[minor]->getRegister;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * wait for transmitter holding register to be empty
@@ -415,8 +415,8 @@
   int     minor;
 
   for(minor=0 ; minor<Console_Port_Count ; minor++) {
-    if(Console_Port_Tbl[minor].ulIntVector == vector &&
-       Console_Port_Tbl[minor].deviceType == SERIAL_MC68681 ) {
+    if(Console_Port_Tbl[minor]->ulIntVector == vector &&
+       Console_Port_Tbl[minor]->deviceType == SERIAL_MC68681 ) {
       mc68681_process(minor);
     }
   }
@@ -435,7 +435,7 @@
 
   Console_Port_Data[minor].bActive = FALSE;
 
-  set_vector(mc68681_isr, Console_Port_Tbl[minor].ulIntVector, 1);
+  set_vector(mc68681_isr, Console_Port_Tbl[minor]->ulIntVector, 1);
 
   mc68681_enable_interrupts(minor,MC68681_IMR_ENABLE_ALL_EXCEPT_TX);
 }
@@ -456,8 +456,8 @@
   uint32_t        pMC68681_port;
   setRegister_f   setReg;
 
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  We are using interrupt driven output and termios only sends us
@@ -529,8 +529,8 @@
   unsigned char        cChar;
   getRegister_f        getReg;
 
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  getReg        = Console_Port_Tbl[minor].getRegister;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  getReg        = Console_Port_Tbl[minor]->getRegister;
 
   ucLineStatus = (*getReg)(pMC68681_port, MC68681_STATUS);
   if(ucLineStatus & MC68681_RX_READY) {
@@ -564,14 +564,14 @@
   acr_bit = 0;
   status = 0;
 
-  if (Console_Port_Tbl[minor].ulDataPort & MC68681_DATA_BAUD_RATE_SET_2)
+  if (Console_Port_Tbl[minor]->ulDataPort & MC68681_DATA_BAUD_RATE_SET_2)
   {
     acr_bit = 1;
   }
 
   is_extended = 0;
 
-  switch (Console_Port_Tbl[minor].ulDataPort & MC68681_XBRG_MASK) {
+  switch (Console_Port_Tbl[minor]->ulDataPort & MC68681_XBRG_MASK) {
     case MC68681_XBRG_IGNORED:
       *command = 0x00;
       break;
@@ -591,7 +591,7 @@
   baud_requested = rtems_termios_baud_to_index( baud_requested );
 
   baud_tbl = (mc68681_baud_table_t *)
-     ((uintptr_t)Console_Port_Tbl[minor].ulClock);
+     ((uintptr_t)Console_Port_Tbl[minor]->ulClock);
   if (!baud_tbl)
     rtems_fatal_error_occurred(RTEMS_INVALID_ADDRESS);
 
@@ -630,10 +630,10 @@
   getRegister_f           getReg;
   setRegister_f           setReg;
 
-  pMC68681      = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort2;
-  getReg        = Console_Port_Tbl[minor].getRegister;
-  setReg        = Console_Port_Tbl[minor].setRegister;
+  pMC68681      = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port = Console_Port_Tbl[minor]->ulCtrlPort2;
+  getReg        = Console_Port_Tbl[minor]->getRegister;
+  setReg        = Console_Port_Tbl[minor]->setRegister;
 
   /* Get ISR at the beginning of the IT routine */
   ucISRStatus = (*getReg)(pMC68681, MC68681_INTERRUPT_STATUS_REG);
@@ -710,8 +710,8 @@
   mc68681_context *pmc68681Context;
   mc68681_context *mateContext;
 
-  pMC68681        = Console_Port_Tbl[minor].ulCtrlPort1;
-  pMC68681_port   = Console_Port_Tbl[minor].ulCtrlPort2;
+  pMC68681        = Console_Port_Tbl[minor]->ulCtrlPort1;
+  pMC68681_port   = Console_Port_Tbl[minor]->ulCtrlPort2;
   pmc68681Context = (mc68681_context *) Console_Port_Data[minor].pDeviceContext;
   mate            = pmc68681Context->mate;
 
@@ -735,7 +735,7 @@
    *  Calculate this port's IMR mask and save it in the context area.
    */
 
-  if ( Console_Port_Tbl[minor].pDeviceFns->deviceOutputUsesInterrupts )
+  if ( Console_Port_Tbl[minor]->pDeviceFns->deviceOutputUsesInterrupts )
     mask = enable_flag;
 
   pmc68681Context->imr = mask;
@@ -764,8 +764,8 @@
   uint32_t              pMC68681;
   setRegister_f         setReg;
 
-  pMC68681 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pMC68681 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  Enable interrupts on RX and TX -- not break

diff -u rtems/c/src/libchip/serial/ns16550.c:1.50 rtems/c/src/libchip/serial/ns16550.c:1.51
--- rtems/c/src/libchip/serial/ns16550.c:1.50	Mon Jul 11 08:31:13 2011
+++ rtems/c/src/libchip/serial/ns16550.c	Tue Oct 18 13:40:27 2011
@@ -113,9 +113,9 @@
   Console_Port_Data[minor].pDeviceContext=(void *)pns16550Context;
   pns16550Context->ucModemCtrl=SP_MODEM_IRQ;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
-  getReg   = Console_Port_Tbl[minor].getRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
+  getReg   = Console_Port_Tbl[minor]->getRegister;
 
   /* Clear the divisor latch, clear all interrupt enables,
    * and reset and
@@ -128,8 +128,8 @@
   /* Set the divisor latch and set the baud rate. */
 
   ulBaudDivisor = NS16550_Baud(
-    (uint32_t) Console_Port_Tbl[minor].ulClock,
-    (uint32_t) ((uintptr_t)Console_Port_Tbl[minor].pDeviceParams)
+    (uint32_t) Console_Port_Tbl[minor]->ulClock,
+    (uint32_t) ((uintptr_t)Console_Port_Tbl[minor]->pDeviceParams)
   );
   ucDataByte = SP_LINE_DLAB;
   (*setReg)(pNS16550, NS16550_LINE_CONTROL, ucDataByte);
@@ -172,7 +172,7 @@
 {
   rtems_libio_open_close_args_t *oc = (rtems_libio_open_close_args_t *) arg;
   struct rtems_termios_tty *tty = (struct rtems_termios_tty *) oc->iop->data1;
-  console_tbl *c = &Console_Port_Tbl [minor];
+  console_tbl *c = Console_Port_Tbl [minor];
   console_data *d = &Console_Port_Data [minor];
 
   d->termios_data = tty;
@@ -226,7 +226,7 @@
  */
 NS16550_STATIC void ns16550_write_polled(int minor, char out)
 {
-  console_tbl *c = &Console_Port_Tbl [minor];
+  console_tbl *c = Console_Port_Tbl [minor];
   uintptr_t port = c->ulCtrlPort1;
   getRegister_f get = c->getRegister;
   setRegister_f set = c->setRegister;
@@ -283,8 +283,8 @@
 
   pns16550Context=(ns16550_context *) Console_Port_Data[minor].pDeviceContext;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Assert RTS
@@ -309,8 +309,8 @@
 
   pns16550Context=(ns16550_context *) Console_Port_Data[minor].pDeviceContext;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Negate RTS
@@ -340,8 +340,8 @@
 
   pns16550Context=(ns16550_context *) Console_Port_Data[minor].pDeviceContext;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Assert DTR
@@ -366,8 +366,8 @@
 
   pns16550Context=(ns16550_context *) Console_Port_Data[minor].pDeviceContext;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Negate DTR
@@ -399,9 +399,9 @@
   getRegister_f           getReg;
   uint32_t                Irql;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
-  getReg   = Console_Port_Tbl[minor].getRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
+  getReg   = Console_Port_Tbl[minor]->getRegister;
 
   /*
    *  Calculate the baud rate divisor
@@ -412,7 +412,7 @@
     baud_requested = B9600;              /* default to 9600 baud */
 
   ulBaudDivisor = NS16550_Baud(
-    (uint32_t) Console_Port_Tbl[minor].ulClock,
+    (uint32_t) Console_Port_Tbl[minor]->ulClock,
     rtems_termios_baud_to_number(baud_requested)
   );
 
@@ -485,7 +485,7 @@
  */
 NS16550_STATIC void ns16550_process( int minor)
 {
-  console_tbl *c = &Console_Port_Tbl [minor];
+  console_tbl *c = Console_Port_Tbl [minor];
   console_data *d = &Console_Port_Data [minor];
   ns16550_context *ctx = d->pDeviceContext;
   uint32_t port = c->ulCtrlPort1;
@@ -544,7 +544,7 @@
   size_t len
 )
 {
-  console_tbl *c = &Console_Port_Tbl [minor];
+  console_tbl *c = Console_Port_Tbl [minor];
   console_data *d = &Console_Port_Data [minor];
   ns16550_context *ctx = d->pDeviceContext;
   uint32_t port = c->ulCtrlPort1;
@@ -578,8 +578,8 @@
   uint32_t       pNS16550;
   setRegister_f  setReg;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   (*setReg)(pNS16550, NS16550_INTERRUPT_ENABLE, mask);
 }
@@ -736,8 +736,8 @@
   char                 cChar;
   getRegister_f        getReg;
 
-  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
-  getReg   = Console_Port_Tbl[minor].getRegister;
+  pNS16550 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  getReg   = Console_Port_Tbl[minor]->getRegister;
 
   ucLineStatus = (*getReg)(pNS16550, NS16550_LINE_STATUS);
   if(ucLineStatus & SP_LSR_RDY) {

diff -u rtems/c/src/libchip/serial/serial.h:1.19 rtems/c/src/libchip/serial/serial.h:1.20
--- rtems/c/src/libchip/serial/serial.h:1.19	Sun Apr 25 19:58:39 2010
+++ rtems/c/src/libchip/serial/serial.h	Tue Oct 18 13:40:27 2011
@@ -1,3 +1,10 @@
+/**
+ * @file
+ *
+ * @brief  The generic libchip serial driver interface
+ */
+
+
 /*
  *  This file contains the TTY driver table definition
  *
@@ -28,11 +35,46 @@
  *  Types for get and set register routines
  */
 
+/**
+ *  @typedef getRegister_f
+ *
+ *  This type function provides a hook for the bsp specific method
+ *  that gets register data from the given port and register. 
+ */
 typedef uint8_t   (*getRegister_f)(uintptr_t port, uint8_t reg);
+
+/**
+ *  @typedef setData_f
+ *
+ *  This type function provides a hook for the bsp specific method
+ *  that sets register data from the given port and register to the
+ *  given value. 
+ */
 typedef void      (*setRegister_f)(uintptr_t port, uint8_t reg, uint8_t  value);
+
+/**
+ *  @typedef getData_f
+ *
+ *  This type function provides a hook for the bsp specific method
+ *  that gets data from the specified port. 
+ */
 typedef uint8_t   (*getData_f)(uintptr_t port);
+
+/**
+ *  @typedef setData_f
+ *
+ *  This type function provides a hook for the bsp specific method
+ *  that writes value to the specified port.
+ */
 typedef void      (*setData_f)(uintptr_t port, uint8_t value);
 
+/**
+ *  @typedef _console_fns
+ *
+ *  This type definition provides a structure of functions each
+ *  methood provides an interfce to the serial por to do a specific
+ *  function.
+ */
 typedef struct _console_fns {
   bool    (*deviceProbe)(int minor);
   int     (*deviceFirstOpen)(int major, int minor, void *arg);
@@ -45,11 +87,22 @@
   bool      deviceOutputUsesInterrupts;
 } console_fns;
 
+/**
+ *  @typedef _console_flow
+ *
+ *  This type definition provides a structure of functions
+ *  that provide flow control for the transmit buffer.
+ */
 typedef struct _console_flow {
   int (*deviceStopRemoteTx)(int minor);
   int (*deviceStartRemoteTx)(int minor);
 } console_flow;
 
+
+/**
+ * This type defination provides an enumerated type of all
+ * supported libchip console drivers.
+ */
 typedef enum {
   SERIAL_MC68681,              /* Motorola MC68681 or Exar 88681 */
   SERIAL_NS16550,              /* National Semiconductor NS16550 */
@@ -57,100 +110,114 @@
   SERIAL_CUSTOM                /* BSP specific driver */
 } console_devs;
 
-/*
- * Each field is interpreted thus:
- *
- * sDeviceName  This is the name of the device.
- *
- * deviceType   This indicates the chip type.  It is especially important when
- *              multiple devices share the same interrupt vector and must be
- *              distinguished.
- *
- * pDeviceFns   This is a pointer to the set of driver routines to use.
- *
- * pDeviceFlow  This is a pointer to the set of flow control routines to
- *              use. Serial device drivers will typically supply RTSCTS
- *              and DTRCTS handshake routines for DCE to DCE communication,
- *              however for DCE to DTE communication, no such routines
- *              should be necessary as RTS will be driven automatically
- *              when the transmitter is active.
- *
- * ulMargin     The high water mark in the input buffer is set to the buffer
- *              size less ulMargin. Once this level is reached, the driver's
- *              flow control routine used to stop the remote transmitter will
- *              be called. This figure should be greater than or equal to
- *              the number of stages of FIFO between the transmitter and
- *              receiver.
- *
- *              NOTE: At the current time, this parameter is hard coded
- *                    in termios and this number is ignored.
- *
- * ulHysteresis After the high water mark specified by ulMargin has been
- *              reached, the driver's routine to re-start the remote
- *              transmitter will be called once the level in the input
- *              buffer has fallen by ulHysteresis bytes.
- *
- *              NOTE: At the current time, this parameter is hard coded
- *                    in termios and this number is ignored.
- *
- * pDeviceParams This contains either device specific data or a pointer to a
- *              device specific structure containing additional information
- *              not provided in this table.
- *
- * ulCtrlPort1  This is the primary control port number for the device. This
- *              may be used to specify different instances of the same device
- *              type.
- *
- * ulCtrlPort2  This is the secondary control port number, of use when a given
- *              device has more than one available channel.
- *
- * ulDataPort   This is the port number for the data port of the device
- *
- * getRegister  This is the routine used to read register values.
- *
- * setRegister  This is the routine used to write register values.
- *
- * getData      This is the routine used to read the data register (RX).
- *
- * setData      This is the routine used to write the data register (TX).
- *
- * ulClock      This is the baud rate clock speed.
- *
- * ulIntVector  This encodes the interrupt vector of the device.
+/**
+ * This type defination provides an structure that is used to 
+ * uniquely identify a specific serial port.
  */
-
 typedef struct _console_tbl {
+  /**  This is the name of the device. */
   char          *sDeviceName;
+  /** This indicates the chip type.  It is especially important when
+   *   multiple devices share the same interrupt vector and must be
+   *   distinguished.
+   */
   console_devs   deviceType;
+  /** pDeviceFns   This is a pointer to the set of driver routines to use. */
   console_fns   *pDeviceFns;
+  /** This value is passed to the serial device driver for use.  In termios
+   *  itself the number is ignored.
+   */
   bool         (*deviceProbe)(int minor);
+  /** This is a pointer to the set of flow control routines to
+   *  use. Serial device drivers will typically supply RTSCTS
+   *  and DTRCTS handshake routines for DCE to DCE communication,
+   *  however for DCE to DTE communication, no such routines
+   *  should be necessary as RTS will be driven automatically
+   *  when the transmitter is active.
+   */
   console_flow  *pDeviceFlow;
+  /** The high water mark in the input buffer is set to the buffer
+   *  size less ulMargin. Once this level is reached, the driver's
+   *  flow control routine used to stop the remote transmitter will
+   *  be called. This figure should be greater than or equal to
+   *  the number of stages of FIFO between the transmitter and
+   *  receiver.
+   *
+   *  @note At the current time, this parameter is hard coded
+   *        in termios and this number is ignored.
+   */
   uint32_t       ulMargin;
+  /** After the high water mark specified by ulMargin has been
+   *  reached, the driver's routine to re-start the remote
+   *  transmitter will be called once the level in the input
+   *  buffer has fallen by ulHysteresis bytes.
+   *
+   *  @note At the current time, this parameter is hard coded in termios.
+   */
   uint32_t       ulHysteresis;
+  /** This contains either device specific data or a pointer to a
+   *  device specific structure containing additional information
+   *  not provided in this table.
+   */
   void          *pDeviceParams;
+  /** This is the primary control port number for the device. This
+   *  may be used to specify different instances of the same device type.
+   */
   uint32_t       ulCtrlPort1;
+  /** This is the secondary control port number, of use when a given
+   *  device has more than one available channel.
+   */
   uint32_t       ulCtrlPort2;
+  /** This is the port number for the data port of the device */
   uint32_t       ulDataPort;
+  /** This is the routine used to read register values. */
   getRegister_f  getRegister;
+  /** This is the routine used to write register values. */
   setRegister_f  setRegister;
+  /** This is the routine used to read the data register (RX). */
   getData_f      getData;
+  /* This is the routine used to write the data register (TX). */
   setData_f      setData;
+  /** This is the baud rate clock speed.*/
   uint32_t       ulClock;
+  /** This encodes the interrupt vector of the device. */
   unsigned int   ulIntVector;
 } console_tbl;
 
+/**
+ * This type defination provides data for the console port.
+ */
 typedef struct _console_data {
   void                   *termios_data;
   volatile bool           bActive;
-  /*
-   * This field may be used for any purpose required by the driver
-   */
+  /** This field may be used for any purpose required by the driver  */
   void                   *pDeviceContext;
 } console_data;
 
-extern console_tbl  Console_Port_Tbl[];
-extern console_data Console_Port_Data[];
-extern unsigned long  Console_Port_Count;
+/**
+ *  This is a dynamically sized set of tables containing the serial 
+ *  port information.
+ */
+extern console_tbl   **Console_Port_Tbl;
+/**
+ * This is the number of serial ports defined in the Console_Port_Tbl.
+ */
+extern unsigned long   Console_Port_Count;
+
+/**
+ *  The statically configured serial port information tables which
+ *  are used to initially populate the dynamic tables.
+ */
+extern console_tbl    Console_Configuration_Ports[];
+/**
+ * The number of serial ports defined in Console_Configuration_Ports 
+ * */
+extern unsigned long  Console_Configuration_Count;
+
+/**
+ *  This is an array of per port information.
+ */
+extern console_data  *Console_Port_Data;
 
 #ifdef __cplusplus
 }

diff -u rtems/c/src/libchip/serial/z85c30.c:1.32 rtems/c/src/libchip/serial/z85c30.c:1.33
--- rtems/c/src/libchip/serial/z85c30.c:1.32	Mon Oct 10 03:37:28 2011
+++ rtems/c/src/libchip/serial/z85c30.c	Tue Oct 18 13:40:27 2011
@@ -96,8 +96,8 @@
   uintptr_t       ulBaudDivisor;
   setRegister_f   setReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg   = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg   = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Using register 4
@@ -137,8 +137,8 @@
   );
 
   ulBaudDivisor = Z85C30_Baud(
-    (uint32_t) Console_Port_Tbl[minor].ulClock,
-    (uint32_t) ((uintptr_t)Console_Port_Tbl[minor].pDeviceParams)
+    (uint32_t) Console_Port_Tbl[minor]->ulClock,
+    (uint32_t) ((uintptr_t)Console_Port_Tbl[minor]->pDeviceParams)
   );
 
   /*
@@ -219,7 +219,7 @@
    * Assert DTR
    */
 
-  if (Console_Port_Tbl[minor].pDeviceFlow !=&z85c30_flow_DTRCTS) {
+  if (Console_Port_Tbl[minor]->pDeviceFlow !=&z85c30_flow_DTRCTS) {
     z85c30_assert_DTR(minor);
   }
 
@@ -240,7 +240,7 @@
    * Negate DTR
    */
 
-  if (Console_Port_Tbl[minor].pDeviceFlow !=&z85c30_flow_DTRCTS) {
+  if (Console_Port_Tbl[minor]->pDeviceFlow !=&z85c30_flow_DTRCTS) {
     z85c30_negate_DTR(minor);
   }
 
@@ -258,8 +258,9 @@
   setRegister_f    setReg;
   getRegister_f    getReg;
 
-  setReg = Console_Port_Tbl[minor].setRegister;
-  getReg   = Console_Port_Tbl[minor].getRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
+  getReg     = Console_Port_Tbl[minor]->getRegister;
 
   pz85c30Context = (z85c30_context *)malloc(sizeof(z85c30_context));
 
@@ -267,8 +268,8 @@
 
   pz85c30Context->ucModemCtrl = SCC_WR5_TX_8_BITS | SCC_WR5_TX_EN;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  if ( ulCtrlPort == Console_Port_Tbl[minor].ulCtrlPort2 ) {
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  if ( ulCtrlPort == Console_Port_Tbl[minor]->ulCtrlPort2 ) {
     /*
      * This is channel A
      */
@@ -306,7 +307,7 @@
   z85c30_context        *pz85c30Context;
   setRegister_f          setReg;
 
-  setReg = Console_Port_Tbl[minor].setRegister;
+  setReg = Console_Port_Tbl[minor]->setRegister;
 
   pz85c30Context = (z85c30_context *) Console_Port_Data[minor].pDeviceContext;
 
@@ -317,7 +318,7 @@
   rtems_interrupt_disable(Irql);
     pz85c30Context->ucModemCtrl|=SCC_WR5_RTS;
     (*setReg)(
-      Console_Port_Tbl[minor].ulCtrlPort1,
+      Console_Port_Tbl[minor]->ulCtrlPort1,
       SCC_WR0_SEL_WR5,
       pz85c30Context->ucModemCtrl
     );
@@ -335,7 +336,7 @@
   z85c30_context        *pz85c30Context;
   setRegister_f          setReg;
 
-  setReg = Console_Port_Tbl[minor].setRegister;
+  setReg = Console_Port_Tbl[minor]->setRegister;
 
   pz85c30Context = (z85c30_context *) Console_Port_Data[minor].pDeviceContext;
 
@@ -346,7 +347,7 @@
   rtems_interrupt_disable(Irql);
     pz85c30Context->ucModemCtrl&=~SCC_WR5_RTS;
     (*setReg)(
-      Console_Port_Tbl[minor].ulCtrlPort1,
+      Console_Port_Tbl[minor]->ulCtrlPort1,
       SCC_WR0_SEL_WR5,
       pz85c30Context->ucModemCtrl
     );
@@ -369,7 +370,7 @@
   z85c30_context        *pz85c30Context;
   setRegister_f          setReg;
 
-  setReg = Console_Port_Tbl[minor].setRegister;
+  setReg = Console_Port_Tbl[minor]->setRegister;
 
   pz85c30Context = (z85c30_context *) Console_Port_Data[minor].pDeviceContext;
 
@@ -380,7 +381,7 @@
   rtems_interrupt_disable(Irql);
     pz85c30Context->ucModemCtrl|=SCC_WR5_DTR;
     (*setReg)(
-      Console_Port_Tbl[minor].ulCtrlPort1,
+      Console_Port_Tbl[minor]->ulCtrlPort1,
       SCC_WR0_SEL_WR5,
       pz85c30Context->ucModemCtrl
   );
@@ -398,7 +399,7 @@
   z85c30_context        *pz85c30Context;
   setRegister_f          setReg;
 
-  setReg = Console_Port_Tbl[minor].setRegister;
+  setReg = Console_Port_Tbl[minor]->setRegister;
 
   pz85c30Context = (z85c30_context *) Console_Port_Data[minor].pDeviceContext;
 
@@ -409,7 +410,7 @@
   rtems_interrupt_disable(Irql);
     pz85c30Context->ucModemCtrl&=~SCC_WR5_DTR;
     (*setReg)(
-      Console_Port_Tbl[minor].ulCtrlPort1,
+      Console_Port_Tbl[minor]->ulCtrlPort1,
       SCC_WR0_SEL_WR5,
       pz85c30Context->ucModemCtrl
   );
@@ -438,8 +439,8 @@
   setRegister_f          setReg;
   rtems_interrupt_level  Irql;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg     = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  Calculate the baud rate divisor
@@ -450,7 +451,7 @@
     baud_requested = B9600;              /* default to 9600 baud */
 
   ulBaudDivisor = Z85C30_Baud(
-    (uint32_t) Console_Port_Tbl[minor].ulClock,
+    (uint32_t) Console_Port_Tbl[minor]->ulClock,
     (uint32_t) rtems_termios_baud_to_number( baud_requested )
   );
 
@@ -540,9 +541,9 @@
   setRegister_f       setReg;
   getRegister_f       getReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg     = Console_Port_Tbl[minor].setRegister;
-  getReg     = Console_Port_Tbl[minor].getRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
+  getReg     = Console_Port_Tbl[minor]->getRegister;
 
   /*
    * Deal with any received characters
@@ -604,7 +605,7 @@
     rtems_termios_dequeue_characters(Console_Port_Data[minor].termios_data, 1);
     if (rtems_termios_dequeue_characters(
          Console_Port_Data[minor].termios_data, 1)) {
-      if (Console_Port_Tbl[minor].pDeviceFlow != &z85c30_flow_RTSCTS) {
+      if (Console_Port_Tbl[minor]->pDeviceFlow != &z85c30_flow_RTSCTS) {
         z85c30_negate_RTS(minor);
       }
       Console_Port_Data[minor].bActive = FALSE;
@@ -646,10 +647,10 @@
   getRegister_f       getReg;
 
   for (minor=0;minor<Console_Port_Count;minor++) {
-    if(Console_Port_Tbl[minor].ulIntVector == vector &&
-       Console_Port_Tbl[minor].deviceType == SERIAL_Z85C30 ) {
-      ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort2;
-      getReg     = Console_Port_Tbl[minor].getRegister;
+    if(Console_Port_Tbl[minor]->ulIntVector == vector &&
+       Console_Port_Tbl[minor]->deviceType == SERIAL_Z85C30 ) {
+      ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort2;
+      getReg     = Console_Port_Tbl[minor]->getRegister;
       do {
         ucIntPend = (*getReg)(ulCtrlPort, SCC_WR0_SEL_RD3);
 
@@ -657,7 +658,7 @@
            * If this is channel A select channel A status
            */
 
-          if (ulCtrlPort == Console_Port_Tbl[minor].ulCtrlPort1) {
+          if (ulCtrlPort == Console_Port_Tbl[minor]->ulCtrlPort1) {
             ucIntPendPort = ucIntPend >> 3;
             ucIntPendPort &= 7;
           } else {
@@ -686,8 +687,8 @@
   uint32_t       ulCtrlPort;
   setRegister_f  setReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg     = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
 
   (*setReg)(ulCtrlPort, SCC_WR0_SEL_WR1, interrupt_mask);
 }
@@ -706,9 +707,9 @@
   uint32_t       ulCtrlPort2;
   setRegister_f  setReg;
 
-  ulCtrlPort1 = Console_Port_Tbl[minor].ulCtrlPort1;
-  ulCtrlPort2 = Console_Port_Tbl[minor].ulCtrlPort2;
-  setReg      = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort1 = Console_Port_Tbl[minor]->ulCtrlPort1;
+  ulCtrlPort2 = Console_Port_Tbl[minor]->ulCtrlPort2;
+  setReg      = Console_Port_Tbl[minor]->setRegister;
 
 
   z85c30_init(minor);
@@ -717,11 +718,11 @@
 
   z85c30_initialize_port( minor );
 
-  if (Console_Port_Tbl[minor].pDeviceFlow != &z85c30_flow_RTSCTS) {
+  if (Console_Port_Tbl[minor]->pDeviceFlow != &z85c30_flow_RTSCTS) {
     z85c30_negate_RTS(minor);
   }
 
-  set_vector(z85c30_isr, Console_Port_Tbl[minor].ulIntVector, 1);
+  set_vector(z85c30_isr, Console_Port_Tbl[minor]->ulIntVector, 1);
 
   z85c30_enable_interrupts(minor, SCC_ENABLE_ALL_INTR_EXCEPT_TX);
 
@@ -751,8 +752,8 @@
   uint32_t       ulCtrlPort;
   setRegister_f  setReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  setReg     = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
 
   /*
    *  We are using interrupt driven output and termios only sends us
@@ -766,7 +767,7 @@
    *  Put the character out and enable interrupts if necessary.
    */
 
-  if (Console_Port_Tbl[minor].pDeviceFlow != &z85c30_flow_RTSCTS) {
+  if (Console_Port_Tbl[minor]->pDeviceFlow != &z85c30_flow_RTSCTS) {
     z85c30_assert_RTS(minor);
   }
   rtems_interrupt_disable(Irql);
@@ -794,8 +795,8 @@
   uint32_t            ulCtrlPort;
   getRegister_f       getReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  getReg     = Console_Port_Tbl[minor].getRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  getReg     = Console_Port_Tbl[minor]->getRegister;
 
   /*
    * return -1 if a character is not available.
@@ -856,9 +857,9 @@
   getRegister_f      getReg;
   setRegister_f      setReg;
 
-  ulCtrlPort = Console_Port_Tbl[minor].ulCtrlPort1;
-  getReg     = Console_Port_Tbl[minor].getRegister;
-  setReg     = Console_Port_Tbl[minor].setRegister;
+  ulCtrlPort = Console_Port_Tbl[minor]->ulCtrlPort1;
+  getReg     = Console_Port_Tbl[minor]->getRegister;
+  setReg     = Console_Port_Tbl[minor]->setRegister;
 
   /*
    * Wait for the Transmit buffer to indicate that it is empty.



--

Generated by Deluxe Loginfo [http://www.codewiz.org/projects/index.html#loginfo] 2.122 by Bernardo Innocenti <bernie at develer.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/vc/attachments/20111018/1718b72b/attachment-0001.html>


More information about the vc mailing list