diff options
Diffstat (limited to 'drivers/net/wireless/airo_cs.c')
| -rw-r--r-- | drivers/net/wireless/airo_cs.c | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/drivers/net/wireless/airo_cs.c b/drivers/net/wireless/airo_cs.c index d0593ed9170e..f6036fb42319 100644 --- a/drivers/net/wireless/airo_cs.c +++ b/drivers/net/wireless/airo_cs.c | |||
| @@ -43,21 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #include "airo.h" | 44 | #include "airo.h" |
| 45 | 45 | ||
| 46 | /* | ||
| 47 | All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If | ||
| 48 | you do not define PCMCIA_DEBUG at all, all the debug code will be | ||
| 49 | left out. If you compile with PCMCIA_DEBUG=0, the debug code will | ||
| 50 | be present but disabled -- but it can then be enabled for specific | ||
| 51 | modules at load time with a 'pc_debug=#' option to insmod. | ||
| 52 | */ | ||
| 53 | #ifdef PCMCIA_DEBUG | ||
| 54 | static int pc_debug = PCMCIA_DEBUG; | ||
| 55 | module_param(pc_debug, int, 0); | ||
| 56 | static char *version = "$Revision: 1.2 $"; | ||
| 57 | #define DEBUG(n, args...) if (pc_debug > (n)) printk(KERN_DEBUG args); | ||
| 58 | #else | ||
| 59 | #define DEBUG(n, args...) | ||
| 60 | #endif | ||
| 61 | 46 | ||
| 62 | /*====================================================================*/ | 47 | /*====================================================================*/ |
| 63 | 48 | ||
| @@ -145,11 +130,10 @@ static int airo_probe(struct pcmcia_device *p_dev) | |||
| 145 | { | 130 | { |
| 146 | local_info_t *local; | 131 | local_info_t *local; |
| 147 | 132 | ||
| 148 | DEBUG(0, "airo_attach()\n"); | 133 | dev_dbg(&p_dev->dev, "airo_attach()\n"); |
| 149 | 134 | ||
| 150 | /* Interrupt setup */ | 135 | /* Interrupt setup */ |
| 151 | p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | 136 | p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
| 152 | p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
| 153 | p_dev->irq.Handler = NULL; | 137 | p_dev->irq.Handler = NULL; |
| 154 | 138 | ||
| 155 | /* | 139 | /* |
| @@ -184,7 +168,7 @@ static int airo_probe(struct pcmcia_device *p_dev) | |||
| 184 | 168 | ||
| 185 | static void airo_detach(struct pcmcia_device *link) | 169 | static void airo_detach(struct pcmcia_device *link) |
| 186 | { | 170 | { |
| 187 | DEBUG(0, "airo_detach(0x%p)\n", link); | 171 | dev_dbg(&link->dev, "airo_detach\n"); |
| 188 | 172 | ||
| 189 | airo_release(link); | 173 | airo_release(link); |
| 190 | 174 | ||
| @@ -204,9 +188,6 @@ static void airo_detach(struct pcmcia_device *link) | |||
| 204 | 188 | ||
| 205 | ======================================================================*/ | 189 | ======================================================================*/ |
| 206 | 190 | ||
| 207 | #define CS_CHECK(fn, ret) \ | ||
| 208 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | ||
| 209 | |||
| 210 | static int airo_cs_config_check(struct pcmcia_device *p_dev, | 191 | static int airo_cs_config_check(struct pcmcia_device *p_dev, |
| 211 | cistpl_cftable_entry_t *cfg, | 192 | cistpl_cftable_entry_t *cfg, |
| 212 | cistpl_cftable_entry_t *dflt, | 193 | cistpl_cftable_entry_t *dflt, |
| @@ -275,11 +256,11 @@ static int airo_cs_config_check(struct pcmcia_device *p_dev, | |||
| 275 | req->Base = mem->win[0].host_addr; | 256 | req->Base = mem->win[0].host_addr; |
| 276 | req->Size = mem->win[0].len; | 257 | req->Size = mem->win[0].len; |
| 277 | req->AccessSpeed = 0; | 258 | req->AccessSpeed = 0; |
| 278 | if (pcmcia_request_window(&p_dev, req, &p_dev->win) != 0) | 259 | if (pcmcia_request_window(p_dev, req, &p_dev->win) != 0) |
| 279 | return -ENODEV; | 260 | return -ENODEV; |
| 280 | map.Page = 0; | 261 | map.Page = 0; |
| 281 | map.CardOffset = mem->win[0].card_addr; | 262 | map.CardOffset = mem->win[0].card_addr; |
| 282 | if (pcmcia_map_mem_page(p_dev->win, &map) != 0) | 263 | if (pcmcia_map_mem_page(p_dev, p_dev->win, &map) != 0) |
| 283 | return -ENODEV; | 264 | return -ENODEV; |
| 284 | } | 265 | } |
| 285 | /* If we got this far, we're cool! */ | 266 | /* If we got this far, we're cool! */ |
| @@ -291,11 +272,11 @@ static int airo_config(struct pcmcia_device *link) | |||
| 291 | { | 272 | { |
| 292 | local_info_t *dev; | 273 | local_info_t *dev; |
| 293 | win_req_t *req; | 274 | win_req_t *req; |
| 294 | int last_fn, last_ret; | 275 | int ret; |
| 295 | 276 | ||
| 296 | dev = link->priv; | 277 | dev = link->priv; |
| 297 | 278 | ||
| 298 | DEBUG(0, "airo_config(0x%p)\n", link); | 279 | dev_dbg(&link->dev, "airo_config\n"); |
| 299 | 280 | ||
| 300 | req = kzalloc(sizeof(win_req_t), GFP_KERNEL); | 281 | req = kzalloc(sizeof(win_req_t), GFP_KERNEL); |
| 301 | if (!req) | 282 | if (!req) |
| @@ -315,8 +296,8 @@ static int airo_config(struct pcmcia_device *link) | |||
| 315 | * and most client drivers will only use the CIS to fill in | 296 | * and most client drivers will only use the CIS to fill in |
| 316 | * implementation-defined details. | 297 | * implementation-defined details. |
| 317 | */ | 298 | */ |
| 318 | last_ret = pcmcia_loop_config(link, airo_cs_config_check, req); | 299 | ret = pcmcia_loop_config(link, airo_cs_config_check, req); |
| 319 | if (last_ret) | 300 | if (ret) |
| 320 | goto failed; | 301 | goto failed; |
| 321 | 302 | ||
| 322 | /* | 303 | /* |
| @@ -324,21 +305,25 @@ static int airo_config(struct pcmcia_device *link) | |||
| 324 | handler to the interrupt, unless the 'Handler' member of the | 305 | handler to the interrupt, unless the 'Handler' member of the |
| 325 | irq structure is initialized. | 306 | irq structure is initialized. |
| 326 | */ | 307 | */ |
| 327 | if (link->conf.Attributes & CONF_ENABLE_IRQ) | 308 | if (link->conf.Attributes & CONF_ENABLE_IRQ) { |
| 328 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | 309 | ret = pcmcia_request_irq(link, &link->irq); |
| 310 | if (ret) | ||
| 311 | goto failed; | ||
| 312 | } | ||
| 329 | 313 | ||
| 330 | /* | 314 | /* |
| 331 | This actually configures the PCMCIA socket -- setting up | 315 | This actually configures the PCMCIA socket -- setting up |
| 332 | the I/O windows and the interrupt mapping, and putting the | 316 | the I/O windows and the interrupt mapping, and putting the |
| 333 | card and host interface into "Memory and IO" mode. | 317 | card and host interface into "Memory and IO" mode. |
| 334 | */ | 318 | */ |
| 335 | CS_CHECK(RequestConfiguration, | 319 | ret = pcmcia_request_configuration(link, &link->conf); |
| 336 | pcmcia_request_configuration(link, &link->conf)); | 320 | if (ret) |
| 321 | goto failed; | ||
| 337 | ((local_info_t *)link->priv)->eth_dev = | 322 | ((local_info_t *)link->priv)->eth_dev = |
| 338 | init_airo_card(link->irq.AssignedIRQ, | 323 | init_airo_card(link->irq.AssignedIRQ, |
| 339 | link->io.BasePort1, 1, &handle_to_dev(link)); | 324 | link->io.BasePort1, 1, &link->dev); |
| 340 | if (!((local_info_t *)link->priv)->eth_dev) | 325 | if (!((local_info_t *)link->priv)->eth_dev) |
| 341 | goto cs_failed; | 326 | goto failed; |
| 342 | 327 | ||
| 343 | /* | 328 | /* |
| 344 | At this point, the dev_node_t structure(s) need to be | 329 | At this point, the dev_node_t structure(s) need to be |
| @@ -368,8 +353,6 @@ static int airo_config(struct pcmcia_device *link) | |||
| 368 | kfree(req); | 353 | kfree(req); |
| 369 | return 0; | 354 | return 0; |
| 370 | 355 | ||
| 371 | cs_failed: | ||
| 372 | cs_error(link, last_fn, last_ret); | ||
| 373 | failed: | 356 | failed: |
| 374 | airo_release(link); | 357 | airo_release(link); |
| 375 | kfree(req); | 358 | kfree(req); |
| @@ -386,7 +369,7 @@ static int airo_config(struct pcmcia_device *link) | |||
| 386 | 369 | ||
| 387 | static void airo_release(struct pcmcia_device *link) | 370 | static void airo_release(struct pcmcia_device *link) |
| 388 | { | 371 | { |
| 389 | DEBUG(0, "airo_release(0x%p)\n", link); | 372 | dev_dbg(&link->dev, "airo_release\n"); |
| 390 | pcmcia_disable_device(link); | 373 | pcmcia_disable_device(link); |
| 391 | } | 374 | } |
| 392 | 375 | ||
