Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5f49c3b authored by Kristian Høgsberg's avatar Kristian Høgsberg Committed by Stefan Richter
Browse files

firewire: Sanitize send error codes.



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

Signed-off-by: default avatarKristian Høgsberg <krh@redhat.com>
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 93c4cceb
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -376,7 +376,7 @@ at_context_setup_packet(struct at_context *ctx, struct list_head *list)
						     packet->payload_length,
						     DMA_TO_DEVICE);
		if (packet->payload_bus == 0) {
			complete_transmission(packet, -ENOMEM, list);
			complete_transmission(packet, RCODE_SEND_ERROR, list);
			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
		 * transmission errors are reported through the
		 * 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) {
		case OHCI1394_evt_timeout:
			/* Async response transmit timed out. */
			complete_transmission(packet, -ETIMEDOUT, &list);
			complete_transmission(packet, RCODE_CANCELLED, &list);
			break;

		case OHCI1394_evt_flushed:
			/* The packet was flushed should give same
			 * error as when we try to use a stale
			 * generation count. */
			complete_transmission(packet, -ESTALE, &list);
			complete_transmission(packet,
					      RCODE_GENERATION, &list);
			break;

		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;

		default:
			complete_transmission(packet, -EIO, &list);
			complete_transmission(packet, RCODE_SEND_ERROR, &list);
			break;
		}
	} else
+6 −6
Original line number Diff line number Diff line
@@ -93,15 +93,15 @@ transmit_complete_callback(struct fw_packet *packet,
		close_transaction(t, card, RCODE_BUSY, NULL, 0);
		break;
	case ACK_DATA_ERROR:
		close_transaction(t, card, RCODE_DATA_ERROR, NULL, 0);
		break;
	case ACK_TYPE_ERROR:
		close_transaction(t, card, RCODE_SEND_ERROR, NULL, 0);
		close_transaction(t, card, RCODE_TYPE_ERROR, NULL, 0);
		break;
	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;
	}
}
+2 −0
Original line number Diff line number Diff line
@@ -87,6 +87,8 @@
#define RCODE_SEND_ERROR	0x10
#define RCODE_CANCELLED		0x11
#define RCODE_BUSY		0x12
#define RCODE_GENERATION	0x13
#define RCODE_NO_ACK		0x14

#define RETRY_1	0x00
#define RETRY_X	0x01