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: firewire, ieee1394: update Kconfig help firewire, ieee1394: update MAINTAINERS entries firewire: ohci: always use packet-per-buffer mode for isochronous reception firewire: cdev: fix another memory leak in an error path firewire: fix use of multiple AV/C devices, allow multiple FCP listeners Comments from Stefan: Distributors who still ship the old stack (ieee1394, ohci1394, raw1394, sbp2, eth1394 and more) should now switch to the new one (firewire-core, firewire-ohci, firewire-sbp2, firewire-net). In the first iteration, those distributors might want to ship the old stack also (but blacklisted) as a fallback for their users if unforeseen problems with the newer replacement drivers are encountered. The older FireWire stack contains several known problems which are not going to be fixed; instead, those issues are addressed by the new stack. An incomplete list of these issues is kept in bugzilla: http://bugzilla.kernel.org/show_bug.cgi?id=10046 We have a guide on migration from the older to the newer stack: http://ieee1394.wiki.kernel.org/index.php/Juju_Migration
This commit is contained in:
15
MAINTAINERS
15
MAINTAINERS
@@ -2169,10 +2169,9 @@ F: drivers/hwmon/f75375s.c
|
|||||||
F: include/linux/f75375s.h
|
F: include/linux/f75375s.h
|
||||||
|
|
||||||
FIREWIRE SUBSYSTEM
|
FIREWIRE SUBSYSTEM
|
||||||
M: Kristian Hoegsberg <krh@redhat.com>
|
|
||||||
M: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
M: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||||
L: linux1394-devel@lists.sourceforge.net
|
L: linux1394-devel@lists.sourceforge.net
|
||||||
W: http://www.linux1394.org/
|
W: http://ieee1394.wiki.kernel.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/firewire/
|
F: drivers/firewire/
|
||||||
@@ -2705,22 +2704,14 @@ S: Supported
|
|||||||
F: drivers/idle/i7300_idle.c
|
F: drivers/idle/i7300_idle.c
|
||||||
|
|
||||||
IEEE 1394 SUBSYSTEM
|
IEEE 1394 SUBSYSTEM
|
||||||
M: Ben Collins <ben.collins@ubuntu.com>
|
|
||||||
M: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
M: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||||
L: linux1394-devel@lists.sourceforge.net
|
L: linux1394-devel@lists.sourceforge.net
|
||||||
W: http://www.linux1394.org/
|
W: http://ieee1394.wiki.kernel.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
|
||||||
S: Maintained
|
S: Obsolete
|
||||||
F: Documentation/debugging-via-ohci1394.txt
|
F: Documentation/debugging-via-ohci1394.txt
|
||||||
F: drivers/ieee1394/
|
F: drivers/ieee1394/
|
||||||
|
|
||||||
IEEE 1394 RAW I/O DRIVER
|
|
||||||
M: Dan Dennedy <dan@dennedy.org>
|
|
||||||
M: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
|
||||||
L: linux1394-devel@lists.sourceforge.net
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/ieee1394/raw1394*
|
|
||||||
|
|
||||||
IEEE 802.15.4 SUBSYSTEM
|
IEEE 802.15.4 SUBSYSTEM
|
||||||
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||||
M: Sergey Lapin <slapin@ossfans.org>
|
M: Sergey Lapin <slapin@ossfans.org>
|
||||||
|
@@ -28,7 +28,7 @@ source "drivers/md/Kconfig"
|
|||||||
|
|
||||||
source "drivers/message/fusion/Kconfig"
|
source "drivers/message/fusion/Kconfig"
|
||||||
|
|
||||||
source "drivers/ieee1394/Kconfig"
|
source "drivers/firewire/Kconfig"
|
||||||
|
|
||||||
source "drivers/message/i2o/Kconfig"
|
source "drivers/message/i2o/Kconfig"
|
||||||
|
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
|
menu "IEEE 1394 (FireWire) support"
|
||||||
|
depends on PCI || BROKEN
|
||||||
|
# firewire-core does not depend on PCI but is
|
||||||
|
# not useful without PCI controller driver
|
||||||
|
|
||||||
comment "You can enable one or both FireWire driver stacks."
|
comment "You can enable one or both FireWire driver stacks."
|
||||||
comment "See the help texts for more information."
|
comment "The newer stack is recommended."
|
||||||
|
|
||||||
config FIREWIRE
|
config FIREWIRE
|
||||||
tristate "FireWire driver stack"
|
tristate "FireWire driver stack"
|
||||||
@@ -15,16 +20,6 @@ config FIREWIRE
|
|||||||
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.
|
called firewire-core.
|
||||||
|
|
||||||
This module functionally replaces ieee1394, raw1394, and video1394.
|
|
||||||
To access it from application programs, you generally need at least
|
|
||||||
libraw1394 v2. IIDC/DCAM applications need libdc1394 v2.
|
|
||||||
No libraries are required to access storage devices through the
|
|
||||||
firewire-sbp2 driver.
|
|
||||||
|
|
||||||
NOTE:
|
|
||||||
FireWire audio devices currently require the old drivers (ieee1394,
|
|
||||||
ohci1394, raw1394).
|
|
||||||
|
|
||||||
config FIREWIRE_OHCI
|
config FIREWIRE_OHCI
|
||||||
tristate "OHCI-1394 controllers"
|
tristate "OHCI-1394 controllers"
|
||||||
depends on PCI && FIREWIRE
|
depends on PCI && FIREWIRE
|
||||||
@@ -34,22 +29,7 @@ config FIREWIRE_OHCI
|
|||||||
is the only chipset in use, so say Y here.
|
is the only chipset in use, so say Y here.
|
||||||
|
|
||||||
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-ohci. It replaces ohci1394 of the classic IEEE 1394
|
called firewire-ohci.
|
||||||
stack.
|
|
||||||
|
|
||||||
NOTE:
|
|
||||||
If you want to install firewire-ohci and ohci1394 together, 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.
|
|
||||||
|
|
||||||
config FIREWIRE_OHCI_DEBUG
|
config FIREWIRE_OHCI_DEBUG
|
||||||
bool
|
bool
|
||||||
@@ -66,8 +46,7 @@ config FIREWIRE_SBP2
|
|||||||
like scanners.
|
like scanners.
|
||||||
|
|
||||||
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-sbp2. It replaces sbp2 of the classic IEEE 1394
|
called firewire-sbp2.
|
||||||
stack.
|
|
||||||
|
|
||||||
You should also enable support for disks, CD-ROMs, etc. in the SCSI
|
You should also enable support for disks, CD-ROMs, etc. in the SCSI
|
||||||
configuration section.
|
configuration section.
|
||||||
@@ -83,5 +62,8 @@ config FIREWIRE_NET
|
|||||||
NOTE, this driver is not stable yet!
|
NOTE, this driver is not stable yet!
|
||||||
|
|
||||||
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-net. It replaces eth1394 of the classic IEEE 1394
|
called firewire-net.
|
||||||
stack.
|
|
||||||
|
source "drivers/ieee1394/Kconfig"
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
@@ -601,6 +601,7 @@ static void release_request(struct client *client,
|
|||||||
struct inbound_transaction_resource *r = container_of(resource,
|
struct inbound_transaction_resource *r = container_of(resource,
|
||||||
struct inbound_transaction_resource, resource);
|
struct inbound_transaction_resource, resource);
|
||||||
|
|
||||||
|
if (r->request)
|
||||||
fw_send_response(client->device->card, r->request,
|
fw_send_response(client->device->card, r->request,
|
||||||
RCODE_CONFLICT_ERROR);
|
RCODE_CONFLICT_ERROR);
|
||||||
kfree(r);
|
kfree(r);
|
||||||
@@ -645,6 +646,7 @@ static void handle_request(struct fw_card *card, struct fw_request *request,
|
|||||||
failed:
|
failed:
|
||||||
kfree(r);
|
kfree(r);
|
||||||
kfree(e);
|
kfree(e);
|
||||||
|
if (request)
|
||||||
fw_send_response(card, request, RCODE_CONFLICT_ERROR);
|
fw_send_response(card, request, RCODE_CONFLICT_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -715,15 +717,18 @@ static int ioctl_send_response(struct client *client, void *buffer)
|
|||||||
|
|
||||||
r = container_of(resource, struct inbound_transaction_resource,
|
r = container_of(resource, struct inbound_transaction_resource,
|
||||||
resource);
|
resource);
|
||||||
|
if (r->request) {
|
||||||
if (request->length < r->length)
|
if (request->length < r->length)
|
||||||
r->length = request->length;
|
r->length = request->length;
|
||||||
|
if (copy_from_user(r->data, u64_to_uptr(request->data),
|
||||||
if (copy_from_user(r->data, u64_to_uptr(request->data), r->length)) {
|
r->length)) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
|
kfree(r->request);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
fw_send_response(client->device->card, r->request,
|
||||||
fw_send_response(client->device->card, r->request, request->rcode);
|
request->rcode);
|
||||||
|
}
|
||||||
out:
|
out:
|
||||||
kfree(r);
|
kfree(r);
|
||||||
|
|
||||||
|
@@ -432,14 +432,20 @@ static struct fw_address_handler *lookup_overlapping_address_handler(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_enclosing_handler(struct fw_address_handler *handler,
|
||||||
|
unsigned long long offset, size_t length)
|
||||||
|
{
|
||||||
|
return handler->offset <= offset &&
|
||||||
|
offset + length <= handler->offset + handler->length;
|
||||||
|
}
|
||||||
|
|
||||||
static struct fw_address_handler *lookup_enclosing_address_handler(
|
static struct fw_address_handler *lookup_enclosing_address_handler(
|
||||||
struct list_head *list, unsigned long long offset, size_t length)
|
struct list_head *list, unsigned long long offset, size_t length)
|
||||||
{
|
{
|
||||||
struct fw_address_handler *handler;
|
struct fw_address_handler *handler;
|
||||||
|
|
||||||
list_for_each_entry(handler, list, link) {
|
list_for_each_entry(handler, list, link) {
|
||||||
if (handler->offset <= offset &&
|
if (is_enclosing_handler(handler, offset, length))
|
||||||
offset + length <= handler->offset + handler->length)
|
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,6 +471,12 @@ const struct fw_address_region fw_unit_space_region =
|
|||||||
{ .start = 0xfffff0000900ULL, .end = 0x1000000000000ULL, };
|
{ .start = 0xfffff0000900ULL, .end = 0x1000000000000ULL, };
|
||||||
#endif /* 0 */
|
#endif /* 0 */
|
||||||
|
|
||||||
|
static bool is_in_fcp_region(u64 offset, size_t length)
|
||||||
|
{
|
||||||
|
return offset >= (CSR_REGISTER_BASE | CSR_FCP_COMMAND) &&
|
||||||
|
offset + length <= (CSR_REGISTER_BASE | CSR_FCP_END);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fw_core_add_address_handler - register for incoming requests
|
* fw_core_add_address_handler - register for incoming requests
|
||||||
* @handler: callback
|
* @handler: callback
|
||||||
@@ -477,8 +489,11 @@ const struct fw_address_region fw_unit_space_region =
|
|||||||
* give the details of the particular request.
|
* give the details of the particular request.
|
||||||
*
|
*
|
||||||
* Return value: 0 on success, non-zero otherwise.
|
* Return value: 0 on success, non-zero otherwise.
|
||||||
|
*
|
||||||
* The start offset of the handler's address region is determined by
|
* The start offset of the handler's address region is determined by
|
||||||
* fw_core_add_address_handler() and is returned in handler->offset.
|
* fw_core_add_address_handler() and is returned in handler->offset.
|
||||||
|
*
|
||||||
|
* Address allocations are exclusive, except for the FCP registers.
|
||||||
*/
|
*/
|
||||||
int fw_core_add_address_handler(struct fw_address_handler *handler,
|
int fw_core_add_address_handler(struct fw_address_handler *handler,
|
||||||
const struct fw_address_region *region)
|
const struct fw_address_region *region)
|
||||||
@@ -498,10 +513,12 @@ int fw_core_add_address_handler(struct fw_address_handler *handler,
|
|||||||
|
|
||||||
handler->offset = region->start;
|
handler->offset = region->start;
|
||||||
while (handler->offset + handler->length <= region->end) {
|
while (handler->offset + handler->length <= region->end) {
|
||||||
other =
|
if (is_in_fcp_region(handler->offset, handler->length))
|
||||||
lookup_overlapping_address_handler(&address_handler_list,
|
other = NULL;
|
||||||
handler->offset,
|
else
|
||||||
handler->length);
|
other = lookup_overlapping_address_handler
|
||||||
|
(&address_handler_list,
|
||||||
|
handler->offset, handler->length);
|
||||||
if (other != NULL) {
|
if (other != NULL) {
|
||||||
handler->offset += other->length;
|
handler->offset += other->length;
|
||||||
} else {
|
} else {
|
||||||
@@ -668,6 +685,9 @@ static struct fw_request *allocate_request(struct fw_packet *p)
|
|||||||
void fw_send_response(struct fw_card *card,
|
void fw_send_response(struct fw_card *card,
|
||||||
struct fw_request *request, int rcode)
|
struct fw_request *request, int rcode)
|
||||||
{
|
{
|
||||||
|
if (WARN_ONCE(!request, "invalid for FCP address handlers"))
|
||||||
|
return;
|
||||||
|
|
||||||
/* unified transaction or broadcast transaction: don't respond */
|
/* unified transaction or broadcast transaction: don't respond */
|
||||||
if (request->ack != ACK_PENDING ||
|
if (request->ack != ACK_PENDING ||
|
||||||
HEADER_DESTINATION_IS_BROADCAST(request->request_header[0])) {
|
HEADER_DESTINATION_IS_BROADCAST(request->request_header[0])) {
|
||||||
@@ -686,26 +706,15 @@ void fw_send_response(struct fw_card *card,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(fw_send_response);
|
EXPORT_SYMBOL(fw_send_response);
|
||||||
|
|
||||||
void fw_core_handle_request(struct fw_card *card, struct fw_packet *p)
|
static void handle_exclusive_region_request(struct fw_card *card,
|
||||||
|
struct fw_packet *p,
|
||||||
|
struct fw_request *request,
|
||||||
|
unsigned long long offset)
|
||||||
{
|
{
|
||||||
struct fw_address_handler *handler;
|
struct fw_address_handler *handler;
|
||||||
struct fw_request *request;
|
|
||||||
unsigned long long offset;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int tcode, destination, source;
|
int tcode, destination, source;
|
||||||
|
|
||||||
if (p->ack != ACK_PENDING && p->ack != ACK_COMPLETE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
request = allocate_request(p);
|
|
||||||
if (request == NULL) {
|
|
||||||
/* FIXME: send statically allocated busy packet. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
offset =
|
|
||||||
((unsigned long long)
|
|
||||||
HEADER_GET_OFFSET_HIGH(p->header[1]) << 32) | p->header[2];
|
|
||||||
tcode = HEADER_GET_TCODE(p->header[0]);
|
tcode = HEADER_GET_TCODE(p->header[0]);
|
||||||
destination = HEADER_GET_DESTINATION(p->header[0]);
|
destination = HEADER_GET_DESTINATION(p->header[0]);
|
||||||
source = HEADER_GET_SOURCE(p->header[1]);
|
source = HEADER_GET_SOURCE(p->header[1]);
|
||||||
@@ -732,6 +741,73 @@ void fw_core_handle_request(struct fw_card *card, struct fw_packet *p)
|
|||||||
request->data, request->length,
|
request->data, request->length,
|
||||||
handler->callback_data);
|
handler->callback_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_fcp_region_request(struct fw_card *card,
|
||||||
|
struct fw_packet *p,
|
||||||
|
struct fw_request *request,
|
||||||
|
unsigned long long offset)
|
||||||
|
{
|
||||||
|
struct fw_address_handler *handler;
|
||||||
|
unsigned long flags;
|
||||||
|
int tcode, destination, source;
|
||||||
|
|
||||||
|
if ((offset != (CSR_REGISTER_BASE | CSR_FCP_COMMAND) &&
|
||||||
|
offset != (CSR_REGISTER_BASE | CSR_FCP_RESPONSE)) ||
|
||||||
|
request->length > 0x200) {
|
||||||
|
fw_send_response(card, request, RCODE_ADDRESS_ERROR);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcode = HEADER_GET_TCODE(p->header[0]);
|
||||||
|
destination = HEADER_GET_DESTINATION(p->header[0]);
|
||||||
|
source = HEADER_GET_SOURCE(p->header[1]);
|
||||||
|
|
||||||
|
if (tcode != TCODE_WRITE_QUADLET_REQUEST &&
|
||||||
|
tcode != TCODE_WRITE_BLOCK_REQUEST) {
|
||||||
|
fw_send_response(card, request, RCODE_TYPE_ERROR);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_lock_irqsave(&address_handler_lock, flags);
|
||||||
|
list_for_each_entry(handler, &address_handler_list, link) {
|
||||||
|
if (is_enclosing_handler(handler, offset, request->length))
|
||||||
|
handler->address_callback(card, NULL, tcode,
|
||||||
|
destination, source,
|
||||||
|
p->generation, p->speed,
|
||||||
|
offset, request->data,
|
||||||
|
request->length,
|
||||||
|
handler->callback_data);
|
||||||
|
}
|
||||||
|
spin_unlock_irqrestore(&address_handler_lock, flags);
|
||||||
|
|
||||||
|
fw_send_response(card, request, RCODE_COMPLETE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fw_core_handle_request(struct fw_card *card, struct fw_packet *p)
|
||||||
|
{
|
||||||
|
struct fw_request *request;
|
||||||
|
unsigned long long offset;
|
||||||
|
|
||||||
|
if (p->ack != ACK_PENDING && p->ack != ACK_COMPLETE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
request = allocate_request(p);
|
||||||
|
if (request == NULL) {
|
||||||
|
/* FIXME: send statically allocated busy packet. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = ((u64)HEADER_GET_OFFSET_HIGH(p->header[1]) << 32) |
|
||||||
|
p->header[2];
|
||||||
|
|
||||||
|
if (!is_in_fcp_region(offset, request->length))
|
||||||
|
handle_exclusive_region_request(card, p, request, offset);
|
||||||
|
else
|
||||||
|
handle_fcp_region_request(card, p, request, offset);
|
||||||
|
|
||||||
|
}
|
||||||
EXPORT_SYMBOL(fw_core_handle_request);
|
EXPORT_SYMBOL(fw_core_handle_request);
|
||||||
|
|
||||||
void fw_core_handle_response(struct fw_card *card, struct fw_packet *p)
|
void fw_core_handle_response(struct fw_card *card, struct fw_packet *p)
|
||||||
|
@@ -2226,7 +2226,6 @@ static int ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
|
|||||||
if (rest == 0)
|
if (rest == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* FIXME: make packet-per-buffer/dual-buffer a context option */
|
|
||||||
while (rest > 0) {
|
while (rest > 0) {
|
||||||
d = context_get_descriptors(&ctx->context,
|
d = context_get_descriptors(&ctx->context,
|
||||||
z + header_z, &d_bus);
|
z + header_z, &d_bus);
|
||||||
@@ -2470,7 +2469,10 @@ static int __devinit pci_probe(struct pci_dev *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
|
version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
|
||||||
|
#if 0
|
||||||
|
/* FIXME: make it a context option or remove dual-buffer mode */
|
||||||
ohci->use_dualbuffer = version >= OHCI_VERSION_1_1;
|
ohci->use_dualbuffer = version >= OHCI_VERSION_1_1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* dual-buffer mode is broken if more than one IR context is active */
|
/* dual-buffer mode is broken if more than one IR context is active */
|
||||||
if (dev->vendor == PCI_VENDOR_ID_AGERE &&
|
if (dev->vendor == PCI_VENDOR_ID_AGERE &&
|
||||||
|
@@ -1,8 +1,3 @@
|
|||||||
menu "IEEE 1394 (FireWire) support"
|
|
||||||
depends on PCI || BROKEN
|
|
||||||
|
|
||||||
source "drivers/firewire/Kconfig"
|
|
||||||
|
|
||||||
config IEEE1394
|
config IEEE1394
|
||||||
tristate "Legacy alternative FireWire driver stack"
|
tristate "Legacy alternative FireWire driver stack"
|
||||||
depends on PCI || BROKEN
|
depends on PCI || BROKEN
|
||||||
@@ -16,8 +11,13 @@ config IEEE1394
|
|||||||
is the core support only, you will also need to select a driver for
|
is the core support only, you will also need to select a driver for
|
||||||
your IEEE 1394 adapter.
|
your IEEE 1394 adapter.
|
||||||
|
|
||||||
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
|
||||||
module will be called ieee1394.
|
called ieee1394.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
ieee1394 is superseded by the newer firewire-core driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
config IEEE1394_OHCI1394
|
config IEEE1394_OHCI1394
|
||||||
tristate "OHCI-1394 controllers"
|
tristate "OHCI-1394 controllers"
|
||||||
@@ -29,19 +29,23 @@ config IEEE1394_OHCI1394
|
|||||||
use one of these chipsets. It should work with any OHCI-1394
|
use one of these chipsets. It should work with any OHCI-1394
|
||||||
compliant card, however.
|
compliant card, however.
|
||||||
|
|
||||||
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
|
||||||
module will be called ohci1394.
|
called ohci1394.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
|
ohci1394 is superseded by the newer firewire-ohci driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
If you want to install firewire-ohci and ohci1394 together, you
|
If you want to install firewire-ohci and ohci1394 together, you
|
||||||
should configure them only as modules and blacklist the driver(s)
|
should configure them only as modules and blacklist the driver(s)
|
||||||
which you don't want to have auto-loaded. Add either
|
which you don't want to have auto-loaded. Add either
|
||||||
|
|
||||||
blacklist firewire-ohci
|
|
||||||
or
|
|
||||||
blacklist ohci1394
|
blacklist ohci1394
|
||||||
blacklist video1394
|
blacklist video1394
|
||||||
blacklist dv1394
|
blacklist dv1394
|
||||||
|
or
|
||||||
|
blacklist firewire-ohci
|
||||||
|
|
||||||
to /etc/modprobe.conf or /etc/modprobe.d/* and update modprobe.conf
|
to /etc/modprobe.conf or /etc/modprobe.d/* and update modprobe.conf
|
||||||
depending on your distribution.
|
depending on your distribution.
|
||||||
@@ -58,8 +62,8 @@ config IEEE1394_PCILYNX
|
|||||||
Instruments PCILynx chip. Note: this driver is written for revision
|
Instruments PCILynx chip. Note: this driver is written for revision
|
||||||
2 of this chip and may not work with revision 0.
|
2 of this chip and may not work with revision 0.
|
||||||
|
|
||||||
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
|
||||||
module will be called pcilynx.
|
called pcilynx.
|
||||||
|
|
||||||
Only some old and now very rare PCI and CardBus cards and
|
Only some old and now very rare PCI and CardBus cards and
|
||||||
PowerMacs G3 B&W contain the PCILynx controller. Therefore
|
PowerMacs G3 B&W contain the PCILynx controller. Therefore
|
||||||
@@ -79,6 +83,14 @@ config IEEE1394_SBP2
|
|||||||
You should also enable support for disks, CD-ROMs, etc. in the SCSI
|
You should also enable support for disks, CD-ROMs, etc. in the SCSI
|
||||||
configuration section.
|
configuration section.
|
||||||
|
|
||||||
|
To compile this driver as a module, say M here: the module will be
|
||||||
|
called sbp2.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
sbp2 is superseded by the newer firewire-sbp2 driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
config IEEE1394_SBP2_PHYS_DMA
|
config IEEE1394_SBP2_PHYS_DMA
|
||||||
bool "Enable replacement for physical DMA in SBP2"
|
bool "Enable replacement for physical DMA in SBP2"
|
||||||
depends on IEEE1394_SBP2 && VIRT_TO_BUS && EXPERIMENTAL
|
depends on IEEE1394_SBP2 && VIRT_TO_BUS && EXPERIMENTAL
|
||||||
@@ -111,6 +123,11 @@ 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.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
eth1394 is superseded by the newer firewire-net driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
config IEEE1394_RAWIO
|
config IEEE1394_RAWIO
|
||||||
tristate "raw1394 userspace interface"
|
tristate "raw1394 userspace interface"
|
||||||
depends on IEEE1394
|
depends on IEEE1394
|
||||||
@@ -123,6 +140,11 @@ config IEEE1394_RAWIO
|
|||||||
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 raw1394.
|
called raw1394.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
raw1394 is superseded by the newer firewire-core driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
config IEEE1394_VIDEO1394
|
config IEEE1394_VIDEO1394
|
||||||
tristate "video1394 userspace interface"
|
tristate "video1394 userspace interface"
|
||||||
depends on IEEE1394 && IEEE1394_OHCI1394
|
depends on IEEE1394 && IEEE1394_OHCI1394
|
||||||
@@ -136,13 +158,18 @@ config IEEE1394_VIDEO1394
|
|||||||
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 video1394.
|
called video1394.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
video1394 is superseded by the newer firewire-core driver. See
|
||||||
|
http://ieee1394.wiki.kernel.org/index.php/Juju_Migration for
|
||||||
|
further information on how to switch to the new FireWire drivers.
|
||||||
|
|
||||||
config IEEE1394_DV1394
|
config IEEE1394_DV1394
|
||||||
tristate "dv1394 userspace interface (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 either
|
||||||
with libraries such as libiec61883.
|
raw1394 or firewire-core together with libraries such as libiec61883.
|
||||||
|
|
||||||
config IEEE1394_VERBOSEDEBUG
|
config IEEE1394_VERBOSEDEBUG
|
||||||
bool "Excessive debugging output"
|
bool "Excessive debugging output"
|
||||||
@@ -153,5 +180,3 @@ config IEEE1394_VERBOSEDEBUG
|
|||||||
will quickly result in large amounts of data sent to the system log.
|
will quickly result in large amounts of data sent to the system log.
|
||||||
|
|
||||||
Say Y if you really need the debugging output. Everyone else says N.
|
Say Y if you really need the debugging output. Everyone else says N.
|
||||||
|
|
||||||
endmenu
|
|
||||||
|
@@ -202,14 +202,8 @@ static void handle_fcp(struct fw_card *card, struct fw_request *request,
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int su;
|
int su;
|
||||||
|
|
||||||
if ((tcode != TCODE_WRITE_QUADLET_REQUEST &&
|
if (length < 2 || (((u8 *)payload)[0] & 0xf0) != 0)
|
||||||
tcode != TCODE_WRITE_BLOCK_REQUEST) ||
|
|
||||||
offset != CSR_REGISTER_BASE + CSR_FCP_RESPONSE ||
|
|
||||||
length == 0 ||
|
|
||||||
(((u8 *)payload)[0] & 0xf0) != 0) {
|
|
||||||
fw_send_response(card, request, RCODE_TYPE_ERROR);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
su = ((u8 *)payload)[1] & 0x7;
|
su = ((u8 *)payload)[1] & 0x7;
|
||||||
|
|
||||||
@@ -230,10 +224,8 @@ static void handle_fcp(struct fw_card *card, struct fw_request *request,
|
|||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&node_list_lock, flags);
|
spin_unlock_irqrestore(&node_list_lock, flags);
|
||||||
|
|
||||||
if (fdtv) {
|
if (fdtv)
|
||||||
avc_recv(fdtv, payload, length);
|
avc_recv(fdtv, payload, length);
|
||||||
fw_send_response(card, request, RCODE_COMPLETE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct fw_address_handler fcp_handler = {
|
static struct fw_address_handler fcp_handler = {
|
||||||
|
@@ -340,6 +340,9 @@ struct fw_cdev_send_response {
|
|||||||
* The @closure field is passed back to userspace in the response event.
|
* The @closure field is passed back to userspace in the response event.
|
||||||
* The @handle field is an out parameter, returning a handle to the allocated
|
* The @handle field is an out parameter, returning a handle to the allocated
|
||||||
* range to be used for later deallocation of the range.
|
* range to be used for later deallocation of the range.
|
||||||
|
*
|
||||||
|
* The address range is allocated on all local nodes. The address allocation
|
||||||
|
* is exclusive except for the FCP command and response registers.
|
||||||
*/
|
*/
|
||||||
struct fw_cdev_allocate {
|
struct fw_cdev_allocate {
|
||||||
__u64 offset;
|
__u64 offset;
|
||||||
|
@@ -248,8 +248,8 @@ typedef void (*fw_transaction_callback_t)(struct fw_card *card, int rcode,
|
|||||||
void *data, size_t length,
|
void *data, size_t length,
|
||||||
void *callback_data);
|
void *callback_data);
|
||||||
/*
|
/*
|
||||||
* Important note: The callback must guarantee that either fw_send_response()
|
* Important note: Except for the FCP registers, the callback must guarantee
|
||||||
* or kfree() is called on the @request.
|
* that either fw_send_response() or kfree() is called on the @request.
|
||||||
*/
|
*/
|
||||||
typedef void (*fw_address_callback_t)(struct fw_card *card,
|
typedef void (*fw_address_callback_t)(struct fw_card *card,
|
||||||
struct fw_request *request,
|
struct fw_request *request,
|
||||||
|
Reference in New Issue
Block a user