diff options
author | Jody McIntyre <scjody@steamballoon.com> | 2005-09-30 14:59:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-30 15:41:19 -0400 |
commit | 3ae3d0d4ae4131563d9eb55859f4fa5bd39059bd (patch) | |
tree | ff2574f8b4191b99eaa1e14c2da15ad23ac2e785 | |
parent | 998150c3d3cf049da7596875f6fdc253db089a9a (diff) |
[PATCH] eth1394: workaround limitation in rawiso routines
Work around limitation in rawiso routines. Required with 1394b cards on
architectures where PAGE_SIZE is 4096. Based on a previous patch by Ben
Collins.
Signed-off-by: Jody McIntyre <scjody@steamballoon.com>
Cc: Ben Collins <bcollins@debian.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/ieee1394/eth1394.c | 12 | ||||
-rw-r--r-- | drivers/ieee1394/eth1394.h | 6 |
2 files changed, 11 insertions, 7 deletions
diff --git a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c index cd53c174ced1..4802bbbb6dc9 100644 --- a/drivers/ieee1394/eth1394.c +++ b/drivers/ieee1394/eth1394.c | |||
@@ -89,7 +89,7 @@ | |||
89 | #define TRACE() printk(KERN_ERR "%s:%s[%d] ---- TRACE\n", driver_name, __FUNCTION__, __LINE__) | 89 | #define TRACE() printk(KERN_ERR "%s:%s[%d] ---- TRACE\n", driver_name, __FUNCTION__, __LINE__) |
90 | 90 | ||
91 | static char version[] __devinitdata = | 91 | static char version[] __devinitdata = |
92 | "$Rev: 1264 $ Ben Collins <bcollins@debian.org>"; | 92 | "$Rev: 1312 $ Ben Collins <bcollins@debian.org>"; |
93 | 93 | ||
94 | struct fragment_info { | 94 | struct fragment_info { |
95 | struct list_head list; | 95 | struct list_head list; |
@@ -221,9 +221,7 @@ static int ether1394_open (struct net_device *dev) | |||
221 | if (priv->bc_state == ETHER1394_BC_ERROR) { | 221 | if (priv->bc_state == ETHER1394_BC_ERROR) { |
222 | /* we'll try again */ | 222 | /* we'll try again */ |
223 | priv->iso = hpsb_iso_recv_init(priv->host, | 223 | priv->iso = hpsb_iso_recv_init(priv->host, |
224 | ETHER1394_GASP_BUFFERS * 2 * | 224 | ETHER1394_ISO_BUF_SIZE, |
225 | (1 << (priv->host->csr.max_rec + | ||
226 | 1)), | ||
227 | ETHER1394_GASP_BUFFERS, | 225 | ETHER1394_GASP_BUFFERS, |
228 | priv->broadcast_channel, | 226 | priv->broadcast_channel, |
229 | HPSB_ISO_DMA_PACKET_PER_BUFFER, | 227 | HPSB_ISO_DMA_PACKET_PER_BUFFER, |
@@ -635,8 +633,8 @@ static void ether1394_add_host (struct hpsb_host *host) | |||
635 | * be checked when the eth device is opened. */ | 633 | * be checked when the eth device is opened. */ |
636 | priv->broadcast_channel = host->csr.broadcast_channel & 0x3f; | 634 | priv->broadcast_channel = host->csr.broadcast_channel & 0x3f; |
637 | 635 | ||
638 | priv->iso = hpsb_iso_recv_init(host, (ETHER1394_GASP_BUFFERS * 2 * | 636 | priv->iso = hpsb_iso_recv_init(host, |
639 | (1 << (host->csr.max_rec + 1))), | 637 | ETHER1394_ISO_BUF_SIZE, |
640 | ETHER1394_GASP_BUFFERS, | 638 | ETHER1394_GASP_BUFFERS, |
641 | priv->broadcast_channel, | 639 | priv->broadcast_channel, |
642 | HPSB_ISO_DMA_PACKET_PER_BUFFER, | 640 | HPSB_ISO_DMA_PACKET_PER_BUFFER, |
@@ -1770,7 +1768,7 @@ fail: | |||
1770 | static void ether1394_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) | 1768 | static void ether1394_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) |
1771 | { | 1769 | { |
1772 | strcpy (info->driver, driver_name); | 1770 | strcpy (info->driver, driver_name); |
1773 | strcpy (info->version, "$Rev: 1264 $"); | 1771 | strcpy (info->version, "$Rev: 1312 $"); |
1774 | /* FIXME XXX provide sane businfo */ | 1772 | /* FIXME XXX provide sane businfo */ |
1775 | strcpy (info->bus_info, "ieee1394"); | 1773 | strcpy (info->bus_info, "ieee1394"); |
1776 | } | 1774 | } |
diff --git a/drivers/ieee1394/eth1394.h b/drivers/ieee1394/eth1394.h index ed8f1c4b7fd8..a77213cfc483 100644 --- a/drivers/ieee1394/eth1394.h +++ b/drivers/ieee1394/eth1394.h | |||
@@ -44,6 +44,12 @@ | |||
44 | 44 | ||
45 | #define ETHER1394_GASP_BUFFERS 16 | 45 | #define ETHER1394_GASP_BUFFERS 16 |
46 | 46 | ||
47 | /* rawiso buffer size - due to a limitation in rawiso, we must limit each | ||
48 | * GASP buffer to be less than PAGE_SIZE. */ | ||
49 | #define ETHER1394_ISO_BUF_SIZE ETHER1394_GASP_BUFFERS * \ | ||
50 | min((unsigned int)PAGE_SIZE, \ | ||
51 | 2 * (1U << (priv->host->csr.max_rec + 1))) | ||
52 | |||
47 | /* Node set == 64 */ | 53 | /* Node set == 64 */ |
48 | #define NODE_SET (ALL_NODES + 1) | 54 | #define NODE_SET (ALL_NODES + 1) |
49 | 55 | ||