Commit 7bdbff67 authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Stefan Richter
Browse files

firewire: move rcode_string() to core



There is nothing audio-specific about the rcode_string() helper, so move
it from snd-firewire-lib into firewire-core to allow other code to use it.

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (fixed sound/firewire/cmp.c)
parent db7494e2
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -994,6 +994,32 @@ void fw_core_handle_response(struct fw_card *card, struct fw_packet *p)
}
EXPORT_SYMBOL(fw_core_handle_response);

/**
 * fw_rcode_string - convert a firewire result code to an error description
 * @rcode: the result code
 */
const char *fw_rcode_string(int rcode)
{
	static const char *const names[] = {
		[RCODE_COMPLETE]       = "no error",
		[RCODE_CONFLICT_ERROR] = "conflict error",
		[RCODE_DATA_ERROR]     = "data error",
		[RCODE_TYPE_ERROR]     = "type error",
		[RCODE_ADDRESS_ERROR]  = "address error",
		[RCODE_SEND_ERROR]     = "send error",
		[RCODE_CANCELLED]      = "timeout",
		[RCODE_BUSY]           = "busy",
		[RCODE_GENERATION]     = "bus reset",
		[RCODE_NO_ACK]         = "no ack",
	};

	if ((unsigned int)rcode < ARRAY_SIZE(names) && names[rcode])
		return names[rcode];
	else
		return "unknown";
}
EXPORT_SYMBOL(fw_rcode_string);

static const struct fw_address_region topology_map_region =
	{ .start = CSR_REGISTER_BASE | CSR_TOPOLOGY_MAP,
	  .end   = CSR_REGISTER_BASE | CSR_TOPOLOGY_MAP_END, };
+1 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ int fw_cancel_transaction(struct fw_card *card,
int fw_run_transaction(struct fw_card *card, int tcode, int destination_id,
		       int generation, int speed, unsigned long long offset,
		       void *payload, size_t length);
const char *fw_rcode_string(int rcode);

static inline int fw_stream_packet_destination_id(int tag, int channel, int sy)
{
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ static int pcr_modify(struct cmp_connection *c,
	return 0;

io_error:
	cmp_error(c, "transaction failed: %s\n", rcode_string(rcode));
	cmp_error(c, "transaction failed: %s\n", fw_rcode_string(rcode));
	return -EIO;

bus_reset:
+1 −27
Original line number Diff line number Diff line
@@ -13,32 +13,6 @@

#define ERROR_RETRY_DELAY_MS	5

/**
 * rcode_string - convert a firewire result code to a string
 * @rcode: the result
 */
const char *rcode_string(unsigned int rcode)
{
	static const char *const names[] = {
		[RCODE_COMPLETE]	= "complete",
		[RCODE_CONFLICT_ERROR]	= "conflict error",
		[RCODE_DATA_ERROR]	= "data error",
		[RCODE_TYPE_ERROR]	= "type error",
		[RCODE_ADDRESS_ERROR]	= "address error",
		[RCODE_SEND_ERROR]	= "send error",
		[RCODE_CANCELLED]	= "cancelled",
		[RCODE_BUSY]		= "busy",
		[RCODE_GENERATION]	= "generation",
		[RCODE_NO_ACK]		= "no ack",
	};

	if (rcode < ARRAY_SIZE(names) && names[rcode])
		return names[rcode];
	else
		return "unknown";
}
EXPORT_SYMBOL(rcode_string);

/**
 * snd_fw_transaction - send a request and wait for its completion
 * @unit: the driver's unit on the target device
@@ -71,7 +45,7 @@ int snd_fw_transaction(struct fw_unit *unit, int tcode,

		if (rcode_is_permanent_error(rcode) || ++tries >= 3) {
			dev_err(&unit->device, "transaction failed: %s\n",
				rcode_string(rcode));
				fw_rcode_string(rcode));
			return -EIO;
		}

+0 −1
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ struct fw_unit;

int snd_fw_transaction(struct fw_unit *unit, int tcode,
		       u64 offset, void *buffer, size_t length);
const char *rcode_string(unsigned int rcode);

/* returns true if retrying the transaction would not make sense */
static inline bool rcode_is_permanent_error(int rcode)