Lines Matching defs:bf

3114 	struct ath_buf *bf;
3119 bf = TAILQ_FIRST(&sc->sc_txbuf_mgmt);
3121 bf = TAILQ_FIRST(&sc->sc_txbuf);
3123 if (bf == NULL) {
3126 if (bf->bf_flags & ATH_BUF_BUSY) {
3128 bf = NULL;
3132 if (bf != NULL && (bf->bf_flags & ATH_BUF_BUSY) == 0) {
3134 TAILQ_REMOVE(&sc->sc_txbuf_mgmt, bf, bf_list);
3136 TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list);
3152 bf = NULL;
3154 if (bf == NULL) {
3164 bf->bf_flags = 0;
3166 bf->bf_flags |= ATH_BUF_MGMT;
3168 bf->bf_flags &= (~ATH_BUF_MGMT);
3170 /* Valid bf here; clear some basic fields */
3171 bf->bf_next = NULL; /* XXX just to be sure */
3172 bf->bf_last = NULL; /* XXX again, just to be sure */
3173 bf->bf_comp = NULL; /* XXX again, just to be sure */
3174 bzero(&bf->bf_state, sizeof(bf->bf_state));
3180 bf->bf_descid = sc->sc_txbuf_descid;
3184 return bf;
3202 ath_buf_clone(struct ath_softc *sc, struct ath_buf *bf)
3207 (bf->bf_flags & ATH_BUF_MGMT) ?
3214 tbf->bf_nseg = bf->bf_nseg;
3215 tbf->bf_flags = bf->bf_flags & ATH_BUF_FLAGS_CLONE;
3216 tbf->bf_status = bf->bf_status;
3217 tbf->bf_m = bf->bf_m;
3218 tbf->bf_node = bf->bf_node;
3219 KASSERT((bf->bf_node != NULL), ("%s: bf_node=NULL!", __func__));
3224 tbf->bf_comp = bf->bf_comp;
3235 if (bf->bf_m != NULL) {
3239 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
3241 bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
3244 bf->bf_m = NULL;
3245 bf->bf_node = NULL;
3248 memcpy(&tbf->bf_state, &bf->bf_state, sizeof(bf->bf_state));
3256 struct ath_buf *bf;
3259 bf = _ath_getbuf_locked(sc, btype);
3264 if (bf == NULL && btype == ATH_BUFTYPE_MGMT)
3265 bf = _ath_getbuf_locked(sc, ATH_BUFTYPE_NORMAL);
3267 if (bf == NULL) {
3271 return bf;
3286 struct ath_buf *bf;
3376 bf = ath_getbuf(sc, ATH_BUFTYPE_MGMT);
3378 bf = ath_getbuf(sc, ATH_BUFTYPE_NORMAL);
3380 if (bf == NULL) {
3440 struct ath_buf *fbf = bf;
3477 if (ath_tx_start(sc, ni, bf, m)) {
3481 bf->bf_m = NULL;
3482 bf->bf_node = NULL;
3484 ath_returnbuf_head(sc, bf);
3522 bf = TAILQ_FIRST(&frags);
3523 KASSERT(bf != NULL, ("no buf for txfrag"));
3524 TAILQ_REMOVE(&frags, bf, bf_list);
4181 struct ath_buf *bf)
4183 struct ieee80211_node *ni = bf->bf_node;
4195 pri = M_WME_GETAC(bf->bf_m);
4199 if ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)
4213 if (bf->bf_m->m_flags & M_FF)
4245 ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf, int fail)
4247 struct ath_tx_status *ts = &bf->bf_status.ds_txstat;
4253 st = ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) ?
4257 if (bf->bf_state.bfs_dobaw)
4259 "%s: bf %p: seqno %d: dobaw should've been cleared!\n",
4261 bf,
4262 SEQNO(bf->bf_state.bfs_seqno));
4264 if (bf->bf_next != NULL)
4266 "%s: bf %p: seqno %d: bf_next not NULL!\n",
4268 bf,
4269 SEQNO(bf->bf_state.bfs_seqno));
4286 if (bf->bf_node) {
4288 ath_tx_update_tim(sc, bf->bf_node, 0);
4298 ath_tx_freebuf(sc, bf, st);
4337 * bf pointer should be treated as invalid after this function is called.
4341 struct ath_tx_status *ts, struct ath_buf *bf)
4343 struct ieee80211_node *ni = bf->bf_node;
4351 ath_tx_update_stats(sc, ts, bf);
4362 if (bf->bf_comp == NULL) {
4364 (bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) {
4373 bf->bf_state.bfs_rc, ts,
4374 bf->bf_state.bfs_pktlen,
4375 bf->bf_state.bfs_pktlen,
4379 ath_tx_default_comp(sc, bf, 0);
4381 bf->bf_comp(sc, bf, 0);
4393 struct ath_buf *bf;
4419 bf = TAILQ_FIRST(&txq->axq_q);
4420 if (bf == NULL) {
4424 ds = bf->bf_lastds; /* XXX must be setup correctly! */
4425 ts = &bf->bf_status.ds_txstat;
4430 ath_printtxbuf(sc, bf, txq->axq_qnum, 0,
4433 ath_printtxbuf(sc, bf, txq->axq_qnum, 0,
4447 "ath_tx_processq: txq=%u, bf=%p ds=%p, HAL_EINPROGRESS",
4448 txq->axq_qnum, bf, ds);
4452 ATH_TXQ_REMOVE(txq, bf, bf_list);
4457 if (txq->axq_qnum != bf->bf_state.bfs_tx_queue) {
4459 "%s: TXQ=%d: bf=%p, bfs_tx_queue=%d\n",
4462 bf,
4463 bf->bf_state.bfs_tx_queue);
4465 if (txq->axq_qnum != bf->bf_last->bf_state.bfs_tx_queue) {
4470 bf->bf_last,
4471 bf->bf_last->bf_state.bfs_tx_queue);
4485 bf->bf_last->bf_flags |= ATH_BUF_BUSY;
4489 bf->bf_last->bf_flags |= ATH_BUF_BUSY;
4491 if (bf->bf_state.bfs_aggr)
4494 ni = bf->bf_node;
4497 "ath_tx_processq: txq=%u, bf=%p, ds=%p, ni=%p, ts_status=0x%08x",
4498 txq->axq_qnum, bf, ds, ni, ts->ts_status);
4505 ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0)) {
4518 ath_tx_process_buf_completion(sc, txq, ts, bf);
4520 /* XXX at this point, bf and ni may be totally invalid */
4740 ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf)
4745 if (bf->bf_flags & ATH_BUF_MGMT)
4746 TAILQ_INSERT_TAIL(&sc->sc_txbuf_mgmt, bf, bf_list);
4748 TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list);
4761 ath_returnbuf_head(struct ath_softc *sc, struct ath_buf *bf)
4766 if (bf->bf_flags & ATH_BUF_MGMT)
4767 TAILQ_INSERT_HEAD(&sc->sc_txbuf_mgmt, bf, bf_list);
4769 TAILQ_INSERT_HEAD(&sc->sc_txbuf, bf, bf_list);
4807 ath_txq_addholdingbuf(struct ath_softc *sc, struct ath_buf *bf)
4811 txq = &sc->sc_txq[bf->bf_state.bfs_tx_queue];
4819 if (bf->bf_state.bfs_tx_queue > HAL_NUM_TX_QUEUES) {
4820 device_printf(sc->sc_dev, "%s: bf=%p: invalid tx queue (%d)\n",
4822 bf,
4823 bf->bf_state.bfs_tx_queue);
4824 bf->bf_flags &= ~ATH_BUF_BUSY;
4825 ath_returnbuf_tail(sc, bf);
4829 txq->axq_holdingbf = bf;
4850 ath_freebuf(struct ath_softc *sc, struct ath_buf *bf)
4854 txq = &sc->sc_txq[bf->bf_state.bfs_tx_queue];
4856 KASSERT((bf->bf_node == NULL), ("%s: bf->bf_node != NULL\n", __func__));
4857 KASSERT((bf->bf_m == NULL), ("%s: bf->bf_m != NULL\n", __func__));
4862 if (bf->bf_flags & ATH_BUF_BUSY) {
4864 ath_txq_addholdingbuf(sc, bf);
4873 ath_returnbuf_tail(sc, bf);
4884 ath_tx_freebuf(struct ath_softc *sc, struct ath_buf *bf, int status)
4886 struct ieee80211_node *ni = bf->bf_node;
4887 struct mbuf *m0 = bf->bf_m;
4894 if (bf->bf_m != NULL) {
4895 bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
4897 bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
4900 bf->bf_node = NULL;
4901 bf->bf_m = NULL;
4904 ath_freebuf(sc, bf);
4913 struct ath_buf *bf;
4921 bf = TAILQ_FIRST(&txq->fifo.axq_q);
4922 if (bf != NULL) {
4927 if (bf->bf_flags & ATH_BUF_FIFOEND) {
4937 ATH_TXQ_REMOVE(&txq->fifo, bf, bf_list);
4938 return (bf);
4956 bf = TAILQ_FIRST(&txq->axq_q);
4957 if (bf == NULL) {
4961 ATH_TXQ_REMOVE(txq, bf, bf_list);
4962 return (bf);
4971 struct ath_buf *bf;
4980 bf = ath_tx_draintxq_get_one(sc, txq);
4981 if (bf == NULL) {
4985 if (bf->bf_state.bfs_aggr)
5000 bf->bf_lastds,
5001 &bf->bf_status.ds_txstat) == HAL_OK);
5003 ath_printtxbuf(sc, bf, txq->axq_qnum, ix, status);
5004 ieee80211_dump_pkt(ic, mtod(bf->bf_m, const uint8_t *),
5005 bf->bf_m->m_len, 0, -1);
5018 bf->bf_flags &= ~ATH_BUF_BUSY;
5019 if (bf->bf_comp)
5020 bf->bf_comp(sc, bf, 1);
5022 ath_tx_default_comp(sc, bf, 1);
5108 struct ath_buf *bf;
5116 TAILQ_FOREACH(bf, &txq->axq_q, bf_list) {
5117 ath_printtxbuf(sc, bf, txq->axq_qnum, i,
5118 ath_hal_txprocdesc(ah, bf->bf_lastds,
5119 &bf->bf_status.ds_txstat) == HAL_OK);
5182 struct ath_buf *bf = TAILQ_FIRST(&sc->sc_bbuf);
5183 if (bf != NULL && bf->bf_m != NULL) {
5184 ath_printtxbuf(sc, bf, sc->sc_bhalq, 0,
5185 ath_hal_txprocdesc(ah, bf->bf_lastds,
5186 &bf->bf_status.ds_txstat) == HAL_OK);
5188 mtod(bf->bf_m, const uint8_t *), bf->bf_m->m_len,