Index: bsps/i386/pc386/headers.am
===================================================================
--- bsps/i386/pc386/headers.am	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/headers.am	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,25 @@
+## This file was generated by "./boostrap -H".
+
+include_HEADERS =
+include_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp.h
+include_HEADERS += include/bspopts.h
+include_HEADERS += ../../../../../../bsps/i386/pc386/include/crt.h
+include_HEADERS += ../../../../../../bsps/i386/pc386/include/edid.h
+include_HEADERS += ../../../../../../bsps/i386/pc386/include/tm27.h
+
+include_bspdir = $(includedir)/bsp
+include_bsp_HEADERS =
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/bspimpl.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/exar17d15x.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/fb_default_mode.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/fb_vesa.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/rtd316.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/tblsizes.h
+include_bsp_HEADERS += ../../../../../../bsps/i386/pc386/include/bsp/vbe3.h
+
+include_rtemsdir = $(includedir)/rtems
+include_rtems_HEADERS =
+include_rtems_HEADERS += ../../../../../../bsps/i386/pc386/include/rtems/kd.h
+include_rtems_HEADERS += ../../../../../../bsps/i386/pc386/include/rtems/keyboard.h
+include_rtems_HEADERS += ../../../../../../bsps/i386/pc386/include/rtems/ps2_drv.h
+include_rtems_HEADERS += ../../../../../../bsps/i386/pc386/include/rtems/vgacons.h
Index: bsps/i386/pc386/include/bsp.h
===================================================================
--- bsps/i386/pc386/include/bsp.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,264 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Global BSP definitions.
+ */
+
+/*-------------------------------------------------------------------------+
+| bsp.h v1.1 - PC386 BSP - 1997/08/07
++--------------------------------------------------------------------------+
+| This include file contains definitions related to the PC386 BSP.
++--------------------------------------------------------------------------+
+| (C) Copyright 1997 -
+| - NavIST Group - Real-Time Distributed Systems and Industrial Automation
+|
+| http://pandora.ist.utl.pt
+|
+| Instituto Superior Tecnico * Lisboa * PORTUGAL
++--------------------------------------------------------------------------+
+| Modified by Eric Valette the 20/05/98 in order to add definitions used
+| to enhance video putchar capabilities.
+|
+| Copyright (C) 1998  valette@crf.canon.fr
+|
+| Canon Centre Recherche France.
+|
++--------------------------------------------------------------------------+
+| Disclaimer:
+|
+| This file is provided "AS IS" without warranty of any kind, either
+| expressed or implied.
++--------------------------------------------------------------------------+
+| This code is based on:
+|   bsp.h,v 1.5 1995/12/19 20:07:30 joel Exp - go32 BSP
+| With the following copyright notice:
+| **************************************************************************
+| *  COPYRIGHT (c) 1989-1999.
+| *  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.org/license/LICENSE.
+| **************************************************************************
++--------------------------------------------------------------------------*/
+
+#ifndef LIBBSP_I386_PC386_BSP_H
+#define LIBBSP_I386_PC386_BSP_H
+
+#ifndef ASM
+
+#include <bspopts.h>
+#include <bsp/default-initial-extension.h>
+#include <bsp/tblsizes.h>
+
+#include <rtems.h>
+#include <rtems/score/cpu.h>
+#include <rtems/bspIo.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @degroup pc386_i386 PC386 Support
+ *
+ * @ingroup bsp_i386
+ *
+ * @brief PC386 support.
+ */
+
+#define BSP_HAS_FRAME_BUFFER 1
+
+/*
+ * Network driver configuration
+ */
+struct rtems_bsdnet_ifconfig;
+
+/* app. may provide a routine (called _very_ early) to tell us
+ * which ports to use for printk / console. BSP provides a default
+ * implementation (weak alias) which does nothing (use BSP default
+ * ports).
+ */
+extern void
+BSP_runtime_console_select(int *pPrintkPort, int *pConsolePort);
+
+extern int rtems_ne_driver_attach(struct rtems_bsdnet_ifconfig *, int);
+#define BSP_NE2000_NETWORK_DRIVER_NAME      "ne1"
+#define BSP_NE2000_NETWORK_DRIVER_ATTACH    rtems_ne_driver_attach
+
+extern int rtems_wd_driver_attach(struct rtems_bsdnet_ifconfig *, int);
+#define BSP_WD8003_NETWORK_DRIVER_NAME      "wd1"
+#define BSP_WD8003_NETWORK_DRIVER_ATTACH    rtems_wd_driver_attach
+
+extern int rtems_dec21140_driver_attach(struct rtems_bsdnet_ifconfig *, int);
+#define BSP_DEC21140_NETWORK_DRIVER_NAME    "dc1"
+#define BSP_DEC21140_NETWORK_DRIVER_ATTACH  rtems_dec21140_driver_attach
+
+extern int rtems_3c509_driver_attach(struct rtems_bsdnet_ifconfig *config);
+#define BSP_3C509_NETWORK_DRIVER_NAME    "3c1"
+#define BSP_3C509_NETWORK_DRIVER_ATTACH  rtems_3c509_driver_attach
+
+#ifndef RTEMS_BSP_NETWORK_DRIVER_NAME
+#define RTEMS_BSP_NETWORK_DRIVER_NAME   BSP_DEC21140_NETWORK_DRIVER_NAME
+#endif
+
+#ifndef RTEMS_BSP_NETWORK_DRIVER_ATTACH
+#define RTEMS_BSP_NETWORK_DRIVER_ATTACH BSP_DEC21140_NETWORK_DRIVER_ATTACH
+#endif
+
+/*-------------------------------------------------------------------------+
+| Constants
++--------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------+
+| Constants relating to the 8254 (or 8253) programmable interval timers.
++--------------------------------------------------------------------------*/
+#define IO_TIMER1      0x40
+                  /* Port address of the control port and timer channels */
+#define TIMER_CNTR0    (IO_TIMER1 + 0) /* timer 0 counter port           */
+#define TIMER_CNTR1    (IO_TIMER1 + 1) /* timer 1 counter port           */
+#define TIMER_CNTR2    (IO_TIMER1 + 2) /* timer 2 counter port           */
+#define TIMER_MODE     (IO_TIMER1 + 3) /* timer mode port                */
+#define TIMER_SEL0     0x00            /* select counter 0               */
+#define TIMER_SEL1     0x40            /* select counter 1               */
+#define TIMER_SEL2     0x80            /* select counter 2               */
+#define TIMER_INTTC    0x00            /* mode 0, intr on terminal cnt   */
+#define TIMER_ONESHOT  0x02            /* mode 1, one shot               */
+#define TIMER_RATEGEN  0x04            /* mode 2, rate generator         */
+#define TIMER_SQWAVE   0x06            /* mode 3, square wave            */
+#define TIMER_SWSTROBE 0x08            /* mode 4, s/w triggered strobe   */
+#define TIMER_HWSTROBE 0x0a            /* mode 5, h/w triggered strobe   */
+#define TIMER_LATCH    0x00            /* latch counter for reading      */
+#define TIMER_LSB      0x10            /* r/w counter LSB                */
+#define TIMER_MSB      0x20            /* r/w counter MSB                */
+#define TIMER_16BIT    0x30            /* r/w counter 16 bits, LSB first */
+#define TIMER_BCD      0x01            /* count in BCD                   */
+#define TIMER_RD_BACK  0xc0	       /* Read Back Command 		 */
+		/* READ BACK command layout in the Command Register 	 */
+#define RB_NOT_COUNT	0x40	       /* Don't select counter latch 	 */
+#define RB_NOT_STATUS	0x20	       /* Don't select status latch 	 */
+#define	RB_COUNT_0	0x02	       /* Counter 0 latch 		 */
+#define RB_COUNT_1	0x04	       /* Counter 1 latch 		 */
+#define RB_COUNT_2	0x08	       /* Counter 2 latch 		 */
+#define RB_OUTPUT	0x80	       /* Output of the counter is 1 	 */
+
+#define	TIMER_TICK     1193182  /* The internal tick rate in ticks per second */
+
+#if defined( RTEMS_SMP )
+  extern ISR_lock_Control rtems_i386_i8254_access_lock;
+#endif
+
+
+/*-------------------------------------------------------------------------+
+| Console Defines
+|      WARNING: These Values MUST match the order in
+|               Console_Configuration_Ports
++--------------------------------------------------------------------------*/
+#define    BSP_CONSOLE_VGA            0
+#define    BSP_CONSOLE_COM1           1
+#define    BSP_CONSOLE_COM2           2
+
+/*-------------------------------------------------------------------------+
+| Convert microseconds to ticks and ticks to microseconds.
++--------------------------------------------------------------------------*/
+#define US_TO_TICK(us) (((us)*105+44)/88)
+#define TICK_TO_US(tk) (((tk)*88+52)/105)
+
+/*-------------------------------------------------------------------------+
+| External Variables.
++--------------------------------------------------------------------------*/
+extern interrupt_gate_descriptor Interrupt_descriptor_table[IDT_SIZE];
+extern segment_descriptors _Global_descriptor_table   [GDT_SIZE];
+
+/*-------------------------------------------------------------------------+
+| Function Prototypes.
++--------------------------------------------------------------------------*/
+void          _IBMPC_initVideo(void);    /* from 'outch.c'  */
+void          _IBMPC_outch    (char);    /* from 'outch.c'  */
+char          _IBMPC_inch     (void);    /* from 'inch.c'   */
+char          _IBMPC_inch_sleep (void);  /* from 'inch.c'   */
+int           BSP_wait_polled_input(void); /* from 'inch.c' */
+int           rtems_kbpoll( void );      /* from 'inch.c' */
+int           getch( void );             /* from 'inch.c' */
+void           add_to_queue( unsigned short b ); /* from 'inch.c' */
+
+void Wait_X_ms(unsigned int timeToWait); /* from 'timer.c'  */
+void Calibrate_loop_1ms(void);           /* from 'timer.c'  */
+
+void rtems_irq_mngt_init(void);          /* from 'irq_init.c' */
+
+void Clock_driver_install_handler(void);             /* from 'ckinit.c'  */
+void Clock_driver_support_initialize_hardware(void); /* from 'ckinit.c'  */
+
+void *bsp_idle_thread( uintptr_t ignored );
+#define BSP_IDLE_TASK_BODY bsp_idle_thread
+
+void kbd_reset_setup(char *str, int *ints);   /* from 'pc_keyb.c' */
+size_t read_aux(char * buffer, size_t count); /* from 'ps2_mouse.c'  */
+
+bool bsp_get_serial_mouse_device(             /* from 'serial_mouse.c' */
+  const char **name,
+  const char **type
+);
+
+void register_leds(                           /* from 'keyboard.c' */
+  int console,
+  unsigned int led,
+  unsigned int *addr,
+  unsigned int mask
+);
+
+/* Definitions for BSPConsolePort */
+#define BSP_CONSOLE_PORT_CONSOLE (-1)
+#define BSP_CONSOLE_PORT_COM1    (BSP_UART_COM1)
+#define BSP_CONSOLE_PORT_COM2    (BSP_UART_COM2)
+
+/*
+ * Command line.
+ */
+const char* bsp_cmdline(void);
+const char* bsp_cmdline_arg(const char* arg);
+
+#if BSP_ENABLE_IDE
+/*
+ * IDE command line parsing.
+ */
+void bsp_ide_cmdline_init(void);
+
+/*
+ * indicate, that BSP has IDE driver
+ */
+#define RTEMS_BSP_HAS_IDE_DRIVER
+#endif
+
+/* GDB stub stuff */
+void init_remote_gdb( void );
+void i386_stub_glue_init(int uart);
+void i386_stub_glue_init_breakin(void);
+int i386_stub_glue_uart(void);
+void breakpoint(void);
+
+#define BSP_MAXIMUM_DEVICES 6
+
+/*
+ * Debug helper methods
+ */
+typedef __FILE FILE;
+uint32_t BSP_irq_count_dump(FILE *f);
+
+/*
+ * Prototypes just called from .S files. This lets the .S file include
+ * bsp.h just to establish the dependency.
+ */
+void raw_idt_notify(void);
+void C_dispatch_isr(int vector);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !ASM */
+
+#endif /* _BSP_H */
Index: bsps/i386/pc386/include/bsp/bspimpl.h
===================================================================
--- bsps/i386/pc386/include/bsp/bspimpl.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/bspimpl.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,47 @@
+/**
+ * @file
+ *
+ * BSP specific helpers
+ */
+
+/*
+ *  COPYRIGHT (c) 2016.
+ *  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.org/license/LICENSE.
+ */
+
+#ifndef __BSPIMPL_h
+#define __BSPIMPL_h
+
+#include <rtems/pci.h>
+
+/*
+ * PCI Support Methods
+ */
+const pci_config_access_functions *pci_bios_initialize(void);
+const pci_config_access_functions *pci_io_initialize(void);
+
+/*
+ * Helper to parse boot command line arguments related to the console driver
+ */
+void pc386_parse_console_arguments(void);
+
+/*
+ * Helper to parse boot command line arguments related to gdb
+ */
+void pc386_parse_gdb_arguments(void);
+
+/*
+ * Dynamically probe for Legacy UARTS
+ */
+void legacy_uart_probe(void);
+
+/*
+ * Dynamically probe for PCI UARTS
+ */
+void pci_uart_probe(void);
+
+#endif
Index: bsps/i386/pc386/include/bsp/exar17d15x.h
===================================================================
--- bsps/i386/pc386/include/bsp/exar17d15x.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/exar17d15x.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,55 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Exar Multiport PCI UART interface.
+ */
+
+/*
+ *  COPYRIGHT (c) 1989-2012.
+ *  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.org/license/LICENSE.
+ */
+
+#ifndef _BSP_EXAR17D15X__h
+#define _BSP_EXAR17D15X__h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ *  This macro defines the standard device driver table entry for
+ *  a console device driver.
+ */
+#define EXAR17D15X_DRIVER_TABLE_ENTRY \
+  { exar17d15x_initialize, NULL, NULL, NULL, NULL, NULL }
+
+/**
+ *  @brief Exar 17D15x Initialization Entry Point
+ *
+ *  This method initializes the Exar XR17D15x device driver.
+ *
+ *  @param[in] major is the device driver major number
+ *  @param[in] minor is the device driver minor number
+ *  @param[in] arg is the parameters to this call
+ *
+ *  @return This method returns RTEMS_SUCCESSFUL when
+ *          the device driver is successfully initialized.
+ */
+rtems_device_driver exar17d15x_initialize(
+  rtems_device_major_number  major,
+  rtems_device_minor_number  minor,
+  void                      *arg
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: bsps/i386/pc386/include/bsp/fb_default_mode.h
===================================================================
--- bsps/i386/pc386/include/bsp/fb_default_mode.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/fb_default_mode.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,25 @@
+/**
+ * @file fb_default_mode.h
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Variable for the definition of the default graphical mode to be
+ *     initialized.
+ */
+
+/*
+ * @brief Allows to enable initialization of specific framebuffer driver (e.g.
+ * VESA real mode) from an application by setting the value of this variable
+ * to non null value in user's module. The value of this variable will be then
+ * updated when linked with an application's object.
+ *
+ * Further the value should point to string in the following format:
+ * "<resX>x<resY>[-<bpp>]" - e.g. "1024x768-32"
+ * "auto" - select the graphic mode automatically
+ * "none" / "off" - do not initialize the driver
+ * the given parameters are used if applicable.
+ *
+ * Command line argument "--video=" has priority over this string if
+ * it is read/implemented by the driver.
+ */
+extern const char * const rtems_fb_default_mode;
Index: bsps/i386/pc386/include/bsp/fb_vesa.h
===================================================================
--- bsps/i386/pc386/include/bsp/fb_vesa.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/fb_vesa.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,132 @@
+/**
+ * @file fb_vesa.h
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Headers specific for framebuffer drivers utilizing VESA VBE.
+ */
+
+/*
+ * Copyright (C) 2014  Jan DoleÅŸal (dolezj21@fel.cvut.cz)
+ *                     CTU in Prague.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bsp/vbe3.h>
+#include <edid.h>
+
+#ifndef _FB_VESA_H
+#define _FB_VESA_H
+
+#ifndef ASM /* ASM */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* ----- Prototypes ----- */
+
+/**
+ * @brief Returns information about graphic's controller in the \p info_block
+ * structure.
+ *
+ * @param[out] info_block pointer to the struct to be filled with
+ *                  controller information
+ * @param[in] queried_VBE_Version if >0x200 then video bios is asked to fill in
+ *                          parameters which appeared with second version
+ *                          of VBE.
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_controller_information (
+    VBE_vbe_info_block *info_block,
+    uint16_t queried_VBE_Version
+);
+
+/**
+ * @brief Fills structure \p info_block with informations about selected mode in
+ * \p mode_number variable.
+ *
+ * @param[out] info_block pointer to the struct to be filled with
+ *                        mode information
+ * @param[in] mode_number detailes of this mode to be filled
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_mode_information (
+    VBE_mode_info_block *info_block,
+    uint16_t mode_number
+);
+
+/**
+ * @brief Sets graphics mode selected. If mode has refreshRateCtrl bit set, than
+ * the \p info_block must be filled accordingly.
+ *
+ * @param[in] mode_number number of mode to be set
+ * @param[in] info_block pointer to struct containing refresh rate control info
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_set_mode (
+    uint16_t mode_number,
+    VBE_CRTC_info_block *info_block
+);
+
+/**
+ * @brief Get currently set mode number.
+ *
+ * @param[out] mode_number variable to be filled with current mode number
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_current_mode (
+    uint16_t *mode_number
+);
+
+/**
+ * @brief Gets information about display data channel implemented in the
+ * graphic's controller.
+ *
+ * @param[in] controller_unit_number
+ * @param[out] seconds_to_transfer_EDID_block approximate time to transfer one
+ *                                      EDID block rounded up to seconds
+ * @param[out] DDC_level_supported contains DDC version supported and
+ *                          screen blanking state during transfer
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_report_DDC_capabilities (
+    uint16_t controller_unit_number,
+    uint8_t *seconds_to_transfer_EDID_block,
+    uint8_t *DDC_level_supported
+);
+
+/**
+ * @brief Reads selected EDID block from display attached to controller's
+ * interface.
+ *
+ * @param[in] controller_unit_number
+ * @param[in] EDID_block_number block no. to be read from the display
+ * @param[out] buffer place to store block fetched from the display
+ * @retval  ax register content as defined in VBE RETURN STATUS paragraph
+ * @retval  -1 error calling graphical bios
+ */
+uint32_t VBE_read_EDID (
+    uint16_t controller_unit_number,
+    uint16_t EDID_block_number,
+    EDID_edid1 *buffer
+);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* ASM */
+
+#endif /* _FB_VESA_H */
Index: bsps/i386/pc386/include/bsp/rtd316.h
===================================================================
--- bsps/i386/pc386/include/bsp/rtd316.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/rtd316.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,77 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief RTD316 driver interface defintions.
+ */
+
+/*
+ *  COPYRIGHT (c) 1989-2014.
+ *  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.org/license/LICENSE.
+ */
+
+#ifndef _BSP_RTD_316_h
+#define _BSP_RTD_316_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ *  This macro defines the standard device driver table entry for
+ *  a console device driver.
+ */
+#define RTD316_DRIVER_TABLE_ENTRY \
+  { rtd316_initialize, NULL, NULL, NULL, NULL, NULL }
+
+/**
+ *  @brief RTD316 Initialization Entry Point
+ *
+ *  This method initializes the RTD316 device driver.
+ *
+ *  @param[in] major is the device driver major number
+ *  @param[in] minor is the device driver minor number
+ *  @param[in] arg is the parameters to this call
+ *
+ *  @return This method returns RTEMS_SUCCESSFUL when
+ *          the device driver is successfully initialized.
+ */
+rtems_device_driver rtd316_initialize(
+  rtems_device_major_number  major,
+  rtems_device_minor_number  minor,
+  void                      *arg
+);
+
+/**
+ *  @brief RTD316 Obtain Register Helper
+ *
+ *  This method is used to read registers on the RTD316.
+ *
+ *  @param[in] addr is the base address
+ *  @param[in] reg is the register number
+ *
+ *  @return This method returns the value of the register.
+ */
+uint8_t rtd316_com_get_register(uint32_t addr, uint8_t reg);
+
+/**
+ *  @brief RTD316 Set Register Helper
+ *
+ *  This method is used to set registers on the RTD316.
+ *
+ *  @param[in] addr is the base address
+ *  @param[in] reg is the register number
+ */
+void rtd316_com_set_register(uint32_t addr,uint8_t reg, uint8_t val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: bsps/i386/pc386/include/bsp/tblsizes.h
===================================================================
--- bsps/i386/pc386/include/bsp/tblsizes.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/tblsizes.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,24 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Sizes of Global and Interrupt descriptor tables.
+ */
+
+/*
+ * This header file is also used in assembler modules.
+ *
+ * Copyright (C) 2014  Jan DoleÅŸal (dolezj21@fel.cvut.cz)
+ *                     CTU in Prague.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bspopts.h>
+
+#define IDT_SIZE (256)
+#define NUM_SYSTEM_GDT_DESCRIPTORS 4
+#define GDT_SIZE (NUM_SYSTEM_GDT_DESCRIPTORS + NUM_APP_DRV_GDT_DESCRIPTORS)
Index: bsps/i386/pc386/include/bsp/vbe3.h
===================================================================
--- bsps/i386/pc386/include/bsp/vbe3.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/bsp/vbe3.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,619 @@
+/**
+ * @file vbe3.h
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief VESA Bios Extension definitions.
+ *
+ * This file contains definitions for constants related to VBE.
+ *         More information can be found at
+ *     <http://www.vesa.org/vesa-standards/free-standards/>.
+ *         VESA public standards may be found at
+ *     <http://www.vesa.org/wp-content/uploads/2010/12/thankspublic.htm>.
+ */
+
+/*
+ * Copyright (C) 2014  Jan DoleÅŸal (dolezj21@fel.cvut.cz)
+ *                     CTU in Prague.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _VBE_H
+#define _VBE_H
+
+#ifndef ASM /* ASM */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <rtems/score/basedefs.h>
+
+/*  VESA BIOS EXTENSION (VBE) Core functions Standard
+    Version: 3.0 Date: September 16, 1998               */
+
+/** AL == 4Fh: Function is supported \n
+ *  AL != 4Fh: Function is not supported */
+#define VBE_functionSupported        0x4F
+/** AH == 00h: Function call successful */
+#define VBE_callSuccessful           0x00
+/** AH == 01h: Function call failed */
+#define VBE_callFailed               0x01
+/** AH == 02h: Function is not supported in the current hardware configuration*/
+#define VBE_notSupportedInCurHWConf  0x02
+/** AH == 03h: Function call invalid in current video mode */
+#define VBE_callInvalid              0x03
+
+/* VBE Mode Numbers */
+/** D0-D8 =  Mode number */
+#define VBE_modeNumberMask         0x01FF
+#define VBE_modeNumberShift          0x00
+/** If D8 == 0, this is not a VESA defined VBE mode \n
+    If D8 == 1, this is a VESA defined VBE mode */
+#define VBE_VESAmodeMask           0x0100
+#define VBE_VESAmodeShift            0x08
+/* D9-D10 =  Reserved by VESA for future expansion (= 0) */
+/** If D11 == 0, Use current BIOS default refresh rate \n
+    If D11 == 1, Use user specified CRTC values for refresh rate */
+#define VBE_refreshRateCtrlMask    0x0800
+#define VBE_refreshRateCtrlShift     0x0B
+/* D12-13 = Reserved for VBE/AF (must be 0) */
+/** If D14 == 0, Use Banked/Windowed Frame Buffer \n
+    If D14 == 1, Use Linear/Flat Frame Buffer */
+#define VBE_linearFlatFrameBufMask 0x4000
+#define VBE_linearFlatFrameBufShift  0x0E
+/** If D15 == 0, Clear display memory \n
+    If D15 == 1, Preserve display memory */
+#define VBE_preserveDispMemMask    0x8000
+#define VBE_preserveDispMemShift     0x0F
+
+/* Graphics modes */
+/** 15-bit mode, Resolution: 640x400,   Colors: 256  */
+#define VBE_R640x400C256      0x100
+/** 15-bit mode, Resolution: 640x480,   Colors: 256  */
+#define VBE_R640x480C256      0x101
+/** 15-bit mode, Resolution: 800x600,   Colors: 16   */
+#define VBE_R800x600C16       0x102
+/** 7-bit mode,  Resolution: 800x600,   Colors: 16   */
+#define VBE_b7R800x600C16     0x6A
+/** 15-bit mode, Resolution: 800x600,   Colors: 256  */
+#define VBE_R800x600C256      0x103
+/** 15-bit mode, Resolution: 1024x768,  Colors: 16   */
+#define VBE_R1024x768C16      0x104
+/** 15-bit mode, Resolution: 1024x768,  Colors: 256  */
+#define VBE_R1024x768C256     0x105
+/** 15-bit mode, Resolution: 1280x1024, Colors: 16   */
+#define VBE_R1280x1024C16     0x106
+/** 15-bit mode, Resolution: 1280x1024, Colors: 256  */
+#define VBE_R1280x1024C256    0x107
+/** 15-bit mode, Resolution: 320x200,   Colors: 32K   (1:5:5:5) */
+#define VBE_R320x200C32K      0x10D
+/** 15-bit mode, Resolution: 320x200,   Colors: 64K   (5:6:5)   */
+#define VBE_R320x200C64K      0x10E
+/** 15-bit mode, Resolution: 320x200,   Colors: 16.8M (8:8:8)   */
+#define VBE_R320x200C17M      0x10F
+/** 15-bit mode, Resolution: 640x480,   Colors: 32K   (1:5:5:5) */
+#define VBE_R640x480C32K      0x110
+/** 15-bit mode, Resolution: 640x480,   Colors: 64K   (5:6:5)   */
+#define VBE_R640x480C64K      0x111
+/** 15-bit mode, Resolution: 640x480,   Colors: 16.8M (8:8:8)   */
+#define VBE_R640x480C17M      0x112
+/** 15-bit mode, Resolution: 800x600,   Colors: 32K   (1:5:5:5) */
+#define VBE_R800x600C32K      0x113
+/** 15-bit mode, Resolution: 800x600,   Colors: 64K   (5:6:5)   */
+#define VBE_R800x600C64K      0x114
+/** 15-bit mode, Resolution: 800x600,   Colors: 16.8M (8:8:8)   */
+#define VBE_R800x600C17M      0x115
+/** 15-bit mode, Resolution: 1024x768,  Colors: 32K   (1:5:5:5) */
+#define VBE_R1024x768C32K     0x116
+/** 15-bit mode, Resolution: 1024x768,  Colors: 64K   (5:6:5)   */
+#define VBE_R1024x768C64K     0x117
+/** 15-bit mode, Resolution: 1024x768,  Colors: 16.8M (8:8:8)   */
+#define VBE_R1024x768C17M     0x118
+/** 15-bit mode, Resolution: 1280x1024, Colors: 32K   (1:5:5:5) */
+#define VBE_R1280x1024C32K    0x119
+/** 15-bit mode, Resolution: 1280x1024, Colors: 64K   (5:6:5)   */
+#define VBE_R1280x1024C64K    0x11A
+/** 15-bit mode, Resolution: 1280x1024, Colors: 16.8M (8:8:8)   */
+#define VBE_R1280x1024C17M    0x11B
+#define VBE_SpecialMode       0x81FF
+
+/* Text modes */
+#define VBE_C80R60            0x108 /**< 15-bit mode, Columns: 80,  Rows: 60 */
+#define VBE_C132R25           0x109 /**< 15-bit mode, Columns: 132, Rows: 25 */
+#define VBE_C132R43           0x10A /**< 15-bit mode, Columns: 132, Rows: 43 */
+#define VBE_C132R50           0x10B /**< 15-bit mode, Columns: 132, Rows: 50 */
+#define VBE_C132R60           0x10C /**< 15-bit mode, Columns: 132, Rows: 60 */
+
+/* VBE function numbers - passed in AX register */
+/** VBE function - Return VBE Controller Information */
+#define VBE_RetVBEConInf       0x4F00
+/** VBE function - Return VBE Mode Information */
+#define VBE_RetVBEModInf       0x4F01
+/** VBE function - Set VBE Mode */
+#define VBE_SetVBEMod          0x4F02
+/** VBE function - Return Current VBE Mode */
+#define VBE_RetCurVBEMod       0x4F03
+/** VBE function - Save/Restore State */
+#define VBE_SavResSta          0x4F04
+/** VBE function - Display Window Control */
+#define VBE_DisWinCon          0x4F05
+/** VBE function - Set/Get Logical Scan Line Length */
+#define VBE_SetGetLogScaLinLen 0x4F06
+/** VBE function - Set/Get Display Start */
+#define VBE_SetGetDisSta       0x4F07
+/** VBE function - Set/Get DAC Palette Format */
+#define VBE_SetGetDACPalFor    0x4F08
+/** VBE function - Set/Get Palette Data */
+#define VBE_SetGetPalDat       0x4F09
+/** VBE function - Return VBE Protected Mode Interface */
+#define VBE_RetVBEProModInt    0x4F0A
+/** VBE function - Get/Set pixel clock */
+#define VBE_GetSetpixclo       0x4F0B
+/** VBE function - Power Management Extensions (PM) */
+#define VBE_PowManExt          0x4F10
+/** VBE function - Flat Panel Interface Extensions (FP) */
+#define VBE_FlaPanIntExt       0x4F11
+/** VBE function - Audio Interface Extensions (AI) */
+#define VBE_AudIntExt          0x4F13
+/** VBE function - OEM Extensions */
+#define VBE_OEMExt             0x4F14
+/** VBE function - Display Data Channel (DDC), Serial Control Interface (SCI) */
+#define VBE_DisDatCha          0x4F15
+
+/* VBE subfunction numbers - passed in BL register */
+#define VBE_RetVBESupSpeInf    0x00  /**< Return VBE Supplemental
+                                      * Specification Information */
+/* *** Structures *** */
+/**
+ * @brief Far pointer as defined by VBE standard.
+ */
+typedef struct {
+    /** @brief Offset to segment described by \a selector. */
+    uint16_t offset;
+    /** @brief Selector or Segment depending on whether this is used from 16bit
+        protected mode or from real mode. */
+    uint16_t selector;
+} RTEMS_PACKED VBE_far_pointer;
+
+/**
+ * @brief Protected mode info block as defined by VBE standard.
+ */
+typedef struct {
+    /** PM Info Block Signature */
+    uint8_t   Signature[4];
+    /** Offset of PM entry point within BIOS */
+    uint16_t  EntryPoint;
+    /** Offset of PM initialization entry point */
+    uint16_t  PMInitialize;
+    /** Selector to BIOS data area emulation block */
+    uint16_t  BIOSDataSel;
+    /** Selector to access A0000h physical memmory */
+    uint16_t  A0000Sel;
+    /** Selector to access B0000h physical memmory */
+    uint16_t  B0000Sel;
+    /** Selector to access B8000h physical memmory */
+    uint16_t  B8000Sel;
+    /** Selector to access code segment as data */
+    uint16_t  CodeSegSel;
+    /** Set to 1 when in protected mode */
+    uint8_t   InProtectMode;
+    /** Checksum byte for structure. Sum over all structure bytes gives 0. */
+    uint8_t   Checksum;
+} RTEMS_PACKED VBE_protected_mode_info_block;
+
+/** General VBE signature */
+#define VBE_SIGNATURE "VESA"
+/** Signature for VBE 2.0 and higher */
+#define VBE20plus_SIGNATURE "VBE2"
+/** for STUB see VBE CORE FUNCTIONS VERSION 3.0 - Appendix 1 */
+#define VBE_STUB_VideoModeList 0xFFFF
+#define VBE_END_OF_VideoModeList 0xFFFF
+/**
+ * @brief Information about VBE implementation.
+ */
+typedef struct {
+    /** VBE Signature */
+    uint8_t   VbeSignature[4];
+    /** VBE Version */
+    uint16_t  VbeVersion;
+    /** VBE_far_pointer to OEM String */
+    uint8_t  *OemStringPtr;
+    /** Capabilities of graphics controller */
+    uint8_t   Capabilities[4];
+    /** VBE_far_pointer to VideoModeList */
+    uint32_t *VideoModePtr;
+    /** Number of 64kb memory blocks    */
+    uint16_t  TotalMemory;
+    /*  Added for VBE 2.0+ */
+    /** VBE implementation Software revision */
+    uint16_t  OemSoftwareRev;
+    /** VBE_far_pointer to Vendor Name String */
+    uint8_t  *OemVendorNamePtr;
+    /** VBE_far_pointer to Product Name String */
+    uint8_t  *OemProductNamePtr;
+    /** VBE_far_pointer to Product Revision String */
+    uint8_t  *OemProductRevPtr;
+    /** Reserved for VBE implementation scratch */
+    uint8_t   Reserved[222];
+    /** Data Area for OEM Strings */
+    uint8_t   OemData[256];
+} RTEMS_PACKED VBE_vbe_info_block;
+
+/**
+ * @brief Describes graphic's mode parameter.
+ */
+typedef struct {
+    /*  Mandatory information for all VBE revisions */
+    /** mode attributes */
+    uint16_t  ModeAttributes;
+    /** window A attributes */
+    uint8_t   WinAAttributes;
+    /** window B attributes */
+    uint8_t   WinBAttributes;
+    /** window granularity */
+    uint16_t  WinGranularity;
+    /** window size */
+    uint16_t  WinSize;
+    /** window A start segment */
+    uint16_t  WinASegment;
+    /** window B start segment */
+    uint16_t  WinBSegment;
+    /** real mode pointer to window function */
+    uint32_t *WinFuncPtr;
+    /** bytes per scan line */
+    uint16_t  BytesPerScanLine;
+    /*  Mandatory information for VBE 1.2 and above */
+    /** horizontal resolution in px or chars */
+    uint16_t  XResolution;
+    /** vertical resolution in px or chars */
+    uint16_t  YResolution;
+    /** character cell width in pixels */
+    uint8_t   XCharSize;
+    /** character cell height in pixels */
+    uint8_t   YCharSize;
+    /** number of memory planes */
+    uint8_t   NumberOfPlanes;
+    /** bits per pixel */
+    uint8_t   BitsPerPixel;
+    /** number of banks */
+    uint8_t   NumberOfBanks;
+    /** memory model type */
+    uint8_t   MemoryModel;
+    /** bank size in KB */
+    uint8_t   BankSize;
+    /** number of images */
+    uint8_t   NumberOfImagePages;
+    /** reserved for page function */
+    uint8_t   Reserved0;
+    /*  Direct Color fields (required for direct/6 and YUV/7 memory models) */
+    /** size of direct color red mask in bits */
+    uint8_t   RedMaskSize;
+    /** bit position of lsb of red mask */
+    uint8_t   RedFieldPosition;
+    /** size of direct color green mask in b */
+    uint8_t   GreenMaskSize;
+    /** bit position of lsb of green mask */
+    uint8_t   GreenFieldPosition;
+    /** size of direct color blue mask in b */
+    uint8_t   BlueMaskSize;
+    /** bit position of lsb of blue mask */
+    uint8_t   BlueFieldPosition;
+    /** size of direct color reserved mask */
+    uint8_t   RsvdMaskSize;
+    /** bit position of lsb of reserved mask */
+    uint8_t   RsvdFieldPosition;
+    /** direct color mode attributes */
+    uint8_t   DirectColorModeInfo;
+    /*  Mandatory information for VBE 2.0 and above */
+    /** physical address for flat memory frame buffer */
+    uint32_t *PhysBasePtr;
+    /** Reserved - always set to 0 */
+    uint32_t  Reserved1;
+    /** Reserved - always set to 0 */
+    uint16_t  Reserved2;
+    /*  Mandatory information for VBE 3.0 and above */
+    /** bytes per scan line for linear modes */
+    uint16_t  LinBytesPerScanLine;
+    /** number of images for banked modes */
+    uint8_t   BnkNumberOfImagePages;
+    /** number of images for linear modes */
+    uint8_t   LinNumberOfImagePages;
+        /* linear modes */
+    /** size of direct color red mask */
+    uint8_t   LinRedMaskSize;
+    /** bit position of lsb of red mask */
+    uint8_t   LinRedFieldPosition;
+    /** size of direct color green mask  */
+    uint8_t   LinGreenMaskSize;
+    /** bit position of lsb of green mask */
+    uint8_t   LinGreenFieldPosition;
+    /** size of direct color blue mask  */
+    uint8_t   LinBlueMaskSize;
+    /** bit position of lsb of blue mask */
+    uint8_t   LinBlueFieldPosition;
+    /** size of direct color reserved mask */
+    uint8_t   LinRsvdMaskSize;
+    /** bit position of lsb of reserved mask */
+    uint8_t   LinRsvdFieldPosition;
+    /** maximum pixel clock (in Hz) for graphics mode */
+    uint32_t  MaxPixelClock;
+    /** remainder of VBE_mode_info_block */
+    uint8_t   Reserved3[189];
+} RTEMS_PACKED VBE_mode_info_block;
+
+/**
+ * @brief Describes monitor synchronization.
+ */
+typedef struct {
+    /** Horizontal total in pixels */
+    uint16_t  HorizontalTotal;
+    /** Horizontal sync start in pixels */
+    uint16_t  HorizontalSyncStart;
+    /** Horizontal sync end in pixels */
+    uint16_t  HorizontalSyncEnd;
+    /** Vertical total in lines */
+    uint16_t  VerticalTotal;
+    /** Vertical sync start in lines */
+    uint16_t  VerticalSyncStart;
+    /** Vertical sync end in lines */
+    uint16_t  VerticalSyncEnd;
+    /** Flags (Interlaced, Double Scan etc) */
+    uint8_t   Flags;
+    /** Pixel clock in units of Hz */
+    uint32_t  PixelClock;
+    /** Refresh rate in units of 0.01 Hz */
+    uint16_t  RefreshRate;
+    /** remainder of VBE_mode_info_block */
+    uint8_t   Reserved[40];
+} RTEMS_PACKED VBE_CRTC_info_block;
+
+/**
+ * @brief Describes palette entry.
+ */
+typedef struct {
+    /** Blue channel value (6 or 8 bits) */
+    uint8_t   Blue;
+    /** Green channel value (6 or 8 bits) */
+    uint8_t   Green;
+    /** Red channel value(6 or 8 bits) */
+    uint8_t   Red;
+    /** DWORD alignment byte (unused) */
+    uint8_t   Alignment;
+} RTEMS_PACKED VBE_palette_entry;
+
+/**
+ * @brief Supplemental VBE info block.
+ */
+typedef struct {
+    /** Supplemental VBE Signature */
+    uint8_t   SupVbeSignature[7];
+    /** Supplemental VBE Version */
+    uint16_t  SupVbeVersion;
+    /** Bitfield of supported subfunctions */
+    uint8_t   SupVbeSubFunc[8];
+    /** OEM Software revision */
+    uint16_t  OemSoftwareRev;
+    /** VBE_far_pointer to Vendor Name String */
+    uint8_t  *OemVendorNamePtr;
+    /** VBE_far_pointer to Product Name String */
+    uint8_t  *OemProductNamePtr;
+    /** VBE_far_pointer to Product Revision String */
+    uint8_t  *OemProductRevPtr;
+    /** VBE_far_pointer to OEM String */
+    uint8_t  *OemStringPtr;
+    /** Reserved for description strings and future expansion */
+    uint8_t   Reserved[221];
+} RTEMS_PACKED VBE_supplemental_vbe_info_block;
+
+/* VBE_vbe_info_block Capabilities */
+/** VBE Info Block - Capabilities\n
+    D0 = 0  DAC is fixed width, with 6 bits per primary color \n
+    D0 = 1 DAC width is switchable to 8 bits per primary color */
+#define VBE_DACswitchableMask     0x0001
+/** VBE Info Block - Capabilities\n
+    D1 = 0 Controller is VGA compatible \n
+    D1 = 1 Controller is not VGA compatible */
+#define VBE_notVGAcompatibleMask  0x0002
+/** VBE Info Block - Capabilities\n
+    D2 = 0 Normal RAMDAC operation \n
+    D2 = 1 When programming large blocks of information to the RAMDAC,
+            use the blank bit in Function 09h. */
+#define VBE_specialRAMDACopMask   0x0004
+/** VBE Info Block - Capabilities\n
+    D3 = 0 No hardware stereoscopic signaling support \n
+    D3 = 1 Hardware stereoscopic signaling supported by controller */
+#define VBE_hwStereoscopicMask    0x0008
+/** VBE Info Block - Capabilities\n
+    D4 = 0 Stereo signaling supported via external VESA stereo connector \n
+    D4 = 1 Stereo signaling supported via VESA EVC connector */
+#define VBE_supportEVCconnMask    0x0010
+/*  D5-31 = Reserved */
+
+/* VBE_mode_info_block ModeAttributes */
+/** Mode Info Block - Mode Attributes\n
+    D0 =  Mode supported by hardware configuration.
+     0 =  Mode not supported in hardware\n
+     1 =  Mode supported in hardware */
+#define VBE_modSupInHWMask        0x0001
+/*  D1 =  1 (Reserved) */
+/** Mode Info Block - Mode Attributes\n
+    D2 =  TTY Output functions supported by BIOS.
+     0 =  TTY Output functions not supported by BIOS\n
+     1 =  TTY Output functions supported by BIOS */
+#define VBE_TTYOutSupByBIOSMask   0x0004
+/** Mode Info Block - Mode Attributes\n
+    D3 =  Monochrome/color mode (see note below).
+     0 =  Monochrome mode\n
+     1 =  Color mode */
+#define VBE_ColorModeMask         0x0008
+/** Mode Info Block - Mode Attributes\n
+    D4 =  Mode type.
+     0 =  Text mode\n
+     1 =  Graphics mode */
+#define VBE_GraphicsModeMask      0x0010
+/** Mode Info Block - Mode Attributes\n
+    D5 =  VGA compatible mode.
+     0 =  Yes\n
+     1 =  No */
+#define VBE_VGACompModeMask       0x0020
+/** Mode Info Block - Mode Attributes\n
+    D6 =  VGA compatible windowed memory mode is available.
+     0 =  Yes\n
+     1 =  No */
+#define VBE_VGACompWinMemModeMask 0x0040
+/** Mode Info Block - Mode Attributes\n
+    D7 =  Linear frame buffer mode is available.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_LinFraBufModeAvaiMask 0x0080
+/** Mode Info Block - Mode Attributes\n
+    D8 =  Double scan mode is available.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_DblScnModeAvaiMask    0x0100
+/** Mode Info Block - Mode Attributes\n
+    D9 =  Interlaced mode is available.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_InterlModeAvaiMask    0x0200
+/** Mode Info Block - Mode Attributes\n
+    D10 =  Hardware triple buffering support.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_HWTripBufSupMask      0x0400
+/** Mode Info Block - Mode Attributes\n
+    D11 =  Hardware stereoscopic display support.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_HWSterDispSupMask     0x0800
+/** Mode Info Block - Mode Attributes\n
+    D12 =  Dual display start address support.
+     0 =  No\n
+     1 =  Yes */
+#define VBE_DualDispStAdrSupMask  0x1000
+/*  D13-D15 =  Reserved */
+
+/* VBE_mode_info_block WinXAttributes */
+/** D0 =  Relocatable window(s) supported.
+     0 =  Single non-relocatable window only\n
+     1 =  Relocatable window(s) are supported */
+#define VBE_RelocWinSupMask       0x01
+/** D1 =  Window readable.
+     0 =  Window is not readable\n
+     1 =  Window is readable */
+#define VBE_WinReadableMask       0x02
+/** D2 =  Window writeable.
+     0 =  Window is not writeable\n
+     1 =  Window is writeable */
+#define VBE_WinWritableMask       0x04
+/*  D3-D7 =  Reserved */
+
+/* VBE_mode_info_block MemoryModel */
+#define VBE_TextMode              0x00
+#define VBE_CGAGraphics           0x01
+#define VBE_HerculesGraphics      0x02
+#define VBE_Planar                0x03
+#define VBE_PackedPixel           0x04
+#define VBE_NonChain4Color256     0x05
+#define VBE_DirectColor           0x06
+#define VBE_YUV                   0x07
+    /* 0x08-0x0F Reserved, to be defined by VESA */
+    /* 0x10-0xFF To be defined by OEM */
+
+/* VBE_mode_info_block DirectColorModeInfo */
+/** D0 =  Color ramp is fixed/programmable.
+     0 =  Color ramp is fixed\n
+     1 =  Color ramp is programmable */
+#define VBE_ColRampProgMask       0x01
+/** D1 =  Bits in Rsvd field are usable/reserved.
+     0 =  Bits in Rsvd field are reserved\n
+     1 =  Bits in Rsvd field are usable by the application */
+#define VBE_RsvdBitsUsableMask    0x02
+
+/* VBE_CRTC_info_block Flags */
+/** CRTC Info Block - Flags\n
+    D0 =  Double Scan Mode Enable.
+     0 =  Graphics mode is not double scanned\n
+     1 =  Graphics mode is double scanned */
+#define VBE_GrModeDblScanMask     0x01
+/** CRTC Info Block - Flags\n
+    D1 =  Interlaced Mode Enable.
+     0 =  Graphics mode is non-interlaced\n
+     1 =  Graphics mode is interlaced */
+#define VBE_GrModeInterlMask      0x02
+/** CRTC Info Block - Flags\n
+    D2 =  Horizontal sync polarity.
+     0 =  Horizontal sync polarity is positive (+)\n
+     1 =  Horizontal sync polarity is negative (-) */
+#define VBE_HorSncPolNegMask      0x04
+/** CRTC Info Block - Flags\n
+    D3 =  Vertical sync polarity.
+     0 =  Vertical sync polarity is positive (+)\n
+     1 =  Vertical sync polarity is negative (-) */
+#define VBE_VerSncPolNegMask      0x08
+
+
+/*  VESA BIOS Extensions/Display Data Channel Standard
+    Version: 1.1 November 18, 1999                      */
+
+/* VBE/DDC subfunction numbers - passed in BL register */
+/** VBE/DDC subfunction - Report VBE/DDC Capabilities */
+#define VBEDDC_Capabilities    0x0
+/** VBE/DDC subfunction - Read EDID */
+#define VBEDDC_ReadEDID        0x1
+
+/* DDC Capabilities */
+/* DDC level supported - returned in BL register */
+/** 0 - DDC1 not supported; 1 - DDC1 supported */
+#define VBEDDC_1SupportedMask  0x1
+/** 0 - DDC2 not supported; 1 - DDC2 supported */
+#define VBEDDC_2SupportedMask  0x2
+/** 0 - Screen not blanked during data transfer\n
+    1 - Screen blanked during data transfer */
+#define VBEDDC_scrBlnkDatTrMs  0x4
+
+
+/*  VESA BIOS Extensions/Serial Control Interface Standard
+    Version: 1.0 Revision: 2 Date: July 2, 1997         */
+
+/* VBE/SCI subfunction numbers - passed in BL register */
+/** VBE/SCI subfunction - Report VBE/SCI Capabilities */
+#define VBESCI_ReportCapabil   0x10
+/** VBE/SCI subfunction - Begin SCL/SDA control */
+#define VBESCI_BegSCLSDACtrl   0x11
+/** VBE/SCI subfunction - End SCL/SDA control */
+#define VBESCI_EndSCLSDACtrl   0x12
+/** VBE/SCI subfunction - Write SCL clock line */
+#define VBESCI_WrtSCLClkLine   0x13
+/** VBE/SCI subfunction - Write SDA data line */
+#define VBESCI_WrtSDADatLine   0x14
+/** VBE/SCI subfunction - Read SCL clock line */
+#define VBESCI_RdySCLClkLine   0x15
+/** VBE/SCI subfunction - Read SDA data line */
+#define VBESCI_RdySDADatLine   0x16
+
+/* SCI Capabilities */
+/* I2C level supported - returned in BL register */
+/** Can write to SCL clock line */
+#define VBESCI_capSCLwrtMask   0x1
+/** Can write to SDA data line */
+#define VBESCI_capSDAwrtMask   0x2
+/** Can read from SCL clock line */
+#define VBESCI_capSCLrdyMask   0x4
+/** Can read from SDA data line */
+#define VBESCI_capSDArdyMask   0x8
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* ASM */
+
+#endif /* _VBE_H */
Index: bsps/i386/pc386/include/crt.h
===================================================================
--- bsps/i386/pc386/include/crt.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/crt.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,94 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief CRT controller definitions.
+ */
+
+/*
+ * crt.h  - This file contains definitions for constants related to PC console.
+ *          More information can be found at
+ *	<http://millenium.atcg.com/~taco/helppc/tables.html>
+ *
+ * Copyright (C) 1998  Eric Valette (valette@crf.canon.fr)
+ *                     Canon Centre Recherche France.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _CRT_H
+#define _CRT_H
+
+/*
+ * Bitmap video origins in text mode.
+ */
+
+	/* In monochrome */
+#define V_MONO	0xb0000
+	/* In color	 */
+#define V_COLOR	0xb8000
+
+/*
+ * Video Option Byte location. It must be maintained
+ * by the BIOS.
+ */
+#define VIDEO_MODE_ADDR          	0x449
+/*
+ * Video controller base IO address location in
+ * BIOS data area
+ */
+#define DISPLAY_CRT_BASE_IO_ADDR  	0x463
+/*
+ * Number of collums and lines locations for the
+ * actual video Configuration
+ */
+#define NB_MAX_COL_ADDR			0x44a
+#define NB_MAX_ROW_ADDR			0x484
+
+    /*
+     * Miscellaneous information set by the BIOS in offset video_mode,
+     */
+
+#   define VGAMODE7	0x7	/* VGA mode 7 */
+
+    /* Color codes in text mode for background and foreground. */
+#define BLACK		0x0
+#define BLUE		0x1
+#define GREEN		0x2
+#define CYAN		0x3
+#define RED	   	0x4
+#define MAGENTA		0x5
+#define BROWN		0x6
+#define WHITE		0x7
+
+#define GRAY		0x8
+#define LT_BLUE		0x9
+#define LT_GREEN	0xa
+#define LT_CYAN		0xb
+#define LT_RED		0xc
+#define LT_MAGENTA	0xd
+#define YELLOW		0xe
+#define LT_WHITE	0xf
+
+#define BLINK           0x8	/* Mask used to determine blinking */
+#define OFF             0
+#define ON              1
+
+/*
+ * CRT Controller register offset definitions
+ */
+
+#   define CC_CURSSTART	0x0a	/* Cursor start scan line */
+#   define CC_CURSEND	0x0b	/* Cursor end scan line */
+#   define CC_STARTADDRHI 0x0c	/* start video ram addr msb */
+#   define CC_STARTADDRLO 0x0d	/* start video ram lsb */
+#   define CC_CURSHIGH	0x0e	/* Cursor high location (8 msb)	*/
+#   define CC_CURSLOW	0x0f	/* Cursor low location (8 msb) */
+#   define CC_VRETSTART	0x10	/* vertical synchro start lsb */
+#   define CC_VRETEND	0x11	/* vertical syn end (also it control) */
+#   define CC_VDISPEND	0x12	/* vertical display end lsb register */
+
+#endif /* _CRT_H */
Index: bsps/i386/pc386/include/edid.h
===================================================================
--- bsps/i386/pc386/include/edid.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/edid.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,520 @@
+/**
+ * @file edid.h
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief VESA EDID definitions.
+ *
+ * This file contains definitions for constants related to
+ * VESA Extended Display Identification Data.
+ *         More information can be found at
+ *     <http://www.vesa.org/vesa-standards/free-standards/>
+ *         VESA public standards may be found at
+ *     <http://www.vesa.org/wp-content/uploads/2010/12/thankspublic.htm>
+ */
+
+/*
+ * Copyright (C) 2014  Jan DoleÅŸal (dolezj21@fel.cvut.cz)
+ *                     CTU in Prague.
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _EDID_H
+#define _EDID_H
+
+#ifndef ASM /* ASM */
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <rtems/score/basedefs.h>
+#define EDID_INLINE_ROUTINE     RTEMS_INLINE_ROUTINE
+
+/*  VESA Enhanced Extended Display Identification Data (E-EDID) Proposed
+    Release A, March 27, 2007 */
+
+/* *** Detailed Timing Descriptor Flags *** */
+#define EDID1_DTD_Flag_InterlacedOff            7
+#define EDID1_DTD_Flag_InterlacedMask           0x1
+#define EDID1_DTD_Flag_StereoModeOff            0
+#define EDID1_DTD_Flag_StereoModeMask           0xC1
+/* values for stereo flag */
+#define EDID1_DTD_Stereo_FldSeqRightOnSync      0x40
+#define EDID1_DTD_Stereo_FldSeqLeftOnSync       0x80
+#define EDID1_DTD_Stereo_2wItlvdRightOnEven     0x41
+#define EDID1_DTD_Stereo_2wItlvdLeftOnEven      0x81
+#define EDID1_DTD_Stereo_4wInterleaved          0xC0
+#define EDID1_DTD_Stereo_SideBySideItlvd        0xC1
+/* Analog = 0, Digital = 1 */
+#define EDID1_DTD_Flag_DigitalOff               4
+#define EDID1_DTD_Flag_DigitalMask              0x1
+/* Analog */
+#define EDID1_DTD_BipolarAnalogComposSyncOff    3
+#define EDID1_DTD_BipolarAnalogComposSyncMask   0x1
+#define EDID1_DTD_WithSerrationsOff             2
+#define EDID1_DTD_WithSerrationsMask            0x1
+/* Digital */
+#define EDID1_DTD_DigitalSeparateSyncOff        3
+#define EDID1_DTD_DigitalSeparateSyncMask       0x1
+    /* when DigitalSeparateSync == 0 -> it is composite
+       and WithSerrations defined up in Analog part applies */
+#define EDID1_DTD_VerticalSyncIsPositiveOff     2
+#define EDID1_DTD_VerticalSyncIsPositiveMask    0x1
+#define EDID1_DTD_HorizontalSyncIsPositiveOff   1
+#define EDID1_DTD_HorizontalSyncIsPositiveMask  0x1
+
+typedef struct {
+    uint8_t PixelClock_div10000[2];
+    uint8_t HorizontalActiveLow;
+    uint8_t HorizontalBlankingLow;
+    uint8_t HorizontalBlanking_ActiveHigh;
+    uint8_t VerticalActiveLow;
+    uint8_t VerticalBlankingLow;
+    uint8_t VerticalBlanking_ActiveHigh;
+    uint8_t HorizontalSyncOffsetLow;
+    uint8_t HorizontalSyncPulseWidthLow;
+    uint8_t VerticalSyncPulseWidth_OffsetLow;
+    uint8_t Vert_Hor_SyncPulseWidth_Offset_High;
+    uint8_t HorizontalImageSizeLow;
+    uint8_t VerticalImageSizeLow;
+    uint8_t Vertical_HorizontalImageSizeHigh;
+    uint8_t HorizontalBorder;
+    uint8_t VerticalBorder;
+    uint8_t Flags;
+} RTEMS_PACKED EDID_detailed_timing_descriptor;
+
+EDID_INLINE_ROUTINE uint16_t DTD_horizontal_active (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->HorizontalActiveLow |
+        (dtd->HorizontalBlanking_ActiveHigh & 0xF0) << 4);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_horizontal_blanking (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->HorizontalBlankingLow |
+        (dtd->HorizontalBlanking_ActiveHigh & 0xF) << 8);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_vertical_active (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->VerticalActiveLow |
+        (dtd->VerticalBlanking_ActiveHigh & 0xF0) << 4);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_vertical_blanking (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->VerticalBlankingLow |
+        (dtd->VerticalBlanking_ActiveHigh & 0xF) << 8);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_pulse_width (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return ((dtd->VerticalSyncPulseWidth_OffsetLow & 0xF) |
+        (dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0x3) << 4);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_vertical_sync_offset (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return ((dtd->VerticalSyncPulseWidth_OffsetLow >> 4) |
+        (dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0xC) << 2);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_pulse_width (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->HorizontalSyncPulseWidthLow |
+        (dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0x30) << 4);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_horizontal_sync_offset (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->HorizontalSyncOffsetLow |
+        (dtd->Vert_Hor_SyncPulseWidth_Offset_High & 0xC0) << 2);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_vertical_image_size (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->VerticalImageSizeLow |
+        (dtd->Vertical_HorizontalImageSizeHigh & 0xF) << 8);
+}
+
+EDID_INLINE_ROUTINE uint16_t DTD_horizontal_image_size (
+    EDID_detailed_timing_descriptor *dtd)
+{
+    return (dtd->HorizontalImageSizeLow |
+        (dtd->Vertical_HorizontalImageSizeHigh & 0xF0) << 4);
+}
+
+typedef struct {
+    uint8_t ColorPointWhitePointIndexNumber;
+    uint8_t ColorPointWhiteLowBits;
+    uint8_t ColorPointWhite_x;
+    uint8_t ColorPointWhite_y;
+    uint8_t ColorPointWhiteGamma;
+} RTEMS_PACKED EDID_color_point_data;
+
+/* Basic Display Parameters */
+/* Monitor Descriptor - Data Type Tag */
+#define EDID_DTT_MonitorSerialNumber        0xFF
+
+#define EDID_DTT_ASCIIString                0xFE
+
+#define EDID_DTT_MonitorRangeLimits         0xFD
+typedef struct {
+    uint8_t MinVerticalRateInHz;
+    uint8_t MaxVerticalRateInHz;
+    uint8_t MinHorizontalInKHz;
+    uint8_t MaxHorizontalInKHz;
+    uint8_t MaxSupportedPixelClockIn10MHz;
+/* see  VESA, Generalized Timing Formula Standard - GTF
+        Version 1.0, December 18, 1996 */
+    uint8_t GTFStandard[8];
+} RTEMS_PACKED EDID_monitor_range_limits;
+
+#define EDID_DTT_MonitorName                0xFC
+
+#define EDID_DTT_AdditionalColorPointData   0xFB
+/* Standard Timing Identification */
+#define EDID_DTT_AdditionalSTI              0xFA
+
+#define EDID_DTT_DisplayColorManagement     0xF9
+
+#define EDID_DTT_CVT3ByteTimingCodes        0xF8
+
+#define EDID1_CVT_AspectRatioOff            2
+#define EDID1_CVT_AspectRatioMask           0x3
+#define EDID1_CVT_AddressableLinesHighOff   4
+#define EDID1_CVT_AddressableLinesHighMask  0xF
+    /* next 5 bits indicate supported vertical rates */
+#define EDID1_CVT_VerticalRate60HzRBOff     0
+#define EDID1_CVT_VerticalRate60HzRBMask    0x1
+#define EDID1_CVT_VerticalRate85HzOff       1
+#define EDID1_CVT_VerticalRate85HzMask      0x1
+#define EDID1_CVT_VerticalRate75HzOff       2
+#define EDID1_CVT_VerticalRate75HzMask      0x1
+#define EDID1_CVT_VerticalRate60HzOff       3
+#define EDID1_CVT_VerticalRate60HzMask      0x1
+#define EDID1_CVT_VerticalRate50HzOff       4
+#define EDID1_CVT_VerticalRate50HzMask      0x1
+#define EDID1_CVT_PreferredVerticalRateOff  5
+#define EDID1_CVT_PreferredVerticalRateMask 0x3
+
+#define EDID_CVT_AspectRatio_4_3            0
+#define EDID_CVT_AspectRatio_16_9           1
+#define EDID_CVT_AspectRatio_16_10          2
+#define EDID_CVT_AspectRatio_15_9           3
+#define EDID_CVT_PrefVertRate50Hz           0
+#define EDID_CVT_PrefVertRate60Hz           1
+#define EDID_CVT_PrefVertRate75Hz           2
+#define EDID_CVT_PrefVertRate85Hz           3
+typedef struct {
+    uint8_t AddressableLinesLow;
+    uint8_t AspectRatio_AddressableLinesHigh;
+    uint8_t VerticalRate_PreferredVerticalRate;
+} RTEMS_PACKED EDID_CVT_3_byte_code_descriptor;
+typedef struct {
+    uint8_t VersionNumber;
+    EDID_CVT_3_byte_code_descriptor cvt[4];
+} RTEMS_PACKED EDID_CVT_timing_codes_3B;
+
+EDID_INLINE_ROUTINE uint16_t edid1_CVT_addressable_lines_high (
+    EDID_CVT_3_byte_code_descriptor *cvt)
+{
+    return (cvt->AddressableLinesLow |
+        (cvt->VerticalRate_PreferredVerticalRate &
+         (EDID1_CVT_AddressableLinesHighMask<<EDID1_CVT_AddressableLinesHighOff)
+        ) << (8-EDID1_CVT_AddressableLinesHighOff) );
+}
+
+EDID_INLINE_ROUTINE uint8_t edid1_CVT_aspect_ratio (
+    EDID_CVT_3_byte_code_descriptor *cvt)
+{
+    return (cvt->AspectRatio_AddressableLinesHigh >> EDID1_CVT_AspectRatioOff) &
+        EDID1_CVT_AspectRatioMask;
+}
+
+#define EDID_DTT_EstablishedTimingsIII      0xF7
+typedef struct {
+    uint8_t RevisionNumber;
+    uint8_t EST_III[12];
+} RTEMS_PACKED EDID_established_timings_III;
+enum EST_III {
+    EST_1152x864_75Hz   = 0,
+    EST_1024x768_85Hz   = 1,
+    EST_800x600_85Hz    = 2,
+    EST_848x480_60Hz    = 3,
+    EST_640x480_85Hz    = 4,
+    EST_720x400_85Hz    = 5,
+    EST_640x400_85Hz    = 6,
+    EST_640x350_85Hz    = 7,
+
+    EST_1280x1024_85Hz  = 8,
+    EST_1280x1024_60Hz  = 9,
+    EST_1280x960_85Hz   = 10,
+    EST_1280x960_60Hz   = 11,
+    EST_1280x768_85Hz   = 12,
+    EST_1280x768_75Hz   = 13,
+    EST_1280x768_60Hz   = 14,
+    EST_1280x768_60HzRB = 15,
+
+    EST_1400x1050_75Hz  = 16,
+    EST_1400x1050_60Hz  = 17,
+    EST_1400x1050_60HzRB= 18,
+    EST_1400x900_85Hz   = 19,
+    EST_1400x900_75Hz   = 20,
+    EST_1400x900_60Hz   = 21,
+    EST_1400x900_60HzRB = 22,
+    EST_1360x768_60Hz   = 23,
+
+    EST_1600x1200_70Hz  = 24,
+    EST_1600x1200_65Hz  = 25,
+    EST_1600x1200_60Hz  = 26,
+    EST_1680x1050_85Hz  = 27,
+    EST_1680x1050_75Hz  = 28,
+    EST_1680x1050_60Hz  = 29,
+    EST_1680x1050_60HzRB= 30,
+    EST_1400x1050_85Hz  = 31,
+
+    EST_1920x1200_60Hz  = 32,
+    EST_1920x1200_60HzRB= 33,
+    EST_1856x1392_75Hz  = 34,
+    EST_1856x1392_60Hz  = 35,
+    EST_1792x1344_75Hz  = 36,
+    EST_1792x1344_60Hz  = 37,
+    EST_1600x1200_85Hz  = 38,
+    EST_1600x1200_75Hz  = 39,
+
+    EST_1920x1440_75Hz  = 44,
+    EST_1920x1440_60Hz  = 45,
+    EST_1920x1200_85Hz  = 46,
+    EST_1920x1200_75Hz  = 47,
+};
+
+#define EDID_DTT_DescriptorSpaceUnused      0x10
+/* DTT 0x0 - 0xF are manufacturer specific */
+
+typedef struct {
+    uint8_t Flag0[2];
+    uint8_t Flag1;
+    uint8_t DataTypeTag;
+    uint8_t Flag2;
+    uint8_t DescriptorData[13];
+} RTEMS_PACKED EDID_monitor_descriptor;
+
+union EDID_DTD_MD {
+    EDID_detailed_timing_descriptor dtd;
+    EDID_monitor_descriptor md;
+} RTEMS_PACKED;
+
+#define EDID1_STI_ImageAspectRatioOff           0
+#define EDID1_STI_ImageAspectRatioMask          0x3
+#define EDID1_STI_RefreshRateOff                2
+#define EDID1_STI_RefreshRateMask               0x3F
+
+#define EDID_STI_DescriptorUnused           0x0101
+#define EDID_STI_AspectRatio_16_10          0
+#define EDID_STI_AspectRatio_4_3            1
+#define EDID_STI_AspectRatio_5_4            2
+#define EDID_STI_AspectRatio_16_9           3
+typedef struct {
+    uint8_t HorizontalActivePixels;
+    uint8_t ImageAspectRatio_RefreshRate;
+} RTEMS_PACKED EDID_standard_timing_identification;
+
+/* Video Input Definition */
+/* Analog = 0, Digital = 1 */
+#define EDID1_VID_DigitalSignalLevelOff         7
+#define EDID1_VID_DigitalSignalLevelMask        0x1
+/* for EDID1_VID_DigitalSignalLevelOff = 1 (Digital) */
+#define EDID1_VID_ColorBitDepthOff              4
+#define EDID1_VID_ColorBitDepthMask             0x7 /* see CBD */
+#define EDID1_VID_DigitalVideoStandardSuppOff   0
+#define EDID1_VID_DigitalVideoStandardSuppMask  0xF /* see DVS */
+/* for EDID1_VID_DigitalSignalLevelOff = 0 (Analog) */
+#define EDID1_VID_SignalLevelStandardOff        5
+#define EDID1_VID_SignalLevelStandardMask       0x3
+#define EDID1_VID_VideoSetupBlankOff            4
+#define EDID1_VID_VideoSetupBlankMask           0x1
+#define EDID1_VID_SeparateSyncHandVSignalsOff   3
+#define EDID1_VID_SeparateSyncHandVSignalsMask  0x1
+#define EDID1_VID_SyncSignalOnHorizontalOff     2
+#define EDID1_VID_SyncSignalOnHorizontalMask    0x1
+#define EDID1_VID_SyncSignalOnGreenOff          1
+#define EDID1_VID_SyncSignalOnGreenMask         0x1
+#define EDID1_VID_SerationOnVerticalSyncOff     0
+#define EDID1_VID_SerationOnVerticalSyncMask    0x1
+/* Analog Interface Data Format - Signal Level Standard */
+#define EDID_SLS_0700_0300_1000Vpp             0x0
+#define EDID_SLS_0714_0286_1000Vpp             0x1
+#define EDID_SLS_1000_0400_1400Vpp             0x2
+#define EDID_SLS_0700_0000_0700Vpp             0x3
+
+/* Color Bit Depths */
+#define CBD_undef               0x0
+#define CBD_6bPerPrimaryColor   0x1
+#define CBD_8bPerPrimaryColor   0x2
+#define CBD_10bPerPrimaryColor  0x3
+#define CBD_12bPerPrimaryColor  0x4
+#define CBD_14bPerPrimaryColor  0x5
+#define CBD_16bPerPrimaryColor  0x6
+#define CBD_reserved            0x7
+
+/* Digital Video Standard Supported */
+#define DVS_undef               0x0
+#define DVS_DVI                 0x1
+#define DVS_HDMI-a              0x2
+#define DVS_HDMI-b              0x3
+#define DVS_MDDI                0x4
+#define DVS_DiplayPort          0x5
+
+/* Feature Support */
+#define EDID1_Feature_GTFSupported_mask              0x1
+#define EDID1_Feature_GTFSupported_off               0
+#define EDID1_Feature_PreferredTimingMode_mask       0x1
+#define EDID1_Feature_PreferredTimingMode_off        1
+#define EDID1_Feature_StandardDefaultColorSpace_mask 0x1
+#define EDID1_Feature_StandardDefaultColorSpace_off  2
+#define EDID1_Feature_DisplayType_mask               0x2
+#define EDID1_Feature_DisplayType_off                3
+        /* Refer to VESA DPMS Specification */
+#define EDID1_Feature_ActiveOff_mask                 0x1
+#define EDID1_Feature_ActiveOff_off                  5
+#define EDID1_Feature_Suspend_mask                   0x1
+#define EDID1_Feature_Suspend_off                    6
+#define EDID1_Feature_StandBy_mask                   0x1
+#define EDID1_Feature_StandBy_off                    7
+    /* analog - Display Color Type */
+#define EDID_DisplayType_Monochrome                 0
+#define EDID_DisplayType_RGBcolor                   1
+#define EDID_DisplayType_nonRGBcolor                2
+#define EDID_DisplayType_undef                      3
+    /* digital - Supported Color Encoding Formats */
+#define EDID_DisplayType_RGB444                     0
+#define EDID_DisplayType_RGB444YCrCb444             1
+#define EDID_DisplayType_RGB444YCrCb422             2
+#define EDID_DisplayType_RGB444YCrCb444YCrCb422     3
+
+typedef struct {
+    uint8_t Header[8];
+/*  Vendor Product Identification */
+    uint8_t IDManufacturerName[2];
+    uint8_t IDProductCode[2];
+    uint8_t IDSerialNumber[4];
+    uint8_t WeekofManufacture;
+    uint8_t YearofManufacture;
+/*  EDID Structure Version Revision Level */
+    uint8_t Version;
+    uint8_t Revision;
+/*  Basic Display Parameters Features */
+    /* Video Input Definition */
+    uint8_t VideoInputDefinition;
+    uint8_t MaxHorizontalImageSize;
+    uint8_t MaxVerticalImageSize;
+    uint8_t DisplayTransferCharacteristic;
+    /* Feature Support */
+    uint8_t Features;
+/*  Color Characteristics */
+    uint8_t GreenRedLow;
+    uint8_t WhiteBlueLow;
+    uint8_t RedXHigh;
+    uint8_t RedYHigh;
+    uint8_t GreenXHigh;
+    uint8_t GreenYHigh;
+    uint8_t BlueXHigh;
+    uint8_t BlueYHigh;
+    uint8_t WhiteXHigh;
+    uint8_t WhiteYHigh;
+/*  Established Timings I, II, Manufacturer's */
+    uint8_t EST_I_II_Man[3];
+/*  Standard Timing Identification */
+    EDID_standard_timing_identification STI[8];
+/*  Detailed Timing Descriptions / Monitor Descriptions */
+    union EDID_DTD_MD dtd_md[4];
+    uint8_t ExtensionFlag;
+    uint8_t Checksum;
+} RTEMS_PACKED EDID_edid1;
+
+EDID_INLINE_ROUTINE uint16_t edid1_RedX (EDID_edid1 *edid) {
+    return (edid->RedXHigh<<2) | (edid->GreenRedLow>>6);
+}
+EDID_INLINE_ROUTINE uint16_t edid1_RedY (EDID_edid1 *edid) {
+    return (edid->RedYHigh<<2) | (edid->GreenRedLow>>4)&&0x3;
+}
+EDID_INLINE_ROUTINE uint16_t edid1_GreenX (EDID_edid1 *edid) {
+    return (edid->GreenXHigh<<2) | (edid->GreenRedLow>>2)&&0x3;
+}
+EDID_INLINE_ROUTINE uint16_t edid1_GreenY (EDID_edid1 *edid) {
+    return (edid->GreenYHigh<<2) | (edid->GreenRedLow&0x3);
+}
+EDID_INLINE_ROUTINE uint16_t edid1_BlueX (EDID_edid1 *edid) {
+    return (edid->BlueXHigh<<2)  | (edid->WhiteBlueLow>>6);
+}
+EDID_INLINE_ROUTINE uint16_t edid1_BlueY (EDID_edid1 *edid) {
+    return (edid->BlueYHigh<<2)  | (edid->WhiteBlueLow>>4)&&0x3;
+}
+EDID_INLINE_ROUTINE uint16_t edid1_WhiteX (EDID_edid1 *edid) {
+    return (edid->WhiteXHigh<<2) | (edid->WhiteBlueLow>>2)&&0x3;
+}
+EDID_INLINE_ROUTINE uint16_t edid1_WhiteY (EDID_edid1 *edid) {
+    return (edid->WhiteYHigh<<2) | (edid->WhiteBlueLow&0x3);
+}
+
+EDID_INLINE_ROUTINE int edid1_STI_is_unused (
+      const EDID_standard_timing_identification *edid_sti) {
+    return (edid_sti->HorizontalActivePixels ==
+                  (uint8_t)EDID_STI_DescriptorUnused) &&
+           (edid_sti->ImageAspectRatio_RefreshRate ==
+                  (uint8_t)(EDID_STI_DescriptorUnused >> 8));
+}
+
+enum edid1_established_timings {
+/*  Established Timings I */
+    EST_800x600_60Hz    = 0,
+    EST_800x600_56Hz    = 1,
+    EST_640x480_75Hz    = 2,
+    EST_640x480_72Hz    = 3,
+    EST_640x480_67Hz    = 4,
+    EST_640x480_60Hz    = 5,
+    EST_720x400_88Hz    = 6,
+    EST_720x400_70Hz    = 7,
+/*  Established Timings II */
+    EST_1280x1024_75Hz  = 8,
+    EST_1024x768_75Hz   = 9,
+    EST_1024x768_70Hz   = 10,
+    EST_1024x768_60Hz   = 11,
+    EST_1024x768_87Hz   = 12,
+    EST_832x624_75Hz    = 13,
+    EST_800x600_75Hz    = 14,
+    EST_800x600_72Hz    = 15,
+/*  Manufacturer's Timings */
+    EST_1152x870_75Hz   = 23,
+};
+
+EDID_INLINE_ROUTINE uint8_t edid1_established_tim (
+    EDID_edid1 *edid,
+    enum edid1_established_timings est)
+{
+    return (uint8_t)(edid->EST_I_II_Man[est/8] & (est%8));
+}
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* ASM */
+
+#endif /* _VBE_H */
Index: bsps/i386/pc386/include/rtems/kd.h
===================================================================
--- bsps/i386/pc386/include/rtems/kd.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/rtems/kd.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,111 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief KD definitions.
+ */
+
+/*
+ *  by: Rosimildo da Silva:  rdasilva@connecttel.com
+ *
+ *
+ */
+
+#ifndef _LINUX_KD_H
+#define _LINUX_KD_H
+#include <sys/types.h>
+
+/* 0x4B is 'K', to avoid collision with termios and vt */
+
+#define KIOCSOUND	0x4B2F	/* start sound generation (0 for off) */
+#define KDMKTONE	0x4B30	/* generate tone */
+
+#define KDGETLED	0x4B31	/* return current led state */
+#define KDSETLED	0x4B32	/* set led state [lights, not flags] */
+#define 	LED_SCR		0x01	/* scroll lock led */
+#define 	LED_CAP		0x04	/* caps lock led */
+#define 	LED_NUM		0x02	/* num lock led */
+
+#define  KDGKBTYPE	0x4B33	/* get keyboard type */
+#define 	KB_84		   0x01
+#define 	KB_101		0x02 	/* this is what we always answer */
+#define 	KB_OTHER	   0x03
+
+#define     KDSETMODE	0x4B3A	/* set text/graphics mode */
+#define		KD_TEXT		0x00
+#define		KD_GRAPHICS	0x01
+#define		KD_TEXT0	0x02	/* obsolete */
+#define		KD_TEXT1	0x03	/* obsolete */
+#define     KDGETMODE	0x4B3B	/* get current mode */
+
+#define		K_RAW		   0x00
+#define		K_XLATE		0x01
+#define		K_MEDIUMRAW	0x02
+#define		K_UNICODE	0x03
+#define     KDGKBMODE	0x4B44	/* gets current keyboard mode */
+#define     KDSKBMODE	0x4B45	/* sets current keyboard mode */
+
+#define		K_METABIT	0x03
+#define		K_ESCPREFIX	0x04
+#define     KDGKBMETA	0x4B62	/* gets meta key handling mode */
+#define     KDSKBMETA	0x4B63	/* sets meta key handling mode */
+
+#define		K_SCROLLLOCK	0x01
+#define		K_CAPSLOCK	0x02
+#define		K_NUMLOCK	0x04
+#define	   KDGKBLED	0x4B64	/* get led flags (not lights) */
+#define     KDSKBLED	0x4B65	/* set led flags (not lights) */
+
+struct kbentry {
+	unsigned char kb_table;
+	unsigned char kb_index;
+	unsigned short kb_value;
+};
+#define		K_NORMTAB	0x00
+#define		K_SHIFTTAB	0x01
+#define		K_ALTTAB	0x02
+#define		K_ALTSHIFTTAB	0x03
+
+#define KDGKBENT	0x4B46	/* gets one entry in translation table */
+#define KDSKBENT	0x4B47	/* sets one entry in translation table */
+
+struct kbsentry {
+	unsigned char kb_func;
+	unsigned char kb_string[512];
+};
+
+struct kbdiacr {
+        unsigned char diacr, base, result;
+};
+struct kbdiacrs {
+        unsigned int kb_cnt;    /* number of entries in following array */
+	struct kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
+};
+#define KDGKBDIACR      0x4B4A  /* read kernel accent table */
+#define KDSKBDIACR      0x4B4B  /* write kernel accent table */
+
+struct kbkeycode {
+	unsigned int scancode, keycode;
+};
+#define KDGETKEYCODE	0x4B4C	/* read kernel keycode table entry */
+#define KDSETKEYCODE	0x4B4D	/* write kernel keycode table entry */
+
+#define KDSIGACCEPT	0x4B4E	/* accept kbd generated signals */
+
+#define KDGHWCLK        0x4B50	/* get hardware clock */
+#define KDSHWCLK        0x4B51  /* set hardware clock */
+
+struct kbd_repeat {
+	int delay;	/* in msec; <= 0: don't change */
+	int rate;	/* in msec; <= 0: don't change */
+};
+
+#define KDKBDREP        0x4B52  /* set keyboard delay/repeat rate;
+                                 * actually used values are returned */
+
+/* note: 0x4B00-0x4B4E all have had a value at some time;
+   don't reuse for the time being */
+/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */
+
+#endif /* _LINUX_KD_H */
Index: bsps/i386/pc386/include/rtems/keyboard.h
===================================================================
--- bsps/i386/pc386/include/rtems/keyboard.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/rtems/keyboard.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,604 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Keyboard definitions.
+ */
+
+/*
+ *  Submitted by: Rosimildo da Silva:  rdasilva@connecttel.com
+ */
+
+#ifndef __RTEMS_KEYBOARD_H
+#define __RTEMS_KEYBOARD_H
+
+#include <rtems/kd.h>
+
+#define KG_SHIFT	0
+#define KG_CTRL		2
+#define KG_ALT		3
+#define KG_ALTGR	1
+#define KG_SHIFTL	4
+#define KG_SHIFTR	5
+#define KG_CTRLL	6
+#define KG_CTRLR	7
+#define KG_CAPSSHIFT	8
+
+#define NR_SHIFT	9
+
+#define NR_KEYS		   128
+#define MAX_NR_KEYMAPS	256
+/* This means 64Kb if all keymaps are allocated. Only the superuser
+	may increase the number of keymaps beyond MAX_NR_OF_USER_KEYMAPS. */
+#define MAX_NR_OF_USER_KEYMAPS 256 	/* should be at least 7 */
+
+extern const int NR_TYPES;
+extern unsigned short *key_maps[MAX_NR_KEYMAPS];
+extern unsigned short plain_map[NR_KEYS];
+extern unsigned char keyboard_type;
+
+#define MAX_NR_FUNC	256	/* max nr of strings assigned to keys */
+#define MAX_NR_CONSOLES 1
+
+extern char *func_table[MAX_NR_FUNC];
+
+#define KT_LATIN	0	/* we depend on this being zero */
+#define KT_LETTER	11	/* symbol that can be acted upon by CapsLock */
+#define KT_FN		1
+#define KT_SPEC		2
+#define KT_PAD		3
+#define KT_DEAD		4
+#define KT_CONS		5
+#define KT_CUR		6
+#define KT_SHIFT	7
+#define KT_META		8
+#define KT_ASCII	9
+#define KT_LOCK		10
+#define KT_SLOCK	12
+
+#define K(t,v)		(((t)<<8)|(v))
+#define KTYP(x)		((x) >> 8)
+#define KVAL(x)		((x) & 0xff)
+
+#define K_F1		K(KT_FN,0)
+#define K_F2		K(KT_FN,1)
+#define K_F3		K(KT_FN,2)
+#define K_F4		K(KT_FN,3)
+#define K_F5		K(KT_FN,4)
+#define K_F6		K(KT_FN,5)
+#define K_F7		K(KT_FN,6)
+#define K_F8		K(KT_FN,7)
+#define K_F9		K(KT_FN,8)
+#define K_F10		K(KT_FN,9)
+#define K_F11		K(KT_FN,10)
+#define K_F12		K(KT_FN,11)
+#define K_F13		K(KT_FN,12)
+#define K_F14		K(KT_FN,13)
+#define K_F15		K(KT_FN,14)
+#define K_F16		K(KT_FN,15)
+#define K_F17		K(KT_FN,16)
+#define K_F18		K(KT_FN,17)
+#define K_F19		K(KT_FN,18)
+#define K_F20		K(KT_FN,19)
+#define K_FIND		K(KT_FN,20)
+#define K_INSERT	K(KT_FN,21)
+#define K_REMOVE	K(KT_FN,22)
+#define K_SELECT	K(KT_FN,23)
+#define K_PGUP		K(KT_FN,24) /* PGUP is a synonym for PRIOR */
+#define K_PGDN		K(KT_FN,25) /* PGDN is a synonym for NEXT */
+#define K_MACRO	 	K(KT_FN,26)
+#define K_HELP		K(KT_FN,27)
+#define K_DO		K(KT_FN,28)
+#define K_PAUSE	 	K(KT_FN,29)
+#define K_F21		K(KT_FN,30)
+#define K_F22		K(KT_FN,31)
+#define K_F23		K(KT_FN,32)
+#define K_F24		K(KT_FN,33)
+#define K_F25		K(KT_FN,34)
+#define K_F26		K(KT_FN,35)
+#define K_F27		K(KT_FN,36)
+#define K_F28		K(KT_FN,37)
+#define K_F29		K(KT_FN,38)
+#define K_F30		K(KT_FN,39)
+#define K_F31		K(KT_FN,40)
+#define K_F32		K(KT_FN,41)
+#define K_F33		K(KT_FN,42)
+#define K_F34		K(KT_FN,43)
+#define K_F35		K(KT_FN,44)
+#define K_F36		K(KT_FN,45)
+#define K_F37		K(KT_FN,46)
+#define K_F38		K(KT_FN,47)
+#define K_F39		K(KT_FN,48)
+#define K_F40		K(KT_FN,49)
+#define K_F41		K(KT_FN,50)
+#define K_F42		K(KT_FN,51)
+#define K_F43		K(KT_FN,52)
+#define K_F44		K(KT_FN,53)
+#define K_F45		K(KT_FN,54)
+#define K_F46		K(KT_FN,55)
+#define K_F47		K(KT_FN,56)
+#define K_F48		K(KT_FN,57)
+#define K_F49		K(KT_FN,58)
+#define K_F50		K(KT_FN,59)
+#define K_F51		K(KT_FN,60)
+#define K_F52		K(KT_FN,61)
+#define K_F53		K(KT_FN,62)
+#define K_F54		K(KT_FN,63)
+#define K_F55		K(KT_FN,64)
+#define K_F56		K(KT_FN,65)
+#define K_F57		K(KT_FN,66)
+#define K_F58		K(KT_FN,67)
+#define K_F59		K(KT_FN,68)
+#define K_F60		K(KT_FN,69)
+#define K_F61		K(KT_FN,70)
+#define K_F62		K(KT_FN,71)
+#define K_F63		K(KT_FN,72)
+#define K_F64		K(KT_FN,73)
+#define K_F65		K(KT_FN,74)
+#define K_F66		K(KT_FN,75)
+#define K_F67		K(KT_FN,76)
+#define K_F68		K(KT_FN,77)
+#define K_F69		K(KT_FN,78)
+#define K_F70		K(KT_FN,79)
+#define K_F71		K(KT_FN,80)
+#define K_F72		K(KT_FN,81)
+#define K_F73		K(KT_FN,82)
+#define K_F74		K(KT_FN,83)
+#define K_F75		K(KT_FN,84)
+#define K_F76		K(KT_FN,85)
+#define K_F77		K(KT_FN,86)
+#define K_F78		K(KT_FN,87)
+#define K_F79		K(KT_FN,88)
+#define K_F80		K(KT_FN,89)
+#define K_F81		K(KT_FN,90)
+#define K_F82		K(KT_FN,91)
+#define K_F83		K(KT_FN,92)
+#define K_F84		K(KT_FN,93)
+#define K_F85		K(KT_FN,94)
+#define K_F86		K(KT_FN,95)
+#define K_F87		K(KT_FN,96)
+#define K_F88		K(KT_FN,97)
+#define K_F89		K(KT_FN,98)
+#define K_F90		K(KT_FN,99)
+#define K_F91		K(KT_FN,100)
+#define K_F92		K(KT_FN,101)
+#define K_F93		K(KT_FN,102)
+#define K_F94		K(KT_FN,103)
+#define K_F95		K(KT_FN,104)
+#define K_F96		K(KT_FN,105)
+#define K_F97		K(KT_FN,106)
+#define K_F98		K(KT_FN,107)
+#define K_F99		K(KT_FN,108)
+#define K_F100		K(KT_FN,109)
+#define K_F101		K(KT_FN,110)
+#define K_F102		K(KT_FN,111)
+#define K_F103		K(KT_FN,112)
+#define K_F104		K(KT_FN,113)
+#define K_F105		K(KT_FN,114)
+#define K_F106		K(KT_FN,115)
+#define K_F107		K(KT_FN,116)
+#define K_F108		K(KT_FN,117)
+#define K_F109		K(KT_FN,118)
+#define K_F110		K(KT_FN,119)
+#define K_F111		K(KT_FN,120)
+#define K_F112		K(KT_FN,121)
+#define K_F113		K(KT_FN,122)
+#define K_F114		K(KT_FN,123)
+#define K_F115		K(KT_FN,124)
+#define K_F116		K(KT_FN,125)
+#define K_F117		K(KT_FN,126)
+#define K_F118		K(KT_FN,127)
+#define K_F119		K(KT_FN,128)
+#define K_F120		K(KT_FN,129)
+#define K_F121		K(KT_FN,130)
+#define K_F122		K(KT_FN,131)
+#define K_F123		K(KT_FN,132)
+#define K_F124		K(KT_FN,133)
+#define K_F125		K(KT_FN,134)
+#define K_F126		K(KT_FN,135)
+#define K_F127		K(KT_FN,136)
+#define K_F128		K(KT_FN,137)
+#define K_F129		K(KT_FN,138)
+#define K_F130		K(KT_FN,139)
+#define K_F131		K(KT_FN,140)
+#define K_F132		K(KT_FN,141)
+#define K_F133		K(KT_FN,142)
+#define K_F134		K(KT_FN,143)
+#define K_F135		K(KT_FN,144)
+#define K_F136		K(KT_FN,145)
+#define K_F137		K(KT_FN,146)
+#define K_F138		K(KT_FN,147)
+#define K_F139		K(KT_FN,148)
+#define K_F140		K(KT_FN,149)
+#define K_F141		K(KT_FN,150)
+#define K_F142		K(KT_FN,151)
+#define K_F143		K(KT_FN,152)
+#define K_F144		K(KT_FN,153)
+#define K_F145		K(KT_FN,154)
+#define K_F146		K(KT_FN,155)
+#define K_F147		K(KT_FN,156)
+#define K_F148		K(KT_FN,157)
+#define K_F149		K(KT_FN,158)
+#define K_F150		K(KT_FN,159)
+#define K_F151		K(KT_FN,160)
+#define K_F152		K(KT_FN,161)
+#define K_F153		K(KT_FN,162)
+#define K_F154		K(KT_FN,163)
+#define K_F155		K(KT_FN,164)
+#define K_F156		K(KT_FN,165)
+#define K_F157		K(KT_FN,166)
+#define K_F158		K(KT_FN,167)
+#define K_F159		K(KT_FN,168)
+#define K_F160		K(KT_FN,169)
+#define K_F161		K(KT_FN,170)
+#define K_F162		K(KT_FN,171)
+#define K_F163		K(KT_FN,172)
+#define K_F164		K(KT_FN,173)
+#define K_F165		K(KT_FN,174)
+#define K_F166		K(KT_FN,175)
+#define K_F167		K(KT_FN,176)
+#define K_F168		K(KT_FN,177)
+#define K_F169		K(KT_FN,178)
+#define K_F170		K(KT_FN,179)
+#define K_F171		K(KT_FN,180)
+#define K_F172		K(KT_FN,181)
+#define K_F173		K(KT_FN,182)
+#define K_F174		K(KT_FN,183)
+#define K_F175		K(KT_FN,184)
+#define K_F176		K(KT_FN,185)
+#define K_F177		K(KT_FN,186)
+#define K_F178		K(KT_FN,187)
+#define K_F179		K(KT_FN,188)
+#define K_F180		K(KT_FN,189)
+#define K_F181		K(KT_FN,190)
+#define K_F182		K(KT_FN,191)
+#define K_F183		K(KT_FN,192)
+#define K_F184		K(KT_FN,193)
+#define K_F185		K(KT_FN,194)
+#define K_F186		K(KT_FN,195)
+#define K_F187		K(KT_FN,196)
+#define K_F188		K(KT_FN,197)
+#define K_F189		K(KT_FN,198)
+#define K_F190		K(KT_FN,199)
+#define K_F191		K(KT_FN,200)
+#define K_F192		K(KT_FN,201)
+#define K_F193		K(KT_FN,202)
+#define K_F194		K(KT_FN,203)
+#define K_F195		K(KT_FN,204)
+#define K_F196		K(KT_FN,205)
+#define K_F197		K(KT_FN,206)
+#define K_F198		K(KT_FN,207)
+#define K_F199		K(KT_FN,208)
+#define K_F200		K(KT_FN,209)
+#define K_F201		K(KT_FN,210)
+#define K_F202		K(KT_FN,211)
+#define K_F203		K(KT_FN,212)
+#define K_F204		K(KT_FN,213)
+#define K_F205		K(KT_FN,214)
+#define K_F206		K(KT_FN,215)
+#define K_F207		K(KT_FN,216)
+#define K_F208		K(KT_FN,217)
+#define K_F209		K(KT_FN,218)
+#define K_F210		K(KT_FN,219)
+#define K_F211		K(KT_FN,220)
+#define K_F212		K(KT_FN,221)
+#define K_F213		K(KT_FN,222)
+#define K_F214		K(KT_FN,223)
+#define K_F215		K(KT_FN,224)
+#define K_F216		K(KT_FN,225)
+#define K_F217		K(KT_FN,226)
+#define K_F218		K(KT_FN,227)
+#define K_F219		K(KT_FN,228)
+#define K_F220		K(KT_FN,229)
+#define K_F221		K(KT_FN,230)
+#define K_F222		K(KT_FN,231)
+#define K_F223		K(KT_FN,232)
+#define K_F224		K(KT_FN,233)
+#define K_F225		K(KT_FN,234)
+#define K_F226		K(KT_FN,235)
+#define K_F227		K(KT_FN,236)
+#define K_F228		K(KT_FN,237)
+#define K_F229		K(KT_FN,238)
+#define K_F230		K(KT_FN,239)
+#define K_F231		K(KT_FN,240)
+#define K_F232		K(KT_FN,241)
+#define K_F233		K(KT_FN,242)
+#define K_F234		K(KT_FN,243)
+#define K_F235		K(KT_FN,244)
+#define K_F236		K(KT_FN,245)
+#define K_F237		K(KT_FN,246)
+#define K_F238		K(KT_FN,247)
+#define K_F239		K(KT_FN,248)
+#define K_F240		K(KT_FN,249)
+#define K_F241		K(KT_FN,250)
+#define K_F242		K(KT_FN,251)
+#define K_F243		K(KT_FN,252)
+#define K_F244		K(KT_FN,253)
+#define K_F245		K(KT_FN,254)
+#define K_UNDO		K(KT_FN,255)
+
+#define K_HOLE		K(KT_SPEC,0)
+#define K_ENTER		K(KT_SPEC,1)
+#define K_SH_REGS	K(KT_SPEC,2)
+#define K_SH_MEM	K(KT_SPEC,3)
+#define K_SH_STAT	K(KT_SPEC,4)
+#define K_BREAK		K(KT_SPEC,5)
+#define K_CONS		K(KT_SPEC,6)
+#define K_CAPS		K(KT_SPEC,7)
+#define K_NUM		K(KT_SPEC,8)
+#define K_HOLD		K(KT_SPEC,9)
+#define K_SCROLLFORW	K(KT_SPEC,10)
+#define K_SCROLLBACK	K(KT_SPEC,11)
+#define K_BOOT		K(KT_SPEC,12)
+#define K_CAPSON	K(KT_SPEC,13)
+#define K_COMPOSE	K(KT_SPEC,14)
+#define K_SAK		K(KT_SPEC,15)
+#define K_DECRCONSOLE	K(KT_SPEC,16)
+#define K_INCRCONSOLE	K(KT_SPEC,17)
+#define K_SPAWNCONSOLE	K(KT_SPEC,18)
+#define K_BARENUMLOCK	K(KT_SPEC,19)
+
+#define K_ALLOCATED	K(KT_SPEC,126) /* dynamically allocated keymap */
+#define K_NOSUCHMAP	K(KT_SPEC,127) /* returned by KDGKBENT */
+
+#define K_P0		K(KT_PAD,0)
+#define K_P1		K(KT_PAD,1)
+#define K_P2		K(KT_PAD,2)
+#define K_P3		K(KT_PAD,3)
+#define K_P4		K(KT_PAD,4)
+#define K_P5		K(KT_PAD,5)
+#define K_P6		K(KT_PAD,6)
+#define K_P7		K(KT_PAD,7)
+#define K_P8		K(KT_PAD,8)
+#define K_P9		K(KT_PAD,9)
+#define K_PPLUS		K(KT_PAD,10)	/* key-pad plus */
+#define K_PMINUS	K(KT_PAD,11)	/* key-pad minus */
+#define K_PSTAR		K(KT_PAD,12)	/* key-pad asterisk (star) */
+#define K_PSLASH	K(KT_PAD,13)	/* key-pad slash */
+#define K_PENTER	K(KT_PAD,14)	/* key-pad enter */
+#define K_PCOMMA	K(KT_PAD,15)	/* key-pad comma: kludge... */
+#define K_PDOT		K(KT_PAD,16)	/* key-pad dot (period): kludge... */
+#define K_PPLUSMINUS	K(KT_PAD,17)	/* key-pad plus/minus */
+#define K_PPARENL	K(KT_PAD,18)	/* key-pad left parenthesis */
+#define K_PPARENR	K(KT_PAD,19)	/* key-pad right parenthesis */
+
+#define NR_PAD		20
+
+#define K_DGRAVE	K(KT_DEAD,0)
+#define K_DACUTE	K(KT_DEAD,1)
+#define K_DCIRCM	K(KT_DEAD,2)
+#define K_DTILDE	K(KT_DEAD,3)
+#define K_DDIERE	K(KT_DEAD,4)
+#define K_DCEDIL	K(KT_DEAD,5)
+
+#define NR_DEAD		6
+
+#define K_DOWN		K(KT_CUR,0)
+#define K_LEFT		K(KT_CUR,1)
+#define K_RIGHT		K(KT_CUR,2)
+#define K_UP		K(KT_CUR,3)
+
+#define K_SHIFT		K(KT_SHIFT,KG_SHIFT)
+#define K_CTRL		K(KT_SHIFT,KG_CTRL)
+#define K_ALT		K(KT_SHIFT,KG_ALT)
+#define K_ALTGR		K(KT_SHIFT,KG_ALTGR)
+#define K_SHIFTL	K(KT_SHIFT,KG_SHIFTL)
+#define K_SHIFTR	K(KT_SHIFT,KG_SHIFTR)
+#define K_CTRLL	 	K(KT_SHIFT,KG_CTRLL)
+#define K_CTRLR	 	K(KT_SHIFT,KG_CTRLR)
+#define K_CAPSSHIFT	K(KT_SHIFT,KG_CAPSSHIFT)
+
+#define K_ASC0		K(KT_ASCII,0)
+#define K_ASC1		K(KT_ASCII,1)
+#define K_ASC2		K(KT_ASCII,2)
+#define K_ASC3		K(KT_ASCII,3)
+#define K_ASC4		K(KT_ASCII,4)
+#define K_ASC5		K(KT_ASCII,5)
+#define K_ASC6		K(KT_ASCII,6)
+#define K_ASC7		K(KT_ASCII,7)
+#define K_ASC8		K(KT_ASCII,8)
+#define K_ASC9		K(KT_ASCII,9)
+#define K_HEX0		K(KT_ASCII,10)
+#define K_HEX1		K(KT_ASCII,11)
+#define K_HEX2		K(KT_ASCII,12)
+#define K_HEX3		K(KT_ASCII,13)
+#define K_HEX4		K(KT_ASCII,14)
+#define K_HEX5		K(KT_ASCII,15)
+#define K_HEX6		K(KT_ASCII,16)
+#define K_HEX7		K(KT_ASCII,17)
+#define K_HEX8		K(KT_ASCII,18)
+#define K_HEX9		K(KT_ASCII,19)
+#define K_HEXa		K(KT_ASCII,20)
+#define K_HEXb		K(KT_ASCII,21)
+#define K_HEXc		K(KT_ASCII,22)
+#define K_HEXd		K(KT_ASCII,23)
+#define K_HEXe		K(KT_ASCII,24)
+#define K_HEXf		K(KT_ASCII,25)
+
+#define NR_ASCII	26
+
+#define K_SHIFTLOCK	K(KT_LOCK,KG_SHIFT)
+#define K_CTRLLOCK	K(KT_LOCK,KG_CTRL)
+#define K_ALTLOCK	K(KT_LOCK,KG_ALT)
+#define K_ALTGRLOCK	K(KT_LOCK,KG_ALTGR)
+#define K_SHIFTLLOCK	K(KT_LOCK,KG_SHIFTL)
+#define K_SHIFTRLOCK	K(KT_LOCK,KG_SHIFTR)
+#define K_CTRLLLOCK	K(KT_LOCK,KG_CTRLL)
+#define K_CTRLRLOCK	K(KT_LOCK,KG_CTRLR)
+
+#define K_SHIFT_SLOCK	K(KT_SLOCK,KG_SHIFT)
+#define K_CTRL_SLOCK	K(KT_SLOCK,KG_CTRL)
+#define K_ALT_SLOCK	K(KT_SLOCK,KG_ALT)
+#define K_ALTGR_SLOCK	K(KT_SLOCK,KG_ALTGR)
+#define K_SHIFTL_SLOCK	K(KT_SLOCK,KG_SHIFTL)
+#define K_SHIFTR_SLOCK	K(KT_SLOCK,KG_SHIFTR)
+#define K_CTRLL_SLOCK	K(KT_SLOCK,KG_CTRLL)
+#define K_CTRLR_SLOCK	K(KT_SLOCK,KG_CTRLR)
+
+#define NR_LOCK		8
+
+#define MAX_DIACR	256
+
+extern struct kbdiacr accent_table[MAX_DIACR];
+extern unsigned int accent_table_size;
+
+/* kbd_kern.h --- header file from linux ---  */
+extern int shift_state;
+
+extern char *func_table[MAX_NR_FUNC];
+extern char func_buf[];
+extern char *funcbufptr;
+extern int funcbufsize, funcbufleft;
+
+/*
+ * kbd->xxx contains the VC-local things (flag settings etc..)
+ *
+ * Note: externally visible are LED_SCR, LED_NUM, LED_CAP defined in kd.h
+ *       The code in KDGETLED / KDSETLED depends on the internal and
+ *       external order being the same.
+ *
+ * Note: lockstate is used as index in the array key_map.
+ */
+struct kbd_struct {
+
+	unsigned char lockstate;
+/* 8 modifiers - the names do not have any meaning at all;
+   they can be associated to arbitrarily chosen keys */
+#define VC_SHIFTLOCK	KG_SHIFT	/* shift lock mode */
+#define VC_ALTGRLOCK	KG_ALTGR	/* altgr lock mode */
+#define VC_CTRLLOCK	KG_CTRL 	/* control lock mode */
+#define VC_ALTLOCK	KG_ALT  	/* alt lock mode */
+#define VC_SHIFTLLOCK	KG_SHIFTL	/* shiftl lock mode */
+#define VC_SHIFTRLOCK	KG_SHIFTR	/* shiftr lock mode */
+#define VC_CTRLLLOCK	KG_CTRLL 	/* ctrll lock mode */
+#define VC_CTRLRLOCK	KG_CTRLR 	/* ctrlr lock mode */
+	unsigned char slockstate; 	/* for `sticky' Shift, Ctrl, etc. */
+
+	unsigned char ledmode:2; 	/* one 2-bit value */
+#define LED_SHOW_FLAGS 0        /* traditional state */
+#define LED_SHOW_IOCTL 1        /* only change leds upon ioctl */
+#define LED_SHOW_MEM 2          /* `heartbeat': peek into memory */
+
+	unsigned char ledflagstate:3;	/* flags, not lights */
+	unsigned char default_ledflagstate:3;
+#define VC_SCROLLOCK	0	/* scroll-lock mode */
+#define VC_NUMLOCK	1	/* numeric lock mode */
+#define VC_CAPSLOCK	2	/* capslock mode */
+
+	unsigned char kbdmode:2;	/* one 2-bit value */
+#define VC_XLATE	0	/* translate keycodes using keymap */
+#define VC_MEDIUMRAW	1	/* medium raw (keycode) mode */
+#define VC_RAW		2	/* raw (scancode) mode */
+#define VC_UNICODE	3	/* Unicode mode */
+
+	unsigned char modeflags:5;
+#define VC_APPLIC	0	/* application key mode */
+#define VC_CKMODE	1	/* cursor key mode */
+#define VC_REPEAT	2	/* keyboard repeat */
+#define VC_CRLF		3	/* 0 - enter sends CR, 1 - enter sends CRLF */
+#define VC_META		4	/* 0 - meta, 1 - meta=prefix with ESC */
+};
+
+extern struct kbd_struct kbd_table[];
+
+
+void kbd_set_driver_handler(
+  void ( *handler )( void *, unsigned short, unsigned long )
+);
+
+static inline void show_console(void)
+{
+}
+
+static inline void set_console(int nr)
+{
+}
+
+void set_leds(void);
+
+static inline int vc_kbd_mode(struct kbd_struct * kbd, int flag)
+{
+  return ((kbd->modeflags >> flag) & 1);
+}
+
+static inline int vc_kbd_led(struct kbd_struct * kbd, int flag)
+{
+  return ((kbd->ledflagstate >> flag) & 1);
+}
+
+static inline void set_vc_kbd_mode(struct kbd_struct * kbd, int flag)
+{
+  kbd->modeflags |= 1 << flag;
+}
+
+static inline void set_vc_kbd_led(struct kbd_struct * kbd, int flag)
+{
+  kbd->ledflagstate |= 1 << flag;
+}
+
+static inline void clr_vc_kbd_mode(struct kbd_struct * kbd, int flag)
+{
+  kbd->modeflags &= ~(1 << flag);
+}
+
+static inline void clr_vc_kbd_led(struct kbd_struct * kbd, int flag)
+{
+  kbd->ledflagstate &= ~(1 << flag);
+}
+
+static inline void chg_vc_kbd_lock(struct kbd_struct * kbd, int flag)
+{
+  kbd->lockstate ^= 1 << flag;
+}
+
+static inline void chg_vc_kbd_slock(struct kbd_struct * kbd, int flag)
+{
+  kbd->slockstate ^= 1 << flag;
+}
+
+static inline void chg_vc_kbd_mode(struct kbd_struct * kbd, int flag)
+{
+  kbd->modeflags ^= 1 << flag;
+}
+
+static inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag)
+{
+  kbd->ledflagstate ^= 1 << flag;
+  set_leds();
+}
+
+#define U(x) ((x) ^ 0xf000)
+
+/* keyboard.c */
+int kbd_init(void);
+int getkeycode(unsigned int scancode);
+int setkeycode(unsigned int scancode, unsigned int keycode);
+void compute_shiftstate(void);
+unsigned char getledstate(void);
+void setledstate(struct kbd_struct *kbd, unsigned int led);
+void handle_scancode(unsigned char scancode, int down);
+
+/* kbd_parser.c */
+void register_kbd_msg_queue( char *qname, int port );
+void unregister_kbd_msg_queue( int port );
+
+/* defkeymap.c */
+extern unsigned int keymap_count;
+
+/* inch.c */
+void add_to_queue( unsigned short );
+int getch( void );
+int BSP_wait_polled_input(void);
+int rtems_kbpoll( void );
+
+/* outch.c */
+void _IBMPC_initVideo(void);
+
+/* pc_keyb.c */
+void keyboard_interrupt(void *unused);
+
+/* vt.c */
+int vt_ioctl( unsigned int cmd, unsigned long arg);
+
+#endif
Index: bsps/i386/pc386/include/rtems/ps2_drv.h
===================================================================
--- bsps/i386/pc386/include/rtems/ps2_drv.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/rtems/ps2_drv.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,79 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Paux driver routines.
+ */
+
+#ifndef __paux_drv__
+#define __paux_drv__
+/***************************************************************************
+ *
+ * Copyright (c) 1999 ConnectTel, Inc. All Rights Reserved.
+ *
+ * MODULE DESCRIPTION: Prototype routines for the paux driver.
+ *
+ * by: Rosimildo da Silva:
+ *     rdasilva@connecttel.com
+ *     http://www.connecttel.com
+ *
+ ****************************************************************************/
+
+/* functions */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* paux prototype entry points */
+rtems_device_driver paux_initialize(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_open(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_control(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_close(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_read(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_write(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+rtems_device_driver paux_control(
+  rtems_device_major_number,
+  rtems_device_minor_number,
+  void *
+);
+
+#define PAUX_DRIVER_TABLE_ENTRY \
+  { paux_initialize, paux_open, paux_close, \
+    paux_read, paux_write, paux_control }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __paux_drv__  */
Index: bsps/i386/pc386/include/rtems/vgacons.h
===================================================================
--- bsps/i386/pc386/include/rtems/vgacons.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/rtems/vgacons.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,49 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief VGA definitions.
+ */
+
+/*
+ *  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.org/license/LICENSE.
+ */
+
+#ifndef _VGACONS_H_
+#define _VGACONS_H_
+
+#include <libchip/serial.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  This is the ASCII for "PC" in the upper word and 0386 
+ *  in the lower which should be unique enough to
+ *  distinguish this type of serial device from others.
+ */
+
+#define VGA_CONSOLE 0x80670386
+
+#define VGACONS_UART0  0
+#define VGACONS_UART1  1
+
+bool vgacons_probe( int minor );
+
+/*
+ * Driver function table
+ */
+extern const console_fns vgacons_fns;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VGACONS_H_ */
Index: bsps/i386/pc386/include/tm27.h
===================================================================
--- bsps/i386/pc386/include/tm27.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
+++ bsps/i386/pc386/include/tm27.h	(revision 2afb22b7e1ebcbe40373ff7e0efae7d207c655a9)
@@ -0,0 +1,38 @@
+/**
+ * @file
+ *
+ * @ingroup i386_pc386
+ *
+ * @brief Implementation of interrupt mechanisms for Time Test 27.
+ */
+
+/*
+ *  tm27.h
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_TMTEST27
+#error "This is an RTEMS internal file you must not include directly."
+#endif
+
+#ifndef __tm27_h
+#define __tm27_h
+
+/*
+ *  Define the interrupt mechanism for Time Test 27
+ */
+
+#define MUST_WAIT_FOR_INTERRUPT 0
+
+#define Install_tm27_vector(handler)
+
+#define Cause_tm27_intr() __asm__ volatile("int $0x90" : :);
+
+#define Clear_tm27_intr() /* empty */
+
+#define Lower_tm27_intr() /* empty */
+
+#endif
