int8 mrf_if_tx_queue(I_F i_f, uint8 bnum ){ const MRF_IF *mif = mrf_if_ptr(i_f); MRF_BUFF_STATE *mbst = _mrf_buff_state(bnum); BuffQueue *qp = mif->txqueue; //mrf_debug(5,"mrf_if_tx_queue entry\n"); if ( bnum >= _MRF_BUFFS) return -2; //mrf_debug(5,"mrf_if_tx_queue 1\n"); if (qp->push(bnum) == 0) { //_sys_ifs[i_f].status->state = MRF_ST_TXQ; mbst->owner = i_f; mbst->tx_timer = mif->type->tx_del; // FIXME shouldn't need any of this mbst->state = TXQUEUE; mbst->retry_count = 0; mrf_tick_enable(); mrf_debug(5,"mrf_if_tx_queue OK i_f %d buff %d retry_count %d qip %d qop %d items %d\n", i_f,bnum,mbst->retry_count,qp->get_qip(),qp->get_qop(),qp->items()); return 0; } else { // fall through if no space in queue mrf_if_ptr(i_f)->status->stats.tx_overruns++; return -1; } }
const char * mrf_buff_state_name(uint8 bnum){ MRF_BUFF_STATE *bst = _mrf_buff_state(bnum); if (bst == NULL) return illegal_state_warning; else return bstnames[bst->state]; }
void _mrf_buff_print(){ int i; mrf_debug("_mrf_buff_print warning is %s\n",illegal_state_warning); mrf_debug("free? %s\n",mrf_buff_state_name(0)); for ( i = 0 ; i < _MRF_BUFFS ; i++){ MRF_BUFF_STATE *bst = _mrf_buff_state(i); mrf_debug("buff %d state %d (%s) owner %d\n",i,bst->state,mrf_buff_state_name(i),_mrf_buffst[i].owner); } }