From: Chris Johns
---
bsps/i386/include/bsp/irq.h | 2 ++
bsps/i386/pc386/console/exar17d15x.c | 6 +++---
bsps/i386/pc386/console/fb_vesa_rm.c | 19 +++
bsps/i386/pc386/console/i386-stub.c | 2 +-
bsps/i386/pc386/console/outch.c | 14 ++
bsps/i386/pc386/console/rtd316.c | 4 ++--
bsps/i386/pc386/console/tty_drv.c | 4 ++--
bsps/i386/pc386/console/uart_bus_pci.c| 16
bsps/i386/pc386/console/vgacons.c | 8 ++--
bsps/i386/pc386/include/bsp/rtd316.h | 4 ++--
bsps/i386/pc386/include/tm27.h| 2 +-
bsps/i386/pc386/start/realmode_int.c | 9 +
.../score/cpu/i386/include/rtems/score/cpu.h | 8
13 files changed, 65 insertions(+), 33 deletions(-)
diff --git a/bsps/i386/include/bsp/irq.h b/bsps/i386/include/bsp/irq.h
index c5ef954142..4ec25b0c5a 100644
--- a/bsps/i386/include/bsp/irq.h
+++ b/bsps/i386/include/bsp/irq.h
@@ -42,7 +42,9 @@ extern "C" {
#include
#include
+#ifndef BSP_SHARED_HANDLER_SUPPORT
#define BSP_SHARED_HANDLER_SUPPORT 1
+#endif
#include
#include
diff --git a/bsps/i386/pc386/console/exar17d15x.c
b/bsps/i386/pc386/console/exar17d15x.c
index 1e6cb6fbeb..787e9a24d0 100644
--- a/bsps/i386/pc386/console/exar17d15x.c
+++ b/bsps/i386/pc386/console/exar17d15x.c
@@ -94,7 +94,7 @@ typedef struct {
/*
* Register Access Routines
*/
-static uint8_t xr17d15x_get_register(uint32_t addr, uint8_t i)
+static uint8_t xr17d15x_get_register(uintptr_t addr, uint8_t i)
{
uint8_t val = 0;
volatile uint8_t *reg = (volatile uint8_t *)(addr + i);
@@ -104,7 +104,7 @@ static uint8_t xr17d15x_get_register(uint32_t addr, uint8_t
i)
return val;
}
-static void xr17d15x_set_register(uint32_t addr, uint8_t i, uint8_t val)
+static void xr17d15x_set_register(uintptr_t addr, uint8_t i, uint8_t val)
{
volatile uint8_t *reg = (volatile uint8_t *)(addr + i);
@@ -187,7 +187,7 @@ rtems_device_driver exar17d15x_initialize(
printk(
"Found Exar 17D15x %d at 0x%08lx IRQ %d with %d ports\n",
instance,
- conf[instance].base,
+ (uintptr_t) conf[instance].base,
conf[instance].irq,
conf[instance].ports
);
diff --git a/bsps/i386/pc386/console/fb_vesa_rm.c
b/bsps/i386/pc386/console/fb_vesa_rm.c
index 3263bc262b..d14aa826d6 100644
--- a/bsps/i386/pc386/console/fb_vesa_rm.c
+++ b/bsps/i386/pc386/console/fb_vesa_rm.c
@@ -63,6 +63,17 @@
#define FB_VESA_NAME"FB_VESA_RM"
+/*
+ * GCC complains that access to packed data may not be aligned and
+ * fair enough. The warning is:
+ *
+ * warning: taking address of packed member of 'struct ' may
+ * result in an unaligned pointer value [-Waddress-of-packed-member]
+ *
+ * Disable the warning.
+ */
+#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
+
/**
* @brief Allows to enable initialization of VESA real mode driver from
* an application by setting the value of this variable to non null value in
@@ -788,7 +799,7 @@ void vesa_realmode_bootup_init(void)
(vbe_ret_val>>8)!=VBE_callSuccessful)
{
printk(FB_VESA_NAME " Cannot get mode info anymore. ax=0x%lx\n",
-vbe_ret_val);
+ (uintptr_t) vbe_ret_val);
}
fb_var.xres = mib->XResolution;
@@ -970,9 +981,9 @@ frame_buffer_control(
{
rtems_libio_ioctl_args_t *args = arg;
- printk( FB_VESA_NAME " ioctl called, cmd=%" PRIx32 "\n", args->command );
-printk("fbxres %lu, fbyres %lu\n", fb_var.xres, fb_var.yres);
-printk("fbbpp %lu\n", fb_var.bits_per_pixel);
+ printk( FB_VESA_NAME " ioctl called, cmd=%lx\n", (uintptr_t) args->command
);
+ printk("fbxres %d, fbyres %d\n", (int) fb_var.xres, (int) fb_var.yres);
+ printk("fbbpp %d\n", (int) fb_var.bits_per_pixel);
switch (args->command)
{
diff --git a/bsps/i386/pc386/console/i386-stub.c
b/bsps/i386/pc386/console/i386-stub.c
index 1eff100e9e..4b237e0a34 100644
--- a/bsps/i386/pc386/console/i386-stub.c
+++ b/bsps/i386/pc386/console/i386-stub.c
@@ -502,7 +502,7 @@ getpacket (char *buffer)
count = 0;
/* now, read until a # or end of buffer is found */
- while (count < BUFMAX)
+ while (count < (BUFMAX - 1))
{
ch = getDebugChar () & 0x7f;
if (ch == '#')
diff --git a/bsps/i386/pc386/console/outch.c b/bsps/i386/pc386/console/outch.c
index 90ffedf250..83dbcdbcdf 100644
--- a/bsps/i386/pc386/console/outch.c
+++ b/bsps/i386/pc386/console/outch.c
@@ -283,7 +283,13 @@ static int escaped = 0;
void
_IBMPC_initVideo(void)
{
-unsigned char* pt = (unsigned char*) (VIDEO_MODE_ADDR);
+/*
+ * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578#c16
+ */
+unsigned char* volatile pt = (unsigned char*) (VIDEO_MODE_ADDR);
+unsigned short* volatile crt_base = (unsigned short*)
DISPLAY_CRT_BASE_IO_ADDR;
+uint8_t* volatile nb_max_row =