forked from Imagelibrary/rtems
arm/raspberrypi: Adding functionalities to Mailbox RPi
Added functions for retrieving firmware revision, board model and board revision.
This commit is contained in:
@@ -135,6 +135,25 @@ typedef struct
|
|||||||
|
|
||||||
int
|
int
|
||||||
bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries);
|
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 */
|
#endif /* LIBBSP_ARM_RASPBERRYPI_VC_H */
|
||||||
|
|||||||
@@ -290,3 +290,63 @@ bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries)
|
|||||||
return -2;
|
return -2;
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -135,10 +135,30 @@ typedef struct {
|
|||||||
|
|
||||||
/* Video Core */
|
/* Video Core */
|
||||||
#define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001
|
#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 */
|
/* Hardware */
|
||||||
#define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001
|
#define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001
|
||||||
#define BCM2835_MAILBOX_TAG_GET_BOARD_VERSION 0x00010002
|
#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)
|
#if (BSP_IS_RPI2 == 1)
|
||||||
#define BCM2836_MAILBOX_BOARD_V_2_B 0x4
|
#define BCM2836_MAILBOX_BOARD_V_2_B 0x4
|
||||||
|
|||||||
Reference in New Issue
Block a user