• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/net/irda/

Lines Matching refs:self

49 static int irlap_state_ndm    (struct irlap_cb *self, IRLAP_EVENT event,
51 static int irlap_state_query (struct irlap_cb *self, IRLAP_EVENT event,
53 static int irlap_state_reply (struct irlap_cb *self, IRLAP_EVENT event,
55 static int irlap_state_conn (struct irlap_cb *self, IRLAP_EVENT event,
57 static int irlap_state_setup (struct irlap_cb *self, IRLAP_EVENT event,
59 static int irlap_state_offline(struct irlap_cb *self, IRLAP_EVENT event,
61 static int irlap_state_xmit_p (struct irlap_cb *self, IRLAP_EVENT event,
63 static int irlap_state_pclose (struct irlap_cb *self, IRLAP_EVENT event,
65 static int irlap_state_nrm_p (struct irlap_cb *self, IRLAP_EVENT event,
67 static int irlap_state_reset_wait(struct irlap_cb *self, IRLAP_EVENT event,
69 static int irlap_state_reset (struct irlap_cb *self, IRLAP_EVENT event,
71 static int irlap_state_nrm_s (struct irlap_cb *self, IRLAP_EVENT event,
73 static int irlap_state_xmit_s (struct irlap_cb *self, IRLAP_EVENT event,
75 static int irlap_state_sclose (struct irlap_cb *self, IRLAP_EVENT event,
141 static int (*state[])(struct irlap_cb *self, IRLAP_EVENT event,
169 struct irlap_cb *self = (struct irlap_cb *) data;
171 IRDA_ASSERT(self != NULL, return;);
172 IRDA_ASSERT(self->magic == LAP_MAGIC, return;);
174 irlap_do_event(self, POLL_TIMER_EXPIRED, NULL, NULL);
183 static void irlap_start_poll_timer(struct irlap_cb *self, int timeout)
185 IRDA_ASSERT(self != NULL, return;);
186 IRDA_ASSERT(self->magic == LAP_MAGIC, return;);
193 if (skb_queue_empty(&self->txq) || self->remote_busy) {
194 if (self->fast_RR == TRUE) {
199 if (self->fast_RR_timeout < timeout) {
200 self->fast_RR_timeout +=
204 timeout = self->fast_RR_timeout;
207 self->fast_RR = TRUE;
210 self->fast_RR_timeout = 0;
214 self->fast_RR = FALSE;
220 irlap_do_event(self, POLL_TIMER_EXPIRED, NULL, NULL);
222 irda_start_timer(&self->poll_timer, timeout, self,
232 void irlap_do_event(struct irlap_cb *self, IRLAP_EVENT event,
237 if (!self || self->magic != LAP_MAGIC)
241 irlap_event[event], irlap_state[self->state]);
243 ret = (*state[self->state])(self, event, skb, info);
248 switch (self->state) {
259 skb_queue_len(&self->txq));
261 if (!skb_queue_empty(&self->txq)) {
263 self->local_busy = TRUE;
281 while ((skb = skb_dequeue(&self->txq)) != NULL) {
283 ret = (*state[self->state])(self, SEND_I_CMD,
291 irlmp_flow_indication(self->notify.instance,
298 self->local_busy = FALSE;
299 } else if (self->disconnect_pending) {
300 self->disconnect_pending = FALSE;
302 ret = (*state[self->state])(self, DISCONNECT_REQUEST,
321 static int irlap_state_ndm(struct irlap_cb *self, IRLAP_EVENT event,
327 IRDA_ASSERT(self != NULL, return -1;);
328 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
332 IRDA_ASSERT(self->netdev != NULL, return -1;);
334 if (self->media_busy) {
342 irlap_next_state(self, LAP_NDM);
344 irlap_disconnect_indication(self, LAP_MEDIA_BUSY);
346 irlap_send_snrm_frame(self, &self->qos_rx);
349 irlap_start_final_timer(self, self->final_timeout);
351 self->retry_count = 0;
352 irlap_next_state(self, LAP_SETUP);
358 self->daddr = info->daddr;
359 self->caddr = info->caddr;
361 irlap_next_state(self, LAP_CONN);
363 irlap_connect_indication(self, skb);
372 if (self->media_busy) {
378 irlap_discovery_confirm(self, NULL);
385 self->S = info->S;
386 self->s = info->s;
387 irlap_send_discovery_xid_frame(self, info->S, info->s, TRUE,
389 self->frame_sent = FALSE;
390 self->s++;
392 irlap_start_slot_timer(self, self->slot_timeout);
393 irlap_next_state(self, LAP_QUERY);
400 self->slot = irlap_generate_rand_time_slot(info->S,
402 if (self->slot == info->s) {
406 irlap_send_discovery_xid_frame(self, info->S,
407 self->slot,
410 self->frame_sent = TRUE;
412 self->frame_sent = FALSE;
419 irlap_start_query_timer(self, info->S, info->s);
420 irlap_next_state(self, LAP_REPLY);
443 irlap_discovery_indication(self, info->discovery);
458 if (!skb_queue_empty(&self->txq_ultra)) {
462 ret = (*state[self->state])(self, SEND_UI_FRAME,
468 if (self->connect_pending) {
469 self->connect_pending = FALSE;
474 if (self->disconnect_pending)
475 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
477 ret = (*state[self->state])(self,
480 self->disconnect_pending = FALSE;
499 for (i=0; ((i<2) && (self->media_busy == FALSE)); i++) {
500 skb = skb_dequeue(&self->txq_ultra);
502 irlap_send_ui_frame(self, skb, CBROADCAST,
511 irda_device_set_media_busy(self->netdev, TRUE);
521 irlap_unitdata_indication(self, skb);
532 irlap_send_test_frame(self, CBROADCAST, info->daddr, skb);
553 static int irlap_state_query(struct irlap_cb *self, IRLAP_EVENT event,
558 IRDA_ASSERT(self != NULL, return -1;);
559 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
569 if (!self->discovery_log) {
575 hashbin_insert(self->discovery_log,
580 /* irlap_next_state(self, LAP_QUERY); */
601 irlap_discovery_indication(self, info->discovery);
610 if (irda_device_is_receiving(self->netdev) && !self->add_wait) {
613 irlap_start_slot_timer(self, msecs_to_jiffies(10));
614 self->add_wait = TRUE;
617 self->add_wait = FALSE;
619 if (self->s < self->S) {
620 irlap_send_discovery_xid_frame(self, self->S,
621 self->s, TRUE,
622 self->discovery_cmd);
623 self->s++;
624 irlap_start_slot_timer(self, self->slot_timeout);
627 irlap_next_state(self, LAP_QUERY);
630 irlap_send_discovery_xid_frame(self, self->S, 0xff,
632 self->discovery_cmd);
635 irlap_next_state(self, LAP_NDM);
641 irlap_discovery_confirm(self, self->discovery_log);
644 self->discovery_log = NULL;
658 * Function irlap_state_reply (self, event, skb, info)
664 static int irlap_state_reply(struct irlap_cb *self, IRLAP_EVENT event,
672 IRDA_ASSERT(self != NULL, return -1;);
673 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
679 irlap_next_state(self, LAP_NDM);
685 del_timer(&self->query_timer);
690 irlap_next_state(self, LAP_NDM);
692 irlap_discovery_indication(self, info->discovery);
695 if ((info->s >= self->slot) && (!self->frame_sent)) {
699 irlap_send_discovery_xid_frame(self, info->S,
700 self->slot,
704 self->frame_sent = TRUE;
709 irlap_start_query_timer(self, info->S, info->s);
712 //irlap_next_state(self, LAP_REPLY);
732 static int irlap_state_conn(struct irlap_cb *self, IRLAP_EVENT event,
739 IRDA_ASSERT(self != NULL, return -1;);
740 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
746 IRDA_ASSERT(self->netdev != NULL, return -1;);
748 irlap_qos_negotiate(self, skb);
750 irlap_initiate_connection_state(self);
756 irlap_apply_connection_parameters(self, FALSE);
762 irlap_send_ua_response_frame(self, &self->qos_rx);
770 irlap_start_wd_timer(self, self->wd_timeout);
771 irlap_next_state(self, LAP_NRM_S);
777 irlap_next_state(self, LAP_NDM);
782 irlap_send_dm_frame(self);
783 irlap_next_state( self, LAP_NDM);
784 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
804 static int irlap_state_setup(struct irlap_cb *self, IRLAP_EVENT event,
811 IRDA_ASSERT(self != NULL, return -1;);
812 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
816 if (self->retry_count < self->N3) {
823 irlap_start_backoff_timer(self, msecs_to_jiffies(20 +
827 irlap_next_state(self, LAP_NDM);
829 irlap_disconnect_indication(self, LAP_FOUND_NONE);
833 irlap_send_snrm_frame(self, &self->qos_rx);
834 irlap_start_final_timer(self, self->final_timeout);
835 self->retry_count++;
847 if (info &&(info->daddr > self->saddr)) {
848 del_timer(&self->final_timer);
849 irlap_initiate_connection_state(self);
851 IRDA_ASSERT(self->netdev != NULL, return -1;);
855 irlap_qos_negotiate(self, skb);
858 irlap_apply_connection_parameters(self, FALSE);
859 irlap_send_ua_response_frame(self, &self->qos_rx);
861 irlap_next_state(self, LAP_NRM_S);
862 irlap_connect_confirm(self, skb);
869 irlap_start_wd_timer(self, self->wd_timeout);
872 irlap_next_state(self, LAP_SETUP);
877 del_timer(&self->final_timer);
880 irlap_initiate_connection_state(self);
887 IRDA_ASSERT(self->netdev != NULL, return -1;);
889 irlap_qos_negotiate(self, skb);
892 irlap_apply_connection_parameters(self, TRUE);
893 self->retry_count = 0;
901 irlap_wait_min_turn_around(self, &self->qos_tx);
904 irlap_send_rr_frame(self, CMD_FRAME);
912 irlap_start_final_timer(self, self->final_timeout/2);
913 irlap_next_state(self, LAP_NRM_P);
915 irlap_connect_confirm(self, skb);
919 del_timer(&self->final_timer);
920 irlap_next_state(self, LAP_NDM);
922 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
935 * Function irlap_state_offline (self, event, skb, info)
940 static int irlap_state_offline(struct irlap_cb *self, IRLAP_EVENT event,
949 * Function irlap_state_xmit_p (self, event, skb, info)
956 static int irlap_state_xmit_p(struct irlap_cb *self, IRLAP_EVENT event,
966 if ((self->window > 0) && (!self->remote_busy)) {
983 skb_next = skb_peek(&self->txq);
996 self->bytes_left));
1005 if((!nextfit) && (skb->len > self->bytes_left)) {
1009 skb_queue_head(&self->txq, skb_get(skb));
1029 self->bytes_left -= skb->len;
1033 nextfit = !skb_queue_empty(&self->txq);
1039 if ((self->window > 1) && (nextfit)) {
1041 irlap_send_data_primary(self, skb);
1042 irlap_next_state(self, LAP_XMIT_P);
1045 irlap_send_data_primary_poll(self, skb);
1055 self->fast_RR = FALSE;
1060 skb_queue_head(&self->txq, skb_get(skb));
1072 irlap_send_rr_frame(self, CMD_FRAME);
1074 self->window = self->window_size;
1077 self->bytes_left = self->line_capacity;
1079 irlap_start_final_timer(self, self->final_timeout);
1080 irlap_next_state(self, LAP_NRM_P);
1083 del_timer(&self->poll_timer);
1084 irlap_wait_min_turn_around(self, &self->qos_tx);
1085 irlap_send_disc_frame(self);
1086 irlap_flush_all_queues(self);
1087 irlap_start_final_timer(self, self->final_timeout);
1088 self->retry_count = 0;
1089 irlap_next_state(self, LAP_PCLOSE);
1110 static int irlap_state_pclose(struct irlap_cb *self, IRLAP_EVENT event,
1117 IRDA_ASSERT(self != NULL, return -1;);
1118 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
1123 del_timer(&self->final_timer);
1126 irlap_apply_default_connection_parameters(self);
1129 irlap_next_state(self, LAP_NDM);
1131 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
1134 if (self->retry_count < self->N3) {
1135 irlap_wait_min_turn_around(self, &self->qos_tx);
1136 irlap_send_disc_frame(self);
1137 irlap_start_final_timer(self, self->final_timeout);
1138 self->retry_count++;
1141 irlap_apply_default_connection_parameters(self);
1144 irlap_next_state(self, LAP_NDM);
1146 irlap_disconnect_indication(self, LAP_NO_RESPONSE);
1159 * Function irlap_state_nrm_p (self, event, skb, info)
1167 static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event,
1182 self->fast_RR = FALSE;
1186 ns_status = irlap_validate_ns_received(self, info->ns);
1187 nr_status = irlap_validate_nr_received(self, info->nr);
1195 self->vr = (self->vr + 1) % 8;
1198 irlap_update_nr_received(self, info->nr);
1205 self->retry_count = 0;
1206 self->ack_required = TRUE;
1211 irlap_next_state(self, LAP_NRM_P);
1213 irlap_data_indication(self, skb, FALSE);
1216 del_timer(&self->final_timer);
1218 irlap_wait_min_turn_around(self, &self->qos_tx);
1224 irlap_data_indication(self, skb, FALSE);
1234 irlap_next_state(self, LAP_XMIT_P);
1239 irlap_start_poll_timer(self, self->poll_timeout);
1248 irlap_update_nr_received(self, info->nr);
1256 irlap_next_state(self, LAP_NRM_P);
1263 irlap_update_nr_received(self, info->nr);
1265 irlap_wait_min_turn_around(self, &self->qos_tx);
1266 irlap_send_rr_frame(self, CMD_FRAME);
1268 self->ack_required = FALSE;
1270 irlap_start_final_timer(self, self->final_timeout);
1271 irlap_next_state(self, LAP_NRM_P);
1281 self->vr = (self->vr + 1) % 8;
1284 irlap_update_nr_received(self, info->nr);
1287 irlap_resend_rejected_frames(self, CMD_FRAME);
1289 self->ack_required = FALSE;
1295 irlap_start_final_timer(self, 2 * self->final_timeout);
1298 irlap_next_state(self, LAP_NRM_P);
1300 irlap_data_indication(self, skb, FALSE);
1308 self->vr = (self->vr + 1) % 8;
1311 irlap_update_nr_received(self, info->nr);
1313 self->ack_required = FALSE;
1316 irlap_next_state(self, LAP_NRM_P);
1318 irlap_data_indication(self, skb, FALSE);
1333 irlap_resend_rejected_frames(self, CMD_FRAME);
1337 irlap_start_final_timer(self, 2 * self->final_timeout);
1340 irlap_next_state(self, LAP_NRM_P);
1345 self->ack_required = FALSE;
1355 del_timer(&self->final_timer);
1357 irlap_next_state(self, LAP_RESET_WAIT);
1359 irlap_disconnect_indication(self, LAP_RESET_INDICATION);
1360 self->xmitflag = TRUE;
1362 del_timer(&self->final_timer);
1364 irlap_disconnect_indication(self, LAP_RESET_INDICATION);
1366 self->xmitflag = FALSE;
1377 irlap_data_indication(self, skb, TRUE);
1378 irlap_next_state(self, LAP_NRM_P);
1380 del_timer(&self->final_timer);
1381 irlap_data_indication(self, skb, TRUE);
1382 irlap_next_state(self, LAP_XMIT_P);
1383 IRDA_DEBUG(1, "%s: RECV_UI_FRAME: next state %s\n", __FUNCTION__, irlap_state[self->state]);
1384 irlap_start_poll_timer(self, self->poll_timeout);
1392 self->remote_busy = FALSE;
1395 del_timer(&self->final_timer);
1400 ret = irlap_validate_nr_received(self, info->nr);
1403 irlap_update_nr_received(self, info->nr);
1410 self->retry_count = 0;
1411 irlap_wait_min_turn_around(self, &self->qos_tx);
1413 irlap_next_state(self, LAP_XMIT_P);
1416 irlap_start_poll_timer(self, self->poll_timeout);
1424 irlap_update_nr_received(self, info->nr);
1428 self->retry_count, info->nr, self->va,
1429 self->vs, self->vr);
1432 irlap_resend_rejected_frames(self, CMD_FRAME);
1433 irlap_start_final_timer(self, self->final_timeout * 2);
1435 irlap_next_state(self, LAP_NRM_P);
1440 irlap_next_state(self, LAP_RESET_WAIT);
1442 irlap_disconnect_indication(self, LAP_RESET_INDICATION);
1443 self->xmitflag = TRUE;
1450 del_timer(&self->final_timer);
1451 self->remote_busy = TRUE;
1454 irlap_update_nr_received(self, info->nr);
1455 irlap_next_state(self, LAP_XMIT_P);
1458 irlap_start_poll_timer(self, self->poll_timeout);
1461 del_timer(&self->final_timer);
1462 self->xmitflag = TRUE;
1463 irlap_next_state(self, LAP_RESET_WAIT);
1464 irlap_reset_indication(self);
1473 if (irda_device_is_receiving(self->netdev) && !self->add_wait) {
1476 irlap_start_final_timer(self, msecs_to_jiffies(300));
1483 self->add_wait = TRUE;
1486 self->add_wait = FALSE;
1489 if (self->retry_count < self->N2) {
1491 irlap_wait_min_turn_around(self, &self->qos_tx);
1492 irlap_send_rr_frame(self, CMD_FRAME);
1494 irlap_start_final_timer(self, self->final_timeout);
1495 self->retry_count++;
1497 " retry_count=%d\n", self->retry_count);
1505 if((self->retry_count % self->N1) == 0)
1506 irlap_status_indication(self,
1511 irlap_apply_default_connection_parameters(self);
1514 irlap_next_state(self, LAP_NDM);
1515 irlap_disconnect_indication(self, LAP_NO_RESPONSE);
1519 irlap_update_nr_received(self, info->nr);
1520 if (self->remote_busy) {
1521 irlap_wait_min_turn_around(self, &self->qos_tx);
1522 irlap_send_rr_frame(self, CMD_FRAME);
1524 irlap_resend_rejected_frames(self, CMD_FRAME);
1525 irlap_start_final_timer(self, 2 * self->final_timeout);
1528 irlap_update_nr_received(self, info->nr);
1529 if (self->remote_busy) {
1530 irlap_wait_min_turn_around(self, &self->qos_tx);
1531 irlap_send_rr_frame(self, CMD_FRAME);
1533 irlap_resend_rejected_frame(self, CMD_FRAME);
1534 irlap_start_final_timer(self, 2 * self->final_timeout);
1539 irlap_flush_all_queues(self);
1540 irlap_next_state(self, LAP_XMIT_P);
1542 irlap_disconnect_request(self);
1561 static int irlap_state_reset_wait(struct irlap_cb *self, IRLAP_EVENT event,
1568 IRDA_ASSERT(self != NULL, return -1;);
1569 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
1573 if (self->xmitflag) {
1574 irlap_wait_min_turn_around(self, &self->qos_tx);
1575 irlap_send_snrm_frame(self, NULL);
1576 irlap_start_final_timer(self, self->final_timeout);
1577 irlap_next_state(self, LAP_RESET);
1579 irlap_start_final_timer(self, self->final_timeout);
1580 irlap_next_state(self, LAP_RESET);
1584 irlap_wait_min_turn_around( self, &self->qos_tx);
1585 irlap_send_disc_frame( self);
1586 irlap_flush_all_queues( self);
1587 irlap_start_final_timer( self, self->final_timeout);
1588 self->retry_count = 0;
1589 irlap_next_state( self, LAP_PCLOSE);
1602 * Function irlap_state_reset (self, event, skb, info)
1608 static int irlap_state_reset(struct irlap_cb *self, IRLAP_EVENT event,
1615 IRDA_ASSERT(self != NULL, return -1;);
1616 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
1620 del_timer(&self->final_timer);
1622 irlap_apply_default_connection_parameters(self);
1625 irlap_next_state(self, LAP_NDM);
1627 irlap_disconnect_indication(self, LAP_NO_RESPONSE);
1631 del_timer(&self->final_timer);
1634 irlap_initiate_connection_state(self);
1638 self->remote_busy = FALSE;
1640 irlap_next_state(self, LAP_XMIT_P);
1642 irlap_start_poll_timer(self, self->poll_timeout);
1646 if (self->retry_count < 3) {
1647 irlap_wait_min_turn_around(self, &self->qos_tx);
1649 IRDA_ASSERT(self->netdev != NULL, return -1;);
1650 irlap_send_snrm_frame(self, self->qos_dev);
1652 self->retry_count++; /* Experimental!! */
1654 irlap_start_final_timer(self, self->final_timeout);
1655 irlap_next_state(self, LAP_RESET);
1656 } else if (self->retry_count >= self->N3) {
1657 irlap_apply_default_connection_parameters(self);
1660 irlap_next_state(self, LAP_NDM);
1662 irlap_disconnect_indication(self, LAP_NO_RESPONSE);
1672 irlap_initiate_connection_state(self);
1673 irlap_wait_min_turn_around(self, &self->qos_tx);
1674 irlap_send_ua_response_frame(self, &self->qos_rx);
1676 irlap_start_wd_timer(self, self->wd_timeout);
1677 irlap_next_state(self, LAP_NDM);
1701 static int irlap_state_xmit_s(struct irlap_cb *self, IRLAP_EVENT event,
1708 IRDA_ASSERT(self != NULL, return -ENODEV;);
1709 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;);
1716 if ((self->window > 0) && (!self->remote_busy)) {
1731 skb_next = skb_peek(&self->txq);
1734 self->bytes_left));
1741 if((!nextfit) && (skb->len > self->bytes_left)) {
1745 skb_queue_head(&self->txq, skb_get(skb));
1753 self->window = self->window_size;
1754 self->bytes_left = self->line_capacity;
1755 irlap_start_wd_timer(self, self->wd_timeout);
1757 irlap_next_state(self, LAP_NRM_S);
1765 self->bytes_left -= skb->len;
1769 nextfit = !skb_queue_empty(&self->txq);
1775 if ((self->window > 1) && (nextfit)) {
1776 irlap_send_data_secondary(self, skb);
1777 irlap_next_state(self, LAP_XMIT_S);
1779 irlap_send_data_secondary_final(self, skb);
1780 irlap_next_state(self, LAP_NRM_S);
1790 skb_queue_head(&self->txq, skb_get(skb));
1795 irlap_send_rd_frame(self);
1796 irlap_flush_all_queues(self);
1797 irlap_start_wd_timer(self, self->wd_timeout);
1798 irlap_next_state(self, LAP_SCLOSE);
1821 static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event,
1830 IRDA_ASSERT(self != NULL, return -1;);
1831 IRDA_ASSERT(self->magic == LAP_MAGIC, return -1;);
1838 self->vs, info->ns, self->vr, info->pf);
1840 self->retry_count = 0;
1842 ns_status = irlap_validate_ns_received(self, info->ns);
1843 nr_status = irlap_validate_nr_received(self, info->nr);
1850 self->vr = (self->vr + 1) % 8;
1853 irlap_update_nr_received(self, info->nr);
1860 self->ack_required = TRUE;
1867 irlap_next_state(self, LAP_NRM_S);
1869 irlap_data_indication(self, skb, FALSE);
1877 irlap_wait_min_turn_around(self, &self->qos_tx);
1885 irlap_data_indication(self, skb, FALSE);
1888 if (!skb_queue_empty(&self->txq) &&
1889 (self->window > 0))
1891 self->ack_required = TRUE;
1893 del_timer(&self->wd_timer);
1895 irlap_next_state(self, LAP_XMIT_S);
1897 irlap_send_rr_frame(self, RSP_FRAME);
1898 irlap_start_wd_timer(self,
1899 self->wd_timeout);
1902 irlap_next_state(self, LAP_NRM_S);
1914 irlap_update_nr_received(self, info->nr);
1916 irlap_start_wd_timer(self, self->wd_timeout);
1919 irlap_update_nr_received(self, info->nr);
1921 irlap_wait_min_turn_around(self, &self->qos_tx);
1922 irlap_send_rr_frame(self, RSP_FRAME);
1924 irlap_start_wd_timer(self, self->wd_timeout);
1937 self->vr = (self->vr + 1) % 8;
1940 irlap_update_nr_received(self, info->nr);
1943 irlap_resend_rejected_frames(self, RSP_FRAME);
1946 irlap_next_state(self, LAP_NRM_S);
1948 irlap_data_indication(self, skb, FALSE);
1949 irlap_start_wd_timer(self, self->wd_timeout);
1957 self->vr = (self->vr + 1) % 8;
1960 irlap_update_nr_received(self, info->nr);
1963 irlap_next_state(self, LAP_NRM_S);
1965 irlap_data_indication(self, skb, FALSE);
1966 irlap_start_wd_timer(self, self->wd_timeout);
1983 irlap_data_indication(self, skb, TRUE);
1984 irlap_next_state(self, LAP_NRM_S); /* Keep state */
1989 if (!skb_queue_empty(&self->txq) &&
1990 (self->window > 0) && !self->remote_busy)
1992 irlap_data_indication(self, skb, TRUE);
1994 del_timer(&self->wd_timer);
1996 irlap_next_state(self, LAP_XMIT_S);
1998 irlap_data_indication(self, skb, TRUE);
2000 irlap_wait_min_turn_around(self, &self->qos_tx);
2002 irlap_send_rr_frame(self, RSP_FRAME);
2003 self->ack_required = FALSE;
2005 irlap_start_wd_timer(self, self->wd_timeout);
2008 irlap_next_state(self, LAP_NRM_S);
2013 self->retry_count = 0;
2018 nr_status = irlap_validate_nr_received(self, info->nr);
2020 if (!skb_queue_empty(&self->txq) &&
2021 (self->window > 0)) {
2022 self->remote_busy = FALSE;
2025 irlap_update_nr_received(self, info->nr);
2026 del_timer(&self->wd_timer);
2028 irlap_wait_min_turn_around(self, &self->qos_tx);
2029 irlap_next_state(self, LAP_XMIT_S);
2031 self->remote_busy = FALSE;
2033 irlap_update_nr_received(self, info->nr);
2034 irlap_wait_min_turn_around(self, &self->qos_tx);
2035 irlap_start_wd_timer(self, self->wd_timeout);
2041 if (self->disconnect_pending) {
2043 irlap_send_rd_frame(self);
2044 irlap_flush_all_queues(self);
2046 irlap_next_state(self, LAP_SCLOSE);
2049 irlap_send_rr_frame(self, RSP_FRAME);
2051 irlap_next_state(self, LAP_NRM_S);
2055 self->remote_busy = FALSE;
2056 irlap_update_nr_received(self, info->nr);
2057 irlap_resend_rejected_frames(self, RSP_FRAME);
2059 irlap_start_wd_timer(self, self->wd_timeout);
2062 irlap_next_state(self, LAP_NRM_S);
2071 del_timer(&self->wd_timer);
2073 irlap_next_state(self, LAP_RESET_CHECK);
2075 irlap_reset_indication(self);
2084 irlap_update_nr_received(self, info->nr);
2085 if (self->remote_busy) {
2086 irlap_wait_min_turn_around(self, &self->qos_tx);
2087 irlap_send_rr_frame(self, RSP_FRAME);
2089 irlap_resend_rejected_frames(self, RSP_FRAME);
2090 irlap_start_wd_timer(self, self->wd_timeout);
2093 irlap_update_nr_received(self, info->nr);
2094 if (self->remote_busy) {
2095 irlap_wait_min_turn_around(self, &self->qos_tx);
2096 irlap_send_rr_frame(self, RSP_FRAME);
2098 irlap_resend_rejected_frame(self, RSP_FRAME);
2099 irlap_start_wd_timer(self, self->wd_timeout);
2107 * Note : self->wd_timeout = (self->final_timeout * 2),
2108 * which explain why we use (self->N2 / 2) here !!!
2112 self->retry_count);
2114 if (self->retry_count < (self->N2 / 2)) {
2116 irlap_start_wd_timer(self, self->wd_timeout);
2117 self->retry_count++;
2119 if((self->retry_count % (self->N1 / 2)) == 0)
2120 irlap_status_indication(self,
2123 irlap_apply_default_connection_parameters(self);
2126 irlap_next_state(self, LAP_NDM);
2127 irlap_disconnect_indication(self, LAP_NO_RESPONSE);
2132 irlap_next_state(self, LAP_NDM);
2135 irlap_wait_min_turn_around(self, &self->qos_tx);
2136 irlap_send_ua_response_frame(self, NULL);
2138 del_timer(&self->wd_timer);
2139 irlap_flush_all_queues(self);
2141 irlap_apply_default_connection_parameters(self);
2143 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
2146 irlap_wait_min_turn_around(self, &self->qos_tx);
2147 irlap_send_rr_frame(self, RSP_FRAME);
2148 self->ack_required = TRUE;
2149 irlap_start_wd_timer(self, self->wd_timeout);
2150 irlap_next_state(self, LAP_NRM_S);
2157 irlap_wait_min_turn_around(self, &self->qos_tx);
2158 irlap_start_wd_timer(self, self->wd_timeout);
2161 irlap_send_test_frame(self, self->caddr, info->daddr, skb);
2174 * Function irlap_state_sclose (self, event, skb, info)
2176 static int irlap_state_sclose(struct irlap_cb *self, IRLAP_EVENT event,
2183 IRDA_ASSERT(self != NULL, return -ENODEV;);
2184 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;);
2189 irlap_next_state(self, LAP_NDM);
2192 irlap_wait_min_turn_around(self, &self->qos_tx);
2193 irlap_send_ua_response_frame(self, NULL);
2195 del_timer(&self->wd_timer);
2197 irlap_apply_default_connection_parameters(self);
2199 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
2211 irlap_next_state(self, LAP_NDM);
2213 del_timer(&self->wd_timer);
2214 irlap_apply_default_connection_parameters(self);
2216 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
2220 irlap_next_state(self, LAP_NDM);
2222 irlap_apply_default_connection_parameters(self);
2224 irlap_disconnect_indication(self, LAP_DISC_INDICATION);
2231 del_timer(&self->wd_timer);
2232 irlap_wait_min_turn_around(self, &self->qos_tx);
2233 irlap_send_rd_frame(self);
2234 irlap_start_wd_timer(self, self->wd_timeout);
2248 static int irlap_state_reset_check( struct irlap_cb *self, IRLAP_EVENT event,
2256 IRDA_ASSERT(self != NULL, return -ENODEV;);
2257 IRDA_ASSERT(self->magic == LAP_MAGIC, return -EBADR;);
2261 irlap_send_ua_response_frame(self, &self->qos_rx);
2262 irlap_initiate_connection_state(self);
2263 irlap_start_wd_timer(self, WD_TIMEOUT);
2264 irlap_flush_all_queues(self);
2266 irlap_next_state(self, LAP_NRM_S);
2269 irlap_wait_min_turn_around(self, &self->qos_tx);
2270 irlap_send_rd_frame(self);
2271 irlap_start_wd_timer(self, WD_TIMEOUT);
2272 irlap_next_state(self, LAP_SCLOSE);