Lines Matching defs:bf
3153 struct ath_buf *bf;
3158 bf = TAILQ_FIRST(&sc->sc_txbuf_mgmt);
3160 bf = TAILQ_FIRST(&sc->sc_txbuf);
3162 if (bf == NULL) {
3165 if (bf->bf_flags & ATH_BUF_BUSY) {
3167 bf = NULL;
3171 if (bf != NULL && (bf->bf_flags & ATH_BUF_BUSY) == 0) {
3173 TAILQ_REMOVE(&sc->sc_txbuf_mgmt, bf, bf_list);
3175 TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list);
3191 bf = NULL;
3193 if (bf == NULL) {
3203 bf->bf_flags = 0;
3205 bf->bf_flags |= ATH_BUF_MGMT;
3207 bf->bf_flags &= (~ATH_BUF_MGMT);
3209 /* Valid bf here; clear some basic fields */
3210 bf->bf_next = NULL; /* XXX just to be sure */
3211 bf->bf_last = NULL; /* XXX again, just to be sure */
3212 bf->bf_comp = NULL; /* XXX again, just to be sure */
3213 bzero(&bf->bf_state, sizeof(bf->bf_state));
3219 bf->bf_descid = sc->sc_txbuf_descid;
3223 return bf;
3241 ath_buf_clone(struct ath_softc *sc, struct ath_buf *bf)
3246 (bf->bf_flags & ATH_BUF_MGMT) ?
3253 tbf->bf_nseg = bf->bf_nseg;
3254 tbf->bf_flags = bf->bf_flags & ATH_BUF_FLAGS_CLONE;
3255 tbf->bf_status = bf->bf_status;
3256 tbf->bf_m = bf->bf_m;
3257 tbf->bf_node = bf->bf_node;
3258 KASSERT((bf->bf_node != NULL), ("%s: bf_node=NULL!", __func__));
3263 tbf->bf_comp = bf->bf_comp;
3274 if (bf->bf_m != NULL) {
3278 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
3280 bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
3283 bf->bf_m = NULL;
3284 bf->bf_node = NULL;
3287 memcpy(&tbf->bf_state, &bf->bf_state, sizeof(bf->bf_state));
3295 struct ath_buf *bf;
3298 bf = _ath_getbuf_locked(sc, btype);
3303 if (bf == NULL && btype == ATH_BUFTYPE_MGMT)
3304 bf = _ath_getbuf_locked(sc, ATH_BUFTYPE_NORMAL);
3306 if (bf == NULL) {
3310 return bf;
3325 struct ath_buf *bf;
3415 bf = ath_getbuf(sc, ATH_BUFTYPE_MGMT);
3417 bf = ath_getbuf(sc, ATH_BUFTYPE_NORMAL);
3419 if (bf == NULL) {
3479 struct ath_buf *fbf = bf;
3516 if (ath_tx_start(sc, ni, bf, m)) {
3520 bf->bf_m = NULL;
3521 bf->bf_node = NULL;
3523 ath_returnbuf_head(sc, bf);
3561 bf = TAILQ_FIRST(&frags);
3562 KASSERT(bf != NULL, ("no buf for txfrag"));
3563 TAILQ_REMOVE(&frags, bf, bf_list);
4217 struct ath_buf *bf)
4219 struct ieee80211_node *ni = bf->bf_node;
4236 pri = M_WME_GETAC(bf->bf_m);
4240 if ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)
4254 if (bf->bf_m->m_flags & M_FF)
4286 ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf, int fail)
4288 struct ath_tx_status *ts = &bf->bf_status.ds_txstat;
4294 st = ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) ?
4298 if (bf->bf_state.bfs_dobaw)
4300 "%s: bf %p: seqno %d: dobaw should've been cleared!\n",
4302 bf,
4303 SEQNO(bf->bf_state.bfs_seqno));
4305 if (bf->bf_next != NULL)
4307 "%s: bf %p: seqno %d: bf_next not NULL!\n",
4309 bf,
4310 SEQNO(bf->bf_state.bfs_seqno));
4327 if (bf->bf_node) {
4329 ath_tx_update_tim(sc, bf->bf_node, 0);
4339 ath_tx_freebuf(sc, bf, st);
4378 * bf pointer should be treated as invalid after this function is called.
4382 struct ath_tx_status *ts, struct ath_buf *bf)
4384 struct ieee80211_node *ni = bf->bf_node;
4392 ath_tx_update_stats(sc, ts, bf);
4403 if (bf->bf_comp == NULL) {
4405 (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) {
4414 bf->bf_state.bfs_rc, ts,
4415 bf->bf_state.bfs_pktlen,
4416 bf->bf_state.bfs_pktlen,
4420 ath_tx_default_comp(sc, bf, 0);
4422 bf->bf_comp(sc, bf, 0);
4434 struct ath_buf *bf;
4460 bf = TAILQ_FIRST(&txq->axq_q);
4461 if (bf == NULL) {
4465 ds = bf->bf_lastds; /* XXX must be setup correctly! */
4466 ts = &bf->bf_status.ds_txstat;
4471 ath_printtxbuf(sc, bf, txq->axq_qnum, 0,
4474 ath_printtxbuf(sc, bf, txq->axq_qnum, 0,
4488 "ath_tx_processq: txq=%u, bf=%p ds=%p, HAL_EINPROGRESS",
4489 txq->axq_qnum, bf, ds);
4493 ATH_TXQ_REMOVE(txq, bf, bf_list);
4498 if (txq->axq_qnum != bf->bf_state.bfs_tx_queue) {
4500 "%s: TXQ=%d: bf=%p, bfs_tx_queue=%d\n",
4503 bf,
4504 bf->bf_state.bfs_tx_queue);
4506 if (txq->axq_qnum != bf->bf_last->bf_state.bfs_tx_queue) {
4511 bf->bf_last,
4512 bf->bf_last->bf_state.bfs_tx_queue);
4526 bf->bf_last->bf_flags |= ATH_BUF_BUSY;
4530 bf->bf_last->bf_flags |= ATH_BUF_BUSY;
4532 if (bf->bf_state.bfs_aggr)
4535 ni = bf->bf_node;
4538 "ath_tx_processq: txq=%u, bf=%p, ds=%p, ni=%p, ts_status=0x%08x",
4539 txq->axq_qnum, bf, ds, ni, ts->ts_status);
4546 ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)) {
4559 ath_tx_process_buf_completion(sc, txq, ts, bf);
4561 /* XXX at this point, bf and ni may be totally invalid */
4781 ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf)
4786 if (bf->bf_flags & ATH_BUF_MGMT)
4787 TAILQ_INSERT_TAIL(&sc->sc_txbuf_mgmt, bf, bf_list);
4789 TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
4802 ath_returnbuf_head(struct ath_softc *sc, struct ath_buf *bf)
4807 if (bf->bf_flags & ATH_BUF_MGMT)
4808 TAILQ_INSERT_HEAD(&sc->sc_txbuf_mgmt, bf, bf_list);
4810 TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
4848 ath_txq_addholdingbuf(struct ath_softc *sc, struct ath_buf *bf)
4852 txq = &sc->sc_txq[bf->bf_state.bfs_tx_queue];
4860 if (bf->bf_state.bfs_tx_queue > HAL_NUM_TX_QUEUES) {
4861 device_printf(sc->sc_dev, "%s: bf=%p: invalid tx queue (%d)\n",
4863 bf,
4864 bf->bf_state.bfs_tx_queue);
4865 bf->bf_flags &= ~ATH_BUF_BUSY;
4866 ath_returnbuf_tail(sc, bf);
4870 txq->axq_holdingbf = bf;
4891 ath_freebuf(struct ath_softc *sc, struct ath_buf *bf)
4895 txq = &sc->sc_txq[bf->bf_state.bfs_tx_queue];
4897 KASSERT((bf->bf_node == NULL), ("%s: bf->bf_node != NULL\n", __func__));
4898 KASSERT((bf->bf_m == NULL), ("%s: bf->bf_m != NULL\n", __func__));
4903 if (bf->bf_flags & ATH_BUF_BUSY) {
4905 ath_txq_addholdingbuf(sc, bf);
4914 ath_returnbuf_tail(sc, bf);
4925 ath_tx_freebuf(struct ath_softc *sc, struct ath_buf *bf, int status)
4927 struct ieee80211_node *ni = bf->bf_node;
4928 struct mbuf *m0 = bf->bf_m;
4935 if (bf->bf_m != NULL) {
4936 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
4938 bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
4941 bf->bf_node = NULL;
4942 bf->bf_m = NULL;
4945 ath_freebuf(sc, bf);
4954 struct ath_buf *bf;
4962 bf = TAILQ_FIRST(&txq->fifo.axq_q);
4963 if (bf != NULL) {
4968 if (bf->bf_flags & ATH_BUF_FIFOEND) {
4978 ATH_TXQ_REMOVE(&txq->fifo, bf, bf_list);
4979 return (bf);
4997 bf = TAILQ_FIRST(&txq->axq_q);
4998 if (bf == NULL) {
5002 ATH_TXQ_REMOVE(txq, bf, bf_list);
5003 return (bf);
5012 struct ath_buf *bf;
5021 bf = ath_tx_draintxq_get_one(sc, txq);
5022 if (bf == NULL) {
5026 if (bf->bf_state.bfs_aggr)
5041 bf->bf_lastds,
5042 &bf->bf_status.ds_txstat) == HAL_OK);
5044 ath_printtxbuf(sc, bf, txq->axq_qnum, ix, status);
5045 ieee80211_dump_pkt(ic, mtod(bf->bf_m, const uint8_t *),
5046 bf->bf_m->m_len, 0, -1);
5059 bf->bf_flags &= ~ATH_BUF_BUSY;
5060 if (bf->bf_comp)
5061 bf->bf_comp(sc, bf, 1);
5063 ath_tx_default_comp(sc, bf, 1);
5149 struct ath_buf *bf;
5157 TAILQ_FOREACH(bf, &txq->axq_q, bf_list) {
5158 ath_printtxbuf(sc, bf, txq->axq_qnum, i,
5159 ath_hal_txprocdesc(ah, bf->bf_lastds,
5160 &bf->bf_status.ds_txstat) == HAL_OK);
5223 struct ath_buf *bf = TAILQ_FIRST(&sc->sc_bbuf);
5224 if (bf != NULL && bf->bf_m != NULL) {
5225 ath_printtxbuf(sc, bf, sc->sc_bhalq, 0,
5226 ath_hal_txprocdesc(ah, bf->bf_lastds,
5227 &bf->bf_status.ds_txstat) == HAL_OK);
5229 mtod(bf->bf_m, const uint8_t *), bf->bf_m->m_len,