mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Richard Genoud <richard.genoud@gmail.com>
To: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Judd Montgomery <judd@jpilot.org>,
	Jeff Frontz <jeff.frontz@gmail.com>,
	linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org,
	Richard Genoud <richard.genoud@gmail.com>
Subject: [PATCH 2/3] rspiusb.c: break the huge piusb_ioctl function into several ones
Date: Sun, 17 May 2009 13:06:31 +0200	[thread overview]
Message-ID: <92fedd0af6bfccd6bb8d69f430148e4630eeeb28.1242557192.git.richard.genoud@gmail.com> (raw)
In-Reply-To: <128c57bf092e08fe6372f6e8c3d02fc88b62e094.1242557192.git.richard.genoud@gmail.com>
In-Reply-To: <128c57bf092e08fe6372f6e8c3d02fc88b62e094.1242557192.git.richard.genoud@gmail.com>

This makes the code more readable, makes checkpatch really happy and factorize some code.

Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
---
 drivers/staging/rspiusb/rspiusb.c |  206 +++++++++++++++++++++----------------
 1 files changed, 116 insertions(+), 90 deletions(-)

diff --git a/drivers/staging/rspiusb/rspiusb.c b/drivers/staging/rspiusb/rspiusb.c
index 72241f2..685ab3f 100644
--- a/drivers/staging/rspiusb/rspiusb.c
+++ b/drivers/staging/rspiusb/rspiusb.c
@@ -198,6 +198,111 @@ object_null:
 	return retval;
 }
 
+static int pixis_io(struct ioctl_struct *ctrl, struct device_extension *pdx,
+		struct ioctl_struct *arg)
+{
+	unsigned int numToRead = 0;
+	unsigned int totalRead = 0;
+	unsigned char *uBuf;
+	int numbytes;
+	int i;
+
+	uBuf = kmalloc(ctrl->numbytes, GFP_KERNEL);
+	if (!uBuf) {
+		dbg("Alloc for uBuf failed");
+		return 0;
+	}
+	numbytes = (int) ctrl->numbytes;
+	numToRead = (unsigned int) ctrl->numbytes;
+	dbg("numbytes to read = %d", numbytes);
+	dbg("endpoint # %d", ctrl->endpoint);
+
+	if (copy_from_user(uBuf, ctrl->pData, numbytes))
+		dbg("copying ctrl->pData to dummyBuf failed");
+
+	do {
+		i = usb_bulk_msg(pdx->udev, pdx->hEP[ctrl->endpoint],
+				(uBuf + totalRead),
+				/* EP0 can only handle 64 bytes at a time */
+				(numToRead > 64) ? 64 : numToRead,
+				&numbytes, HZ * 10);
+		if (i) {
+			dbg("CMD = %s, Address = 0x%02X",
+					((uBuf[3] == 0x02) ? "WRITE" : "READ"),
+					uBuf[1]);
+			dbg("Number of bytes Attempted to read = %d",
+					(int)ctrl->numbytes);
+			dbg("Blocking ReadI/O Failed with status %d", i);
+			kfree(uBuf);
+			return -1;
+		}
+		dbg("Pixis EP0 Read %d bytes", numbytes);
+		totalRead += numbytes;
+		numToRead -= numbytes;
+	} while (numToRead);
+
+	memcpy(ctrl->pData, uBuf, totalRead);
+	dbg("Total Bytes Read from PIXIS EP0 = %d", totalRead);
+	ctrl->numbytes = totalRead;
+
+	if (copy_to_user(arg, ctrl, sizeof(struct ioctl_struct)))
+		dbg("copy_to_user failed in IORB");
+
+	kfree(uBuf);
+	return ctrl->numbytes;
+}
+
+static int pixis_io2(struct ioctl_struct *ctrl, struct device_extension *pdx,
+		struct ioctl_struct *arg)
+{
+	unsigned char *uBuf;
+	int numbytes;
+	int i;
+
+	uBuf = kmalloc(ctrl->numbytes, GFP_KERNEL);
+	if (!uBuf) {
+		dbg("Alloc for uBuf failed");
+		return 0;
+	}
+	numbytes = (int) ctrl->numbytes;
+	/* dbg( "numbytes to read = %d", numbytes ); */
+	if (copy_from_user(uBuf, ctrl->pData, numbytes))
+		dbg("copying ctrl->pData to dummyBuf failed");
+
+	i = usb_bulk_msg(pdx->udev, pdx->hEP[ctrl->endpoint],
+			uBuf, numbytes, &numbytes, HZ * 10);
+	if (i) {
+		dbg("Blocking ReadI/O Failed with status %d", i);
+		kfree(uBuf);
+		return -1;
+	}
+	ctrl->numbytes = numbytes;
+	memcpy(ctrl->pData, uBuf, numbytes);
+	if (copy_to_user(arg, ctrl, sizeof(struct ioctl_struct)))
+		dbg("copy_to_user failed in IORB");
+	kfree(uBuf);
+	return ctrl->numbytes;
+}
+
+static int pixel_data(struct ioctl_struct *ctrl, struct device_extension *pdx)
+{
+	int i;
+
+	if (!pdx->gotPixelData)
+		return 0;
+
+	pdx->gotPixelData = 0;
+	ctrl->numbytes = pdx->bulk_in_size_returned;
+	pdx->bulk_in_size_returned -= pdx->frameSize;
+
+	for (i = 0; i < pdx->maplist_numPagesMapped[pdx->active_frame]; i++)
+		SetPageDirty(pdx->sgl[pdx->active_frame][i].page_link);
+
+	pdx->active_frame = ((pdx->active_frame + 1) % pdx->num_frames);
+
+	return ctrl->numbytes;
+}
+
 /**
  *	piusb_ioctl
  */
@@ -207,12 +312,9 @@ static int piusb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	struct device_extension *pdx;
 	char dummyCtlBuf[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
 	unsigned long devRB = 0;
-	int i = 0;
 	int err = 0;
 	int retval = 0;
 	struct ioctl_struct ctrl;
-	unsigned char *uBuf;
-	int numbytes = 0;
 	unsigned short controlData = 0;
 
 	pdx = (struct device_extension *)file->private_data;
@@ -292,104 +394,28 @@ static int piusb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 		return retval;
 
 	case PIUSB_READPIPE:
-		if (copy_from_user
-		    (&ctrl, (void __user *)arg, sizeof(struct ioctl_struct)))
+		if (copy_from_user(&ctrl, (void __user *)arg,
+					sizeof(struct ioctl_struct)))
 			dev_err(&pdx->udev->dev, "copy_from_user failed\n");
+
 		switch (ctrl.endpoint) {
 		case 0:	/* ST133 Pixel Data or PIXIS IO */
 			if (pdx->iama == PIXIS_PID) {
-				unsigned int numToRead = 0;
-				unsigned int totalRead = 0;
-				uBuf = kmalloc(ctrl.numbytes, GFP_KERNEL);
-				if (!uBuf) {
-					dbg("Alloc for uBuf failed");
-					return 0;
-				}
-				numbytes = ctrl.numbytes;
-				numToRead = numbytes;
-				dbg("numbytes to read = %d", numbytes);
-				dbg("endpoint # %d", ctrl.endpoint);
-				if (copy_from_user(uBuf, ctrl.pData, numbytes))
-					dbg("copying ctrl.pData to dummyBuf failed");
-				do {
-					i = usb_bulk_msg(pdx->udev, pdx->hEP[ctrl.endpoint], (uBuf + totalRead), (numToRead > 64) ? 64 : numToRead, &numbytes, HZ * 10);	/* EP0 can only handle 64 bytes at a time */
-					if (i) {
-						dbg("CMD = %s, Address = 0x%02X", ((uBuf[3] == 0x02) ? "WRITE" : "READ"), uBuf[1]);
-						dbg("Number of bytes Attempted to read = %d", (int)ctrl.numbytes);
-						dbg("Blocking ReadI/O Failed with status %d", i);
-						kfree(uBuf);
-						return -1;
-					}
-					dbg("Pixis EP0 Read %d bytes",
-							numbytes);
-					totalRead += numbytes;
-					numToRead -= numbytes;
-				} while (numToRead);
-				memcpy(ctrl.pData, uBuf, totalRead);
-				dbg("Total Bytes Read from PIXIS EP0 = %d",
-				    totalRead);
-				ctrl.numbytes = totalRead;
-				if (copy_to_user
-				    ((struct ioctl_struct *) arg, &ctrl,
-				     sizeof(struct ioctl_struct)))
-					dbg("copy_to_user failed in IORB");
-				kfree(uBuf);
-				return ctrl.numbytes;
+				return pixis_io(&ctrl, pdx,
+						(struct ioctl_struct *)arg);
 			}
 			/* ST133 Pixel Data */
-			if (!pdx->gotPixelData)
-				return 0;
-			pdx->gotPixelData = 0;
-			ctrl.numbytes = pdx->bulk_in_size_returned;
-			pdx->bulk_in_size_returned -= pdx->frameSize;
-			for (i = 0; i < pdx->maplist_numPagesMapped[pdx->active_frame]; i++)
-				SetPageDirty(pdx->sgl[pdx->active_frame][i].page_link);
-			pdx->active_frame = ((pdx->active_frame + 1)
-					% pdx->num_frames);
-			return ctrl.numbytes;
-
-		case 1:	/* ST133IO */
 			/* fall through */
-		case 4:	/* PIXIS IO */
-			uBuf = kmalloc(ctrl.numbytes, GFP_KERNEL);
-			if (!uBuf) {
-				dbg("Alloc for uBuf failed");
-				return 0;
-			}
-			numbytes = ctrl.numbytes;
-			/* dbg( "numbytes to read = %d", numbytes ); */
-			if (copy_from_user(uBuf, ctrl.pData, numbytes))
-				dbg("copying ctrl.pData to dummyBuf failed");
-			i = usb_bulk_msg(pdx->udev, pdx->hEP[ctrl.endpoint],
-					 uBuf, numbytes, &numbytes, HZ * 10);
-			if (i) {
-				dbg("Blocking ReadI/O Failed with status %d",
-				    i);
-				kfree(uBuf);
-				return -1;
-			}
-			ctrl.numbytes = numbytes;
-			memcpy(ctrl.pData, uBuf, numbytes);
-			if (copy_to_user((struct ioctl_struct *) arg, &ctrl,
-						sizeof(struct ioctl_struct)))
-				dbg("copy_to_user failed in IORB");
-			kfree(uBuf);
-			return ctrl.numbytes;
-
 		case 2:	/* PIXIS Ping */
 			/* fall through */
 		case 3:	/* PIXIS Pong */
-			if (!pdx->gotPixelData)
-				return 0;
-			pdx->gotPixelData = 0;
-			ctrl.numbytes = pdx->bulk_in_size_returned;
-			pdx->bulk_in_size_returned -= pdx->frameSize;
-			for (i = 0; i < pdx->maplist_numPagesMapped[pdx->active_frame]; i++)
-				SetPageDirty(pdx->sgl[pdx->active_frame][i].page_link);
-			pdx->active_frame =
-				((pdx->active_frame + 1) % pdx->num_frames);
-			return ctrl.numbytes;
+			return pixel_data(&ctrl, pdx);
 
+		case 1:	/* ST133IO */
+			/* fall through */
+		case 4:	/* PIXIS IO */
+			return pixis_io2(&ctrl, pdx,
+					(struct ioctl_struct *)arg);
 		default:
 			break;
 		}
-- 
1.6.0.4


  reply	other threads:[~2009-05-17 11:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-17 11:06 [PATCH 1/3] clean rspiusb code Richard Genoud
2009-05-17 11:06 ` Richard Genoud [this message]
2009-05-17 11:06   ` [PATCH 3/3] rspiusb.c: duplicate code in pixis_io Richard Genoud
2009-05-19 13:02 ` [PATCH 1/3] clean rspiusb code Richard Genoud

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=92fedd0af6bfccd6bb8d69f430148e4630eeeb28.1242557192.git.richard.genoud@gmail.com \
    --to=richard.genoud@gmail.com \
    --cc=gregkh@suse.de \
    --cc=jeff.frontz@gmail.com \
    --cc=judd@jpilot.org \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®