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.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..abdb258 > --- /dev/null > +++ b/c/src/lib/libbsp/arm/raspberrypi/include/mailbox.h > @@ -0,0 +1,7 @@ Need file header documentation. Please see https://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 in RTEMS is to use Package_Class_Method like raspberrypi_mailbox_read() and raspberrypi_mailbox_write().
> +#endif /* MAILBOX_H */ > \ No newline at end of file > diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h > b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h > index 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.c > b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c > new file mode 100644 > index 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_REG ( 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 ) | (unsigned > int) ( channel & 0xF ); > +} > \ No newline at end of file > 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 > > > ----- > > Here is a patch for rpi bsp which include the operation and chanel > defininitions for mailbox and its implementations. > > I've only tested the framebuffer with it and it works well : set the screen > size and get the informations. > Andre used it for sd card reading. I've checked it out and added full > channel definitions. > Please point it out if further tests should be done. > > YANG QIAO > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel