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()
152 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
158 driver->state = WXC_DRIVER_STATE_CHILD; // Cancel BUSY in WXCi_RecoverWmApiFailure()
159 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
168 driver->state = WXC_DRIVER_STATE_CHILD; in WXCi_RecoverWmApiFailure()
169 WXCi_Reset(driver); in WXCi_RecoverWmApiFailure()
174 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
180 WXCi_ErrorQuit(driver); in WXCi_RecoverWmApiFailure()
209 static BOOL WXCi_CheckWmApiResult(WXCDriverWork * driver, WMApiid id, WMErrCode err) in WXCi_CheckWmApiResult() argument
215 WXCi_RecoverWmApiFailure(driver, id, err); in WXCi_CheckWmApiResult()
231 static BOOL WXCi_CheckWmCallbackResult(WXCDriverWork * driver, void *arg) in WXCi_CheckWmCallbackResult() argument
238 WXCi_RecoverWmApiFailure(driver, (WMApiid)cb->apiid, (WMErrCode)cb->errcode); in WXCi_CheckWmCallbackResult()
254 static inline u32 WXCi_CallDriverEvent(WXCDriverWork * driver, WXCDriverEvent event, void *arg) in WXCi_CallDriverEvent() argument
257 if (driver->callback) in WXCi_CallDriverEvent()
259 result = (*driver->callback) (event, arg); in WXCi_CallDriverEvent()
273 static void WXCi_CallSendEvent(WXCDriverWork * driver) in WXCi_CallSendEvent() argument
275 if (!driver->send_busy) in WXCi_CallSendEvent()
283 const u16 max_length = (u16)((driver->own_aid == 0) ? in WXCi_CallSendEvent()
284 driver->parent_param->parentMaxSize : driver->target_bss->gameInfo.childMaxSize); in WXCi_CallSendEvent()
286 packet.bitmap = driver->peer_bitmap; in WXCi_CallSendEvent()
288 packet.buffer = driver->current_send_buf; in WXCi_CallSendEvent()
290 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DATA_SEND, &packet); in WXCi_CallSendEvent()
298 driver->send_busy = WXCi_CheckWmApiResult(driver, WM_APIID_SET_MP_DATA, ret); in WXCi_CallSendEvent()
314 static void WXCi_OnStateChanged(WXCDriverWork * driver, WXCDriverState state, void *arg) in WXCi_OnStateChanged() argument
316 driver->state = state; in WXCi_OnStateChanged()
319 if (driver->target == state) in WXCi_OnStateChanged()
324 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_END, NULL); in WXCi_OnStateChanged()
328 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_STOP, NULL); in WXCi_OnStateChanged()
332 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_IDLE, NULL); in WXCi_OnStateChanged()
336 driver->send_busy = FALSE; in WXCi_OnStateChanged()
337 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_PARENT, NULL); in WXCi_OnStateChanged()
341 driver->send_busy = FALSE; in WXCi_OnStateChanged()
342 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_STATE_CHILD, NULL); in WXCi_OnStateChanged()
344 driver->peer_bitmap |= (u16)(1 << 0); in WXCi_OnStateChanged()
345 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTED, arg); in WXCi_OnStateChanged()
346 WXCi_CallSendEvent(driver); in WXCi_OnStateChanged()
373 switch (driver->target) in WXCi_OnStateChanged()
387 switch (driver->target) in WXCi_OnStateChanged()
394 driver->need_measure_channel = TRUE; in WXCi_OnStateChanged()
395 if (driver->need_measure_channel) in WXCi_OnStateChanged()
426 WXCDriverWork *const driver = work; in WXCi_MPSendCallback() local
428 (void)WXCi_CheckWmCallbackResult(driver, arg); in WXCi_MPSendCallback()
429 driver->send_busy = FALSE; in WXCi_MPSendCallback()
430 if (driver->peer_bitmap != 0) in WXCi_MPSendCallback()
432 WXCi_CallSendEvent(driver); in WXCi_MPSendCallback()
448 WXCDriverWork *const driver = work; in WXCi_IndicateCallback() local
454 driver->target = WXC_DRIVER_STATE_ERROR; in WXCi_IndicateCallback()
455 driver->state = WXC_DRIVER_STATE_ERROR; in WXCi_IndicateCallback()
470 WXCDriverWork *const driver = work; in WXCi_PortCallback() local
472 if (WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_PortCallback()
483 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DATA_RECV, &packet); in WXCi_PortCallback()
490 WXC_DRIVER_LOG("disconnected(%02X-=%02X)\n", driver->peer_bitmap, (1 << cb->aid)); in WXCi_PortCallback()
491 driver->peer_bitmap &= (u16)~(1 << cb->aid); in WXCi_PortCallback()
492 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_DISCONNECTED, in WXCi_PortCallback()
510 WXCDriverWork *const driver = work; in WXCi_InitProc() local
513 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_InitProc()
520 driver->need_measure_channel = TRUE; in WXCi_InitProc()
521 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_InitProc()
522 wmResult = WM_Init(driver->wm_work, driver->wm_dma); in WXCi_InitProc()
523 (void)WXCi_CheckWmApiResult(driver, WM_APIID_INITIALIZE, wmResult); in WXCi_InitProc()
525 (void)WXCi_CheckWmApiResult(driver, WM_APIID_ENABLE, wmResult); in WXCi_InitProc()
532 if (WXCi_CheckWmApiResult(driver, WM_APIID_INDICATION, wmResult)) in WXCi_InitProc()
536 if (WXCi_CheckWmApiResult(driver, WM_APIID_PORT_SEND, wmResult)) in WXCi_InitProc()
538 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_STOP, NULL); in WXCi_InitProc()
556 WXCDriverWork *const driver = work; in WXCi_StartProc() local
559 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartProc()
565 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartProc()
567 (void)WXCi_CheckWmApiResult(driver, WM_APIID_POWER_ON, wmResult); in WXCi_StartProc()
572 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_StartProc()
588 WXCDriverWork *const driver = work; in WXCi_StopProc() local
591 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StopProc()
597 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StopProc()
599 (void)WXCi_CheckWmApiResult(driver, WM_APIID_POWER_OFF, wmResult); in WXCi_StopProc()
604 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_STOP, NULL); in WXCi_StopProc()
620 WXCDriverWork *const driver = work; in WXCi_EndProc() local
623 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_EndProc()
629 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_EndProc()
631 (void)WXCi_CheckWmApiResult(driver, WM_APIID_DISABLE, wmResult); in WXCi_EndProc()
638 if (WXCi_CheckWmApiResult(driver, WM_APIID_END, wmResult)) in WXCi_EndProc()
641 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_END, NULL); in WXCi_EndProc()
658 WXCDriverWork *const driver = work; in WXCi_ResetProc() local
661 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ResetProc()
667 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_ResetProc()
669 (void)WXCi_CheckWmApiResult(driver, WM_APIID_RESET, wmResult); in WXCi_ResetProc()
674 driver->own_aid = 0; in WXCi_ResetProc()
675 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_ResetProc()
691 WXCDriverWork *const driver = work; in WXCi_ParentIndicate() local
708 BOOL mp_start = (driver->peer_bitmap == 0); in WXCi_ParentIndicate()
709 WXC_DRIVER_LOG("connected(%02X+=%02X)\n", driver->peer_bitmap, (1 << cb->aid)); in WXCi_ParentIndicate()
710 driver->peer_bitmap |= (u16)(1 << cb->aid); in WXCi_ParentIndicate()
711 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTED, cb); in WXCi_ParentIndicate()
715 WXCi_CallSendEvent(driver); in WXCi_ParentIndicate()
724 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_BEACON_SEND, driver->parent_param); in WXCi_ParentIndicate()
741 WXCDriverWork *const driver = work; in WXCi_StartParentProc() local
744 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartParentProc()
750 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartParentProc()
752 driver->parent_param->channel = driver->current_channel; in WXCi_StartParentProc()
753 driver->parent_param->tgid = WM_GetNextTgid(); in WXCi_StartParentProc()
755 driver->current_channel, driver->parent_param->tgid, in WXCi_StartParentProc()
756 driver->parent_param->ggid); in WXCi_StartParentProc()
757 wmResult = WM_SetParentParameter(WXCi_StartParentProc, driver->parent_param); in WXCi_StartParentProc()
758 (void)WXCi_CheckWmApiResult(driver, WM_APIID_SET_P_PARAM, wmResult); in WXCi_StartParentProc()
768 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_PARENT, wmResult); in WXCi_StartParentProc()
777 driver->own_aid = 0; in WXCi_StartParentProc()
778 driver->peer_bitmap = 0; in WXCi_StartParentProc()
780 (u16 *)driver->mp_recv_work, driver->recv_size_max, in WXCi_StartParentProc()
781 (u16 *)driver->mp_send_work, driver->send_size_max, in WXCi_StartParentProc()
782 (u16)(driver->parent_param->CS_Flag ? 0 : 1)); in WXCi_StartParentProc()
783 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_MP, wmResult); in WXCi_StartParentProc()
792 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_PARENT, NULL); in WXCi_StartParentProc()
810 WXCDriverWork *const driver = work; in WXCi_ChildIndicate() local
812 if (WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ChildIndicate()
823 if (driver->state != WXC_DRIVER_STATE_CHILD) in WXCi_ChildIndicate()
832 if (driver->state != WXC_DRIVER_STATE_BUSY) in WXCi_ChildIndicate()
834 driver->target = WXC_DRIVER_STATE_PARENT; in WXCi_ChildIndicate()
839 driver->target = WXC_DRIVER_STATE_IDLE; in WXCi_ChildIndicate()
844 WXCi_ErrorQuit(driver); in WXCi_ChildIndicate()
861 WXCDriverWork *const driver = work; in WXCi_StartChildProc() local
864 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_StartChildProc()
874 MI_CpuCopy8(driver->target_bss->ssid, ssid_bak, sizeof(ssid_bak)); in WXCi_StartChildProc()
875 (void)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_CONNECTING, driver->target_bss); in WXCi_StartChildProc()
876 MI_CpuCopy8(driver->target_bss->ssid + 8, driver->ssid, WM_SIZE_CHILD_SSID); in WXCi_StartChildProc()
877 MI_CpuCopy8(ssid_bak, driver->target_bss->ssid, sizeof(ssid_bak)); in WXCi_StartChildProc()
882 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_StartChildProc()
883 wmResult = WM_StartConnect(WXCi_ChildIndicate, driver->target_bss, driver->ssid); in WXCi_StartChildProc()
884 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_CONNECT, wmResult); in WXCi_StartChildProc()
894 driver->own_aid = cb->aid; in WXCi_StartChildProc()
896 (u16 *)driver->mp_recv_work, driver->recv_size_max, in WXCi_StartChildProc()
897 (u16 *)driver->mp_send_work, driver->send_size_max, in WXCi_StartChildProc()
898 (u16)(driver->parent_param->CS_Flag ? 0 : 1)); in WXCi_StartChildProc()
899 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_MP, wmResult); in WXCi_StartChildProc()
908 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_CHILD, cb); in WXCi_StartChildProc()
926 WXCDriverWork *const driver = work; in WXCi_MeasureProc() local
933 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_MeasureProc()
934 driver->current_channel = 0; in WXCi_MeasureProc()
935 driver->measure_ratio_min = WXC_MAX_RATIO + 1; in WXCi_MeasureProc()
937 else if (WXCi_CheckWmCallbackResult(driver, cb)) in WXCi_MeasureProc()
942 if (driver->measure_ratio_min > cb->ccaBusyRatio) in WXCi_MeasureProc()
944 driver->measure_ratio_min = cb->ccaBusyRatio; in WXCi_MeasureProc()
945 driver->current_channel = channel; in WXCi_MeasureProc()
950 driver->need_measure_channel = FALSE; in WXCi_MeasureProc()
960 driver->need_measure_channel = FALSE; in WXCi_MeasureProc()
964 if (driver->need_measure_channel) in WXCi_MeasureProc()
978 (void)WXCi_CheckWmApiResult(driver, WM_APIID_MEASURE_CHANNEL, ret); in WXCi_MeasureProc()
994 WXCDriverWork *const driver = work; in WXCi_ScanProc() local
999 if (!arg || WXCi_CheckWmCallbackResult(driver, arg)) in WXCi_ScanProc()
1006 driver->state = WXC_DRIVER_STATE_BUSY; in WXCi_ScanProc()
1007 driver->scan_found_num = 0; in WXCi_ScanProc()
1009 driver->scan_param->scanBuf = (WMBssDesc *)driver->scan_buf; in WXCi_ScanProc()
1010 driver->scan_param->scanBufSize = WM_SIZE_SCAN_EX_BUF; in WXCi_ScanProc()
1014 driver->scan_param->channelList = (u16)MATH_GetLeastSignificantBit(scan_channelList); in WXCi_ScanProc()
1017 driver->scan_param->maxChannelTime = WXC_SCAN_TIME_MAX; in WXCi_ScanProc()
1018 MI_CpuFill8(driver->scan_param->bssid, 0xFF, sizeof(driver->scan_param->bssid)); in WXCi_ScanProc()
1019 driver->scan_param->scanType = WM_SCANTYPE_PASSIVE; in WXCi_ScanProc()
1020 driver->scan_param->ssidLength = 0; in WXCi_ScanProc()
1021 MI_CpuFill8(driver->scan_param->ssid, 0xFF, sizeof(driver->scan_param->ssid)); in WXCi_ScanProc()
1022 wmResult = WM_StartScanEx(WXCi_ScanProc, driver->scan_param); in WXCi_ScanProc()
1023 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_SCAN_EX, wmResult); in WXCi_ScanProc()
1032 DC_InvalidateRange(driver->scan_buf, WM_SIZE_SCAN_EX_BUF); in WXCi_ScanProc()
1033 driver->scan_found_num = cb->bssDescCount; in WXCi_ScanProc()
1036 (void)WXCi_CheckWmApiResult(driver, WM_APIID_END_SCAN, wmResult); in WXCi_ScanProc()
1043 if (driver->target == WXC_DRIVER_STATE_CHILD) in WXCi_ScanProc()
1046 const u8 *scan_buf = driver->scan_buf; in WXCi_ScanProc()
1048 WXC_DRIVER_LOG("found:%d beacons\n", driver->scan_found_num); in WXCi_ScanProc()
1049 for (i = 0; i < driver->scan_found_num; ++i) in WXCi_ScanProc()
1062 (BOOL)WXCi_CallDriverEvent(driver, WXC_DRIVER_EVENT_BEACON_RECV, in WXCi_ScanProc()
1067 MI_CpuCopy8(p_desc, driver->target_bss, sizeof(WMBssDesc)); in WXCi_ScanProc()
1076 driver->scan_found_num = 0; in WXCi_ScanProc()
1077 … driver->scan_param->channelList = (u16)MATH_GetLeastSignificantBit(scan_channelList); in WXCi_ScanProc()
1079 wmResult = WM_StartScanEx(WXCi_ScanProc, driver->scan_param); in WXCi_ScanProc()
1080 (void)WXCi_CheckWmApiResult(driver, WM_APIID_START_SCAN_EX, wmResult); in WXCi_ScanProc()
1092 if (driver->target == WXC_DRIVER_STATE_CHILD) in WXCi_ScanProc()
1094 driver->target = WXC_DRIVER_STATE_IDLE; in WXCi_ScanProc()
1096 WXCi_OnStateChanged(driver, WXC_DRIVER_STATE_IDLE, NULL); in WXCi_ScanProc()
1116 void WXC_InitDriver(WXCDriverWork * driver, WMParentParam *pp, WXCDriverEventFunc func, u32 dma) in WXC_InitDriver() argument
1125 work = driver; in WXC_InitDriver()
1126 MI_CpuClear32(driver, sizeof(WXCDriverWork)); in WXC_InitDriver()
1127 driver->own_aid = 0; in WXC_InitDriver()
1128 driver->send_busy = TRUE; in WXC_InitDriver()
1129 driver->callback = func; in WXC_InitDriver()
1130 driver->wm_dma = (u16)dma; in WXC_InitDriver()
1131 driver->send_size_max = (u16)sizeof(driver->mp_send_work); in WXC_InitDriver()
1132 driver->recv_size_max = (u16)sizeof(driver->mp_recv_work); in WXC_InitDriver()
1133 driver->state = WXC_DRIVER_STATE_END; in WXC_InitDriver()
1134 driver->parent_param = pp; in WXC_InitDriver()
1135 driver->parent_param->entryFlag = 1; in WXC_InitDriver()
1136 driver->parent_param->beaconPeriod = WXC_BEACON_PERIOD; in WXC_InitDriver()
1137 driver->parent_param->channel = 1; in WXC_InitDriver()
1150 void WXC_SetDriverTarget(WXCDriverWork * driver, WXCDriverState target) in WXC_SetDriverTarget() argument
1152 driver->target = target; in WXC_SetDriverTarget()
1154 if ((driver->state != WXC_DRIVER_STATE_BUSY) && (driver->state != driver->target)) in WXC_SetDriverTarget()
1156 WXCi_OnStateChanged(driver, driver->state, NULL); in WXC_SetDriverTarget()
1172 void WXC_SetDriverSsid(WXCDriverWork * driver, const void *buffer, u32 length) in WXC_SetDriverSsid() argument
1175 MI_CpuCopy8(buffer, driver->ssid, length); in WXC_SetDriverSsid()
1176 MI_CpuFill8(driver->ssid + length, 0x00, (u32)(WM_SIZE_CHILD_SSID - length)); in WXC_SetDriverSsid()