From owner-svn-src-stable@FreeBSD.ORG Thu Feb 28 16:56:10 2013 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id EC011276; Thu, 28 Feb 2013 16:56:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id D0D3118C; Thu, 28 Feb 2013 16:56:10 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r1SGuALR069607; Thu, 28 Feb 2013 16:56:10 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r1SGu9Rr069596; Thu, 28 Feb 2013 16:56:09 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201302281656.r1SGu9Rr069596@svn.freebsd.org> From: Hans Petter Selasky Date: Thu, 28 Feb 2013 16:56:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r247475 - in stable/9: lib/libusb sys/dev/usb usr.sbin/usbconfig X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Feb 2013 16:56:11 -0000 Author: hselasky Date: Thu Feb 28 16:56:08 2013 New Revision: 247475 URL: http://svnweb.freebsd.org/changeset/base/247475 Log: MFC r246789: Add USB API to read power draw on USB devices. Update usbconfig to print power draw on USB devices. Modified: stable/9/lib/libusb/Makefile stable/9/lib/libusb/libusb20.3 stable/9/lib/libusb/libusb20.c stable/9/lib/libusb/libusb20.h stable/9/lib/libusb/libusb20_int.h stable/9/lib/libusb/libusb20_ugen20.c stable/9/sys/dev/usb/usb_generic.c stable/9/sys/dev/usb/usb_ioctl.h stable/9/usr.sbin/usbconfig/dump.c Directory Properties: stable/9/lib/ (props changed) stable/9/lib/libusb/ (props changed) stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) stable/9/usr.sbin/ (props changed) Modified: stable/9/lib/libusb/Makefile ============================================================================== --- stable/9/lib/libusb/Makefile Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/Makefile Thu Feb 28 16:56:08 2013 (r247475) @@ -189,6 +189,7 @@ MLINKS += libusb20.3 libusb20_dev_reset. MLINKS += libusb20.3 libusb20_dev_check_connected.3 MLINKS += libusb20.3 libusb20_dev_set_power_mode.3 MLINKS += libusb20.3 libusb20_dev_get_power_mode.3 +MLINKS += libusb20.3 libusb20_dev_get_power_usage.3 MLINKS += libusb20.3 libusb20_dev_set_alt_index.3 MLINKS += libusb20.3 libusb20_dev_get_device_desc.3 MLINKS += libusb20.3 libusb20_dev_alloc_config.3 Modified: stable/9/lib/libusb/libusb20.3 ============================================================================== --- stable/9/lib/libusb/libusb20.3 Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/libusb20.3 Thu Feb 28 16:56:08 2013 (r247475) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 14, 2010 +.Dd February 14, 2013 .Dt LIBUSB20 3 .Os .Sh NAME @@ -148,6 +148,8 @@ USB access library (libusb -lusb) .Fn libusb20_dev_set_power_mode "struct libusb20_device *pdev" "uint8_t power_mode" .Ft uint8_t .Fn libusb20_dev_get_power_mode "struct libusb20_device *pdev" +.Ft uint16_t +.Fn libusb20_dev_get_power_usage "struct libusb20_device *pdev" .Ft int .Fn libusb20_dev_set_alt_index "struct libusb20_device *pdev" "uint8_t iface_index" "uint8_t alt_index" .Ft struct LIBUSB20_DEVICE_DESC_DECODED * @@ -728,6 +730,12 @@ USB device. . .Pp . +.Fn libusb20_dev_get_power_usage +returns the reported power usage in milliamps for the given USB device. +A power usage of zero typically means that the device is self powered. +. +.Pp +. .Fn libusb20_dev_set_alt_index will try to set the given alternate index for the given USB interface index. Modified: stable/9/lib/libusb/libusb20.c ============================================================================== --- stable/9/lib/libusb/libusb20.c Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/libusb20.c Thu Feb 28 16:56:08 2013 (r247475) @@ -71,6 +71,7 @@ dummy_callback(struct libusb20_transfer #define dummy_check_connected (void *)dummy_int #define dummy_set_power_mode (void *)dummy_int #define dummy_get_power_mode (void *)dummy_int +#define dummy_get_power_usage (void *)dummy_int #define dummy_kernel_driver_active (void *)dummy_int #define dummy_detach_kernel_driver (void *)dummy_int #define dummy_do_request_sync (void *)dummy_int @@ -710,6 +711,18 @@ libusb20_dev_get_power_mode(struct libus return (power_mode); } +uint16_t +libusb20_dev_get_power_usage(struct libusb20_device *pdev) +{ + int error; + uint16_t power_usage; + + error = pdev->methods->get_power_usage(pdev, &power_usage); + if (error) + power_usage = 0; + return (power_usage); +} + int libusb20_dev_set_alt_index(struct libusb20_device *pdev, uint8_t ifaceIndex, uint8_t altIndex) { Modified: stable/9/lib/libusb/libusb20.h ============================================================================== --- stable/9/lib/libusb/libusb20.h Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/libusb20.h Thu Feb 28 16:56:08 2013 (r247475) @@ -254,6 +254,7 @@ int libusb20_dev_reset(struct libusb20_d int libusb20_dev_check_connected(struct libusb20_device *pdev); int libusb20_dev_set_power_mode(struct libusb20_device *pdev, uint8_t power_mode); uint8_t libusb20_dev_get_power_mode(struct libusb20_device *pdev); +uint16_t libusb20_dev_get_power_usage(struct libusb20_device *pdev); int libusb20_dev_set_alt_index(struct libusb20_device *pdev, uint8_t iface_index, uint8_t alt_index); int libusb20_dev_get_info(struct libusb20_device *pdev, struct usb_device_info *pinfo); int libusb20_dev_get_iface_desc(struct libusb20_device *pdev, uint8_t iface_index, char *buf, uint8_t len); Modified: stable/9/lib/libusb/libusb20_int.h ============================================================================== --- stable/9/lib/libusb/libusb20_int.h Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/libusb20_int.h Thu Feb 28 16:56:08 2013 (r247475) @@ -105,6 +105,7 @@ typedef int (libusb20_process_t)(struct typedef int (libusb20_reset_device_t)(struct libusb20_device *pdev); typedef int (libusb20_set_power_mode_t)(struct libusb20_device *pdev, uint8_t power_mode); typedef int (libusb20_get_power_mode_t)(struct libusb20_device *pdev, uint8_t *power_mode); +typedef int (libusb20_get_power_usage_t)(struct libusb20_device *pdev, uint16_t *power_usage); typedef int (libusb20_set_alt_index_t)(struct libusb20_device *pdev, uint8_t iface_index, uint8_t alt_index); typedef int (libusb20_set_config_index_t)(struct libusb20_device *pdev, uint8_t index); typedef int (libusb20_check_connected_t)(struct libusb20_device *pdev); @@ -127,6 +128,7 @@ typedef void (libusb20_tr_cancel_async_t m(n, check_connected) \ m(n, set_power_mode) \ m(n, get_power_mode) \ + m(n, get_power_usage) \ m(n, set_alt_index) \ m(n, set_config_index) \ m(n, tr_cancel_async) \ Modified: stable/9/lib/libusb/libusb20_ugen20.c ============================================================================== --- stable/9/lib/libusb/libusb20_ugen20.c Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/lib/libusb/libusb20_ugen20.c Thu Feb 28 16:56:08 2013 (r247475) @@ -69,6 +69,7 @@ static libusb20_reset_device_t ugen20_re static libusb20_check_connected_t ugen20_check_connected; static libusb20_set_power_mode_t ugen20_set_power_mode; static libusb20_get_power_mode_t ugen20_get_power_mode; +static libusb20_get_power_usage_t ugen20_get_power_usage; static libusb20_kernel_driver_active_t ugen20_kernel_driver_active; static libusb20_detach_kernel_driver_t ugen20_detach_kernel_driver; static libusb20_do_request_sync_t ugen20_do_request_sync; @@ -639,6 +640,18 @@ ugen20_get_power_mode(struct libusb20_de } static int +ugen20_get_power_usage(struct libusb20_device *pdev, uint16_t *power_usage) +{ + int temp; + + if (ioctl(pdev->file_ctrl, USB_GET_POWER_USAGE, &temp)) { + return (LIBUSB20_ERROR_OTHER); + } + *power_usage = temp; + return (0); /* success */ +} + +static int ugen20_kernel_driver_active(struct libusb20_device *pdev, uint8_t iface_index) { Modified: stable/9/sys/dev/usb/usb_generic.c ============================================================================== --- stable/9/sys/dev/usb/usb_generic.c Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/sys/dev/usb/usb_generic.c Thu Feb 28 16:56:08 2013 (r247475) @@ -1831,6 +1831,17 @@ ugen_get_power_mode(struct usb_fifo *f) } static int +ugen_get_power_usage(struct usb_fifo *f) +{ + struct usb_device *udev = f->udev; + + if (udev == NULL) + return (0); + + return (udev->power); +} + +static int ugen_do_port_feature(struct usb_fifo *f, uint8_t port_no, uint8_t set, uint16_t feature) { @@ -2192,6 +2203,10 @@ ugen_ioctl_post(struct usb_fifo *f, u_lo *u.pint = ugen_get_power_mode(f); break; + case USB_GET_POWER_USAGE: + *u.pint = ugen_get_power_usage(f); + break; + case USB_SET_PORT_ENABLE: error = ugen_do_port_feature(f, *u.pint, 1, UHF_PORT_ENABLE); Modified: stable/9/sys/dev/usb/usb_ioctl.h ============================================================================== --- stable/9/sys/dev/usb/usb_ioctl.h Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/sys/dev/usb/usb_ioctl.h Thu Feb 28 16:56:08 2013 (r247475) @@ -270,7 +270,8 @@ struct usb_gen_quirk { #define USB_IFACE_DRIVER_DETACH _IOW ('U', 125, int) #define USB_GET_PLUGTIME _IOR ('U', 126, uint32_t) #define USB_READ_DIR _IOW ('U', 127, struct usb_read_dir) -/* 128 - 135 unused */ +/* 128 - 134 unused */ +#define USB_GET_POWER_USAGE _IOR ('U', 135, int) #define USB_SET_TX_FORCE_SHORT _IOW ('U', 136, int) #define USB_SET_TX_TIMEOUT _IOW ('U', 137, int) #define USB_GET_TX_FRAME_SIZE _IOR ('U', 138, int) Modified: stable/9/usr.sbin/usbconfig/dump.c ============================================================================== --- stable/9/usr.sbin/usbconfig/dump.c Thu Feb 28 16:43:41 2013 (r247474) +++ stable/9/usr.sbin/usbconfig/dump.c Thu Feb 28 16:56:08 2013 (r247475) @@ -225,13 +225,17 @@ dump_device_info(struct libusb20_device { char buf[128]; uint8_t n; + unsigned int usage; - printf("%s, cfg=%u md=%s spd=%s pwr=%s\n", + usage = libusb20_dev_get_power_usage(pdev); + + printf("%s, cfg=%u md=%s spd=%s pwr=%s (%umA)\n", libusb20_dev_get_desc(pdev), libusb20_dev_get_config_index(pdev), dump_mode(libusb20_dev_get_mode(pdev)), dump_speed(libusb20_dev_get_speed(pdev)), - dump_power_mode(libusb20_dev_get_power_mode(pdev))); + dump_power_mode(libusb20_dev_get_power_mode(pdev)), + usage); if (!show_ifdrv) return;