Commit 53c96b41 authored by Stefan Richter's avatar Stefan Richter
Browse files

ieee1394: remove old isochronous ABI



Based on patch "the scheduled removal of RAW1394_REQ_ISO_{SEND,LISTEN}"
from Adrian Bunk, November 20 2006.

This patch also removes the underlying facilities in ohci1394 and
disables them in pcilynx.  That is, hpsb_host_driver.devctl() and
hpsb_host_driver.transmit_packet() are no longer used for iso reception
and transmission.

Since video1394 and dv1394 only work with ohci1394 and raw1394's rawiso
interface has never been implemented in pcilynx, pcilynx is now no
longer useful for isochronous applications.

raw1394 will still handle the request types but will complete the
requests with errors that indicate API version conflicts.

Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 77bba7ae
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
What:		legacy isochronous ABI of raw1394 (1st generation iso ABI)
Date:		June 2007 (scheduled), removed in kernel v2.6.23
Contact:	linux1394-devel@lists.sourceforge.net
Description:
	The two request types RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN have
	been deprecated for quite some time.  They are very inefficient as they
	come with high interrupt load and several layers of callbacks for each
	packet.  Because of these deficiencies, the video1394 and dv1394 drivers
	and the 3rd-generation isochronous ABI in raw1394 (rawiso) were created.

Users:
	libraw1394 users via the long deprecated API raw1394_iso_write,
	raw1394_start_iso_write, raw1394_start_iso_rcv, raw1394_stop_iso_rcv

	libdc1394, which optionally uses these old libraw1394 calls
	alternatively to the more efficient video1394 ABI
+0 −10
Original line number Diff line number Diff line
@@ -49,16 +49,6 @@ Who: Adrian Bunk <bunk@stusta.de>

---------------------------

What:	raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When:	June 2007
Why:	Deprecated in favour of the more efficient and robust rawiso interface.
	Affected are applications which use the deprecated part of libraw1394
	(raw1394_iso_write, raw1394_start_iso_write, raw1394_start_iso_rcv,
	raw1394_stop_iso_rcv) or bypass	libraw1394.
Who:	Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>

---------------------------

What:	old NCR53C9x driver
When:	October 2007
Why:	Replaced by the much better esp_scsi driver.  Actual low-level
+0 −45
Original line number Diff line number Diff line
@@ -483,37 +483,6 @@ int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
	return retval;
}

/**
 * hpsb_listen_channel - enable receving a certain isochronous channel
 *
 * Reception is handled through the @hl's iso_receive op.
 */
int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
			unsigned int channel)
{
	if (channel > 63) {
		HPSB_ERR("%s called with invalid channel", __FUNCTION__);
		return -EINVAL;
	}
	if (host->iso_listen_count[channel]++ == 0)
		return host->driver->devctl(host, ISO_LISTEN_CHANNEL, channel);
	return 0;
}

/**
 * hpsb_unlisten_channel - disable receving a certain isochronous channel
 */
void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
			   unsigned int channel)
{
	if (channel > 63) {
		HPSB_ERR("%s called with invalid channel", __FUNCTION__);
		return;
	}
	if (--host->iso_listen_count[channel] == 0)
		host->driver->devctl(host, ISO_UNLISTEN_CHANNEL, channel);
}

static void init_hpsb_highlevel(struct hpsb_host *host)
{
	INIT_LIST_HEAD(&dummy_zero_addr.host_list);
@@ -570,20 +539,6 @@ void highlevel_host_reset(struct hpsb_host *host)
	read_unlock_irqrestore(&hl_irqs_lock, flags);
}

void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length)
{
	unsigned long flags;
	struct hpsb_highlevel *hl;
	int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f;

	read_lock_irqsave(&hl_irqs_lock, flags);
	list_for_each_entry(hl, &hl_irqs, irq_list) {
		if (hl->iso_receive)
			hl->iso_receive(host, channel, data, length);
	}
	read_unlock_irqrestore(&hl_irqs_lock, flags);
}

void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
			   void *data, size_t length)
{
+1 −15
Original line number Diff line number Diff line
@@ -26,9 +26,7 @@ struct hpsb_address_serve {
struct hpsb_highlevel {
	const char *name;

	/* Any of the following pointers can legally be NULL, except for
	 * iso_receive which can only be NULL when you don't request
	 * channels. */
	/* Any of the following pointers can legally be NULL. */

	/* New host initialized.  Will also be called during
	 * hpsb_register_highlevel for all hosts already installed. */
@@ -43,13 +41,6 @@ struct hpsb_highlevel {
	 * You can not expect to be able to do stock hpsb_reads. */
	void (*host_reset)(struct hpsb_host *host);

	/* An isochronous packet was received.  Channel contains the channel
	 * number for your convenience, it is also contained in the included
	 * packet header (first quadlet, CRCs are missing).  You may get called
	 * for channel/host combinations you did not request. */
	void (*iso_receive)(struct hpsb_host *host, int channel,
			    quadlet_t *data, size_t length);

	/* A write request was received on either the FCP_COMMAND (direction =
	 * 0) or the FCP_RESPONSE (direction = 1) register.  The cts arg
	 * contains the cts field (first byte of data). */
@@ -109,7 +100,6 @@ int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store,
int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store,
		     u64 addr, octlet_t data, octlet_t arg, int ext_tcode,
		     u16 flags);
void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length);
void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
			   void *data, size_t length);

@@ -125,10 +115,6 @@ int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
			    struct hpsb_address_ops *ops, u64 start, u64 end);
int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
			      u64 start);
int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
			unsigned int channel);
void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
			   unsigned int channel);

void *hpsb_get_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host);
void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
+0 −8
Original line number Diff line number Diff line
@@ -28,8 +28,6 @@ struct hpsb_host {
	struct timer_list timeout;
	unsigned long timeout_interval;

	unsigned char iso_listen_count[64];

	int node_count;      /* number of identified nodes on this bus */
	int selfid_count;    /* total number of SelfIDs received */
	int nodes_active;    /* number of nodes with active link layer */
@@ -99,12 +97,6 @@ enum devctl_cmd {
	/* Cancel all outstanding async requests without resetting the bus.
	 * Return void. */
	CANCEL_REQUESTS,

	/* Start or stop receiving isochronous channel in arg.  Return void.
	 * This acts as an optimization hint, hosts are not required not to
	 * listen on unrequested channels. */
	ISO_LISTEN_CHANNEL,
	ISO_UNLISTEN_CHANNEL
};

enum isoctl_cmd {
Loading