/* SPDX-License-Identifier: GPL-2.0-only
 *
 * Copyright (c) 2021, MediaTek Inc.
 * Copyright (c) 2021-2022, Intel Corporation.
 *
 * Authors:
 *  Haijun Liu <haijun.liu@mediatek.com>
 *  Moises Veleta <moises.veleta@intel.com>
 *
 * Contributors:
 *  Amir Hanania <amir.hanania@intel.com>
 *  Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
 *  Ricardo Martinez <ricardo.martinez@linux.intel.com>
 */

#ifndef __T7XX_NETDEV_H__
#define __T7XX_NETDEV_H__

#include <linux/bits.h>
#include <linux/netdevice.h>
#include <linux/types.h>

#include "t7xx_hif_dpmaif.h"
#include "t7xx_pci.h"
#include "t7xx_state_monitor.h"

#define RXQ_NUM				DPMAIF_RXQ_NUM
#define NIC_DEV_MAX			21
#define NIC_DEV_DEFAULT			2

#define CCMNI_NETDEV_WDT_TO		(1 * HZ)
#define CCMNI_MTU_MAX			3000

struct t7xx_ccmni {
	u8				index;
	atomic_t			usage;
	struct net_device		*dev;
	struct t7xx_ccmni_ctrl		*ctlb;
};

struct t7xx_ccmni_ctrl {
	struct t7xx_pci_dev		*t7xx_dev;
	struct dpmaif_ctrl		*hif_ctrl;
	struct t7xx_ccmni		*ccmni_inst[NIC_DEV_MAX];
	struct dpmaif_callbacks		callbacks;
	unsigned int			nic_dev_num;
	unsigned int			md_sta;
	struct t7xx_fsm_notifier	md_status_notify;
	bool				wwan_is_registered;
};

int t7xx_ccmni_init(struct t7xx_pci_dev *t7xx_dev);
void t7xx_ccmni_exit(struct t7xx_pci_dev *t7xx_dev);

#endif /* __T7XX_NETDEV_H__ */
