forked from Imagelibrary/rtems
pc386: Add Edison base support
The current support for the Edison supports a single polled UART for input and output plus a simulated clock tick. The activities forward for supporting the Edison have been posted on the RTEMS mailing lists and at: http://rtemsramblings.blogspot.com/2014/12/intel-edison-and-rtems-road-forward.html
This commit is contained in:
@@ -68,10 +68,14 @@ noinst_LIBRARIES += libbsp.a
|
|||||||
libbsp_a_SOURCES =
|
libbsp_a_SOURCES =
|
||||||
|
|
||||||
# clock
|
# clock
|
||||||
|
if RTEMS_EDISON
|
||||||
|
libbsp_a_SOURCES += ../../shared/clock_driver_simidle.c
|
||||||
|
else
|
||||||
libbsp_a_SOURCES += clock/ckinit.c
|
libbsp_a_SOURCES += clock/ckinit.c
|
||||||
|
endif
|
||||||
|
libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
|
||||||
libbsp_a_SOURCES += clock/todcfg.c
|
libbsp_a_SOURCES += clock/todcfg.c
|
||||||
libbsp_a_SOURCES += ../../shared/tod.c
|
libbsp_a_SOURCES += ../../shared/tod.c
|
||||||
libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
|
|
||||||
|
|
||||||
include_rtemsdir = $(includedir)/rtems
|
include_rtemsdir = $(includedir)/rtems
|
||||||
include_rtems_HEADERS =
|
include_rtems_HEADERS =
|
||||||
@@ -80,7 +84,6 @@ if RTEMS_VGA
|
|||||||
include_rtems_HEADERS += console/keyboard.h
|
include_rtems_HEADERS += console/keyboard.h
|
||||||
include_rtems_HEADERS += console/kd.h
|
include_rtems_HEADERS += console/kd.h
|
||||||
include_rtems_HEADERS += console/ps2_drv.h
|
include_rtems_HEADERS += console/ps2_drv.h
|
||||||
include_rtems_HEADERS += ../../shared/console_private.h
|
|
||||||
include_rtems_HEADERS += console/vgacons.h
|
include_rtems_HEADERS += console/vgacons.h
|
||||||
libbsp_a_SOURCES += console/inch.c
|
libbsp_a_SOURCES += console/inch.c
|
||||||
libbsp_a_SOURCES += console/outch.c
|
libbsp_a_SOURCES += console/outch.c
|
||||||
@@ -108,7 +111,11 @@ endif
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# console (non-graphics support)
|
# console (non-graphics support)
|
||||||
|
if RTEMS_EDISON
|
||||||
|
libbsp_a_SOURCES += console/console_edison.c
|
||||||
|
endif
|
||||||
include_HEADERS += ../../i386/shared/comm/i386_io.h
|
include_HEADERS += ../../i386/shared/comm/i386_io.h
|
||||||
|
include_rtems_HEADERS += ../../shared/console_private.h
|
||||||
libbsp_a_SOURCES += console/serial_mouse_config.c
|
libbsp_a_SOURCES += console/serial_mouse_config.c
|
||||||
libbsp_a_SOURCES += ../../i386/shared/comm/uart.c
|
libbsp_a_SOURCES += ../../i386/shared/comm/uart.c
|
||||||
libbsp_a_SOURCES += ../../i386/shared/comm/tty_drv.c
|
libbsp_a_SOURCES += ../../i386/shared/comm/tty_drv.c
|
||||||
|
|||||||
@@ -17,6 +17,15 @@ RTEMS_PROG_CCAS
|
|||||||
RTEMS_CHECK_NETWORKING
|
RTEMS_CHECK_NETWORKING
|
||||||
RTEMS_CHECK_SMP
|
RTEMS_CHECK_SMP
|
||||||
|
|
||||||
|
# Is this an Intel Edison?
|
||||||
|
# NOTE: As we learn more, this could be trimmed if more issues
|
||||||
|
# turn out fo lack of legacy peripherals
|
||||||
|
RTEMS_BSPOPTS_SET([BSP_IS_EDISON],[edison],[1])
|
||||||
|
RTEMS_BSPOPTS_SET([BSP_IS_EDISON],[*],[0])
|
||||||
|
RTEMS_BSPOPTS_HELP([BSP_IS_EDISON],[Set if the BSP variant is Intel Edison.])
|
||||||
|
AM_CONDITIONAL(RTEMS_EDISON,[test "$BSP_IS_EDISON" = "1"])
|
||||||
|
|
||||||
|
RTEMS_BSPOPTS_SET([BSP_ENABLE_VGA],[edison],[0])
|
||||||
RTEMS_BSPOPTS_SET([BSP_ENABLE_VGA],[*],[1])
|
RTEMS_BSPOPTS_SET([BSP_ENABLE_VGA],[*],[1])
|
||||||
RTEMS_BSPOPTS_HELP([BSP_ENABLE_VGA],
|
RTEMS_BSPOPTS_HELP([BSP_ENABLE_VGA],
|
||||||
[Set if the VGA and keyboard console support is enabled.])
|
[Set if the VGA and keyboard console support is enabled.])
|
||||||
@@ -27,6 +36,7 @@ RTEMS_BSPOPTS_HELP([BSP_ENABLE_COM1_COM4],
|
|||||||
[Set if COM1..COM4 support is enabled.])
|
[Set if COM1..COM4 support is enabled.])
|
||||||
AM_CONDITIONAL(RTEMS_VGA,[test "$BSP_ENABLE_COM1_COM4" = "1"])
|
AM_CONDITIONAL(RTEMS_VGA,[test "$BSP_ENABLE_COM1_COM4" = "1"])
|
||||||
|
|
||||||
|
RTEMS_BSPOPTS_SET([BSP_ENABLE_IDE],[edison],[0])
|
||||||
RTEMS_BSPOPTS_SET([BSP_ENABLE_IDE],[*],[1])
|
RTEMS_BSPOPTS_SET([BSP_ENABLE_IDE],[*],[1])
|
||||||
RTEMS_BSPOPTS_HELP([BSP_ENABLE_IDE],
|
RTEMS_BSPOPTS_HELP([BSP_ENABLE_IDE],
|
||||||
[Set if IDE support is enabled.])
|
[Set if IDE support is enabled.])
|
||||||
|
|||||||
@@ -60,7 +60,32 @@
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (BSP_IS_EDISON == 1 )
|
||||||
|
extern const console_fns edison_fns;
|
||||||
|
#endif
|
||||||
|
|
||||||
console_tbl Console_Configuration_Ports[] = {
|
console_tbl Console_Configuration_Ports[] = {
|
||||||
|
#if (BSP_IS_EDISON == 1)
|
||||||
|
{
|
||||||
|
"/dev/vgacons", /* sDeviceName */
|
||||||
|
-1, /* deviceType */
|
||||||
|
&edison_fns, /* pDeviceFns */
|
||||||
|
NULL, /* deviceProbe */
|
||||||
|
NULL, /* pDeviceFlow */
|
||||||
|
16, /* ulMargin */
|
||||||
|
8, /* ulHysteresis */
|
||||||
|
(void *) NULL, /* NULL */ /* pDeviceParams */
|
||||||
|
0x00000000, /* ulCtrlPort1 */
|
||||||
|
0x00000000, /* ulCtrlPort2 */
|
||||||
|
0x00000000, /* ulDataPort */
|
||||||
|
NULL, /* getRegister */
|
||||||
|
NULL, /* setRegister */
|
||||||
|
NULL,/* unused */ /* getData */
|
||||||
|
NULL,/* unused */ /* setData */
|
||||||
|
0X0, /* ulClock */
|
||||||
|
0x0 /* ulIntVector -- base for port */
|
||||||
|
},
|
||||||
|
#endif
|
||||||
#if BSP_ENABLE_VGA
|
#if BSP_ENABLE_VGA
|
||||||
{
|
{
|
||||||
"/dev/vgacons", /* sDeviceName */
|
"/dev/vgacons", /* sDeviceName */
|
||||||
|
|||||||
94
c/src/lib/libbsp/i386/pc386/console/console_edison.c
Normal file
94
c/src/lib/libbsp/i386/pc386/console/console_edison.c
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <libchip/serial.h>
|
||||||
|
|
||||||
|
/* XXX hack until real support is available, code copied from libchip */
|
||||||
|
#define NS16550_RECEIVE_BUFFER 0
|
||||||
|
#define NS16550_TRANSMIT_BUFFER 0
|
||||||
|
#define NS16550_INTERRUPT_ENABLE 1
|
||||||
|
#define NS16550_INTERRUPT_ID 2
|
||||||
|
#define NS16550_FIFO_CONTROL 2
|
||||||
|
#define NS16550_LINE_CONTROL 3
|
||||||
|
#define NS16550_MODEM_CONTROL 4
|
||||||
|
#define NS16550_LINE_STATUS 5
|
||||||
|
#define NS16550_MODEM_STATUS 6
|
||||||
|
#define NS16550_SCRATCH_PAD 7
|
||||||
|
#define NS16550_FRACTIONAL_DIVIDER 10
|
||||||
|
|
||||||
|
/* status bits we use in line status */
|
||||||
|
|
||||||
|
#define SP_LSR_TX 0x40
|
||||||
|
#define SP_LSR_THOLD 0x20
|
||||||
|
#define SP_LSR_RDY 0x01
|
||||||
|
static volatile uint8_t *edison_com = (volatile uint8_t *)0xff010180;
|
||||||
|
|
||||||
|
void edison_write_polled(int minor, char cChar);
|
||||||
|
int edison_inbyte_nonblocking_polled(int minor);
|
||||||
|
|
||||||
|
static int edison_open(int major, int minor, void *arg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int edison_close(int major, int minor, void *arg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int edison_inbyte_nonblocking_polled(int minor)
|
||||||
|
{
|
||||||
|
if ( edison_com[NS16550_LINE_STATUS] & 0x01 )
|
||||||
|
return (int) edison_com[NS16550_RECEIVE_BUFFER];
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t edison_write_support_polled(int minor, const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
ssize_t i;
|
||||||
|
|
||||||
|
for ( i=0 ; i<len ; i++ ) {
|
||||||
|
#if 0
|
||||||
|
if ( (edison_com[NS16550_LINE_STATUS] & SP_LSR_TX) == 0 )
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
while ( (edison_com[NS16550_LINE_STATUS] & SP_LSR_TX) == 0x00 )
|
||||||
|
/* wait until ready */;
|
||||||
|
#endif
|
||||||
|
edison_com[NS16550_TRANSMIT_BUFFER] = (uint8_t) buf[i];
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void edison_init(int minor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void edison_write_polled(int minor, char cChar)
|
||||||
|
{
|
||||||
|
while ( (edison_com[NS16550_LINE_STATUS] & SP_LSR_TX) == 0x00 )
|
||||||
|
/* wait until ready */;
|
||||||
|
edison_com[NS16550_TRANSMIT_BUFFER] = (uint8_t) cChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool edison_probe(int minor)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int edison_set_attributes(int minor, const struct termios *t)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const console_fns edison_fns =
|
||||||
|
{
|
||||||
|
edison_probe, /* deviceProbe */
|
||||||
|
edison_open, /* deviceFirstOpen */
|
||||||
|
edison_close, /* deviceLastClose */
|
||||||
|
edison_inbyte_nonblocking_polled, /* deviceRead */
|
||||||
|
edison_write_support_polled, /* deviceWrite */
|
||||||
|
edison_init, /* deviceInitialize */
|
||||||
|
edison_write_polled, /* deviceWritePolled */
|
||||||
|
edison_set_attributes, /* deviceSetAttributes */
|
||||||
|
FALSE, /* deviceOutputUsesInterrupts */
|
||||||
|
};
|
||||||
@@ -29,6 +29,11 @@
|
|||||||
|
|
||||||
rtems_device_minor_number BSPPrintkPort = 0;
|
rtems_device_minor_number BSPPrintkPort = 0;
|
||||||
|
|
||||||
|
#if (BSP_IS_EDISON == 1)
|
||||||
|
void edison_write_polled(int minor, char cChar); /* XXX */
|
||||||
|
int edison_inbyte_nonblocking_polled(int minor);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BSP_ENABLE_COM1_COM4
|
#if BSP_ENABLE_COM1_COM4
|
||||||
int ns16550_inbyte_nonblocking_polled( int minor );
|
int ns16550_inbyte_nonblocking_polled( int minor );
|
||||||
#endif
|
#endif
|
||||||
@@ -66,6 +71,11 @@ int BSP_inch(void)
|
|||||||
} while (result == -1);
|
} while (result == -1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if (BSP_IS_EDISON == 1)
|
||||||
|
do {
|
||||||
|
result = edison_inbyte_nonblocking_polled( BSPPrintkPort );
|
||||||
|
} while (result == -1);
|
||||||
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -189,8 +189,31 @@ void rtems_irq_mngt_init(void); /* from 'irq_init.c' */
|
|||||||
|
|
||||||
void bsp_size_memory(void); /* from 'bspstart.c' */
|
void bsp_size_memory(void); /* from 'bspstart.c' */
|
||||||
|
|
||||||
void Clock_driver_install_handler(void); /* from 'ckinit.c' */
|
#if (BSP_IS_EDISON == 0)
|
||||||
void Clock_driver_support_initialize_hardware(void); /* from 'ckinit.c' */
|
void Clock_driver_install_handler(void); /* from 'ckinit.c' */
|
||||||
|
void Clock_driver_support_initialize_hardware(void); /* from 'ckinit.c' */
|
||||||
|
#else
|
||||||
|
/**
|
||||||
|
* @defgroup edison_bsp Clock Tick Support
|
||||||
|
*
|
||||||
|
* @ingroup i386_pc386
|
||||||
|
*
|
||||||
|
* @brief Clock Tick Support Package
|
||||||
|
*/
|
||||||
|
Thread clock_driver_sim_idle_body(uintptr_t);
|
||||||
|
#define BSP_IDLE_TASK_BODY clock_driver_sim_idle_body
|
||||||
|
/*
|
||||||
|
* hack to kill some time. Hopefully hitting a hardware register is slower
|
||||||
|
* than an empty loop.
|
||||||
|
*/
|
||||||
|
#define BSP_CLOCK_DRIVER_DELAY() \
|
||||||
|
do { \
|
||||||
|
uint64_t _i = 2500000; \
|
||||||
|
while (_i) { \
|
||||||
|
_i--; \
|
||||||
|
} \
|
||||||
|
} while ( 0 )
|
||||||
|
#endif /* edison */
|
||||||
|
|
||||||
void kbd_reset_setup(char *str, int *ints); /* from 'pc_keyb.c' */
|
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' */
|
size_t read_aux(char * buffer, size_t count); /* from 'ps2_mouse.c' */
|
||||||
|
|||||||
5
c/src/lib/libbsp/i386/pc386/make/custom/edison.cfg
Normal file
5
c/src/lib/libbsp/i386/pc386/make/custom/edison.cfg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#
|
||||||
|
# Configuration file for an Intel Edision
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(RTEMS_ROOT)/make/custom/pc586-sse.cfg
|
||||||
@@ -136,10 +136,6 @@ $(PROJECT_INCLUDE)/rtems/ps2_drv.h: console/ps2_drv.h $(PROJECT_INCLUDE)/rtems/$
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/ps2_drv.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/ps2_drv.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/ps2_drv.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/ps2_drv.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/rtems/console_private.h: ../../shared/console_private.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
|
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/console_private.h
|
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/console_private.h
|
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/rtems/vgacons.h: console/vgacons.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
|
$(PROJECT_INCLUDE)/rtems/vgacons.h: console/vgacons.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/vgacons.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/vgacons.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/vgacons.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/vgacons.h
|
||||||
@@ -164,6 +160,10 @@ $(PROJECT_INCLUDE)/i386_io.h: ../../i386/shared/comm/i386_io.h $(PROJECT_INCLUDE
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/i386_io.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/i386_io.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/i386_io.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/i386_io.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/rtems/console_private.h: ../../shared/console_private.h $(PROJECT_INCLUDE)/rtems/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/console_private.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/console_private.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/pcibios.h: ../../i386/shared/pci/pcibios.h $(PROJECT_INCLUDE)/$(dirstamp)
|
$(PROJECT_INCLUDE)/pcibios.h: ../../i386/shared/pci/pcibios.h $(PROJECT_INCLUDE)/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/pcibios.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/pcibios.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/pcibios.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/pcibios.h
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ void bsp_size_memory(void)
|
|||||||
{
|
{
|
||||||
uintptr_t topAddr;
|
uintptr_t topAddr;
|
||||||
|
|
||||||
|
#if (BSP_IS_EDISON == 0)
|
||||||
/* Set the value of start of free memory. */
|
/* Set the value of start of free memory. */
|
||||||
rtemsWorkAreaStart = (uint32_t)WorkAreaBase + _stack_size;
|
rtemsWorkAreaStart = (uint32_t)WorkAreaBase + _stack_size;
|
||||||
|
|
||||||
@@ -116,6 +117,9 @@ void bsp_size_memory(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
topAddr = (1 * 1024 * 1024 * 1024);
|
||||||
|
#endif
|
||||||
|
|
||||||
bsp_mem_size = topAddr;
|
bsp_mem_size = topAddr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,5 +14,9 @@
|
|||||||
void bsp_reset(void)
|
void bsp_reset(void)
|
||||||
{
|
{
|
||||||
/* shutdown and reboot */
|
/* shutdown and reboot */
|
||||||
outport_byte(0x64, 0xFE); /* use keyboard controler to do the job... */
|
#if (BSP_IS_EDISON == 0)
|
||||||
|
outport_byte(0x64, 0xFE); /* use keyboard controller */
|
||||||
|
#else
|
||||||
|
*((uint32_t*)0xff009000) = 0xf3; /* use watchdog */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,19 @@
|
|||||||
#include <libcpu/cpuModel.h>
|
#include <libcpu/cpuModel.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* External routines
|
* Helper to initialize the PCI Bus
|
||||||
*/
|
*/
|
||||||
void Clock_driver_install_handler(void);
|
static void bsp_pci_initialize_helper(void)
|
||||||
|
{
|
||||||
|
#if (BSP_IS_EDISON == 0)
|
||||||
|
int pci_init_retval;
|
||||||
|
|
||||||
|
pci_init_retval = pci_initialize();
|
||||||
|
if (pci_init_retval != PCIB_ERR_SUCCESS) {
|
||||||
|
printk("PCI bus: could not initialize PCI BIOS interface\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------+
|
/*-------------------------------------------------------------------------+
|
||||||
| Function: bsp_start
|
| Function: bsp_start
|
||||||
@@ -47,17 +57,26 @@ void Clock_driver_install_handler(void);
|
|||||||
+--------------------------------------------------------------------------*/
|
+--------------------------------------------------------------------------*/
|
||||||
static void bsp_start_default( void )
|
static void bsp_start_default( void )
|
||||||
{
|
{
|
||||||
int pci_init_retval;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to determine how much memory there is in the system.
|
* We need to determine how much memory there is in the system.
|
||||||
*/
|
*/
|
||||||
bsp_size_memory();
|
bsp_size_memory();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Turn off watchdog
|
||||||
|
*/
|
||||||
|
#if (BSP_IS_EDISON == 1)
|
||||||
|
volatile uint32_t *edison_wd = (volatile uint32_t *)0xff009000;
|
||||||
|
*edison_wd = 0x11f8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calibrate variable for 1ms-loop (see timer.c)
|
* Calibrate variable for 1ms-loop (see timer.c)
|
||||||
*/
|
*/
|
||||||
|
#if (BSP_IS_EDISON == 0)
|
||||||
Calibrate_loop_1ms();
|
Calibrate_loop_1ms();
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Init rtems interrupt management
|
* Init rtems interrupt management
|
||||||
@@ -72,12 +91,11 @@ static void bsp_start_default( void )
|
|||||||
/*
|
/*
|
||||||
* init PCI Bios interface...
|
* init PCI Bios interface...
|
||||||
*/
|
*/
|
||||||
pci_init_retval = pci_initialize();
|
bsp_pci_initialize_helper();
|
||||||
if (pci_init_retval != PCIB_ERR_SUCCESS) {
|
|
||||||
printk("PCI bus: could not initialize PCI BIOS interface\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#if (BSP_IS_EDISON == 0)
|
||||||
Clock_driver_install_handler();
|
Clock_driver_install_handler();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BSP_ENABLE_IDE
|
#if BSP_ENABLE_IDE
|
||||||
bsp_ide_cmdline_init();
|
bsp_ide_cmdline_init();
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include <rtems/asm.h>
|
#include <rtems/asm.h>
|
||||||
#include <bsp/tblsizes.h> /* contains sizes of GDT and IDT */
|
#include <bsp/tblsizes.h> /* contains sizes of GDT and IDT */
|
||||||
|
#include <bspopts.h>
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------+
|
/*----------------------------------------------------------------------------+
|
||||||
| CODE section
|
| CODE section
|
||||||
@@ -109,6 +110,7 @@ next_step:
|
|||||||
movw ax, fs
|
movw ax, fs
|
||||||
movw ax, gs
|
movw ax, gs
|
||||||
|
|
||||||
|
#if (BSP_IS_EDISON == 0)
|
||||||
/*---------------------------------------------------------------------+
|
/*---------------------------------------------------------------------+
|
||||||
| Now we have to reprogram the interrupts :-(. We put them right after
|
| Now we have to reprogram the interrupts :-(. We put them right after
|
||||||
| the intel-reserved hardware interrupts, at int 0x20-0x2F. There they
|
| the intel-reserved hardware interrupts, at int 0x20-0x2F. There they
|
||||||
@@ -154,6 +156,7 @@ next_step:
|
|||||||
|
|
||||||
movw $0xFFFB, SYM(i8259s_cache) /* set up same values in cache */
|
movw $0xFFFB, SYM(i8259s_cache) /* set up same values in cache */
|
||||||
|
|
||||||
|
#endif
|
||||||
jmp SYM (_establish_stack) # return to the bsp entry code
|
jmp SYM (_establish_stack) # return to the bsp entry code
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------+
|
/*-------------------------------------------------------------------------+
|
||||||
|
|||||||
Reference in New Issue
Block a user