Index: cpukit/libmisc/monitor/mon-driver.c
===================================================================
--- cpukit/libmisc/monitor/mon-driver.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/libmisc/monitor/mon-driver.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -64,8 +64,7 @@
 )
 {
-    const rtems_configuration_table *c = &Configuration;
     uint32_t   n = rtems_object_id_get_index(*next_id);
 
-    if (n >= c->number_of_device_drivers)
+    if (n >= _IO_Number_of_drivers)
         goto failed;
 
@@ -80,5 +79,5 @@
 
     *next_id += 1;
-    return (const void *) (c->Device_driver_table + n);
+    return (const void *) (&_IO_Driver_address_table[n]);
 
 failed:
Index: cpukit/sapi/include/confdefs.h
===================================================================
--- cpukit/sapi/include/confdefs.h	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/sapi/include/confdefs.h	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -71,5 +71,4 @@
 
 extern rtems_initialization_tasks_table Initialization_tasks[];
-extern rtems_driver_address_table       Device_drivers[];
 #if defined(RTEMS_MULTIPROCESSING)
   extern rtems_multiprocessing_table      Multiprocessing_configuration;
@@ -1203,6 +1202,16 @@
 #ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
 
+/**
+ * This specifies the maximum number of device drivers that
+ * can be installed in the system at one time.  It must account
+ * for both the statically and dynamically installed drivers.
+ */
+#ifndef CONFIGURE_MAXIMUM_DRIVERS
+  #define CONFIGURE_MAXIMUM_DRIVERS
+#endif
+
 #ifdef CONFIGURE_INIT
-  rtems_driver_address_table Device_drivers[] = {
+  rtems_driver_address_table
+    _IO_Driver_address_table[ CONFIGURE_MAXIMUM_DRIVERS ] = {
     #ifdef CONFIGURE_BSP_PREREQUISITE_DRIVERS
       CONFIGURE_BSP_PREREQUISITE_DRIVERS,
@@ -1255,25 +1264,10 @@
     #endif
   };
+
+  const size_t _IO_Number_of_drivers =
+    RTEMS_ARRAY_SIZE( _IO_Driver_address_table );
 #endif
 
 #endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
-
-/*
- *  Default the number of drivers per node.  This value may be
- *  overridden by the user.
- */
-
-#define CONFIGURE_NUMBER_OF_DRIVERS \
-  RTEMS_ARRAY_SIZE(Device_drivers)
-
-/**
- * This specifies the maximum number of device drivers that
- * can be installed in the system at one time.  It must account
- * for both the statically and dynamically installed drivers.
- */
-#ifndef CONFIGURE_MAXIMUM_DRIVERS
-  #define CONFIGURE_MAXIMUM_DRIVERS CONFIGURE_NUMBER_OF_DRIVERS
-#endif
-
 
 #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
@@ -2476,7 +2470,4 @@
       #endif
     #endif
-    CONFIGURE_MAXIMUM_DRIVERS,                /* maximum device drivers */
-    CONFIGURE_NUMBER_OF_DRIVERS,              /* static device drivers */
-    Device_drivers,                           /* pointer to driver table */
     CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,   /* number of static extensions */
     CONFIGURE_INITIAL_EXTENSION_TABLE,        /* pointer to static extensions */
Index: cpukit/sapi/include/rtems/config.h
===================================================================
--- cpukit/sapi/include/rtems/config.h	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/sapi/include/rtems/config.h	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -58,5 +58,4 @@
 
 #include <rtems/extension.h>
-#include <rtems/io.h>
 #if defined(RTEMS_MULTIPROCESSING)
 #include <rtems/score/mpci.h>
@@ -243,7 +242,4 @@
   #endif
 
-  uint32_t                       maximum_drivers;
-  uint32_t                       number_of_device_drivers;
-  rtems_driver_address_table    *Device_driver_table;
   uint32_t                       number_of_initial_extensions;
   const rtems_extensions_table  *User_extension_table;
@@ -336,13 +332,4 @@
    (Configuration.do_zero_of_workspace)
 
-#define rtems_configuration_get_maximum_drivers() \
-        (Configuration.maximum_drivers)
-
-#define rtems_configuration_get_number_of_device_drivers() \
-        (Configuration.number_of_device_drivers)
-
-#define rtems_configuration_get_device_driver_table() \
-        (Configuration.Device_driver_table)
-
 #define rtems_configuration_get_number_of_initial_extensions() \
         (Configuration.number_of_initial_extensions)
Index: cpukit/sapi/include/rtems/io.h
===================================================================
--- cpukit/sapi/include/rtems/io.h	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/sapi/include/rtems/io.h	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -251,16 +251,7 @@
 ) RTEMS_COMPILER_DEPRECATED_ATTRIBUTE;
 
-SAPI_IO_EXTERN uint32_t _IO_Number_of_drivers;
-
-SAPI_IO_EXTERN rtems_driver_address_table *_IO_Driver_address_table;
-
-/**
- * @brief Initialization of device drivers.
- *
- * NOTE: The IO manager has been extended to support runtime driver
- * registration. The driver table is now allocated in the
- * workspace.
- */
-void _IO_Manager_initialization( void );
+extern const size_t _IO_Number_of_drivers;
+
+extern rtems_driver_address_table _IO_Driver_address_table[];
 
 /**
Index: cpukit/sapi/src/exinit.c
===================================================================
--- cpukit/sapi/src/exinit.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/sapi/src/exinit.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -33,5 +33,4 @@
 #include <rtems/extensionimpl.h>
 #include <rtems/init.h>
-#include <rtems/io.h>
 #include <rtems/score/sysstate.h>
 
@@ -143,6 +142,4 @@
   _Extension_Manager_initialization();
 
-  _IO_Manager_initialization();
-
   _POSIX_API_Initialize();
 
Index: cpukit/sapi/src/io.c
===================================================================
--- cpukit/sapi/src/io.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ cpukit/sapi/src/io.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -20,61 +20,5 @@
 #endif
 
-#include <rtems/system.h>
-#include <rtems/config.h>
 #include <rtems/io.h>
-#include <rtems/score/isr.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/wkspace.h>
-
-#include <string.h>
-
-void _IO_Manager_initialization(void)
-{
-  uint32_t                    index;
-  rtems_driver_address_table *driver_table;
-  uint32_t                    drivers_in_table;
-  uint32_t                    number_of_drivers;
-
-  driver_table      = rtems_configuration_get_device_driver_table();
-  drivers_in_table  = rtems_configuration_get_number_of_device_drivers();
-  number_of_drivers = rtems_configuration_get_maximum_drivers();
-
-  /*
-   *  If the user claims there are less drivers than are actually in
-   *  the table, then let's just go with the table's count.
-   */
-  if ( number_of_drivers <= drivers_in_table )
-    number_of_drivers = drivers_in_table;
-
-  /*
-   *  If the maximum number of driver is the same as the number in the
-   *  table, then we do not have to copy the driver table.  They can't
-   *  register any dynamically.
-   */
-  if ( number_of_drivers == drivers_in_table ) {
-    _IO_Driver_address_table = driver_table;
-    _IO_Number_of_drivers = number_of_drivers;
-    return;
-  }
-
-  /*
-   *  The application requested extra slots in the driver table, so we
-   *  have to allocate a new driver table and copy theirs to it.
-   */
-
-  _IO_Driver_address_table = (rtems_driver_address_table *)
-      _Workspace_Allocate_or_fatal_error(
-        sizeof( rtems_driver_address_table ) * ( number_of_drivers )
-      );
-  _IO_Number_of_drivers = number_of_drivers;
-
-  memset(
-    _IO_Driver_address_table, 0,
-    sizeof( rtems_driver_address_table ) * ( number_of_drivers )
-  );
-
-  for ( index = 0 ; index < drivers_in_table ; index++ )
-    _IO_Driver_address_table[index] = driver_table[index];
-}
 
 void _IO_Initialize_all_drivers( void )
Index: doc/user/conf.t
===================================================================
--- doc/user/conf.t	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ doc/user/conf.t	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -3837,37 +3837,4 @@
 
 @c
-@c === CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE ===
-@c
-@subsection Specifying Application Defined Device Driver Table
-
-@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
-
-@table @b
-@item CONSTANT:
-@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE}
-
-@item DATA TYPE:
-List of device driver initializers (@code{rtems_driver_address_table}).
-
-@item RANGE:
-Undefined or array of device drivers.
-
-@item DEFAULT VALUE:
-This is not defined by default, indicating the @code{<rtems/confdefs.h>}
-is providing the device driver table.
-
-@end table
-
-@subheading DESCRIPTION:
-@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if the application
-wishes to provide their own Device Driver Table.
-
-The table must be an array of @code{rtems_driver_address_table} entries
-named @code{Device_drivers}.
-
-@subheading NOTES:
-It is expected that there the application would only rarely need to do this.
-
-@c
 @c === CONFIGURE_MAXIMUM_DRIVERS ===
 @c
@@ -4298,4 +4265,39 @@
 
 @c
+@c === CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE ===
+@c
+@subsection Specifying Application Defined Device Driver Table
+
+@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
+
+@table @b
+@item CONSTANT:
+@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE}
+
+@item DATA TYPE:
+Boolean feature macro.
+
+@item RANGE:
+Defined or undefined.
+
+@item DEFAULT VALUE:
+This is not defined by default, indicating the @code{<rtems/confdefs.h>}
+is providing the device driver table.
+
+@end table
+
+@subheading DESCRIPTION:
+@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if the application
+wishes to provide their own Device Driver Table.
+
+The table must be an array of @code{rtems_driver_address_table} entries named
+@code{_IO_Driver_address_table}.  The application must also provide a const
+variable @code{_IO_Number_of_drivers} of type @code{size_t} indicating the
+number of entries in the @code{_IO_Driver_address_table}.
+
+@subheading NOTES:
+It is expected that there the application would only rarely need to do this.
+
+@c
 @c === Multiprocessing Configuration ===
 @c
Index: testsuites/libtests/block11/init.c
===================================================================
--- testsuites/libtests/block11/init.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ testsuites/libtests/block11/init.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -435,5 +435,4 @@
 
 #define CONFIGURE_MAXIMUM_TASKS 1
-#define CONFIGURE_MAXIMUM_DRIVERS 2
 
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
Index: testsuites/sptests/sp21/init.c
===================================================================
--- testsuites/sptests/sp21/init.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ testsuites/sptests/sp21/init.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -30,6 +30,5 @@
 #define ZERO_DRIVER_MAJOR     0x3
 #define NO_DRIVER_MAJOR       0x4
-#define INVALID_DRIVER_MAJOR  \
-     (rtems_configuration_get_number_of_device_drivers() + 1)
+#define INVALID_DRIVER_MAJOR  UINT32_MAX
 
 /* driver entries to use with io_register */
Index: testsuites/sptests/spsize/size.c
===================================================================
--- testsuites/sptests/spsize/size.c	(revision 3a4d28a8c33fb20580d9603f0b839b4c4e684a5c)
+++ testsuites/sptests/spsize/size.c	(revision 263f4beceae0ec5602cb41e792c25ebe3ec49c97)
@@ -290,7 +290,4 @@
 
 /*intr.h*/      0                                         +
-
-/*io.h*/        (sizeof _IO_Number_of_drivers)            +
-                (sizeof _IO_Driver_address_table)         +
 
 /*isr.h*/       (sizeof _ISR_Nest_level)                  +
