/*-----------------------------------------------------------------------------
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;
}
Пример #2
0
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;
}