static void event_to_unifi_sys_ma_unitdata_cfm(FsmContext* context, CsrUint8* inputbuffer, CsrUint16 length) { CsrUint8* buffer = &inputbuffer[6]; UnifiSysMaUnitdataCfm_Evt evt; evt.appHandle = (void*) event_unpack_CsrUint32(&buffer); evt.result = (unifi_Status) event_unpack_CsrUint8(&buffer); evt.transmissionStatus = (unifi_TransmissionStatus) event_unpack_CsrUint16(&buffer); evt.providedPriority = (unifi_Priority) event_unpack_CsrUint16(&buffer); evt.providedServiceClass = (unifi_ServiceClass) event_unpack_CsrUint16(&buffer); evt.reqIdentifier = event_unpack_CsrUint32(&buffer); unifi_sys_ma_unitdata_cfm(context, evt.appHandle, evt.result, evt.transmissionStatus, evt.providedPriority, evt.providedServiceClass, evt.reqIdentifier); }
/* * --------------------------------------------------------------------------- * sme_log_event * * Callback function to be registered as the SME event callback. * Copies the signal content into a new udi_log_t struct and adds * it to the read queue for the SME client. * * Arguments: * arg This is the value given to unifi_add_udi_hook, in * this case a pointer to the client instance. * signal Pointer to the received signal. * signal_len Size of the signal structure in bytes. * bulkdata Pointers to any associated bulk data. * dir Direction of the signal. Zero means from host, * non-zero means to host. * * Returns: * None. * --------------------------------------------------------------------------- */ void sme_log_event(ul_client_t *pcli, const u8 *signal, int signal_len, const bulk_data_param_t *bulkdata, int dir) { unifi_priv_t *priv; CSR_SIGNAL unpacked_signal; unifi_DataBlock mlmeCommand; unifi_DataBlock dataref1; unifi_DataBlock dataref2; int r; func_enter(); /* Just a sanity check */ if ((signal == NULL) || (signal_len <= 0)) { func_exit(); return; } priv = uf_find_instance(pcli->instance); if (!priv) { unifi_error(priv, "sme_log_event: invalid priv\n"); func_exit(); return; } if (priv->smepriv == NULL) { unifi_error(priv, "sme_log_event: invalid smepriv\n"); func_exit(); return; } unifi_trace(priv, UDBG3, "sme_log_event: Process signal 0x%X %s\n", *((CsrUint16*)signal), lookup_signal_name(*((CsrUint16*)signal))); /* * Indicate CSR_MLME_EAPOL_CONFIRM_ID and CSR_MA_UNITDATA_CONFIRM_ID * using the respective SYS API. */ r = read_unpack_signal(signal, &unpacked_signal); if (r) { unifi_error(priv, "sme_log_event: Received unknown or corrupted signal.\n"); func_exit(); return; } if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MLME_EAPOL_CONFIRM_ID) { CSR_MLME_EAPOL_CONFIRM *cfm = &unpacked_signal.u.MlmeEapolConfirm; /* Retrieve the appHandle from the LSB of the ReceiverId. */ unifi_sys_eapol_cfm(priv->smepriv, (void*)((unsigned int)signal[2]), (cfm->ResultCode) ? unifi_EapolRcFailure : unifi_EapolRcSuccess); func_exit(); return; } if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MA_UNITDATA_CONFIRM_ID) { CSR_MA_UNITDATA_CONFIRM *cfm = &unpacked_signal.u.MaUnitdataConfirm; /* Retrieve the appHandle from the LSB of the ReceiverId. */ unifi_sys_ma_unitdata_cfm(priv->smepriv, (void*)((unsigned int)signal[2]), (cfm->TransmissionStatus) ? unifi_Error : unifi_Success, cfm->TransmissionStatus, cfm->ProvidedPriority, cfm->ProvidedServiceClass, cfm->ProvidedHostTag); func_exit(); return; } mlmeCommand.length = signal_len; mlmeCommand.data = (CsrUint8*)signal; dataref1.length = bulkdata->d[0].data_length; if (dataref1.length > 0) { dataref1.data = (CsrUint8 *) bulkdata->d[0].os_data_ptr; } else { dataref1.data = NULL; } dataref2.length = bulkdata->d[1].data_length; if (dataref2.length > 0) { dataref2.data = (CsrUint8 *) bulkdata->d[1].os_data_ptr; } else { dataref2.data = NULL; } unifi_sys_hip_ind(priv->smepriv, mlmeCommand.length, mlmeCommand.data, dataref1.length, dataref1.data, dataref2.length, dataref2.data); func_exit(); } /* sme_log_event() */