--- airo.c.orig	2004-06-02 10:47:49.000000000 +0200
+++ airo.c	2004-06-10 18:51:05.000000000 +0200
@@ -2745,6 +2745,9 @@
 		SET_NETDEV_DEV(dev, &pci->dev);
 	}
 
+        if (test_bit(FLAG_MPI,&ai->flags))
+                reset_card (dev, 1);
+
 	rc = request_irq( dev->irq, airo_interrupt, SA_SHIRQ, dev->name, dev );
 	if (rc) {
 		printk(KERN_ERR "airo: register interrupt %d failed, rc %d\n", irq, rc );
@@ -7165,6 +7168,7 @@
 	unsigned char *iobuf;
 	int len;
 	struct airo_info *ai = dev->priv;
+        Resp rsp;
 
 	if (test_bit(FLAG_FLASHING, &ai->flags))
 		return -EIO;
@@ -7172,8 +7176,11 @@
 	switch(comp->command)
 	{
 	case AIROGCAP:      ridcode = RID_CAPABILITIES; break;
-	case AIROGCFG: writeConfigRid (ai, 1);
-			    ridcode = RID_CONFIG;       break;
+	case AIROGCFG:      ridcode = RID_CONFIG;
+                disable_MAC (ai, 1);
+                writeConfigRid (ai, 1);
+                enable_MAC (ai, &rsp, 1);
+                break;
 	case AIROGSLIST:    ridcode = RID_SSID;         break;
 	case AIROGVLIST:    ridcode = RID_APLIST;       break;
 	case AIROGDRVNAM:   ridcode = RID_DRVNAME;      break;
@@ -7561,6 +7568,11 @@
 	set_current_state (TASK_UNINTERRUPTIBLE);
 	schedule_timeout (HZ);          /* Added 12/7/00 */
 	clear_bit (FLAG_FLASHING, &ai->flags);
+        if (test_bit(FLAG_MPI, &ai->flags)) {
+                status = mpi_init_descriptors(ai);
+                if (status != SUCCESS)
+                        return STATUS;
+        }
 	status = setup_card(ai, dev->dev_addr, 1);
 
 	if (!test_bit(FLAG_MPI,&ai->flags))
