Browse Source

firewire: Sanitize send error codes.

Drop the negative errnos and use RCODEs for all error codes
in the complete transaction callback.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Kristian Høgsberg 18 years ago
parent
commit
e5f49c3b83
3 changed files with 18 additions and 16 deletions
  1. 10 10
      drivers/firewire/fw-ohci.c
  2. 6 6
      drivers/firewire/fw-transaction.c
  3. 2 0
      drivers/firewire/fw-transaction.h

+ 10 - 10
drivers/firewire/fw-ohci.c

@@ -376,7 +376,7 @@ at_context_setup_packet(struct at_context *ctx, struct list_head *list)
 						     packet->payload_length,
 						     packet->payload_length,
 						     DMA_TO_DEVICE);
 						     DMA_TO_DEVICE);
 		if (packet->payload_bus == 0) {
 		if (packet->payload_bus == 0) {
-			complete_transmission(packet, -ENOMEM, list);
+			complete_transmission(packet, RCODE_SEND_ERROR, list);
 			return;
 			return;
 		}
 		}
 
 
@@ -438,7 +438,7 @@ at_context_setup_packet(struct at_context *ctx, struct list_head *list)
 		/* We dont return error codes from this function; all
 		/* We dont return error codes from this function; all
 		 * transmission errors are reported through the
 		 * transmission errors are reported through the
 		 * callback. */
 		 * callback. */
-		complete_transmission(packet, -ESTALE, list);
+		complete_transmission(packet, RCODE_GENERATION, list);
 	}
 	}
 }
 }
 
 
@@ -484,26 +484,26 @@ static void at_context_tasklet(unsigned long data)
 		switch (evt) {
 		switch (evt) {
 		case OHCI1394_evt_timeout:
 		case OHCI1394_evt_timeout:
 			/* Async response transmit timed out. */
 			/* Async response transmit timed out. */
-			complete_transmission(packet, -ETIMEDOUT, &list);
+			complete_transmission(packet, RCODE_CANCELLED, &list);
 			break;
 			break;
 
 
 		case OHCI1394_evt_flushed:
 		case OHCI1394_evt_flushed:
 			/* The packet was flushed should give same
 			/* The packet was flushed should give same
 			 * error as when we try to use a stale
 			 * error as when we try to use a stale
 			 * generation count. */
 			 * generation count. */
-			complete_transmission(packet, -ESTALE, &list);
+			complete_transmission(packet,
+					      RCODE_GENERATION, &list);
 			break;
 			break;
 
 
 		case OHCI1394_evt_missing_ack:
 		case OHCI1394_evt_missing_ack:
-			/* This would be a higher level software
-			 * error, it is using a valid (current)
-			 * generation count, but the node is not on
-			 * the bus. */
-			complete_transmission(packet, -ENODEV, &list);
+			/* Using a valid (current) generation count,
+			 * but the node is not on the bus or not
+			 * sending acks. */
+			complete_transmission(packet, RCODE_NO_ACK, &list);
 			break;
 			break;
 
 
 		default:
 		default:
-			complete_transmission(packet, -EIO, &list);
+			complete_transmission(packet, RCODE_SEND_ERROR, &list);
 			break;
 			break;
 		}
 		}
 	} else
 	} else

+ 6 - 6
drivers/firewire/fw-transaction.c

@@ -93,15 +93,15 @@ transmit_complete_callback(struct fw_packet *packet,
 		close_transaction(t, card, RCODE_BUSY, NULL, 0);
 		close_transaction(t, card, RCODE_BUSY, NULL, 0);
 		break;
 		break;
 	case ACK_DATA_ERROR:
 	case ACK_DATA_ERROR:
+		close_transaction(t, card, RCODE_DATA_ERROR, NULL, 0);
+		break;
 	case ACK_TYPE_ERROR:
 	case ACK_TYPE_ERROR:
-		close_transaction(t, card, RCODE_SEND_ERROR, NULL, 0);
+		close_transaction(t, card, RCODE_TYPE_ERROR, NULL, 0);
 		break;
 		break;
 	default:
 	default:
-		/* FIXME: In this case, status is a negative errno,
-		 * corresponding to an OHCI specific transmit error
-		 * code.  We should map that to an RCODE instead of
-		 * just the generic RCODE_SEND_ERROR. */
-		close_transaction(t, card, RCODE_SEND_ERROR, NULL, 0);
+		/* In this case the ack is really a juju specific
+		 * rcode, so just forward that to the callback. */
+		close_transaction(t, card, status, NULL, 0);
 		break;
 		break;
 	}
 	}
 }
 }

+ 2 - 0
drivers/firewire/fw-transaction.h

@@ -87,6 +87,8 @@
 #define RCODE_SEND_ERROR	0x10
 #define RCODE_SEND_ERROR	0x10
 #define RCODE_CANCELLED		0x11
 #define RCODE_CANCELLED		0x11
 #define RCODE_BUSY		0x12
 #define RCODE_BUSY		0x12
+#define RCODE_GENERATION	0x13
+#define RCODE_NO_ACK		0x14
 
 
 #define RETRY_1	0x00
 #define RETRY_1	0x00
 #define RETRY_X	0x01
 #define RETRY_X	0x01