Commit 3ae3d0d4 authored by Jody McIntyre's avatar Jody McIntyre Committed by Linus Torvalds

[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: default avatarJody McIntyre <scjody@steamballoon.com>
Cc: Ben Collins <bcollins@debian.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 998150c3
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
#define TRACE() printk(KERN_ERR "%s:%s[%d] ---- TRACE\n", driver_name, __FUNCTION__, __LINE__) #define TRACE() printk(KERN_ERR "%s:%s[%d] ---- TRACE\n", driver_name, __FUNCTION__, __LINE__)
static char version[] __devinitdata = static char version[] __devinitdata =
"$Rev: 1264 $ Ben Collins <bcollins@debian.org>"; "$Rev: 1312 $ Ben Collins <bcollins@debian.org>";
struct fragment_info { struct fragment_info {
struct list_head list; struct list_head list;
...@@ -221,9 +221,7 @@ static int ether1394_open (struct net_device *dev) ...@@ -221,9 +221,7 @@ static int ether1394_open (struct net_device *dev)
if (priv->bc_state == ETHER1394_BC_ERROR) { if (priv->bc_state == ETHER1394_BC_ERROR) {
/* we'll try again */ /* we'll try again */
priv->iso = hpsb_iso_recv_init(priv->host, priv->iso = hpsb_iso_recv_init(priv->host,
ETHER1394_GASP_BUFFERS * 2 * ETHER1394_ISO_BUF_SIZE,
(1 << (priv->host->csr.max_rec +
1)),
ETHER1394_GASP_BUFFERS, ETHER1394_GASP_BUFFERS,
priv->broadcast_channel, priv->broadcast_channel,
HPSB_ISO_DMA_PACKET_PER_BUFFER, HPSB_ISO_DMA_PACKET_PER_BUFFER,
...@@ -635,8 +633,8 @@ static void ether1394_add_host (struct hpsb_host *host) ...@@ -635,8 +633,8 @@ static void ether1394_add_host (struct hpsb_host *host)
* be checked when the eth device is opened. */ * be checked when the eth device is opened. */
priv->broadcast_channel = host->csr.broadcast_channel & 0x3f; priv->broadcast_channel = host->csr.broadcast_channel & 0x3f;
priv->iso = hpsb_iso_recv_init(host, (ETHER1394_GASP_BUFFERS * 2 * priv->iso = hpsb_iso_recv_init(host,
(1 << (host->csr.max_rec + 1))), ETHER1394_ISO_BUF_SIZE,
ETHER1394_GASP_BUFFERS, ETHER1394_GASP_BUFFERS,
priv->broadcast_channel, priv->broadcast_channel,
HPSB_ISO_DMA_PACKET_PER_BUFFER, HPSB_ISO_DMA_PACKET_PER_BUFFER,
...@@ -1770,7 +1768,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev) ...@@ -1770,7 +1768,7 @@ static int ether1394_tx (struct sk_buff *skb, struct net_device *dev)
static void ether1394_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) static void ether1394_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
{ {
strcpy (info->driver, driver_name); strcpy (info->driver, driver_name);
strcpy (info->version, "$Rev: 1264 $"); strcpy (info->version, "$Rev: 1312 $");
/* FIXME XXX provide sane businfo */ /* FIXME XXX provide sane businfo */
strcpy (info->bus_info, "ieee1394"); strcpy (info->bus_info, "ieee1394");
} }
......
...@@ -44,6 +44,12 @@ ...@@ -44,6 +44,12 @@
#define ETHER1394_GASP_BUFFERS 16 #define ETHER1394_GASP_BUFFERS 16
/* rawiso buffer size - due to a limitation in rawiso, we must limit each
* GASP buffer to be less than PAGE_SIZE. */
#define ETHER1394_ISO_BUF_SIZE ETHER1394_GASP_BUFFERS * \
min((unsigned int)PAGE_SIZE, \
2 * (1U << (priv->host->csr.max_rec + 1)))
/* Node set == 64 */ /* Node set == 64 */
#define NODE_SET (ALL_NODES + 1) #define NODE_SET (ALL_NODES + 1)
......
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