drivers/net/wireless/zydas/zd1211rw/zd_chip.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/zydas/zd1211rw/zd_chip.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/zydas/zd1211rw/zd_chip.c- Extension
.c- Size
- 39519 bytes
- Lines
- 1548
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/errno.hlinux/slab.hzd_def.hzd_chip.hzd_mac.hzd_rf.h
Detected Declarations
struct aw_pt_bifunction Copyrightfunction zd_chip_clearfunction scnprint_mac_ouifunction scnprint_idfunction print_idfunction inc_addrfunction zd_ioread32v_lockedfunction _zd_iowrite32v_async_lockedfunction _zd_iowrite32v_lockedfunction zd_iowrite16a_lockedfunction zd_iowrite32a_lockedfunction zd_ioread16function zd_ioread32function zd_iowrite16function zd_iowrite32function zd_ioread32vfunction zd_iowrite32afunction read_podfunction zd_write_mac_addr_commonfunction zd_write_mac_addrfunction zd_write_bssidfunction zd_read_regdomainfunction read_valuesfunction read_pwr_cal_valuesfunction read_pwr_int_valuesfunction read_ofdm_cal_valuesfunction read_cal_int_tablesfunction zd_chip_lock_phy_regsfunction zd_chip_unlock_phy_regsfunction patch_cr157function bitfunction zd_rf_generic_patch_6mfunction zd1211_hw_reset_phyfunction zd1211b_hw_reset_phyfunction hw_reset_phyfunction zd1211_hw_init_hmacfunction zd1211b_hw_init_hmacfunction hw_init_hmacfunction get_aw_pt_bifunction set_aw_pt_bifunction set_beacon_intervalfunction zd_set_beacon_intervalfunction hw_initfunction fw_reg_addrfunction dump_crfunction test_initfunction dump_fw_registers
Annotated Snippet
struct aw_pt_bi {
u32 atim_wnd_period;
u32 pre_tbtt;
u32 beacon_interval;
};
static int get_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
{
int r;
static const zd_addr_t aw_pt_bi_addr[] =
{ CR_ATIM_WND_PERIOD, CR_PRE_TBTT, CR_BCN_INTERVAL };
u32 values[3];
r = zd_ioread32v_locked(chip, values, (const zd_addr_t *)aw_pt_bi_addr,
ARRAY_SIZE(aw_pt_bi_addr));
if (r) {
memset(s, 0, sizeof(*s));
return r;
}
s->atim_wnd_period = values[0];
s->pre_tbtt = values[1];
s->beacon_interval = values[2];
return 0;
}
static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
{
struct zd_ioreq32 reqs[3];
u16 b_interval = s->beacon_interval & 0xffff;
if (b_interval <= 5)
b_interval = 5;
if (s->pre_tbtt < 4 || s->pre_tbtt >= b_interval)
s->pre_tbtt = b_interval - 1;
if (s->atim_wnd_period >= s->pre_tbtt)
s->atim_wnd_period = s->pre_tbtt - 1;
reqs[0].addr = CR_ATIM_WND_PERIOD;
reqs[0].value = s->atim_wnd_period;
reqs[1].addr = CR_PRE_TBTT;
reqs[1].value = s->pre_tbtt;
reqs[2].addr = CR_BCN_INTERVAL;
reqs[2].value = (s->beacon_interval & ~0xffff) | b_interval;
return zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
}
static int set_beacon_interval(struct zd_chip *chip, u16 interval,
u8 dtim_period, int type)
{
int r;
struct aw_pt_bi s;
u32 b_interval, mode_flag;
ZD_ASSERT(mutex_is_locked(&chip->mutex));
if (interval > 0) {
switch (type) {
case NL80211_IFTYPE_ADHOC:
case NL80211_IFTYPE_MESH_POINT:
mode_flag = BCN_MODE_IBSS;
break;
case NL80211_IFTYPE_AP:
mode_flag = BCN_MODE_AP;
break;
default:
mode_flag = 0;
break;
}
} else {
dtim_period = 0;
mode_flag = 0;
}
b_interval = mode_flag | (dtim_period << 16) | interval;
r = zd_iowrite32_locked(chip, b_interval, CR_BCN_INTERVAL);
if (r)
return r;
r = get_aw_pt_bi(chip, &s);
if (r)
return r;
return set_aw_pt_bi(chip, &s);
}
int zd_set_beacon_interval(struct zd_chip *chip, u16 interval, u8 dtim_period,
int type)
{
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/errno.h`, `linux/slab.h`, `zd_def.h`, `zd_chip.h`, `zd_mac.h`, `zd_rf.h`.
- Detected declarations: `struct aw_pt_bi`, `function Copyright`, `function zd_chip_clear`, `function scnprint_mac_oui`, `function scnprint_id`, `function print_id`, `function inc_addr`, `function zd_ioread32v_locked`, `function _zd_iowrite32v_async_locked`, `function _zd_iowrite32v_locked`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.