summaryrefslogtreecommitdiffstats
path: root/bsps/i386/pc386
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/i386/pc386')
-rw-r--r--bsps/i386/pc386/headers.am25
-rw-r--r--bsps/i386/pc386/include/bsp.h264
-rw-r--r--bsps/i386/pc386/include/bsp/bspimpl.h47
-rw-r--r--bsps/i386/pc386/include/bsp/exar17d15x.h55
-rw-r--r--bsps/i386/pc386/include/bsp/fb_default_mode.h25
-rw-r--r--bsps/i386/pc386/include/bsp/fb_vesa.h132
-rw-r--r--bsps/i386/pc386/include/bsp/rtd316.h77
-rw-r--r--bsps/i386/pc386/include/bsp/tblsizes.h24
-rw-r--r--bsps/i386/pc386/include/bsp/vbe3.h619
-rw-r--r--bsps/i386/pc386/include/crt.h94
-rw-r--r--bsps/i386/pc386/include/edid.h520
-rw-r--r--bsps/i386/pc386/include/rtems/kd.h111
-rw-r--r--bsps/i386/pc386/include/rtems/keyboard.h604
-rw-r--r--bsps/i386/pc386/include/rtems/ps2_drv.h79
-rw-r--r--bsps/i386/pc386/include/rtems/vgacons.h49
-rw-r--r--bsps/i386/pc386/include/tm27.h38
16 files changed, 2763 insertions, 0 deletions
diff --git a/bsps/i386/pc386/headers.am b/bsps/i386/pc386/headers.am
new file mode 100644
index 0000000000..0109c11eed
--- /dev/null
+++ b/bsps/i386/pc386/headers.am
@@ -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
diff --git a/bsps/i386/pc386/include/bsp.h b/bsps/i386/pc386/include/bsp.h
new file mode 100644
index 0000000000..4ff89527b2
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/bsp/bspimpl.h b/bsps/i386/pc386/include/bsp/bspimpl.h
new file mode 100644
index 0000000000..314fb91eb9
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/bspimpl.h
@@ -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
diff --git a/bsps/i386/pc386/include/bsp/exar17d15x.h b/bsps/i386/pc386/include/bsp/exar17d15x.h
new file mode 100644
index 0000000000..9e1194ffec
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/exar17d15x.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/bsp/fb_default_mode.h b/bsps/i386/pc386/include/bsp/fb_default_mode.h
new file mode 100644
index 0000000000..948ffee5b6
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/fb_default_mode.h
@@ -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;
diff --git a/bsps/i386/pc386/include/bsp/fb_vesa.h b/bsps/i386/pc386/include/bsp/fb_vesa.h
new file mode 100644
index 0000000000..d8bfd1bcb4
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/fb_vesa.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/bsp/rtd316.h b/bsps/i386/pc386/include/bsp/rtd316.h
new file mode 100644
index 0000000000..aabad2c263
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/rtd316.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/bsp/tblsizes.h b/bsps/i386/pc386/include/bsp/tblsizes.h
new file mode 100644
index 0000000000..cea8619c8f
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/tblsizes.h
@@ -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)
diff --git a/bsps/i386/pc386/include/bsp/vbe3.h b/bsps/i386/pc386/include/bsp/vbe3.h
new file mode 100644
index 0000000000..b62ab6f3ac
--- /dev/null
+++ b/bsps/i386/pc386/include/bsp/vbe3.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/crt.h b/bsps/i386/pc386/include/crt.h
new file mode 100644
index 0000000000..ba0534a5aa
--- /dev/null
+++ b/bsps/i386/pc386/include/crt.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/edid.h b/bsps/i386/pc386/include/edid.h
new file mode 100644
index 0000000000..836294dcad
--- /dev/null
+++ b/bsps/i386/pc386/include/edid.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/rtems/kd.h b/bsps/i386/pc386/include/rtems/kd.h
new file mode 100644
index 0000000000..c97e4f7bdd
--- /dev/null
+++ b/bsps/i386/pc386/include/rtems/kd.h
@@ -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 */
diff --git a/bsps/i386/pc386/include/rtems/keyboard.h b/bsps/i386/pc386/include/rtems/keyboard.h
new file mode 100644
index 0000000000..ffc8aabfbd
--- /dev/null
+++ b/bsps/i386/pc386/include/rtems/keyboard.h
@@ -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
diff --git a/bsps/i386/pc386/include/rtems/ps2_drv.h b/bsps/i386/pc386/include/rtems/ps2_drv.h
new file mode 100644
index 0000000000..536b56a6ed
--- /dev/null
+++ b/bsps/i386/pc386/include/rtems/ps2_drv.h
@@ -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__ */
diff --git a/bsps/i386/pc386/include/rtems/vgacons.h b/bsps/i386/pc386/include/rtems/vgacons.h
new file mode 100644
index 0000000000..df7615bf5e
--- /dev/null
+++ b/bsps/i386/pc386/include/rtems/vgacons.h
@@ -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_ */
diff --git a/bsps/i386/pc386/include/tm27.h b/bsps/i386/pc386/include/tm27.h
new file mode 100644
index 0000000000..b53ab8e97a
--- /dev/null
+++ b/bsps/i386/pc386/include/tm27.h
@@ -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