Module Name:    src
Committed By:   mrg
Date:           Sat Feb 25 20:47:32 UTC 2012

Modified Files:
        src/sys/dev/usb [jmcneill-usbmp]: usbdi_util.c usbdi_util.h

Log Message:
implement cv/mutex based usb_detach_wait/wakeup().


To generate a diff of this commit:
cvs rdiff -u -r1.55.12.2 -r1.55.12.3 src/sys/dev/usb/usbdi_util.c
cvs rdiff -u -r1.41 -r1.41.16.1 src/sys/dev/usb/usbdi_util.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/usbdi_util.c
diff -u src/sys/dev/usb/usbdi_util.c:1.55.12.2 src/sys/dev/usb/usbdi_util.c:1.55.12.3
--- src/sys/dev/usb/usbdi_util.c:1.55.12.2	Thu Feb 23 09:25:03 2012
+++ src/sys/dev/usb/usbdi_util.c	Sat Feb 25 20:47:32 2012
@@ -1,12 +1,12 @@
-/*	$NetBSD: usbdi_util.c,v 1.55.12.2 2012/02/23 09:25:03 mrg Exp $	*/
+/*	$NetBSD: usbdi_util.c,v 1.55.12.3 2012/02/25 20:47:32 mrg Exp $	*/
 
 /*
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
  * by Lennart Augustsson (lenn...@augustsson.net) at
- * Carlstedt Research & Technology.
+ * Carlstedt Research & Technology and Matthew R. Green (m...@eterna.com.au).
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.55.12.2 2012/02/23 09:25:03 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.55.12.3 2012/02/25 20:47:32 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -514,6 +514,23 @@ usbd_intr_transfer(usbd_xfer_handle xfer
 }
 
 void
+usb_detach_waitcv(device_t dv, kcondvar_t *cv, kmutex_t *lock)
+{
+	DPRINTF(("usb_detach_waitcv: waiting for %s\n", device_xname(dv)));
+	if (cv_timedwait(cv, lock, hz * 60))	// dv, PZERO, "usbdet", hz * 60
+		printf("usb_detach_waitcv: %s didn't detach\n",
+		        device_xname(dv));
+	DPRINTF(("usb_detach_waitcv: %s done\n", device_xname(dv)));
+}
+
+void
+usb_detach_broadcast(device_t dv, kcondvar_t *cv)
+{
+	DPRINTF(("usb_detach_broadcast: for %s\n", device_xname(dv)));
+	cv_broadcast(cv);
+}
+
+void
 usb_detach_wait(device_t dv)
 {
 	DPRINTF(("usb_detach_wait: waiting for %s\n", device_xname(dv)));

Index: src/sys/dev/usb/usbdi_util.h
diff -u src/sys/dev/usb/usbdi_util.h:1.41 src/sys/dev/usb/usbdi_util.h:1.41.16.1
--- src/sys/dev/usb/usbdi_util.h:1.41	Thu Nov 12 08:32:57 2009
+++ src/sys/dev/usb/usbdi_util.h	Sat Feb 25 20:47:32 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi_util.h,v 1.41 2009/11/12 08:32:57 uebayasi Exp $	*/
+/*	$NetBSD: usbdi_util.h,v 1.41.16.1 2012/02/25 20:47:32 mrg Exp $	*/
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -86,6 +86,12 @@ usbd_status usbd_intr_transfer(usbd_xfer
 void usb_detach_wait(device_t);
 void usb_detach_wakeup(device_t);
 
+/*
+ * MPSAFE versions - mutex must be at IPL_USB.
+ */
+void usb_detach_waitcv(device_t dv, kcondvar_t *, kmutex_t *);
+void usb_detach_broadcast(device_t, kcondvar_t *);
+
 
 typedef struct {
 	uByte		bLength;

Reply via email to