FILE
iwl-io.h
File preview with syntax highlighting.
linux-6.19.14/drivers/net/wireless/intel/iwlwifi/iwl-io.h
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2/* 3 * Copyright (C) 2018-2021, 2025 Intel Corporation 4 */ 5#ifndef __iwl_io_h__ 6#define __iwl_io_h__ 7 8#include "iwl-devtrace.h" 9#include "iwl-trans.h" 10 11void iwl_write8(struct iwl_trans *trans, u32 ofs, u8 val); 12void iwl_write32(struct iwl_trans *trans, u32 ofs, u32 val); 13void iwl_write64(struct iwl_trans *trans, u64 ofs, u64 val); 14u32 iwl_read32(struct iwl_trans *trans, u32 ofs); 15 16static inline void iwl_set_bit(struct iwl_trans *trans, u32 reg, u32 mask) 17{ 18 iwl_trans_set_bits_mask(trans, reg, mask, mask); 19} 20 21static inline void iwl_clear_bit(struct iwl_trans *trans, u32 reg, u32 mask) 22{ 23 iwl_trans_set_bits_mask(trans, reg, mask, 0); 24} 25 26int iwl_poll_bits_mask(struct iwl_trans *trans, u32 addr, 27 u32 bits, u32 mask, int timeout); 28static inline int iwl_poll_bits(struct iwl_trans *trans, u32 addr, u32 bits, 29 int timeout) 30{ 31 return iwl_poll_bits_mask(trans, addr, bits, bits, timeout); 32} 33int iwl_poll_direct_bit(struct iwl_trans *trans, u32 addr, u32 mask, 34 int timeout); 35 36u32 iwl_read_direct32(struct iwl_trans *trans, u32 reg); 37void iwl_write_direct32(struct iwl_trans *trans, u32 reg, u32 value); 38void iwl_write_direct64(struct iwl_trans *trans, u64 reg, u64 value); 39 40 41u32 iwl_read_prph_no_grab(struct iwl_trans *trans, u32 ofs); 42u32 iwl_read_prph(struct iwl_trans *trans, u32 ofs); 43void iwl_write_prph_no_grab(struct iwl_trans *trans, u32 ofs, u32 val); 44void iwl_write_prph64_no_grab(struct iwl_trans *trans, u64 ofs, u64 val); 45void iwl_write_prph_delay(struct iwl_trans *trans, u32 ofs, 46 u32 val, u32 delay_ms); 47static inline void iwl_write_prph(struct iwl_trans *trans, u32 ofs, u32 val) 48{ 49 iwl_write_prph_delay(trans, ofs, val, 0); 50} 51 52int iwl_poll_prph_bit(struct iwl_trans *trans, u32 addr, 53 u32 bits, u32 mask, int timeout); 54void iwl_set_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask); 55void iwl_set_bits_mask_prph(struct iwl_trans *trans, u32 ofs, 56 u32 bits, u32 mask); 57void iwl_clear_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask); 58void iwl_force_nmi(struct iwl_trans *trans); 59 60int iwl_trans_activate_nic(struct iwl_trans *trans); 61 62/* Error handling */ 63int iwl_dump_fh(struct iwl_trans *trans, char **buf); 64 65/* 66 * UMAC periphery address space changed from 0xA00000 to 0xD00000 starting from 67 * device family AX200. So peripheries used in families above and below AX200 68 * should go through iwl_..._umac_..._prph. 69 */ 70static inline u32 iwl_umac_prph(struct iwl_trans *trans, u32 ofs) 71{ 72 return ofs + trans->mac_cfg->umac_prph_offset; 73} 74 75static inline u32 iwl_read_umac_prph_no_grab(struct iwl_trans *trans, u32 ofs) 76{ 77 return iwl_read_prph_no_grab(trans, ofs + 78 trans->mac_cfg->umac_prph_offset); 79} 80 81static inline u32 iwl_read_umac_prph(struct iwl_trans *trans, u32 ofs) 82{ 83 return iwl_read_prph(trans, ofs + trans->mac_cfg->umac_prph_offset); 84} 85 86static inline void iwl_write_umac_prph_no_grab(struct iwl_trans *trans, u32 ofs, 87 u32 val) 88{ 89 iwl_write_prph_no_grab(trans, ofs + trans->mac_cfg->umac_prph_offset, 90 val); 91} 92 93static inline void iwl_write_umac_prph(struct iwl_trans *trans, u32 ofs, 94 u32 val) 95{ 96 iwl_write_prph(trans, ofs + trans->mac_cfg->umac_prph_offset, val); 97} 98 99static inline int iwl_poll_umac_prph_bit(struct iwl_trans *trans, u32 addr, 100 u32 bits, u32 mask, int timeout) 101{ 102 return iwl_poll_prph_bit(trans, addr + 103 trans->mac_cfg->umac_prph_offset, 104 bits, mask, timeout); 105} 106 107#endif
~/
Read-only file preview.