Hi,
this fixes the coherency problems in catc.
Regards
Oliver
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
[EMAIL PROTECTED], 2003-08-05 19:49:14+02:00, [EMAIL PROTECTED]
- fix dma cache coherency issues
catc.c | 97 +++++++++++++++++++++++++++++++++++++++--------------------------
1 files changed, 59 insertions(+), 38 deletions(-)
diff -Nru a/drivers/usb/net/catc.c b/drivers/usb/net/catc.c
--- a/drivers/usb/net/catc.c Tue Aug 5 19:49:57 2003
+++ b/drivers/usb/net/catc.c Tue Aug 5 19:49:57 2003
@@ -7,7 +7,7 @@
*
* Based on the work of
* Donald Becker
- *
+ *
* Old chipset support added by Simon Evans <[EMAIL PROTECTED]> 2002
* - adds support for Belkin F5U011
*/
@@ -15,18 +15,18 @@
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ *
* Should you need to contact me, the author, you can do so either by
* e-mail - mail your message to <[EMAIL PROTECTED]>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -67,7 +67,7 @@
/*
* Some defines.
- */
+ */
#define STATS_UPDATE (HZ) /* Time between stats updates */
#define TX_TIMEOUT (5*HZ) /* Max time the queue can be stopped */
@@ -172,8 +172,8 @@
u8 tx_buf[2][TX_MAX_BURST * (PKT_SZ + 2)];
u8 rx_buf[RX_MAX_BURST * (PKT_SZ + 2)];
- u8 irq_buf[2];
- u8 ctrl_buf[64];
+ u8 * irq_buf;
+ u8 * ctrl_buf;//[64];
struct usb_ctrlrequest ctrl_dr;
struct timer_list timer;
@@ -637,7 +637,7 @@
if (netdev->flags & IFF_PROMISC) {
memset(catc->multicast, 0xff, 64);
rx |= (!catc->is_f5u011) ? RxPromisc : AltRxPromisc;
- }
+ }
if (netdev->flags & IFF_ALLMULTI) {
memset(catc->multicast, 0xff, 64);
@@ -671,7 +671,7 @@
{
struct catc *catc = dev->priv;
u32 cmd;
-
+
if (get_user(cmd, (u32 *)useraddr))
return -EFAULT;
@@ -690,17 +690,17 @@
/* get settings */
case ETHTOOL_GSET:
if (catc->is_f5u011) {
- struct ethtool_cmd ecmd = { ETHTOOL_GSET,
- SUPPORTED_10baseT_Half |
SUPPORTED_TP,
- ADVERTISED_10baseT_Half |
ADVERTISED_TP,
- SPEED_10,
- DUPLEX_HALF,
- PORT_TP,
- 0,
- XCVR_INTERNAL,
- AUTONEG_DISABLE,
- 1,
- 1
+ struct ethtool_cmd ecmd = { ETHTOOL_GSET,
+ SUPPORTED_10baseT_Half |
SUPPORTED_TP,
+ ADVERTISED_10baseT_Half |
ADVERTISED_TP,
+ SPEED_10,
+ DUPLEX_HALF,
+ PORT_TP,
+ 0,
+ XCVR_INTERNAL,
+ AUTONEG_DISABLE,
+ 1,
+ 1
};
if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
return -EFAULT;
@@ -718,7 +718,7 @@
return 0;
}
}
-
+
return -EOPNOTSUPP;
}
@@ -797,8 +797,23 @@
memset(catc, 0, sizeof(struct catc));
+ catc->irq_buf = kmalloc(2, GFP_KERNEL);
+ if (!catc->irq_buf) {
+ kfree(catc);
+ return -ENOMEM;
+ }
+
+ catc->ctrl_buf = kmalloc(64, GFP_KERNEL);
+ if (!catc->ctrl_buf) {
+ kfree(catc->irq_buf);
+ kfree(catc);
+ return -ENOMEM;
+ }
+
netdev = alloc_etherdev(0);
if (!netdev) {
+ kfree(catc->irq_buf);
+ kfree(catc->ctrl_buf);
kfree(catc);
return -EIO;
}
@@ -827,7 +842,7 @@
catc->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
catc->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
catc->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
- if ((!catc->ctrl_urb) || (!catc->tx_urb) ||
+ if ((!catc->ctrl_urb) || (!catc->tx_urb) ||
(!catc->rx_urb) || (!catc->irq_urb)) {
err("No free urbs available.");
if (catc->ctrl_urb)
@@ -839,6 +854,8 @@
if (catc->irq_urb)
usb_free_urb(catc->irq_urb);
kfree(netdev);
+ kfree(catc->irq_buf);
+ kfree(catc->ctrl_buf);
kfree(catc);
return -ENOMEM;
}
@@ -847,13 +864,13 @@
if (usbdev->descriptor.idVendor == 0x0423 && usbdev->descriptor.idProduct ==
0xa &&
catc->usbdev->descriptor.bcdDevice == 0x0130 ) {
dbg("Testing for f5u011");
- catc->is_f5u011 = 1;
+ catc->is_f5u011 = 1;
atomic_set(&catc->recq_sz, 0);
pktsz = RX_PKT_SZ;
} else {
pktsz = RX_MAX_BURST * (PKT_SZ + 2);
}
-
+
usb_fill_control_urb(catc->ctrl_urb, usbdev, usb_sndctrlpipe(usbdev, 0),
NULL, NULL, 0, catc_ctrl_done, catc);
@@ -871,10 +888,10 @@
i = 0x12345678;
catc_write_mem(catc, 0x7a80, &i, 4);
- i = 0x87654321;
+ i = 0x87654321;
catc_write_mem(catc, 0xfa80, &i, 4);
catc_read_mem(catc, 0x7a80, &i, 4);
-
+
switch (i) {
case 0x12345678:
catc_set_reg(catc, TxBufCount, 8);
@@ -889,31 +906,31 @@
dbg("32k Memory\n");
break;
}
-
+
dbg("Getting MAC from SEEROM.");
-
+
catc_get_mac(catc, netdev->dev_addr);
-
+
dbg("Setting MAC into registers.");
-
+
for (i = 0; i < 6; i++)
catc_set_reg(catc, StationAddr0 - i, netdev->dev_addr[i]);
-
+
dbg("Filling the multicast list.");
-
+
memset(broadcast, 0xff, 6);
catc_multicast(broadcast, catc->multicast);
catc_multicast(netdev->dev_addr, catc->multicast);
catc_write_mem(catc, 0xfa80, catc->multicast, 64);
-
+
dbg("Clearing error counters.");
-
+
for (i = 0; i < 8; i++)
catc_set_reg(catc, EthStats + i, 0);
catc->last_stats = jiffies;
-
+
dbg("Enabling.");
-
+
catc_set_reg(catc, MaxBurst, RX_MAX_BURST);
catc_set_reg(catc, OpModes, OpTxMerge | OpRxMerge | OpLenInclude |
Op3MemWaits);
catc_set_reg(catc, LEDCtrl, LEDLink);
@@ -922,7 +939,7 @@
dbg("Performing reset\n");
catc_reset(catc);
catc_get_mac(catc, netdev->dev_addr);
-
+
dbg("Setting RX Mode");
catc->rxmode[0] = RxEnable | RxPolarity | RxMultiCast;
catc->rxmode[1] = 0;
@@ -944,6 +961,8 @@
usb_free_urb(catc->rx_urb);
usb_free_urb(catc->irq_urb);
kfree(netdev);
+ kfree(catc->irq_buf);
+ kfree(catc->ctrl_buf);
kfree(catc);
return -EIO;
}
@@ -962,6 +981,8 @@
usb_free_urb(catc->rx_urb);
usb_free_urb(catc->irq_urb);
kfree(catc->netdev);
+ kfree(catc->irq_buf);
+ kfree(catc->ctrl_buf);
kfree(catc);
}
}
===================================================================
This BitKeeper patch contains the following changesets:
1.2153
## Wrapped with gzip_uu ##
begin 664 bkpatch20743
M'XL(`$7N+S\``ZU6:V_:2!3];/[EMAIL PROTECTED],WX.$572X"2H-"[EMAIL PROTECTED]:6F0L:,
[EMAIL PROTECTED]>K^][V>B1-HTRB;70MQ?>:^CN<>C_P:+G.1=;4TCOX6F?X:SM.\
MZ&IXORF7(FDGHER7FW::7:-ODJ;HZZS2C>BHA,XL$R+OE/FBQ=J6CC%COPA6
[EMAIL PROTECTED]&V<;]2W'X576WBG5T.CR>ZWNO!R<I/KL54%-#KZ8OUT;(4<7N=I?ZJ
M;E?=NRM&"*646<2P;&I5S#4,LZ(V62SQ=LD<'BYLKBM"1X\PWRUE$)>8U*&<
M\LIFW&)Z'VB;4<L`8G2(VR$64-XU>9>:;PCK$@)[EMAIL PROTECTED]([EMAIL PROTECTED]/8`6
MA-$-+#<^!'ZP$A"D*Y&))+B%*,]+D>OOP3:HP?7QP^[IK7]YZ3KQB?[V$<K+
MK'Y..<[EMAIL PROTECTED]<3<(90>Z.RRLK"[EMAIL PROTECTED]/[LU,R$<56V7H.%G5,
M3EEE<LXL*8K'[EMAIL PROTECTED](^**`_\.&I'Q>?K3%Q_>9*M8Q"TCDDJ
MZC+B2M68[F^:8<_0C,6A9;C_HVK\.$Z1JX!%&8;X`!"F&8HG*;(TABA!M/&+
[EMAIL PROTECTED]'Q+4I)[?H(6MEW^4-IC/[EMAIL PROTECTED]>(K$\)4'[EMAIL PROTECTED]/
M\>R`:1H6W_T,45HF2\GR$$2$_DR>(C5K!FDH,X91())<'$":Z7TFZ[.F/K,D
MM!K()>1WT)'[EMAIL PROTECTED](!O'`H9T'!N-5KI(*<J^S7'[EMAIL PROTECTED]&2QQ)W.9]O\<JCW
M;5,644;[B0N.*1>DN4+,#:"RC;2:[EMAIL PROTECTED]&)5I&D\#S9+$/5?#WZ`-SN?
MC4;[EMAIL PROTECTED]/[EMAIL PROTECTED]/Q>S^;D?AU!M.6;C[83C_D=O,AM,
M?\_8\NRF3,>>C-Y>ZU^.A]ZG^?GQ\'1[N6[Y2_9.VJ>3CY/YX&+F32Z.ASNT
M+F>C"^]LWA],C]\-O6T7W0$X'4;E>*2YPAN.<S-TK19?Z^W=8'#3UANI]#UV
M`&>GX_E[[.D-]W%B40A[KW:B]^$']EB'J+&]VE%':9DHRBR!EG<Q^N!].*R'
M>-5T:>:]U<8VG^C3Q/_:Z('!X3,)#%Q":Q4^H\A66Q2D:TA!*B.Y[9`KL\4^
M5-4]X^*F6<(<\X4M+=52&JT94#X/K1*/*]P[*H-L%62K]\)5[XDRFA9A&+EQ
M'=LR#2;C'4?YG;MXSB261F*5S\T&J_J\J<]=A5V%.9%R4D9B0V&CP:["3;PZ
MJI21V%38;+"M\%T_KLX:97!^W+1?LID#;ILOR;O_IL)/A&"=EYL>\<W0"?U`
*_P>X5)`VSPD`````
`
end
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel