blob: 387f4ce320b94986753e00b1a0598318dea9a5d6 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_LIB_DDK_INCLUDE_DDK_METADATA_H_
#define SRC_LIB_DDK_INCLUDE_DDK_METADATA_H_
#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <zircon/boot/image.h>
// This file contains metadata types for device_get_metadata()
// MAC Address for Ethernet, Wifi, Bluetooth, etc.
// Content: uint8_t[] (variable length based on type of MAC address)
#define DEVICE_METADATA_MAC_ADDRESS 0x43414D6D // mMAC
static_assert(DEVICE_METADATA_MAC_ADDRESS == ZBI_TYPE_DRV_MAC_ADDRESS, "");
// Partition map for raw block device.
// Content: bootdata_partition_map_t
#define DEVICE_METADATA_PARTITION_MAP 0x5452506D // mPRT
static_assert(DEVICE_METADATA_PARTITION_MAP == ZBI_TYPE_DRV_PARTITION_MAP, "");
// maximum size of DEVICE_METADATA_PARTITION_MAP data
#define METADATA_PARTITION_MAP_MAX 4096
// Initial USB mode
// type: usb_mode_t
#define DEVICE_METADATA_USB_MODE 0x4D425355 // USBM
#define DEVICE_METADATA_SERIAL_NUMBER 0x4e4c5253 // SRLN
static_assert(DEVICE_METADATA_SERIAL_NUMBER == ZBI_TYPE_SERIAL_NUMBER, "");
// Board-specific USB configuration
// type: UsbConfig
// fidl: usb-peripheral.fidl
#define DEVICE_METADATA_USB_CONFIG 0x4D425356 // USBC
// Serial port info
// type: serial_port_info_t
#define DEVICE_METADATA_SERIAL_PORT_INFO 0x4D524553 // SERM
// Platform board name (for sysinfo driver)
// type: char[ZBI_BOARD_NAME_LEN]
#define DEVICE_METADATA_BOARD_NAME 0x4E524F42 // BORN
// Platform board revision (for sysinfo driver)
// type: char[ZBI_BOARD_REVISION_LEN]
#define DEVICE_METADATA_BOARD_REVISION 0x52524F42 // BORR
// Platform board private data (for board driver)
// type: ???
#define DEVICE_METADATA_BOARD_PRIVATE 0x524F426D // mBOR
static_assert(DEVICE_METADATA_BOARD_PRIVATE == ZBI_TYPE_DRV_BOARD_PRIVATE, "");
// Information that is sent through the isolated dev manager by a test.
// type: ??? - test defined
#define DEVICE_METADATA_TEST 0x54534554 // TEST
// Interrupt controller type (for sysinfo driver)
// type: uint8_t
#define DEVICE_METADATA_INTERRUPT_CONTROLLER_TYPE 0x43544E49 // INTC
// GUID map (for GPT driver)
// type: array of guid_map_t
#define DEVICE_METADATA_GUID_MAP 0x44495547 // GUID
#define DEVICE_METADATA_GUID_MAP_MAX_ENTRIES 16
// list of buttons_button_config_t
#define DEVICE_METADATA_BUTTONS_BUTTONS 0x424E5442 // BTNB
// list of buttons_gpio_config_t
#define DEVICE_METADATA_BUTTONS_GPIOS 0x474E5442 // BTNG
// list of char[ZX_MAX_NAME_LEN]
#define DEVICE_METADATA_NAME 0x454D414E // NAME
// type: fuchsia_hardware_thermal_ThermalDeviceInfo
#define DEVICE_METADATA_THERMAL_CONFIG 0x54485243 // THRC
// type: array of gpio_pin_t
#define DEVICE_METADATA_GPIO_PINS 0x4F495047 // GPIO
// type: array of power_domain_t
#define DEVICE_METADATA_POWER_DOMAINS 0x52574F50 // POWR
// type: clock_id_t
#define DEVICE_METADATA_CLOCK_IDS 0x4B4F4C43 // CLOK
// type: pwm_idx_t
#define DEVICE_METADATA_PWM_IDS 0x004D5750 // PWM\0
// type: emmc_config_t
#define DEVICE_METADATA_EMMC_CONFIG 0x434D4D45 // EMMC
// type: vendor specific Wifi configuration
#define DEVICE_METADATA_WIFI_CONFIG 0x49464957 // WIFI
// type: eth_dev_metadata_t
#define DEVICE_METADATA_ETH_MAC_DEVICE 0x43414D45 // EMAC
// type: eth_dev_metadata_t
#define DEVICE_METADATA_ETH_PHY_DEVICE 0x59485045 // EPHY
// type: array of i2c_channel_t
#define DEVICE_METADATA_I2C_CHANNELS 0x43433249 // I2CC
// type: array of spi_channel_t
#define DEVICE_METADATA_SPI_CHANNELS 0x43495053 // SPIC
// type: display_driver_t
#define DEVICE_METADATA_DISPLAY_DEVICE 0x4C505344 // DSPL
// type: display_config_t
#define DEVICE_METADATA_DISPLAY_CONFIG 0x43505344 // DSPC
// Maximum screen brightness in nits. Used by the backlight driver.
// type: double
#define DEVICE_METADATA_BACKLIGHT_MAX_BRIGHTNESS_NITS 0x4C4B4342 // BCKL
// list of lights_config_t
#define DEVICE_METADATA_LIGHTS 0x5448474C // LGHT
#define DEVICE_METADATA_LIGHTS_GROUP_NAME 0x4E505247 // GRPN
// Encodings of Metadata for fuchsia::hardware::registers::Metadata
// list of linearized bytes as in fidl_outgoing_msg_t
#define DEVICE_METADATA_REGISTERS 0x53474552 // REGS
// Device metadata fetched from ACPI for Intel HDA audio drivers. This is an
// opaque blob of data which us used to configure the Intel SST DSP.
//
// TODO(fxbug.dev/56832): Remove this when we have a better way to manage driver
// dependencies on ACPI and no longer need to proactively publish ACPI metadata
// to drivers.
#define DEVICE_METADATA_ACPI_HDA_NHLT 0x544C484E // NHLT
// Device metadata fetched from ACPI for I2C bus drivers. This signals a list
// of acpi_i2c_device_t structures.
//
// TODO(fxbug.dev/56832): Remove this when we have a better way to manage driver
// dependencies on ACPI and no longer need to proactively publish ACPI metadata
// to drivers.
#define DEVICE_METADATA_ACPI_I2C_DEVICES 0x43324941 // AI2C
// Metadata types that have least significant byte set to lowercase 'd'
// signify private driver data.
// This allows creating metadata types to be defined local to a particular
// driver or driver protocol.
#define DEVICE_METADATA_PRIVATE 0x00000064
#define DEVICE_METADATA_PRIVATE_MASK 0x000000ff
static inline bool is_private_metadata(uint32_t type) {
return ((type & DEVICE_METADATA_PRIVATE_MASK) == DEVICE_METADATA_PRIVATE);
}
#endif // SRC_LIB_DDK_INCLUDE_DDK_METADATA_H_