patch-2.4.7 linux/net/irda/irlap.c
Next file: linux/net/irda/irlap_comp.c
Previous file: linux/net/irda/irlan/irlan_common.c
Back to the patch index
Back to the overall index
- Lines: 287
- Date:
Wed Jul 4 11:50:38 2001
- Orig file:
v2.4.6/linux/net/irda/irlap.c
- Orig date:
Sat May 19 17:47:55 2001
diff -u --recursive --new-file v2.4.6/linux/net/irda/irlap.c linux/net/irda/irlap.c
@@ -46,7 +46,6 @@
#include <net/irda/irlap.h>
#include <net/irda/timer.h>
#include <net/irda/qos.h>
-#include <net/irda/irlap_comp.h>
hashbin_t *irlap = NULL;
int sysctl_slot_timeout = SLOT_TIMEOUT * 1000 / HZ;
@@ -79,15 +78,6 @@
return -ENOMEM;
}
-#ifdef CONFIG_IRDA_COMPRESSION
- irlap_compressors = hashbin_new(HB_LOCAL);
- if (irlap_compressors == NULL) {
- WARNING(__FUNCTION__
- "(), can't allocate compressors hashbin!\n");
- return -ENOMEM;
- }
-#endif
-
return 0;
}
@@ -96,10 +86,6 @@
ASSERT(irlap != NULL, return;);
hashbin_delete(irlap, (FREE_FUNC) __irlap_close);
-
-#ifdef CONFIG_IRDA_COMPRESSION
- hashbin_delete(irlap_compressors, (FREE_FUNC) kfree);
-#endif
}
/*
@@ -312,16 +298,6 @@
/* Hide LAP header from IrLMP layer */
skb_pull(skb, LAP_ADDR_HEADER+LAP_CTRL_HEADER);
-#ifdef CONFIG_IRDA_COMPRESSION
- if (self->qos_tx.compression.value) {
- skb_get(skb); /*LEVEL4*/
- skb = irlap_decompress_frame(self, skb);
- if (!skb) {
- IRDA_DEBUG(1, __FUNCTION__ "(), Decompress error!\n");
- return;
- }
- }
-#endif
skb_get(skb); /*LEVEL4*/
irlmp_link_data_indication(self->notify.instance, skb, unreliable);
}
@@ -341,15 +317,6 @@
IRDA_DEBUG(3, __FUNCTION__ "()\n");
-#ifdef CONFIG_IRDA_COMPRESSION
- if (self->qos_tx.compression.value) {
- skb = irlap_compress_frame(self, skb);
- if (!skb) {
- IRDA_DEBUG(1, __FUNCTION__ "(), Compress error!\n");
- return;
- }
- }
-#endif
ASSERT(skb_headroom(skb) >= (LAP_ADDR_HEADER+LAP_CTRL_HEADER),
return;);
skb_push(skb, LAP_ADDR_HEADER+LAP_CTRL_HEADER);
@@ -482,9 +449,6 @@
ASSERT(self != NULL, return;);
ASSERT(self->magic == LAP_MAGIC, return;);
-#ifdef CONFIG_IRDA_COMPRESSION
- irda_free_compression(self);
-#endif
/* Flush queues */
irlap_flush_all_queues(self);
@@ -860,13 +824,6 @@
/* Free sliding window buffered packets */
while ((skb = skb_dequeue(&self->wx_list)) != NULL)
dev_kfree_skb(skb);
-
-#ifdef CONFIG_IRDA_RECYCLE_RR
- if (self->recycle_rr_skb) {
- dev_kfree_skb(self->recycle_rr_skb);
- self->recycle_rr_skb = NULL;
- }
-#endif
}
/*
@@ -894,50 +851,6 @@
}
}
-#ifdef CONFIG_IRDA_COMPRESSION
-void irlap_init_comp_qos_capabilities(struct irlap_cb *self)
-{
- struct irda_compressor *comp;
- __u8 mask; /* Current bit tested */
- int i;
-
- ASSERT(self != NULL, return;);
- ASSERT(self->magic == LAP_MAGIC, return;);
-
- /*
- * Find out which compressors we support. We do this be checking that
- * the corresponding compressor for each bit set in the QoS bits has
- * actually been loaded. Ths is sort of hairy code but that is what
- * you get when you do a little bit flicking :-)
- */
- IRDA_DEBUG(4, __FUNCTION__ "(), comp bits 0x%02x\n",
- self->qos_rx.compression.bits);
- mask = 0x80; /* Start with testing MSB */
- for (i=0;i<8;i++) {
- IRDA_DEBUG(4, __FUNCTION__ "(), testing bit %d\n", 8-i);
- if (self->qos_rx.compression.bits & mask) {
- IRDA_DEBUG(4, __FUNCTION__
- "(), bit %d is set by defalt\n", 8-i);
- comp = hashbin_find(irlap_compressors,
- compressions[msb_index(mask)],
- NULL);
- if (!comp) {
- /* Protocol not supported, so clear the bit */
- IRDA_DEBUG(4, __FUNCTION__ "(), Compression "
- "protocol %d has not been loaded!\n",
- compressions[msb_index(mask)]);
- self->qos_rx.compression.bits &= ~mask;
- IRDA_DEBUG(4, __FUNCTION__
- "(), comp bits 0x%02x\n",
- self->qos_rx.compression.bits);
- }
- }
- /* Try the next bit */
- mask >>= 1;
- }
-}
-#endif
-
/*
* Function irlap_init_qos_capabilities (self, qos)
*
@@ -956,10 +869,6 @@
/* Start out with the maximum QoS support possible */
irda_init_max_qos_capabilies(&self->qos_rx);
-#ifdef CONFIG_IRDA_COMPRESSION
- irlap_init_comp_qos_capabilities(self);
-#endif
-
/* Apply drivers QoS capabilities */
irda_qos_compute_intersection(&self->qos_rx, self->qos_dev);
@@ -981,9 +890,6 @@
if (qos_user->link_disc_time.bits)
self->qos_rx.link_disc_time.bits &= qos_user->link_disc_time.bits;
-#ifdef CONFIG_IRDA_COMPRESSION
- self->qos_rx.compression.bits &= qos_user->compression.bits;
-#endif
}
/* Use 500ms in IrLAP for now */
@@ -1076,7 +982,7 @@
/* Set the negociated xbofs value */
self->next_bofs = self->qos_tx.additional_bofs.value;
- if(now)
+ if (now)
self->bofs_count = self->next_bofs;
/* Set the negociated link speed (may need the new xbofs value) */
@@ -1092,51 +998,62 @@
self->line_capacity =
irlap_max_line_capacity(self->qos_tx.baud_rate.value,
self->qos_tx.max_turn_time.value);
+
+
+ /*
+ * Initialize timeout values, some of the rules are listed on
+ * page 92 in IrLAP.
+ */
+ ASSERT(self->qos_tx.max_turn_time.value != 0, return;);
+ ASSERT(self->qos_rx.max_turn_time.value != 0, return;);
+ /* The poll timeout applies only to the primary station.
+ * It defines the maximum time the primary stay in XMIT mode
+ * before timeout and turning the link around (sending a RR).
+ * Or, this is how much we can keep the pf bit in primary mode.
+ * Therefore, it must be lower or equal than our *OWN* max turn around.
+ * Jean II */
+ self->poll_timeout = self->qos_tx.max_turn_time.value * HZ / 1000;
+ /* The Final timeout applies only to the primary station.
+ * It defines the maximum time the primary wait (mostly in RECV mode)
+ * for an answer from the secondary station before polling it again.
+ * Therefore, it must be greater or equal than our *PARTNER*
+ * max turn around time - Jean II */
+ self->final_timeout = self->qos_rx.max_turn_time.value * HZ / 1000;
+ /* The Watchdog Bit timeout applies only to the secondary station.
+ * It defines the maximum time the secondary wait (mostly in RECV mode)
+ * for poll from the primary station before getting annoyed.
+ * Therefore, it must be greater or equal than our *PARTNER*
+ * max turn around time - Jean II */
+ self->wd_timeout = self->final_timeout * 2;
+
+ /*
+ * N1 and N2 are maximum retry count for *both* the final timer
+ * and the wd timer (with a factor 2) as defined above.
+ * After N1 retry of a timer, we give a warning to the user.
+ * After N2 retry, we consider the link dead and disconnect it.
+ * Jean II
+ */
+
/*
* Set N1 to 0 if Link Disconnect/Threshold Time = 3 and set it to
* 3 seconds otherwise. See page 71 in IrLAP for more details.
- * TODO: these values should be calculated from the final timer
- * as well
*/
- ASSERT(self->qos_tx.max_turn_time.value != 0, return;);
if (self->qos_tx.link_disc_time.value == 3)
/*
* If we set N1 to 0, it will trigger immediately, which is
* not what we want. What we really want is to disable it,
* Jean II
*/
- self->N1 = -1; /* Disable */
+ self->N1 = -2; /* Disable - Need to be multiple of 2*/
else
- self->N1 = 3000 / self->qos_tx.max_turn_time.value;
+ self->N1 = 3000 / self->qos_rx.max_turn_time.value;
IRDA_DEBUG(4, "Setting N1 = %d\n", self->N1);
-
+ /* Set N2 to match our own disconnect time */
self->N2 = self->qos_tx.link_disc_time.value * 1000 /
- self->qos_tx.max_turn_time.value;
+ self->qos_rx.max_turn_time.value;
IRDA_DEBUG(4, "Setting N2 = %d\n", self->N2);
-
- /*
- * Initialize timeout values, some of the rules are listed on
- * page 92 in IrLAP.
- */
- self->poll_timeout = self->qos_tx.max_turn_time.value * HZ / 1000;
- self->wd_timeout = self->poll_timeout * 2;
-
- /*
- * Be careful to keep our promises to the peer device about how long
- * time it can keep the pf bit. So here we must use the rx_qos value
- */
- self->final_timeout = self->qos_rx.max_turn_time.value * HZ / 1000;
-
-#ifdef CONFIG_IRDA_COMPRESSION
- if (self->qos_tx.compression.value) {
- IRDA_DEBUG(1, __FUNCTION__ "(), Initializing compression\n");
- irda_set_compression(self, self->qos_tx.compression.value);
-
- irlap_compressor_init(self, 0);
- }
-#endif
}
/*
@@ -1226,10 +1143,6 @@
self->qos_tx.min_turn_time.value);
len += sprintf(buf+len, "%d\t",
self->qos_tx.link_disc_time.value);
-#ifdef CONFIG_IRDA_COMPRESSION
- len += sprintf(buf+len, "%d",
- self->qos_tx.compression.value);
-#endif
len += sprintf(buf+len, "\n");
len += sprintf(buf+len, " rx\t%d\t",
@@ -1246,10 +1159,6 @@
self->qos_rx.min_turn_time.value);
len += sprintf(buf+len, "%d\t",
self->qos_rx.link_disc_time.value);
-#ifdef CONFIG_IRDA_COMPRESSION
- len += sprintf(buf+len, "%d",
- self->qos_rx.compression.value);
-#endif
len += sprintf(buf+len, "\n");
self = (struct irlap_cb *) hashbin_get_next(irlap);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)