rpms/kernel/F-8 kernel.spec, 1.426, 1.427 linux-2.6-firewire-git-pending.patch, 1.10, 1.11 linux-2.6-firewire-git-update.patch, 1.5, 1.6

Jarod Wilson (jwilson) fedora-extras-commits at redhat.com
Tue Apr 15 19:18:10 UTC 2008


Author: jwilson

Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv32070

Modified Files:
	kernel.spec linux-2.6-firewire-git-pending.patch 
	linux-2.6-firewire-git-update.patch 
Log Message:
* Tue Apr 15 2008 Jarod Wilson <jwilson at redhat.com> 2.6.24.4-81
- Resync FireWire drivers with latest upstream git tree:
  * Fix dvgrab on buggy TI chipsets (#243081). May fix #435550 too.
  * Work-around for buggy 1st-gen JMicron JMB38x controllers



Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.426
retrieving revision 1.427
diff -u -r1.426 -r1.427
--- kernel.spec	11 Apr 2008 21:45:53 -0000	1.426
+++ kernel.spec	15 Apr 2008 19:17:32 -0000	1.427
@@ -1388,7 +1388,7 @@
 # FireWire updates and fixes
 # snap from http://me.in-berlin.de/~s5r6/linux1394/updates/
 ApplyPatch linux-2.6-firewire-git-update.patch
-ApplyPatch linux-2.6-firewire-git-pending.patch
+#ApplyPatch linux-2.6-firewire-git-pending.patch
 
 ApplyPatch linux-2.6-thinkpad-key-events.patch
 
@@ -2019,6 +2019,11 @@
 
 
 %changelog
+* Tue Apr 15 2008 Jarod Wilson <jwilson at redhat.com> 2.6.24.4-81
+- Resync FireWire drivers with latest upstream git tree:
+  * Fix dvgrab on buggy TI chipsets (#243081). May fix #435550 too.
+  * Work-around for buggy 1st-gen JMicron JMB38x controllers
+
 * Fri Apr 11 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.4-80
 - Prevent sys_io_getevents syscall from clobbering the esi register on x86.
   (F9#427707)

linux-2.6-firewire-git-pending.patch:

Index: linux-2.6-firewire-git-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-firewire-git-pending.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- linux-2.6-firewire-git-pending.patch	25 Mar 2008 20:39:39 -0000	1.10
+++ linux-2.6-firewire-git-pending.patch	15 Apr 2008 19:17:32 -0000	1.11
@@ -4,750 +4,3 @@
 #
 
 
-Increase reconnect management orb timeout.
-
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
-
----
-
- drivers/firewire/fw-sbp2.c |   15 +++++++++++++--
- 1 files changed, 13 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/firewire/fw-sbp2.c b/drivers/firewire/fw-sbp2.c
-index d6d62c6..da315cf 100644
---- a/drivers/firewire/fw-sbp2.c
-+++ b/drivers/firewire/fw-sbp2.c
-@@ -170,6 +170,7 @@ struct sbp2_target {
-  */
- #define SBP2_MIN_LOGIN_ORB_TIMEOUT	5000U	/* Timeout in ms */
- #define SBP2_MAX_LOGIN_ORB_TIMEOUT	40000U	/* Timeout in ms */
-+#define SBP2_MAX_RECONNECT_ORB_TIMEOUT	10000U	/* Timeout in ms */
- #define SBP2_ORB_TIMEOUT		2000U	/* Timeout in ms */
- #define SBP2_ORB_NULL			0x80000000
- #define SBP2_MAX_SG_ELEMENT_LENGTH	0xf000
-@@ -538,14 +539,24 @@ sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
- 	orb->request.status_fifo.low  =
- 		cpu_to_be32(lu->address_handler.offset);
- 
--	if (function == SBP2_LOGIN_REQUEST) {
-+	switch (function) {
-+
-+	case SBP2_LOGIN_REQUEST:
- 		/* Ask for 2^2 == 4 seconds reconnect grace period */
- 		orb->request.misc |= cpu_to_be32(
- 			MANAGEMENT_ORB_RECONNECT(2) |
- 			MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login));
- 		timeout = lu->tgt->mgt_orb_timeout;
--	} else {
-+		break;
-+
-+	case SBP2_RECONNECT_REQUEST:
-+		timeout = min(SBP2_MAX_RECONNECT_ORB_TIMEOUT,
-+			      lu->tgt->mgt_orb_timeout);
-+		break;
-+
-+	default:
- 		timeout = SBP2_ORB_TIMEOUT;
-+		break;
- 	}
- 
- 	init_completion(&orb->done);
-
-
-
-Adds a goofy routine to dump the configuration ROM as far as it could be
-read, if fw-core failed to get it all.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
-
-We may want to reduce it to printing
-  - any encountered Extended ROM keys,
-  - the number of quadlets that were successfully read
-    (in the last attempt, or in the most successfull attempt?),
-  - the return code of the last attempt
-before submitting to mainline.
-
- drivers/firewire/fw-device.c |  126 ++++++++++++++++++++++-------------
- drivers/firewire/fw-device.h |    1 
- 2 files changed, 82 insertions(+), 45 deletions(-)
-
-Index: linux/drivers/firewire/fw-device.c
-===================================================================
---- linux.orig/drivers/firewire/fw-device.c
-+++ linux/drivers/firewire/fw-device.c
-@@ -18,6 +18,7 @@
-  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-  */
- 
-+#include <linux/bitops.h>
- #include <linux/module.h>
- #include <linux/wait.h>
- #include <linux/errno.h>
-@@ -422,8 +423,12 @@ read_rom(struct fw_device *device, int g
- 	return callback_data.rcode;
- }
- 
--#define READ_BIB_ROM_SIZE	256
--#define READ_BIB_STACK_SIZE	16
-+#define MAX_CONFIG_ROM_SIZE ((CSR_CONFIG_ROM_END - CSR_CONFIG_ROM) / 4)
-+
-+struct config_rom_image {
-+	u32 rom[MAX_CONFIG_ROM_SIZE];
-+	DECLARE_BITMAP(read, MAX_CONFIG_ROM_SIZE);
-+};
- 
- /*
-  * Read the bus info block, perform a speed probe, and read all of the rest of
-@@ -432,35 +437,36 @@ read_rom(struct fw_device *device, int g
-  * It's better to start all over in this case because the node from which we
-  * are reading the ROM may have changed the ROM during the reset.
-  */
--static int read_bus_info_block(struct fw_device *device, int generation)
-+static int read_bus_info_block(struct fw_device *device, int generation,
-+			       struct config_rom_image *rom_img)
- {
--	u32 *rom, *stack, *old_rom, *new_rom;
-+	u32 *rom, *old_rom, *new_rom;
-+	u32 stack[16];
- 	u32 sp, key;
--	int i, end, length, ret = -1;
-+	int i, end, length, ret;
- 
--	rom = kmalloc(sizeof(*rom) * READ_BIB_ROM_SIZE +
--		      sizeof(*stack) * READ_BIB_STACK_SIZE, GFP_KERNEL);
--	if (rom == NULL)
-+	if (rom_img == NULL)
- 		return -ENOMEM;
--
--	stack = &rom[READ_BIB_ROM_SIZE];
-+	rom = rom_img->rom;
- 
- 	device->max_speed = SCODE_100;
- 
- 	/* First read the bus info block. */
- 	for (i = 0; i < 5; i++) {
--		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
--			goto out;
-+		ret = read_rom(device, generation, i, &rom[i]);
-+		if (ret != RCODE_COMPLETE)
-+			return ret;
-+		__set_bit(i, rom_img->read);
- 		/*
- 		 * As per IEEE1212 7.2, during power-up, devices can
- 		 * reply with a 0 for the first quadlet of the config
--		 * rom to indicate that they are booting (for example,
-+		 * ROM to indicate that they are booting (for example,
- 		 * if the firmware is on the disk of a external
- 		 * harddisk).  In that case we just fail, and the
- 		 * retry mechanism will try again later.
- 		 */
- 		if (i == 0 && rom[i] == 0)
--			goto out;
-+			return -EAGAIN;
- 	}
- 
- 	device->max_speed = device->node->max_speed;
-@@ -484,15 +490,17 @@ static int read_bus_info_block(struct fw
- 			device->max_speed = device->card->link_speed;
- 
- 		while (device->max_speed > SCODE_100) {
--			if (read_rom(device, generation, 0, &dummy) ==
--			    RCODE_COMPLETE)
-+			ret = read_rom(device, generation, 0, &dummy);
-+			if (ret == RCODE_COMPLETE)
- 				break;
-+			if (ret == RCODE_GENERATION)
-+				return ret;
- 			device->max_speed--;
- 		}
- 	}
- 
- 	/*
--	 * Now parse the config rom.  The config rom is a recursive
-+	 * Now parse the config ROM.  The config ROM is a recursive
- 	 * directory structure so we parse it using a stack of
- 	 * references to the blocks that make up the structure.  We
- 	 * push a reference to the root directory on the stack to
-@@ -504,44 +512,49 @@ static int read_bus_info_block(struct fw
- 	while (sp > 0) {
- 		/*
- 		 * Pop the next block reference of the stack.  The
--		 * lower 24 bits is the offset into the config rom,
-+		 * lower 24 bits is the offset into the config ROM,
- 		 * the upper 8 bits are the type of the reference the
- 		 * block.
- 		 */
- 		key = stack[--sp];
- 		i = key & 0xffffff;
--		if (i >= READ_BIB_ROM_SIZE)
-+		if (i >= MAX_CONFIG_ROM_SIZE) {
- 			/*
- 			 * The reference points outside the standard
--			 * config rom area, something's fishy.
-+			 * config ROM area.
- 			 */
--			goto out;
--
-+			if (key >> 24 == (CSR_EXTENDED_ROM | CSR_LEAF))
-+				fw_error("Extended ROM not supported\n");
-+			return -EINVAL;
-+		}
- 		/* Read header quadlet for the block to get the length. */
--		if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE)
--			goto out;
-+		ret = read_rom(device, generation, i, &rom[i]);
-+		if (ret != RCODE_COMPLETE)
-+			return ret;
-+		__set_bit(i, rom_img->read);
- 		end = i + (rom[i] >> 16) + 1;
- 		i++;
--		if (end > READ_BIB_ROM_SIZE)
-+		if (end > MAX_CONFIG_ROM_SIZE) {
- 			/*
- 			 * This block extends outside standard config
- 			 * area (and the array we're reading it
- 			 * into).  That's broken, so ignore this
- 			 * device.
- 			 */
--			goto out;
--
-+			return -EINVAL;
-+		}
- 		/*
- 		 * Now read in the block.  If this is a directory
- 		 * block, check the entries as we read them to see if
- 		 * it references another block, and push it in that case.
- 		 */
- 		while (i < end) {
--			if (read_rom(device, generation, i, &rom[i]) !=
--			    RCODE_COMPLETE)
--				goto out;
-+			ret = read_rom(device, generation, i, &rom[i]);
-+			if (ret != RCODE_COMPLETE)
-+				return ret;
-+			__set_bit(i, rom_img->read);
- 			if ((key >> 30) == 3 && (rom[i] >> 30) > 1 &&
--			    sp < READ_BIB_STACK_SIZE)
-+			    sp < ARRAY_SIZE(stack))
- 				stack[sp++] = i + rom[i];
- 			i++;
- 		}
-@@ -552,7 +565,7 @@ static int read_bus_info_block(struct fw
- 	old_rom = device->config_rom;
- 	new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
- 	if (new_rom == NULL)
--		goto out;
-+		return -ENOMEM;
- 
- 	down_write(&fw_device_rwsem);
- 	device->config_rom = new_rom;
-@@ -560,14 +573,25 @@ static int read_bus_info_block(struct fw
- 	up_write(&fw_device_rwsem);
- 
- 	kfree(old_rom);
--	ret = 0;
- 	device->cmc = rom[2] & 1 << 30;
-- out:
--	kfree(rom);
- 
--	return ret;
-+	return 0;
-+}
-+
-+static void dump_config_rom(struct config_rom_image *rom_img)
-+{
-+	int i;
-+
-+	if (rom_img == NULL || !test_bit(0, rom_img->read))
-+		return;
-+
-+	fw_notify("config ROM read so far:\n");
-+	for_each_bit(i, rom_img->read, MAX_CONFIG_ROM_SIZE)
-+		printk(KERN_NOTICE "%x: %08x\n",
-+		       CSR_CONFIG_ROM + i * 4, rom_img->rom[i]);
- }
- 
-+
- static void fw_unit_release(struct device *dev)
- {
- 	struct fw_unit *unit = fw_unit(dev);
-@@ -697,27 +721,32 @@ static void fw_device_init(struct work_s
- {
- 	struct fw_device *device =
- 		container_of(work, struct fw_device, work.work);
-+	struct config_rom_image *rom_img;
- 	int minor, err;
- 
-+	rom_img = kzalloc(sizeof(*rom_img), GFP_KERNEL);
-+
- 	/*
- 	 * All failure paths here set node->data to NULL, so that we
- 	 * don't try to do device_for_each_child() on a kfree()'d
- 	 * device.
- 	 */
- 
--	if (read_bus_info_block(device, device->generation) < 0) {
-+	err = read_bus_info_block(device, device->generation, rom_img);
-+	if (err) {
- 		if (device->config_rom_retries < MAX_RETRIES &&
- 		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
- 			device->config_rom_retries++;
- 			schedule_delayed_work(&device->work, RETRY_DELAY);
- 		} else {
--			fw_notify("giving up on config rom for node id %x\n",
--				  device->node_id);
-+			fw_notify("giving up on config ROM for node id %x "
-+				  "(returned %d)\n", device->node_id, err);
-+			dump_config_rom(rom_img);
- 			if (device->node == device->card->root_node)
- 				schedule_delayed_work(&device->card->work, 0);
- 			fw_device_release(&device->device);
- 		}
--		return;
-+		goto out;
- 	}
- 
- 	err = -ENOMEM;
-@@ -786,7 +815,7 @@ static void fw_device_init(struct work_s
- 	if (device->node == device->card->root_node)
- 		schedule_delayed_work(&device->card->work, 0);
- 
--	return;
-+	goto out;
- 
-  error_with_cdev:
- 	down_write(&fw_device_rwsem);
-@@ -796,6 +825,8 @@ static void fw_device_init(struct work_s
- 	fw_device_put(device);		/* fw_device_idr's reference */
- 
- 	put_device(&device->device);	/* our reference */
-+ out:
-+	kfree(rom_img);
- }
- 
- static int update_unit(struct device *dev, void *data)
-@@ -854,6 +885,7 @@ static void fw_device_refresh(struct wor
- 		container_of(work, struct fw_device, work.work);
- 	struct fw_card *card = device->card;
- 	int node_id = device->node_id;
-+	struct config_rom_image *rom_img = NULL;
- 
- 	switch (reread_bus_info_block(device, device->generation)) {
- 	case REREAD_BIB_ERROR:
-@@ -890,13 +922,15 @@ static void fw_device_refresh(struct wor
- 	 */
- 	device_for_each_child(&device->device, NULL, shutdown_unit);
- 
--	if (read_bus_info_block(device, device->generation) < 0) {
-+	rom_img = kzalloc(sizeof(*rom_img), GFP_KERNEL);
-+
-+	if (read_bus_info_block(device, device->generation, rom_img) != 0) {
- 		if (device->config_rom_retries < MAX_RETRIES &&
- 		    atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
- 			device->config_rom_retries++;
- 			schedule_delayed_work(&device->work, RETRY_DELAY);
- 
--			return;
-+			goto out;
- 		}
- 		goto give_up;
- 	}
-@@ -910,16 +944,18 @@ static void fw_device_refresh(struct wor
- 
- 	fw_notify("refreshed device %s\n", device->device.bus_id);
- 	device->config_rom_retries = 0;
--	goto out;
-+	goto out_bm;
- 
-  give_up:
- 	fw_notify("giving up on refresh of device %s\n", device->device.bus_id);
-  gone:
- 	atomic_set(&device->state, FW_DEVICE_SHUTDOWN);
- 	fw_device_shutdown(work);
-- out:
-+ out_bm:
- 	if (node_id == card->root_node->node_id)
- 		schedule_delayed_work(&card->work, 0);
-+ out:
-+	kfree(rom_img);
- }
- 
- void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
-Index: linux/drivers/firewire/fw-device.h
-===================================================================
---- linux.orig/drivers/firewire/fw-device.h
-+++ linux/drivers/firewire/fw-device.h
-@@ -142,6 +142,7 @@ static inline void fw_unit_put(struct fw
- #define CSR_DEPENDENT_INFO	0x14
- #define CSR_MODEL		0x17
- #define CSR_INSTANCE		0x18
-+#define CSR_EXTENDED_ROM	0x1b
- #define CSR_DIRECTORY_ID	0x20
- 
- struct fw_csr_iterator {
-
--- 
-Stefan Richter
--=====-==--- --== -=---
-http://arcgraph.de/sr/
-
-
-Date: Tue, 11 Mar 2008 22:32:03 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: [PATCH] firewire: fw-sbp2: fix for SYM13FW500 bridge (Datafab disk)
-To: linux1394-devel at lists.sourceforge.net
-Cc: linux-kernel at vger.kernel.org
-
-Fix I/O errors due to SYM13FW500's inability to handle larger request
-sizes.  Reported by Piergiorgio Sartor <piergiorgio.sartor at nexgo.de> in
-https://bugzilla.redhat.com/show_bug.cgi?id=436879
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
----
- drivers/firewire/fw-sbp2.c |    5 +++++
- 1 file changed, 5 insertions(+)
-
-Index: linux/drivers/firewire/fw-sbp2.c
-===================================================================
---- linux.orig/drivers/firewire/fw-sbp2.c
-+++ linux/drivers/firewire/fw-sbp2.c
-@@ -327,6 +327,11 @@ static const struct {
- 		.model			= ~0,
- 		.workarounds		= SBP2_WORKAROUND_128K_MAX_TRANS,
- 	},
-+	/* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ {
-+		.firmware_revision	= 0x002600,
-+		.model			= ~0,
-+		.workarounds		= SBP2_WORKAROUND_128K_MAX_TRANS,
-+	},
- 
- 	/*
- 	 * There are iPods (2nd gen, 3rd gen) with model_id == 0, but
-
--- 
-Stefan Richter
--=====-==--- --== -=-==
-http://arcgraph.de/sr/
-
-
-Date: Sun, 16 Mar 2008 00:56:41 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: [PATCH] firewire: fix panic in handle_at_packet
-To: linux1394-devel at lists.sourceforge.net
-cc: linux-kernel at vger.kernel.org,
- Johannes Berg <johannes at sipsolutions.net>,
- Jarod Wilson <jwilson at redhat.com>
-
-This fixes a use-after-free bug in the handling of split transactions.
-The AT DMA handler of the request was occasionally executed after the
-AR DMA handler of the response.  The AT DMA handler then accessed an
-already freed packet.
-
-Reported by Johannes Berg <johannes at sipsolutions.net>.
-http://bugzilla.kernel.org/show_bug.cgi?id=9617
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
----
- drivers/firewire/fw-transaction.c |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux/drivers/firewire/fw-transaction.c
-===================================================================
---- linux.orig/drivers/firewire/fw-transaction.c
-+++ linux/drivers/firewire/fw-transaction.c
-@@ -737,6 +737,12 @@ fw_core_handle_response(struct fw_card *
- 		break;
- 	}
- 
-+	/*
-+	 * The response handler may be executed while the request handler
-+	 * is still pending.  Cancel the request handler.
-+	 */
-+	card->driver->cancel_packet(card, &t->packet);
-+
- 	t->callback(card, rcode, data, data_length, t->callback_data);
- }
- EXPORT_SYMBOL(fw_core_handle_response);
-
--- 
-Stefan Richter
--=====-==--- --== =----
-http://arcgraph.de/sr/
-
-
-Oops, some of the important bits got dropped when back-porting to 2.6.24...
-Add 'em back right here. We'll sort out changelog entries later...
-
-diff -Naurp linux.orig/drivers/firewire/fw-ohci.c linux/drivers/firewire/fw-ohci.c
---- linux.orig/drivers/firewire/fw-ohci.c	2008-03-17 16:52:40.000000000 -0400
-+++ linux/drivers/firewire/fw-ohci.c	2008-03-17 16:54:58.000000000 -0400
-@@ -188,7 +188,7 @@ struct fw_ohci {
- 	struct tasklet_struct bus_reset_tasklet;
- 	int node_id;
- 	int generation;
--	int request_generation;
-+	int request_generation; /* for timestamping incoming requests */
- 	u32 bus_seconds;
- 	bool old_uninorth;
- 
-@@ -292,19 +292,13 @@ static int ar_context_add_page(struct ar
- {
- 	struct device *dev = ctx->ohci->card.device;
- 	struct ar_buffer *ab;
--	dma_addr_t ab_bus;
-+	dma_addr_t uninitialized_var(ab_bus);
- 	size_t offset;
- 
--	ab = (struct ar_buffer *) __get_free_page(GFP_ATOMIC);
-+	ab = dma_alloc_coherent(dev, PAGE_SIZE, &ab_bus, GFP_ATOMIC);
- 	if (ab == NULL)
- 		return -ENOMEM;
- 
--	ab_bus = dma_map_single(dev, ab, PAGE_SIZE, DMA_BIDIRECTIONAL);
--	if (dma_mapping_error(ab_bus)) {
--		free_page((unsigned long) ab);
--		return -ENOMEM;
--	}
--
- 	memset(&ab->descriptor, 0, sizeof(ab->descriptor));
- 	ab->descriptor.control        = cpu_to_le16(DESCRIPTOR_INPUT_MORE |
- 						    DESCRIPTOR_STATUS |
-@@ -315,8 +309,6 @@ static int ar_context_add_page(struct ar
- 	ab->descriptor.res_count      = cpu_to_le16(PAGE_SIZE - offset);
- 	ab->descriptor.branch_address = 0;
- 
--	dma_sync_single_for_device(dev, ab_bus, PAGE_SIZE, DMA_BIDIRECTIONAL);
--
- 	ctx->last_buffer->descriptor.branch_address = cpu_to_le32(ab_bus | 1);
- 	ctx->last_buffer->next = ab;
- 	ctx->last_buffer = ab;
-@@ -505,6 +497,7 @@ static void ar_context_tasklet(unsigned 
- 
- 	if (d->res_count == 0) {
- 		size_t size, rest, offset;
-+		dma_addr_t buffer_bus;
- 
- 		/*
- 		 * This descriptor is finished and we may have a
-@@ -513,9 +506,7 @@ static void ar_context_tasklet(unsigned 
- 		 */
- 
- 		offset = offsetof(struct ar_buffer, data);
--		dma_unmap_single(ohci->card.device,
--			le32_to_cpu(ab->descriptor.data_address) - offset,
--			PAGE_SIZE, DMA_BIDIRECTIONAL);
-+		buffer_bus = le32_to_cpu(ab->descriptor.data_address) - offset;
- 
- 		buffer = ab;
- 		ab = ab->next;
-@@ -531,7 +522,8 @@ static void ar_context_tasklet(unsigned 
- 		while (buffer < end)
- 			buffer = handle_ar_packet(ctx, buffer);
- 
--		free_page((unsigned long)buffer);
-+		dma_free_coherent(ohci->card.device, PAGE_SIZE,
-+				  buffer, buffer_bus);
- 		ar_context_add_page(ctx);
- 	} else {
- 		buffer = ctx->pointer;
-@@ -2376,8 +2368,8 @@ static void pci_remove(struct pci_dev *d
- 	pci_iounmap(dev, ohci->registers);
- 	pci_release_region(dev, 0);
- 	pci_disable_device(dev);
--	ohci_pmac_off(dev);
- 	kfree(&ohci->card);
-+	ohci_pmac_off(dev);
- 
- 	fw_notify("Removed fw-ohci device.\n");
- }
-diff -Naurp linux.orig/drivers/firewire/fw-sbp2.c linux/drivers/firewire/fw-sbp2.c
---- linux.orig/drivers/firewire/fw-sbp2.c	2008-03-17 16:52:40.000000000 -0400
-+++ linux/drivers/firewire/fw-sbp2.c	2008-03-17 16:53:55.000000000 -0400
-@@ -847,7 +847,7 @@ static void sbp2_set_busy_timeout(struct
- 	struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
- 	DECLARE_COMPLETION_ONSTACK(done);
- 	struct fw_transaction t;
--	static u32 busy_timeout;
-+	static __be32 busy_timeout;
- 
- 	busy_timeout = cpu_to_be32(SBP2_CYCLE_LIMIT | SBP2_RETRY_LIMIT);
- 
-diff -Naurp linux.orig/drivers/firewire/fw-transaction.h linux/drivers/firewire/fw-transaction.h
---- linux.orig/drivers/firewire/fw-transaction.h	2008-03-17 16:52:40.000000000 -0400
-+++ linux/drivers/firewire/fw-transaction.h	2008-03-17 16:53:55.000000000 -0400
-@@ -224,8 +224,6 @@ struct fw_card {
- 
- 	int node_id;
- 	int generation;
--	/* This is the generation used for timestamping incoming requests. */
--	int request_generation;
- 	int current_tlabel, tlabel_mask;
- 	struct list_head transaction_list;
- 	struct timer_list flush_timer;
-
-
-
-Date: Thu, 20 Mar 2008 23:48:23 +0100 (CET)
-From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: [PATCH] firewire: wait until PHY configuration packet was transmitted
-To: linux1394-devel at lists.sourceforge.net
-cc: linux-kernel at vger.kernel.org,
- Jarod Wilson <jwilson at redhat.com>
-
-We now exit fw_send_phy_config /after/ the PHY config packet has been
-transmitted, instead of before.  A subsequent fw_core_initiate_bus_reset
-will therefore not overlap with the transmission.  This is meant to make
-the send PHY config packet + reset bus routine more deterministic.
-
-Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
----
- drivers/firewire/fw-transaction.c |   49 ++++++++++++++----------------
- 1 file changed, 24 insertions(+), 25 deletions(-)
-
-Index: linux/drivers/firewire/fw-transaction.c
-===================================================================
---- linux.orig/drivers/firewire/fw-transaction.c
-+++ linux/drivers/firewire/fw-transaction.c
-@@ -18,6 +18,7 @@
-  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-  */
- 
-+#include <linux/completion.h>
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/init.h>
-@@ -294,42 +295,40 @@ fw_send_request(struct fw_card *card, st
- }
- EXPORT_SYMBOL(fw_send_request);
- 
-+struct fw_phy_packet {
-+	struct fw_packet packet;
-+	struct completion done;
-+};
-+
- static void
- transmit_phy_packet_callback(struct fw_packet *packet,
- 			     struct fw_card *card, int status)
- {
--	kfree(packet);
--}
--
--static void send_phy_packet(struct fw_card *card, u32 data, int generation)
--{
--	struct fw_packet *packet;
-+	struct fw_phy_packet *p =
-+			container_of(packet, struct fw_phy_packet, packet);
- 
--	packet = kzalloc(sizeof(*packet), GFP_ATOMIC);
--	if (packet == NULL)
--		return;
--
--	packet->header[0] = data;
--	packet->header[1] = ~data;
--	packet->header_length = 8;
--	packet->payload_length = 0;
--	packet->speed = SCODE_100;
--	packet->generation = generation;
--	packet->callback = transmit_phy_packet_callback;
--
--	card->driver->send_request(card, packet);
-+	complete(&p->done);
- }
- 
- void fw_send_phy_config(struct fw_card *card,
- 			int node_id, int generation, int gap_count)
- {
--	u32 q;
--
--	q = PHY_IDENTIFIER(PHY_PACKET_CONFIG) |
--		PHY_CONFIG_ROOT_ID(node_id) |
--		PHY_CONFIG_GAP_COUNT(gap_count);
-+	struct fw_phy_packet p;
-+	u32 data = PHY_IDENTIFIER(PHY_PACKET_CONFIG) |
-+		   PHY_CONFIG_ROOT_ID(node_id) |
-+		   PHY_CONFIG_GAP_COUNT(gap_count);
-+
-+	p.packet.header[0] = data;
-+	p.packet.header[1] = ~data;
-+	p.packet.header_length = 8;
-+	p.packet.payload_length = 0;
-+	p.packet.speed = SCODE_100;
-+	p.packet.generation = generation;
-+	p.packet.callback = transmit_phy_packet_callback;
-+	init_completion(&p.done);
- 
--	send_phy_packet(card, q, generation);
-+	card->driver->send_request(card, &p.packet);
-+	wait_for_completion(&p.done);
- }
- 
- void fw_flush_transactions(struct fw_card *card)
-
--- 
-Stefan Richter
--=====-==--- --== =-=--
-http://arcgraph.de/sr/
-
-
-There's a minor memory leak in firewire-ohci's ar_context_tasklet(), in that
-we're not freeing up some of the memory we use for each ar_buffer, due to a
-moving pointer. The problem has been there for a while, but didn't start
-to be noticed until we were doing a coherent allocation for the ar_buffer --
-meaning we have a smaller pool of memory to work with now, so the problem
-crops up sooner. The manifestation of this comes after doing a bunch of I/O to
-a firewire disk, which eventually stalls, and this starts spewing to the
-console:
-
-PCI-DMA: Out of IOMMU space for 53248 bytes at device 0000:04:09.0
-
-The device there is one of my FireWire controllers trying to do I/O. The host
-is a fairly new rev. opteron.
-
-Just need to make sure we're freeing the correct memory range is pass through
-ar_context_tasklet to fix it. Probably something we ought to sneak into 2.6.25
-if its still doable...
-
-Signed-off-by: Jarod Wilson <jwilson at redhat.com>
----
-
- drivers/firewire/fw-ohci.c |    9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
-index 8ff9059..e1d50f7 100644
---- a/drivers/firewire/fw-ohci.c
-+++ b/drivers/firewire/fw-ohci.c
-@@ -579,7 +579,8 @@ static void ar_context_tasklet(unsigned long data)
- 
- 	if (d->res_count == 0) {
- 		size_t size, rest, offset;
--		dma_addr_t buffer_bus;
-+		dma_addr_t start_bus;
-+		void *start;
- 
- 		/*
- 		 * This descriptor is finished and we may have a
-@@ -588,9 +589,9 @@ static void ar_context_tasklet(unsigned long data)
- 		 */
- 
- 		offset = offsetof(struct ar_buffer, data);
--		buffer_bus = le32_to_cpu(ab->descriptor.data_address) - offset;
-+		start = buffer = ab;
-+		start_bus = le32_to_cpu(ab->descriptor.data_address) - offset;
- 
--		buffer = ab;
- 		ab = ab->next;
- 		d = &ab->descriptor;
- 		size = buffer + PAGE_SIZE - ctx->pointer;
-@@ -605,7 +606,7 @@ static void ar_context_tasklet(unsigned long data)
- 			buffer = handle_ar_packet(ctx, buffer);
- 
- 		dma_free_coherent(ohci->card.device, PAGE_SIZE,
--				  buffer, buffer_bus);
-+				  start, start_bus);
- 		ar_context_add_page(ctx);
- 	} else {
- 		buffer = ctx->pointer;

linux-2.6-firewire-git-update.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.5 -r 1.6 linux-2.6-firewire-git-update.patch
Index: linux-2.6-firewire-git-update.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-firewire-git-update.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-firewire-git-update.patch	14 Mar 2008 19:36:06 -0000	1.5
+++ linux-2.6-firewire-git-update.patch	15 Apr 2008 19:17:32 -0000	1.6
@@ -1,48 +1,574 @@
-IEEE 1394 updates for Linux 2.6.24 (v669 2008-03-11)
+IEEE 1394 updates for Linux 2.6.24 (v702 2008-04-12)
 
  MAINTAINERS                              |    4 
- drivers/firewire/Kconfig                 |   50 -
- drivers/firewire/fw-card.c               |   99 +--
- drivers/firewire/fw-cdev.c               |   33 -
- drivers/firewire/fw-device.c             |  360 +++++++++---
- drivers/firewire/fw-device.h             |   60 +-
- drivers/firewire/fw-ohci.c               |  633 ++++++++++++++++------
- drivers/firewire/fw-sbp2.c               |  647 ++++++++++++++++-------
- drivers/firewire/fw-topology.c           |   13 
+ drivers/firewire/Kconfig                 |   55 -
+ drivers/firewire/fw-card.c               |  111 +--
+ drivers/firewire/fw-cdev.c               |   33 
+ drivers/firewire/fw-device.c             |  360 +++++++---
+ drivers/firewire/fw-device.h             |   60 +
+ drivers/firewire/fw-iso.c                |    5 
+ drivers/firewire/fw-ohci.c               |  801 +++++++++++++++++------
+ drivers/firewire/fw-ohci.h               |    2 
+ drivers/firewire/fw-sbp2.c               |  652 +++++++++++++-----
+ drivers/firewire/fw-topology.c           |   32 
  drivers/firewire/fw-topology.h           |   11 
- drivers/firewire/fw-transaction.c        |   17 
- drivers/firewire/fw-transaction.h        |   12 
+ drivers/firewire/fw-transaction.c        |   85 +-
+ drivers/firewire/fw-transaction.h        |   25 
  drivers/ieee1394/dma.c                   |   37 -
- drivers/ieee1394/dv1394.c                |    3 
+ drivers/ieee1394/dv1394.c                |    4 
  drivers/ieee1394/highlevel.c             |    6 
  drivers/ieee1394/ieee1394_core.c         |    2 
- drivers/ieee1394/ieee1394_transactions.c |   68 --
+ drivers/ieee1394/ieee1394_transactions.c |   68 -
  drivers/ieee1394/nodemgr.c               |    6 
- drivers/ieee1394/ohci1394.c              |  123 ++--
- drivers/ieee1394/pcilynx.c               |   12 
- drivers/ieee1394/raw1394.c               |    5 
- drivers/ieee1394/sbp2.c                  |   71 +-
+ drivers/ieee1394/ohci1394.c              |  241 +++---
+ drivers/ieee1394/pcilynx.c               |   15 
+ drivers/ieee1394/raw1394.c               |    6 
+ drivers/ieee1394/sbp2.c                  |   76 +-
  drivers/ieee1394/sbp2.h                  |    3 
- drivers/ieee1394/video1394.c             |    3 
- lib/Kconfig.debug                        |   11 
- 25 files changed, 1511 insertions(+), 778 deletions(-)
+ drivers/ieee1394/video1394.c             |    4 
+ lib/Kconfig.debug                        |   12 
+ 27 files changed, 1799 insertions(+), 917 deletions(-)
 
 ========================================================================
-Date: Mon, 10 Mar 2008 23:28:07 +0100 (CET)
+Date: Sat, 12 Apr 2008 22:31:25 +0200 (CEST)
 From: Stefan Richter <stefanr at s5r6.in-berlin.de>
-Subject: firewire: debug AT, AR, and selfID-complete events
+Subject: firewire: fw-ohci: work around generation bug in TI controllers (fix AV/C and more)
+
+Unlike the ohci1394 driver, fw-ohci uses the selfIDGeneration field of
+bus reset packets to determine the generation of incoming requests as
+per OHCI 1.1 clause 8.4.2.3.  This is more precise --- provided that the
+controller inserts the correct generation.  Texas Instruments chips
+often don't.
+
+This prevented the transmission of response packets, which for example
+broke AV/C transactions as used when communicating with miniDV cameras
+and any other AV/C devices.
+
+There is apparently no way to detect and adjust incorrect generations.
+Therefore we ignore the generation of bus reset packets from TI chips
+and use the generation of the self ID buffer instead.  Alas this is
+received at a slightly wrong time.  In rare cases, this could cause us
+to not respond to legitimate requests or to respond to expired requests.
+(The latter is less likely because the bus reset packet AR event is
+typically handled before the self ID complete event.)
+
+Bug reported by Mladen Kuntner, who was extraordinarily patient while
+dealing with the driver maintainers.
+https://bugzilla.redhat.com/show_bug.cgi?id=243081
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+---
+ drivers/firewire/fw-ohci.c |   21 ++++++++++++++++-----
+ 1 file changed, 16 insertions(+), 5 deletions(-)
+
+========================================================================
+Date: Fri, 11 Apr 2008 00:51:15 +0200 (CEST)
+From: Stefan Richter <stefanr at s5r6.in-berlin.de>
+Subject: firewire: fw-ohci: extend logging of bus generations and node ID
+
+Extend the logging of "AR evt_bus_reset, link internal" to "AR
+evt_bus_reset, generation ${selfIDGeneration}".  That way we can check
+whether this generation matches the one seen in self ID complete event
+logging.  See OHCI 1.1 clause 8.4.2.3.
+
+Also extend logging of "firewire_ohci: * selfIDs, generation *" by
+"local node ID ffc*" in self ID logging to make the local node in AT/AR
+event logs more obvious.
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+---
+ drivers/firewire/fw-ohci.c |   17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+========================================================================
+Date: Fri, 11 Apr 2008 00:08:08 +0200
+From: Stefan Richter <stefanr at s5r6.in-berlin.de>
+Subject: firewire: fw-ohci: add option for remote debugging - amendment
+
+(reduced backport version for 2.6.24 and older)
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+---
+ lib/Kconfig.debug |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+========================================================================
+Date: Mon, 7 Apr 2008 22:33:35 +0200 (CEST)
+From: Stefan Richter <stefanr at s5r6.in-berlin.de>
+Subject: firewire: fw-ohci: conditionally log busReset interrupts
+
+Add a debug option to watch bus reset interrupt events.  Half of this
+patch is taken from Jarod Wilson's first version of the JMicron fix.
+
+BusReset interrupts are only generated if the respective module
+parameter flag was set before the controller is being initialized.
+Else we keep this event masked to reduce IRQ load in normal operation
+and to avoid potential problems with buggy chips.
+
+Note, this is unlike the other IRQ events whose logging can be enabled
+any time after chip initialization.  This and the influence on what
+interrupts the chip generates is why I added an extra flag for it.
+
+Also, reorder the debug parameter flags according to their perceived
+usefulness.
+
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+Signed-off-by: Jarod Wilson <jwilson at redhat.com>
+---
+ drivers/firewire/fw-ohci.c |   28 ++++++++++++++++++++--------
+ 1 file changed, 20 insertions(+), 8 deletions(-)
+
+========================================================================
+Date: Mon, 7 Apr 2008 22:32:33 +0200 (CEST)
+From: Jarod Wilson <jwilson at redhat.com>
+Subject: firewire: fw-ohci: don't append to AT context when it's not active
+
+I finally tracked down the issues with this JMicron PCI-e card in my
+possession to a failure to comply with section 7.2.3.2 of the OHCI 1.1
+specification (thanks to Kristian for the pointer to illustrate that it
+is indeed a flaw in this card, not the driver). The controller should
+simply flush the packets we've appended to its AT queue if a bus reset
+occurs before they've been transmitted and we'll try again, but
+something goes wrong and the controller winds up hung.
+
+However, we can avoid the problem by simply checking if the
+IntEvent.busReset register had been set before we try appending to the
+AT context. When busReset is set, the AT context is completely halted
+until busReset is cleared, so there's no point in appending AT packets
+until the register is cleared. So at_context_queue_packet() now checks
+for busReset being set, and bails with an RCODE_GENERATION packet ack,
+which results in us trying to append the packet again after recognizing
+the fact there has been a bus reset, and clearing busReset.
+
+Signed-off-by: Jarod Wilson <jwilson at redhat.com>
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de>
+---
+ drivers/firewire/fw-ohci.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+========================================================================
+Date: Thu, 3 Apr 2008 17:18:23 -0400
+From: Jarod Wilson <jwilson at redhat.com>
+Subject: firewire: fw-ohci: log regAccessFail events
+
+While trying to debug this piece of crap JMicron PCI-e controller in my
+possession, one thought was that perhaps I was encountering register access
+failures. I'm not, but logging them would be good, so we can see if they
+are a real problem we should be taking into account anywhere in the code.
+
+Signed-off-by: Jarod Wilson <jwilson at redhat.com>
+Signed-off-by: Stefan Richter <stefanr at s5r6.in-berlin.de> (added list contact)
+---
+ drivers/firewire/fw-ohci.c |   13 ++++++++++---
+ drivers/firewire/fw-ohci.h |    1 +
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+========================================================================
+Date: Fri, 28 Mar 2008 10:02:50 -0400
+From: Jarod Wilson <jwilson at redhat.com>
+Subject: firewire: fw-ohci: make sure HCControl register LPS bit is set
[...2571 lines suppressed...]
  	 */
  	card->bm_generation = generation;
  
@@ -5599,7 +6837,7 @@
  		/*
  		 * FIXME: I suppose we should set the cmstr bit in the
  		 * STATE_CLEAR register of this node, as described in
-@@ -332,7 +345,7 @@ fw_card_bm_work(struct work_struct *work
+@@ -332,7 +343,7 @@ fw_card_bm_work(struct work_struct *work
  		 * successfully read the config rom, but it's not
  		 * cycle master capable.
  		 */
@@ -5608,7 +6846,7 @@
  	}
  
   pick_me:
-@@ -341,8 +354,8 @@ fw_card_bm_work(struct work_struct *work
+@@ -341,20 +352,20 @@ fw_card_bm_work(struct work_struct *work
  	 * the typically much larger 1394b beta repeater delays though.
  	 */
  	if (!card->beta_repeaters_present &&
@@ -5619,7 +6857,22 @@
  	else
  		gap_count = 63;
  
-@@ -364,6 +377,11 @@ fw_card_bm_work(struct work_struct *work
+ 	/*
+-	 * Finally, figure out if we should do a reset or not.  If we've
+-	 * done less that 5 resets with the same physical topology and we
++	 * Finally, figure out if we should do a reset or not.  If we have
++	 * done less than 5 resets with the same physical topology and we
+ 	 * have either a new root or a new gap count setting, let's do it.
+ 	 */
+ 
+ 	if (card->bm_retries++ < 5 &&
+ 	    (card->gap_count != gap_count || new_root_id != root_id))
+-		do_reset = 1;
++		do_reset = true;
+ 
+ 	spin_unlock_irqrestore(&card->lock, flags);
+ 
+@@ -364,6 +375,11 @@ fw_card_bm_work(struct work_struct *work
  		fw_send_phy_config(card, new_root_id, generation, gap_count);
  		fw_core_initiate_bus_reset(card, 1);
  	}
@@ -5631,7 +6884,7 @@
  }
  
  static void
-@@ -380,7 +398,7 @@ fw_card_initialize(struct fw_card *card,
+@@ -380,7 +396,7 @@ fw_card_initialize(struct fw_card *card,
  {
  	static atomic_t index = ATOMIC_INIT(-1);
  
@@ -5640,7 +6893,7 @@
  	card->index = atomic_inc_return(&index);
  	card->driver = driver;
  	card->device = device;
-@@ -410,12 +428,6 @@ fw_card_add(struct fw_card *card,
+@@ -410,12 +426,6 @@ fw_card_add(struct fw_card *card,
  	card->link_speed = link_speed;
  	card->guid = guid;
  
@@ -5653,7 +6906,7 @@
  	mutex_lock(&card_mutex);
  	config_rom = generate_config_rom(card, &length);
  	list_add_tail(&card->link, &card_list);
-@@ -511,44 +523,19 @@ fw_core_remove_card(struct fw_card *card
+@@ -511,44 +521,19 @@ fw_core_remove_card(struct fw_card *card
  	card->driver = &dummy_driver;
  
  	fw_destroy_nodes(card);
@@ -5709,16 +6962,17 @@
 ===================================================================
 --- linux-2.6.24.orig/lib/Kconfig.debug
 +++ linux-2.6.24/lib/Kconfig.debug
-@@ -517,4 +517,15 @@ config FAULT_INJECTION_STACKTRACE_FILTER
+@@ -517,4 +517,16 @@ config FAULT_INJECTION_STACKTRACE_FILTER
  	help
  	  Provide stacktrace filter for fault-injection capabilities
  
 +config FIREWIRE_OHCI_REMOTE_DMA
-+	bool "Remote debugging via firewire-ohci"
++	bool "Remote debugging over FireWire with firewire-ohci"
 +	depends on FIREWIRE_OHCI
 +	help
-+	  This option lets you use the FireWire bus for remote debugging.
-+	  It enables unfiltered remote DMA in the firewire-ohci driver.
++	  This option lets you use the FireWire bus for remote debugging
++	  with help of the firewire-ohci driver. It enables unfiltered
++	  remote DMA in firewire-ohci.
 +	  See Documentation/debugging-via-ohci1394.txt in linux-2.6.25 or
 +	  later for more information.
 +
@@ -5847,6 +7101,16 @@
                  return -1;
          }
  
+@@ -738,8 +738,7 @@ static int lynx_devctl(struct hpsb_host 
+                 spin_lock_irqsave(&lynx->async.queue_lock, flags);
+ 
+                 reg_write(lynx, DMA_CHAN_CTRL(CHANNEL_ASYNC_SEND), 0);
+-		list_splice(&lynx->async.queue, &packet_list);
+-		INIT_LIST_HEAD(&lynx->async.queue);
++		list_splice_init(&lynx->async.queue, &packet_list);
+ 
+                 if (list_empty(&lynx->async.pcl_queue)) {
+                         spin_unlock_irqrestore(&lynx->async.queue_lock, flags);
 Index: linux-2.6.24/drivers/firewire/Kconfig
 ===================================================================
 --- linux-2.6.24.orig/drivers/firewire/Kconfig
@@ -5886,7 +7150,7 @@
  
  config FIREWIRE_OHCI
  	tristate "Support for OHCI FireWire host controllers"
-@@ -57,8 +35,24 @@ config FIREWIRE_OHCI
+@@ -57,8 +35,29 @@ config FIREWIRE_OHCI
  
            NOTE:
  
@@ -5910,10 +7174,15 @@
 +	  If you have an old modprobe which doesn't implement the blacklist
 +	  directive, use "install modulename /bin/true" for the modules to be
 +	  blacklisted.
++
++config FIREWIRE_OHCI_DEBUG
++	bool
++	depends on FIREWIRE_OHCI
++	default y
  
  config FIREWIRE_SBP2
  	tristate "Support for storage devices (SBP-2 protocol driver)"
-@@ -75,9 +69,3 @@ config FIREWIRE_SBP2
+@@ -75,9 +74,3 @@ config FIREWIRE_SBP2
  
  	  You should also enable support for disks, CD-ROMs, etc. in the SCSI
  	  configuration section.
@@ -5923,3 +7192,62 @@
 -	  If you also build sbp2 of the classic stack, blacklist either sbp2
 -	  or firewire-sbp2 to let hotplug load only the desired driver.
 -
+Index: linux-2.6.24/drivers/firewire/fw-ohci.h
+===================================================================
+--- linux-2.6.24.orig/drivers/firewire/fw-ohci.h
++++ linux-2.6.24/drivers/firewire/fw-ohci.h
+@@ -30,6 +30,7 @@
+ #define  OHCI1394_HCControl_softReset		0x00010000
+ #define OHCI1394_SelfIDBuffer                 0x064
+ #define OHCI1394_SelfIDCount                  0x068
++#define  OHCI1394_SelfIDCount_selfIDError	0x80000000
+ #define OHCI1394_IRMultiChanMaskHiSet         0x070
+ #define OHCI1394_IRMultiChanMaskHiClear       0x074
+ #define OHCI1394_IRMultiChanMaskLoSet         0x078
+@@ -124,6 +125,7 @@
+ #define OHCI1394_lockRespErr		0x00000200
+ #define OHCI1394_selfIDComplete		0x00010000
+ #define OHCI1394_busReset		0x00020000
++#define OHCI1394_regAccessFail		0x00040000
+ #define OHCI1394_phy			0x00080000
+ #define OHCI1394_cycleSynch		0x00100000
+ #define OHCI1394_cycle64Seconds		0x00200000
+Index: linux-2.6.24/drivers/firewire/fw-iso.c
+===================================================================
+--- linux-2.6.24.orig/drivers/firewire/fw-iso.c
++++ linux-2.6.24/drivers/firewire/fw-iso.c
+@@ -126,7 +126,6 @@ fw_iso_context_create(struct fw_card *ca
+ 
+ 	return ctx;
+ }
+-EXPORT_SYMBOL(fw_iso_context_create);
+ 
+ void fw_iso_context_destroy(struct fw_iso_context *ctx)
+ {
+@@ -134,14 +133,12 @@ void fw_iso_context_destroy(struct fw_is
+ 
+ 	card->driver->free_iso_context(ctx);
+ }
+-EXPORT_SYMBOL(fw_iso_context_destroy);
+ 
+ int
+ fw_iso_context_start(struct fw_iso_context *ctx, int cycle, int sync, int tags)
+ {
+ 	return ctx->card->driver->start_iso(ctx, cycle, sync, tags);
+ }
+-EXPORT_SYMBOL(fw_iso_context_start);
+ 
+ int
+ fw_iso_context_queue(struct fw_iso_context *ctx,
+@@ -153,11 +150,9 @@ fw_iso_context_queue(struct fw_iso_conte
+ 
+ 	return card->driver->queue_iso(ctx, packet, buffer, payload);
+ }
+-EXPORT_SYMBOL(fw_iso_context_queue);
+ 
+ int
+ fw_iso_context_stop(struct fw_iso_context *ctx)
+ {
+ 	return ctx->card->driver->stop_iso(ctx);
+ }
+-EXPORT_SYMBOL(fw_iso_context_stop);




More information about the scm-commits mailing list