This still doesn't apply for me. Did you pull the latest changes and rebase?
--joel On 8/12/2015 5:08 PM, YANG QIAO wrote:
From: YANG Qiao <yangqiao0...@me.com> --- c/src/lib/libbsp/arm/raspberrypi/Makefile.am | 4 ++ c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h | 32 +++++++++++++ .../libbsp/arm/raspberrypi/include/raspberrypi.h | 49 +++++++++++++++++++ c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c | 56 ++++++++++++++++++++++ c/src/lib/libbsp/arm/raspberrypi/preinstall.am | 4 ++ 5 files changed, 145 insertions(+) create mode 100644 c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h create mode 100644 c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am index 03be711..e1398bb 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am +++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am @@ -45,6 +45,7 @@ include_bsp_HEADERS += include/mmu.h include_bsp_HEADERS += include/usart.h include_bsp_HEADERS += include/raspberrypi.h include_bsp_HEADERS += include/rpi-gpio.h +include_bsp_HEADERS += include/mailbox.h include_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \ ../../../libcpu/arm/shared/include/arm-cp15.h @@ -128,6 +129,9 @@ libbsp_a_SOURCES += gpio/rpi-gpio.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..e6cb0f8 --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h @@ -0,0 +1,32 @@ +/** + * @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 ddcd4ff..ef7a061 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h @@ -7,6 +7,7 @@ */ /* + * Copyright (c) 2015 Yang Qiao * Copyright (c) 2014 Andre Marques <andre.lousa.marques at gmail.com> * Copyright (c) 2013 Alan Cudmore. * @@ -272,6 +273,54 @@ /** @} */ +/** +* @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_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 + +/** @} */ + + /** @} */ #endif /* LIBBSP_ARM_RASPBERRYPI_RASPBERRYPI_H */ 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..8ec730a --- /dev/null +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c @@ -0,0 +1,56 @@ +/** + * @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 <stdbool.h> +#include <bsp/raspberrypi.h> +#include <bsp/mailbox.h> + +#define BCM2835_MBOX_DATA_MASK(data) (data & 0xFFFFFFF0U) +#define BCM2835_MBOX_CHANNEL_MASK(data) (data & 0xFU) + +static inline bool bcm2835_mailbox_is_empty() +{ + return (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_EMPTY); +} + +static inline bool bcm2835_mailbox_is_full() +{ + return (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_FULL); +} + +unsigned int raspberrypi_mailbox_read(unsigned int channel) +{ + unsigned int raw; + unsigned int read_channel; + + while (1){ + while (bcm2835_mailbox_is_empty()); + raw = BCM2835_REG (BCM2835_MBOX_READ ); + read_channel = BCM2835_MBOX_CHANNEL_MASK(raw) ; + if (read_channel == channel) + return BCM2835_MBOX_DATA_MASK(raw); + } +} + +void raspberrypi_mailbox_write(unsigned int channel, unsigned int data) +{ + while (bcm2835_mailbox_is_full()); + BCM2835_REG(BCM2835_MBOX_WRITE) = + BCM2835_MBOX_DATA_MASK(data) | + BCM2835_MBOX_CHANNEL_MASK(channel); +} diff --git a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am index 122bc00..346e557 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/preinstall.am +++ b/c/src/lib/libbsp/arm/raspberrypi/preinstall.am @@ -134,6 +134,10 @@ $(PROJECT_INCLUDE)/bsp/rpi-gpio.h: include/rpi-gpio.h $(PROJECT_INCLUDE)/bsp/$(d $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/rpi-gpio.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/rpi-gpio.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)/libcpu/cache_.h: ../../../libcpu/arm/shared/include/cache_.h $(PROJECT_INCLUDE)/libcpu/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libcpu/cache_.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/libcpu/cache_.h
-- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel