コード例 #1
0
ファイル: wlan_qct_pal_msg.c プロジェクト: ChangYeoun/10.1
/*---------------------------------------------------------------------------
     wpalPostCtrlMsg - Post a message to control context so it can be processed in that context.
    Param: 
        pPalContext - A PAL context
        pMsg - a pointer to called allocated opaque object;
---------------------------------------------------------------------------*/
wpt_status wpalPostCtrlMsg(void *pPalContext, wpt_msg *pMsg)
{
   wpt_status status = eWLAN_PAL_STATUS_E_FAILURE;
   vos_msg_t msg;

   if (NULL == pMsg)
   {
      WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR,
                 "%s: NULL message pointer", __FUNCTION__);
      WPAL_ASSERT(0);
      return status;
   }

   msg.type = 0;  //This field is not used because VOSS doesn't check it.
   msg.reserved = 0;
   msg.bodyval = 0;
   msg.bodyptr = pMsg;
   if(VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MQ_ID_WDI, &msg)))
   {
      status = eWLAN_PAL_STATUS_SUCCESS;
   }
   else
   {
      WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d\n",
                  __FUNCTION__, pMsg->type);
   }

   return status;
}
コード例 #2
0
static VOS_STATUS sys_PostMcThreadProbeMsg( v_CONTEXT_t pVosContext, sysResponseCback userCallback,
        v_VOID_t *pUserData, SYS_MSG_ID sysMsgId )
{
    VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
    vos_msg_t sysMsg;
    tSirRetStatus sirStatus = eSIR_SUCCESS;
    /*----------------------------------------------------------------------------------------*/

    sysBuildMessageHeader( sysMsgId, &sysMsg );


    // Save the user callback and user data to callback in the body pointer
    // and body data portion of the message.
    sysMsg.bodyptr = (void *)userCallback;
    sysMsg.bodyval = (v_U32_t)pUserData;

    // Post the message...
    vosStatus = vos_mq_post_message( VOS_MQ_ID_SYS, &sysMsg );

    if ( eSIR_SUCCESS != sirStatus )
    {
        vosStatus = VOS_STATUS_E_BADMSG;
    }

    return( vosStatus );
}
コード例 #3
0
tSirRetStatus
wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg)
{
    if(VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_WDA, (vos_msg_t *) pMsg))
        return eSIR_FAILURE;
    else
        return eSIR_SUCCESS;
} // halPostMsg()
コード例 #4
0
VOS_STATUS sysMcStart( v_CONTEXT_t pVosContext, sysResponseCback userCallback, v_VOID_t *pUserData )
{
    VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
    vos_msg_t sysMsg;

    sysBuildMessageHeader( SYS_MSG_ID_MC_START, &sysMsg );

    // Save the user callback and user data to callback in the body pointer
    // and body data portion of the message.
    // finished.
    sysMsg.bodyptr = (void *)userCallback;
    sysMsg.bodyval = (v_U32_t)pUserData;

    // post the message..
    vosStatus = vos_mq_post_message( VOS_MQ_ID_SYS, &sysMsg );
    if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
    {
        vosStatus = VOS_STATUS_E_BADMSG;
    }

    return( vosStatus );
}
コード例 #5
0
ファイル: wlan_qct_sys.c プロジェクト: Zoldyck07/prima
VOS_STATUS sysStop( v_CONTEXT_t pVosContext )
{
   VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
   vos_msg_t sysMsg;
   v_U8_t evtIndex;

   /* Initialize the stop event */
   vosStatus = vos_event_init( &gStopEvt );

   if(! VOS_IS_STATUS_SUCCESS( vosStatus ))
   {
      return vosStatus;
   }

   /* post a message to SYS module in MC to stop SME and MAC */
   sysBuildMessageHeader( SYS_MSG_ID_MC_STOP, &sysMsg );

   // Save the user callback and user data to callback in the body pointer
   // and body data portion of the message.
   // finished.
   sysMsg.bodyptr = (void *)sysStopCompleteCb;
   sysMsg.bodyval = (v_U32_t) &gStopEvt;

   // post the message..
   vosStatus = vos_mq_post_message( VOS_MQ_ID_SYS, &sysMsg );
   if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
   {
      vosStatus = VOS_STATUS_E_BADMSG;
   }

   vosStatus = vos_wait_events( &gStopEvt, 1, 0, &evtIndex );
   VOS_ASSERT( VOS_IS_STATUS_SUCCESS ( vosStatus ) );

   vosStatus = vos_event_destroy( &gStopEvt );
   VOS_ASSERT( VOS_IS_STATUS_SUCCESS ( vosStatus ) );

   return( vosStatus );
}
コード例 #6
0
VOS_STATUS sysStop( v_CONTEXT_t pVosContext )
{
   VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
   vos_msg_t sysMsg;
   v_U8_t evtIndex;

   
   vosStatus = vos_event_init( &gStopEvt );

   if(! VOS_IS_STATUS_SUCCESS( vosStatus ))
   {
      return vosStatus;
   }

   
   sysBuildMessageHeader( SYS_MSG_ID_MC_STOP, &sysMsg );

   
   
   
   sysMsg.bodyptr = (void *)sysStopCompleteCb;
   sysMsg.bodyval = (v_U32_t) &gStopEvt;

   
   vosStatus = vos_mq_post_message( VOS_MQ_ID_SYS, &sysMsg );
   if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
   {
      vosStatus = VOS_STATUS_E_BADMSG;
   }

   vosStatus = vos_wait_events( &gStopEvt, 1, SYS_STOP_TIMEOUT, &evtIndex );
   VOS_ASSERT( VOS_IS_STATUS_SUCCESS ( vosStatus ) );

   vosStatus = vos_event_destroy( &gStopEvt );
   VOS_ASSERT( VOS_IS_STATUS_SUCCESS ( vosStatus ) );

   return( vosStatus );
}
コード例 #7
0
wpt_status wpalPostCtrlMsg(void *pPalContext, wpt_msg *pMsg)
{
   wpt_status status = eWLAN_PAL_STATUS_E_FAILURE;
   vos_msg_t msg;

   if (NULL == pMsg)
   {
      WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR,
                 "%s: NULL message pointer", __func__);
      WPAL_ASSERT(0);
      return status;
   }

   if ((WPAL_MC_MSG_SMD_NOTIF_OPEN_SIG == pMsg->type) ||
       (WPAL_MC_MSG_SMD_NOTIF_DATA_SIG == pMsg->type))
   {
      msg.type = pMsg->type;
   }
   else
   {
      msg.type = 0;
   }
   msg.reserved = 0;
   msg.bodyval = 0;
   msg.bodyptr = pMsg;
   if(VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MQ_ID_WDI, &msg)))
   {
      status = eWLAN_PAL_STATUS_SUCCESS;
   }
   else
   {
      WPAL_TRACE(eWLAN_MODULE_PAL, eWLAN_PAL_TRACE_LEVEL_ERROR, "%s fail to post msg %d",
                  __func__, pMsg->type);
   }

   return status;
}
/******************************************************************************
 * Function: sme_NanRequest
 *
 * Description:
 * This function gets called when HDD receives NAN vendor command
 * from user space
 *
 * Args:
 * Nan Request structure ptr
 *
 * Returns:
 * VOS_STATUS
 *****************************************************************************/
VOS_STATUS sme_NanRequest(tpNanRequestReq input)
{
	 vos_msg_t msg;
	 tpNanRequest data;
	 size_t data_len;

	 data_len = sizeof(tNanRequest) + input->request_data_len;
	 data = vos_mem_malloc(data_len);

	 if (data == NULL) {
		 VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
				FL("Memory allocation failure"));
		 return VOS_STATUS_E_FAULT;
	 }

	 vos_mem_zero(data, data_len);
	 data->request_data_len = input->request_data_len;
	 if (input->request_data_len) {
		 vos_mem_copy(data->request_data,
				input->request_data, input->request_data_len);
	 }

	 msg.type = WDA_NAN_REQUEST;
	 msg.reserved = 0;
	 msg.bodyptr = data;

	 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MODULE_ID_WDA,
					 &msg)) {
	 VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
		FL("Not able to post WDA_NAN_REQUEST message to WDA"));
		vos_mem_free(data);
	 return VOS_STATUS_SUCCESS;
	 }

	 return VOS_STATUS_SUCCESS;
}
コード例 #9
0
static void vos_linux_timer_callback ( v_U32_t data ) 
{
   vos_timer_t *timer = ( vos_timer_t *)data; 
   vos_msg_t msg;
   VOS_STATUS vStatus;
   unsigned long flags;
   
   vos_timer_callback_t callback=NULL;
   v_PVOID_t userData=NULL;
   int threadId;
   VOS_TIMER_TYPE type=VOS_TIMER_TYPE_SW;
   
   VOS_ASSERT(timer);

   if (timer == NULL)
   {
     VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s Null pointer passed in!",__func__);
     return;
   }

   threadId = timer->platformInfo.threadID;
   spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
   
   switch ( timer->state )
   {
   case VOS_TIMER_STATE_STARTING:
      // we are in this state because someone just started the timer, MM timer
      // got started and expired, but the time content have not bee updated
      // this is a rare race condition!
      timer->state = VOS_TIMER_STATE_STOPPED;
      vStatus = VOS_STATUS_E_ALREADY;
      break;
   case VOS_TIMER_STATE_STOPPED:
      vStatus = VOS_STATUS_E_ALREADY;
      break;
   case VOS_TIMER_STATE_UNUSED:
      vStatus = VOS_STATUS_E_EXISTS;
      break;
   case VOS_TIMER_STATE_RUNNING:
      // need to go to stop state here because the call-back function may restart 
      // timer (to emulate periodic timer)
      timer->state = VOS_TIMER_STATE_STOPPED;
      // copy the relevant timer information to local variables;
      // once we exist from this critical section, the timer content may be modified
      // by other tasks
      callback = timer->callback;
      userData = timer->userData;
      threadId = timer->platformInfo.threadID;
      type = timer->type;
      vStatus = VOS_STATUS_SUCCESS;
      break;
   default:
      VOS_ASSERT(0);
      vStatus = VOS_STATUS_E_FAULT;
      break;
   }
   
   spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
   
   if ( VOS_STATUS_SUCCESS != vStatus )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, 
                "TIMER callback called in a wrong state=%d", timer->state);
      return;
   }

   tryAllowingSleep( type );

   if (callback == NULL)
   {
       VOS_ASSERT(0);
       VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
                 "%s: No TIMER callback, Could not enqueue timer to any queue",
                 __func__);
       return;
   }

   // If timer has expired then call vos_client specific callback 
   if ( vos_sched_is_tx_thread( threadId ) )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, 
          "TIMER callback: running on TX thread");
         
      //Serialize to the Tx thread
      sysBuildMessageHeader( SYS_MSG_ID_TX_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_tx_mq_serialize( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
         return;
   }
   else if ( vos_sched_is_rx_thread( threadId ) )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, 
          "TIMER callback: running on RX thread");
         
      //Serialize to the Rx thread
      sysBuildMessageHeader( SYS_MSG_ID_RX_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_rx_mq_serialize( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
         return;
   }
   else 
   {
      VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
          "TIMER callback: running on MC thread");
                    
      // Serialize to the MC thread
      sysBuildMessageHeader( SYS_MSG_ID_MC_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_mq_post_message( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
        return;
   }     

   VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, 
             "%s: Could not enqueue timer to any queue", __func__);
   VOS_ASSERT(0);
}
コード例 #10
0
static void vos_linux_timer_callback ( v_U32_t data ) 
{
   vos_timer_t *timer = ( vos_timer_t *)data; 
   vos_msg_t msg;
   VOS_STATUS vStatus;
   unsigned long flags;
   
   vos_timer_callback_t callback=NULL;
   v_PVOID_t userData=NULL;
   int threadId;
   VOS_TIMER_TYPE type=VOS_TIMER_TYPE_SW;
   
   VOS_ASSERT(timer);

   if (timer == NULL)
   {
     VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "%s Null pointer passed in!",__func__);
     return;
   }

   threadId = timer->platformInfo.threadID;
   spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
   
   switch ( timer->state )
   {
   case VOS_TIMER_STATE_STARTING:
      //                                                                      
      //                                                                   
      //                               
      timer->state = VOS_TIMER_STATE_STOPPED;
      vStatus = VOS_STATUS_E_ALREADY;
      break;
   case VOS_TIMER_STATE_STOPPED:
      vStatus = VOS_STATUS_E_ALREADY;
      break;
   case VOS_TIMER_STATE_UNUSED:
      vStatus = VOS_STATUS_E_EXISTS;
      break;
   case VOS_TIMER_STATE_RUNNING:
      //                                                                          
      //                                  
      timer->state = VOS_TIMER_STATE_STOPPED;
      //                                                        
      //                                                                            
      //               
      callback = timer->callback;
      userData = timer->userData;
      threadId = timer->platformInfo.threadID;
      type = timer->type;
      vStatus = VOS_STATUS_SUCCESS;
      break;
   default:
      VOS_ASSERT(0);
      vStatus = VOS_STATUS_E_FAULT;
      break;
   }
   
   spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
   
   if ( VOS_STATUS_SUCCESS != vStatus )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, 
                "TIMER callback called in a wrong state=%d", timer->state);
      return;
   }

   tryAllowingSleep( type );

   if (callback == NULL)
   {
       VOS_ASSERT(0);
       VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
                 "%s: No TIMER callback, Could not enqueue timer to any queue",
                 __func__);
       return;
   }

   //                                                             
   if ( vos_sched_is_tx_thread( threadId ) )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, 
          "TIMER callback: running on TX thread");
         
      //                          
      sysBuildMessageHeader( SYS_MSG_ID_TX_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_tx_mq_serialize( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
         return;
   }
   else if ( vos_sched_is_rx_thread( threadId ) )
   {
      VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO, 
          "TIMER callback: running on RX thread");
         
      //                          
      sysBuildMessageHeader( SYS_MSG_ID_RX_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_rx_mq_serialize( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
         return;
   }
   else 
   {
      VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
          "TIMER callback: running on MC thread");
                    
      //                           
      sysBuildMessageHeader( SYS_MSG_ID_MC_TIMER, &msg );
      msg.bodyptr  = callback;
      msg.bodyval  = (v_U32_t)userData; 
       
      if(vos_mq_post_message( VOS_MQ_ID_SYS, &msg ) == VOS_STATUS_SUCCESS)
        return;
   }     

   VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, 
             "%s: Could not enqueue timer to any queue", __func__);
   VOS_ASSERT(0);
}