Here is a modified patch for mailbox. If there's still anything against the convention, please point it out and I'll correct it immediately. The mailbox implementation might also be needed by other rpi bsp developpers.
----------------------
diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
index c6133df..70bc01d 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
@@ -43,6 +43,7 @@ include_bsp_HEADERS += ../shared/include/arm-release-id.h
include_bsp_HEADERS += include/irq.h
include_bsp_HEADERS += include/mmu.h
include_bsp_HEADERS += include/usart.h
+include_bsp_HEADERS += include/mailbox.h
include_bsp_HEADERS += include/raspberrypi.h
include_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \
@@ -123,6 +124,9 @@ libbsp_a_SOURCES += misc/timer.c
# I2C
+# Mailbox
+libbsp_a_SOURCES += misc/mailbox.c
+
# Cache
libbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.c
libbsp_a_SOURCES += ../../../libcpu/arm/shared/include/cache_.h
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h
new file mode 100644
index 0000000..fa6a0c2
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h
@@ -0,0 +1,33 @@
+/**
+ * @file
+ *
+ * @ingroup raspberrypi
+ *
+ * @brief mailbox support.
+ */
+
+/*
+ * Copyright (c) 2015 Yang Qiao
+ *
+ * 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_ARM_RASPBERRYPI_MAILBOX_H
+#define LIBBSP_ARM_RASPBERRYPI_MAILBOX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+extern unsigned int raspberrypi_mailbox_read(unsigned int channel);
+extern void raspberrypi_mailbox_write(unsigned int channel, unsigned int data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBBSP_ARM_RASPBERRYPI_MAILBOX_H */
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
index c33e22a..3240404 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
@@ -208,6 +208,55 @@
/** @} */
+ /**
+ * @name Mailbox Registers
+ *
+ * @{
+ */
+
+#define BCM2835_MBOX_BASE (RPI_PERIPHERAL_BASE+0xB880)
+
+#define BCM2835_MBOX_PEEK (BCM2835_MBOX_BASE+0x10)
+#define BCM2835_MBOX_READ (BCM2835_MBOX_BASE+0x00)
+#define BCM2835_MBOX_WRITE (BCM2835_MBOX_BASE+0x20)
+#define BCM2835_MBOX_STATUS (BCM2835_MBOX_BASE+0x18)
+#define BCM2835_MBOX_SENDER (BCM2835_MBOX_BASE+0x14)
+#define BCM2835_MBOX_CONFIG (BCM2835_MBOX_BASE+0x1C)
+
+#define BCM2835_MBOX_SUCCESS (BCM2835_MBOX_BASE+0x80000000)
+#define BCM2835_MBOX_FULL (BCM2835_MBOX_BASE+0x80000000)
+#define BCM2835_MBOX_EMPTY (BCM2835_MBOX_BASE+0x40000000)
+
+/**
+* @name Mailbox Channels
+*
+* @{
+*/
+
+/* Power Manager channel */
+#define BCM2835_MBOX_CHANNEL_PM 0
+/* Framebuffer channel */
+#define BCM2835_MBOX_CHANNEL_FB 1
+ /* Virtual UART channel */
+#define BCM2835_MBOX_CHANNEL_VUART 2
+ /* VCHIQ channel */
+#define BCM2835_MBOX_CHANNEL_VCHIQ 3
+ /* LEDs channel */
+#define BCM2835_MBOX_CHANNEL_LED 4
+ /* Button channel */
+#define BCM2835_MBOX_CHANNEL_BUTTON 5
+ /* Touch screen channel */
+#define BCM2835_MBOX_CHANNEL_TOUCHS 6
+/* Property tags (ARM <-> VC) channel */
+#define BCM2835_MBOX_CHANNEL_PROP_AVC 8
+ /* Property tags (VC <-> ARM) channel */
+#define BCM2835_MBOX_CHANNEL_PROP_VCA 9
+
+/** @} */
+
+
+/** @} */
+
/** @} */
diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c
new file mode 100644
index 0000000..2a63a41
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c
@@ -0,0 +1,44 @@
+/**
+ * @file
+ *
+ * @ingroup raspberrypi
+ *
+ * @brief mailbox support.
+ */
+
+/*
+ * Copyright (c) 2015 Yang Qiao
+ *
+ * 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 <stdint.h>
+#include <bsp/raspberrypi.h>
+#include <bsp/mailbox.h>
+
+unsigned int raspberrypi_mailbox_read (unsigned int channel)
+{
+ unsigned int data;
+ unsigned int read_channel;
+
+ while ( 1 )
+ {
+ while (BCM2835_REG (BCM2835_MBOX_STATUS ) & BCM2835_MBOX_EMPTY);
+ data = "" (BCM2835_MBOX_READ );
+ read_channel = (unsigned int) (data & 0xF );
+ if (read_channel == channel)
+ return (data & 0xFFFFFFF0);
+ }
+}
+
+void raspberrypi_mailbox_write(unsigned int channel, unsigned int data)
+{
+ while (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_FULL);
+ BCM2835_REG(BCM2835_MBOX_WRITE) =
+ (data & 0xFFFFFFF0) |
+ (unsigned int) (channel & 0xF);
+}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
index 70259e2..4cb7ed6 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
@@ -126,6 +126,10 @@ $(PROJECT_INCLUDE)/bsp/usart.h: include/usart.h $(PROJECT_INCLUDE)/bsp/$(dirstam
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/usart.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/usart.h
+$(PROJECT_INCLUDE)/bsp/mailbox.h: include/mailbox.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mailbox.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mailbox.h
+
$(PROJECT_INCLUDE)/bsp/raspberrypi.h: include/raspberrypi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/raspberrypi.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/raspberrypi.h
----------------------
diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
index c6133df..70bc01d 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
@@ -43,6 +43,7 @@ include_bsp_HEADERS += ../shared/include/arm-release-id.h
include_bsp_HEADERS += include/irq.h
include_bsp_HEADERS += include/mmu.h
include_bsp_HEADERS += include/usart.h
+include_bsp_HEADERS += include/mailbox.h
include_bsp_HEADERS += include/raspberrypi.h
include_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \
@@ -123,6 +124,9 @@ libbsp_a_SOURCES += misc/timer.c
# I2C
+# Mailbox
+libbsp_a_SOURCES += misc/mailbox.c
+
# Cache
libbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.c
libbsp_a_SOURCES += ../../../libcpu/arm/shared/include/cache_.h
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h
new file mode 100644
index 0000000..fa6a0c2
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h
@@ -0,0 +1,33 @@
+/**
+ * @file
+ *
+ * @ingroup raspberrypi
+ *
+ * @brief mailbox support.
+ */
+
+/*
+ * Copyright (c) 2015 Yang Qiao
+ *
+ * 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_ARM_RASPBERRYPI_MAILBOX_H
+#define LIBBSP_ARM_RASPBERRYPI_MAILBOX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+extern unsigned int raspberrypi_mailbox_read(unsigned int channel);
+extern void raspberrypi_mailbox_write(unsigned int channel, unsigned int data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBBSP_ARM_RASPBERRYPI_MAILBOX_H */
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
index c33e22a..3240404 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
@@ -208,6 +208,55 @@
/** @} */
+ /**
+ * @name Mailbox Registers
+ *
+ * @{
+ */
+
+#define BCM2835_MBOX_BASE (RPI_PERIPHERAL_BASE+0xB880)
+
+#define BCM2835_MBOX_PEEK (BCM2835_MBOX_BASE+0x10)
+#define BCM2835_MBOX_READ (BCM2835_MBOX_BASE+0x00)
+#define BCM2835_MBOX_WRITE (BCM2835_MBOX_BASE+0x20)
+#define BCM2835_MBOX_STATUS (BCM2835_MBOX_BASE+0x18)
+#define BCM2835_MBOX_SENDER (BCM2835_MBOX_BASE+0x14)
+#define BCM2835_MBOX_CONFIG (BCM2835_MBOX_BASE+0x1C)
+
+#define BCM2835_MBOX_SUCCESS (BCM2835_MBOX_BASE+0x80000000)
+#define BCM2835_MBOX_FULL (BCM2835_MBOX_BASE+0x80000000)
+#define BCM2835_MBOX_EMPTY (BCM2835_MBOX_BASE+0x40000000)
+
+/**
+* @name Mailbox Channels
+*
+* @{
+*/
+
+/* Power Manager channel */
+#define BCM2835_MBOX_CHANNEL_PM 0
+/* Framebuffer channel */
+#define BCM2835_MBOX_CHANNEL_FB 1
+ /* Virtual UART channel */
+#define BCM2835_MBOX_CHANNEL_VUART 2
+ /* VCHIQ channel */
+#define BCM2835_MBOX_CHANNEL_VCHIQ 3
+ /* LEDs channel */
+#define BCM2835_MBOX_CHANNEL_LED 4
+ /* Button channel */
+#define BCM2835_MBOX_CHANNEL_BUTTON 5
+ /* Touch screen channel */
+#define BCM2835_MBOX_CHANNEL_TOUCHS 6
+/* Property tags (ARM <-> VC) channel */
+#define BCM2835_MBOX_CHANNEL_PROP_AVC 8
+ /* Property tags (VC <-> ARM) channel */
+#define BCM2835_MBOX_CHANNEL_PROP_VCA 9
+
+/** @} */
+
+
+/** @} */
+
/** @} */
diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c
new file mode 100644
index 0000000..2a63a41
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c
@@ -0,0 +1,44 @@
+/**
+ * @file
+ *
+ * @ingroup raspberrypi
+ *
+ * @brief mailbox support.
+ */
+
+/*
+ * Copyright (c) 2015 Yang Qiao
+ *
+ * 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 <stdint.h>
+#include <bsp/raspberrypi.h>
+#include <bsp/mailbox.h>
+
+unsigned int raspberrypi_mailbox_read (unsigned int channel)
+{
+ unsigned int data;
+ unsigned int read_channel;
+
+ while ( 1 )
+ {
+ while (BCM2835_REG (BCM2835_MBOX_STATUS ) & BCM2835_MBOX_EMPTY);
+ data = "" (BCM2835_MBOX_READ );
+ read_channel = (unsigned int) (data & 0xF );
+ if (read_channel == channel)
+ return (data & 0xFFFFFFF0);
+ }
+}
+
+void raspberrypi_mailbox_write(unsigned int channel, unsigned int data)
+{
+ while (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_FULL);
+ BCM2835_REG(BCM2835_MBOX_WRITE) =
+ (data & 0xFFFFFFF0) |
+ (unsigned int) (channel & 0xF);
+}
diff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
index 70259e2..4cb7ed6 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am
@@ -126,6 +126,10 @@ $(PROJECT_INCLUDE)/bsp/usart.h: include/usart.h $(PROJECT_INCLUDE)/bsp/$(dirstam
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/usart.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/usart.h
+$(PROJECT_INCLUDE)/bsp/mailbox.h: include/mailbox.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mailbox.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mailbox.h
+
$(PROJECT_INCLUDE)/bsp/raspberrypi.h: include/raspberrypi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/raspberrypi.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/raspberrypi.h
On Apr 16, 2015, at 11:20 PM, Gedare Bloom <ged...@rtems.org> wrote:
Are you working to make the corrections I mentioned?
On Tue, Apr 7, 2015 at 10:05 AM, Gedare Bloom <ged...@rtems.org> wrote:On Mon, Apr 6, 2015 at 5:12 PM, QIAO YANG <yangqiao0...@me.com> wrote:-----diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.amb/c/src/lib/libbsp/arm/raspberrypi/Makefile.amindex c6133df..70bc01d 100644--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am@@ -43,6 +43,7 @@ include_bsp_HEADERS += ../shared/include/arm-release-id.hinclude_bsp_HEADERS += include/irq.hinclude_bsp_HEADERS += include/mmu.hinclude_bsp_HEADERS += include/usart.h+include_bsp_HEADERS += include/mailbox.hinclude_bsp_HEADERS += include/raspberrypi.hinclude_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \@@ -123,6 +124,9 @@ libbsp_a_SOURCES += misc/timer.c# I2C+# Mailbox+libbsp_a_SOURCES += misc/mailbox.c+# Cachelibbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.clibbsp_a_SOURCES += ../../../libcpu/arm/shared/include/cache_.hdiff --git a/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.hb/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.hnew file mode 100644index 0000000..abdb258--- /dev/null+++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h@@ -0,0 +1,7 @@Need file header documentation. Please seehttps://devel.rtems.org/wiki/Developer/Coding/Conventions+#ifndef MAILBOX_H+#define MAILBOX_H++extern unsigned int readmailbox(unsigned int channel);+extern void writemailbox(unsigned int channel, unsigned int data);+Please use function names with a "namespace". the usual convention inRTEMS is to use Package_Class_Method like raspberrypi_mailbox_read()and raspberrypi_mailbox_write().+#endif /* MAILBOX_H */\ No newline at end of filediff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.hb/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.hindex c33e22a..e4ce18f 100644--- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h+++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h@@ -208,6 +208,52 @@/** @} */+ /**+ * @name Mailbox Registers+ *+ * @{+ */++/**+ * NOTE:+ */+#define BCM2835_MBOX_BASE (RPI_PERIPHERAL_BASE+0xB880)++#define BCM2835_MBOX_PEEK (BCM2835_MBOX_BASE+0x10)+#define BCM2835_MBOX_READ (BCM2835_MBOX_BASE+0x00)+#define BCM2835_MBOX_WRITE (BCM2835_MBOX_BASE+0x20)+#define BCM2835_MBOX_STATUS (BCM2835_MBOX_BASE+0x18)+#define BCM2835_MBOX_SENDER (BCM2835_MBOX_BASE+0x14)+#define BCM2835_MBOX_CONFIG (BCM2835_MBOX_BASE+0x1C)++/* Power Manager channel */+#define BCM2835_MBOX_CHANNEL_PM 0+/* Framebuffer channel */+#define BCM2835_MBOX_CHANNEL_FB 1+ /* Virtual UART channel */+#define BCM2835_MBOX_CHANNEL_VUART 2+ /* VCHIQ channel */+#define BCM2835_MBOX_CHANNEL_VCHIQ 3+ /* LEDs channel */+#define BCM2835_MBOX_CHANNEL_LED 4+ /* Button channel */+#define BCM2835_MBOX_CHANNEL_BUTTON 5+ /* Touch screen channel */+#define BCM2835_MBOX_CHANNEL_TOUCHS 6+/* Property tags (ARM <-> Video Core) channel */+#define BCM2835_MBOX_CHANNEL_PROP_AVC 8+ /* Property tags (Video Core <-> ARM) channel */+#define BCM2835_MBOX_CHANNEL_PROP_VCA 9++#define BCM2835_MBOX_SUCCESS (BCM2835_MBOX_BASE+0x80000000)++#define BCM2835_MBOX_FULL (BCM2835_MBOX_BASE+0x80000000)+#define BCM2835_MBOX_EMPTY (BCM2835_MBOX_BASE+0x40000000)++++/** @} */+/** @} */diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.cb/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.cnew file mode 100644index 0000000..7bfb7e3--- /dev/null+++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c@@ -0,0 +1,22 @@Need file header documentation+#include <stdint.h>+#include <bsp/raspberrypi.h>+#include <bsp/mailbox.h>+unsigned int readmailbox ( unsigned int channel )+{+ unsigned int data;+ unsigned int read_channel;++ while ( 1 )+ {+ while ( BCM2835_REG ( BCM2835_MBOX_STATUS ) &BCM2835_MBOX_EMPTY );+ data = "" ( BCM2835_MBOX_READ );+ read_channel = ( unsigned int ) ( data & 0xF );+ if ( read_channel == channel )+ return ( data & 0xFFFFFFF0 );+ }The white spaces look wrong here. Are they tabs? Or 8 blank spaces?Please check the style rules in the Coding Conventions page.+}+void writemailbox( unsigned int channel, unsigned int data )+{+ while ( BCM2835_REG ( BCM2835_MBOX_STATUS ) & BCM2835_MBOX_FULL );+ BCM2835_REG (BCM2835_MBOX_WRITE) = ( data & 0xFFFFFFF0 ) | (unsignedint) ( channel & 0xF );+}\ No newline at end of filediff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.amb/c/src/lib/libbsp/arm/raspberrypi/preinstall.amindex 70259e2..4cb7ed6 100644--- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am+++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am@@ -126,6 +126,10 @@ $(PROJECT_INCLUDE)/bsp/usart.h: include/usart.h$(PROJECT_INCLUDE)/bsp/$(dirstam$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/usart.hPREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/usart.h+$(PROJECT_INCLUDE)/bsp/mailbox.h: include/mailbox.h$(PROJECT_INCLUDE)/bsp/$(dirstamp)+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mailbox.h+PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mailbox.h+$(PROJECT_INCLUDE)/bsp/raspberrypi.h: include/raspberrypi.h$(PROJECT_INCLUDE)/bsp/$(dirstamp)$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/raspberrypi.hPREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/raspberrypi.h-----Here is a patch for rpi bsp which include the operation and chaneldefininitions for mailbox and its implementations.I've only tested the framebuffer with it and it works well : set the screensize and get the informations.Andre used it for sd card reading. I've checked it out and added fullchannel definitions.Please point it out if further tests should be done.YANG QIAO_______________________________________________devel mailing listdevel@rtems.orghttp://lists.rtems.org/mailman/listinfo/devel
diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am index c6133df..70bc01d 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am +++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am @@ -43,6 +43,7 @@ include_bsp_HEADERS += ../shared/include/arm-release-id.h include_bsp_HEADERS += include/irq.h include_bsp_HEADERS += include/mmu.h include_bsp_HEADERS += include/usart.h +include_bsp_HEADERS += include/mailbox.h include_bsp_HEADERS += include/raspberrypi.h include_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \ @@ -123,6 +124,9 @@ libbsp_a_SOURCES += misc/timer.c # I2C +# Mailbox +libbsp_a_SOURCES += misc/mailbox.c + # Cache libbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.c libbsp_a_SOURCES += ../../../libcpu/arm/shared/include/cache_.h diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h new file mode 100644 index 0000000..fa6a0c2 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h @@ -0,0 +1,33 @@ +/** + * @file + * + * @ingroup raspberrypi + * + * @brief mailbox support. + */ + +/* + * Copyright (c) 2015 Yang Qiao + * + * 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_ARM_RASPBERRYPI_MAILBOX_H +#define LIBBSP_ARM_RASPBERRYPI_MAILBOX_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +extern unsigned int raspberrypi_mailbox_read(unsigned int channel); +extern void raspberrypi_mailbox_write(unsigned int channel, unsigned int data); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_RASPBERRYPI_MAILBOX_H */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h index c33e22a..3240404 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h @@ -208,6 +208,55 @@ /** @} */ + /** + * @name Mailbox Registers + * + * @{ + */ + +#define BCM2835_MBOX_BASE (RPI_PERIPHERAL_BASE+0xB880) + +#define BCM2835_MBOX_PEEK (BCM2835_MBOX_BASE+0x10) +#define BCM2835_MBOX_READ (BCM2835_MBOX_BASE+0x00) +#define BCM2835_MBOX_WRITE (BCM2835_MBOX_BASE+0x20) +#define BCM2835_MBOX_STATUS (BCM2835_MBOX_BASE+0x18) +#define BCM2835_MBOX_SENDER (BCM2835_MBOX_BASE+0x14) +#define BCM2835_MBOX_CONFIG (BCM2835_MBOX_BASE+0x1C) + +#define BCM2835_MBOX_SUCCESS (BCM2835_MBOX_BASE+0x80000000) +#define BCM2835_MBOX_FULL (BCM2835_MBOX_BASE+0x80000000) +#define BCM2835_MBOX_EMPTY (BCM2835_MBOX_BASE+0x40000000) + +/** +* @name Mailbox Channels +* +* @{ +*/ + +/* Power Manager channel */ +#define BCM2835_MBOX_CHANNEL_PM 0 +/* Framebuffer channel */ +#define BCM2835_MBOX_CHANNEL_FB 1 + /* Virtual UART channel */ +#define BCM2835_MBOX_CHANNEL_VUART 2 + /* VCHIQ channel */ +#define BCM2835_MBOX_CHANNEL_VCHIQ 3 + /* LEDs channel */ +#define BCM2835_MBOX_CHANNEL_LED 4 + /* Button channel */ +#define BCM2835_MBOX_CHANNEL_BUTTON 5 + /* Touch screen channel */ +#define BCM2835_MBOX_CHANNEL_TOUCHS 6 +/* Property tags (ARM <-> VC) channel */ +#define BCM2835_MBOX_CHANNEL_PROP_AVC 8 + /* Property tags (VC <-> ARM) channel */ +#define BCM2835_MBOX_CHANNEL_PROP_VCA 9 + +/** @} */ + + +/** @} */ + /** @} */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c new file mode 100644 index 0000000..2a63a41 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c @@ -0,0 +1,44 @@ +/** + * @file + * + * @ingroup raspberrypi + * + * @brief mailbox support. + */ + +/* + * Copyright (c) 2015 Yang Qiao + * + * 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 <stdint.h> +#include <bsp/raspberrypi.h> +#include <bsp/mailbox.h> + +unsigned int raspberrypi_mailbox_read (unsigned int channel) +{ + unsigned int data; + unsigned int read_channel; + + while ( 1 ) + { + while (BCM2835_REG (BCM2835_MBOX_STATUS ) & BCM2835_MBOX_EMPTY); + data = BCM2835_REG (BCM2835_MBOX_READ ); + read_channel = (unsigned int) (data & 0xF ); + if (read_channel == channel) + return (data & 0xFFFFFFF0); + } +} + +void raspberrypi_mailbox_write(unsigned int channel, unsigned int data) +{ + while (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_FULL); + BCM2835_REG(BCM2835_MBOX_WRITE) = + (data & 0xFFFFFFF0) | + (unsigned int) (channel & 0xF); +} diff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am index 70259e2..4cb7ed6 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am +++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am @@ -126,6 +126,10 @@ $(PROJECT_INCLUDE)/bsp/usart.h: include/usart.h $(PROJECT_INCLUDE)/bsp/$(dirstam $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/usart.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/usart.h +$(PROJECT_INCLUDE)/bsp/mailbox.h: include/mailbox.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/mailbox.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/mailbox.h + $(PROJECT_INCLUDE)/bsp/raspberrypi.h: include/raspberrypi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/raspberrypi.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/raspberrypi.h
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel