summaryrefslogtreecommitdiff
path: root/packages/linux/files/ir241_qos_param-2.diff
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/files/ir241_qos_param-2.diff')
-rw-r--r--packages/linux/files/ir241_qos_param-2.diff164
1 files changed, 0 insertions, 164 deletions
diff --git a/packages/linux/files/ir241_qos_param-2.diff b/packages/linux/files/ir241_qos_param-2.diff
deleted file mode 100644
index dfe77c52b0..0000000000
--- a/packages/linux/files/ir241_qos_param-2.diff
+++ /dev/null
@@ -1,164 +0,0 @@
---- linux/net/irda/qos.c.orig 2005-01-22 19:19:56.013787192 +0100
-+++ linux/net/irda/qos.c 2005-01-22 19:21:13.493008560 +0100
-@@ -73,13 +73,18 @@
- * 1.2, chapt 5.3.2.1, p41). But, this number includes the LAP header
- * (2 bytes), and CRC (32 bits at 4 Mb/s). So, for the I field (LAP
- * payload), that's only 2042 bytes. Oups !
-- * I've had trouble trouble transmitting 2048 bytes frames with USB
-- * dongles and nsc-ircc at 4 Mb/s, so adjust to 2042... I don't know
-- * if this bug applies only for 2048 bytes frames or all negociated
-- * frame sizes, but all hardware seem to support "2048 bytes" frames.
-- * You can use the sysctl to play with this value anyway.
-+ * My nsc-ircc hardware has troubles receiving 2048 bytes frames at 4 Mb/s,
-+ * so adjust to 2042... I don't know if this bug applies only for 2048
-+ * bytes frames or all negociated frame sizes, but you can use the sysctl
-+ * to play with this value anyway.
- * Jean II */
- unsigned sysctl_max_tx_data_size = 2042;
-+/*
-+ * Maximum transmit window, i.e. number of LAP frames between turn-around.
-+ * This allow to override what the peer told us. Some peers are buggy and
-+ * don't always support what they tell us.
-+ * Jean II */
-+unsigned sysctl_max_tx_window = 7;
-
- /*
- * Specific device list limits some negotiation parameters at the connection
-@@ -227,7 +232,19 @@
- {
- __u16 msb = 0x8000;
- int index = 15; /* Current MSB */
--
-+
-+ /* Check for buggy peers.
-+ * Note : there is a small probability that it could be us, but I
-+ * would expect driver authors to catch that pretty early and be
-+ * able to check precisely what's going on. If a end user sees this,
-+ * it's very likely the peer. - Jean II */
-+ if (word == 0) {
-+ WARNING("%s(), Detected buggy peer, adjust null PV to 0x1!\n",
-+ __FUNCTION__);
-+ /* The only safe choice (we don't know the array size) */
-+ word = 0x1;
-+ }
-+
- while (msb) {
- if (word & msb)
- break; /* Found it! */
-@@ -378,10 +395,14 @@
-
- /*
- * Make sure the mintt is sensible.
-+ * Main culprit : Ericsson T39. - Jean II
- */
- if (sysctl_min_tx_turn_time > qos->min_turn_time.value) {
- int i;
-
-+ WARNING("%s(), Detected buggy peer, adjust mtt to %dus!\n",
-+ __FUNCTION__, sysctl_min_tx_turn_time);
-+
- /* We don't really need bits, but easier this way */
- i = value_highest_bit(sysctl_min_tx_turn_time, min_turn_times,
- 8, &qos->min_turn_time.bits);
-@@ -443,6 +464,11 @@
- if (qos->data_size.value > sysctl_max_tx_data_size)
- /* Allow non discrete adjustement to avoid loosing capacity */
- qos->data_size.value = sysctl_max_tx_data_size;
-+ /*
-+ * Override Tx window if user request it. - Jean II
-+ */
-+ if (qos->window_size.value > sysctl_max_tx_window)
-+ qos->window_size.value = sysctl_max_tx_window;
- }
-
- /*
---- linux/net/irda/irsysctl.c.orig 2005-01-22 19:19:56.006788256 +0100
-+++ linux/net/irda/irsysctl.c 2005-01-22 19:24:31.273941288 +0100
-@@ -40,8 +40,8 @@
-
- enum { DISCOVERY=1, DEVNAME, DEBUG, FAST_POLL, DISCOVERY_SLOTS,
- DISCOVERY_TIMEOUT, SLOT_TIMEOUT, MAX_BAUD_RATE, MIN_TX_TURN_TIME,
-- MAX_TX_DATA_SIZE, MAX_NOREPLY_TIME, WARN_NOREPLY_TIME, LAP_KEEPALIVE_TIME,
-- SPECIFIC_DEV };
-+ MAX_TX_DATA_SIZE, MAX_TX_WINDOW, MAX_NOREPLY_TIME, WARN_NOREPLY_TIME,
-+ LAP_KEEPALIVE_TIME, SPECIFIC_DEV };
-
- extern int sysctl_discovery;
- extern int sysctl_discovery_slots;
-@@ -53,6 +53,7 @@
- extern int sysctl_max_baud_rate;
- extern int sysctl_min_tx_turn_time;
- extern int sysctl_max_tx_data_size;
-+extern int sysctl_max_tx_window;
- extern int sysctl_max_noreply_time;
- extern int sysctl_warn_noreply_time;
- extern int sysctl_lap_keepalive_time;
-@@ -75,6 +76,8 @@
- static int min_min_tx_turn_time = 0;
- static int max_max_tx_data_size = 2048; /* See qos.c - IrLAP spec */
- static int min_max_tx_data_size = 64;
-+static int max_max_tx_window = 7; /* See qos.c - IrLAP spec */
-+static int min_max_tx_window = 1;
- static int max_max_noreply_time = 40; /* See qos.c - IrLAP spec */
- static int min_max_noreply_time = 3;
- static int max_warn_noreply_time = 3; /* 3s == standard */
-@@ -135,6 +138,9 @@
- { MAX_TX_DATA_SIZE, "max_tx_data_size", &sysctl_max_tx_data_size,
- sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
- NULL, &min_max_tx_data_size, &max_max_tx_data_size },
-+ { MAX_TX_WINDOW, "max_tx_window", &sysctl_max_tx_window,
-+ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
-+ NULL, &min_max_tx_window, &max_max_tx_window },
- { MAX_NOREPLY_TIME, "max_noreply_time", &sysctl_max_noreply_time,
- sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
- NULL, &min_max_noreply_time, &max_max_noreply_time },
---- linux/net/irda/parameters.c.orig 2003-05-13 11:20:16.000000000 +0200
-+++ linux/net/irda/parameters.c 2005-01-22 19:21:13.527003392 +0100
-@@ -204,11 +204,13 @@
- {
- irda_param_t p;
- int n = 0;
-+ int extract_len; /* Real lenght we extract */
- int err;
-
- p.pi = pi; /* In case handler needs to know */
- p.pl = buf[1]; /* Extract lenght of value */
- p.pv.i = 0; /* Clear value */
-+ extract_len = p.pl; /* Default : extract all */
-
- /* Check if buffer is long enough for parsing */
- if (len < (2+p.pl)) {
-@@ -220,18 +222,30 @@
- /*
- * Check that the integer length is what we expect it to be. If the
- * handler want a 16 bits integer then a 32 bits is not good enough
-+ * PV_INTEGER means that the handler is flexible.
- */
- if (((type & PV_MASK) != PV_INTEGER) && ((type & PV_MASK) != p.pl)) {
- ERROR(__FUNCTION__ "(), invalid parameter length! "
- "Expected %d bytes, but value had %d bytes!\n",
- type & PV_MASK, p.pl);
-
-- /* Skip parameter */
-- return p.pl+2;
-+ /* Most parameters are bit/byte fields or little endian,
-+ * so it's ok to only extract a subset of it (the subset
-+ * that the handler expect). This is necessary, as some
-+ * broken implementations seems to add extra undefined bits.
-+ * If the parameter is shorter than we expect or is big
-+ * endian, we can't play those tricks. Jean II */
-+ if((p.pl < (type & PV_MASK)) || (type & PV_BIG_ENDIAN)) {
-+ /* Skip parameter */
-+ return p.pl+2;
-+ } else {
-+ /* Extract subset of it, fallthrough */
-+ extract_len = type & PV_MASK;
-+ }
- }
-
-
-- switch (p.pl) {
-+ switch (extract_len) {
- case 1:
- n += irda_param_unpack(buf+2, "b", &p.pv.i);
- break;