48 lines
1.4 KiB
C
48 lines
1.4 KiB
C
#ifndef RPI_MAILBOX_H
|
|
#define RPI_MAILBOX_H
|
|
|
|
#include "rpi-base.h"
|
|
|
|
#define RPI_MAILBOX0_BASE ( PERIPHERAL_BASE + 0xB880 )
|
|
|
|
/* The available mailbox channels in the BCM2835 Mailbox interface.
|
|
See https://github.com/raspberrypi/firmware/wiki/Mailboxes for
|
|
information */
|
|
typedef enum {
|
|
MB0_POWER_MANAGEMENT = 0,
|
|
MB0_FRAMEBUFFER,
|
|
MB0_VIRTUAL_UART,
|
|
MB0_VCHIQ,
|
|
MB0_LEDS,
|
|
MB0_BUTTONS,
|
|
MB0_TOUCHSCREEN,
|
|
MB0_UNUSED,
|
|
MB0_TAGS_ARM_TO_VC,
|
|
MB0_TAGS_VC_TO_ARM,
|
|
} mailbox0_channel_t;
|
|
|
|
/* These defines come from the Broadcom Videocode driver source code, see:
|
|
brcm_usrlib/dag/vmcsx/vcinclude/bcm2708_chip/arm_control.h */
|
|
enum mailbox_status_reg_bits {
|
|
ARM_MS_FULL = 0x80000000,
|
|
ARM_MS_EMPTY = 0x40000000,
|
|
ARM_MS_LEVEL = 0x400000FF,
|
|
};
|
|
|
|
/* Define a structure which defines the register access to a mailbox.
|
|
Not all mailboxes support the full register set! */
|
|
typedef struct {
|
|
volatile unsigned int Read;
|
|
volatile unsigned int reserved1[((0x90 - 0x80) / 4) - 1];
|
|
volatile unsigned int Poll;
|
|
volatile unsigned int Sender;
|
|
volatile unsigned int Status;
|
|
volatile unsigned int Configuration;
|
|
volatile unsigned int Write;
|
|
} mailbox_t;
|
|
|
|
extern void RPI_Mailbox0Write( mailbox0_channel_t channel, int value );
|
|
extern int RPI_Mailbox0Read( mailbox0_channel_t channel );
|
|
extern void RPI_Mailbox0Flush(void);
|
|
|
|
#endif
|