static void setTxDesc(int idx) { enet_bd_struct_t *start = (enet_bd_struct_t *)_driver.tx_desc_start_addr; /* Setup descriptor and clear statuses */ enet_hal_init_txbds(start + idx,idx ==(NUM_OF_RX_RING - 1)); enet_hal_active_txbd(BOARD_DEBUG_ENET_INSTANCE); }
/** \brief Sets up the TX descriptor ring buffers. * * This function sets up the descriptor list used for transmit packets. * * \param[in] netif Pointer to driver data structure * \returns ERR_MEM if out of memory, ERR_OK otherwise */ static err_t k64f_tx_setup(struct netif *netif, enet_txbd_config_t *txbdCfg) { struct k64f_enetdata *k64f_enet = netif->state; enet_dev_if_t *enetIfPtr = (enet_dev_if_t *)&enetDevIf[BOARD_DEBUG_ENET_INSTANCE]; uint8_t *txBdPtr; // Allocate TX descriptors txBdPtr = (uint8_t *)calloc(1, enet_hal_get_bd_size() * enetIfPtr->macCfgPtr->txBdNumber + ENET_BD_ALIGNMENT); if(!txBdPtr) return ERR_MEM; k64f_enet->tx_desc_start_addr = (uint8_t *)ENET_ALIGN((uint32_t)txBdPtr, ENET_BD_ALIGNMENT); k64f_enet->tx_consume_index = k64f_enet->tx_produce_index = 0; txbdCfg->txBdPtrAlign = k64f_enet->tx_desc_start_addr; txbdCfg->txBufferNum = enetIfPtr->macCfgPtr->txBdNumber; txbdCfg->txBufferSizeAlign = ENET_ALIGN(enetIfPtr->maxFrameSize, ENET_TX_BUFFER_ALIGNMENT); // Make the TX descriptor ring circular enet_hal_init_txbds(k64f_enet->tx_desc_start_addr + enet_hal_get_bd_size() * (ENET_TX_RING_LEN - 1), 1); return ERR_OK; }