1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <ddk/debug.h> 8#include <ddk/device.h> 9#include <ddk/driver.h> 10#include <ddk/mmio-buffer.h> 11#include <ddk/protocol/mailbox.h> 12#include <ddk/protocol/platform-bus.h> 13#include <ddk/protocol/platform-defs.h> 14#include <ddk/protocol/platform-device.h> 15#include <hw/reg.h> 16#include <lib/sync/completion.h> 17#include <threads.h> 18 19#define MAILBOX_ERROR(fmt, ...) zxlogf(ERROR, "[%s %d]" fmt, __func__, __LINE__, ##__VA_ARGS__) 20#define MAILBOX_INFO(fmt, ...) zxlogf(INFO, "[%s %d]" fmt, __func__, __LINE__, ##__VA_ARGS__) 21 22#define NUM_MAILBOXES 6 23#define GET_NUM_WORDS(x) ((x) / 4 + (((x) % 4) ? 1 : 0)) 24 25typedef struct { 26 uint32_t set_offset; 27 uint32_t stat_offset; 28 uint32_t clr_offset; 29 uint32_t payload_offset; 30} aml_mailbox_block_t; 31 32typedef struct { 33 zx_device_t* zxdev; 34 platform_device_protocol_t pdev; 35 36 mmio_buffer_t mmio_mailbox; 37 mmio_buffer_t mmio_mailbox_payload; 38 39 zx_handle_t inth[NUM_MAILBOXES]; 40 41 mtx_t mailbox_chan_lock[NUM_MAILBOXES]; 42} aml_mailbox_t; 43 44// MMIO Indexes 45enum { 46 MMIO_MAILBOX, 47 MMIO_MAILBOX_PAYLOAD, 48}; 49 50// IRQ Indexes 51enum { 52 MAILBOX_IRQ_RECEIV0, 53 MAILBOX_IRQ_RECEIV1, 54 MAILBOX_IRQ_RECEIV2, 55 MAILBOX_IRQ_SEND3, 56 MAILBOX_IRQ_SEND4, 57 MAILBOX_IRQ_SEND5, 58}; 59 60// Mailboxes 61enum { 62 SCP_SECURE_MAILBOX, 63 SCP_NS_LOW_PRIORITY_MAILBOX, 64 SCP_NS_HIGH_PRIORITY_MAILBOX, 65 AP_SECURE_MAILBOX, 66 AP_NS_LOW_PRIORITY_MAILBOX, 67 AP_NS_HIGH_PRIORITY_MAILBOX, 68 INVALID_MAILBOX, 69}; 70