Lines Matching refs:driver

29 static BOOL WXCi_CheckWmApiResult(WXCDriverWork * driver, WMApiid id, WMErrCode err);
99 static void WXCi_ErrorQuit(WXCDriverWork * driver) in WXCi_ErrorQuit() argument
102 if (driver->state == WXC_DRIVER_STATE_BUSY) in WXCi_ErrorQuit()
104 driver->state = driver->target; in WXCi_ErrorQuit()
106 WXCi_End(driver); in WXCi_ErrorQuit()
120 static void WXCi_RecoverWmApiFailure(WXCDriverWork * driver, WMApiid id, WMErrCode err) in WXCi_RecoverWmApiFailure() argument
133 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
142 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
153 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
162 driver->state = WXC_DRIVER_STATE_CHILD; in WXCi_RecoverWmApiFailure()
163 WXCi_Reset(driver); in WXCi_RecoverWmApiFailure()
168 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
174 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
203 static BOOL WXCi_CheckWmApiResult(WXCDriverWork * driver, WMApiid id, WMErrCode err) in WXCi_CheckWmApiResult() argument
209 WXCi_RecoverWmApiFailure(driver, id, err); in WXCi_CheckWmApiResult()
225 static BOOL WXCi_CheckWmCallbackResult(WXCDriverWork * driver, void *arg) in WXCi_CheckWmCallbackResult() argument
232 WXCi_RecoverWmApiFailure(driver, (WMApiid)cb->apiid, (WMErrCode)cb->errcode); in WXCi_CheckWmCallbackResult()
248 static inline u32 WXCi_CallDriverEvent(WXCDriverWork * driver, WXCDriverEvent event, void *arg) in WXCi_CallDriverEvent() argument
251 if (driver->callback) in WXCi_CallDriverEvent()
253 result = (*driver->callback) (event, arg); in WXCi_CallDriverEvent()
267 static void WXCi_CallSendEvent(WXCDriverWork * driver) in WXCi_CallSendEvent() argument
269 if (!driver->send_busy) in WXCi_CallSendEvent()
277 const u16 max_length = (u16)((driver->own_aid == 0) ? in WXCi_CallSendEvent()
278 driver->parent_param->parentMaxSize : driver->target_bss->gameInfo.childMaxSize); in WXCi_CallSendEvent()
280 packet.bitmap = driver->peer_bitmap; in WXCi_CallSendEvent()
282 packet.buffer = driver->current_send_buf; in WXCi_CallSendEvent()
284 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DATA_SEND, &packet); in WXCi_CallSendEvent()
292 driver->send_busy = WXCi_CheckWmApiResult(driver, WM_APIID_SET_MP_DATA, ret); in WXCi_CallSendEvent()
308 static void WXCi_OnStateChanged(WXCDriverWork * driver, WXCDriverState state, void *arg) in WXCi_OnStateChanged() argument
310 driver->state = state; in WXCi_OnStateChanged()
313 if (driver->target == state) in WXCi_OnStateChanged()
318 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_END, NULL); in WXCi_OnStateChanged()
322 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_STOP, NULL); in WXCi_OnStateChanged()
326 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_IDLE, NULL); in WXCi_OnStateChanged()
330 driver->send_busy = FALSE; in WXCi_OnStateChanged()
331 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_PARENT, NULL); in WXCi_OnStateChanged()
335 driver->send_busy = FALSE; in WXCi_OnStateChanged()
336 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_CHILD, NULL); in WXCi_OnStateChanged()
338 driver->peer_bitmap |= (u16)(1 << 0); in WXCi_OnStateChanged()
339 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTED, arg); in WXCi_OnStateChanged()
340 WXCi_CallSendEvent(driver); in WXCi_OnStateChanged()
367 switch (driver->target) in WXCi_OnStateChanged()
381 switch (driver->target) in WXCi_OnStateChanged()
388 driver->need_measure_channel = TRUE; in WXCi_OnStateChanged()
389 if (driver->need_measure_channel) in WXCi_OnStateChanged()
420 WXCDriverWork *const driver = work; in WXCi_MPSendCallback() local
422 (void)WXCi_CheckWmCallbackResult(driver, arg); in WXCi_MPSendCallback()
423 driver->send_busy = FALSE; in WXCi_MPSendCallback()
424 if (driver->peer_bitmap != 0) in WXCi_MPSendCallback()
426 WXCi_CallSendEvent(driver); in WXCi_MPSendCallback()
442 WXCDriverWork *const driver = work; in WXCi_IndicateCallback() local
448 driver->target = WXC_DRIVER_STATE_ERROR; in WXCi_IndicateCallback()
449 driver->state = WXC_DRIVER_STATE_ERROR; in WXCi_IndicateCallback()
464 WXCDriverWork *const driver = work; in WXCi_PortCallback() local
466 if (WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_PortCallback()
477 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DATA_RECV, &packet); in WXCi_PortCallback()
484 WXC_DRIVER_LOG("disconnected(%02X-=%02X)\n", driver->peer_bitmap, (1 << cb->aid)); in WXCi_PortCallback()
485 driver->peer_bitmap &= (u16)~(1 << cb->aid); in WXCi_PortCallback()
486 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DISCONNECTED, in WXCi_PortCallback()
504 WXCDriverWork *const driver = work; in WXCi_InitProc() local
507 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_InitProc()
514 driver->need_measure_channel = TRUE; in WXCi_InitProc()
515 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_InitProc()
516 wmResult = WM_Init(driver->wm_work, driver->wm_dma); in WXCi_InitProc()
517 (void)WXCi_CheckWmApiResult(driver, WM_APIID_INITIALIZE, wmResult); in WXCi_InitProc()
519 (void)WXCi_CheckWmApiResult(driver, WM_APIID_ENABLE, wmResult); in WXCi_InitProc()
526 if (WXCi_CheckWmApiResult(driver, WM_APIID_INDICATION, wmResult)) in WXCi_InitProc()
530 if (WXCi_CheckWmApiResult(driver, WM_APIID_PORT_SEND, wmResult)) in WXCi_InitProc()
532 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_STOP, NULL); in WXCi_InitProc()
550 WXCDriverWork *const driver = work; in WXCi_StartProc() local
553 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartProc()
559 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartProc()
561 (void)WXCi_CheckWmApiResult(driver, WM_APIID_POWER_ON, wmResult); in WXCi_StartProc()
566 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_StartProc()
582 WXCDriverWork *const driver = work; in WXCi_StopProc() local
585 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StopProc()
591 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StopProc()
593 (void)WXCi_CheckWmApiResult(driver, WM_APIID_POWER_OFF, wmResult); in WXCi_StopProc()
598 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_STOP, NULL); in WXCi_StopProc()
614 WXCDriverWork *const driver = work; in WXCi_EndProc() local
617 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_EndProc()
623 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_EndProc()
625 (void)WXCi_CheckWmApiResult(driver, WM_APIID_DISABLE, wmResult); in WXCi_EndProc()
632 if (WXCi_CheckWmApiResult(driver, WM_APIID_END, wmResult)) in WXCi_EndProc()
635 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_END, NULL); in WXCi_EndProc()
652 WXCDriverWork *const driver = work; in WXCi_ResetProc() local
655 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ResetProc()
661 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_ResetProc()
663 (void)WXCi_CheckWmApiResult(driver, WM_APIID_RESET, wmResult); in WXCi_ResetProc()
668 driver->own_aid = 0; in WXCi_ResetProc()
669 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_ResetProc()
685 WXCDriverWork *const driver = work; in WXCi_ParentIndicate() local
702 BOOL mp_start = (driver->peer_bitmap == 0); in WXCi_ParentIndicate()
703 WXC_DRIVER_LOG("connected(%02X+=%02X)\n", driver->peer_bitmap, (1 << cb->aid)); in WXCi_ParentIndicate()
704 driver->peer_bitmap |= (u16)(1 << cb->aid); in WXCi_ParentIndicate()
705 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTED, cb); in WXCi_ParentIndicate()
709 WXCi_CallSendEvent(driver); in WXCi_ParentIndicate()
718 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_BEACON_SEND, driver->parent_param); in WXCi_ParentIndicate()
735 WXCDriverWork *const driver = work; in WXCi_StartParentProc() local
738 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartParentProc()
744 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartParentProc()
746 driver->parent_param->channel = driver->current_channel; in WXCi_StartParentProc()
747 driver->parent_param->tgid = WM_GetNextTgid(); in WXCi_StartParentProc()
749 driver->current_channel, driver->parent_param->tgid, in WXCi_StartParentProc()
750 driver->parent_param->ggid); in WXCi_StartParentProc()
751 wmResult = WM_SetParentParameter(WXCi_StartParentProc, driver->parent_param); in WXCi_StartParentProc()
752 (void)WXCi_CheckWmApiResult(driver, WM_APIID_SET_P_PARAM, wmResult); in WXCi_StartParentProc()
762 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_PARENT, wmResult); in WXCi_StartParentProc()
771 driver->own_aid = 0; in WXCi_StartParentProc()
772 driver->peer_bitmap = 0; in WXCi_StartParentProc()
774 (u16 *)driver->mp_recv_work, driver->recv_size_max, in WXCi_StartParentProc()
775 (u16 *)driver->mp_send_work, driver->send_size_max, in WXCi_StartParentProc()
776 (u16)(driver->parent_param->CS_Flag ? 0 : 1)); in WXCi_StartParentProc()
777 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_MP, wmResult); in WXCi_StartParentProc()
786 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_PARENT, NULL); in WXCi_StartParentProc()
804 WXCDriverWork *const driver = work; in WXCi_ChildIndicate() local
806 if (WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ChildIndicate()
817 if (driver->state != WXC_DRIVER_STATE_CHILD) in WXCi_ChildIndicate()
826 if (driver->state != WXC_DRIVER_STATE_BUSY) in WXCi_ChildIndicate()
828 driver->target = WXC_DRIVER_STATE_PARENT; in WXCi_ChildIndicate()
833 driver->target = WXC_DRIVER_STATE_IDLE; in WXCi_ChildIndicate()
838 WXCi_ErrorQuit(driver); in WXCi_ChildIndicate()
855 WXCDriverWork *const driver = work; in WXCi_StartChildProc() local
858 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartChildProc()
868 MI_CpuCopy8(driver->target_bss->ssid, ssid_bak, sizeof(ssid_bak)); in WXCi_StartChildProc()
869 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTING, driver->target_bss); in WXCi_StartChildProc()
870 MI_CpuCopy8(driver->target_bss->ssid + 8, driver->ssid, WM_SIZE_CHILD_SSID); in WXCi_StartChildProc()
871 MI_CpuCopy8(ssid_bak, driver->target_bss->ssid, sizeof(ssid_bak)); in WXCi_StartChildProc()
876 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartChildProc()
877 wmResult = WM_StartConnect(WXCi_ChildIndicate, driver->target_bss, driver->ssid); in WXCi_StartChildProc()
878 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_CONNECT, wmResult); in WXCi_StartChildProc()
888 driver->own_aid = cb->aid; in WXCi_StartChildProc()
890 (u16 *)driver->mp_recv_work, driver->recv_size_max, in WXCi_StartChildProc()
891 (u16 *)driver->mp_send_work, driver->send_size_max, in WXCi_StartChildProc()
892 (u16)(driver->parent_param->CS_Flag ? 0 : 1)); in WXCi_StartChildProc()
893 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_MP, wmResult); in WXCi_StartChildProc()
902 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_CHILD, cb); in WXCi_StartChildProc()
920 WXCDriverWork *const driver = work; in WXCi_MeasureProc() local
927 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_MeasureProc()
928 driver->current_channel = 0; in WXCi_MeasureProc()
929 driver->measure_ratio_min = WXC_MAX_RATIO + 1; in WXCi_MeasureProc()
931 else if (WXCi_CheckWmCallbackResult(driver, cb)) in WXCi_MeasureProc()
936 if (driver->measure_ratio_min > cb->ccaBusyRatio) in WXCi_MeasureProc()
938 driver->measure_ratio_min = cb->ccaBusyRatio; in WXCi_MeasureProc()
939 driver->current_channel = channel; in WXCi_MeasureProc()
944 driver->need_measure_channel = FALSE; in WXCi_MeasureProc()
954 driver->need_measure_channel = FALSE; in WXCi_MeasureProc()
958 if (driver->need_measure_channel) in WXCi_MeasureProc()
972 (void)WXCi_CheckWmApiResult(driver, WM_APIID_MEASURE_CHANNEL, ret); in WXCi_MeasureProc()
988 WXCDriverWork *const driver = work; in WXCi_ScanProc() local
993 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ScanProc()
1000 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_ScanProc()
1001 driver->scan_found_num = 0; in WXCi_ScanProc()
1003 driver->scan_param->scanBuf = (WMBssDesc *)driver->scan_buf; in WXCi_ScanProc()
1004 driver->scan_param->scanBufSize = WM_SIZE_SCAN_EX_BUF; in WXCi_ScanProc()
1008 driver->scan_param->channelList = (u16)MATH_GetLeastSignificantBit(scan_channelList); in WXCi_ScanProc()
1011 driver->scan_param->maxChannelTime = WXC_SCAN_TIME_MAX; in WXCi_ScanProc()
1012 MI_CpuFill8(driver->scan_param->bssid, 0xFF, sizeof(driver->scan_param->bssid)); in WXCi_ScanProc()
1013 driver->scan_param->scanType = WM_SCANTYPE_PASSIVE; in WXCi_ScanProc()
1014 driver->scan_param->ssidLength = 0; in WXCi_ScanProc()
1015 MI_CpuFill8(driver->scan_param->ssid, 0xFF, sizeof(driver->scan_param->ssid)); in WXCi_ScanProc()
1016 wmResult = WM_StartScanEx(WXCi_ScanProc, driver->scan_param); in WXCi_ScanProc()
1017 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_SCAN_EX, wmResult); in WXCi_ScanProc()
1026 DC_InvalidateRange(driver->scan_buf, WM_SIZE_SCAN_EX_BUF); in WXCi_ScanProc()
1027 driver->scan_found_num = cb->bssDescCount; in WXCi_ScanProc()
1030 (void)WXCi_CheckWmApiResult(driver, WM_APIID_END_SCAN, wmResult); in WXCi_ScanProc()
1037 if (driver->target == WXC_DRIVER_STATE_CHILD) in WXCi_ScanProc()
1040 const u8 *scan_buf = driver->scan_buf; in WXCi_ScanProc()
1042 WXC_DRIVER_LOG("found:%d beacons\n", driver->scan_found_num); in WXCi_ScanProc()
1043 for (i = 0; i < driver->scan_found_num; ++i) in WXCi_ScanProc()
1056 (BOOL)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_BEACON_RECV, in WXCi_ScanProc()
1061 MI_CpuCopy8(p_desc, driver->target_bss, sizeof(WMBssDesc)); in WXCi_ScanProc()
1070 driver->scan_found_num = 0; in WXCi_ScanProc()
1071driver->scan_param->channelList = (u16)MATH_GetLeastSignificantBit(scan_channelList); in WXCi_ScanProc()
1073 wmResult = WM_StartScanEx(WXCi_ScanProc, driver->scan_param); in WXCi_ScanProc()
1074 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_SCAN_EX, wmResult); in WXCi_ScanProc()
1086 if (driver->target == WXC_DRIVER_STATE_CHILD) in WXCi_ScanProc()
1088 driver->target = WXC_DRIVER_STATE_IDLE; in WXCi_ScanProc()
1090 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_ScanProc()
1110 void WXC_InitDriver(WXCDriverWork * driver, WMParentParam *pp, WXCDriverEventFunc func, u32 dma) in WXC_InitDriver() argument
1119 work = driver; in WXC_InitDriver()
1120 MI_CpuClear32(driver, sizeof(WXCDriverWork)); in WXC_InitDriver()
1121 driver->own_aid = 0; in WXC_InitDriver()
1122 driver->send_busy = TRUE; in WXC_InitDriver()
1123 driver->callback = func; in WXC_InitDriver()
1124 driver->wm_dma = (u16)dma; in WXC_InitDriver()
1125 driver->send_size_max = (u16)sizeof(driver->mp_send_work); in WXC_InitDriver()
1126 driver->recv_size_max = (u16)sizeof(driver->mp_recv_work); in WXC_InitDriver()
1127 driver->state = WXC_DRIVER_STATE_END; in WXC_InitDriver()
1128 driver->parent_param = pp; in WXC_InitDriver()
1129 driver->parent_param->entryFlag = 1; in WXC_InitDriver()
1130 driver->parent_param->beaconPeriod = WXC_BEACON_PERIOD; in WXC_InitDriver()
1131 driver->parent_param->channel = 1; in WXC_InitDriver()
1144 void WXC_SetDriverTarget(WXCDriverWork * driver, WXCDriverState target) in WXC_SetDriverTarget() argument
1146 driver->target = target; in WXC_SetDriverTarget()
1148 if ((driver->state != WXC_DRIVER_STATE_BUSY) && (driver->state != driver->target)) in WXC_SetDriverTarget()
1150 WXCi_OnStateChanged(driver, driver->state, NULL); in WXC_SetDriverTarget()
1166 void WXC_SetDriverSsid(WXCDriverWork * driver, const void *buffer, u32 length) in WXC_SetDriverSsid() argument
1169 MI_CpuCopy8(buffer, driver->ssid, length); in WXC_SetDriverSsid()
1170 MI_CpuFill8(driver->ssid + length, 0x00, (u32)(WM_SIZE_CHILD_SSID - length)); in WXC_SetDriverSsid()