Commit d5545fa0 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
  ieee1394: Kconfig menu touch-up
  firewire: Kconfig menu touch-up
  firewire: deadline for PHY config transmission
  firewire: fw-ohci: unify printk prefixes
  firewire: fill_bus_reset_event needs lock protection
  firewire: fw-ohci: write selfIDBufferPtr before LinkControl.rcvSelfID
  firewire: fw-ohci: disable PHY packet reception into AR context
  firewire: fw-ohci: use of uninitialized data in AR handler
  firewire: don't panic on invalid AR request buffer
parents 77a189c2 9499fe2b
comment "An alternative FireWire stack is available with EXPERIMENTAL=y" comment "A new alternative FireWire stack is available with EXPERIMENTAL=y"
depends on EXPERIMENTAL=n depends on EXPERIMENTAL=n
comment "Enable only one of the two stacks, unless you know what you are doing"
depends on EXPERIMENTAL
config FIREWIRE config FIREWIRE
tristate "IEEE 1394 (FireWire) support - alternative stack, EXPERIMENTAL" tristate "New FireWire stack, EXPERIMENTAL"
depends on EXPERIMENTAL depends on EXPERIMENTAL
select CRC_ITU_T select CRC_ITU_T
help help
This is the "Juju" FireWire stack, a new alternative implementation This is the "Juju" FireWire stack, a new alternative implementation
designed for robustness and simplicity. You can build either this designed for robustness and simplicity. You can build either this
stack, or the classic stack (the ieee1394 driver, ohci1394 etc.) stack, or the old stack (the ieee1394 driver, ohci1394 etc.) or both.
or both. Please read http://wiki.linux1394.org/JujuMigration before Please read http://wiki.linux1394.org/JujuMigration before you
you enable the new stack. enable the new stack.
To compile this driver as a module, say M here: the module will be To compile this driver as a module, say M here: the module will be
called firewire-core. It functionally replaces ieee1394, raw1394, called firewire-core. It functionally replaces ieee1394, raw1394,
and video1394. and video1394.
NOTE:
You should only build ONE of the stacks, unless you REALLY know what
you are doing.
config FIREWIRE_OHCI config FIREWIRE_OHCI
tristate "Support for OHCI FireWire host controllers" tristate "OHCI-1394 controllers"
depends on PCI && FIREWIRE depends on PCI && FIREWIRE
help help
Enable this driver if you have a FireWire controller based Enable this driver if you have a FireWire controller based
...@@ -33,12 +31,12 @@ config FIREWIRE_OHCI ...@@ -33,12 +31,12 @@ config FIREWIRE_OHCI
called firewire-ohci. It replaces ohci1394 of the classic IEEE 1394 called firewire-ohci. It replaces ohci1394 of the classic IEEE 1394
stack. stack.
NOTE: NOTE:
You should only build ohci1394 or firewire-ohci, but not both. You should only build either firewire-ohci or the old ohci1394 driver,
If you nevertheless want to install both, you should configure them but not both. If you nevertheless want to install both, you should
only as modules and blacklist the driver(s) which you don't want to configure them only as modules and blacklist the driver(s) which you
have auto-loaded. Add either don't want to have auto-loaded. Add either
blacklist firewire-ohci blacklist firewire-ohci
or or
...@@ -60,7 +58,7 @@ config FIREWIRE_OHCI_DEBUG ...@@ -60,7 +58,7 @@ config FIREWIRE_OHCI_DEBUG
default y default y
config FIREWIRE_SBP2 config FIREWIRE_SBP2
tristate "Support for storage devices (SBP-2 protocol driver)" tristate "Storage devices (SBP-2 protocol)"
depends on FIREWIRE && SCSI depends on FIREWIRE && SCSI
help help
This option enables you to use SBP-2 devices connected to a This option enables you to use SBP-2 devices connected to a
......
...@@ -205,6 +205,7 @@ fw_device_op_read(struct file *file, ...@@ -205,6 +205,7 @@ fw_device_op_read(struct file *file,
return dequeue_event(client, buffer, count); return dequeue_event(client, buffer, count);
} }
/* caller must hold card->lock so that node pointers can be dereferenced here */
static void static void
fill_bus_reset_event(struct fw_cdev_event_bus_reset *event, fill_bus_reset_event(struct fw_cdev_event_bus_reset *event,
struct client *client) struct client *client)
...@@ -214,7 +215,6 @@ fill_bus_reset_event(struct fw_cdev_event_bus_reset *event, ...@@ -214,7 +215,6 @@ fill_bus_reset_event(struct fw_cdev_event_bus_reset *event,
event->closure = client->bus_reset_closure; event->closure = client->bus_reset_closure;
event->type = FW_CDEV_EVENT_BUS_RESET; event->type = FW_CDEV_EVENT_BUS_RESET;
event->generation = client->device->generation; event->generation = client->device->generation;
smp_rmb(); /* node_id must not be older than generation */
event->node_id = client->device->node_id; event->node_id = client->device->node_id;
event->local_node_id = card->local_node->node_id; event->local_node_id = card->local_node->node_id;
event->bm_node_id = 0; /* FIXME: We don't track the BM. */ event->bm_node_id = 0; /* FIXME: We don't track the BM. */
...@@ -274,6 +274,7 @@ static int ioctl_get_info(struct client *client, void *buffer) ...@@ -274,6 +274,7 @@ static int ioctl_get_info(struct client *client, void *buffer)
{ {
struct fw_cdev_get_info *get_info = buffer; struct fw_cdev_get_info *get_info = buffer;
struct fw_cdev_event_bus_reset bus_reset; struct fw_cdev_event_bus_reset bus_reset;
struct fw_card *card = client->device->card;
unsigned long ret = 0; unsigned long ret = 0;
client->version = get_info->version; client->version = get_info->version;
...@@ -299,13 +300,17 @@ static int ioctl_get_info(struct client *client, void *buffer) ...@@ -299,13 +300,17 @@ static int ioctl_get_info(struct client *client, void *buffer)
client->bus_reset_closure = get_info->bus_reset_closure; client->bus_reset_closure = get_info->bus_reset_closure;
if (get_info->bus_reset != 0) { if (get_info->bus_reset != 0) {
void __user *uptr = u64_to_uptr(get_info->bus_reset); void __user *uptr = u64_to_uptr(get_info->bus_reset);
unsigned long flags;
spin_lock_irqsave(&card->lock, flags);
fill_bus_reset_event(&bus_reset, client); fill_bus_reset_event(&bus_reset, client);
spin_unlock_irqrestore(&card->lock, flags);
if (copy_to_user(uptr, &bus_reset, sizeof(bus_reset))) if (copy_to_user(uptr, &bus_reset, sizeof(bus_reset)))
return -EFAULT; return -EFAULT;
} }
get_info->card = client->device->card->index; get_info->card = card->index;
return 0; return 0;
} }
......
...@@ -265,27 +265,25 @@ static void log_irqs(u32 evt) ...@@ -265,27 +265,25 @@ static void log_irqs(u32 evt)
!(evt & OHCI1394_busReset)) !(evt & OHCI1394_busReset))
return; return;
printk(KERN_DEBUG KBUILD_MODNAME ": IRQ " fw_notify("IRQ %08x%s%s%s%s%s%s%s%s%s%s%s%s%s\n", evt,
"%08x%s%s%s%s%s%s%s%s%s%s%s%s%s\n", evt & OHCI1394_selfIDComplete ? " selfID" : "",
evt, evt & OHCI1394_RQPkt ? " AR_req" : "",
evt & OHCI1394_selfIDComplete ? " selfID" : "", evt & OHCI1394_RSPkt ? " AR_resp" : "",
evt & OHCI1394_RQPkt ? " AR_req" : "", evt & OHCI1394_reqTxComplete ? " AT_req" : "",
evt & OHCI1394_RSPkt ? " AR_resp" : "", evt & OHCI1394_respTxComplete ? " AT_resp" : "",
evt & OHCI1394_reqTxComplete ? " AT_req" : "", evt & OHCI1394_isochRx ? " IR" : "",
evt & OHCI1394_respTxComplete ? " AT_resp" : "", evt & OHCI1394_isochTx ? " IT" : "",
evt & OHCI1394_isochRx ? " IR" : "", evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "",
evt & OHCI1394_isochTx ? " IT" : "", evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "",
evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "", evt & OHCI1394_cycle64Seconds ? " cycle64Seconds" : "",
evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "", evt & OHCI1394_regAccessFail ? " regAccessFail" : "",
evt & OHCI1394_cycle64Seconds ? " cycle64Seconds" : "", evt & OHCI1394_busReset ? " busReset" : "",
evt & OHCI1394_regAccessFail ? " regAccessFail" : "", evt & ~(OHCI1394_selfIDComplete | OHCI1394_RQPkt |
evt & OHCI1394_busReset ? " busReset" : "", OHCI1394_RSPkt | OHCI1394_reqTxComplete |
evt & ~(OHCI1394_selfIDComplete | OHCI1394_RQPkt | OHCI1394_respTxComplete | OHCI1394_isochRx |
OHCI1394_RSPkt | OHCI1394_reqTxComplete | OHCI1394_isochTx | OHCI1394_postedWriteErr |
OHCI1394_respTxComplete | OHCI1394_isochRx | OHCI1394_cycleTooLong | OHCI1394_cycle64Seconds |
OHCI1394_isochTx | OHCI1394_postedWriteErr | OHCI1394_regAccessFail | OHCI1394_busReset)
OHCI1394_cycleTooLong | OHCI1394_cycle64Seconds |
OHCI1394_regAccessFail | OHCI1394_busReset)
? " ?" : ""); ? " ?" : "");
} }
...@@ -308,23 +306,22 @@ static void log_selfids(int node_id, int generation, int self_id_count, u32 *s) ...@@ -308,23 +306,22 @@ static void log_selfids(int node_id, int generation, int self_id_count, u32 *s)
if (likely(!(param_debug & OHCI_PARAM_DEBUG_SELFIDS))) if (likely(!(param_debug & OHCI_PARAM_DEBUG_SELFIDS)))
return; return;
printk(KERN_DEBUG KBUILD_MODNAME ": %d selfIDs, generation %d, " fw_notify("%d selfIDs, generation %d, local node ID %04x\n",
"local node ID %04x\n", self_id_count, generation, node_id); self_id_count, generation, node_id);
for (; self_id_count--; ++s) for (; self_id_count--; ++s)
if ((*s & 1 << 23) == 0) if ((*s & 1 << 23) == 0)
printk(KERN_DEBUG "selfID 0: %08x, phy %d [%c%c%c] " fw_notify("selfID 0: %08x, phy %d [%c%c%c] "
"%s gc=%d %s %s%s%s\n", "%s gc=%d %s %s%s%s\n",
*s, *s >> 24 & 63, _p(s, 6), _p(s, 4), _p(s, 2), *s, *s >> 24 & 63, _p(s, 6), _p(s, 4), _p(s, 2),
speed[*s >> 14 & 3], *s >> 16 & 63, speed[*s >> 14 & 3], *s >> 16 & 63,
power[*s >> 8 & 7], *s >> 22 & 1 ? "L" : "", power[*s >> 8 & 7], *s >> 22 & 1 ? "L" : "",
*s >> 11 & 1 ? "c" : "", *s & 2 ? "i" : ""); *s >> 11 & 1 ? "c" : "", *s & 2 ? "i" : "");
else else
printk(KERN_DEBUG "selfID n: %08x, phy %d " fw_notify("selfID n: %08x, phy %d [%c%c%c%c%c%c%c%c]\n",
"[%c%c%c%c%c%c%c%c]\n", *s, *s >> 24 & 63,
*s, *s >> 24 & 63, _p(s, 16), _p(s, 14), _p(s, 12), _p(s, 10),
_p(s, 16), _p(s, 14), _p(s, 12), _p(s, 10), _p(s, 8), _p(s, 6), _p(s, 4), _p(s, 2));
_p(s, 8), _p(s, 6), _p(s, 4), _p(s, 2));
} }
static const char *evts[] = { static const char *evts[] = {
...@@ -373,15 +370,14 @@ static void log_ar_at_event(char dir, int speed, u32 *header, int evt) ...@@ -373,15 +370,14 @@ static void log_ar_at_event(char dir, int speed, u32 *header, int evt)
evt = 0x1f; evt = 0x1f;
if (evt == OHCI1394_evt_bus_reset) { if (evt == OHCI1394_evt_bus_reset) {
printk(KERN_DEBUG "A%c evt_bus_reset, generation %d\n", fw_notify("A%c evt_bus_reset, generation %d\n",
dir, (header[2] >> 16) & 0xff); dir, (header[2] >> 16) & 0xff);
return; return;
} }
if (header[0] == ~header[1]) { if (header[0] == ~header[1]) {
printk(KERN_DEBUG "A%c %s, %s, %08x\n", fw_notify("A%c %s, %s, %08x\n",
dir, evts[evt], phys[header[0] >> 30 & 0x3], dir, evts[evt], phys[header[0] >> 30 & 0x3], header[0]);
header[0]);
return; return;
} }
...@@ -400,24 +396,23 @@ static void log_ar_at_event(char dir, int speed, u32 *header, int evt) ...@@ -400,24 +396,23 @@ static void log_ar_at_event(char dir, int speed, u32 *header, int evt)
switch (tcode) { switch (tcode) {
case 0xe: case 0xa: case 0xe: case 0xa:
printk(KERN_DEBUG "A%c %s, %s\n", fw_notify("A%c %s, %s\n", dir, evts[evt], tcodes[tcode]);
dir, evts[evt], tcodes[tcode]);
break; break;
case 0x0: case 0x1: case 0x4: case 0x5: case 0x9: case 0x0: case 0x1: case 0x4: case 0x5: case 0x9:
printk(KERN_DEBUG "A%c spd %x tl %02x, " fw_notify("A%c spd %x tl %02x, "
"%04x -> %04x, %s, " "%04x -> %04x, %s, "
"%s, %04x%08x%s\n", "%s, %04x%08x%s\n",
dir, speed, header[0] >> 10 & 0x3f, dir, speed, header[0] >> 10 & 0x3f,
header[1] >> 16, header[0] >> 16, evts[evt], header[1] >> 16, header[0] >> 16, evts[evt],
tcodes[tcode], header[1] & 0xffff, header[2], specific); tcodes[tcode], header[1] & 0xffff, header[2], specific);
break; break;
default: default:
printk(KERN_DEBUG "A%c spd %x tl %02x, " fw_notify("A%c spd %x tl %02x, "
"%04x -> %04x, %s, " "%04x -> %04x, %s, "
"%s%s\n", "%s%s\n",
dir, speed, header[0] >> 10 & 0x3f, dir, speed, header[0] >> 10 & 0x3f,
header[1] >> 16, header[0] >> 16, evts[evt], header[1] >> 16, header[0] >> 16, evts[evt],
tcodes[tcode], specific); tcodes[tcode], specific);
} }
} }
...@@ -548,6 +543,11 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer) ...@@ -548,6 +543,11 @@ static __le32 *handle_ar_packet(struct ar_context *ctx, __le32 *buffer)
p.header_length = 12; p.header_length = 12;
p.payload_length = 0; p.payload_length = 0;
break; break;
default:
/* FIXME: Stop context, discard everything, and restart? */
p.header_length = 0;
p.payload_length = 0;
} }
p.payload = (void *) buffer + p.header_length; p.payload = (void *) buffer + p.header_length;
...@@ -1468,6 +1468,9 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length) ...@@ -1468,6 +1468,9 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length)
reg_write(ohci, OHCI1394_HCControlClear, reg_write(ohci, OHCI1394_HCControlClear,
OHCI1394_HCControl_noByteSwapData); OHCI1394_HCControl_noByteSwapData);
reg_write(ohci, OHCI1394_SelfIDBuffer, ohci->self_id_bus);
reg_write(ohci, OHCI1394_LinkControlClear,
OHCI1394_LinkControl_rcvPhyPkt);
reg_write(ohci, OHCI1394_LinkControlSet, reg_write(ohci, OHCI1394_LinkControlSet,
OHCI1394_LinkControl_rcvSelfID | OHCI1394_LinkControl_rcvSelfID |
OHCI1394_LinkControl_cycleTimerEnable | OHCI1394_LinkControl_cycleTimerEnable |
...@@ -1481,7 +1484,6 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length) ...@@ -1481,7 +1484,6 @@ static int ohci_enable(struct fw_card *card, u32 *config_rom, size_t length)
ar_context_run(&ohci->ar_request_ctx); ar_context_run(&ohci->ar_request_ctx);
ar_context_run(&ohci->ar_response_ctx); ar_context_run(&ohci->ar_response_ctx);
reg_write(ohci, OHCI1394_SelfIDBuffer, ohci->self_id_bus);
reg_write(ohci, OHCI1394_PhyUpperBound, 0x00010000); reg_write(ohci, OHCI1394_PhyUpperBound, 0x00010000);
reg_write(ohci, OHCI1394_IntEventClear, ~0); reg_write(ohci, OHCI1394_IntEventClear, ~0);
reg_write(ohci, OHCI1394_IntMaskClear, ~0); reg_write(ohci, OHCI1394_IntMaskClear, ~0);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kref.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -297,37 +298,55 @@ EXPORT_SYMBOL(fw_send_request); ...@@ -297,37 +298,55 @@ EXPORT_SYMBOL(fw_send_request);
struct fw_phy_packet { struct fw_phy_packet {
struct fw_packet packet; struct fw_packet packet;
struct completion done; struct completion done;
struct kref kref;
}; };
static void static void phy_packet_release(struct kref *kref)
transmit_phy_packet_callback(struct fw_packet *packet, {
struct fw_card *card, int status) struct fw_phy_packet *p =
container_of(kref, struct fw_phy_packet, kref);
kfree(p);
}
static void transmit_phy_packet_callback(struct fw_packet *packet,
struct fw_card *card, int status)
{ {
struct fw_phy_packet *p = struct fw_phy_packet *p =
container_of(packet, struct fw_phy_packet, packet); container_of(packet, struct fw_phy_packet, packet);
complete(&p->done); complete(&p->done);
kref_put(&p->kref, phy_packet_release);
} }
void fw_send_phy_config(struct fw_card *card, void fw_send_phy_config(struct fw_card *card,
int node_id, int generation, int gap_count) int node_id, int generation, int gap_count)
{ {
struct fw_phy_packet p; struct fw_phy_packet *p;
long timeout = DIV_ROUND_UP(HZ, 10);
u32 data = PHY_IDENTIFIER(PHY_PACKET_CONFIG) | u32 data = PHY_IDENTIFIER(PHY_PACKET_CONFIG) |
PHY_CONFIG_ROOT_ID(node_id) | PHY_CONFIG_ROOT_ID(node_id) |
PHY_CONFIG_GAP_COUNT(gap_count); PHY_CONFIG_GAP_COUNT(gap_count);
p.packet.header[0] = data; p = kmalloc(sizeof(*p), GFP_KERNEL);
p.packet.header[1] = ~data; if (p == NULL)
p.packet.header_length = 8; return;
p.packet.payload_length = 0;
p.packet.speed = SCODE_100; p->packet.header[0] = data;
p.packet.generation = generation; p->packet.header[1] = ~data;
p.packet.callback = transmit_phy_packet_callback; p->packet.header_length = 8;
init_completion(&p.done); p->packet.payload_length = 0;
p->packet.speed = SCODE_100;
card->driver->send_request(card, &p.packet); p->packet.generation = generation;
wait_for_completion(&p.done); p->packet.callback = transmit_phy_packet_callback;
init_completion(&p->done);
kref_set(&p->kref, 2);
card->driver->send_request(card, &p->packet);
timeout = wait_for_completion_timeout(&p->done, timeout);
kref_put(&p->kref, phy_packet_release);
/* will leak p if the callback is never executed */
WARN_ON(timeout == 0);
} }
void fw_flush_transactions(struct fw_card *card) void fw_flush_transactions(struct fw_card *card)
...@@ -572,7 +591,8 @@ allocate_request(struct fw_packet *p) ...@@ -572,7 +591,8 @@ allocate_request(struct fw_packet *p)
break; break;
default: default:
BUG(); fw_error("ERROR - corrupt request received - %08x %08x %08x\n",
p->header[0], p->header[1], p->header[2]);
return NULL; return NULL;
} }
......
...@@ -4,7 +4,7 @@ menu "IEEE 1394 (FireWire) support" ...@@ -4,7 +4,7 @@ menu "IEEE 1394 (FireWire) support"
source "drivers/firewire/Kconfig" source "drivers/firewire/Kconfig"
config IEEE1394 config IEEE1394
tristate "IEEE 1394 (FireWire) support" tristate "Stable FireWire stack"
depends on PCI || BROKEN depends on PCI || BROKEN
help help
IEEE 1394 describes a high performance serial bus, which is also IEEE 1394 describes a high performance serial bus, which is also
...@@ -19,30 +19,45 @@ config IEEE1394 ...@@ -19,30 +19,45 @@ config IEEE1394
To compile this driver as a module, say M here: the To compile this driver as a module, say M here: the
module will be called ieee1394. module will be called ieee1394.
comment "Subsystem Options" config IEEE1394_OHCI1394
depends on IEEE1394 tristate "OHCI-1394 controllers"
depends on PCI && IEEE1394
config IEEE1394_VERBOSEDEBUG
bool "Excessive debugging output"
depends on IEEE1394
help help
If you say Y here, you will get very verbose debugging logs from Enable this driver if you have an IEEE 1394 controller based on the
the subsystem which includes a dump of the header of every sent OHCI-1394 specification. The current driver is only tested with OHCI
and received packet. This can amount to a high amount of data chipsets made by Texas Instruments and NEC. Most third-party vendors
collected in a very short time which is usually also saved to use one of these chipsets. It should work with any OHCI-1394
disk by the system logging daemons. compliant card, however.
Say Y if you really want or need the debugging output, everyone To compile this driver as a module, say M here: the
else says N. module will be called ohci1394.
comment "Controllers" NOTE:
depends on IEEE1394
comment "Texas Instruments PCILynx requires I2C" You should only build either ohci1394 or the new firewire-ohci driver,
but not both. If you nevertheless want to install both, you should
configure them only as modules and blacklist the driver(s) which you
don't want to have auto-loaded. Add either
blacklist firewire-ohci
or
blacklist ohci1394
blacklist video1394
blacklist dv1394
to /etc/modprobe.conf or /etc/modprobe.d/* and update modprobe.conf
depending on your distribution. The latter two modules should be
blacklisted together with ohci1394 because they depend on ohci1394.
If you have an old modprobe which doesn't implement the blacklist
directive, use "install modulename /bin/true" for the modules to be
blacklisted.
comment "PCILynx controller requires I2C"
depends on IEEE1394 && I2C=n depends on IEEE1394 && I2C=n
config IEEE1394_PCILYNX config IEEE1394_PCILYNX
tristate "Texas Instruments PCILynx support" tristate "PCILynx controller"
depends on PCI && IEEE1394 && I2C depends on PCI && IEEE1394 && I2C
select I2C_ALGOBIT select I2C_ALGOBIT
help help
...@@ -57,35 +72,11 @@ config IEEE1394_PCILYNX ...@@ -57,35 +72,11 @@ config IEEE1394_PCILYNX
PowerMacs G3 B&W contain the PCILynx controller. Therefore PowerMacs G3 B&W contain the PCILynx controller. Therefore
almost everybody can say N here. almost everybody can say N here.
config IEEE1394_OHCI1394
tristate "OHCI-1394 support"
depends on PCI && IEEE1394
help
Enable this driver if you have an IEEE 1394 controller based on the
OHCI-1394 specification. The current driver is only tested with OHCI
chipsets made by Texas Instruments and NEC. Most third-party vendors
use one of these chipsets. It should work with any OHCI-1394
compliant card, however.
To compile this driver as a module, say M here: the
module will be called ohci1394.
comment "Protocols"
depends on IEEE1394
config IEEE1394_VIDEO1394
tristate "OHCI-1394 Video support"
depends on IEEE1394 && IEEE1394_OHCI1394
help
This option enables video device usage for OHCI-1394 cards. Enable
this option only if you have an IEEE 1394 video device connected to
an OHCI-1394 card.
comment "SBP-2 support (for storage devices) requires SCSI" comment "SBP-2 support (for storage devices) requires SCSI"
depends on IEEE1394 && SCSI=n depends on IEEE1394 && SCSI=n
config IEEE1394_SBP2 config IEEE1394_SBP2
tristate "SBP-2 support (Harddisks etc.)" tristate "Storage devices (SBP-2 protocol)"
depends on IEEE1394 && SCSI depends on IEEE1394 && SCSI
help help
This option enables you to use SBP-2 devices connected to an IEEE This option enables you to use SBP-2 devices connected to an IEEE
...@@ -127,24 +118,47 @@ config IEEE1394_ETH1394 ...@@ -127,24 +118,47 @@ config IEEE1394_ETH1394
The module is called eth1394 although it does not emulate Ethernet. The module is called eth1394 although it does not emulate Ethernet.
config IEEE1394_RAWIO
tristate "raw1394 userspace interface"
depends on IEEE1394
help
This option adds support for the raw1394 device file which enables
direct communication of user programs with IEEE 1394 devices
(isochronous and asynchronous). Almost all application programs
which access FireWire require this option.
To compile this driver as a module, say M here: the module will be
called raw1394.
config IEEE1394_VIDEO1394
tristate "video1394 userspace interface"
depends on IEEE1394 && IEEE1394_OHCI1394
help
This option adds support for the video1394 device files which enable
isochronous communication of user programs with IEEE 1394 devices,
especially video capture or export. This interface is used by all
libdc1394 based programs and by several other programs, in addition to
the raw1394 interface. It is generally not required for DV capture.
To compile this driver as a module, say M here: the module will be
called video1394.
config IEEE1394_DV1394 config IEEE1394_DV1394
tristate "OHCI-DV I/O support (deprecated)" tristate "dv1394 userspace interface (deprecated)"
depends on IEEE1394 && IEEE1394_OHCI1394 depends on IEEE1394 && IEEE1394_OHCI1394
help help
The dv1394 driver is unsupported and may be removed from Linux in a The dv1394 driver is unsupported and may be removed from Linux in a
future release. Its functionality is now provided by raw1394 together future release. Its functionality is now provided by raw1394 together
with libraries such as libiec61883. with libraries such as libiec61883.
config IEEE1394_RAWIO config IEEE1394_VERBOSEDEBUG
tristate "Raw IEEE1394 I/O support" bool "Excessive debugging output"
depends on IEEE1394 depends on IEEE1394
help help
This option adds support for the raw1394 device file which enables If you say Y here, you will get very verbose debugging logs from the
direct communication of user programs with the IEEE 1394 bus and thus ieee1394 drivers, including sent and received packet headers. This
with the attached peripherals. Almost all application programs which will quickly result in large amounts of data sent to the system log.
access FireWire require this option.
To compile this driver as a module, say M here: the module will be Say Y if you really need the debugging output. Everyone else says N.
called raw1394.
endmenu endmenu
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment