drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c
Source file repositories/reference/linux-study-clean/drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c- Extension
.c- Size
- 6787 bytes
- Lines
- 328
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/netdevice.hlinux/module.hbrcmu_utils.h
Detected Declarations
function brcmu_pkt_buf_free_skbfunction brcmu_pktq_pdeqfunction brcmu_pktq_pflushfunction brcmu_pktq_flushfunction brcmu_pktq_initfunction brcmu_pktq_mlenfunction brcmu_prpktfunction brcmu_dbg_hex_dumpexport brcmu_pkt_buf_get_skbexport brcmu_pkt_buf_free_skbexport brcmu_pktq_penqexport brcmu_pktq_penq_headexport brcmu_pktq_pdeqexport brcmu_pktq_pdeq_matchexport brcmu_pktq_pdeq_tailexport brcmu_pktq_pflushexport brcmu_pktq_flushexport brcmu_pktq_initexport brcmu_pktq_peek_tailexport brcmu_pktq_mlenexport brcmu_pktq_mdeqexport brcmu_boardrev_strexport brcmu_dotrev_strexport brcmu_prpktexport brcmu_dbg_hex_dump
Annotated Snippet
if (match_fn == NULL || match_fn(p, arg)) {
skb_unlink(p, q);
pq->len--;
return p;
}
}
return NULL;
}
EXPORT_SYMBOL(brcmu_pktq_pdeq_match);
struct sk_buff *brcmu_pktq_pdeq_tail(struct pktq *pq, int prec)
{
struct sk_buff_head *q;
struct sk_buff *p;
q = &pq->q[prec].skblist;
p = skb_dequeue_tail(q);
if (p == NULL)
return NULL;
pq->len--;
return p;
}
EXPORT_SYMBOL(brcmu_pktq_pdeq_tail);
void
brcmu_pktq_pflush(struct pktq *pq, int prec, bool dir,
bool (*fn)(struct sk_buff *, void *), void *arg)
{
struct sk_buff_head *q;
struct sk_buff *p, *next;
q = &pq->q[prec].skblist;
skb_queue_walk_safe(q, p, next) {
if (fn == NULL || (*fn) (p, arg)) {
skb_unlink(p, q);
brcmu_pkt_buf_free_skb(p);
pq->len--;
}
}
}
EXPORT_SYMBOL(brcmu_pktq_pflush);
void brcmu_pktq_flush(struct pktq *pq, bool dir,
bool (*fn)(struct sk_buff *, void *), void *arg)
{
int prec;
for (prec = 0; prec < pq->num_prec; prec++)
brcmu_pktq_pflush(pq, prec, dir, fn, arg);
}
EXPORT_SYMBOL(brcmu_pktq_flush);
void brcmu_pktq_init(struct pktq *pq, int num_prec, int max_len)
{
int prec;
/* pq is variable size; only zero out what's requested */
memset(pq, 0,
offsetof(struct pktq, q) + (sizeof(struct pktq_prec) * num_prec));
pq->num_prec = (u16) num_prec;
pq->max = (u16) max_len;
for (prec = 0; prec < num_prec; prec++) {
pq->q[prec].max = pq->max;
skb_queue_head_init(&pq->q[prec].skblist);
}
}
EXPORT_SYMBOL(brcmu_pktq_init);
struct sk_buff *brcmu_pktq_peek_tail(struct pktq *pq, int *prec_out)
{
int prec;
if (pktq_empty(pq))
return NULL;
for (prec = 0; prec < pq->hi_prec; prec++)
if (!skb_queue_empty(&pq->q[prec].skblist))
break;
if (prec_out)
*prec_out = prec;
return skb_peek_tail(&pq->q[prec].skblist);
}
EXPORT_SYMBOL(brcmu_pktq_peek_tail);
/* Return sum of lengths of a specific set of precedences */
Annotation
- Immediate include surface: `linux/netdevice.h`, `linux/module.h`, `brcmu_utils.h`.
- Detected declarations: `function brcmu_pkt_buf_free_skb`, `function brcmu_pktq_pdeq`, `function brcmu_pktq_pflush`, `function brcmu_pktq_flush`, `function brcmu_pktq_init`, `function brcmu_pktq_mlen`, `function brcmu_prpkt`, `function brcmu_dbg_hex_dump`, `export brcmu_pkt_buf_get_skb`, `export brcmu_pkt_buf_free_skb`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: integration implementation candidate.
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.