# Private config options for openamp sample app

# Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
# SPDX-License-Identifier: Apache-2.0

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_IPC_SHM := zephyr,ipc_shm
DT_CHOSEN_Z_IPC_TX := zephyr,ipc_tx
DT_CHOSEN_Z_IPC_RX := zephyr,ipc_rx

config OPENAMP_IPC_SHM_BASE_ADDRESS
	hex
	default "$(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_IPC_SHM))"
	help
	  This option specifies base address of the memory region to
	  be used for the OpenAMP IPC shared memory

config OPENAMP_IPC_SHM_SIZE
	hex
	default "$(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_IPC_SHM))"
	help
	  This option specifies size of the memory region to be used
	  for the OpenAMP IPC shared memory

config OPENAMP_IPC_DEV_TX_NAME
	string
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_TX))" if !IPM_NRFX
	default "IPM_1" if (IPM_NRFX && OPENAMP_MASTER)
	default "IPM_0" if (IPM_NRFX && OPENAMP_SLAVE)
	help
	  This option specifies the device name for the IPC device to be used (TX)

config OPENAMP_IPC_DEV_RX_NAME
	string
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPC_RX))" if !IPM_NRFX
	default "IPM_0" if (IPM_NRFX && OPENAMP_MASTER)
	default "IPM_1" if (IPM_NRFX && OPENAMP_SLAVE)
	help
	  This option specifies the device name for the IPC device to be used (RX)

source "Kconfig.zephyr"
