pktq
struct list_head *pktq)
return target->dev->ar->htc_ops->add_rxbuf_multiple(target, pktq);
struct list_head *pktq);
struct sk_buff_head *pktq, uint totlen)
addr, pktq->qlen);
if (pktq->qlen == 1)
__skb_peek(pktq));
skb_queue_walk(pktq, skb) {
addr, pktq);
struct sk_buff_head *pktq)
brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
if (pktq->qlen == 1 || !sdiodev->sg_support) {
skb_queue_walk(pktq, skb) {
addr, pktq);
struct pktq * (*gettxq)(struct device *dev);
struct pktq *brcmf_bus_gettxq(struct brcmf_bus *bus)
struct pktq *pq;
struct pktq psq;
static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
struct pktq *txq;
brcmf_fws_flow_control_check(struct brcmf_fws_info *fws, struct pktq *pq,
struct sk_buff_head *pktq,
lastfrm = skb_queue_is_last(pktq, pkt);
__skb_queue_after(pktq, pkt, pkt_pad);
brcmf_sdio_txpkt_prep(struct brcmf_sdio *bus, struct sk_buff_head *pktq,
skb_queue_walk(pktq, pkt_next) {
hd_info.lastfrm = skb_queue_is_last(pktq, pkt_next);
if (bus->txglom && pktq->qlen > 1) {
ret = brcmf_sdio_txpkt_prep_sg(bus, pktq,
brcmf_sdio_update_hwhdr(__skb_peek(pktq)->data, total_len);
brcmf_sdio_txpkt_postp(struct brcmf_sdio *bus, struct sk_buff_head *pktq)
skb_queue_walk_safe(pktq, pkt_next, tmp) {
__skb_unlink(pkt_next, pktq);
static int brcmf_sdio_txpkt(struct brcmf_sdio *bus, struct sk_buff_head *pktq,
ret = brcmf_sdio_txpkt_prep(bus, pktq, chan);
ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
brcmf_sdio_txpkt_postp(bus, pktq);
bus->tx_seq = (bus->tx_seq + pktq->qlen) % SDPCM_SEQ_WRAP;
skb_queue_walk_safe(pktq, pkt_next, tmp) {
__skb_unlink(pkt_next, pktq);
struct sk_buff_head pktq;
__skb_queue_head_init(&pktq);
__skb_queue_tail(&pktq, pkt);
ret = brcmf_sdio_txpkt(bus, &pktq, SDPCM_DATA_CHANNEL);
static struct pktq *brcmf_sdio_bus_gettxq(struct device *dev)
static bool brcmf_sdio_prec_enq(struct pktq *q, struct sk_buff *pkt, int prec)
struct pktq txq; /* Queue length used for flow-control */
struct sk_buff_head *pktq);
struct sk_buff_head *pktq, uint totlen);
struct sk_buff *brcmu_pktq_pdeq_match(struct pktq *pq, int prec,
struct sk_buff *brcmu_pktq_pdeq_tail(struct pktq *pq, int prec)
brcmu_pktq_pflush(struct pktq *pq, int prec, bool dir,
void brcmu_pktq_flush(struct pktq *pq, bool dir,
void brcmu_pktq_init(struct pktq *pq, int num_prec, int max_len)
offsetof(struct pktq, q) + (sizeof(struct pktq_prec) * num_prec));
struct sk_buff *brcmu_pktq_peek_tail(struct pktq *pq, int *prec_out)
int brcmu_pktq_mlen(struct pktq *pq, uint prec_bmp)
struct sk_buff *brcmu_pktq_mdeq(struct pktq *pq, uint prec_bmp,
struct sk_buff *brcmu_pktq_penq(struct pktq *pq, int prec,
struct sk_buff *brcmu_pktq_penq_head(struct pktq *pq, int prec,
struct sk_buff *brcmu_pktq_pdeq(struct pktq *pq, int prec)
static inline struct sk_buff *pktq_ppeek_tail(struct pktq *pq, int prec)
struct sk_buff *brcmu_pktq_penq(struct pktq *pq, int prec, struct sk_buff *p);
struct sk_buff *brcmu_pktq_penq_head(struct pktq *pq, int prec,
struct sk_buff *brcmu_pktq_pdeq(struct pktq *pq, int prec);
struct sk_buff *brcmu_pktq_pdeq_tail(struct pktq *pq, int prec);
struct sk_buff *brcmu_pktq_pdeq_match(struct pktq *pq, int prec,
void brcmu_pktq_pflush(struct pktq *pq, int prec, bool dir,
int brcmu_pktq_mlen(struct pktq *pq, uint prec_bmp);
struct sk_buff *brcmu_pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out);
static inline int pktq_len(struct pktq *pq)
static inline int pktq_max(struct pktq *pq)
static inline int pktq_avail(struct pktq *pq)
static inline bool pktq_full(struct pktq *pq)
static inline bool pktq_empty(struct pktq *pq)
void brcmu_pktq_init(struct pktq *pq, int num_prec, int max_len);
struct sk_buff *brcmu_pktq_peek_tail(struct pktq *pq, int *prec_out);
void brcmu_pktq_flush(struct pktq *pq, bool dir,
static inline int pktq_plen(struct pktq *pq, int prec)
static inline int pktq_pavail(struct pktq *pq, int prec)
static inline bool pktq_pfull(struct pktq *pq, int prec)
static inline bool pktq_pempty(struct pktq *pq, int prec)
static inline struct sk_buff *pktq_ppeek(struct pktq *pq, int prec)