162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2018, Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _ICE_OSDEP_H_
562306a36Sopenharmony_ci#define _ICE_OSDEP_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/types.h>
862306a36Sopenharmony_ci#include <linux/ctype.h>
962306a36Sopenharmony_ci#include <linux/delay.h>
1062306a36Sopenharmony_ci#include <linux/io.h>
1162306a36Sopenharmony_ci#include <linux/bitops.h>
1262306a36Sopenharmony_ci#include <linux/ethtool.h>
1362306a36Sopenharmony_ci#include <linux/etherdevice.h>
1462306a36Sopenharmony_ci#include <linux/if_ether.h>
1562306a36Sopenharmony_ci#include <linux/pci_ids.h>
1662306a36Sopenharmony_ci#ifndef CONFIG_64BIT
1762306a36Sopenharmony_ci#include <linux/io-64-nonatomic-lo-hi.h>
1862306a36Sopenharmony_ci#endif
1962306a36Sopenharmony_ci#include <net/udp_tunnel.h>
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define wr32(a, reg, value)	writel((value), ((a)->hw_addr + (reg)))
2262306a36Sopenharmony_ci#define rd32(a, reg)		readl((a)->hw_addr + (reg))
2362306a36Sopenharmony_ci#define wr64(a, reg, value)	writeq((value), ((a)->hw_addr + (reg)))
2462306a36Sopenharmony_ci#define rd64(a, reg)		readq((a)->hw_addr + (reg))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define ice_flush(a)		rd32((a), GLGEN_STAT)
2762306a36Sopenharmony_ci#define ICE_M(m, s)		((m) << (s))
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct ice_dma_mem {
3062306a36Sopenharmony_ci	void *va;
3162306a36Sopenharmony_ci	dma_addr_t pa;
3262306a36Sopenharmony_ci	size_t size;
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct ice_hw;
3662306a36Sopenharmony_cistruct device *ice_hw_to_dev(struct ice_hw *hw);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#ifdef CONFIG_DYNAMIC_DEBUG
3962306a36Sopenharmony_ci#define ice_debug(hw, type, fmt, args...) \
4062306a36Sopenharmony_ci	dev_dbg(ice_hw_to_dev(hw), fmt, ##args)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci#define ice_debug_array(hw, type, rowsize, groupsize, buf, len) \
4362306a36Sopenharmony_ci	print_hex_dump_debug(KBUILD_MODNAME " ",		\
4462306a36Sopenharmony_ci			     DUMP_PREFIX_OFFSET, rowsize,	\
4562306a36Sopenharmony_ci			     groupsize, buf, len, false)
4662306a36Sopenharmony_ci#else
4762306a36Sopenharmony_ci#define ice_debug(hw, type, fmt, args...)			\
4862306a36Sopenharmony_cido {								\
4962306a36Sopenharmony_ci	if ((type) & (hw)->debug_mask)				\
5062306a36Sopenharmony_ci		dev_info(ice_hw_to_dev(hw), fmt, ##args);	\
5162306a36Sopenharmony_ci} while (0)
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#ifdef DEBUG
5462306a36Sopenharmony_ci#define ice_debug_array(hw, type, rowsize, groupsize, buf, len) \
5562306a36Sopenharmony_cido {								\
5662306a36Sopenharmony_ci	if ((type) & (hw)->debug_mask)				\
5762306a36Sopenharmony_ci		print_hex_dump_debug(KBUILD_MODNAME,		\
5862306a36Sopenharmony_ci				     DUMP_PREFIX_OFFSET,	\
5962306a36Sopenharmony_ci				     rowsize, groupsize, buf,	\
6062306a36Sopenharmony_ci				     len, false);		\
6162306a36Sopenharmony_ci} while (0)
6262306a36Sopenharmony_ci#else
6362306a36Sopenharmony_ci#define ice_debug_array(hw, type, rowsize, groupsize, buf, len) \
6462306a36Sopenharmony_cido {								\
6562306a36Sopenharmony_ci	struct ice_hw *hw_l = hw;				\
6662306a36Sopenharmony_ci	if ((type) & (hw_l)->debug_mask) {			\
6762306a36Sopenharmony_ci		u16 len_l = len;				\
6862306a36Sopenharmony_ci		u8 *buf_l = buf;				\
6962306a36Sopenharmony_ci		int i;						\
7062306a36Sopenharmony_ci		for (i = 0; i < (len_l - 16); i += 16)		\
7162306a36Sopenharmony_ci			ice_debug(hw_l, type, "0x%04X  %16ph\n",\
7262306a36Sopenharmony_ci				  i, ((buf_l) + i));		\
7362306a36Sopenharmony_ci		if (i < len_l)					\
7462306a36Sopenharmony_ci			ice_debug(hw_l, type, "0x%04X  %*ph\n", \
7562306a36Sopenharmony_ci				  i, ((len_l) - i), ((buf_l) + i));\
7662306a36Sopenharmony_ci	}							\
7762306a36Sopenharmony_ci} while (0)
7862306a36Sopenharmony_ci#endif /* DEBUG */
7962306a36Sopenharmony_ci#endif /* CONFIG_DYNAMIC_DEBUG */
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#endif /* _ICE_OSDEP_H_ */
82