diff options
author | David S. Miller <davem@davemloft.net> | 2009-12-05 18:22:26 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-05 18:22:26 -0500 |
commit | 28b4d5cc17c20786848cdc07b7ea237a309776bb (patch) | |
tree | bae406a4b17229dcce7c11be5073f7a67665e477 /drivers/net/wireless/orinoco | |
parent | d29cecda036f251aee4947f47eea0fe9ed8cc931 (diff) | |
parent | 96fa2b508d2d3fe040cf4ef2fffb955f0a537ea1 (diff) |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts:
drivers/net/pcmcia/fmvj18x_cs.c
drivers/net/pcmcia/nmclan_cs.c
drivers/net/pcmcia/xirc2ps_cs.c
drivers/net/wireless/ray_cs.c
Diffstat (limited to 'drivers/net/wireless/orinoco')
-rw-r--r-- | drivers/net/wireless/orinoco/orinoco_cs.c | 33 | ||||
-rw-r--r-- | drivers/net/wireless/orinoco/spectrum_cs.c | 60 |
2 files changed, 41 insertions, 52 deletions
diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c index 38c1c9d2abb8..f27bb8367c98 100644 --- a/drivers/net/wireless/orinoco/orinoco_cs.c +++ b/drivers/net/wireless/orinoco/orinoco_cs.c | |||
@@ -109,7 +109,7 @@ orinoco_cs_probe(struct pcmcia_device *link) | |||
109 | struct orinoco_private *priv; | 109 | struct orinoco_private *priv; |
110 | struct orinoco_pccard *card; | 110 | struct orinoco_pccard *card; |
111 | 111 | ||
112 | priv = alloc_orinocodev(sizeof(*card), &handle_to_dev(link), | 112 | priv = alloc_orinocodev(sizeof(*card), &link->dev, |
113 | orinoco_cs_hard_reset, NULL); | 113 | orinoco_cs_hard_reset, NULL); |
114 | if (!priv) | 114 | if (!priv) |
115 | return -ENOMEM; | 115 | return -ENOMEM; |
@@ -120,10 +120,8 @@ orinoco_cs_probe(struct pcmcia_device *link) | |||
120 | link->priv = priv; | 120 | link->priv = priv; |
121 | 121 | ||
122 | /* Interrupt setup */ | 122 | /* Interrupt setup */ |
123 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; | 123 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
124 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
125 | link->irq.Handler = orinoco_interrupt; | 124 | link->irq.Handler = orinoco_interrupt; |
126 | link->irq.Instance = priv; | ||
127 | 125 | ||
128 | /* General socket configuration defaults can go here. In this | 126 | /* General socket configuration defaults can go here. In this |
129 | * client, we assume very little, and rely on the CIS for | 127 | * client, we assume very little, and rely on the CIS for |
@@ -160,12 +158,6 @@ static void orinoco_cs_detach(struct pcmcia_device *link) | |||
160 | * device available to the system. | 158 | * device available to the system. |
161 | */ | 159 | */ |
162 | 160 | ||
163 | #define CS_CHECK(fn, ret) do { \ | ||
164 | last_fn = (fn); \ | ||
165 | if ((last_ret = (ret)) != 0) \ | ||
166 | goto cs_failed; \ | ||
167 | } while (0) | ||
168 | |||
169 | static int orinoco_cs_config_check(struct pcmcia_device *p_dev, | 161 | static int orinoco_cs_config_check(struct pcmcia_device *p_dev, |
170 | cistpl_cftable_entry_t *cfg, | 162 | cistpl_cftable_entry_t *cfg, |
171 | cistpl_cftable_entry_t *dflt, | 163 | cistpl_cftable_entry_t *dflt, |
@@ -240,7 +232,7 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
240 | struct orinoco_private *priv = link->priv; | 232 | struct orinoco_private *priv = link->priv; |
241 | struct orinoco_pccard *card = priv->card; | 233 | struct orinoco_pccard *card = priv->card; |
242 | hermes_t *hw = &priv->hw; | 234 | hermes_t *hw = &priv->hw; |
243 | int last_fn, last_ret; | 235 | int ret; |
244 | void __iomem *mem; | 236 | void __iomem *mem; |
245 | 237 | ||
246 | /* | 238 | /* |
@@ -257,13 +249,12 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
257 | * and most client drivers will only use the CIS to fill in | 249 | * and most client drivers will only use the CIS to fill in |
258 | * implementation-defined details. | 250 | * implementation-defined details. |
259 | */ | 251 | */ |
260 | last_ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL); | 252 | ret = pcmcia_loop_config(link, orinoco_cs_config_check, NULL); |
261 | if (last_ret) { | 253 | if (ret) { |
262 | if (!ignore_cis_vcc) | 254 | if (!ignore_cis_vcc) |
263 | printk(KERN_ERR PFX "GetNextTuple(): No matching " | 255 | printk(KERN_ERR PFX "GetNextTuple(): No matching " |
264 | "CIS configuration. Maybe you need the " | 256 | "CIS configuration. Maybe you need the " |
265 | "ignore_cis_vcc=1 parameter.\n"); | 257 | "ignore_cis_vcc=1 parameter.\n"); |
266 | cs_error(link, RequestIO, last_ret); | ||
267 | goto failed; | 258 | goto failed; |
268 | } | 259 | } |
269 | 260 | ||
@@ -272,14 +263,16 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
272 | * a handler to the interrupt, unless the 'Handler' member of | 263 | * a handler to the interrupt, unless the 'Handler' member of |
273 | * the irq structure is initialized. | 264 | * the irq structure is initialized. |
274 | */ | 265 | */ |
275 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 266 | ret = pcmcia_request_irq(link, &link->irq); |
267 | if (ret) | ||
268 | goto failed; | ||
276 | 269 | ||
277 | /* We initialize the hermes structure before completing PCMCIA | 270 | /* We initialize the hermes structure before completing PCMCIA |
278 | * configuration just in case the interrupt handler gets | 271 | * configuration just in case the interrupt handler gets |
279 | * called. */ | 272 | * called. */ |
280 | mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); | 273 | mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); |
281 | if (!mem) | 274 | if (!mem) |
282 | goto cs_failed; | 275 | goto failed; |
283 | 276 | ||
284 | hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); | 277 | hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); |
285 | 278 | ||
@@ -288,8 +281,9 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
288 | * the I/O windows and the interrupt mapping, and putting the | 281 | * the I/O windows and the interrupt mapping, and putting the |
289 | * card and host interface into "Memory and IO" mode. | 282 | * card and host interface into "Memory and IO" mode. |
290 | */ | 283 | */ |
291 | CS_CHECK(RequestConfiguration, | 284 | ret = pcmcia_request_configuration(link, &link->conf); |
292 | pcmcia_request_configuration(link, &link->conf)); | 285 | if (ret) |
286 | goto failed; | ||
293 | 287 | ||
294 | /* Ok, we have the configuration, prepare to register the netdev */ | 288 | /* Ok, we have the configuration, prepare to register the netdev */ |
295 | card->node.major = card->node.minor = 0; | 289 | card->node.major = card->node.minor = 0; |
@@ -315,9 +309,6 @@ orinoco_cs_config(struct pcmcia_device *link) | |||
315 | * net_device has been registered */ | 309 | * net_device has been registered */ |
316 | return 0; | 310 | return 0; |
317 | 311 | ||
318 | cs_failed: | ||
319 | cs_error(link, last_fn, last_ret); | ||
320 | |||
321 | failed: | 312 | failed: |
322 | orinoco_cs_release(link); | 313 | orinoco_cs_release(link); |
323 | return -ENODEV; | 314 | return -ENODEV; |
diff --git a/drivers/net/wireless/orinoco/spectrum_cs.c b/drivers/net/wireless/orinoco/spectrum_cs.c index c361310b885d..59bda240fdc2 100644 --- a/drivers/net/wireless/orinoco/spectrum_cs.c +++ b/drivers/net/wireless/orinoco/spectrum_cs.c | |||
@@ -73,9 +73,6 @@ static void spectrum_cs_release(struct pcmcia_device *link); | |||
73 | #define HCR_MEM16 0x10 /* memory width bit, should be preserved */ | 73 | #define HCR_MEM16 0x10 /* memory width bit, should be preserved */ |
74 | 74 | ||
75 | 75 | ||
76 | #define CS_CHECK(fn, ret) \ | ||
77 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | ||
78 | |||
79 | /* | 76 | /* |
80 | * Reset the card using configuration registers COR and CCSR. | 77 | * Reset the card using configuration registers COR and CCSR. |
81 | * If IDLE is 1, stop the firmware, so that it can be safely rewritten. | 78 | * If IDLE is 1, stop the firmware, so that it can be safely rewritten. |
@@ -83,7 +80,7 @@ static void spectrum_cs_release(struct pcmcia_device *link); | |||
83 | static int | 80 | static int |
84 | spectrum_reset(struct pcmcia_device *link, int idle) | 81 | spectrum_reset(struct pcmcia_device *link, int idle) |
85 | { | 82 | { |
86 | int last_ret, last_fn; | 83 | int ret; |
87 | conf_reg_t reg; | 84 | conf_reg_t reg; |
88 | u_int save_cor; | 85 | u_int save_cor; |
89 | 86 | ||
@@ -95,23 +92,26 @@ spectrum_reset(struct pcmcia_device *link, int idle) | |||
95 | reg.Function = 0; | 92 | reg.Function = 0; |
96 | reg.Action = CS_READ; | 93 | reg.Action = CS_READ; |
97 | reg.Offset = CISREG_COR; | 94 | reg.Offset = CISREG_COR; |
98 | CS_CHECK(AccessConfigurationRegister, | 95 | ret = pcmcia_access_configuration_register(link, ®); |
99 | pcmcia_access_configuration_register(link, ®)); | 96 | if (ret) |
97 | goto failed; | ||
100 | save_cor = reg.Value; | 98 | save_cor = reg.Value; |
101 | 99 | ||
102 | /* Soft-Reset card */ | 100 | /* Soft-Reset card */ |
103 | reg.Action = CS_WRITE; | 101 | reg.Action = CS_WRITE; |
104 | reg.Offset = CISREG_COR; | 102 | reg.Offset = CISREG_COR; |
105 | reg.Value = (save_cor | COR_SOFT_RESET); | 103 | reg.Value = (save_cor | COR_SOFT_RESET); |
106 | CS_CHECK(AccessConfigurationRegister, | 104 | ret = pcmcia_access_configuration_register(link, ®); |
107 | pcmcia_access_configuration_register(link, ®)); | 105 | if (ret) |
106 | goto failed; | ||
108 | udelay(1000); | 107 | udelay(1000); |
109 | 108 | ||
110 | /* Read CCSR */ | 109 | /* Read CCSR */ |
111 | reg.Action = CS_READ; | 110 | reg.Action = CS_READ; |
112 | reg.Offset = CISREG_CCSR; | 111 | reg.Offset = CISREG_CCSR; |
113 | CS_CHECK(AccessConfigurationRegister, | 112 | ret = pcmcia_access_configuration_register(link, ®); |
114 | pcmcia_access_configuration_register(link, ®)); | 113 | if (ret) |
114 | goto failed; | ||
115 | 115 | ||
116 | /* | 116 | /* |
117 | * Start or stop the firmware. Memory width bit should be | 117 | * Start or stop the firmware. Memory width bit should be |
@@ -120,21 +120,22 @@ spectrum_reset(struct pcmcia_device *link, int idle) | |||
120 | reg.Action = CS_WRITE; | 120 | reg.Action = CS_WRITE; |
121 | reg.Offset = CISREG_CCSR; | 121 | reg.Offset = CISREG_CCSR; |
122 | reg.Value = (idle ? HCR_IDLE : HCR_RUN) | (reg.Value & HCR_MEM16); | 122 | reg.Value = (idle ? HCR_IDLE : HCR_RUN) | (reg.Value & HCR_MEM16); |
123 | CS_CHECK(AccessConfigurationRegister, | 123 | ret = pcmcia_access_configuration_register(link, ®); |
124 | pcmcia_access_configuration_register(link, ®)); | 124 | if (ret) |
125 | goto failed; | ||
125 | udelay(1000); | 126 | udelay(1000); |
126 | 127 | ||
127 | /* Restore original COR configuration index */ | 128 | /* Restore original COR configuration index */ |
128 | reg.Action = CS_WRITE; | 129 | reg.Action = CS_WRITE; |
129 | reg.Offset = CISREG_COR; | 130 | reg.Offset = CISREG_COR; |
130 | reg.Value = (save_cor & ~COR_SOFT_RESET); | 131 | reg.Value = (save_cor & ~COR_SOFT_RESET); |
131 | CS_CHECK(AccessConfigurationRegister, | 132 | ret = pcmcia_access_configuration_register(link, ®); |
132 | pcmcia_access_configuration_register(link, ®)); | 133 | if (ret) |
134 | goto failed; | ||
133 | udelay(1000); | 135 | udelay(1000); |
134 | return 0; | 136 | return 0; |
135 | 137 | ||
136 | cs_failed: | 138 | failed: |
137 | cs_error(link, last_fn, last_ret); | ||
138 | return -ENODEV; | 139 | return -ENODEV; |
139 | } | 140 | } |
140 | 141 | ||
@@ -181,7 +182,7 @@ spectrum_cs_probe(struct pcmcia_device *link) | |||
181 | struct orinoco_private *priv; | 182 | struct orinoco_private *priv; |
182 | struct orinoco_pccard *card; | 183 | struct orinoco_pccard *card; |
183 | 184 | ||
184 | priv = alloc_orinocodev(sizeof(*card), &handle_to_dev(link), | 185 | priv = alloc_orinocodev(sizeof(*card), &link->dev, |
185 | spectrum_cs_hard_reset, | 186 | spectrum_cs_hard_reset, |
186 | spectrum_cs_stop_firmware); | 187 | spectrum_cs_stop_firmware); |
187 | if (!priv) | 188 | if (!priv) |
@@ -193,10 +194,8 @@ spectrum_cs_probe(struct pcmcia_device *link) | |||
193 | link->priv = priv; | 194 | link->priv = priv; |
194 | 195 | ||
195 | /* Interrupt setup */ | 196 | /* Interrupt setup */ |
196 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; | 197 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
197 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
198 | link->irq.Handler = orinoco_interrupt; | 198 | link->irq.Handler = orinoco_interrupt; |
199 | link->irq.Instance = priv; | ||
200 | 199 | ||
201 | /* General socket configuration defaults can go here. In this | 200 | /* General socket configuration defaults can go here. In this |
202 | * client, we assume very little, and rely on the CIS for | 201 | * client, we assume very little, and rely on the CIS for |
@@ -307,7 +306,7 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
307 | struct orinoco_private *priv = link->priv; | 306 | struct orinoco_private *priv = link->priv; |
308 | struct orinoco_pccard *card = priv->card; | 307 | struct orinoco_pccard *card = priv->card; |
309 | hermes_t *hw = &priv->hw; | 308 | hermes_t *hw = &priv->hw; |
310 | int last_fn, last_ret; | 309 | int ret; |
311 | void __iomem *mem; | 310 | void __iomem *mem; |
312 | 311 | ||
313 | /* | 312 | /* |
@@ -324,13 +323,12 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
324 | * and most client drivers will only use the CIS to fill in | 323 | * and most client drivers will only use the CIS to fill in |
325 | * implementation-defined details. | 324 | * implementation-defined details. |
326 | */ | 325 | */ |
327 | last_ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL); | 326 | ret = pcmcia_loop_config(link, spectrum_cs_config_check, NULL); |
328 | if (last_ret) { | 327 | if (ret) { |
329 | if (!ignore_cis_vcc) | 328 | if (!ignore_cis_vcc) |
330 | printk(KERN_ERR PFX "GetNextTuple(): No matching " | 329 | printk(KERN_ERR PFX "GetNextTuple(): No matching " |
331 | "CIS configuration. Maybe you need the " | 330 | "CIS configuration. Maybe you need the " |
332 | "ignore_cis_vcc=1 parameter.\n"); | 331 | "ignore_cis_vcc=1 parameter.\n"); |
333 | cs_error(link, RequestIO, last_ret); | ||
334 | goto failed; | 332 | goto failed; |
335 | } | 333 | } |
336 | 334 | ||
@@ -339,14 +337,16 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
339 | * a handler to the interrupt, unless the 'Handler' member of | 337 | * a handler to the interrupt, unless the 'Handler' member of |
340 | * the irq structure is initialized. | 338 | * the irq structure is initialized. |
341 | */ | 339 | */ |
342 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 340 | ret = pcmcia_request_irq(link, &link->irq); |
341 | if (ret) | ||
342 | goto failed; | ||
343 | 343 | ||
344 | /* We initialize the hermes structure before completing PCMCIA | 344 | /* We initialize the hermes structure before completing PCMCIA |
345 | * configuration just in case the interrupt handler gets | 345 | * configuration just in case the interrupt handler gets |
346 | * called. */ | 346 | * called. */ |
347 | mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); | 347 | mem = ioport_map(link->io.BasePort1, link->io.NumPorts1); |
348 | if (!mem) | 348 | if (!mem) |
349 | goto cs_failed; | 349 | goto failed; |
350 | 350 | ||
351 | hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); | 351 | hermes_struct_init(hw, mem, HERMES_16BIT_REGSPACING); |
352 | 352 | ||
@@ -355,8 +355,9 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
355 | * the I/O windows and the interrupt mapping, and putting the | 355 | * the I/O windows and the interrupt mapping, and putting the |
356 | * card and host interface into "Memory and IO" mode. | 356 | * card and host interface into "Memory and IO" mode. |
357 | */ | 357 | */ |
358 | CS_CHECK(RequestConfiguration, | 358 | ret = pcmcia_request_configuration(link, &link->conf); |
359 | pcmcia_request_configuration(link, &link->conf)); | 359 | if (ret) |
360 | goto failed; | ||
360 | 361 | ||
361 | /* Ok, we have the configuration, prepare to register the netdev */ | 362 | /* Ok, we have the configuration, prepare to register the netdev */ |
362 | card->node.major = card->node.minor = 0; | 363 | card->node.major = card->node.minor = 0; |
@@ -386,9 +387,6 @@ spectrum_cs_config(struct pcmcia_device *link) | |||
386 | * net_device has been registered */ | 387 | * net_device has been registered */ |
387 | return 0; | 388 | return 0; |
388 | 389 | ||
389 | cs_failed: | ||
390 | cs_error(link, last_fn, last_ret); | ||
391 | |||
392 | failed: | 390 | failed: |
393 | spectrum_cs_release(link); | 391 | spectrum_cs_release(link); |
394 | return -ENODEV; | 392 | return -ENODEV; |