static int _rtl_usb_init_tx(struct ieee80211_hw *hw) { u32 i; struct rtl_priv *rtlpriv = rtl_priv(hw); struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw)); rtlusb->max_bulk_out_size = IS_HIGH_SPEED_USB(rtlusb->udev) ? USB_HIGH_SPEED_BULK_SIZE : USB_FULL_SPEED_BULK_SIZE; RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "USB Max Bulk-out Size=%d\n", rtlusb->max_bulk_out_size); for (i = 0; i < __RTL_TXQ_NUM; i++) { u32 ep_num = rtlusb->ep_map.ep_mapping[i]; if (!ep_num) { RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "Invalid endpoint map setting!\n"); return -EINVAL; } } rtlusb->usb_tx_post_hdl = rtlpriv->cfg->usb_interface_cfg->usb_tx_post_hdl; rtlusb->usb_tx_cleanup = rtlpriv->cfg->usb_interface_cfg->usb_tx_cleanup; rtlusb->usb_tx_aggregate_hdl = (rtlpriv->cfg->usb_interface_cfg->usb_tx_aggregate_hdl) ? rtlpriv->cfg->usb_interface_cfg->usb_tx_aggregate_hdl : &_none_usb_tx_aggregate_hdl; init_usb_anchor(&rtlusb->tx_wait); init_usb_anchor(&rtlusb->tx_submitted); return 0; }
void rtl8821cu_interface_configure(PADAPTER padapter) { HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter); if (IS_SUPER_SPEED_USB(padapter)) pHalData->UsbBulkOutSize = USB_SUPER_SPEED_BULK_SIZE; else if (IS_HIGH_SPEED_USB(padapter)) pHalData->UsbBulkOutSize = USB_HIGH_SPEED_BULK_SIZE; else pHalData->UsbBulkOutSize = USB_FULL_SPEED_BULK_SIZE; pHalData->interfaceIndex = pdvobjpriv->InterfaceNumber; #ifdef CONFIG_USB_TX_AGGREGATION /* according to value defined by halmac */ pHalData->UsbTxAggMode = 1; pHalData->UsbTxAggDescNum = HALMAC_BLK_DESC_NUM_8821C; #endif /* CONFIG_USB_TX_AGGREGATION */ #ifdef CONFIG_USB_RX_AGGREGATION /* according to value defined by halmac */ pHalData->rxagg_mode = RX_AGG_USB; #if 0 pHalData->rxagg_usb_size = 8; pHalData->rxagg_usb_timeout = 0x6; pHalData->rxagg_dma_size = 16; pHalData->rxagg_dma_timeout = 0x6; #endif #endif /* CONFIG_USB_RX_AGGREGATION */ usb_set_queue_pipe_mapping(padapter, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes); }