/* SPDX-License-Identifier: Apache-2.0 */

#include <zephyr/linker/iterable_sections.h>

#if defined(CONFIG_NETWORKING)
#ifndef NETWORK_RAM_SECTIONS
#define NETWORK_RAM_SECTIONS \
	ITERABLE_SECTION_RAM(net_if, 4) \
	ITERABLE_SECTION_RAM(net_if_dev, 4) \
	ITERABLE_SECTION_RAM(net_l2, 4) \
	ITERABLE_SECTION_RAM(eth_bridge, 4)
#endif
#endif /* NETWORKING */

#if defined(CONFIG_BT_MESH)
	ITERABLE_SECTION_RAM(bt_mesh_ext_adv, 4)
#endif

#if defined(CONFIG_GEN_SW_ISR_TABLE) && defined(CONFIG_DYNAMIC_INTERRUPTS)
	SECTION_DATA_PROLOGUE(sw_isr_table,,)
	{
		/*
		 * Some arch requires an entry to be aligned to arch
		 * specific boundary for using double word load
		 * instruction.  See include/sw_isr_table.h.
		 */
		. = ALIGN(CONFIG_ARCH_SW_ISR_TABLE_ALIGN);
		*(_SW_ISR_TABLE_SECTION_SYMS)
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
#endif

        SECTION_DATA_PROLOGUE(device_states,,)
        {
		/* Device states used by the device objects. */
                __device_states_start = .;
		KEEP(*(".z_devstate"));
		KEEP(*(".z_devstate.*"));
                __device_states_end = .;
        } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)

#if CONFIG_PM_DEVICE
	ITERABLE_SECTION_RAM(pm_device_slots, 4)
#endif

#if defined(CONFIG_HAS_DYNAMIC_DEVICE_HANDLES)
	SECTION_DATA_PROLOGUE(device_handles,,)
	{
#include "device-handles.ld"
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
#endif 	/* CONFIG_HAS_DYNAMIC_DEVICE_HANDLES */

	ITERABLE_SECTION_RAM_GC_ALLOWED(log_mpsc_pbuf, 4)
	ITERABLE_SECTION_RAM(log_msg_ptr, 4)
	ITERABLE_SECTION_RAM(log_dynamic, 4)

#ifdef CONFIG_USERSPACE
	/* All kernel objects within are assumed to be either completely
	 * initialized at build time, or initialized automatically at runtime
	 * via iteration before the POST_KERNEL phase.
	 *
	 * These two symbols only used by gen_kobject_list.py
	 */

	_static_kernel_objects_begin = .;
#endif /* CONFIG_USERSPACE */

	ITERABLE_SECTION_RAM_GC_ALLOWED(k_timer, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_mem_slab, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_heap, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_mutex, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_stack, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_msgq, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_mbox, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_pipe, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_sem, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_event, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_queue, 4)
	ITERABLE_SECTION_RAM_GC_ALLOWED(k_condvar, 4)

	ITERABLE_SECTION_RAM(net_buf_pool, 4)

#if defined(CONFIG_NETWORKING)
	NETWORK_RAM_SECTIONS
#endif /* NETWORKING */

#if defined(CONFIG_PCIE)
	ITERABLE_SECTION_RAM(pcie_dev, 4)
#endif /* PCIE */

#if defined(CONFIG_UART_MUX)
	ITERABLE_SECTION_RAM(uart_mux, 4)
#endif

#if defined(CONFIG_USB_DEVICE_STACK)
	SECTION_DATA_PROLOGUE(usb_descriptor,,SUBALIGN(1))
	{
		__usb_descriptor_start = .;
		*(".usb.descriptor")
		KEEP(*(SORT_BY_NAME(".usb.descriptor*")))
		__usb_descriptor_end = .;
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)

	ITERABLE_SECTION_RAM(usb_cfg_data, 4)
#endif /* CONFIG_USB_DEVICE_STACK */

#if defined(CONFIG_USB_DEVICE_BOS)
	SECTION_DATA_PROLOGUE(usb_bos_desc,,SUBALIGN(1))
	{
		__usb_bos_desc_start = .;
		*(".usb.bos_desc")
		KEEP(*(SORT_BY_NAME(".usb.bos_desc*")))
		__usb_bos_desc_end = .;
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
#endif /* CONFIG_USB_DEVICE_BOS */

#if defined(CONFIG_RTIO)
	ITERABLE_SECTION_RAM(rtio, 4)
	ITERABLE_SECTION_RAM(rtio_iodev, 4)
	ITERABLE_SECTION_RAM(rtio_sqe_pool, 4)
	ITERABLE_SECTION_RAM(rtio_cqe_pool, 4)
#endif /* CONFIG_RTIO */

#ifdef CONFIG_USERSPACE
	_static_kernel_objects_end = .;
#endif
