Bläddra i källkod

pcmcia: deprecate CS_BAD_ATTRIBUTE, CS_BAD_TYPE and CS_BAD_PAGE

CS_BAD_TYPE was only used in cs.c and already properly annotated by error
messages. CS_BAD_ATTRIBUTE and CS_BAD_PAGE mean a badly written driver, so
ds_dbg() output and -EINVAL seems to be enough.

(includes bugfix from and
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
)
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Dominik Brodowski 16 år sedan
förälder
incheckning
610e23749e
5 ändrade filer med 37 tillägg och 30 borttagningar
  1. 3 3
      drivers/pcmcia/cs.c
  2. 3 6
      drivers/pcmcia/ds.c
  3. 8 8
      drivers/pcmcia/pcmcia_ioctl.c
  4. 20 10
      drivers/pcmcia/pcmcia_resource.c
  5. 3 3
      include/pcmcia/cs.h

+ 3 - 3
drivers/pcmcia/cs.c

@@ -451,7 +451,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 	if (status & SS_CARDBUS) {
 		if (!(skt->features & SS_CAP_CARDBUS)) {
 			cs_err(skt, "cardbus cards are not supported.\n");
-			return CS_BAD_TYPE;
+			return -EINVAL;
 		}
 		skt->state |= SOCKET_CARDBUS;
 	}
@@ -465,7 +465,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 		skt->socket.Vcc = skt->socket.Vpp = 50;
 	else {
 		cs_err(skt, "unsupported voltage key.\n");
-		return CS_BAD_TYPE;
+		return -EIO;
 	}
 
 	if (skt->power_hook)
@@ -482,7 +482,7 @@ static int socket_setup(struct pcmcia_socket *skt, int initial_delay)
 	skt->ops->get_status(skt, &status);
 	if (!(status & SS_POWERON)) {
 		cs_err(skt, "unable to apply power.\n");
-		return CS_BAD_TYPE;
+		return -EIO;
 	}
 
 	status = socket_reset(skt);

+ 3 - 6
drivers/pcmcia/ds.c

@@ -74,22 +74,19 @@ typedef struct lookup_t {
 } lookup_t;
 
 static const lookup_t error_table[] = {
-    { CS_SUCCESS,		"Operation succeeded" },
-    { CS_BAD_ATTRIBUTE, 	"Bad attribute", },
+    { 0,			"Operation succeeded" },
     { CS_BAD_BASE,		"Bad base address" },
     { CS_BAD_IRQ,		"Bad IRQ" },
     { CS_BAD_OFFSET,		"Bad offset" },
-    { CS_BAD_PAGE,		"Bad page number" },
     { CS_BAD_SIZE,		"Bad size" },
-    { CS_BAD_TYPE,		"Bad type" },
     { -EIO,			"Input/Output error" },
     { -ENODEV,			"No card present" },
     { -EINVAL,			"Bad parameter" },
     { CS_BAD_ARGS,		"Bad arguments" },
     { -EACCES,			"Configuration locked" },
-    { CS_IN_USE,		"Resource in use" },
+    { -EBUSY,			"Resource in use" },
     { -ENOSPC,			"No more items" },
-    { CS_OUT_OF_RESOURCE,	"Out of resource" },
+    { -ENOMEM,			"Out of resource" },
     { CS_BAD_TUPLE,		"Bad CIS tuple" }
 };
 

+ 8 - 8
drivers/pcmcia/pcmcia_ioctl.c

@@ -964,19 +964,19 @@ static int ds_ioctl(struct inode * inode, struct file * file,
     if ((err == 0) && (ret != 0)) {
 	ds_dbg(2, "ds_ioctl: ret = %d\n", ret);
 	switch (ret) {
-	case CS_BAD_SOCKET: case CS_NO_CARD:
-	    err = -ENODEV; break;
-	case CS_BAD_ARGS: case CS_BAD_ATTRIBUTE: case CS_BAD_IRQ:
+	case -ENODEV:
+	case -EINVAL:
+	case -EBUSY:
+	case -ENOSYS:
+	    err = ret;
+	    break;
+	case CS_BAD_ARGS: case CS_BAD_IRQ:
 	case CS_BAD_TUPLE:
 	    err = -EINVAL; break;
-	case CS_IN_USE:
-	    err = -EBUSY; break;
-	case CS_OUT_OF_RESOURCE:
+	case -ENOMEM:
 	    err = -ENOSPC; break;
 	case -ENOSPC:
 	    err = -ENODATA; break;
-	case -ENOSYS:
-	    err = -ENOSYS; break;
 	default:
 	    err = -EIO; break;
 	}

+ 20 - 10
drivers/pcmcia/pcmcia_resource.c

@@ -251,9 +251,11 @@ int pcmcia_map_mem_page(window_handle_t win, memreq_t *req)
 	struct pcmcia_socket *s;
 	if ((win == NULL) || (win->magic != WINDOW_MAGIC))
 		return -EINVAL;
-	if (req->Page != 0)
-		return CS_BAD_PAGE;
 	s = win->sock;
+	if (req->Page != 0) {
+		ds_dbg(s, 0, "failure: requested page is zero\n");
+		return -EINVAL;
+	}
 	win->ctl.card_start = req->CardOffset;
 	if (s->ops->set_mem_map(s, &win->ctl) != 0)
 		return CS_BAD_OFFSET;
@@ -420,8 +422,10 @@ static int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req)
 
 	if (c->state & CONFIG_LOCKED)
 		return -EACCES;
-	if (c->irq.Attributes != req->Attributes)
-		return CS_BAD_ATTRIBUTE;
+	if (c->irq.Attributes != req->Attributes) {
+		ds_dbg(s, 0, "IRQ attributes must match assigned ones\n");
+		return -EINVAL;
+	}
 	if (s->irq.AssignedIRQ != req->AssignedIRQ)
 		return CS_BAD_IRQ;
 	if (--s->irq.Config == 0) {
@@ -613,11 +617,15 @@ int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req)
 		ds_dbg(s, 0, "IO already configured\n");
 		return -EBUSY;
 	}
-	if (req->Attributes1 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS))
-		return CS_BAD_ATTRIBUTE;
+	if (req->Attributes1 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS)) {
+		ds_dbg(s, 0, "bad attribute setting for IO region 1\n");
+		return -EINVAL;
+	}
 	if ((req->NumPorts2 > 0) &&
-	    (req->Attributes2 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS)))
-		return CS_BAD_ATTRIBUTE;
+	    (req->Attributes2 & (IO_SHARED | IO_FORCE_ALIAS_ACCESS))) {
+		ds_dbg(s, 0, "bad attribute setting for IO region 2\n");
+		return -EINVAL;
+	}
 
 	ds_dbg(s, 1, "trying to allocate resource 1\n");
 	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
 
 	if (!(s->state & SOCKET_PRESENT))
 		return -ENODEV;
-	if (req->Attributes & (WIN_PAGED | WIN_SHARED))
-		return CS_BAD_ATTRIBUTE;
+	if (req->Attributes & (WIN_PAGED | WIN_SHARED)) {
+		ds_dbg(s, 0, "bad attribute setting for iomem region\n");
+		return -EINVAL;
+	}
 
 	/* Window size defaults to smallest available */
 	if (req->Size == 0)

+ 3 - 3
include/pcmcia/cs.h

@@ -290,16 +290,16 @@ typedef struct error_info_t {
 /* Return codes */
 #define CS_SUCCESS		0x00
 #define CS_BAD_ADAPTER		-ENODEV
-#define CS_BAD_ATTRIBUTE	0x02
+#define CS_BAD_ATTRIBUTE	-EINVAL
 #define CS_BAD_BASE		0x03
 #define CS_BAD_EDC		-ENODEV
 #define CS_BAD_IRQ		0x06
 #define CS_BAD_OFFSET		0x07
-#define CS_BAD_PAGE		0x08
+#define CS_BAD_PAGE		-EINVAL
 #define CS_READ_FAILURE		-EIO
 #define CS_BAD_SIZE		0x0a
 #define CS_BAD_SOCKET		-EINVAL
-#define CS_BAD_TYPE		0x0d
+#define CS_BAD_TYPE		-EINVAL
 #define CS_BAD_VCC		-EINVAL
 #define CS_BAD_VPP		-EINVAL
 #define CS_BAD_WINDOW		-ENODEV