drivers/net/wireless/realtek/rtw89/ser.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtw89/ser.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/realtek/rtw89/ser.c- Extension
.c- Size
- 20934 bytes
- Lines
- 859
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/devcoredump.hcam.hchan.hdebug.hfw.hmac.hps.hreg.hser.hutil.h
Detected Declarations
struct ser_msgstruct state_entstruct event_entstruct rtw89_ser_cd_bufferstruct __fw_backtrace_entrystruct __fw_backtrace_infoenum ser_evtenum ser_stateenum rtw89_ser_cd_typefunction rtw89_ser_cd_sendfunction rtw89_ser_cd_freefunction ser_state_runfunction ser_state_gotofunction rtw89_ser_hdl_workfunction ser_send_msgfunction rtw89_ser_alarm_workfunction ser_set_alarmfunction ser_del_alarmfunction drv_stop_txfunction drv_stop_rxfunction drv_trx_resetfunction drv_resume_txfunction drv_resume_rxfunction ser_reset_viffunction rtw89_vif_for_each_linkfunction ser_sta_deinit_cam_iterfunction rtw89_sta_for_each_linkfunction ser_deinit_camfunction ser_reset_mac_bindingfunction hal_enable_dmafunction hal_stop_dmafunction hal_send_post_m0_eventfunction hal_send_m2_eventfunction hal_send_m4_eventfunction hal_enable_err_imrfunction ser_idle_st_hdlfunction ser_l1_reset_pre_st_hdlfunction ser_reset_trx_st_hdlfunction ser_do_hci_st_hdlfunction ser_mac_mem_dumpfunction rtw89_ser_fw_rsvd_ple_dumpfunction convert_addr_from_wcpufunction rtw89_ser_fw_backtrace_dumpfunction ser_l2_reset_st_pre_hdlfunction ser_l2_reset_st_hdlfunction rtw89_ser_initfunction rtw89_ser_deinitfunction rtw89_ser_recfg_done
Annotated Snippet
struct ser_msg {
struct list_head list;
u8 event;
};
struct state_ent {
u8 state;
char *name;
void (*st_func)(struct rtw89_ser *ser, u8 event);
};
struct event_ent {
u8 event;
char *name;
};
static char *ser_ev_name(struct rtw89_ser *ser, u8 event)
{
if (event < SER_EV_MAXX)
return ser->ev_tbl[event].name;
return "err_ev_name";
}
static char *ser_st_name(struct rtw89_ser *ser)
{
if (ser->state < SER_ST_MAX_ST)
return ser->st_tbl[ser->state].name;
return "err_st_name";
}
#define RTW89_DEF_SER_CD_TYPE(_name, _type, _size) \
struct ser_cd_ ## _name { \
u32 type; \
u32 type_size; \
u64 padding; \
u8 data[_size]; \
} __packed; \
static void ser_cd_ ## _name ## _init(struct ser_cd_ ## _name *p) \
{ \
p->type = _type; \
p->type_size = sizeof(p->data); \
p->padding = 0x0123456789abcdef; \
}
enum rtw89_ser_cd_type {
RTW89_SER_CD_FW_RSVD_PLE = 0,
RTW89_SER_CD_FW_BACKTRACE = 1,
};
RTW89_DEF_SER_CD_TYPE(fw_rsvd_ple,
RTW89_SER_CD_FW_RSVD_PLE,
RTW89_FW_RSVD_PLE_SIZE);
RTW89_DEF_SER_CD_TYPE(fw_backtrace,
RTW89_SER_CD_FW_BACKTRACE,
RTW89_FW_BACKTRACE_MAX_SIZE);
struct rtw89_ser_cd_buffer {
struct ser_cd_fw_rsvd_ple fwple;
struct ser_cd_fw_backtrace fwbt;
} __packed;
static struct rtw89_ser_cd_buffer *rtw89_ser_cd_prep(struct rtw89_dev *rtwdev)
{
struct rtw89_ser_cd_buffer *buf;
buf = vzalloc(sizeof(*buf));
if (!buf)
return NULL;
ser_cd_fw_rsvd_ple_init(&buf->fwple);
ser_cd_fw_backtrace_init(&buf->fwbt);
return buf;
}
static void rtw89_ser_cd_send(struct rtw89_dev *rtwdev,
struct rtw89_ser_cd_buffer *buf)
{
rtw89_debug(rtwdev, RTW89_DBG_SER, "SER sends core dump\n");
/* After calling dev_coredump, buf's lifetime is supposed to be
* handled by the device coredump framework. Note that a new dump
* will be discarded if a previous one hasn't been released by
* framework yet.
*/
dev_coredumpv(rtwdev->dev, buf, sizeof(*buf), GFP_KERNEL);
}
Annotation
- Immediate include surface: `linux/devcoredump.h`, `cam.h`, `chan.h`, `debug.h`, `fw.h`, `mac.h`, `ps.h`, `reg.h`.
- Detected declarations: `struct ser_msg`, `struct state_ent`, `struct event_ent`, `struct rtw89_ser_cd_buffer`, `struct __fw_backtrace_entry`, `struct __fw_backtrace_info`, `enum ser_evt`, `enum ser_state`, `enum rtw89_ser_cd_type`, `function rtw89_ser_cd_send`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration 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.