/* ======================================================================== Routine Description: Ikanos WLAN --> LAN transmit fast path function. Arguments: pFrame - the received packet (Ikanos packet format) Return Value: None Note: Ikanos platform supports only 8 VAPs ======================================================================== */ static void IKANOS_WlanPktFromAp( IN apPreHeader_t *pFrame) { PRTMP_ADAPTER pAd; struct net_device *dev = NULL; struct sk_buff *skb; INT32 index; apPreHeader_t *apBuf = K0_TO_K1(pFrame); pAd = pIkanosAd; /*index = apBuf->specInfoElement; */ /*dev = pAd->ApCfg.MBSSID[index].MSSIDDev; */ index = GetSpecInfoIdxFromBssid(pAd, apBuf->specInfoElement); dev = get_netdev_from_bssid(pAd, apBuf->specInfoElement); if (dev == NULL) { printk("ikanos> %s: ERROR null device ***************\n", __FUNCTION__); return; } /* End of if */ skb = (struct sk_buff *)translateApbuf2Mbuf(apBuf); if (NULL == skb) { printk("ikanos> %s: skb is null *********************\n", __FUNCTION__); return; } /* End of if */ pAd->IkanosRxInfo[index].netdev = dev; pAd->IkanosRxInfo[index].fp = &IKANOS_WlanDataFramesTx; skb->dev = dev; skb->apFlowData.rxApId = IKANOS_PERAP_ID; /*skb->apFlowData.txHandle = &(txinforx[index]); */ skb->apFlowData.rxHandle = &(pAd->IkanosRxInfo[index]); skb->protocol = eth_type_trans(skb, skb->dev); #ifdef IKANOS_DEBUG printk("ikanos> rx no fp!\n"); /* debug use */ #endif /* IKANOS_DEBUG */ netif_rx(skb); return; } /* End of IKANOS_WlanPktFromAp */
/* ======================================================================== Routine Description: Ikanos LAN --> WLAN transmit fast path function. Arguments: _pAdBuf - the transmitted packet (Ikanos packet format) netdev - our WLAN network device Return Value: Note: ======================================================================== */ static INT32 IKANOS_WlanDataFramesTx(void *_pAdBuf, struct net_device *pNetDev) { apPreHeader_t *pApBuf = (apPreHeader_t *)_pAdBuf; struct sk_buff *sk = NULL; sk = (struct sk_buff *)translateApbuf2Mbuf(pApBuf); if (sk == NULL) { printk("ikanos> translateApbuf2Mbuf returned NULL!\n"); return 1; } sk->apFlowData.flags2 = 0; sk->apFlowData.wlanFlags = 0; sk->protocol = ETH_P_IP; sk->dev = pNetDev; sk->priority = 0; return rt28xx_send_packets(sk, pNetDev); }