Lines Matching refs:self

50 static int irlap_state_ndm    (struct irlap_cb *self, IRLAP_EVENT event,
52 static int irlap_state_query (struct irlap_cb *self, IRLAP_EVENT event,
54 static int irlap_state_reply (struct irlap_cb *self, IRLAP_EVENT event,
56 static int irlap_state_conn (struct irlap_cb *self, IRLAP_EVENT event,
58 static int irlap_state_setup (struct irlap_cb *self, IRLAP_EVENT event,
60 static int irlap_state_offline(struct irlap_cb *self, IRLAP_EVENT event,
62 static int irlap_state_xmit_p (struct irlap_cb *self, IRLAP_EVENT event,
64 static int irlap_state_pclose (struct irlap_cb *self, IRLAP_EVENT event,
66 static int irlap_state_nrm_p (struct irlap_cb *self, IRLAP_EVENT event,
68 static int irlap_state_reset_wait(struct irlap_cb *self, IRLAP_EVENT event,
70 static int irlap_state_reset (struct irlap_cb *self, IRLAP_EVENT event,
72 static int irlap_state_nrm_s (struct irlap_cb *self, IRLAP_EVENT event,
74 static int irlap_state_xmit_s (struct irlap_cb *self, IRLAP_EVENT event,
76 static int irlap_state_sclose (struct irlap_cb *self, IRLAP_EVENT event,
140 static int (*state[])(struct irlap_cb *self, IRLAP_EVENT event,
168 struct irlap_cb *self = (struct irlap_cb *) data; in irlap_poll_timer_expired() local
170 IRDA_ASSERT(self != NULL, return;); in irlap_poll_timer_expired()
171 IRDA_ASSERT(self->magic == LAP_MAGIC, return;); in irlap_poll_timer_expired()
173 irlap_do_event(self, POLL_TIMER_EXPIRED, NULL, NULL); in irlap_poll_timer_expired()
182 static void irlap_start_poll_timer(struct irlap_cb *self, int timeout) in irlap_start_poll_timer() argument
184 IRDA_ASSERT(self != NULL, return;); in irlap_start_poll_timer()
185 IRDA_ASSERT(self->magic == LAP_MAGIC, return;); in irlap_start_poll_timer()
192 if (skb_queue_empty(&self->txq) || self->remote_busy) { in irlap_start_poll_timer()
193 if (self->fast_RR == TRUE) { in irlap_start_poll_timer()
198 if (self->fast_RR_timeout < timeout) { in irlap_start_poll_timer()
203 self->fast_RR_timeout += in irlap_start_poll_timer()
207 timeout = self->fast_RR_timeout; in irlap_start_poll_timer()
210 self->fast_RR = TRUE; in irlap_start_poll_timer()
213 self->fast_RR_timeout = 0; in irlap_start_poll_timer()
217 self->fast_RR = FALSE; in irlap_start_poll_timer()
223 irlap_do_event(self, POLL_TIMER_EXPIRED, NULL, NULL); in irlap_start_poll_timer()
225 irda_start_timer(&self->poll_timer, timeout, self, in irlap_start_poll_timer()
235 void irlap_do_event(struct irlap_cb *self, IRLAP_EVENT event, in irlap_do_event() argument
240 if (!self || self->magic != LAP_MAGIC) in irlap_do_event()
244 irlap_event[event], irlap_state[self->state]); in irlap_do_event()
246 ret = (*state[self->state])(self, event, skb, info); in irlap_do_event()
251 switch (self->state) { in irlap_do_event()
262 skb_queue_len(&self->txq)); in irlap_do_event()
264 if (!skb_queue_empty(&self->txq)) { in irlap_do_event()
266 self->local_busy = TRUE; in irlap_do_event()
284 while ((skb = skb_dequeue(&self->txq)) != NULL) { in irlap_do_event()
286 ret = (*state[self->state])(self, SEND_I_CMD, in irlap_do_event()
294 irlmp_flow_indication(self->notify.instance, in irlap_do_event()
301 self->local_busy = FALSE; in irlap_do_event()
302 } else if (self->disconnect_pending) { in irlap_do_event()
303 self->disconnect_pending = FALSE; in irlap_do_event()
305 ret = (*state[self->state])(self, DISCONNECT_REQUEST, in irlap_do_event()
324 static int irlap_state_ndm(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_ndm() argument
330 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_ndm()
331 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_ndm()
335 IRDA_ASSERT(self->netdev != NULL, return -1;); in irlap_state_ndm()
337 if (self->media_busy) { in irlap_state_ndm()
345 irlap_next_state(self, LAP_NDM); in irlap_state_ndm()
347 irlap_disconnect_indication(self, LAP_MEDIA_BUSY); in irlap_state_ndm()
349 irlap_send_snrm_frame(self, &self->qos_rx); in irlap_state_ndm()
352 irlap_start_final_timer(self, self->final_timeout); in irlap_state_ndm()
354 self->retry_count = 0; in irlap_state_ndm()
355 irlap_next_state(self, LAP_SETUP); in irlap_state_ndm()
361 self->daddr = info->daddr; in irlap_state_ndm()
362 self->caddr = info->caddr; in irlap_state_ndm()
364 irlap_next_state(self, LAP_CONN); in irlap_state_ndm()
366 irlap_connect_indication(self, skb); in irlap_state_ndm()
375 if (self->media_busy) { in irlap_state_ndm()
381 irlap_discovery_confirm(self, NULL); in irlap_state_ndm()
388 self->S = info->S; in irlap_state_ndm()
389 self->s = info->s; in irlap_state_ndm()
390 irlap_send_discovery_xid_frame(self, info->S, info->s, TRUE, in irlap_state_ndm()
392 self->frame_sent = FALSE; in irlap_state_ndm()
393 self->s++; in irlap_state_ndm()
395 irlap_start_slot_timer(self, self->slot_timeout); in irlap_state_ndm()
396 irlap_next_state(self, LAP_QUERY); in irlap_state_ndm()
403 self->slot = irlap_generate_rand_time_slot(info->S, in irlap_state_ndm()
405 if (self->slot == info->s) { in irlap_state_ndm()
409 irlap_send_discovery_xid_frame(self, info->S, in irlap_state_ndm()
410 self->slot, in irlap_state_ndm()
413 self->frame_sent = TRUE; in irlap_state_ndm()
415 self->frame_sent = FALSE; in irlap_state_ndm()
422 irlap_start_query_timer(self, info->S, info->s); in irlap_state_ndm()
423 irlap_next_state(self, LAP_REPLY); in irlap_state_ndm()
447 irlap_discovery_indication(self, info->discovery); in irlap_state_ndm()
462 if (!skb_queue_empty(&self->txq_ultra)) { in irlap_state_ndm()
466 ret = (*state[self->state])(self, SEND_UI_FRAME, in irlap_state_ndm()
472 if (self->connect_pending) { in irlap_state_ndm()
473 self->connect_pending = FALSE; in irlap_state_ndm()
478 if (self->disconnect_pending) in irlap_state_ndm()
479 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_ndm()
481 ret = (*state[self->state])(self, in irlap_state_ndm()
484 self->disconnect_pending = FALSE; in irlap_state_ndm()
503 for (i=0; ((i<2) && (self->media_busy == FALSE)); i++) { in irlap_state_ndm()
504 skb = skb_dequeue(&self->txq_ultra); in irlap_state_ndm()
506 irlap_send_ui_frame(self, skb, CBROADCAST, in irlap_state_ndm()
515 irda_device_set_media_busy(self->netdev, TRUE); in irlap_state_ndm()
525 irlap_unitdata_indication(self, skb); in irlap_state_ndm()
536 irlap_send_test_frame(self, CBROADCAST, info->daddr, skb); in irlap_state_ndm()
557 static int irlap_state_query(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_query() argument
562 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_query()
563 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_query()
573 if (!self->discovery_log) { in irlap_state_query()
578 hashbin_insert(self->discovery_log, in irlap_state_query()
605 irlap_discovery_indication(self, info->discovery); in irlap_state_query()
614 if (irda_device_is_receiving(self->netdev) && !self->add_wait) { in irlap_state_query()
617 irlap_start_slot_timer(self, msecs_to_jiffies(10)); in irlap_state_query()
618 self->add_wait = TRUE; in irlap_state_query()
621 self->add_wait = FALSE; in irlap_state_query()
623 if (self->s < self->S) { in irlap_state_query()
624 irlap_send_discovery_xid_frame(self, self->S, in irlap_state_query()
625 self->s, TRUE, in irlap_state_query()
626 self->discovery_cmd); in irlap_state_query()
627 self->s++; in irlap_state_query()
628 irlap_start_slot_timer(self, self->slot_timeout); in irlap_state_query()
631 irlap_next_state(self, LAP_QUERY); in irlap_state_query()
634 irlap_send_discovery_xid_frame(self, self->S, 0xff, in irlap_state_query()
636 self->discovery_cmd); in irlap_state_query()
639 irlap_next_state(self, LAP_NDM); in irlap_state_query()
645 irlap_discovery_confirm(self, self->discovery_log); in irlap_state_query()
648 self->discovery_log = NULL; in irlap_state_query()
668 static int irlap_state_reply(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_reply() argument
674 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_reply()
675 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_reply()
681 irlap_next_state(self, LAP_NDM); in irlap_state_reply()
687 del_timer(&self->query_timer); in irlap_state_reply()
692 irlap_next_state(self, LAP_NDM); in irlap_state_reply()
694 irlap_discovery_indication(self, info->discovery); in irlap_state_reply()
697 if ((info->s >= self->slot) && (!self->frame_sent)) { in irlap_state_reply()
701 irlap_send_discovery_xid_frame(self, info->S, in irlap_state_reply()
702 self->slot, in irlap_state_reply()
706 self->frame_sent = TRUE; in irlap_state_reply()
711 irlap_start_query_timer(self, info->S, info->s); in irlap_state_reply()
734 static int irlap_state_conn(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_conn() argument
741 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_conn()
742 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_conn()
748 IRDA_ASSERT(self->netdev != NULL, return -1;); in irlap_state_conn()
750 irlap_qos_negotiate(self, skb); in irlap_state_conn()
752 irlap_initiate_connection_state(self); in irlap_state_conn()
758 irlap_apply_connection_parameters(self, FALSE); in irlap_state_conn()
764 irlap_send_ua_response_frame(self, &self->qos_rx); in irlap_state_conn()
786 irlap_send_ua_response_frame(self, &self->qos_rx); in irlap_state_conn()
794 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_conn()
795 irlap_next_state(self, LAP_NRM_S); in irlap_state_conn()
801 irlap_next_state(self, LAP_NDM); in irlap_state_conn()
806 irlap_send_dm_frame(self); in irlap_state_conn()
807 irlap_next_state( self, LAP_NDM); in irlap_state_conn()
808 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_conn()
828 static int irlap_state_setup(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_setup() argument
833 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_setup()
834 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_setup()
838 if (self->retry_count < self->N3) { in irlap_state_setup()
845 irlap_start_backoff_timer(self, msecs_to_jiffies(20 + in irlap_state_setup()
849 irlap_next_state(self, LAP_NDM); in irlap_state_setup()
851 irlap_disconnect_indication(self, LAP_FOUND_NONE); in irlap_state_setup()
855 irlap_send_snrm_frame(self, &self->qos_rx); in irlap_state_setup()
856 irlap_start_final_timer(self, self->final_timeout); in irlap_state_setup()
857 self->retry_count++; in irlap_state_setup()
869 if (info &&(info->daddr > self->saddr)) { in irlap_state_setup()
870 del_timer(&self->final_timer); in irlap_state_setup()
871 irlap_initiate_connection_state(self); in irlap_state_setup()
873 IRDA_ASSERT(self->netdev != NULL, return -1;); in irlap_state_setup()
877 irlap_qos_negotiate(self, skb); in irlap_state_setup()
880 irlap_apply_connection_parameters(self, FALSE); in irlap_state_setup()
881 irlap_send_ua_response_frame(self, &self->qos_rx); in irlap_state_setup()
883 irlap_next_state(self, LAP_NRM_S); in irlap_state_setup()
884 irlap_connect_confirm(self, skb); in irlap_state_setup()
891 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_setup()
894 irlap_next_state(self, LAP_SETUP); in irlap_state_setup()
899 del_timer(&self->final_timer); in irlap_state_setup()
902 irlap_initiate_connection_state(self); in irlap_state_setup()
909 IRDA_ASSERT(self->netdev != NULL, return -1;); in irlap_state_setup()
911 irlap_qos_negotiate(self, skb); in irlap_state_setup()
914 irlap_apply_connection_parameters(self, TRUE); in irlap_state_setup()
915 self->retry_count = 0; in irlap_state_setup()
923 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_setup()
926 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_setup()
934 irlap_start_final_timer(self, self->final_timeout/2); in irlap_state_setup()
935 irlap_next_state(self, LAP_NRM_P); in irlap_state_setup()
937 irlap_connect_confirm(self, skb); in irlap_state_setup()
941 del_timer(&self->final_timer); in irlap_state_setup()
942 irlap_next_state(self, LAP_NDM); in irlap_state_setup()
944 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_setup()
962 static int irlap_state_offline(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_offline() argument
978 static int irlap_state_xmit_p(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_xmit_p() argument
988 if ((self->window > 0) && (!self->remote_busy)) { in irlap_state_xmit_p()
1005 skb_next = skb_peek(&self->txq); in irlap_state_xmit_p()
1018 self->bytes_left)); in irlap_state_xmit_p()
1027 if((!nextfit) && (skb->len > self->bytes_left)) { in irlap_state_xmit_p()
1031 skb_queue_head(&self->txq, skb_get(skb)); in irlap_state_xmit_p()
1051 self->bytes_left -= skb->len; in irlap_state_xmit_p()
1055 nextfit = !skb_queue_empty(&self->txq); in irlap_state_xmit_p()
1061 if ((self->window > 1) && (nextfit)) { in irlap_state_xmit_p()
1063 irlap_send_data_primary(self, skb); in irlap_state_xmit_p()
1064 irlap_next_state(self, LAP_XMIT_P); in irlap_state_xmit_p()
1067 irlap_send_data_primary_poll(self, skb); in irlap_state_xmit_p()
1077 self->fast_RR = FALSE; in irlap_state_xmit_p()
1082 skb_queue_head(&self->txq, skb_get(skb)); in irlap_state_xmit_p()
1094 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_xmit_p()
1096 self->window = self->window_size; in irlap_state_xmit_p()
1099 self->bytes_left = self->line_capacity; in irlap_state_xmit_p()
1101 irlap_start_final_timer(self, self->final_timeout); in irlap_state_xmit_p()
1102 irlap_next_state(self, LAP_NRM_P); in irlap_state_xmit_p()
1105 del_timer(&self->poll_timer); in irlap_state_xmit_p()
1106 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_xmit_p()
1107 irlap_send_disc_frame(self); in irlap_state_xmit_p()
1108 irlap_flush_all_queues(self); in irlap_state_xmit_p()
1109 irlap_start_final_timer(self, self->final_timeout); in irlap_state_xmit_p()
1110 self->retry_count = 0; in irlap_state_xmit_p()
1111 irlap_next_state(self, LAP_PCLOSE); in irlap_state_xmit_p()
1132 static int irlap_state_pclose(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_pclose() argument
1137 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_pclose()
1138 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_pclose()
1143 del_timer(&self->final_timer); in irlap_state_pclose()
1146 irlap_apply_default_connection_parameters(self); in irlap_state_pclose()
1149 irlap_next_state(self, LAP_NDM); in irlap_state_pclose()
1151 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_pclose()
1154 if (self->retry_count < self->N3) { in irlap_state_pclose()
1155 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_pclose()
1156 irlap_send_disc_frame(self); in irlap_state_pclose()
1157 irlap_start_final_timer(self, self->final_timeout); in irlap_state_pclose()
1158 self->retry_count++; in irlap_state_pclose()
1161 irlap_apply_default_connection_parameters(self); in irlap_state_pclose()
1164 irlap_next_state(self, LAP_NDM); in irlap_state_pclose()
1166 irlap_disconnect_indication(self, LAP_NO_RESPONSE); in irlap_state_pclose()
1187 static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_nrm_p() argument
1204 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1205 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1216 self->fast_RR = FALSE; in irlap_state_nrm_p()
1220 ns_status = irlap_validate_ns_received(self, info->ns); in irlap_state_nrm_p()
1221 nr_status = irlap_validate_nr_received(self, info->nr); in irlap_state_nrm_p()
1229 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_p()
1232 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1239 self->retry_count = 0; in irlap_state_nrm_p()
1240 self->ack_required = TRUE; in irlap_state_nrm_p()
1245 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1247 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_p()
1250 del_timer(&self->final_timer); in irlap_state_nrm_p()
1252 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1258 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_p()
1268 irlap_next_state(self, LAP_XMIT_P); in irlap_state_nrm_p()
1273 irlap_start_poll_timer(self, self->poll_timeout); in irlap_state_nrm_p()
1282 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1290 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1296 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1298 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1299 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1301 self->ack_required = FALSE; in irlap_state_nrm_p()
1303 irlap_start_final_timer(self, self->final_timeout); in irlap_state_nrm_p()
1304 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1314 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_p()
1317 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1320 irlap_resend_rejected_frames(self, CMD_FRAME); in irlap_state_nrm_p()
1322 self->ack_required = FALSE; in irlap_state_nrm_p()
1328 irlap_start_final_timer(self, 2 * self->final_timeout); in irlap_state_nrm_p()
1331 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1333 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_p()
1341 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_p()
1344 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1346 self->ack_required = FALSE; in irlap_state_nrm_p()
1349 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1351 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_p()
1366 irlap_resend_rejected_frames(self, CMD_FRAME); in irlap_state_nrm_p()
1370 irlap_start_final_timer(self, 2 * self->final_timeout); in irlap_state_nrm_p()
1373 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1378 self->ack_required = FALSE; in irlap_state_nrm_p()
1388 del_timer(&self->final_timer); in irlap_state_nrm_p()
1390 irlap_next_state(self, LAP_RESET_WAIT); in irlap_state_nrm_p()
1392 irlap_disconnect_indication(self, LAP_RESET_INDICATION); in irlap_state_nrm_p()
1393 self->xmitflag = TRUE; in irlap_state_nrm_p()
1395 del_timer(&self->final_timer); in irlap_state_nrm_p()
1397 irlap_disconnect_indication(self, LAP_RESET_INDICATION); in irlap_state_nrm_p()
1399 self->xmitflag = FALSE; in irlap_state_nrm_p()
1410 irlap_data_indication(self, skb, TRUE); in irlap_state_nrm_p()
1411 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1413 del_timer(&self->final_timer); in irlap_state_nrm_p()
1414 irlap_data_indication(self, skb, TRUE); in irlap_state_nrm_p()
1415 irlap_next_state(self, LAP_XMIT_P); in irlap_state_nrm_p()
1417 __func__, irlap_state[self->state]); in irlap_state_nrm_p()
1418 irlap_start_poll_timer(self, self->poll_timeout); in irlap_state_nrm_p()
1426 self->remote_busy = FALSE; in irlap_state_nrm_p()
1429 del_timer(&self->final_timer); in irlap_state_nrm_p()
1434 ret = irlap_validate_nr_received(self, info->nr); in irlap_state_nrm_p()
1437 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1444 self->retry_count = 0; in irlap_state_nrm_p()
1445 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1447 irlap_next_state(self, LAP_XMIT_P); in irlap_state_nrm_p()
1450 irlap_start_poll_timer(self, self->poll_timeout); in irlap_state_nrm_p()
1458 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1461 self->retry_count, info->nr, self->va, in irlap_state_nrm_p()
1462 self->vs, self->vr); in irlap_state_nrm_p()
1465 irlap_resend_rejected_frames(self, CMD_FRAME); in irlap_state_nrm_p()
1466 irlap_start_final_timer(self, self->final_timeout * 2); in irlap_state_nrm_p()
1468 irlap_next_state(self, LAP_NRM_P); in irlap_state_nrm_p()
1473 irlap_next_state(self, LAP_RESET_WAIT); in irlap_state_nrm_p()
1475 irlap_disconnect_indication(self, LAP_RESET_INDICATION); in irlap_state_nrm_p()
1476 self->xmitflag = TRUE; in irlap_state_nrm_p()
1483 del_timer(&self->final_timer); in irlap_state_nrm_p()
1484 self->remote_busy = TRUE; in irlap_state_nrm_p()
1487 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1488 irlap_next_state(self, LAP_XMIT_P); in irlap_state_nrm_p()
1491 irlap_start_poll_timer(self, self->poll_timeout); in irlap_state_nrm_p()
1494 del_timer(&self->final_timer); in irlap_state_nrm_p()
1495 self->xmitflag = TRUE; in irlap_state_nrm_p()
1496 irlap_next_state(self, LAP_RESET_WAIT); in irlap_state_nrm_p()
1497 irlap_reset_indication(self); in irlap_state_nrm_p()
1506 if (irda_device_is_receiving(self->netdev) && !self->add_wait) { in irlap_state_nrm_p()
1508 irlap_start_final_timer(self, msecs_to_jiffies(300)); in irlap_state_nrm_p()
1515 self->add_wait = TRUE; in irlap_state_nrm_p()
1518 self->add_wait = FALSE; in irlap_state_nrm_p()
1521 if (self->retry_count < self->N2) { in irlap_state_nrm_p()
1522 if (skb_peek(&self->wx_list) == NULL) { in irlap_state_nrm_p()
1525 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1526 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1529 irlap_resend_rejected_frames(self, CMD_FRAME); in irlap_state_nrm_p()
1532 irlap_start_final_timer(self, self->final_timeout); in irlap_state_nrm_p()
1533 self->retry_count++; in irlap_state_nrm_p()
1535 self->retry_count); in irlap_state_nrm_p()
1543 if((self->retry_count % self->N1) == 0) in irlap_state_nrm_p()
1544 irlap_status_indication(self, in irlap_state_nrm_p()
1549 irlap_apply_default_connection_parameters(self); in irlap_state_nrm_p()
1552 irlap_next_state(self, LAP_NDM); in irlap_state_nrm_p()
1553 irlap_disconnect_indication(self, LAP_NO_RESPONSE); in irlap_state_nrm_p()
1557 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1558 if (self->remote_busy) { in irlap_state_nrm_p()
1559 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1560 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1562 irlap_resend_rejected_frames(self, CMD_FRAME); in irlap_state_nrm_p()
1563 irlap_start_final_timer(self, 2 * self->final_timeout); in irlap_state_nrm_p()
1566 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_p()
1567 if (self->remote_busy) { in irlap_state_nrm_p()
1568 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_p()
1569 irlap_send_rr_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1571 irlap_resend_rejected_frame(self, CMD_FRAME); in irlap_state_nrm_p()
1572 irlap_start_final_timer(self, 2 * self->final_timeout); in irlap_state_nrm_p()
1577 irlap_flush_all_queues(self); in irlap_state_nrm_p()
1578 irlap_next_state(self, LAP_XMIT_P); in irlap_state_nrm_p()
1580 irlap_disconnect_request(self); in irlap_state_nrm_p()
1599 static int irlap_state_reset_wait(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_reset_wait() argument
1606 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_reset_wait()
1607 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_reset_wait()
1611 if (self->xmitflag) { in irlap_state_reset_wait()
1612 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_reset_wait()
1613 irlap_send_snrm_frame(self, NULL); in irlap_state_reset_wait()
1614 irlap_start_final_timer(self, self->final_timeout); in irlap_state_reset_wait()
1615 irlap_next_state(self, LAP_RESET); in irlap_state_reset_wait()
1617 irlap_start_final_timer(self, self->final_timeout); in irlap_state_reset_wait()
1618 irlap_next_state(self, LAP_RESET); in irlap_state_reset_wait()
1622 irlap_wait_min_turn_around( self, &self->qos_tx); in irlap_state_reset_wait()
1623 irlap_send_disc_frame( self); in irlap_state_reset_wait()
1624 irlap_flush_all_queues( self); in irlap_state_reset_wait()
1625 irlap_start_final_timer( self, self->final_timeout); in irlap_state_reset_wait()
1626 self->retry_count = 0; in irlap_state_reset_wait()
1627 irlap_next_state( self, LAP_PCLOSE); in irlap_state_reset_wait()
1646 static int irlap_state_reset(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_reset() argument
1653 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_reset()
1654 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_reset()
1658 del_timer(&self->final_timer); in irlap_state_reset()
1660 irlap_apply_default_connection_parameters(self); in irlap_state_reset()
1663 irlap_next_state(self, LAP_NDM); in irlap_state_reset()
1665 irlap_disconnect_indication(self, LAP_NO_RESPONSE); in irlap_state_reset()
1669 del_timer(&self->final_timer); in irlap_state_reset()
1672 irlap_initiate_connection_state(self); in irlap_state_reset()
1676 self->remote_busy = FALSE; in irlap_state_reset()
1678 irlap_next_state(self, LAP_XMIT_P); in irlap_state_reset()
1680 irlap_start_poll_timer(self, self->poll_timeout); in irlap_state_reset()
1684 if (self->retry_count < 3) { in irlap_state_reset()
1685 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_reset()
1687 IRDA_ASSERT(self->netdev != NULL, return -1;); in irlap_state_reset()
1688 irlap_send_snrm_frame(self, self->qos_dev); in irlap_state_reset()
1690 self->retry_count++; /* Experimental!! */ in irlap_state_reset()
1692 irlap_start_final_timer(self, self->final_timeout); in irlap_state_reset()
1693 irlap_next_state(self, LAP_RESET); in irlap_state_reset()
1694 } else if (self->retry_count >= self->N3) { in irlap_state_reset()
1695 irlap_apply_default_connection_parameters(self); in irlap_state_reset()
1698 irlap_next_state(self, LAP_NDM); in irlap_state_reset()
1700 irlap_disconnect_indication(self, LAP_NO_RESPONSE); in irlap_state_reset()
1710 irlap_initiate_connection_state(self); in irlap_state_reset()
1711 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_reset()
1712 irlap_send_ua_response_frame(self, &self->qos_rx); in irlap_state_reset()
1714 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_reset()
1715 irlap_next_state(self, LAP_NDM); in irlap_state_reset()
1738 static int irlap_state_xmit_s(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_xmit_s() argument
1745 IRDA_ASSERT(self != NULL, return -ENODEV;); in irlap_state_xmit_s()
1746 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;); in irlap_state_xmit_s()
1753 if ((self->window > 0) && (!self->remote_busy)) { in irlap_state_xmit_s()
1768 skb_next = skb_peek(&self->txq); in irlap_state_xmit_s()
1771 self->bytes_left)); in irlap_state_xmit_s()
1778 if((!nextfit) && (skb->len > self->bytes_left)) { in irlap_state_xmit_s()
1782 skb_queue_head(&self->txq, skb_get(skb)); in irlap_state_xmit_s()
1790 self->window = self->window_size; in irlap_state_xmit_s()
1791 self->bytes_left = self->line_capacity; in irlap_state_xmit_s()
1792 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_xmit_s()
1794 irlap_next_state(self, LAP_NRM_S); in irlap_state_xmit_s()
1802 self->bytes_left -= skb->len; in irlap_state_xmit_s()
1806 nextfit = !skb_queue_empty(&self->txq); in irlap_state_xmit_s()
1812 if ((self->window > 1) && (nextfit)) { in irlap_state_xmit_s()
1813 irlap_send_data_secondary(self, skb); in irlap_state_xmit_s()
1814 irlap_next_state(self, LAP_XMIT_S); in irlap_state_xmit_s()
1816 irlap_send_data_secondary_final(self, skb); in irlap_state_xmit_s()
1817 irlap_next_state(self, LAP_NRM_S); in irlap_state_xmit_s()
1827 skb_queue_head(&self->txq, skb_get(skb)); in irlap_state_xmit_s()
1832 irlap_send_rd_frame(self); in irlap_state_xmit_s()
1833 irlap_flush_all_queues(self); in irlap_state_xmit_s()
1834 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_xmit_s()
1835 irlap_next_state(self, LAP_SCLOSE); in irlap_state_xmit_s()
1858 static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_nrm_s() argument
1867 IRDA_ASSERT(self != NULL, return -1;); in irlap_state_nrm_s()
1868 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;); in irlap_state_nrm_s()
1875 self->vs, info->ns, self->vr, info->pf); in irlap_state_nrm_s()
1877 self->retry_count = 0; in irlap_state_nrm_s()
1879 ns_status = irlap_validate_ns_received(self, info->ns); in irlap_state_nrm_s()
1880 nr_status = irlap_validate_nr_received(self, info->nr); in irlap_state_nrm_s()
1887 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_s()
1890 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
1897 self->ack_required = TRUE; in irlap_state_nrm_s()
1904 irda_start_timer(WD_TIMER, self->wd_timeout); in irlap_state_nrm_s()
1907 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
1909 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_s()
1917 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
1925 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_s()
1928 if (!skb_queue_empty(&self->txq) && in irlap_state_nrm_s()
1929 (self->window > 0)) in irlap_state_nrm_s()
1931 self->ack_required = TRUE; in irlap_state_nrm_s()
1933 del_timer(&self->wd_timer); in irlap_state_nrm_s()
1935 irlap_next_state(self, LAP_XMIT_S); in irlap_state_nrm_s()
1937 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
1938 irlap_start_wd_timer(self, in irlap_state_nrm_s()
1939 self->wd_timeout); in irlap_state_nrm_s()
1942 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
1954 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
1956 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
1959 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
1961 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
1962 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
1964 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
1977 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_s()
1980 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
1983 irlap_resend_rejected_frames(self, RSP_FRAME); in irlap_state_nrm_s()
1986 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
1988 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_s()
1989 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
1997 self->vr = (self->vr + 1) % 8; in irlap_state_nrm_s()
2000 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2003 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
2005 irlap_data_indication(self, skb, FALSE); in irlap_state_nrm_s()
2006 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2023 irlap_data_indication(self, skb, TRUE); in irlap_state_nrm_s()
2024 irlap_next_state(self, LAP_NRM_S); /* Keep state */ in irlap_state_nrm_s()
2029 if (!skb_queue_empty(&self->txq) && in irlap_state_nrm_s()
2030 (self->window > 0) && !self->remote_busy) in irlap_state_nrm_s()
2032 irlap_data_indication(self, skb, TRUE); in irlap_state_nrm_s()
2034 del_timer(&self->wd_timer); in irlap_state_nrm_s()
2036 irlap_next_state(self, LAP_XMIT_S); in irlap_state_nrm_s()
2038 irlap_data_indication(self, skb, TRUE); in irlap_state_nrm_s()
2040 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2042 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2043 self->ack_required = FALSE; in irlap_state_nrm_s()
2045 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2048 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
2053 self->retry_count = 0; in irlap_state_nrm_s()
2058 nr_status = irlap_validate_nr_received(self, info->nr); in irlap_state_nrm_s()
2060 if (!skb_queue_empty(&self->txq) && in irlap_state_nrm_s()
2061 (self->window > 0)) { in irlap_state_nrm_s()
2062 self->remote_busy = FALSE; in irlap_state_nrm_s()
2065 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2066 del_timer(&self->wd_timer); in irlap_state_nrm_s()
2068 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2069 irlap_next_state(self, LAP_XMIT_S); in irlap_state_nrm_s()
2071 self->remote_busy = FALSE; in irlap_state_nrm_s()
2073 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2074 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2075 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2081 if (self->disconnect_pending) { in irlap_state_nrm_s()
2083 irlap_send_rd_frame(self); in irlap_state_nrm_s()
2084 irlap_flush_all_queues(self); in irlap_state_nrm_s()
2086 irlap_next_state(self, LAP_SCLOSE); in irlap_state_nrm_s()
2089 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2091 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
2095 self->remote_busy = FALSE; in irlap_state_nrm_s()
2096 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2097 irlap_resend_rejected_frames(self, RSP_FRAME); in irlap_state_nrm_s()
2099 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2102 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
2111 del_timer(&self->wd_timer); in irlap_state_nrm_s()
2113 irlap_next_state(self, LAP_RESET_CHECK); in irlap_state_nrm_s()
2115 irlap_reset_indication(self); in irlap_state_nrm_s()
2123 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2124 if (self->remote_busy) { in irlap_state_nrm_s()
2125 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2126 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2128 irlap_resend_rejected_frames(self, RSP_FRAME); in irlap_state_nrm_s()
2129 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2132 irlap_update_nr_received(self, info->nr); in irlap_state_nrm_s()
2133 if (self->remote_busy) { in irlap_state_nrm_s()
2134 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2135 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2137 irlap_resend_rejected_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2138 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2151 self->retry_count); in irlap_state_nrm_s()
2153 if (self->retry_count < (self->N2 / 2)) { in irlap_state_nrm_s()
2155 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2156 self->retry_count++; in irlap_state_nrm_s()
2158 if((self->retry_count % (self->N1 / 2)) == 0) in irlap_state_nrm_s()
2159 irlap_status_indication(self, in irlap_state_nrm_s()
2162 irlap_apply_default_connection_parameters(self); in irlap_state_nrm_s()
2165 irlap_next_state(self, LAP_NDM); in irlap_state_nrm_s()
2166 irlap_disconnect_indication(self, LAP_NO_RESPONSE); in irlap_state_nrm_s()
2171 irlap_next_state(self, LAP_NDM); in irlap_state_nrm_s()
2174 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2175 irlap_send_ua_response_frame(self, NULL); in irlap_state_nrm_s()
2177 del_timer(&self->wd_timer); in irlap_state_nrm_s()
2178 irlap_flush_all_queues(self); in irlap_state_nrm_s()
2180 irlap_apply_default_connection_parameters(self); in irlap_state_nrm_s()
2182 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_nrm_s()
2185 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2186 irlap_send_rr_frame(self, RSP_FRAME); in irlap_state_nrm_s()
2187 self->ack_required = TRUE; in irlap_state_nrm_s()
2188 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2189 irlap_next_state(self, LAP_NRM_S); in irlap_state_nrm_s()
2196 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_nrm_s()
2197 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_nrm_s()
2200 irlap_send_test_frame(self, self->caddr, info->daddr, skb); in irlap_state_nrm_s()
2215 static int irlap_state_sclose(struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_sclose() argument
2218 IRDA_ASSERT(self != NULL, return -ENODEV;); in irlap_state_sclose()
2219 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;); in irlap_state_sclose()
2224 irlap_next_state(self, LAP_NDM); in irlap_state_sclose()
2227 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_sclose()
2228 irlap_send_ua_response_frame(self, NULL); in irlap_state_sclose()
2230 del_timer(&self->wd_timer); in irlap_state_sclose()
2232 irlap_apply_default_connection_parameters(self); in irlap_state_sclose()
2234 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_sclose()
2246 irlap_next_state(self, LAP_NDM); in irlap_state_sclose()
2248 del_timer(&self->wd_timer); in irlap_state_sclose()
2249 irlap_apply_default_connection_parameters(self); in irlap_state_sclose()
2251 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_sclose()
2255 irlap_next_state(self, LAP_NDM); in irlap_state_sclose()
2257 irlap_apply_default_connection_parameters(self); in irlap_state_sclose()
2259 irlap_disconnect_indication(self, LAP_DISC_INDICATION); in irlap_state_sclose()
2266 del_timer(&self->wd_timer); in irlap_state_sclose()
2267 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_sclose()
2268 irlap_send_rd_frame(self); in irlap_state_sclose()
2269 irlap_start_wd_timer(self, self->wd_timeout); in irlap_state_sclose()
2282 static int irlap_state_reset_check( struct irlap_cb *self, IRLAP_EVENT event, in irlap_state_reset_check() argument
2290 IRDA_ASSERT(self != NULL, return -ENODEV;); in irlap_state_reset_check()
2291 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;); in irlap_state_reset_check()
2295 irlap_send_ua_response_frame(self, &self->qos_rx); in irlap_state_reset_check()
2296 irlap_initiate_connection_state(self); in irlap_state_reset_check()
2297 irlap_start_wd_timer(self, WD_TIMEOUT); in irlap_state_reset_check()
2298 irlap_flush_all_queues(self); in irlap_state_reset_check()
2300 irlap_next_state(self, LAP_NRM_S); in irlap_state_reset_check()
2303 irlap_wait_min_turn_around(self, &self->qos_tx); in irlap_state_reset_check()
2304 irlap_send_rd_frame(self); in irlap_state_reset_check()
2305 irlap_start_wd_timer(self, WD_TIMEOUT); in irlap_state_reset_check()
2306 irlap_next_state(self, LAP_SCLOSE); in irlap_state_reset_check()