/*
 * Copyright (c) 2022 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

/**
 * @brief Header containing OS interface specific declarations for the
 * Zephyr OS layer of the Wi-Fi driver.
 */

#ifndef __SHIM_H__
#define __SHIM_H__

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/net/net_pkt.h>

/**
 * struct zep_shim_bus_qspi_priv - Structure to hold context information for the Linux OS
 *                        shim.
 * @opriv: Pointer to OSAL context.
 * @pcie_callbk_data: Callback data to be passed to the PCIe callback functions.
 * @pcie_prb_callbk: The callback function to be called when a PCIe device
 *                   has been probed.
 * @pcie_rem_callbk: The callback function to be called when a PCIe device
 *                   has been removed.
 *
 * This structure maintains the context information necessary for the operation
 * of the Linux shim. Some of the elements of the structure need to be
 * initialized during the initialization of the Linux shim while others need to
 * be kept updated over the duration of the Linux shim operation.
 */
struct zep_shim_bus_qspi_priv {
	void *qspi_dev;

	bool dev_added;
	bool dev_init;
};

struct zep_shim_intr_priv {
	struct gpio_callback gpio_cb_data;
	void *callbk_data;
	int (*callbk_fn)(void *callbk_data);
	struct k_work_delayable work;
};

struct zep_shim_llist_node {
	sys_dnode_t head;
	void *data;
};

struct zep_shim_llist {
	sys_dlist_t head;
	unsigned int len;
};

void *net_pkt_to_nbuf(struct net_pkt *pkt);
void *net_pkt_from_nbuf(void *iface, void *frm);
#if defined(CONFIG_NRF700X_RAW_DATA_RX) || defined(CONFIG_NRF700X_PROMISC_DATA_RX)
void *net_raw_pkt_from_nbuf(void *iface,
			    void *frm,
			    unsigned short raw_hdr_len,
			    void *raw_rx_hdr,
			    bool pkt_free);
#endif /* CONFIG_NRF700X_RAW_DATA_RX || CONFIG_NRF700X_PROMISC_DATA_RX */

#endif /* __SHIM_H__ */
