162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci *
362306a36Sopenharmony_ci * Copyright (c) 2021, MediaTek Inc.
462306a36Sopenharmony_ci * Copyright (c) 2021-2022, Intel Corporation.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Authors:
762306a36Sopenharmony_ci *  Haijun Liu <haijun.liu@mediatek.com>
862306a36Sopenharmony_ci *  Moises Veleta <moises.veleta@intel.com>
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * Contributors:
1162306a36Sopenharmony_ci *  Amir Hanania <amir.hanania@intel.com>
1262306a36Sopenharmony_ci *  Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
1362306a36Sopenharmony_ci *  Ricardo Martinez <ricardo.martinez@linux.intel.com>
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#ifndef __T7XX_NETDEV_H__
1762306a36Sopenharmony_ci#define __T7XX_NETDEV_H__
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include <linux/bits.h>
2062306a36Sopenharmony_ci#include <linux/netdevice.h>
2162306a36Sopenharmony_ci#include <linux/types.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#include "t7xx_hif_dpmaif.h"
2462306a36Sopenharmony_ci#include "t7xx_pci.h"
2562306a36Sopenharmony_ci#include "t7xx_state_monitor.h"
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define RXQ_NUM				DPMAIF_RXQ_NUM
2862306a36Sopenharmony_ci#define NIC_DEV_MAX			21
2962306a36Sopenharmony_ci#define NIC_DEV_DEFAULT			2
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define CCMNI_NETDEV_WDT_TO		(1 * HZ)
3262306a36Sopenharmony_ci#define CCMNI_MTU_MAX			3000
3362306a36Sopenharmony_ci#define NIC_NAPI_POLL_BUDGET		128
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct t7xx_ccmni {
3662306a36Sopenharmony_ci	u8				index;
3762306a36Sopenharmony_ci	atomic_t			usage;
3862306a36Sopenharmony_ci	struct net_device		*dev;
3962306a36Sopenharmony_ci	struct t7xx_ccmni_ctrl		*ctlb;
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistruct t7xx_ccmni_ctrl {
4362306a36Sopenharmony_ci	struct t7xx_pci_dev		*t7xx_dev;
4462306a36Sopenharmony_ci	struct dpmaif_ctrl		*hif_ctrl;
4562306a36Sopenharmony_ci	struct t7xx_ccmni		*ccmni_inst[NIC_DEV_MAX];
4662306a36Sopenharmony_ci	struct dpmaif_callbacks		callbacks;
4762306a36Sopenharmony_ci	unsigned int			nic_dev_num;
4862306a36Sopenharmony_ci	unsigned int			md_sta;
4962306a36Sopenharmony_ci	struct t7xx_fsm_notifier	md_status_notify;
5062306a36Sopenharmony_ci	bool				wwan_is_registered;
5162306a36Sopenharmony_ci	struct net_device		dummy_dev;
5262306a36Sopenharmony_ci	struct napi_struct		*napi[RXQ_NUM];
5362306a36Sopenharmony_ci	atomic_t			napi_usr_refcnt;
5462306a36Sopenharmony_ci	bool				is_napi_en;
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciint t7xx_ccmni_init(struct t7xx_pci_dev *t7xx_dev);
5862306a36Sopenharmony_civoid t7xx_ccmni_exit(struct t7xx_pci_dev *t7xx_dev);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci#endif /* __T7XX_NETDEV_H__ */
61