Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/iwlwifi/iwl-io.h
48253 views
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
11
void iwl_write8(struct iwl_trans *trans, u32 ofs, u8 val);
12
void iwl_write32(struct iwl_trans *trans, u32 ofs, u32 val);
13
void iwl_write64(struct iwl_trans *trans, u64 ofs, u64 val);
14
u32 iwl_read32(struct iwl_trans *trans, u32 ofs);
15
16
static 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
21
static 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
26
int iwl_poll_bits_mask(struct iwl_trans *trans, u32 addr,
27
u32 bits, u32 mask, int timeout);
28
static 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
}
33
int iwl_poll_direct_bit(struct iwl_trans *trans, u32 addr, u32 mask,
34
int timeout);
35
36
u32 iwl_read_direct32(struct iwl_trans *trans, u32 reg);
37
void iwl_write_direct32(struct iwl_trans *trans, u32 reg, u32 value);
38
void iwl_write_direct64(struct iwl_trans *trans, u64 reg, u64 value);
39
40
41
u32 iwl_read_prph_no_grab(struct iwl_trans *trans, u32 ofs);
42
u32 iwl_read_prph(struct iwl_trans *trans, u32 ofs);
43
void iwl_write_prph_no_grab(struct iwl_trans *trans, u32 ofs, u32 val);
44
void iwl_write_prph64_no_grab(struct iwl_trans *trans, u64 ofs, u64 val);
45
void iwl_write_prph_delay(struct iwl_trans *trans, u32 ofs,
46
u32 val, u32 delay_ms);
47
static 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
52
int iwl_poll_prph_bit(struct iwl_trans *trans, u32 addr,
53
u32 bits, u32 mask, int timeout);
54
void iwl_set_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask);
55
void iwl_set_bits_mask_prph(struct iwl_trans *trans, u32 ofs,
56
u32 bits, u32 mask);
57
void iwl_clear_bits_prph(struct iwl_trans *trans, u32 ofs, u32 mask);
58
void iwl_force_nmi(struct iwl_trans *trans);
59
60
int iwl_finish_nic_init(struct iwl_trans *trans);
61
62
/* Error handling */
63
int 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
*/
70
static inline u32 iwl_umac_prph(struct iwl_trans *trans, u32 ofs)
71
{
72
return ofs + trans->mac_cfg->umac_prph_offset;
73
}
74
75
static 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
81
static 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
86
static 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
93
static 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
99
static 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
108
109