diff options
author | Mudit Jain <spark1729@yahoo.com> | 2016-06-21 02:47:57 +0530 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2016-06-28 15:44:58 +0200 |
commit | 48704cdebdd40391c5ca8d8020e5a77edff37677 (patch) | |
tree | f04e74e8d8a246756bfbf74a149e6924f3b78aa7 /c/src/lib/libbsp/arm/raspberrypi | |
parent | bsp/mvme162: Include missing <rtems/bspIo.h> (diff) | |
download | rtems-48704cdebdd40391c5ca8d8020e5a77edff37677.tar.bz2 |
arm/raspberrypi: Adding functionalities to Mailbox RPi
Added functions for retrieving firmware revision,
board model and board revision.
Diffstat (limited to 'c/src/lib/libbsp/arm/raspberrypi')
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/include/vc.h | 19 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/vc.c | 60 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h | 20 |
3 files changed, 99 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h index 4e91fde832..dbf98120a5 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h @@ -135,6 +135,25 @@ typedef struct int bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries); + +typedef struct +{ + uint32_t fw_rev; +} bcm2835_mailbox_get_fw_rev_entries; + +int +bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries); + +typedef struct +{ + uint32_t spec; +} bcm2835_get_board_spec_entries; + +int +bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries); + +int +bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries); /** @} */ #endif /* LIBBSP_ARM_RASPBERRYPI_VC_H */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c index e44d83ffde..2467833756 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c @@ -290,3 +290,63 @@ bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries) return -2; return 0; } + +int +bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries) +{ + struct{ + bcm2835_mbox_buf_hdr hdr; + bcm2835_mbox_tag_get_fw_rev get_fw_rev; + uint32_t end_tag; + }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF(&buffer); + BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_fw_rev, + BCM2835_MAILBOX_TAG_FIRMWARE_REVISION); + bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); + if (bcm2835_mailbox_send_read_buffer(&buffer)) + return -1; + _entries->fw_rev = buffer.get_fw_rev.body.resp.rev; + if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + return -2; + return 0; +} + +int +bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries) +{ + struct{ + bcm2835_mbox_buf_hdr hdr; + bcm2835_mbox_tag_get_board_spec get_board_model; + uint32_t end_tag; + }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF(&buffer); + BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_model, + BCM2835_MAILBOX_TAG_GET_BOARD_MODEL); + bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); + if (bcm2835_mailbox_send_read_buffer(&buffer)) + return -1; + _entries->spec = buffer.get_board_model.body.resp.spec; + if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + return -2; + return 0; +} + +int +bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries) +{ + struct{ + bcm2835_mbox_buf_hdr hdr; + bcm2835_mbox_tag_get_board_spec get_board_revision; + uint32_t end_tag; + }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF(&buffer); + BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_revision, + BCM2835_MAILBOX_TAG_GET_BOARD_VERSION); + bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); + if (bcm2835_mailbox_send_read_buffer(&buffer)) + return -1; + _entries->spec = buffer.get_board_revision.body.resp.spec; + if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + return -2; + return 0; +} diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h index f3d5a28897..1b2bf92f5e 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h @@ -135,10 +135,30 @@ typedef struct { /* Video Core */ #define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001 +typedef struct { + bcm2835_mbox_tag_hdr tag_hdr; + union { + struct { + } req; + struct { + uint32_t rev; + } resp; + } body; +} bcm2835_mbox_tag_get_fw_rev; /* Hardware */ #define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001 #define BCM2835_MAILBOX_TAG_GET_BOARD_VERSION 0x00010002 +typedef struct { + bcm2835_mbox_tag_hdr tag_hdr; + union { + struct { + } req; + struct { + uint32_t spec; + } resp; + } body; +} bcm2835_mbox_tag_get_board_spec; #if (BSP_IS_RPI2 == 1) #define BCM2836_MAILBOX_BOARD_V_2_B 0x4 |