/*----------------------------------------------------------------------------- Routine Name: os_connectionStatus Routine Description: The eSTA-DK will call this API so the OS stack is aware that the WLAN layer is ready to function. Arguments: cStatus = 1; WLAN in ready for network packets cStatus = 0; WLAN in not ready for network packets Return Value: None -----------------------------------------------------------------------------*/ TI_INT32 os_IndicateEvent (TI_HANDLE OsContext, IPC_EV_DATA* pData) { IPC_EVENT_PARAMS *pInParam = &pData->EvParams; TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; /*TI_UINT8 AuthBuf[sizeof(TI_UINT32) + sizeof(OS_802_11_AUTHENTICATION_REQUEST)];*/ ti_nodprintf(TIWLAN_LOG_INFO, "\n os_ConnectionStatus Event 0x%08x \n", CsStatus->Event); switch(pInParam->uEventType) { case IPC_EVENT_ASSOCIATED: if (drv->netdev != NULL) netif_carrier_on(drv->netdev); break; case IPC_EVENT_DISASSOCIATED: if (drv->netdev != NULL) netif_carrier_off(drv->netdev); break; case IPC_EVENT_LINK_SPEED: drv->tCommon.uLinkSpeed = (*(TI_UINT32*)pData->uBuffer * 10000) / 2; ti_nodprintf(TIWLAN_LOG_INFO, "\n Link Speed = 0x%08x \n",drv->tCommon.uLinkSpeed); break; } return TI_OK; }
TI_BOOL os_receivePacket(TI_HANDLE OsContext, void *pRxDesc ,void *pPacket, TI_UINT16 Length) { TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext; unsigned char *pdata = (unsigned char *)((TI_UINT32)pPacket & ~(TI_UINT32)0x3); rx_head_t *rx_head = (rx_head_t *)(pdata - WSPI_PAD_BYTES - RX_HEAD_LEN_ALIGNED); struct sk_buff *skb = rx_head->skb; #ifdef TI_DBG if ((TI_UINT32)pPacket & 0x3) { if ((TI_UINT32)pPacket - (TI_UINT32)skb->data != 2) { printk("os_receivePacket() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pPacket); } } else { if ((TI_UINT32)skb->data != (TI_UINT32)pPacket) { printk("os_receivePacket() address error skb=0x%x skb->data=0x%x pPacket=0x%x !!!\n",(int)skb, (int)skb->data, (int)pPacket); } } if (Length != RX_ETH_PKT_LEN(pPacket)) { printk("os_receivePacket() Length=%d != RX_ETH_PKT_LEN(pPacket)=%d!!!\n",(int)Length, RX_ETH_PKT_LEN(pPacket)); } #endif /* printk("-->> os_receivePacket() pPacket=0x%x Length=%d skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n", (int)pPacket, (int)Length, (int)skb, (int)skb->data, (int)skb->head, (int)skb->len); */ /* Use skb_reserve, it updates both skb->data and skb->tail. */ skb->data = RX_ETH_PKT_DATA(pPacket); skb->tail = skb->data; skb_put(skb, RX_ETH_PKT_LEN(pPacket)); /* printk("-->> os_receivePacket() skb=0x%x skb->data=0x%x skb->head=0x%x skb->len=%d\n", (int)skb, (int)skb->data, (int)skb->head, (int)skb->len); */ ti_nodprintf(TIWLAN_LOG_INFO, "os_receivePacket - Received EAPOL len-%d\n", WBUF_LEN(pWbuf)); skb->dev = drv->netdev; skb->protocol = eth_type_trans(skb, drv->netdev); skb->ip_summed = CHECKSUM_NONE; drv->stats.rx_packets++; drv->stats.rx_bytes += skb->len; /* Send the skb to the TCP stack. * it responsibly of the Linux kernel to free the skb */ { CL_TRACE_START_L1(); os_wake_lock_timeout_enable(drv); netif_rx_ni(skb); /* Note: Don't change this trace (needed to exclude OS processing from Rx CPU utilization) */ CL_TRACE_END_L1("tiwlan_drv.ko", "OS", "RX", ""); } return TI_TRUE; }