From owner-svn-src-head@FreeBSD.ORG Tue Feb 24 03:43:05 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BEACA106564A; Tue, 24 Feb 2009 03:43:05 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AB48D8FC15; Tue, 24 Feb 2009 03:43:05 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n1O3h5UN049830; Tue, 24 Feb 2009 03:43:05 GMT (envelope-from thompsa@svn.freebsd.org) Received: (from thompsa@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n1O3h5uV049822; Tue, 24 Feb 2009 03:43:05 GMT (envelope-from thompsa@svn.freebsd.org) Message-Id: <200902240343.n1O3h5uV049822@svn.freebsd.org> From: Andrew Thompson Date: Tue, 24 Feb 2009 03:43:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r188987 - in head: lib/libusb20 sys/dev/usb usr.sbin/usbconfig X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Feb 2009 03:43:06 -0000 Author: thompsa Date: Tue Feb 24 03:43:05 2009 New Revision: 188987 URL: http://svn.freebsd.org/changeset/base/188987 Log: MFp4 //depot/projects/usb@157974 Add support for setting and getting the USB template value through libusb20 and usbconfig. Submitted by: Hans Petter Selasky Modified: head/lib/libusb20/libusb20.3 head/lib/libusb20/libusb20.c head/lib/libusb20/libusb20_int.h head/lib/libusb20/libusb20_ugen20.c head/sys/dev/usb/usb_dev.c head/sys/dev/usb/usb_device.h head/sys/dev/usb/usb_ioctl.h head/usr.sbin/usbconfig/usbconfig.c Modified: head/lib/libusb20/libusb20.3 ============================================================================== --- head/lib/libusb20/libusb20.3 Tue Feb 24 03:41:52 2009 (r188986) +++ head/lib/libusb20/libusb20.3 Tue Feb 24 03:43:05 2009 (r188987) @@ -698,6 +698,30 @@ returned. . .Sh USB BACKEND OPERATIONS . +.Fn libusb20_be_get_template pbackend ptemp +This function will return the currently selected global USB device +side mode template into the integer pointer +.Fa ptemp . +This function returns zero on success else a LIBUSB20_ERROR value is +returned. +. +.Pp +. +.Fn libusb20_be_set_template pbackend temp +This function will set the global USB device side mode template to +.Fa temp . +The new template is not activated until after the next USB +enumeration. +The template number decides how the USB device will present itself to +the USB Host, like Mass Storage Device, USB Ethernet Device. Also see +the +.Xr usb2_template 4 +module. +This function returns zero on success else a LIBUSB20_ERROR value is +returned. +. +.Pp +. .Fn libusb20_be_get_dev_quirk pbackend index pquirk This function will return the device quirk according to .Fa index Modified: head/lib/libusb20/libusb20.c ============================================================================== --- head/lib/libusb20/libusb20.c Tue Feb 24 03:41:52 2009 (r188986) +++ head/lib/libusb20/libusb20.c Tue Feb 24 03:43:05 2009 (r188987) @@ -1165,6 +1165,23 @@ libusb20_be_get_perm(struct libusb20_bac return (pbe->methods->root_get_perm(pbe, mode)); } +int +libusb20_be_set_template(struct libusb20_backend *pbe, int temp) +{ + return (pbe->methods->root_set_template(pbe, temp)); +} + +int +libusb20_be_get_template(struct libusb20_backend *pbe, int *ptemp) +{ + int temp; + + if (ptemp == NULL) + ptemp = &temp; + + return (pbe->methods->root_get_template(pbe, ptemp)); +} + struct libusb20_device * libusb20_be_device_foreach(struct libusb20_backend *pbe, struct libusb20_device *pdev) { Modified: head/lib/libusb20/libusb20_int.h ============================================================================== --- head/lib/libusb20/libusb20_int.h Tue Feb 24 03:41:52 2009 (r188986) +++ head/lib/libusb20/libusb20_int.h Tue Feb 24 03:43:05 2009 (r188987) @@ -70,6 +70,8 @@ typedef int (libusb20_root_get_perm_t)(s typedef int (libusb20_root_set_owner_t)(struct libusb20_backend *pbe, uid_t user, gid_t group); typedef int (libusb20_root_set_perm_t)(struct libusb20_backend *pbe, mode_t mode); typedef void (libusb20_exit_backend_t)(struct libusb20_backend *pbe); +typedef int (libusb20_root_set_template_t)(struct libusb20_backend *pbe, int temp); +typedef int (libusb20_root_get_template_t)(struct libusb20_backend *pbe, int *ptemp); #define LIBUSB20_DEFINE(n,field) \ libusb20_##field##_t *field; @@ -105,6 +107,8 @@ typedef void (libusb20_exit_backend_t)(s m(n, root_get_owner) \ m(n, root_set_perm) \ m(n, root_get_perm) \ + m(n, root_set_template) \ + m(n, root_get_template) \ /* mandatory device methods */ \ m(n, open_device) \ m(n, close_device) \ Modified: head/lib/libusb20/libusb20_ugen20.c ============================================================================== --- head/lib/libusb20/libusb20_ugen20.c Tue Feb 24 03:41:52 2009 (r188986) +++ head/lib/libusb20/libusb20_ugen20.c Tue Feb 24 03:43:05 2009 (r188987) @@ -72,6 +72,8 @@ static libusb20_root_set_owner_t ugen20_ static libusb20_root_get_owner_t ugen20_root_get_owner; static libusb20_root_set_perm_t ugen20_root_set_perm; static libusb20_root_get_perm_t ugen20_root_get_perm; +static libusb20_root_set_template_t ugen20_root_set_template; +static libusb20_root_get_template_t ugen20_root_get_template; const struct libusb20_backend_methods libusb20_ugen20_backend = { LIBUSB20_BACKEND(LIBUSB20_DECLARE, ugen20) @@ -1179,3 +1181,15 @@ ugen20_root_get_perm(struct libusb20_bac return (ugen20_be_do_perm(USB_GET_ROOT_PERM, 0, 0, 0, 0, NULL, NULL, mode)); } + +static int +ugen20_root_set_template(struct libusb20_backend *pbe, int temp) +{ + return (ugen20_be_ioctl(USB_SET_TEMPLATE, &temp)); +} + +static int +ugen20_root_get_template(struct libusb20_backend *pbe, int *ptemp) +{ + return (ugen20_be_ioctl(USB_GET_TEMPLATE, ptemp)); +} Modified: head/sys/dev/usb/usb_dev.c ============================================================================== --- head/sys/dev/usb/usb_dev.c Tue Feb 24 03:41:52 2009 (r188986) +++ head/sys/dev/usb/usb_dev.c Tue Feb 24 03:43:05 2009 (r188987) @@ -1377,6 +1377,15 @@ usb2_ioctl(struct cdev *dev, u_long cmd, case USB_DEV_QUIRK_REMOVE: err = usb2_quirk_ioctl_p(cmd, data, fflag, td); break; + case USB_GET_TEMPLATE: + *(int *)data = usb2_template; + break; + case USB_SET_TEMPLATE: + err = priv_check(curthread, PRIV_ROOT); + if (err) + break; + usb2_template = *(int *)data; + break; default: err = ENOTTY; break; Modified: head/sys/dev/usb/usb_device.h ============================================================================== --- head/sys/dev/usb/usb_device.h Tue Feb 24 03:41:52 2009 (r188986) +++ head/sys/dev/usb/usb_device.h Tue Feb 24 03:43:05 2009 (r188987) @@ -155,6 +155,10 @@ struct usb2_device { char product[64]; /* product string */ }; +/* globals */ + +extern int usb2_template; + /* function prototypes */ struct usb2_device *usb2_alloc_device(device_t parent_dev, struct usb2_bus *bus, Modified: head/sys/dev/usb/usb_ioctl.h ============================================================================== --- head/sys/dev/usb/usb_ioctl.h Tue Feb 24 03:41:52 2009 (r188986) +++ head/sys/dev/usb/usb_ioctl.h Tue Feb 24 03:43:05 2009 (r188987) @@ -267,6 +267,8 @@ struct usb2_gen_quirk { #define USB_SET_PORT_DISABLE _IOW ('U', 144, int) #define USB_SET_POWER_MODE _IOW ('U', 145, int) #define USB_GET_POWER_MODE _IOR ('U', 146, int) +#define USB_SET_TEMPLATE _IOW ('U', 147, int) +#define USB_GET_TEMPLATE _IOR ('U', 148, int) /* Modem device */ #define USB_GET_CM_OVER_DATA _IOR ('U', 180, int) Modified: head/usr.sbin/usbconfig/usbconfig.c ============================================================================== --- head/usr.sbin/usbconfig/usbconfig.c Tue Feb 24 03:41:52 2009 (r188986) +++ head/usr.sbin/usbconfig/usbconfig.c Tue Feb 24 03:43:05 2009 (r188987) @@ -42,6 +42,7 @@ struct options { const char *quirkname; void *buffer; + int template; gid_t gid; uid_t uid; mode_t mode; @@ -65,6 +66,8 @@ struct options { uint8_t got_set_alt:1; uint8_t got_set_owner:1; uint8_t got_set_perm:1; + uint8_t got_set_template:1; + uint8_t got_get_template:1; uint8_t got_suspend:1; uint8_t got_resume:1; uint8_t got_reset:1; @@ -99,6 +102,8 @@ enum { T_SET_ALT, T_SET_OWNER, T_SET_PERM, + T_SET_TEMPLATE, + T_GET_TEMPLATE, T_ADD_DEVICE_QUIRK, T_REMOVE_DEVICE_QUIRK, T_SHOW_IFACE_DRIVER, @@ -130,6 +135,8 @@ static const struct token token[] = { {"set_alt", T_SET_ALT, 1}, {"set_owner", T_SET_OWNER, 1}, {"set_perm", T_SET_PERM, 1}, + {"set_template", T_SET_TEMPLATE, 1}, + {"get_template", T_GET_TEMPLATE, 0}, {"add_dev_quirk_vplh", T_ADD_DEVICE_QUIRK, 5}, {"remove_dev_quirk_vplh", T_REMOVE_DEVICE_QUIRK, 5}, {"dump_quirk_names", T_DUMP_QUIRK_NAMES, 0}, @@ -283,6 +290,8 @@ usage(void) " set_alt " "\n" " set_owner " "\n" " set_perm " "\n" + " set_template