1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
From 8200a4430e1515bf4523e3651fa7c29fdebbb0fb Mon Sep 17 00:00:00 2001
From: Thomas Kunze <thommycheck@gmx.de>
Date: Mon, 20 Oct 2008 17:50:06 +0200
Subject: [PATCH 07/23] hostap workaround for buggy sa1100 pcmcia driver
---
drivers/net/wireless/hostap/hostap_cs.c | 6 ++++--
drivers/net/wireless/hostap/hostap_hw.c | 14 ++++++++++++--
drivers/net/wireless/hostap/hostap_pci.c | 1 +
drivers/net/wireless/hostap/hostap_plx.c | 2 +-
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
index 6337402..928cdf0 100644
--- a/drivers/net/wireless/hostap/hostap_cs.c
+++ b/drivers/net/wireless/hostap/hostap_cs.c
@@ -35,7 +35,7 @@ static int ignore_cis_vcc;
module_param(ignore_cis_vcc, int, 0444);
MODULE_PARM_DESC(ignore_cis_vcc, "Ignore broken CIS VCC entry");
-
+int activar=0;
/* struct local_info::hw_priv */
struct hostap_cs_priv {
dev_node_t node;
@@ -499,11 +499,13 @@ static int hostap_cs_probe(struct pcmcia_device *p_dev)
PDEBUG(DEBUG_HW, "%s: setting Vcc=33 (constant)\n", dev_info);
p_dev->conf.IntType = INT_MEMORY_AND_IO;
-
+
+ activar=0;
ret = prism2_config(p_dev);
if (ret) {
PDEBUG(DEBUG_EXTRA, "prism2_config() failed\n");
}
+ activar=1;
return ret;
}
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index 3153fe9..188eaee 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -54,6 +54,7 @@
#include "hostap.h"
#include "hostap_ap.h"
+extern int activar;
/* #define final_version */
@@ -1497,6 +1498,8 @@ static int prism2_hw_config(struct net_device *dev, int initial)
if (local->hw_downloading)
return 1;
+ activar=1;
+
if (prism2_hw_init(dev, initial)) {
return local->no_pri ? 0 : 1;
}
@@ -2628,8 +2631,15 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
int events = 0;
u16 ev;
- iface = netdev_priv(dev);
- local = iface->local;
+
+ // Todos los parametros de entrada son correctos (no son nulos). De momento esta es la unica forma que conozco de detectar el problema.
+ if (!activar) {
+ printk("hostap_hw.c: INTERRUPT BEFORE DEVICE INIT!\n");
+ return IRQ_HANDLED;
+ }
+
+ iface = netdev_priv(dev);
+ local = iface->local;
prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
diff --git a/drivers/net/wireless/hostap/hostap_pci.c b/drivers/net/wireless/hostap/hostap_pci.c
index 3a874fc..df58aa3 100644
--- a/drivers/net/wireless/hostap/hostap_pci.c
+++ b/drivers/net/wireless/hostap/hostap_pci.c
@@ -19,6 +19,7 @@
#include "hostap_wlan.h"
+int activar=1;
static char *dev_info = "hostap_pci";
diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c
index cbf15d7..4475174 100644
--- a/drivers/net/wireless/hostap/hostap_plx.c
+++ b/drivers/net/wireless/hostap/hostap_plx.c
@@ -21,7 +21,7 @@
#include <asm/io.h>
#include "hostap_wlan.h"
-
+int activar=1;
static char *dev_info = "hostap_plx";
--
1.5.6.5
|