@@ -143,6 +143,12 @@ config APNE
To compile this driver as a module, choose M here: the module
will be called apne.
+ The driver also supports 10/100Mbit cards (e.g. Netgear FA411,
+ CNet Singlepoint). To activate 100 Mbit support, use the kernel
+ option apne.100mbit=1 (builtin) at boot time, or the apne.100mbit
+ module parameter. The driver will attempt to autoprobe 100 Mbit
+ mode. so this option may not be necessary.
+
config PCMCIA_PCNET
tristate "NE2000 compatible PCMCIA support"
depends on PCMCIA
@@ -38,6 +38,7 @@
#include <linux/etherdevice.h>
#include <linux/interrupt.h>
#include <linux/jiffies.h>
+#include <pcmcia/cistpl.h>
#include <asm/io.h>
#include <asm/setup.h>
@@ -120,6 +121,10 @@ static u32 apne_msg_enable;
module_param_named(msg_enable, apne_msg_enable, uint, 0444);
MODULE_PARM_DESC(msg_enable, "Debug message level (see linux/netdevice.h for bitmap)");
+static bool apne_100_mbit;
+module_param_named(100_mbit, apne_100_mbit, bool, 0444);
+MODULE_PARM_DESC(100_mbit, "Enable 100 Mbit support");
+
struct net_device * __init apne_probe(int unit)
{
struct net_device *dev;
@@ -139,6 +144,11 @@ struct net_device * __init apne_probe(int unit)
if ( !(AMIGAHW_PRESENT(PCMCIA)) )
return ERR_PTR(-ENODEV);
+ if (apne_100_mbit)
+ isa_type = ISA_TYPE_AG16;
+ else
+ isa_type = ISA_TYPE_AG;
+
pr_info("Looking for PCMCIA ethernet card : ");
/* check if a card is inserted */
@@ -172,6 +182,12 @@ struct net_device * __init apne_probe(int unit)
pr_cont("ethernet PCMCIA card inserted\n");
+ if (pcmcia_is_16bit()) {
+ pr_info("16-bit PCMCIA card detected!\n");
+ isa_type = ISA_TYPE_AG16;
+ apne_100_mbit = 1;
+ }
+
if (!init_pcmcia()) {
/* XXX: shouldn't we re-enable irq here? */
free_netdev(dev);
@@ -590,6 +606,16 @@ static int init_pcmcia(void)
#endif
u_long offset;
+ /* reset card (idea taken from CardReset by Artur Pogoda) */
+ if (isa_type == ISA_TYPE_AG16) {
+ u_char tmp = gayle.intreq;
+
+ gayle.intreq = 0xff;
+ mdelay(1);
+ gayle.intreq = tmp;
+ mdelay(300);
+ }
+
pcmcia_reset();
pcmcia_program_voltage(PCMCIA_0V);
pcmcia_access_speed(PCMCIA_SPEED_250NS);