diff options
-rw-r--r-- | drivers/pcmcia/cs.c | 6 | ||||
-rw-r--r-- | drivers/pcmcia/ds.c | 9 | ||||
-rw-r--r-- | drivers/pcmcia/pcmcia_ioctl.c | 16 | ||||
-rw-r--r-- | drivers/pcmcia/pcmcia_resource.c | 30 | ||||
-rw-r--r-- | include/pcmcia/cs.h | 6 |
5 files changed, 37 insertions, 30 deletions
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c index 1c6c8c8f57c9..48386f31e610 100644 --- a/drivers/pcmcia/cs.c +++ b/drivers/pcmcia/cs.c | |||
@@ -451,7 +451,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) | |||
451 | if (status & SS_CARDBUS) { | 451 | if (status & SS_CARDBUS) { |
452 | if (!(skt->features & SS_CAP_CARDBUS)) { | 452 | if (!(skt->features & SS_CAP_CARDBUS)) { |
453 | cs_err(skt, "cardbus cards are not supported.\n"); | 453 | cs_err(skt, "cardbus cards are not supported.\n"); |
454 | return CS_BAD_TYPE; | 454 | return -EINVAL; |
455 | } | 455 | } |
456 | skt->state |= SOCKET_CARDBUS; | 456 | skt->state |= SOCKET_CARDBUS; |
457 | } | 457 | } |
@@ -465,7 +465,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) | |||
465 | skt->socket.Vcc = skt->socket.Vpp = 50; | 465 | skt->socket.Vcc = skt->socket.Vpp = 50; |
466 | else { | 466 | else { |
467 | cs_err(skt, "unsupported voltage key.\n"); | 467 | cs_err(skt, "unsupported voltage key.\n"); |
468 | return CS_BAD_TYPE; | 468 | return -EIO; |
469 | } | 469 | } |
470 | 470 | ||
471 | if (skt->power_hook) | 471 | if (skt->power_hook) |
@@ -482,7 +482,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay) | |||
482 | skt->ops->get_status(skt, &status); | 482 | skt->ops->get_status(skt, &status); |
483 | if (!(status & SS_POWERON)) { | 483 | if (!(status & SS_POWERON)) { |
484 | cs_err(skt, "unable to apply power.\n"); | 484 | cs_err(skt, "unable to apply power.\n"); |
485 | return CS_BAD_TYPE; | 485 | return -EIO; |
486 | } | 486 | } |
487 | 487 | ||
488 | status = socket_reset(skt); | 488 | status = socket_reset(skt); |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 591d9627bb2a..4092a5976e62 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
@@ -74,22 +74,19 @@ typedef struct lookup_t { | |||
74 | } lookup_t; | 74 | } lookup_t; |
75 | 75 | ||
76 | static const lookup_t error_table[] = { | 76 | static const lookup_t error_table[] = { |
77 | { CS_SUCCESS, "Operation succeeded" }, | 77 | { 0, "Operation succeeded" }, |
78 | { CS_BAD_ATTRIBUTE, "Bad attribute", }, | ||
79 | { CS_BAD_BASE, "Bad base address" }, | 78 | { CS_BAD_BASE, "Bad base address" }, |
80 | { CS_BAD_IRQ, "Bad IRQ" }, | 79 | { CS_BAD_IRQ, "Bad IRQ" }, |
81 | { CS_BAD_OFFSET, "Bad offset" }, | 80 | { CS_BAD_OFFSET, "Bad offset" }, |
82 | { CS_BAD_PAGE, "Bad page number" }, | ||
83 | { CS_BAD_SIZE, "Bad size" }, | 81 | { CS_BAD_SIZE, "Bad size" }, |
84 | { CS_BAD_TYPE, "Bad type" }, | ||
85 | { -EIO, "Input/Output error" }, | 82 | { -EIO, "Input/Output error" }, |
86 | { -ENODEV, "No card present" }, | 83 | { -ENODEV, "No card present" }, |
87 | { -EINVAL, "Bad parameter" }, | 84 | { -EINVAL, "Bad parameter" }, |
88 | { CS_BAD_ARGS, "Bad arguments" }, | 85 | { CS_BAD_ARGS, "Bad arguments" }, |
89 | { -EACCES, "Configuration locked" }, | 86 | { -EACCES, "Configuration locked" }, |
90 | { CS_IN_USE, "Resource in use" }, | 87 | { -EBUSY, "Resource in use" }, |
91 | { -ENOSPC, "No more items" }, | 88 | { -ENOSPC, "No more items" }, |
92 | { CS_OUT_OF_RESOURCE, "Out of resource" }, | 89 | { -ENOMEM, "Out of resource" }, |
93 | { CS_BAD_TUPLE, "Bad CIS tuple" } | 90 | { CS_BAD_TUPLE, "Bad CIS tuple" } |
94 | }; | 91 | }; |
95 | 92 | ||
diff --git a/drivers/pcmcia/pcmcia_ioctl.c b/drivers/pcmcia/pcmcia_ioctl.c index a6289e5a75e1..e27c71ebfda2 100644 --- a/drivers/pcmcia/pcmcia_ioctl.c +++ b/drivers/pcmcia/pcmcia_ioctl.c | |||
@@ -964,19 +964,19 @@ static int ds_ioctl(struct inode * inode, struct file * file, | |||
964 | if ((err == 0) && (ret != 0)) { | 964 | if ((err == 0) && (ret != 0)) { |
965 | ds_dbg(2, "ds_ioctl: ret = %d\n", ret); | 965 | ds_dbg(2, "ds_ioctl: ret = %d\n", ret); |
966 | switch (ret) { | 966 | switch (ret) { |
967 | case CS_BAD_SOCKET: case CS_NO_CARD: | 967 | case -ENODEV: |
968 | err = -ENODEV; break; | 968 | case -EINVAL: |
969 | case CS_BAD_ARGS: case CS_BAD_ATTRIBUTE: case CS_BAD_IRQ: | 969 | case -EBUSY: |
970 | case -ENOSYS: | ||
971 | err = ret; | ||
972 | break; | ||
973 | case CS_BAD_ARGS: case CS_BAD_IRQ: | ||
970 | case CS_BAD_TUPLE: | 974 | case CS_BAD_TUPLE: |
971 | err = -EINVAL; break; | 975 | err = -EINVAL; break; |
972 | case CS_IN_USE: | 976 | case -ENOMEM: |
973 | err = -EBUSY; break; | ||
974 | case CS_OUT_OF_RESOURCE: | ||
975 | err = -ENOSPC; break; | 977 | err = -ENOSPC; break; |
976 | case -ENOSPC: | 978 | case -ENOSPC: |
977 | err = -ENODATA; break; | 979 | err = -ENODATA; break; |
978 | case -ENOSYS: | ||
979 | err = -ENOSYS; break; | ||
980 | default: | 980 | default: |
981 | err = -EIO; break; | 981 | err = -EIO; break; |
982 | } | 982 | } |
diff --git a/drivers/pcmcia/pcmcia_resource.c b/drivers/pcmcia/pcmcia_resource.c index 8f2c805e793b..35a61577ae4e 100644 --- a/drivers/pcmcia/pcmcia_resource.c +++ b/drivers/pcmcia/pcmcia_resource.c | |||
@@ -251,9 +251,11 @@ int pcmcia_map_mem_page(window_handle_t win, memreq_t *req) | |||
251 | struct pcmcia_socket *s; | 251 | struct pcmcia_socket *s; |
252 | if ((win == NULL) || (win->magic != WINDOW_MAGIC)) | 252 | if ((win == NULL) || (win->magic != WINDOW_MAGIC)) |
253 | return -EINVAL; | 253 | return -EINVAL; |
254 | if (req->Page != 0) | ||
255 | return CS_BAD_PAGE; | ||
256 | s = win->sock; | 254 | s = win->sock; |
255 | if (req->Page != 0) { | ||
256 | ds_dbg(s, 0, "failure: requested page is zero\n"); | ||
257 | return -EINVAL; | ||
258 | } | ||
257 | win->ctl.card_start = req->CardOffset; | 259 | win->ctl.card_start = req->CardOffset; |
258 | if (s->ops->set_mem_map(s, &win->ctl) != 0) | 260 | if (s->ops->set_mem_map(s, &win->ctl) != 0) |
259 | return CS_BAD_OFFSET; | 261 | return CS_BAD_OFFSET; |
@@ -420,8 +422,10 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req) | |||
420 | 422 | ||
421 | if (c->state & CONFIG_LOCKED) | 423 | if (c->state & CONFIG_LOCKED) |
422 | return -EACCES; | 424 | return -EACCES; |
423 | if (c->irq.Attributes != req->Attributes) | 425 | if (c->irq.Attributes != req->Attributes) { |
424 | return CS_BAD_ATTRIBUTE; | 426 | ds_dbg(s, 0, "IRQ attributes must match assigned ones\n"); |
427 | return -EINVAL; | ||
428 | } | ||
425 | if (s->irq.AssignedIRQ != req->AssignedIRQ) | 429 | if (s->irq.AssignedIRQ != req->AssignedIRQ) |
426 | return CS_BAD_IRQ; | 430 | return CS_BAD_IRQ; |
427 | if (--s->irq.Config == 0) { | 431 | if (--s->irq.Config == 0) { |
@@ -613,11 +617,15 @@ int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req) | |||
613 | ds_dbg(s, 0, "IO already configured\n"); | 617 | ds_dbg(s, 0, "IO already configured\n"); |
614 | return -EBUSY; | 618 | return -EBUSY; |
615 | } | 619 | } |
616 | if (req->Attributes1 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS)) | 620 | if (req->Attributes1 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS)) { |
617 | return CS_BAD_ATTRIBUTE; | 621 | ds_dbg(s, 0, "bad attribute setting for IO region 1\n"); |
622 | return -EINVAL; | ||
623 | } | ||
618 | if ((req->NumPorts2 > 0) && | 624 | if ((req->NumPorts2 > 0) && |
619 | (req->Attributes2 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS))) | 625 | (req->Attributes2 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS))) { |
620 | return CS_BAD_ATTRIBUTE; | 626 | ds_dbg(s, 0, "bad attribute setting for IO region 2\n"); |
627 | return -EINVAL; | ||
628 | } | ||
621 | 629 | ||
622 | ds_dbg(s, 1, "trying to allocate resource 1\n"); | 630 | ds_dbg(s, 1, "trying to allocate resource 1\n"); |
623 | if (alloc_io_space(s, req->Attributes1, &req->BasePort1, | 631 | if (alloc_io_space(s, req->Attributes1, &req->BasePort1, |
@@ -783,8 +791,10 @@ int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_h | |||
783 | 791 | ||
784 | if (!(s->state & SOCKET_PRESENT)) | 792 | if (!(s->state & SOCKET_PRESENT)) |
785 | return -ENODEV; | 793 | return -ENODEV; |
786 | if (req->Attributes & (WIN_PAGED | WIN_SHARED)) | 794 | if (req->Attributes & (WIN_PAGED | WIN_SHARED)) { |
787 | return CS_BAD_ATTRIBUTE; | 795 | ds_dbg(s, 0, "bad attribute setting for iomem region\n"); |
796 | return -EINVAL; | ||
797 | } | ||
788 | 798 | ||
789 | /* Window size defaults to smallest available */ | 799 | /* Window size defaults to smallest available */ |
790 | if (req->Size == 0) | 800 | if (req->Size == 0) |
diff --git a/include/pcmcia/cs.h b/include/pcmcia/cs.h index 20440defd1d0..70c32e97b492 100644 --- a/include/pcmcia/cs.h +++ b/include/pcmcia/cs.h | |||
@@ -290,16 +290,16 @@ typedef struct error_info_t { | |||
290 | /* Return codes */ | 290 | /* Return codes */ |
291 | #define CS_SUCCESS 0x00 | 291 | #define CS_SUCCESS 0x00 |
292 | #define CS_BAD_ADAPTER -ENODEV | 292 | #define CS_BAD_ADAPTER -ENODEV |
293 | #define CS_BAD_ATTRIBUTE 0x02 | 293 | #define CS_BAD_ATTRIBUTE -EINVAL |
294 | #define CS_BAD_BASE 0x03 | 294 | #define CS_BAD_BASE 0x03 |
295 | #define CS_BAD_EDC -ENODEV | 295 | #define CS_BAD_EDC -ENODEV |
296 | #define CS_BAD_IRQ 0x06 | 296 | #define CS_BAD_IRQ 0x06 |
297 | #define CS_BAD_OFFSET 0x07 | 297 | #define CS_BAD_OFFSET 0x07 |
298 | #define CS_BAD_PAGE 0x08 | 298 | #define CS_BAD_PAGE -EINVAL |
299 | #define CS_READ_FAILURE -EIO | 299 | #define CS_READ_FAILURE -EIO |
300 | #define CS_BAD_SIZE 0x0a | 300 | #define CS_BAD_SIZE 0x0a |
301 | #define CS_BAD_SOCKET -EINVAL | 301 | #define CS_BAD_SOCKET -EINVAL |
302 | #define CS_BAD_TYPE 0x0d | 302 | #define CS_BAD_TYPE -EINVAL |
303 | #define CS_BAD_VCC -EINVAL | 303 | #define CS_BAD_VCC -EINVAL |
304 | #define CS_BAD_VPP -EINVAL | 304 | #define CS_BAD_VPP -EINVAL |
305 | #define CS_BAD_WINDOW -ENODEV | 305 | #define CS_BAD_WINDOW -ENODEV |