diff options
Diffstat (limited to 'drivers/pcmcia')
| -rw-r--r-- | drivers/pcmcia/cistpl.c | 20 | ||||
| -rw-r--r-- | drivers/pcmcia/cs.c | 69 | ||||
| -rw-r--r-- | drivers/pcmcia/cs_internal.h | 3 | ||||
| -rw-r--r-- | drivers/pcmcia/ds.c | 8 | ||||
| -rw-r--r-- | drivers/pcmcia/i82365.c | 4 | ||||
| -rw-r--r-- | drivers/pcmcia/m32r_cfc.c | 10 | ||||
| -rw-r--r-- | drivers/pcmcia/m32r_pcc.c | 10 | ||||
| -rw-r--r-- | drivers/pcmcia/m8xx_pcmcia.c | 15 | ||||
| -rw-r--r-- | drivers/pcmcia/pcmcia_ioctl.c | 2 | ||||
| -rw-r--r-- | drivers/pcmcia/pd6729.c | 6 | ||||
| -rw-r--r-- | drivers/pcmcia/rsrc_nonstatic.c | 3 | ||||
| -rw-r--r-- | drivers/pcmcia/soc_common.c | 5 | ||||
| -rw-r--r-- | drivers/pcmcia/socket_sysfs.c | 2 | ||||
| -rw-r--r-- | drivers/pcmcia/tcic.c | 4 | ||||
| -rw-r--r-- | drivers/pcmcia/yenta_socket.c | 12 |
15 files changed, 108 insertions, 65 deletions
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index 4a110b7b2673..6c4a4fc83630 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c | |||
| @@ -1463,7 +1463,9 @@ int pccard_read_tuple(struct pcmcia_socket *s, unsigned int function, cisdata_t | |||
| 1463 | return -ENOMEM; | 1463 | return -ENOMEM; |
| 1464 | } | 1464 | } |
| 1465 | tuple.DesiredTuple = code; | 1465 | tuple.DesiredTuple = code; |
| 1466 | tuple.Attributes = TUPLE_RETURN_COMMON; | 1466 | tuple.Attributes = 0; |
| 1467 | if (function == BIND_FN_ALL) | ||
| 1468 | tuple.Attributes = TUPLE_RETURN_COMMON; | ||
| 1467 | ret = pccard_get_first_tuple(s, function, &tuple); | 1469 | ret = pccard_get_first_tuple(s, function, &tuple); |
| 1468 | if (ret != 0) | 1470 | if (ret != 0) |
| 1469 | goto done; | 1471 | goto done; |
| @@ -1490,7 +1492,7 @@ EXPORT_SYMBOL(pccard_read_tuple); | |||
| 1490 | 1492 | ||
| 1491 | ======================================================================*/ | 1493 | ======================================================================*/ |
| 1492 | 1494 | ||
| 1493 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned int *info) | 1495 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info) |
| 1494 | { | 1496 | { |
| 1495 | tuple_t *tuple; | 1497 | tuple_t *tuple; |
| 1496 | cisparse_t *p; | 1498 | cisparse_t *p; |
| @@ -1515,30 +1517,30 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, unsigned | |||
| 1515 | count = reserved = 0; | 1517 | count = reserved = 0; |
| 1516 | tuple->DesiredTuple = RETURN_FIRST_TUPLE; | 1518 | tuple->DesiredTuple = RETURN_FIRST_TUPLE; |
| 1517 | tuple->Attributes = TUPLE_RETURN_COMMON; | 1519 | tuple->Attributes = TUPLE_RETURN_COMMON; |
| 1518 | ret = pccard_get_first_tuple(s, function, tuple); | 1520 | ret = pccard_get_first_tuple(s, BIND_FN_ALL, tuple); |
| 1519 | if (ret != 0) | 1521 | if (ret != 0) |
| 1520 | goto done; | 1522 | goto done; |
| 1521 | 1523 | ||
| 1522 | /* First tuple should be DEVICE; we should really have either that | 1524 | /* First tuple should be DEVICE; we should really have either that |
| 1523 | or a CFTABLE_ENTRY of some sort */ | 1525 | or a CFTABLE_ENTRY of some sort */ |
| 1524 | if ((tuple->TupleCode == CISTPL_DEVICE) || | 1526 | if ((tuple->TupleCode == CISTPL_DEVICE) || |
| 1525 | (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY, p) == 0) || | 1527 | (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY, p) == 0) || |
| 1526 | (pccard_read_tuple(s, function, CISTPL_CFTABLE_ENTRY_CB, p) == 0)) | 1528 | (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_CFTABLE_ENTRY_CB, p) == 0)) |
| 1527 | dev_ok++; | 1529 | dev_ok++; |
| 1528 | 1530 | ||
| 1529 | /* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2 | 1531 | /* All cards should have a MANFID tuple, and/or a VERS_1 or VERS_2 |
| 1530 | tuple, for card identification. Certain old D-Link and Linksys | 1532 | tuple, for card identification. Certain old D-Link and Linksys |
| 1531 | cards have only a broken VERS_2 tuple; hence the bogus test. */ | 1533 | cards have only a broken VERS_2 tuple; hence the bogus test. */ |
| 1532 | if ((pccard_read_tuple(s, function, CISTPL_MANFID, p) == 0) || | 1534 | if ((pccard_read_tuple(s, BIND_FN_ALL, CISTPL_MANFID, p) == 0) || |
| 1533 | (pccard_read_tuple(s, function, CISTPL_VERS_1, p) == 0) || | 1535 | (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_VERS_1, p) == 0) || |
| 1534 | (pccard_read_tuple(s, function, CISTPL_VERS_2, p) != -ENOSPC)) | 1536 | (pccard_read_tuple(s, BIND_FN_ALL, CISTPL_VERS_2, p) != -ENOSPC)) |
| 1535 | ident_ok++; | 1537 | ident_ok++; |
| 1536 | 1538 | ||
| 1537 | if (!dev_ok && !ident_ok) | 1539 | if (!dev_ok && !ident_ok) |
| 1538 | goto done; | 1540 | goto done; |
| 1539 | 1541 | ||
| 1540 | for (count = 1; count < MAX_TUPLES; count++) { | 1542 | for (count = 1; count < MAX_TUPLES; count++) { |
| 1541 | ret = pccard_get_next_tuple(s, function, tuple); | 1543 | ret = pccard_get_next_tuple(s, BIND_FN_ALL, tuple); |
| 1542 | if (ret != 0) | 1544 | if (ret != 0) |
| 1543 | break; | 1545 | break; |
| 1544 | if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || | 1546 | if (((tuple->TupleCode > 0x23) && (tuple->TupleCode < 0x40)) || |
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 934d4bee39a0..698d75cda084 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c | |||
| @@ -98,10 +98,13 @@ EXPORT_SYMBOL(pcmcia_socket_list_rwsem); | |||
| 98 | * These functions check for the appropriate struct pcmcia_soket arrays, | 98 | * These functions check for the appropriate struct pcmcia_soket arrays, |
| 99 | * and pass them to the low-level functions pcmcia_{suspend,resume}_socket | 99 | * and pass them to the low-level functions pcmcia_{suspend,resume}_socket |
| 100 | */ | 100 | */ |
| 101 | static int socket_early_resume(struct pcmcia_socket *skt); | ||
| 102 | static int socket_late_resume(struct pcmcia_socket *skt); | ||
| 101 | static int socket_resume(struct pcmcia_socket *skt); | 103 | static int socket_resume(struct pcmcia_socket *skt); |
| 102 | static int socket_suspend(struct pcmcia_socket *skt); | 104 | static int socket_suspend(struct pcmcia_socket *skt); |
| 103 | 105 | ||
| 104 | int pcmcia_socket_dev_suspend(struct device *dev) | 106 | static void pcmcia_socket_dev_run(struct device *dev, |
| 107 | int (*cb)(struct pcmcia_socket *)) | ||
| 105 | { | 108 | { |
| 106 | struct pcmcia_socket *socket; | 109 | struct pcmcia_socket *socket; |
| 107 | 110 | ||
| @@ -110,29 +113,34 @@ int pcmcia_socket_dev_suspend(struct device *dev) | |||
| 110 | if (socket->dev.parent != dev) | 113 | if (socket->dev.parent != dev) |
| 111 | continue; | 114 | continue; |
| 112 | mutex_lock(&socket->skt_mutex); | 115 | mutex_lock(&socket->skt_mutex); |
| 113 | socket_suspend(socket); | 116 | cb(socket); |
| 114 | mutex_unlock(&socket->skt_mutex); | 117 | mutex_unlock(&socket->skt_mutex); |
| 115 | } | 118 | } |
| 116 | up_read(&pcmcia_socket_list_rwsem); | 119 | up_read(&pcmcia_socket_list_rwsem); |
| 120 | } | ||
| 117 | 121 | ||
| 122 | int pcmcia_socket_dev_suspend(struct device *dev) | ||
| 123 | { | ||
| 124 | pcmcia_socket_dev_run(dev, socket_suspend); | ||
| 118 | return 0; | 125 | return 0; |
| 119 | } | 126 | } |
| 120 | EXPORT_SYMBOL(pcmcia_socket_dev_suspend); | 127 | EXPORT_SYMBOL(pcmcia_socket_dev_suspend); |
| 121 | 128 | ||
| 122 | int pcmcia_socket_dev_resume(struct device *dev) | 129 | void pcmcia_socket_dev_early_resume(struct device *dev) |
| 123 | { | 130 | { |
| 124 | struct pcmcia_socket *socket; | 131 | pcmcia_socket_dev_run(dev, socket_early_resume); |
| 132 | } | ||
| 133 | EXPORT_SYMBOL(pcmcia_socket_dev_early_resume); | ||
| 125 | 134 | ||
| 126 | down_read(&pcmcia_socket_list_rwsem); | 135 | void pcmcia_socket_dev_late_resume(struct device *dev) |
| 127 | list_for_each_entry(socket, &pcmcia_socket_list, socket_list) { | 136 | { |
| 128 | if (socket->dev.parent != dev) | 137 | pcmcia_socket_dev_run(dev, socket_late_resume); |
| 129 | continue; | 138 | } |
| 130 | mutex_lock(&socket->skt_mutex); | 139 | EXPORT_SYMBOL(pcmcia_socket_dev_late_resume); |
| 131 | socket_resume(socket); | ||
| 132 | mutex_unlock(&socket->skt_mutex); | ||
| 133 | } | ||
| 134 | up_read(&pcmcia_socket_list_rwsem); | ||
| 135 | 140 | ||
| 141 | int pcmcia_socket_dev_resume(struct device *dev) | ||
| 142 | { | ||
| 143 | pcmcia_socket_dev_run(dev, socket_resume); | ||
| 136 | return 0; | 144 | return 0; |
| 137 | } | 145 | } |
| 138 | EXPORT_SYMBOL(pcmcia_socket_dev_resume); | 146 | EXPORT_SYMBOL(pcmcia_socket_dev_resume); |
| @@ -546,29 +554,24 @@ static int socket_suspend(struct pcmcia_socket *skt) | |||
| 546 | return 0; | 554 | return 0; |
| 547 | } | 555 | } |
| 548 | 556 | ||
| 549 | /* | 557 | static int socket_early_resume(struct pcmcia_socket *skt) |
| 550 | * Resume a socket. If a card is present, verify its CIS against | ||
| 551 | * our cached copy. If they are different, the card has been | ||
| 552 | * replaced, and we need to tell the drivers. | ||
| 553 | */ | ||
| 554 | static int socket_resume(struct pcmcia_socket *skt) | ||
| 555 | { | 558 | { |
| 556 | int ret; | ||
| 557 | |||
| 558 | if (!(skt->state & SOCKET_SUSPEND)) | ||
| 559 | return -EBUSY; | ||
| 560 | |||
| 561 | skt->socket = dead_socket; | 559 | skt->socket = dead_socket; |
| 562 | skt->ops->init(skt); | 560 | skt->ops->init(skt); |
| 563 | skt->ops->set_socket(skt, &skt->socket); | 561 | skt->ops->set_socket(skt, &skt->socket); |
| 562 | if (skt->state & SOCKET_PRESENT) | ||
| 563 | skt->resume_status = socket_setup(skt, resume_delay); | ||
| 564 | return 0; | ||
| 565 | } | ||
| 564 | 566 | ||
| 567 | static int socket_late_resume(struct pcmcia_socket *skt) | ||
| 568 | { | ||
| 565 | if (!(skt->state & SOCKET_PRESENT)) { | 569 | if (!(skt->state & SOCKET_PRESENT)) { |
| 566 | skt->state &= ~SOCKET_SUSPEND; | 570 | skt->state &= ~SOCKET_SUSPEND; |
| 567 | return socket_insert(skt); | 571 | return socket_insert(skt); |
| 568 | } | 572 | } |
| 569 | 573 | ||
| 570 | ret = socket_setup(skt, resume_delay); | 574 | if (skt->resume_status == 0) { |
| 571 | if (ret == 0) { | ||
| 572 | /* | 575 | /* |
| 573 | * FIXME: need a better check here for cardbus cards. | 576 | * FIXME: need a better check here for cardbus cards. |
| 574 | */ | 577 | */ |
| @@ -596,6 +599,20 @@ static int socket_resume(struct pcmcia_socket *skt) | |||
| 596 | return 0; | 599 | return 0; |
| 597 | } | 600 | } |
| 598 | 601 | ||
| 602 | /* | ||
| 603 | * Resume a socket. If a card is present, verify its CIS against | ||
| 604 | * our cached copy. If they are different, the card has been | ||
| 605 | * replaced, and we need to tell the drivers. | ||
| 606 | */ | ||
| 607 | static int socket_resume(struct pcmcia_socket *skt) | ||
| 608 | { | ||
| 609 | if (!(skt->state & SOCKET_SUSPEND)) | ||
| 610 | return -EBUSY; | ||
| 611 | |||
| 612 | socket_early_resume(skt); | ||
| 613 | return socket_late_resume(skt); | ||
| 614 | } | ||
| 615 | |||
| 599 | static void socket_remove(struct pcmcia_socket *skt) | 616 | static void socket_remove(struct pcmcia_socket *skt) |
| 600 | { | 617 | { |
| 601 | dev_printk(KERN_NOTICE, &skt->dev, | 618 | dev_printk(KERN_NOTICE, &skt->dev, |
diff --git a/drivers/pcmcia/cs_internal.h b/drivers/pcmcia/cs_internal.h index 79615e6d540b..1f4098f1354d 100644 --- a/drivers/pcmcia/cs_internal.h +++ b/drivers/pcmcia/cs_internal.h | |||
| @@ -197,8 +197,7 @@ int pccard_read_tuple(struct pcmcia_socket *s, unsigned int function, | |||
| 197 | cisdata_t code, void *parse); | 197 | cisdata_t code, void *parse); |
| 198 | int pcmcia_replace_cis(struct pcmcia_socket *s, | 198 | int pcmcia_replace_cis(struct pcmcia_socket *s, |
| 199 | const u8 *data, const size_t len); | 199 | const u8 *data, const size_t len); |
| 200 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, | 200 | int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *count); |
| 201 | unsigned int *count); | ||
| 202 | 201 | ||
| 203 | /* rsrc_mgr.c */ | 202 | /* rsrc_mgr.c */ |
| 204 | int pcmcia_validate_mem(struct pcmcia_socket *s); | 203 | int pcmcia_validate_mem(struct pcmcia_socket *s); |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 9f300d3cb125..f5b7079f13d3 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -547,7 +547,7 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev) | |||
| 547 | if (!vers1) | 547 | if (!vers1) |
| 548 | return -ENOMEM; | 548 | return -ENOMEM; |
| 549 | 549 | ||
| 550 | if (!pccard_read_tuple(p_dev->socket, p_dev->func, | 550 | if (!pccard_read_tuple(p_dev->socket, BIND_FN_ALL, |
| 551 | CISTPL_MANFID, &manf_id)) { | 551 | CISTPL_MANFID, &manf_id)) { |
| 552 | p_dev->manf_id = manf_id.manf; | 552 | p_dev->manf_id = manf_id.manf; |
| 553 | p_dev->card_id = manf_id.card; | 553 | p_dev->card_id = manf_id.card; |
| @@ -581,9 +581,9 @@ static int pcmcia_device_query(struct pcmcia_device *p_dev) | |||
| 581 | kfree(devgeo); | 581 | kfree(devgeo); |
| 582 | } | 582 | } |
| 583 | 583 | ||
| 584 | if (!pccard_read_tuple(p_dev->socket, p_dev->func, CISTPL_VERS_1, | 584 | if (!pccard_read_tuple(p_dev->socket, BIND_FN_ALL, CISTPL_VERS_1, |
| 585 | vers1)) { | 585 | vers1)) { |
| 586 | for (i=0; i < vers1->ns; i++) { | 586 | for (i = 0; i < min_t(unsigned int, 4, vers1->ns); i++) { |
| 587 | char *tmp; | 587 | char *tmp; |
| 588 | unsigned int length; | 588 | unsigned int length; |
| 589 | 589 | ||
| @@ -733,7 +733,7 @@ static int pcmcia_card_add(struct pcmcia_socket *s) | |||
| 733 | return -EAGAIN; /* try again, but later... */ | 733 | return -EAGAIN; /* try again, but later... */ |
| 734 | } | 734 | } |
| 735 | 735 | ||
| 736 | ret = pccard_validate_cis(s, BIND_FN_ALL, &no_chains); | 736 | ret = pccard_validate_cis(s, &no_chains); |
| 737 | if (ret || !no_chains) { | 737 | if (ret || !no_chains) { |
| 738 | ds_dev_dbg(0, &s->dev, "invalid CIS or invalid resources\n"); | 738 | ds_dev_dbg(0, &s->dev, "invalid CIS or invalid resources\n"); |
| 739 | return -ENODEV; | 739 | return -ENODEV; |
diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c index b906abe26ad0..a4aacb830b80 100644 --- a/drivers/pcmcia/i82365.c +++ b/drivers/pcmcia/i82365.c | |||
| @@ -1053,8 +1053,8 @@ static int i365_set_io_map(u_short sock, struct pccard_io_map *io) | |||
| 1053 | u_char map, ioctl; | 1053 | u_char map, ioctl; |
| 1054 | 1054 | ||
| 1055 | debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, " | 1055 | debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, " |
| 1056 | "%#x-%#x)\n", sock, io->map, io->flags, | 1056 | "%#llx-%#llx)\n", sock, io->map, io->flags, io->speed, |
| 1057 | io->speed, io->start, io->stop); | 1057 | (unsigned long long)io->start, (unsigned long long)io->stop); |
| 1058 | map = io->map; | 1058 | map = io->map; |
| 1059 | if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) || | 1059 | if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) || |
| 1060 | (io->stop < io->start)) return -EINVAL; | 1060 | (io->stop < io->start)) return -EINVAL; |
diff --git a/drivers/pcmcia/m32r_cfc.c b/drivers/pcmcia/m32r_cfc.c index d1d89c4491ad..7dfbee1dcd76 100644 --- a/drivers/pcmcia/m32r_cfc.c +++ b/drivers/pcmcia/m32r_cfc.c | |||
| @@ -537,8 +537,9 @@ static int _pcc_set_io_map(u_short sock, struct pccard_io_map *io) | |||
| 537 | u_char map; | 537 | u_char map; |
| 538 | 538 | ||
| 539 | debug(3, "m32r_cfc: SetIOMap(%d, %d, %#2.2x, %d ns, " | 539 | debug(3, "m32r_cfc: SetIOMap(%d, %d, %#2.2x, %d ns, " |
| 540 | "%#lx-%#lx)\n", sock, io->map, io->flags, | 540 | "%#llx-%#llx)\n", sock, io->map, io->flags, |
| 541 | io->speed, io->start, io->stop); | 541 | io->speed, (unsigned long long)io->start, |
| 542 | (unsigned long long)io->stop); | ||
| 542 | map = io->map; | 543 | map = io->map; |
| 543 | 544 | ||
| 544 | return 0; | 545 | return 0; |
| @@ -554,8 +555,9 @@ static int _pcc_set_mem_map(u_short sock, struct pccard_mem_map *mem) | |||
| 554 | pcc_socket_t *t = &socket[sock]; | 555 | pcc_socket_t *t = &socket[sock]; |
| 555 | 556 | ||
| 556 | debug(3, "m32r_cfc: SetMemMap(%d, %d, %#2.2x, %d ns, " | 557 | debug(3, "m32r_cfc: SetMemMap(%d, %d, %#2.2x, %d ns, " |
| 557 | "%#lx, %#x)\n", sock, map, mem->flags, | 558 | "%#llx, %#x)\n", sock, map, mem->flags, |
| 558 | mem->speed, mem->static_start, mem->card_start); | 559 | mem->speed, (unsigned long long)mem->static_start, |
| 560 | mem->card_start); | ||
| 559 | 561 | ||
| 560 | /* | 562 | /* |
| 561 | * sanity check | 563 | * sanity check |
diff --git a/drivers/pcmcia/m32r_pcc.c b/drivers/pcmcia/m32r_pcc.c index a0655839c8d3..c6524f99ccc3 100644 --- a/drivers/pcmcia/m32r_pcc.c +++ b/drivers/pcmcia/m32r_pcc.c | |||
| @@ -492,8 +492,9 @@ static int _pcc_set_io_map(u_short sock, struct pccard_io_map *io) | |||
| 492 | u_char map; | 492 | u_char map; |
| 493 | 493 | ||
| 494 | debug(3, "m32r-pcc: SetIOMap(%d, %d, %#2.2x, %d ns, " | 494 | debug(3, "m32r-pcc: SetIOMap(%d, %d, %#2.2x, %d ns, " |
| 495 | "%#x-%#x)\n", sock, io->map, io->flags, | 495 | "%#llx-%#llx)\n", sock, io->map, io->flags, |
| 496 | io->speed, io->start, io->stop); | 496 | io->speed, (unsigned long long)io->start, |
| 497 | (unsigned long long)io->stop); | ||
| 497 | map = io->map; | 498 | map = io->map; |
| 498 | 499 | ||
| 499 | return 0; | 500 | return 0; |
| @@ -515,8 +516,9 @@ static int _pcc_set_mem_map(u_short sock, struct pccard_mem_map *mem) | |||
| 515 | #endif | 516 | #endif |
| 516 | 517 | ||
| 517 | debug(3, "m32r-pcc: SetMemMap(%d, %d, %#2.2x, %d ns, " | 518 | debug(3, "m32r-pcc: SetMemMap(%d, %d, %#2.2x, %d ns, " |
| 518 | "%#lx, %#x)\n", sock, map, mem->flags, | 519 | "%#llx, %#x)\n", sock, map, mem->flags, |
| 519 | mem->speed, mem->static_start, mem->card_start); | 520 | mem->speed, (unsigned long long)mem->static_start, |
| 521 | mem->card_start); | ||
| 520 | 522 | ||
| 521 | /* | 523 | /* |
| 522 | * sanity check | 524 | * sanity check |
diff --git a/drivers/pcmcia/m8xx_pcmcia.c b/drivers/pcmcia/m8xx_pcmcia.c index c69f2c4fe520..403559ba49dd 100644 --- a/drivers/pcmcia/m8xx_pcmcia.c +++ b/drivers/pcmcia/m8xx_pcmcia.c | |||
| @@ -975,8 +975,9 @@ static int m8xx_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io) | |||
| 975 | #define M8XX_BASE (PCMCIA_IO_WIN_BASE + io->start) | 975 | #define M8XX_BASE (PCMCIA_IO_WIN_BASE + io->start) |
| 976 | 976 | ||
| 977 | dprintk("SetIOMap(%d, %d, %#2.2x, %d ns, " | 977 | dprintk("SetIOMap(%d, %d, %#2.2x, %d ns, " |
| 978 | "%#4.4x-%#4.4x)\n", lsock, io->map, io->flags, | 978 | "%#4.4llx-%#4.4llx)\n", lsock, io->map, io->flags, |
| 979 | io->speed, io->start, io->stop); | 979 | io->speed, (unsigned long long)io->start, |
| 980 | (unsigned long long)io->stop); | ||
| 980 | 981 | ||
| 981 | if ((io->map >= PCMCIA_IO_WIN_NO) || (io->start > 0xffff) | 982 | if ((io->map >= PCMCIA_IO_WIN_NO) || (io->start > 0xffff) |
| 982 | || (io->stop > 0xffff) || (io->stop < io->start)) | 983 | || (io->stop > 0xffff) || (io->stop < io->start)) |
| @@ -1055,8 +1056,9 @@ static int m8xx_set_mem_map(struct pcmcia_socket *sock, | |||
| 1055 | pcmconf8xx_t *pcmcia = s->pcmcia; | 1056 | pcmconf8xx_t *pcmcia = s->pcmcia; |
| 1056 | 1057 | ||
| 1057 | dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, " | 1058 | dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, " |
| 1058 | "%#5.5lx, %#5.5x)\n", lsock, mem->map, mem->flags, | 1059 | "%#5.5llx, %#5.5x)\n", lsock, mem->map, mem->flags, |
| 1059 | mem->speed, mem->static_start, mem->card_start); | 1060 | mem->speed, (unsigned long long)mem->static_start, |
| 1061 | mem->card_start); | ||
| 1060 | 1062 | ||
| 1061 | if ((mem->map >= PCMCIA_MEM_WIN_NO) | 1063 | if ((mem->map >= PCMCIA_MEM_WIN_NO) |
| 1062 | // || ((mem->s) >= PCMCIA_MEM_WIN_SIZE) | 1064 | // || ((mem->s) >= PCMCIA_MEM_WIN_SIZE) |
| @@ -1107,8 +1109,9 @@ static int m8xx_set_mem_map(struct pcmcia_socket *sock, | |||
| 1107 | } | 1109 | } |
| 1108 | 1110 | ||
| 1109 | dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, " | 1111 | dprintk("SetMemMap(%d, %d, %#2.2x, %d ns, " |
| 1110 | "%#5.5lx, %#5.5x)\n", lsock, mem->map, mem->flags, | 1112 | "%#5.5llx, %#5.5x)\n", lsock, mem->map, mem->flags, |
| 1111 | mem->speed, mem->static_start, mem->card_start); | 1113 | mem->speed, (unsigned long long)mem->static_start, |
| 1114 | mem->card_start); | ||
| 1112 | 1115 | ||
| 1113 | /* copy the struct and modify the copy */ | 1116 | /* copy the struct and modify the copy */ |
| 1114 | 1117 | ||
diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c index 32c44040c1e8..30cf71d2ee23 100644 --- a/drivers/pcmcia/pcmcia_ioctl.c +++ b/drivers/pcmcia/pcmcia_ioctl.c | |||
| @@ -881,7 +881,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, | |||
| 881 | mutex_lock(&s->skt_mutex); | 881 | mutex_lock(&s->skt_mutex); |
| 882 | pcmcia_validate_mem(s); | 882 | pcmcia_validate_mem(s); |
| 883 | mutex_unlock(&s->skt_mutex); | 883 | mutex_unlock(&s->skt_mutex); |
| 884 | ret = pccard_validate_cis(s, BIND_FN_ALL, &buf->cisinfo.Chains); | 884 | ret = pccard_validate_cis(s, &buf->cisinfo.Chains); |
| 885 | break; | 885 | break; |
| 886 | case DS_SUSPEND_CARD: | 886 | case DS_SUSPEND_CARD: |
| 887 | ret = pcmcia_suspend_card(s); | 887 | ret = pcmcia_suspend_card(s); |
diff --git a/drivers/pcmcia/pd6729.c b/drivers/pcmcia/pd6729.c index 1c39d3438f20..70a33468bcd0 100644 --- a/drivers/pcmcia/pd6729.c +++ b/drivers/pcmcia/pd6729.c | |||
| @@ -641,6 +641,12 @@ static int __devinit pd6729_pci_probe(struct pci_dev *dev, | |||
| 641 | if ((ret = pci_enable_device(dev))) | 641 | if ((ret = pci_enable_device(dev))) |
| 642 | goto err_out_free_mem; | 642 | goto err_out_free_mem; |
| 643 | 643 | ||
| 644 | if (!pci_resource_start(dev, 0)) { | ||
| 645 | printk(KERN_INFO "pd6729: refusing to load the driver " | ||
| 646 | "as the io_base is 0.\n"); | ||
| 647 | goto err_out_free_mem; | ||
| 648 | } | ||
| 649 | |||
| 644 | printk(KERN_INFO "pd6729: Cirrus PD6729 PCI to PCMCIA Bridge " | 650 | printk(KERN_INFO "pd6729: Cirrus PD6729 PCI to PCMCIA Bridge " |
| 645 | "at 0x%llx on irq %d\n", | 651 | "at 0x%llx on irq %d\n", |
| 646 | (unsigned long long)pci_resource_start(dev, 0), dev->irq); | 652 | (unsigned long long)pci_resource_start(dev, 0), dev->irq); |
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index 9ca22c7aafb2..7039f3cf5b77 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
| @@ -206,6 +206,7 @@ static void do_io_probe(struct pcmcia_socket *s, unsigned int base, | |||
| 206 | /* First, what does a floating port look like? */ | 206 | /* First, what does a floating port look like? */ |
| 207 | b = kzalloc(256, GFP_KERNEL); | 207 | b = kzalloc(256, GFP_KERNEL); |
| 208 | if (!b) { | 208 | if (!b) { |
| 209 | printk("\n"); | ||
| 209 | dev_printk(KERN_ERR, &s->dev, | 210 | dev_printk(KERN_ERR, &s->dev, |
| 210 | "do_io_probe: unable to kmalloc 256 bytes"); | 211 | "do_io_probe: unable to kmalloc 256 bytes"); |
| 211 | return; | 212 | return; |
| @@ -275,7 +276,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, | |||
| 275 | s->cis_mem.res = res; | 276 | s->cis_mem.res = res; |
| 276 | s->cis_virt = ioremap(res->start, s->map_size); | 277 | s->cis_virt = ioremap(res->start, s->map_size); |
| 277 | if (s->cis_virt) { | 278 | if (s->cis_virt) { |
| 278 | ret = pccard_validate_cis(s, BIND_FN_ALL, count); | 279 | ret = pccard_validate_cis(s, count); |
| 279 | /* invalidate mapping and CIS cache */ | 280 | /* invalidate mapping and CIS cache */ |
| 280 | iounmap(s->cis_virt); | 281 | iounmap(s->cis_virt); |
| 281 | s->cis_virt = NULL; | 282 | s->cis_virt = NULL; |
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index 163cf98e2386..ef7e9e58782b 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c | |||
| @@ -336,8 +336,9 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m | |||
| 336 | struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); | 336 | struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); |
| 337 | unsigned short speed = map->speed; | 337 | unsigned short speed = map->speed; |
| 338 | 338 | ||
| 339 | debug(skt, 2, "map %u speed %u start 0x%08x stop 0x%08x\n", | 339 | debug(skt, 2, "map %u speed %u start 0x%08llx stop 0x%08llx\n", |
| 340 | map->map, map->speed, map->start, map->stop); | 340 | map->map, map->speed, (unsigned long long)map->start, |
| 341 | (unsigned long long)map->stop); | ||
| 341 | debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", | 342 | debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n", |
| 342 | (map->flags==0)?"<NONE>":"", | 343 | (map->flags==0)?"<NONE>":"", |
| 343 | (map->flags&MAP_ACTIVE)?"ACTIVE ":"", | 344 | (map->flags&MAP_ACTIVE)?"ACTIVE ":"", |
diff --git a/drivers/pcmcia/socket_sysfs.c b/drivers/pcmcia/socket_sysfs.c index ff9a3bb3c88d..78d5aab542f7 100644 --- a/drivers/pcmcia/socket_sysfs.c +++ b/drivers/pcmcia/socket_sysfs.c | |||
| @@ -300,7 +300,7 @@ static ssize_t pccard_show_cis(struct kobject *kobj, | |||
| 300 | 300 | ||
| 301 | if (!(s->state & SOCKET_PRESENT)) | 301 | if (!(s->state & SOCKET_PRESENT)) |
| 302 | return -ENODEV; | 302 | return -ENODEV; |
| 303 | if (pccard_validate_cis(s, BIND_FN_ALL, &chains)) | 303 | if (pccard_validate_cis(s, &chains)) |
| 304 | return -EIO; | 304 | return -EIO; |
| 305 | if (!chains) | 305 | if (!chains) |
| 306 | return -ENODATA; | 306 | return -ENODATA; |
diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c index 582413fcb62f..6918849d511e 100644 --- a/drivers/pcmcia/tcic.c +++ b/drivers/pcmcia/tcic.c | |||
| @@ -732,8 +732,8 @@ static int tcic_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io) | |||
| 732 | u_short base, len, ioctl; | 732 | u_short base, len, ioctl; |
| 733 | 733 | ||
| 734 | debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, " | 734 | debug(1, "SetIOMap(%d, %d, %#2.2x, %d ns, " |
| 735 | "%#x-%#x)\n", psock, io->map, io->flags, | 735 | "%#llx-%#llx)\n", psock, io->map, io->flags, io->speed, |
| 736 | io->speed, io->start, io->stop); | 736 | (unsigned long long)io->start, (unsigned long long)io->stop); |
| 737 | if ((io->map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) || | 737 | if ((io->map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) || |
| 738 | (io->stop < io->start)) return -EINVAL; | 738 | (io->stop < io->start)) return -EINVAL; |
| 739 | tcic_setw(TCIC_ADDR+2, TCIC_ADR2_INDREG | (psock << TCIC_SS_SHFT)); | 739 | tcic_setw(TCIC_ADDR+2, TCIC_ADR2_INDREG | (psock << TCIC_SS_SHFT)); |
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index abe0e44c6e9e..8be4cc447a17 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c | |||
| @@ -1275,16 +1275,26 @@ static int yenta_dev_resume_noirq(struct device *dev) | |||
| 1275 | if (socket->type && socket->type->restore_state) | 1275 | if (socket->type && socket->type->restore_state) |
| 1276 | socket->type->restore_state(socket); | 1276 | socket->type->restore_state(socket); |
| 1277 | 1277 | ||
| 1278 | return pcmcia_socket_dev_resume(dev); | 1278 | pcmcia_socket_dev_early_resume(dev); |
| 1279 | return 0; | ||
| 1280 | } | ||
| 1281 | |||
| 1282 | static int yenta_dev_resume(struct device *dev) | ||
| 1283 | { | ||
| 1284 | pcmcia_socket_dev_late_resume(dev); | ||
| 1285 | return 0; | ||
| 1279 | } | 1286 | } |
| 1280 | 1287 | ||
| 1281 | static struct dev_pm_ops yenta_pm_ops = { | 1288 | static struct dev_pm_ops yenta_pm_ops = { |
| 1282 | .suspend_noirq = yenta_dev_suspend_noirq, | 1289 | .suspend_noirq = yenta_dev_suspend_noirq, |
| 1283 | .resume_noirq = yenta_dev_resume_noirq, | 1290 | .resume_noirq = yenta_dev_resume_noirq, |
| 1291 | .resume = yenta_dev_resume, | ||
| 1284 | .freeze_noirq = yenta_dev_suspend_noirq, | 1292 | .freeze_noirq = yenta_dev_suspend_noirq, |
| 1285 | .thaw_noirq = yenta_dev_resume_noirq, | 1293 | .thaw_noirq = yenta_dev_resume_noirq, |
| 1294 | .thaw = yenta_dev_resume, | ||
| 1286 | .poweroff_noirq = yenta_dev_suspend_noirq, | 1295 | .poweroff_noirq = yenta_dev_suspend_noirq, |
| 1287 | .restore_noirq = yenta_dev_resume_noirq, | 1296 | .restore_noirq = yenta_dev_resume_noirq, |
| 1297 | .restore = yenta_dev_resume, | ||
| 1288 | }; | 1298 | }; |
| 1289 | 1299 | ||
| 1290 | #define YENTA_PM_OPS (¥ta_pm_ops) | 1300 | #define YENTA_PM_OPS (¥ta_pm_ops) |
