Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Nov 1999 21:35:32 -0500
From:      Christopher Masto <chris@netmonger.net>
To:        Warner Losh <imp@village.org>
Cc:        Nick Hibma <hibma@skylink.it>, Mike Smith <msmith@FreeBSD.ORG>, FreeBSD CURRENT Mailing List <current@FreeBSD.ORG>
Subject:   Re: PCCARD eject freeze (was Re: your mail)
Message-ID:  <19991130213532.A2764@netmonger.net>
In-Reply-To: <199911302352.QAA06230@harmony.village.org>; from Warner Losh on Tue, Nov 30, 1999 at 04:52:33PM -0700
References:  <19991130160829.A13848@netmonger.net> <199911302112.OAA05264@harmony.village.org> <19991130165407.A467@netmonger.net> <199911302159.OAA05508@harmony.village.org> <19991130173920.A22943@netmonger.net> <199911302304.QAA05780@harmony.village.org> <19991130181313.B24151@netmonger.net> <199911302319.QAA05945@harmony.village.org> <19991130182738.A25453@netmonger.net> <199911302352.QAA06230@harmony.village.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Nov 30, 1999 at 04:52:33PM -0700, Warner Losh wrote:
> It would help me if you could send me your patches...

Well, here's all I've got.  It's basically just a sloppy version of
what you suggested.

Index: pccard.c
===================================================================
RCS file: /usr/local/ncvs/freebsd/src/sys/pccard/pccard.c,v
retrieving revision 1.93
diff -u -r1.93 pccard.c
--- pccard.c	1999/11/20 05:01:59	1.93
+++ pccard.c	1999/12/01 02:33:52
@@ -177,8 +177,10 @@
 disable_slot(struct slot *slt)
 {
 	device_t pccarddev;
+	device_t *kids;
+	int nkids;
 	struct pccard_devinfo *devi;
-	int i;
+	int i, ret;
 
 	/*
 	 * Unload all the drivers on this slot. Note we can't
@@ -191,14 +193,26 @@
 	 * driver is accessing the device and it is removed, then
 	 * all bets are off...
 	 */
-	pccarddev = devclass_get_device(pccard_devclass, 0);
-	for (devi = slt->devices; devi; devi = devi->next) {
-		if (devi->isahd.id_device != 0) {
-			device_delete_child(pccarddev, devi->isahd.id_device);
-			devi->isahd.id_device = 0;
-		}
+	pccarddev = devclass_get_device(pccard_devclass, slt->slotnum);
+	device_get_children(pccarddev, &kids, &nkids);
+	printf("pccard: %d kids\n", nkids);
+	for (i = 0; i < nkids; i++) {
+	  printf("pccard: deleting kid %d\n", i);
+	  if (ret=device_delete_child(pccarddev, kids[i]))
+	    printf("pccard: delete kid %d failed: %d\n", i, ret);
 	}
+	/*	for (devi = slt->devices; devi; devi = devi->next) {
+	  printf("pccard: considering delete\n");
+	        if (devi->isahd.id_device != 0) {
+	          printf("pccard: doing the delete\n");
+	        	if (device_delete_child(pccarddev, devi->isahd.id_device))
+	        	  printf("pccard: device_delete_child failed\n");
+	        	devi->isahd.id_device = 0;
+	        }
+	}
+	*/
 
+	printf("pccard: ready to power off\n");
 	/* Power off the slot 1/2 second after removal of the card */
 	slt->poff_ch = timeout(power_off_slot, (caddr_t)slt, hz / 2);
 	slt->pwr_off_pending = 1;


-- 
Christopher Masto         Senior Network Monkey      NetMonger Communications
chris@netmonger.net        info@netmonger.net        http://www.netmonger.net

Free yourself, free your machine, free the daemon -- http://www.freebsd.org/


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991130213532.A2764>