diff options
Diffstat (limited to 'drivers/isdn/hisax/sedlbauer_cs.c')
-rw-r--r-- | drivers/isdn/hisax/sedlbauer_cs.c | 58 |
1 files changed, 26 insertions, 32 deletions
diff --git a/drivers/isdn/hisax/sedlbauer_cs.c b/drivers/isdn/hisax/sedlbauer_cs.c index 6025722001fa..2af48a684654 100644 --- a/drivers/isdn/hisax/sedlbauer_cs.c +++ b/drivers/isdn/hisax/sedlbauer_cs.c | |||
@@ -95,8 +95,8 @@ module_param(protocol, int, 0); | |||
95 | event handler. | 95 | event handler. |
96 | */ | 96 | */ |
97 | 97 | ||
98 | static void sedlbauer_config(dev_link_t *link); | 98 | static void sedlbauer_config(struct pcmcia_device *link); |
99 | static void sedlbauer_release(dev_link_t *link); | 99 | static void sedlbauer_release(struct pcmcia_device *link); |
100 | 100 | ||
101 | /* | 101 | /* |
102 | The attach() and detach() entry points are used to create and destroy | 102 | The attach() and detach() entry points are used to create and destroy |
@@ -119,7 +119,7 @@ static void sedlbauer_detach(struct pcmcia_device *p_dev); | |||
119 | example, ethernet cards, modems). In other cases, there may be | 119 | example, ethernet cards, modems). In other cases, there may be |
120 | many actual or logical devices (SCSI adapters, memory cards with | 120 | many actual or logical devices (SCSI adapters, memory cards with |
121 | multiple partitions). The dev_node_t structures need to be kept | 121 | multiple partitions). The dev_node_t structures need to be kept |
122 | in a linked list starting at the 'dev' field of a dev_link_t | 122 | in a linked list starting at the 'dev' field of a struct pcmcia_device |
123 | structure. We allocate them in the card's private data structure, | 123 | structure. We allocate them in the card's private data structure, |
124 | because they generally shouldn't be allocated dynamically. | 124 | because they generally shouldn't be allocated dynamically. |
125 | 125 | ||
@@ -148,11 +148,10 @@ typedef struct local_info_t { | |||
148 | 148 | ||
149 | ======================================================================*/ | 149 | ======================================================================*/ |
150 | 150 | ||
151 | static int sedlbauer_attach(struct pcmcia_device *p_dev) | 151 | static int sedlbauer_attach(struct pcmcia_device *link) |
152 | { | 152 | { |
153 | local_info_t *local; | 153 | local_info_t *local; |
154 | dev_link_t *link = dev_to_instance(p_dev); | 154 | |
155 | |||
156 | DEBUG(0, "sedlbauer_attach()\n"); | 155 | DEBUG(0, "sedlbauer_attach()\n"); |
157 | 156 | ||
158 | /* Allocate space for private device-specific data */ | 157 | /* Allocate space for private device-specific data */ |
@@ -161,7 +160,7 @@ static int sedlbauer_attach(struct pcmcia_device *p_dev) | |||
161 | memset(local, 0, sizeof(local_info_t)); | 160 | memset(local, 0, sizeof(local_info_t)); |
162 | local->cardnr = -1; | 161 | local->cardnr = -1; |
163 | 162 | ||
164 | local->p_dev = p_dev; | 163 | local->p_dev = link; |
165 | link->priv = local; | 164 | link->priv = local; |
166 | 165 | ||
167 | /* Interrupt setup */ | 166 | /* Interrupt setup */ |
@@ -202,10 +201,8 @@ static int sedlbauer_attach(struct pcmcia_device *p_dev) | |||
202 | 201 | ||
203 | ======================================================================*/ | 202 | ======================================================================*/ |
204 | 203 | ||
205 | static void sedlbauer_detach(struct pcmcia_device *p_dev) | 204 | static void sedlbauer_detach(struct pcmcia_device *link) |
206 | { | 205 | { |
207 | dev_link_t *link = dev_to_instance(p_dev); | ||
208 | |||
209 | DEBUG(0, "sedlbauer_detach(0x%p)\n", link); | 206 | DEBUG(0, "sedlbauer_detach(0x%p)\n", link); |
210 | 207 | ||
211 | if (link->state & DEV_CONFIG) { | 208 | if (link->state & DEV_CONFIG) { |
@@ -227,9 +224,8 @@ static void sedlbauer_detach(struct pcmcia_device *p_dev) | |||
227 | #define CS_CHECK(fn, ret) \ | 224 | #define CS_CHECK(fn, ret) \ |
228 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | 225 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) |
229 | 226 | ||
230 | static void sedlbauer_config(dev_link_t *link) | 227 | static void sedlbauer_config(struct pcmcia_device *link) |
231 | { | 228 | { |
232 | client_handle_t handle = link->handle; | ||
233 | local_info_t *dev = link->priv; | 229 | local_info_t *dev = link->priv; |
234 | tuple_t tuple; | 230 | tuple_t tuple; |
235 | cisparse_t parse; | 231 | cisparse_t parse; |
@@ -251,16 +247,16 @@ static void sedlbauer_config(dev_link_t *link) | |||
251 | tuple.TupleData = buf; | 247 | tuple.TupleData = buf; |
252 | tuple.TupleDataMax = sizeof(buf); | 248 | tuple.TupleDataMax = sizeof(buf); |
253 | tuple.TupleOffset = 0; | 249 | tuple.TupleOffset = 0; |
254 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple)); | 250 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
255 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple)); | 251 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); |
256 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse)); | 252 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse)); |
257 | link->conf.ConfigBase = parse.config.base; | 253 | link->conf.ConfigBase = parse.config.base; |
258 | link->conf.Present = parse.config.rmask[0]; | 254 | link->conf.Present = parse.config.rmask[0]; |
259 | 255 | ||
260 | /* Configure card */ | 256 | /* Configure card */ |
261 | link->state |= DEV_CONFIG; | 257 | link->state |= DEV_CONFIG; |
262 | 258 | ||
263 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(handle, &conf)); | 259 | CS_CHECK(GetConfigurationInfo, pcmcia_get_configuration_info(link, &conf)); |
264 | 260 | ||
265 | /* | 261 | /* |
266 | In this loop, we scan the CIS for configuration table entries, | 262 | In this loop, we scan the CIS for configuration table entries, |
@@ -275,12 +271,12 @@ static void sedlbauer_config(dev_link_t *link) | |||
275 | will only use the CIS to fill in implementation-defined details. | 271 | will only use the CIS to fill in implementation-defined details. |
276 | */ | 272 | */ |
277 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 273 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; |
278 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple)); | 274 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); |
279 | while (1) { | 275 | while (1) { |
280 | cistpl_cftable_entry_t dflt = { 0 }; | 276 | cistpl_cftable_entry_t dflt = { 0 }; |
281 | cistpl_cftable_entry_t *cfg = &(parse.cftable_entry); | 277 | cistpl_cftable_entry_t *cfg = &(parse.cftable_entry); |
282 | if (pcmcia_get_tuple_data(handle, &tuple) != 0 || | 278 | if (pcmcia_get_tuple_data(link, &tuple) != 0 || |
283 | pcmcia_parse_tuple(handle, &tuple, &parse) != 0) | 279 | pcmcia_parse_tuple(link, &tuple, &parse) != 0) |
284 | goto next_entry; | 280 | goto next_entry; |
285 | 281 | ||
286 | if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg; | 282 | if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg; |
@@ -334,13 +330,13 @@ static void sedlbauer_config(dev_link_t *link) | |||
334 | link->io.NumPorts2 = io->win[1].len; | 330 | link->io.NumPorts2 = io->win[1].len; |
335 | } | 331 | } |
336 | /* This reserves IO space but doesn't actually enable it */ | 332 | /* This reserves IO space but doesn't actually enable it */ |
337 | if (pcmcia_request_io(link->handle, &link->io) != 0) | 333 | if (pcmcia_request_io(link, &link->io) != 0) |
338 | goto next_entry; | 334 | goto next_entry; |
339 | } | 335 | } |
340 | 336 | ||
341 | /* | 337 | /* |
342 | Now set up a common memory window, if needed. There is room | 338 | Now set up a common memory window, if needed. There is room |
343 | in the dev_link_t structure for one memory window handle, | 339 | in the struct pcmcia_device structure for one memory window handle, |
344 | but if the base addresses need to be saved, or if multiple | 340 | but if the base addresses need to be saved, or if multiple |
345 | windows are needed, the info should go in the private data | 341 | windows are needed, the info should go in the private data |
346 | structure for this device. | 342 | structure for this device. |
@@ -361,7 +357,7 @@ static void sedlbauer_config(dev_link_t *link) | |||
361 | req.Size = 0x1000; | 357 | req.Size = 0x1000; |
362 | */ | 358 | */ |
363 | req.AccessSpeed = 0; | 359 | req.AccessSpeed = 0; |
364 | if (pcmcia_request_window(&link->handle, &req, &link->win) != 0) | 360 | if (pcmcia_request_window(&link, &req, &link->win) != 0) |
365 | goto next_entry; | 361 | goto next_entry; |
366 | map.Page = 0; map.CardOffset = mem->win[0].card_addr; | 362 | map.Page = 0; map.CardOffset = mem->win[0].card_addr; |
367 | if (pcmcia_map_mem_page(link->win, &map) != 0) | 363 | if (pcmcia_map_mem_page(link->win, &map) != 0) |
@@ -371,7 +367,7 @@ static void sedlbauer_config(dev_link_t *link) | |||
371 | break; | 367 | break; |
372 | 368 | ||
373 | next_entry: | 369 | next_entry: |
374 | CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple)); | 370 | CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple)); |
375 | } | 371 | } |
376 | 372 | ||
377 | /* | 373 | /* |
@@ -380,14 +376,14 @@ static void sedlbauer_config(dev_link_t *link) | |||
380 | irq structure is initialized. | 376 | irq structure is initialized. |
381 | */ | 377 | */ |
382 | if (link->conf.Attributes & CONF_ENABLE_IRQ) | 378 | if (link->conf.Attributes & CONF_ENABLE_IRQ) |
383 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link->handle, &link->irq)); | 379 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); |
384 | 380 | ||
385 | /* | 381 | /* |
386 | This actually configures the PCMCIA socket -- setting up | 382 | This actually configures the PCMCIA socket -- setting up |
387 | the I/O windows and the interrupt mapping, and putting the | 383 | the I/O windows and the interrupt mapping, and putting the |
388 | card and host interface into "Memory and IO" mode. | 384 | card and host interface into "Memory and IO" mode. |
389 | */ | 385 | */ |
390 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link->handle, &link->conf)); | 386 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); |
391 | 387 | ||
392 | /* | 388 | /* |
393 | At this point, the dev_node_t structure(s) need to be | 389 | At this point, the dev_node_t structure(s) need to be |
@@ -433,7 +429,7 @@ static void sedlbauer_config(dev_link_t *link) | |||
433 | return; | 429 | return; |
434 | 430 | ||
435 | cs_failed: | 431 | cs_failed: |
436 | cs_error(link->handle, last_fn, last_ret); | 432 | cs_error(link, last_fn, last_ret); |
437 | sedlbauer_release(link); | 433 | sedlbauer_release(link); |
438 | 434 | ||
439 | } /* sedlbauer_config */ | 435 | } /* sedlbauer_config */ |
@@ -446,7 +442,7 @@ cs_failed: | |||
446 | 442 | ||
447 | ======================================================================*/ | 443 | ======================================================================*/ |
448 | 444 | ||
449 | static void sedlbauer_release(dev_link_t *link) | 445 | static void sedlbauer_release(struct pcmcia_device *link) |
450 | { | 446 | { |
451 | local_info_t *local = link->priv; | 447 | local_info_t *local = link->priv; |
452 | DEBUG(0, "sedlbauer_release(0x%p)\n", link); | 448 | DEBUG(0, "sedlbauer_release(0x%p)\n", link); |
@@ -458,12 +454,11 @@ static void sedlbauer_release(dev_link_t *link) | |||
458 | } | 454 | } |
459 | } | 455 | } |
460 | 456 | ||
461 | pcmcia_disable_device(link->handle); | 457 | pcmcia_disable_device(link); |
462 | } /* sedlbauer_release */ | 458 | } /* sedlbauer_release */ |
463 | 459 | ||
464 | static int sedlbauer_suspend(struct pcmcia_device *p_dev) | 460 | static int sedlbauer_suspend(struct pcmcia_device *link) |
465 | { | 461 | { |
466 | dev_link_t *link = dev_to_instance(p_dev); | ||
467 | local_info_t *dev = link->priv; | 462 | local_info_t *dev = link->priv; |
468 | 463 | ||
469 | dev->stop = 1; | 464 | dev->stop = 1; |
@@ -471,9 +466,8 @@ static int sedlbauer_suspend(struct pcmcia_device *p_dev) | |||
471 | return 0; | 466 | return 0; |
472 | } | 467 | } |
473 | 468 | ||
474 | static int sedlbauer_resume(struct pcmcia_device *p_dev) | 469 | static int sedlbauer_resume(struct pcmcia_device *link) |
475 | { | 470 | { |
476 | dev_link_t *link = dev_to_instance(p_dev); | ||
477 | local_info_t *dev = link->priv; | 471 | local_info_t *dev = link->priv; |
478 | 472 | ||
479 | dev->stop = 0; | 473 | dev->stop = 0; |