Exemplo n.º 1
0
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;
  }
}
Exemplo n.º 2
0
void mrf_if_print_info(I_F i_f){
  const MRF_IF *ifp;
  IF_STATUS *ifs = mrf_if_ptr(i_f)->status;
  int i = (int)i_f;
  ifp = mrf_if_ptr((I_F)i);
  mrf_debug(5,"I_F %d state %s waiting_resp %d txq_da %d ackq da %d timer %d resp_timer %d\n",i,
            mrf_if_state_name(i_f),ifs->waiting_resp,
            ifp->txqueue->data_avail(),ifp->ackqueue->items(),
            ifs->timer,ifs->resp_timer);

}
Exemplo n.º 3
0
int mrf_if_transmitting(I_F i_f){
  IF_STATUS *ifs = mrf_if_ptr(i_f)->status;
  if ((ifs->state==TX_BUFF) || (ifs->state==TX_ACK))
    return 1;
  else
    return 0;
}
Exemplo n.º 4
0
int mrf_if_recieving(I_F i_f){
  IF_STATUS *ifs = mrf_if_ptr(i_f)->status;
  if (mrf_if_transmitting(i_f)==0)
    return 1;
  else
    return 0;
}
Exemplo n.º 5
0
const char * mrf_if_state_name(I_F i_f){
  const MRF_IF *mif = mrf_if_ptr(i_f);
  if (mif == NULL)
    return illegal_if_warning;
  else
    return ifstnames[mif->status->state];
}
Exemplo n.º 6
0
// this is where OS processes buffer
int mrf_buff_loaded(uint8 bnum){
  MRF_IF *ifp;
  if (bnum <  _MRF_BUFFS){
    mrf_debug("mrf_buff_loaded bnum entry  %u owner %u\n",bnum, _mrf_buffst[bnum].owner);
    ifp = mrf_if_ptr( _mrf_buffst[bnum].owner);
    printf("ifp = %p\n",ifp);
    ifp->status->stats.rx_pkts += 1;
    _mrf_buffst[bnum].state = LOADED;
    //_mrf_buff_print();
    _mrf_process_buff(bnum);
    mrf_debug("mrf_buff_loaded exit\n");
    //_mrf_buff_print();

    return 0;
  } else {
    return -1;
  }
}
Exemplo n.º 7
0
void mrf_if_init(){
  unsigned int i,j;
  uint8 *dptr;
  //mrf_debug(5,"mrf_if_init entry NUM_INTERFACES %d \n",NUM_INTERFACES);
  for (i = 0 ; i < NUM_INTERFACES ; i++){
    //mrf_debug(5,"interface %d\n",i);
    const MRF_IF *mif = mrf_if_ptr((I_F)i);
    // rough zeroing of status data including stats
    dptr = (uint8 *)mif->status;
    //mrf_debug(5,"dptr = %p sizeof IF_STATUS %lu\n",dptr,sizeof(IF_STATUS));
    for ( j = 0 ; j < sizeof(IF_STATUS) ; j++)
      dptr[j] = 0;
    //queue_init(&(mif->status->txqueue));
    *(mif->txqueue) = BuffQueue();
    mif->status->state = IDLE;
#ifdef MRF_ARCH_lnx
    *(mif->fd) =  (*(mif->type->funcs.init))((I_F)i); //needed for epoll
#else
    (*(mif->type->funcs.init))((I_F)i);
#endif

  }

}
Exemplo n.º 8
0
void mrf_if_tx_done(I_F i_f){
  const MRF_IF *mif = mrf_if_ptr(i_f);

  mif->status->tx_complete = 1;
  //mrf_debug(5,"mrf_if_tx_done I_F %d state %d \n",i_f,mif->status->state);
}