bcm2835_mbox_prop.h revision 278797
1275963Srpaulo/*- 2275963Srpaulo * Copyright (C) 2013-2014 Daisuke Aoyama <aoyama@peach.ne.jp> 3275963Srpaulo * All rights reserved. 4275963Srpaulo * 5275963Srpaulo * Redistribution and use in source and binary forms, with or without 6275963Srpaulo * modification, are permitted provided that the following conditions 7275963Srpaulo * are met: 8275963Srpaulo * 1. Redistributions of source code must retain the above copyright 9275963Srpaulo * notice, this list of conditions and the following disclaimer. 10275963Srpaulo * 2. Redistributions in binary form must reproduce the above copyright 11275963Srpaulo * notice, this list of conditions and the following disclaimer in the 12275963Srpaulo * documentation and/or other materials provided with the distribution. 13275963Srpaulo * 14275963Srpaulo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15275963Srpaulo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16275963Srpaulo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17275963Srpaulo * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18275963Srpaulo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19275963Srpaulo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20275963Srpaulo * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21275963Srpaulo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22275963Srpaulo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23275963Srpaulo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24275963Srpaulo * SUCH DAMAGE. 25275963Srpaulo * 26275963Srpaulo * $FreeBSD: head/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h 278797 2015-02-15 11:23:27Z andrew $ 27275963Srpaulo */ 28275963Srpaulo 29275963Srpaulo#ifndef _BCM2835_MBOX_PROP_H_ 30275963Srpaulo#define _BCM2835_MBOX_PROP_H_ 31275963Srpaulo 32275963Srpaulo#include <sys/cdefs.h> 33275963Srpaulo#include <sys/types.h> 34275963Srpaulo 35275963Srpaulo/* 36275963Srpaulo * Mailbox property interface: 37275963Srpaulo * https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface 38275963Srpaulo */ 39275963Srpaulo#define BCM2835_MBOX_CODE_REQ 0 40275963Srpaulo#define BCM2835_MBOX_CODE_RESP_SUCCESS 0x80000000 41275963Srpaulo#define BCM2835_MBOX_CODE_RESP_ERROR 0x80000001 42275963Srpaulo#define BCM2835_MBOX_TAG_VAL_LEN_RESPONSE 0x80000000 43275963Srpaulo 44275963Srpaulostruct bcm2835_mbox_hdr { 45275963Srpaulo uint32_t buf_size; 46275963Srpaulo uint32_t code; 47275963Srpaulo}; 48275963Srpaulo 49275963Srpaulostruct bcm2835_mbox_tag_hdr { 50275963Srpaulo uint32_t tag; 51275963Srpaulo uint32_t val_buf_size; 52275963Srpaulo uint32_t val_len; 53275963Srpaulo}; 54275963Srpaulo 55278797Sandrew#define BCM2835_MBOX_POWER_ID_EMMC 0x00000000 56278797Sandrew#define BCM2835_MBOX_POWER_ID_UART0 0x00000001 57278797Sandrew#define BCM2835_MBOX_POWER_ID_UART1 0x00000002 58278797Sandrew#define BCM2835_MBOX_POWER_ID_USB_HCD 0x00000003 59278797Sandrew#define BCM2835_MBOX_POWER_ID_I2C0 0x00000004 60278797Sandrew#define BCM2835_MBOX_POWER_ID_I2C1 0x00000005 61278797Sandrew#define BCM2835_MBOX_POWER_ID_I2C2 0x00000006 62278797Sandrew#define BCM2835_MBOX_POWER_ID_SPI 0x00000007 63278797Sandrew#define BCM2835_MBOX_POWER_ID_CCP2TX 0x00000008 64278797Sandrew 65278797Sandrew#define BCM2835_MBOX_POWER_ON (1 << 0) 66278797Sandrew#define BCM2835_MBOX_POWER_WAIT (1 << 1) 67278797Sandrew 68278797Sandrew#define BCM2835_MBOX_TAG_GET_POWER_STATE 0x00020001 69278797Sandrew#define BCM2835_MBOX_TAG_SET_POWER_STATE 0x00028001 70278797Sandrew 71278797Sandrewstruct msg_get_power_state { 72278797Sandrew struct bcm2835_mbox_hdr hdr; 73278797Sandrew struct bcm2835_mbox_tag_hdr tag_hdr; 74278797Sandrew union { 75278797Sandrew struct { 76278797Sandrew uint32_t device_id; 77278797Sandrew } req; 78278797Sandrew struct { 79278797Sandrew uint32_t device_id; 80278797Sandrew uint32_t state; 81278797Sandrew } resp; 82278797Sandrew } body; 83278797Sandrew uint32_t end_tag; 84278797Sandrew}; 85278797Sandrew 86278797Sandrewstruct msg_set_power_state { 87278797Sandrew struct bcm2835_mbox_hdr hdr; 88278797Sandrew struct bcm2835_mbox_tag_hdr tag_hdr; 89278797Sandrew union { 90278797Sandrew struct { 91278797Sandrew uint32_t device_id; 92278797Sandrew uint32_t state; 93278797Sandrew } req; 94278797Sandrew struct { 95278797Sandrew uint32_t device_id; 96278797Sandrew uint32_t state; 97278797Sandrew } resp; 98278797Sandrew } body; 99278797Sandrew uint32_t end_tag; 100278797Sandrew}; 101278797Sandrew 102275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_EMMC 0x00000001 103275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_UART 0x00000002 104275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_ARM 0x00000003 105275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_CORE 0x00000004 106275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_V3D 0x00000005 107275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_H264 0x00000006 108275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_ISP 0x00000007 109275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_SDRAM 0x00000008 110275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_PIXEL 0x00000009 111275963Srpaulo#define BCM2835_MBOX_CLOCK_ID_PWM 0x0000000a 112275963Srpaulo 113275963Srpaulo#define BCM2835_MBOX_TAG_GET_CLOCK_RATE 0x00030002 114275963Srpaulo#define BCM2835_MBOX_TAG_SET_CLOCK_RATE 0x00038002 115275963Srpaulo#define BCM2835_MBOX_TAG_GET_MAX_CLOCK_RATE 0x00030004 116275963Srpaulo#define BCM2835_MBOX_TAG_GET_MIN_CLOCK_RATE 0x00030007 117275963Srpaulo 118275963Srpaulostruct msg_get_clock_rate { 119275963Srpaulo struct bcm2835_mbox_hdr hdr; 120275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 121275963Srpaulo union { 122275963Srpaulo struct { 123275963Srpaulo uint32_t clock_id; 124275963Srpaulo } req; 125275963Srpaulo struct { 126275963Srpaulo uint32_t clock_id; 127275963Srpaulo uint32_t rate_hz; 128275963Srpaulo } resp; 129275963Srpaulo } body; 130275963Srpaulo uint32_t end_tag; 131275963Srpaulo}; 132275963Srpaulo 133275963Srpaulostruct msg_set_clock_rate { 134275963Srpaulo struct bcm2835_mbox_hdr hdr; 135275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 136275963Srpaulo union { 137275963Srpaulo struct { 138275963Srpaulo uint32_t clock_id; 139275963Srpaulo uint32_t rate_hz; 140275963Srpaulo } req; 141275963Srpaulo struct { 142275963Srpaulo uint32_t clock_id; 143275963Srpaulo uint32_t rate_hz; 144275963Srpaulo } resp; 145275963Srpaulo } body; 146275963Srpaulo uint32_t end_tag; 147275963Srpaulo}; 148275963Srpaulo 149275963Srpaulostruct msg_get_max_clock_rate { 150275963Srpaulo struct bcm2835_mbox_hdr hdr; 151275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 152275963Srpaulo union { 153275963Srpaulo struct { 154275963Srpaulo uint32_t clock_id; 155275963Srpaulo } req; 156275963Srpaulo struct { 157275963Srpaulo uint32_t clock_id; 158275963Srpaulo uint32_t rate_hz; 159275963Srpaulo } resp; 160275963Srpaulo } body; 161275963Srpaulo uint32_t end_tag; 162275963Srpaulo}; 163275963Srpaulo 164275963Srpaulostruct msg_get_min_clock_rate { 165275963Srpaulo struct bcm2835_mbox_hdr hdr; 166275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 167275963Srpaulo union { 168275963Srpaulo struct { 169275963Srpaulo uint32_t clock_id; 170275963Srpaulo } req; 171275963Srpaulo struct { 172275963Srpaulo uint32_t clock_id; 173275963Srpaulo uint32_t rate_hz; 174275963Srpaulo } resp; 175275963Srpaulo } body; 176275963Srpaulo uint32_t end_tag; 177275963Srpaulo}; 178275963Srpaulo 179275963Srpaulo#define BCM2835_MBOX_TURBO_ON 1 180275963Srpaulo#define BCM2835_MBOX_TURBO_OFF 0 181275963Srpaulo 182275963Srpaulo#define BCM2835_MBOX_TAG_GET_TURBO 0x00030009 183275963Srpaulo#define BCM2835_MBOX_TAG_SET_TURBO 0x00038009 184275963Srpaulo 185275963Srpaulostruct msg_get_turbo { 186275963Srpaulo struct bcm2835_mbox_hdr hdr; 187275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 188275963Srpaulo union { 189275963Srpaulo struct { 190275963Srpaulo uint32_t id; 191275963Srpaulo } req; 192275963Srpaulo struct { 193275963Srpaulo uint32_t id; 194275963Srpaulo uint32_t level; 195275963Srpaulo } resp; 196275963Srpaulo } body; 197275963Srpaulo uint32_t end_tag; 198275963Srpaulo}; 199275963Srpaulo 200275963Srpaulostruct msg_set_turbo { 201275963Srpaulo struct bcm2835_mbox_hdr hdr; 202275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 203275963Srpaulo union { 204275963Srpaulo struct { 205275963Srpaulo uint32_t id; 206275963Srpaulo uint32_t level; 207275963Srpaulo } req; 208275963Srpaulo struct { 209275963Srpaulo uint32_t id; 210275963Srpaulo uint32_t level; 211275963Srpaulo } resp; 212275963Srpaulo } body; 213275963Srpaulo uint32_t end_tag; 214275963Srpaulo}; 215275963Srpaulo 216275963Srpaulo#define BCM2835_MBOX_VOLTAGE_ID_CORE 0x00000001 217275963Srpaulo#define BCM2835_MBOX_VOLTAGE_ID_SDRAM_C 0x00000002 218275963Srpaulo#define BCM2835_MBOX_VOLTAGE_ID_SDRAM_P 0x00000003 219275963Srpaulo#define BCM2835_MBOX_VOLTAGE_ID_SDRAM_I 0x00000004 220275963Srpaulo 221275963Srpaulo#define BCM2835_MBOX_TAG_GET_VOLTAGE 0x00030003 222275963Srpaulo#define BCM2835_MBOX_TAG_SET_VOLTAGE 0x00038003 223275963Srpaulo#define BCM2835_MBOX_TAG_GET_MAX_VOLTAGE 0x00030005 224275963Srpaulo#define BCM2835_MBOX_TAG_GET_MIN_VOLTAGE 0x00030008 225275963Srpaulo 226275963Srpaulostruct msg_get_voltage { 227275963Srpaulo struct bcm2835_mbox_hdr hdr; 228275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 229275963Srpaulo union { 230275963Srpaulo struct { 231275963Srpaulo uint32_t voltage_id; 232275963Srpaulo } req; 233275963Srpaulo struct { 234275963Srpaulo uint32_t voltage_id; 235275963Srpaulo uint32_t value; 236275963Srpaulo } resp; 237275963Srpaulo } body; 238275963Srpaulo uint32_t end_tag; 239275963Srpaulo}; 240275963Srpaulo 241275963Srpaulostruct msg_set_voltage { 242275963Srpaulo struct bcm2835_mbox_hdr hdr; 243275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 244275963Srpaulo union { 245275963Srpaulo struct { 246275963Srpaulo uint32_t voltage_id; 247275963Srpaulo uint32_t value; 248275963Srpaulo } req; 249275963Srpaulo struct { 250275963Srpaulo uint32_t voltage_id; 251275963Srpaulo uint32_t value; 252275963Srpaulo } resp; 253275963Srpaulo } body; 254275963Srpaulo uint32_t end_tag; 255275963Srpaulo}; 256275963Srpaulo 257275963Srpaulostruct msg_get_max_voltage { 258275963Srpaulo struct bcm2835_mbox_hdr hdr; 259275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 260275963Srpaulo union { 261275963Srpaulo struct { 262275963Srpaulo uint32_t voltage_id; 263275963Srpaulo } req; 264275963Srpaulo struct { 265275963Srpaulo uint32_t voltage_id; 266275963Srpaulo uint32_t value; 267275963Srpaulo } resp; 268275963Srpaulo } body; 269275963Srpaulo uint32_t end_tag; 270275963Srpaulo}; 271275963Srpaulo 272275963Srpaulostruct msg_get_min_voltage { 273275963Srpaulo struct bcm2835_mbox_hdr hdr; 274275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 275275963Srpaulo union { 276275963Srpaulo struct { 277275963Srpaulo uint32_t voltage_id; 278275963Srpaulo } req; 279275963Srpaulo struct { 280275963Srpaulo uint32_t voltage_id; 281275963Srpaulo uint32_t value; 282275963Srpaulo } resp; 283275963Srpaulo } body; 284275963Srpaulo uint32_t end_tag; 285275963Srpaulo}; 286275963Srpaulo 287275963Srpaulo#define BCM2835_MBOX_TAG_GET_TEMPERATURE 0x00030006 288275963Srpaulo#define BCM2835_MBOX_TAG_GET_MAX_TEMPERATURE 0x0003000a 289275963Srpaulo 290275963Srpaulostruct msg_get_temperature { 291275963Srpaulo struct bcm2835_mbox_hdr hdr; 292275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 293275963Srpaulo union { 294275963Srpaulo struct { 295275963Srpaulo uint32_t temperature_id; 296275963Srpaulo } req; 297275963Srpaulo struct { 298275963Srpaulo uint32_t temperature_id; 299275963Srpaulo uint32_t value; 300275963Srpaulo } resp; 301275963Srpaulo } body; 302275963Srpaulo uint32_t end_tag; 303275963Srpaulo}; 304275963Srpaulo 305275963Srpaulostruct msg_get_max_temperature { 306275963Srpaulo struct bcm2835_mbox_hdr hdr; 307275963Srpaulo struct bcm2835_mbox_tag_hdr tag_hdr; 308275963Srpaulo union { 309275963Srpaulo struct { 310275963Srpaulo uint32_t temperature_id; 311275963Srpaulo } req; 312275963Srpaulo struct { 313275963Srpaulo uint32_t temperature_id; 314275963Srpaulo uint32_t value; 315275963Srpaulo } resp; 316275963Srpaulo } body; 317275963Srpaulo uint32_t end_tag; 318275963Srpaulo}; 319275963Srpaulo 320275963Srpaulo#endif /* _BCM2835_MBOX_PROP_H_ */ 321