/** * @brief This function handles packet transmission * * @param skb A pointer to sk_buff structure * @param dev A pointer to net_device structure * @return WLAN_STATUS_SUCCESS or WLAN_STATUS_FAILURE */ static int wlan_hard_start_xmit(struct sk_buff *skb, struct eth_drv_sc *sc) { int ret; wlan_private *priv = sc->driver_private; ENTER(); if (wlan_tx_packet(priv, skb)) { /* Transmit failed */ ret = WLAN_STATUS_FAILURE; goto done; } else { /* Transmit succeeded */ #if 0 if (!priv->adapter->wmm.enabled) { if (priv->adapter->TxSkbNum >= MAX_NUM_IN_TX_Q) { UpdateTransStart(dev); os_stop_queue(priv); } } #endif } ret = WLAN_STATUS_SUCCESS; done: LEAVE(); return ret; }
/** * @brief This function handles the timeout of packet * transmission * * @param dev A pointer to net_device structure * @return n/a */ static void wlan_tx_timeout(struct net_device *dev) { wlan_private *priv = (wlan_private *) netdev_priv(dev); ENTER(); PRINTM(DATA, "Tx timeout @ %lu\n", os_time_get()); UpdateTransStart(dev); priv->adapter->dbg.num_tx_timeout++; priv->adapter->IntCounter++; wake_up_interruptible(&priv->MainThread.waitQ); LEAVE(); }
/** * @brief This function handles the timeout of packet * transmission * * @param dev A pointer to net_device structure * @return n/a */ static void wlan_tx_timeout(struct net_device *dev) { wlan_private *priv = (wlan_private *) dev->priv; ENTER(); diag_printf("tx watch dog timeout!\n"); priv->wlan_dev.dnld_sent = DNLD_RES_RECEIVED; UpdateTransStart(dev); if (priv->adapter->CurrentTxSkb) { //wake_up_interruptible(&priv->MainThread.waitQ); cyg_flag_setbits( &priv->MainThread.waitQ_flag_q, 1 ); } else { //os_start_queue(priv); } LEAVE(); }