Patches/cleanup for vpo driver

Jonathon McKitrick jcm at FreeBSD-uk.eu.org
Wed Jan 26 08:09:20 PST 2005


I worked on this for a while, so I'll take responsibility for maintaining
it, if that's ok.

I don't think there are many parallel port ZIP disks out there anyway,
besides my own.  ;-)

Jonathon
--
The beaten path is for the beaten man.
Index: immio.c
===================================================================
RCS file: /usr/home/dcvs/src/sys/dev/disk/vpo/immio.c,v
retrieving revision 1.5
diff -u -r1.5 immio.c
--- immio.c	15 Mar 2004 01:10:44 -0000	1.5
+++ immio.c	24 Jan 2005 15:56:32 -0000
@@ -41,8 +41,7 @@
 #include <sys/module.h>
 #include <sys/bus.h>
 #include <sys/malloc.h>
-
-#endif	/* _KERNEL */
+#endif
 
 #include "opt_vpo.h"
 
@@ -54,16 +53,9 @@
 
 #include "ppbus_if.h"
 
-#define VP0_SELTMO		5000	/* select timeout */
-#define VP0_FAST_SPINTMO	500000	/* wait status timeout */
-#define VP0_LOW_SPINTMO		5000000	/* wait status timeout */
-
-#define VP0_SECTOR_SIZE	512
-
 /*
  * Microcode to execute very fast I/O sequences at the lowest bus level.
  */
-
 #define WAIT_RET		MS_PARAM(7, 2, MS_TYP_PTR)
 #define WAIT_TMO		MS_PARAM(1, 0, MS_TYP_INT)
 
@@ -71,15 +63,15 @@
 struct ppb_microseq wait_microseq[] = {					\
 	MS_CASS(0x0c),							\
 	MS_SET(MS_UNKNOWN),						\
-	/* loop */							\
-	MS_BRSET(nBUSY, 4 /* ready */),					\
-	MS_DBRA(-2 /* loop */),						\
+/* _loop */								\
+	MS_BRSET(nBUSY, 4 /* _ready */),				\
+	MS_DBRA(-2 /* _loop */),					\
 	MS_CASS(0x04),							\
 	MS_RET(1), /* timed out */					\
-	/* ready */							\
+/* _ready */								\
 	MS_CASS(0x04),							\
 	MS_RFETCH(MS_REG_STR, 0xb8, MS_UNKNOWN ),			\
-	MS_RET(0) /* no error */					\
+	MS_RET(0)							\
 }
 
 #define SELECT_TARGET		MS_PARAM(6, 1, MS_TYP_CHA)
@@ -87,27 +79,27 @@
 #define DECLARE_SELECT_MICROSEQUENCE \
 struct ppb_microseq select_microseq[] = {				\
 	MS_CASS(0xc),							\
-	/* first, check there is nothing holding onto the bus */	\
+	/* check there is nothing holding onto the bus */		\
 	MS_SET(VP0_SELTMO),						\
 /* _loop: */								\
 	MS_BRCLEAR(0x8, 2 /* _ready */),				\
 	MS_DBRA(-2 /* _loop */),					\
-	MS_RET(2),			/* bus busy */			\
+	MS_RET(2),	/* bus busy */					\
 /* _ready: */								\
 	MS_CASS(0x4),							\
 	MS_DASS(MS_UNKNOWN /* 0x80 | 1 << target */),			\
 	MS_DELAY(1),							\
 	MS_CASS(0xc),							\
 	MS_CASS(0xd),							\
-	/* now, wait until the drive is ready */			\
+	/* wait until the drive is ready */				\
 	MS_SET(VP0_SELTMO),						\
-/* loop: */								\
-	MS_BRSET(0x8, 3 /* ready */),					\
-	MS_DBRA(-2 /* loop */),						\
-/* error: */								\
+/* _loop2: */								\
+	MS_BRSET(0x8, 3 /* _ready2 */),					\
+	MS_DBRA(-2 /* _loop2 */),					\
+/* _error: */								\
 	MS_CASS(0xc),							\
 	MS_RET(VP0_ESELECT_TIMEOUT),					\
-/* ready: */								\
+/* _ready2: */								\
 	MS_CASS(0xc),							\
 	MS_RET(0)							\
 }
@@ -146,23 +138,23 @@
 	MS_RET(0)							\
 }
 
-#define NEGOCIATED_MODE		MS_PARAM(2, 1, MS_TYP_CHA)
+#define NEGOTIATED_MODE		MS_PARAM(2, 1, MS_TYP_CHA)
 
-#define DECLARE_NEGOCIATE_MICROSEQ \
-struct ppb_microseq negociate_microseq[] = {				\
+#define DECLARE_NEGOTIATE_MICROSEQ \
+struct ppb_microseq negotiate_microseq[] = {				\
 	MS_CASS(0x4),							\
 	MS_DELAY(5),							\
 	MS_DASS(MS_UNKNOWN /* mode */),					\
 	MS_DELAY(100),							\
 	MS_CASS(0x6),							\
 	MS_DELAY(5),							\
-	MS_BRSET(0x20, 5 /* continue */),				\
+	MS_BRSET(0x20, 5 /* _continue */),				\
 	MS_DELAY(5),							\
 	MS_CASS(0x7),							\
 	MS_DELAY(5),							\
 	MS_CASS(0x6),							\
-	MS_RET(VP0_ENEGOCIATE),						\
-/* continue: */								\
+	MS_RET(VP0_ENEGOTIATE),						\
+/* _continue: */							\
 	MS_DELAY(5),							\
 	MS_CASS(0x7),							\
 	MS_DELAY(5),							\
@@ -180,22 +172,21 @@
  * Retrieve the two nibbles and call the C function to generate the character
  * and store it in the buffer (see nibble_inbyte_hook())
  */
-
 #define DECLARE_NIBBLE_INBYTE_SUBMICROSEQ \
 struct ppb_microseq nibble_inbyte_submicroseq[] = {			\
 	MS_CASS(0x4),							\
-/* loop: */								\
+/* _loop: */								\
 	MS_CASS(0x6),							\
 	MS_DELAY(1),							\
-	MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* low nibble */),\
+	MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* lo nibble */),\
 	MS_CASS(0x5),							\
 	MS_DELAY(1),							\
-	MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* high nibble */),\
+	MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* hi nibble */),\
 	MS_CASS(0x4),							\
 	MS_DELAY(1),							\
 	/* do a C call to format the received nibbles */		\
 	MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */),	\
-	MS_DBRA(-7 /* loop */),						\
+	MS_DBRA(-7 /* _loop */),					\
 	MS_RET(0)							\
 }
 
@@ -212,9 +203,7 @@
 };
 
 /*
- * nibble_inbyte_hook()
- *
- * Formats high and low nibble into a character
+ * Format high and low nibble into a character.
  */
 static int
 nibble_inbyte_hook (void *p, char *ptr)
@@ -223,45 +212,41 @@
 
 	/* increment the buffer pointer */
 	*ptr = ((s->l >> 4) & 0x0f) + (s->h & 0xf0);
-
-	return (0);
+	return(0);
 }
 
 /*
- * This is the sub-microseqence for MS_GET in PS2 mode
+ * Sub-microseqence for MS_GET in PS2 mode.
  */
 static struct ppb_microseq ps2_inbyte_submicroseq[] = {
 	  MS_CASS(0x4),
-
-/* loop: */
+/* _loop: */
 	  MS_CASS(PCD | 0x6),
 	  MS_RFETCH_P(1, MS_REG_DTR, MS_FETCH_ALL),
 	  MS_CASS(PCD | 0x5),
-	  MS_DBRA(-4 /* loop */),
-
+	  MS_DBRA(-4 /* _loop */),
 	  MS_RET(0)
 };
 
 /*
- * This is the sub-microsequence for MS_PUT in both NIBBLE and PS2 modes
+ * Sub-microsequence for MS_PUT in both NIBBLE and PS2 modes.
  */
 static struct ppb_microseq spp_outbyte_submicroseq[] = {
 	  MS_CASS(0x4),
-
-/* loop: */
+/* _loop: */
 	  MS_RASSERT_P(1, MS_REG_DTR), 
 	  MS_CASS(0x5),
 	  MS_DBRA(0),				/* decrement counter */
 	  MS_RASSERT_P(1, MS_REG_DTR), 
 	  MS_CASS(0x0),
-	  MS_DBRA(-6 /* loop */),
-
-	  /* return from the put call */
+	  MS_DBRA(-6 /* _loop */),
 	  MS_CASS(0x4),
 	  MS_RET(0)
 };
 
-/* EPP 1.7 microsequences, ptr and len set at runtime */
+/* 
+ * EPP 1.7 microsequences, ptr and len set at runtime.
+ */
 static struct ppb_microseq epp17_outstr[] = {
 	  MS_CASS(0x4),
 	  MS_RASSERT_P(MS_ACCUM, MS_REG_EPP_D), 
@@ -280,12 +265,10 @@
 imm_disconnect(struct vpoio_data *vpo, int *connected, int release_bus)
 {
 	DECLARE_CPP_MICROSEQ;
-
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
 	char s1, s2, s3;
 	int ret;
 
-	/* all should be ok */
 	if (connected)
 		*connected = 0;
 
@@ -304,31 +287,29 @@
 	}
 
 	if (release_bus)
-		return (ppb_release_bus(ppbus, vpo->vpo_dev));
+		return(ppb_release_bus(ppbus, vpo->vpo_dev));
 	else
-		return (0);
+		return(0);
 }
 
 /*
- * how	: PPB_WAIT or PPB_DONTWAIT
+ * Connect the IMM adapter.
  */
 static int
-imm_connect(struct vpoio_data *vpo, int how, int *disconnected, int request_bus)
+imm_connect(struct vpoio_data *vpo, int wait_mode, int *disconnected, int request_bus)
 {
 	DECLARE_CPP_MICROSEQ;
-
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
 	char s1, s2, s3;
 	int error;
 	int ret;
 
-	/* all should be ok */
 	if (disconnected)
 		*disconnected = 0;
 
 	if (request_bus)
-		if ((error = ppb_request_bus(ppbus, vpo->vpo_dev, how)))
-			return (error);
+		if ((error = ppb_request_bus(ppbus, vpo->vpo_dev, wait_mode)))
+			return(error);
 
 	ppb_MS_init_msq(cpp_microseq, 3, CPP_S1, (void *)&s1,
 			CPP_S2, (void *)&s2, CPP_S3, (void *)&s3);
@@ -356,12 +337,10 @@
 			*disconnected = VP0_ECONNECT;
 	}
 
-	return (0);
+	return(0);
 }
 
 /*
- * imm_detect()
- *
  * Detect and initialise the VP0 adapter.
  */
 static int
@@ -371,24 +350,22 @@
 	int error;
 
 	if ((error = ppb_request_bus(ppbus, vpo->vpo_dev, PPB_DONTWAIT)))
-		return (error);
+		return(error);
 
-	/* disconnect the drive, keep the bus */
+	/* Disconnect the drive, keep the bus. */
 	imm_disconnect(vpo, NULL, 0);
 
 	vpo->vpo_mode_found = VP0_MODE_UNDEFINED;
 	error = 1;
 
-	/* try to enter EPP mode since vpoio failure put the bus in NIBBLE */
-	if (ppb_set_mode(ppbus, PPB_EPP) != -1) {
+	/* Try to enter EPP mode since vpoio failure put the bus in NIBBLE. */
+	if (ppb_set_mode(ppbus, PPB_EPP) != -1)
 		imm_connect(vpo, PPB_DONTWAIT, &error, 0);
-	}
 
 	/* if connection failed try PS/2 then NIBBLE modes */
 	if (error) {
-		if (ppb_set_mode(ppbus, PPB_PS2) != -1) {
+		if (ppb_set_mode(ppbus, PPB_PS2) != -1)
 			imm_connect(vpo, PPB_DONTWAIT, &error, 0);
-		}
 		if (error) {
 			if (ppb_set_mode(ppbus, PPB_NIBBLE) != -1) {
 				imm_connect(vpo, PPB_DONTWAIT, &error, 0);
@@ -406,15 +383,16 @@
 		vpo->vpo_mode_found = VP0_MODE_EPP;
 	}
 
-	/* send SCSI reset signal */
+	/* Send SCSI reset signal. */
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, reset_microseq, NULL);
 
-	/* release the bus now */
+	/* Release the bus. */
 	imm_disconnect(vpo, &error, 1);
 
-	/* ensure we are disconnected or daisy chained peripheral 
-	 * may cause serious problem to the disk */
-
+	/* 
+	 * Ensure we are disconnected or daisy chained peripheral 
+	 * may cause serious problem to the disk.
+	 */
 	if (error) {
 		if (bootverbose)
 			printf("imm%d: can't disconnect from the drive\n",
@@ -422,15 +400,15 @@
 		goto error;
 	}
 
-	return (0);
+	return(0);
 
 error:
 	ppb_release_bus(ppbus, vpo->vpo_dev);
-	return (VP0_EINITFAILED);
+	return(VP0_EINITFAILED);
 }
 
 /*
- * imm_outstr()
+ * Send data to the drive.
  */
 static int
 imm_outstr(struct vpoio_data *vpo, char *buffer, int size)
@@ -444,11 +422,11 @@
 	ppb_MS_exec(ppbus, vpo->vpo_dev, MS_OP_PUT, (union ppb_insarg)buffer,
 		(union ppb_insarg)size, (union ppb_insarg)MS_UNKNOWN, &error);
 
-	return (error);
+	return(error);
 }
 
 /*
- * imm_instr()
+ * Read data from the drive.
  */
 static int
 imm_instr(struct vpoio_data *vpo, char *buffer, int size)
@@ -462,9 +440,12 @@
 	ppb_MS_exec(ppbus, vpo->vpo_dev, MS_OP_GET, (union ppb_insarg)buffer,
 		(union ppb_insarg)size, (union ppb_insarg)MS_UNKNOWN, &error);
 
-	return (error);
+	return(error);
 }
 
+/*
+ * Select the drive to accept our commands.
+ */
 static char
 imm_select(struct vpoio_data *vpo, int initiator, int target)
 {
@@ -478,20 +459,13 @@
 				
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, select_microseq, &ret);
 
-	return (ret);
+	return(ret);
 }
 
-/*
- * imm_wait()
- *
- * H_SELIN must be low.
- *
- */
 static char
 imm_wait(struct vpoio_data *vpo, int tmo)
 {
 	DECLARE_WAIT_MICROSEQUENCE;
-
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
 	int ret, err;
 
@@ -502,7 +476,6 @@
 	 *		0xa8 = ZIP+ wants command
 	 *		0xb8 = end of transfer, ZIP+ is sending status
 	 */
-
 	ppb_MS_init_msq(wait_microseq, 2,
 			WAIT_RET, (void *)&ret,
 			WAIT_TMO, tmo);
@@ -510,68 +483,60 @@
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, wait_microseq, &err);
 
 	if (err)
-		return (0);			   /* command timed out */	
+		return(0);			   /* command timed out */	
 
 	return(ret);
 }
 
 static int
-imm_negociate(struct vpoio_data *vpo)
+imm_negotiate(struct vpoio_data *vpo)
 {
-	DECLARE_NEGOCIATE_MICROSEQ;
+	DECLARE_NEGOTIATE_MICROSEQ;
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
-	int negociate_mode;
+	int negotiate_mode;
 	int ret;
 
 	if (PPB_IN_NIBBLE_MODE(ppbus))
-		negociate_mode = 0;
+		negotiate_mode = 0;
 	else if (PPB_IN_PS2_MODE(ppbus))
-		negociate_mode = 1;
+		negotiate_mode = 1;
 	else
-		return (0);
+		return(0);
 
 #if 0 /* XXX use standalone code not to depend on ppb_1284 code yet */
-	ret = ppb_1284_negociate(ppbus, negociate_mode);
+	ret = ppb_1284_negotiate(ppbus, negotiate_mode);
 
 	if (ret)
-		return (VP0_ENEGOCIATE);
+		return(VP0_ENEGOTIATE);
 #endif
 	
-	ppb_MS_init_msq(negociate_microseq, 1,
-			NEGOCIATED_MODE, negociate_mode);
+	ppb_MS_init_msq(negotiate_microseq, 1,
+			NEGOTIATED_MODE, negotiate_mode);
 
-	ppb_MS_microseq(ppbus, vpo->vpo_dev, negociate_microseq, &ret);
+	ppb_MS_microseq(ppbus, vpo->vpo_dev, negotiate_microseq, &ret);
 
-	return (ret);
+	return(ret);
 }
 
 /*
- * imm_probe()
- *
- * Low level probe of vpo device
- *
+ * Low level probe of imm device.
  */
 int
 imm_probe(device_t dev, struct vpoio_data *vpo)
 {
-	int error;
+	int error = 0;
 
-	/* ppbus dependent initialisation */
+	/* ppbus dependent initialisation. */
 	vpo->vpo_dev = dev;
 
-	/* now, try to initialise the drive */
-	if ((error = imm_detect(vpo))) {
-		return (error);
-	}
+	/* Try to initialise the drive. */
+	error = imm_detect(vpo);
 
-	return (0);
+	return(error);
 }
 
 /*
- * imm_attach()
- *
- * Low level attachment of vpo device
- *
+ * Low level attachment of imm device.
  */
 int
 imm_attach(struct vpoio_data *vpo)
@@ -580,9 +545,7 @@
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
 	int error = 0;
 
-	/*
-	 * Initialize microsequence code
-	 */
+	/* Initialize microsequence code */
 	vpo->vpo_nibble_inbyte_msq = malloc(sizeof(nibble_inbyte_submicroseq),
 						M_DEVBUF, M_WAITOK);
 
@@ -596,13 +559,11 @@
 		INB_NIBBLE_F, nibble_inbyte_hook,
 		INB_NIBBLE_P, (void *)&(vpo)->vpo_nibble); 
 
-	/*
-	 * Initialize mode dependent in/out microsequences
-	 */
+	/* Initialize mode dependent in/out microsequences */
 	if ((error = ppb_request_bus(ppbus, vpo->vpo_dev, PPB_WAIT)))
 	    goto error;
 
-	/* ppbus automatically restore the last mode entered during detection */
+	/* ppbus restores the last mode entered during detection. */
 	switch (vpo->vpo_mode_found) {
 	case VP0_MODE_EPP:
 		ppb_MS_GET_init(ppbus, vpo->vpo_dev, epp17_instr);
@@ -625,39 +586,29 @@
 
 	ppb_release_bus(ppbus, vpo->vpo_dev);
  error:
-	return (error);
+	return(error);
 }
 
-/*
- * imm_reset_bus()
- *
- */
 int
 imm_reset_bus(struct vpoio_data *vpo)
 {
 	device_t ppbus = device_get_parent(vpo->vpo_dev);
 	int disconnected;
 
-	/* first, connect to the drive and request the bus */
+	/* Connect to the drive and request the bus. */
 	imm_connect(vpo, PPB_WAIT|PPB_INTR, &disconnected, 1);
 
 	if (!disconnected) {
-
-		/* reset the SCSI bus */
+		/* Reset the SCSI bus and disconnect. */
 		ppb_MS_microseq(ppbus, vpo->vpo_dev, reset_microseq, NULL);
-
-		/* then disconnect */
 		imm_disconnect(vpo, NULL, 1);
 	}
 
-	return (0);
+	return(0);
 }
 
 /*
- * imm_do_scsi()
- *
- * Send an SCSI command
- *
+ * Send a SCSI command.
  */
 int 
 imm_do_scsi(struct vpoio_data *vpo, int host, int target, char *command,
@@ -669,33 +620,34 @@
 	char l, h = 0;
 	int len, error = 0, not_connected = 0;
 	int k;
-	int negociated = 0;
+	int negotiated = 0;
 
 	/*
-	 * enter disk state, allocate the ppbus
+	 * Enter disk state, allocate the ppbus.
 	 *
 	 * XXX
 	 * Should we allow this call to be interruptible?
 	 * The only way to report the interruption is to return
 	 * EIO to upper SCSI code :^(
 	 */
-	if ((error = imm_connect(vpo, PPB_WAIT|PPB_INTR, &not_connected, 1)))
-		return (error);
+	if ((error = imm_connect(vpo, PPB_WAIT | PPB_INTR, &not_connected, 1)))
+		return(error);
 
 	if (not_connected) {
-		*ret = VP0_ECONNECT; goto error;
+		*ret = VP0_ECONNECT;
+		goto error;
 	}
 
 	/*
-	 * Select the drive ...
+	 * Select the drive.
 	 */
 	if ((*ret = imm_select(vpo,host,target)))
 		goto error;
 
 	/*
-	 * Send the command ...
+	 * Send the command.
 	 */
-	for (k = 0; k < clen; k+=2) {
+	for (k = 0; k < clen; k += 2) {
 		if (imm_wait(vpo, VP0_FAST_SPINTMO) != (char)0xa8) {
 			*ret = VP0_ECMD_TIMEOUT;
 			goto error;
@@ -707,28 +659,29 @@
 	}
 
 	if (!(r = imm_wait(vpo, VP0_LOW_SPINTMO))) {
-		*ret = VP0_ESTATUS_TIMEOUT; goto error;
+		*ret = VP0_ESTATUS_TIMEOUT;
+		goto error;
 	}
 
 	if ((r & 0x30) == 0x10) {
-		if (imm_negociate(vpo)) {
-			*ret = VP0_ENEGOCIATE;
+		if (imm_negotiate(vpo)) {
+			*ret = VP0_ENEGOTIATE;
 			goto error;
 		} else
-			negociated = 1;
+			negotiated = 1;
 	}
 
 	/* 
-	 * Complete transfer ... 
+	 * Complete transfer.
 	 */
 	*count = 0;
 	for (;;) {
-
 		if (!(r = imm_wait(vpo, VP0_LOW_SPINTMO))) {
-			*ret = VP0_ESTATUS_TIMEOUT; goto error;
+			*ret = VP0_ESTATUS_TIMEOUT;
+			goto error;
 		}
 
-		/* stop when the ZIP+ wants to send status */
+		/* Stop when the ZIP+ wants to send status. */
 		if (r == (char)0xb8)
 			break;
 
@@ -761,42 +714,42 @@
 		*count += len;
 	}
 
-	if ((PPB_IN_NIBBLE_MODE(ppbus) ||
-			PPB_IN_PS2_MODE(ppbus)) && negociated)
+	if ((PPB_IN_NIBBLE_MODE(ppbus) || PPB_IN_PS2_MODE(ppbus)) && negotiated)
 		ppb_MS_microseq(ppbus, vpo->vpo_dev, transfer_epilog, NULL);
 
 	/*
-	 * Retrieve status ...
+	 * Retrieve status.
 	 */
-	if (imm_negociate(vpo)) {
-		*ret = VP0_ENEGOCIATE;
+	if (imm_negotiate(vpo)) {
+		*ret = VP0_ENEGOTIATE;
 		goto error;
 	} else
-		negociated = 1;
+		negotiated = 1;
 
 	if (imm_instr(vpo, &l, 1)) {
-		*ret = VP0_EOTHER; goto error;
+		*ret = VP0_EOTHER;
+		goto error;
 	}
 
 	/* check if the ZIP+ wants to send more status */
 	if (imm_wait(vpo, VP0_FAST_SPINTMO) == (char)0xb8)
 		if (imm_instr(vpo, &h, 1)) {
-			*ret = VP0_EOTHER+2; goto error;
+			*ret = VP0_EOTHER + 2;
+			goto error;
 		}
 
 	/* Experience showed that we should discard this */
 	if (h == -1)
 		h = 0;
 
-	*result = ((int) h << 8) | ((int) l & 0xff);
+	*result = ((int)h << 8) | ((int)l & 0xff);
 
 error:
-	if ((PPB_IN_NIBBLE_MODE(ppbus) ||
-			PPB_IN_PS2_MODE(ppbus)) && negociated)
+	if ((PPB_IN_NIBBLE_MODE(ppbus) || PPB_IN_PS2_MODE(ppbus)) && negotiated)
 		ppb_MS_microseq(ppbus, vpo->vpo_dev, transfer_epilog, NULL);
 
 	/* return to printer state, release the ppbus */
 	imm_disconnect(vpo, NULL, 1);
 
-	return (0);
+	return(0);
 }
Index: vpo.c
===================================================================
RCS file: /usr/home/dcvs/src/sys/dev/disk/vpo/vpo.c,v
retrieving revision 1.4
diff -u -r1.4 vpo.c
--- vpo.c	15 Mar 2004 01:10:44 -0000	1.4
+++ vpo.c	24 Jan 2005 15:47:13 -0000
@@ -91,13 +91,9 @@
 static void
 vpo_identify(driver_t *driver, device_t parent)
 {
-
 	BUS_ADD_CHILD(parent, 0, "vpo", 0);
 }
 
-/*
- * vpo_probe()
- */
 static int
 vpo_probe(device_t dev)
 {
@@ -127,12 +123,9 @@
 		return (error);
 	}
 
-	return (0);
+	return(0);
 }
 
-/*
- * vpo_attach()
- */
 static int
 vpo_attach(device_t dev)
 {
@@ -143,39 +136,36 @@
 	/* low level attachment */
 	if (vpo->vpo_isplus) {
 		if ((error = imm_attach(&vpo->vpo_io)))
-			return (error);
+			return(error);
 	} else {
 		if ((error = vpoio_attach(&vpo->vpo_io)))
-			return (error);
+			return(error);
 	}
 
 	/*
-	**	Now tell the generic SCSI layer
-	**	about our bus.
-	*/
+	 *	Now tell the generic SCSI layer
+	 *	about our bus.
+	 */
 	devq = cam_simq_alloc(/*maxopenings*/1);
 	/* XXX What about low-level detach on error? */
 	if (devq == NULL)
-		return (ENXIO);
+		return(ENXIO);
 
 	vpo->sim = cam_sim_alloc(vpo_action, vpo_poll, "vpo", vpo,
 				 device_get_unit(dev),
 				 /*untagged*/1, /*tagged*/0, devq);
 	cam_simq_release(devq);
 	if (vpo->sim == NULL) {
-		return (ENXIO);
+		return(ENXIO);
 	}
 
 	if (xpt_bus_register(vpo->sim, /*bus*/0) != CAM_SUCCESS) {
 		cam_sim_free(vpo->sim);
-		return (ENXIO);
+		return(ENXIO);
 	}
 
-	/* all went ok */
-
 	vpo_cam_rescan(vpo);	/* have CAM rescan the bus */
-
-	return (0);
+	return(0);
 }
 
 static void
@@ -207,9 +197,6 @@
         /* The scan is in progress now. */
 }
 
-/*
- * vpo_intr()
- */
 static void
 vpo_intr(struct vpo_data *vpo, struct ccb_scsiio *csio)
 {
@@ -268,7 +255,6 @@
 
 	   /* check if we have to sense the drive */
 	   if ((vpo->vpo_stat & SCSI_STATUS_CHECK_COND) != 0) {
-
 		vpo->vpo_sense.cmd.opcode = REQUEST_SENSE;
 		vpo->vpo_sense.cmd.length = csio->sense_len;
 		vpo->vpo_sense.cmd.control = 0;
@@ -291,7 +277,6 @@
 				&vpo->vpo_error);
 		}
 			
-
 #ifdef VP0_DEBUG
 		printf("(sense) vpo_do_scsi = %d, status = 0x%x, count = %d, vpo_error = %d\n", 
 			errno, vpo->vpo_sense.stat, vpo->vpo_sense.count, vpo->vpo_error);
@@ -299,7 +284,6 @@
 
 		/* check sense return status */
 		if (errno == 0 && vpo->vpo_sense.stat == SCSI_STATUS_OK) {
-		   /* sense ok */
 		   csio->ccb_h.status = CAM_AUTOSNS_VALID | CAM_SCSI_STATUS_ERROR;
 		   csio->sense_resid = csio->sense_len - vpo->vpo_sense.count;
 
@@ -319,7 +303,6 @@
 		/* no sense */
 		csio->ccb_h.status = CAM_SCSI_STATUS_ERROR;			
 	   }
-
 	   goto error;
 	}
 
@@ -328,14 +311,11 @@
 
 error:
 	splx(s);
-
-	return;
 }
 
 static void
 vpo_action(struct cam_sim *sim, union ccb *ccb)
 {
-
 	struct vpo_data *vpo = (struct vpo_data *)sim->softc;
 
 	switch (ccb->ccb_h.func_code) {
@@ -351,14 +331,12 @@
 #endif
 		
 		vpo_intr(vpo, csio);
-
 		xpt_done(ccb);
-
 		break;
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
+		struct ccb_calc_geometry *ccg;
 
 		ccg = &ccb->ccg;
 
@@ -437,15 +415,12 @@
 		xpt_done(ccb);
 		break;
 	}
-
-	return;
 }
 
 static void
 vpo_poll(struct cam_sim *sim)
 {       
-	/* The ZIP is actually always polled throw vpo_action() */
-	return;
+	/* The ZIP is actually always polled through vpo_action() */
 }
 
 static devclass_t vpo_devclass;
Index: vpoio.c
===================================================================
RCS file: /usr/home/dcvs/src/sys/dev/disk/vpo/vpoio.c,v
retrieving revision 1.5
diff -u -r1.5 vpoio.c
--- vpoio.c	15 Mar 2004 01:10:44 -0000	1.5
+++ vpoio.c	22 Jan 2005 13:59:14 -0000
@@ -55,13 +55,7 @@
 /*
  * The driver pools the drive. We may add a timeout queue to avoid
  * active polling on nACK. I've tried this but it leads to unreliable
- * transfers
- */
-#define VP0_SELTMO		5000	/* select timeout */
-#define VP0_FAST_SPINTMO	500000	/* wait status timeout */
-#define VP0_LOW_SPINTMO		5000000	/* wait status timeout */
-
-/*
+ * transfers.
  * Actually, VP0 timings are more accurate (about few 16MHZ cycles),
  * but succeeding in respecting such timings leads to architecture
  * dependent considerations.
@@ -98,7 +92,6 @@
 /*
  * Microcode to execute very fast I/O sequences at the lowest bus level.
  */
-
 #define WAIT_RET	MS_PARAM(4, 2, MS_TYP_PTR)
 #define WAIT_TMO	MS_PARAM(0, 0, MS_TYP_INT)
 
@@ -183,15 +176,14 @@
  * Retrieve the two nibbles and call the C function to generate the character
  * and store it in the buffer (see nibble_inbyte_hook())
  */
-
 #define DECLARE_NIBBLE_INBYTE_SUBMICROSEQ			\
 struct ppb_microseq nibble_inbyte_submicroseq[] = {		\
 /* loop: */							\
 	  MS_CASS( H_AUTO | H_SELIN | H_INIT | H_STROBE),	\
 	  MS_DELAY(VP0_PULSE),					\
-	  MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* high nibble */),\
+	  MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* hi nibble */),\
 	  MS_CASS(H_nAUTO | H_SELIN | H_INIT | H_STROBE),	\
-	  MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* low nibble */),\
+	  MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* lo nibble */),\
 	  /* do a C call to format the received nibbles */	\
 	  MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */),\
 	  MS_DBRA(-7 /* loop */),				\
@@ -282,7 +274,7 @@
 	int ret;
 
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, disconnect_microseq, &ret);
-	return (ppb_release_bus(ppbus, vpo->vpo_dev));
+	return(ppb_release_bus(ppbus, vpo->vpo_dev));
 }
 
 /*
 #ifdef VP0_DEBUG
 		printf("%s: can't request bus!\n", __FUNCTION__);
 #endif
-		return error;
+		return(error);
 	}
 
 	if (PPB_IN_EPP_MODE(ppbus))
@@ -308,7 +300,7 @@
 	else
 		ppb_MS_microseq(ppbus, vpo->vpo_dev, connect_spp_microseq, &ret);
 
-	return (0);
+	return(0);
 }
 
 /*
@@ -335,8 +327,6 @@
 
 	ppb_MS_init_msq(reset_microseq, 1, INITIATOR, 1 << VP0_INITIATOR);
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, reset_microseq, &ret);
-
-	return;
 }
 
 /*
@@ -349,8 +339,7 @@
 	int ret;
 
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, in_disk_mode, &ret);
-
-	return (ret);
+	return(ret);
 }
 
 /*
@@ -429,11 +418,11 @@
 	}
 
 	ppb_release_bus(ppbus, vpo->vpo_dev);
-	return (0);
+	return(0);
 
 error:
 	ppb_release_bus(ppbus, vpo->vpo_dev);
-	return (VP0_EINITFAILED);
+	return(VP0_EINITFAILED);
 }
 
 /*
@@ -450,7 +439,7 @@
 
 	ppb_ecp_sync(ppbus);
 
-	return (error);
+	return(error);
 }
 
 /*
@@ -467,7 +456,7 @@
 
 	ppb_ecp_sync(ppbus);
 
-	return (error);
+	return(error);
 }
 
 static char
@@ -506,9 +495,9 @@
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, select_microseq, &ret);
 
 	if (ret)
-		return (VP0_ESELECT_TIMEOUT);
+		return(VP0_ESELECT_TIMEOUT);
 
-	return (0);
+	return(0);
 }
 
 /*
@@ -548,7 +537,7 @@
 	ppb_MS_microseq(ppbus, vpo->vpo_dev, wait_microseq, &err);
 
 	if (err)
-		return (0);	 /* command timed out */	
+		return(0);	 /* command timed out */	
 
 	return(ret);
 }
@@ -577,7 +566,7 @@
 		return (error);
 	}
 
-	return (0);
+	return(0);
 }
 
 /*
@@ -636,7 +625,7 @@
 	ppb_release_bus(ppbus, vpo->vpo_dev);
 
 error:
-	return (error);
+	return(error);
 }
 
 /*
@@ -654,21 +643,16 @@
 #endif
 		/* release ppbus */
 		vpoio_disconnect(vpo);
-		return (1);
+		return(1);
 	}
 
 	/* reset the SCSI bus */
 	vpoio_reset(vpo);
-
-	/* then disconnect */
 	vpoio_disconnect(vpo);
-
-	return (0);
+	return(0);
 }
 
 /*
- * vpoio_do_scsi()
- *
  * Send an SCSI command
  *
  */
@@ -692,10 +676,11 @@
 	 * EIO do upper SCSI code :^(
 	 */
 	if ((error = vpoio_connect(vpo, PPB_WAIT|PPB_INTR)))
-		return (error);
+		return(error);
 
 	if (!vpoio_in_disk_mode(vpo)) {
-		*ret = VP0_ECONNECT; goto error;
+		*ret = VP0_ECONNECT; 
+		goto error;
 	}
 
 	if ((*ret = vpoio_select(vpo,host,target)))
@@ -727,7 +712,8 @@
 	for (;;) {
 
 		if (!(r = vpoio_wait(vpo, VP0_LOW_SPINTMO))) {
-			*ret = VP0_ESTATUS_TIMEOUT; goto error;
+			*ret = VP0_ESTATUS_TIMEOUT; 
+			goto error;
 		}
 
 		/* stop when the ZIP wants to send status */
@@ -763,13 +749,15 @@
 	}
 
 	if (vpoio_instr(vpo, &l, 1)) {
-		*ret = VP0_EOTHER; goto error;
+		*ret = VP0_EOTHER; 
+		goto error;
 	}
 
 	/* check if the ZIP wants to send more status */
 	if (vpoio_wait(vpo, VP0_FAST_SPINTMO) == (char)0xf0)
 		if (vpoio_instr(vpo, &h, 1)) {
-			*ret = VP0_EOTHER+2; goto error;
+			*ret = VP0_EOTHER+2; 
+			goto error;
 		}
 
 	*result = ((int) h << 8) | ((int) l & 0xff);
@@ -777,5 +765,5 @@
 error:
 	/* return to printer state, release the ppbus */
 	vpoio_disconnect(vpo);
-	return (0);
+	return(0);
 }
Index: vpoio.h
===================================================================
RCS file: /usr/home/dcvs/src/sys/dev/disk/vpo/vpoio.h,v
retrieving revision 1.2
diff -u -r1.2 vpoio.h
--- vpoio.h	17 Jun 2003 04:28:29 -0000	1.2
+++ vpoio.h	22 Jan 2005 13:59:42 -0000
@@ -30,10 +30,8 @@
 #ifndef __VP0IO_H
 #define __VP0IO_H
 
-/*
- * The ZIP drive cannot act as an initiator.
- */
-#define VP0_INITIATOR	0x7
+/* The ZIP drive cannot act as an initiator. */
+#define VP0_INITIATOR		0x7
 
 #define VP0_ESELECT_TIMEOUT	1
 #define VP0_ECMD_TIMEOUT	2
@@ -42,23 +40,17 @@
 #define VP0_EDATA_OVERFLOW	5	
 #define VP0_EDISCONNECT		6
 #define VP0_EPPDATA_TIMEOUT	7
-#define VP0_ENEGOCIATE		8
+#define VP0_ENEGOTIATE		8
 #define VP0_ENOPORT		9
 #define VP0_EINITFAILED		10
 #define VP0_EINTR		12
-
 #define VP0_EOTHER		13
 
-#define VP0_OPENNINGS	1
+#define VP0_SECTOR_SIZE		512
 
-/*
- * Data structure used during microsequence execution
- * when characters are received in nibble mode
- */
-struct vpo_nibble {
-	char h;			/* most significant nibble */
-	char l;			/* less significant nibble */
-};
+#define VP0_SELTMO              5000    /* select timeout */
+#define VP0_FAST_SPINTMO        500000  /* wait status timeout */
+#define VP0_LOW_SPINTMO         5000000 /* wait status timeout */
 
 /* Mode found during initialisation */
 #define VP0_MODE_UNDEFINED	0x0
@@ -66,34 +58,35 @@
 #define VP0_MODE_PS2		0x2
 #define VP0_MODE_EPP		0x3
 
+#define vpoio_set_unit(vpo, unit) ((vpo)->vpo_unit = unit)
+
+/*
+ * Data structure used during microsequence execution
+ * when characters are received in nibble mode.
+ */
+struct vpo_nibble {
+	char h;			/* hi nibble */
+	char l;			/* lo nibble */
+};
+
+/* Per-unit data for vpo driver. */
 struct vpoio_data {
 	unsigned short int vpo_unit;
-	int vpo_mode_found;		/* Mode found during init */
-
+	int vpo_mode_found;
 	struct vpo_nibble vpo_nibble;
-
-	/* each device must have its own nibble inbyte microsequence */
 	struct ppb_microseq *vpo_nibble_inbyte_msq;
-
 	device_t vpo_dev;
 };
 
-#define vpoio_set_unit(vpo,unit) ((vpo)->vpo_unit = unit)
-
 int vpoio_probe(device_t dev, struct vpoio_data *vpo);
-
 int vpoio_attach(struct vpoio_data *vpo);
 int vpoio_reset_bus(struct vpoio_data *vpo);
-
-int vpoio_do_scsi(struct vpoio_data *vpo, int host, int target, char *command,
-		int clen, char *buffer, int blen, int *result, int *count,
-		int *ret);
-
+int vpoio_do_scsi(struct vpoio_data *vpo, int host, int target, 
+	char *command, int clen, char *buffer, int blen, int *result, 
+	int *count, int *ret);
 int imm_probe(device_t dev, struct vpoio_data *vpo);
-
 int imm_attach(struct vpoio_data *vpo);
 int imm_reset_bus(struct vpoio_data *vpo);
-
 int imm_do_scsi(struct vpoio_data *vpo, int host, int target, char *command,
 		int clen, char *buffer, int blen, int *result, int *count,
 		int *ret);




More information about the Submit mailing list