/** * i_idx番目のデスクリプタにバッファをセット */ static void setRxDesc(void* rx_buf, int idx) { enet_bd_struct_t *start = (enet_bd_struct_t *)_driver.rx_desc_start_addr; /* Setup descriptor and clear statuses */ enet_hal_init_rxbds(start + idx, (uint8_t*)rx_buf,idx ==(NUM_OF_RX_RING - 1)); enet_hal_active_rxbd(BOARD_DEBUG_ENET_INSTANCE); }
/** \brief Queues a pbuf into the RX descriptor list * * \param[in] k64f_enet Pointer to the drvier data structure * \param[in] p Pointer to pbuf to queue * \param[in] bidx Index to queue into */ static void k64f_rxqueue_pbuf(struct k64f_enetdata *k64f_enet, struct pbuf *p, int bidx) { enet_bd_struct_t *start = (enet_bd_struct_t *)k64f_enet->rx_desc_start_addr; int idx; /* Get next free descriptor index */ if (bidx == RX_PBUF_AUTO_INDEX) idx = k64f_enet->rx_fill_index; else idx = bidx; /* Setup descriptor and clear statuses */ enet_hal_init_rxbds(start + idx, (uint8_t*)p->payload, idx == ENET_RX_RING_LEN - 1); /* Save pbuf pointer for push to network layer later */ k64f_enet->rxb[idx] = p; /* Wrap at end of descriptor list */ idx = (idx + 1) % ENET_RX_RING_LEN; /* Queue descriptor(s) */ k64f_enet->rx_free_descs -= 1; if (bidx == RX_PBUF_AUTO_INDEX) k64f_enet->rx_fill_index = idx; enet_hal_active_rxbd(BOARD_DEBUG_ENET_INSTANCE_ADDR); LWIP_DEBUGF(UDP_LPC_EMAC | LWIP_DBG_TRACE, ("k64f_rxqueue_pbuf: pbuf packet queued: %p (free desc=%d)\n", p, k64f_enet->rx_free_descs)); }