xref: /linux/drivers/net/wireless/intel/iwlwifi/pcie/utils.h (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3  * Copyright (C) 2025 Intel Corporation
4  */
5 
6 #ifndef __iwl_pcie_utils_h__
7 #define __iwl_pcie_utils_h__
8 
9 #include "iwl-io.h"
10 
11 void iwl_trans_pcie_dump_regs(struct iwl_trans *trans, struct pci_dev *pdev);
12 
_iwl_trans_set_bits_mask(struct iwl_trans * trans,u32 reg,u32 mask,u32 value)13 static inline void _iwl_trans_set_bits_mask(struct iwl_trans *trans,
14 					    u32 reg, u32 mask, u32 value)
15 {
16 	u32 v;
17 
18 #ifdef CONFIG_IWLWIFI_DEBUG
19 	WARN_ON_ONCE(value & ~mask);
20 #endif
21 
22 	v = iwl_read32(trans, reg);
23 	v &= ~mask;
24 	v |= value;
25 	iwl_write32(trans, reg, v);
26 }
27 
iwl_trans_clear_bit(struct iwl_trans * trans,u32 reg,u32 mask)28 static inline void iwl_trans_clear_bit(struct iwl_trans *trans,
29 				       u32 reg, u32 mask)
30 {
31 	_iwl_trans_set_bits_mask(trans, reg, mask, 0);
32 }
33 
iwl_trans_set_bit(struct iwl_trans * trans,u32 reg,u32 mask)34 static inline void iwl_trans_set_bit(struct iwl_trans *trans,
35 				     u32 reg, u32 mask)
36 {
37 	_iwl_trans_set_bits_mask(trans, reg, mask, mask);
38 }
39 
40 #endif /* __iwl_pcie_utils_h__ */
41