/*
 * Copyright (c) 2021 DENX Software Engineering GmbH
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/linker/iterable_sections.h>

/**
 * @file
 * @brief Linker command/script file
 *
 * This is the linker script for ip_k66f board to allow ethernet
 * interfaces placement.
 */

/*
 * Explicit placement of the ethernet interfaces
 *
 * eth0 is the "master" port for the DSA switch and hence shall be
 * placed on the index (position) 1 (as net_if_get_by_index() uses
 * internally '_net_if_list_start[index - 1]' linker generated symbol).
 *
 * lan{123} shall be placed afterwards (sorted) so the order will be
 * correctly preserved.
 *
 * If ip_k66f have had eth1 interface - it shall be placed afterwards
 *
 * The last entry with `._net_if.static.*` is to accommodate ethernet
 * interfaces created in tests/samples - like e.g. _net_if.static.eth_test)
 * in tests/net/vlan/src/main.c
 */

#define NETWORK_RAM_SECTIONS                                    \
SECTION_DATA_PROLOGUE(net_if_area,,SUBALIGN(4))                 \
{                                                               \
	_net_if_list_start = .;                                 \
	KEEP(*(._net_if.static.dts*));                          \
	KEEP(*(SORT_BY_NAME(._net_if.static.dsa_slave*)));      \
	KEEP(*(SORT_BY_NAME(._net_if.static.*)));               \
	_net_if_list_end = .;                                   \
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)            \
ITERABLE_SECTION_RAM(net_if_dev, 4)                             \
ITERABLE_SECTION_RAM(net_l2, 4)                                 \
ITERABLE_SECTION_RAM(eth_bridge, 4)

#include <zephyr/arch/arm/aarch32/cortex_m/scripts/linker.ld>
