Date: Wed, 23 May 2018 20:06:04 +0000 (UTC) From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r334115 - in head: share/man/man4 sys/dev/usb/template Message-ID: <201805232006.w4NK64jS044384@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: trasz Date: Wed May 23 20:06:04 2018 New Revision: 334115 URL: https://svnweb.freebsd.org/changeset/base/334115 Log: Centralize USB device mode bus power reporting, and add hw.usb.template_power sysctl to control it. Reviewed by: hselasky@ (earlier version) MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Modified: head/share/man/man4/usb_template.4 head/sys/dev/usb/template/usb_template.c head/sys/dev/usb/template/usb_template_audio.c head/sys/dev/usb/template/usb_template_cdce.c head/sys/dev/usb/template/usb_template_kbd.c head/sys/dev/usb/template/usb_template_midi.c head/sys/dev/usb/template/usb_template_modem.c head/sys/dev/usb/template/usb_template_mouse.c head/sys/dev/usb/template/usb_template_msc.c head/sys/dev/usb/template/usb_template_mtp.c head/sys/dev/usb/template/usb_template_multi.c head/sys/dev/usb/template/usb_template_phone.c head/sys/dev/usb/template/usb_template_serialnet.c Modified: head/share/man/man4/usb_template.4 ============================================================================== --- head/share/man/man4/usb_template.4 Wed May 23 19:55:47 2018 (r334114) +++ head/share/man/man4/usb_template.4 Wed May 23 20:06:04 2018 (r334115) @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd May 17, 2018 +.Dd May 23, 2018 .Dt USB_TEMPLATE 4 .Os . @@ -100,6 +100,11 @@ tunables: .It Va hw.usb.template Currently selected template. Set to -1 to make the device disappear from the USB host point of view. +.It Va hw.usb.template_power +USB bus power consumption in mA. +Must be between 0 and 500. +Setting to 0 marks the device as self-powered. +Defaults to 500mA. .It Va hw.usb.templates.N Configuration for template number .Va N . Modified: head/sys/dev/usb/template/usb_template.c ============================================================================== --- head/sys/dev/usb/template/usb_template.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template.c Wed May 23 20:06:04 2018 (r334115) @@ -76,14 +76,12 @@ #include <dev/usb/template/usb_template.h> #endif /* USB_GLOBAL_INCLUDE_FILE */ -SYSCTL_NODE(_hw_usb, OID_AUTO, templates, CTLFLAG_RW, 0, - "USB device side templates"); - MODULE_DEPEND(usb_template, usb, 1, 1, 1); MODULE_VERSION(usb_template, 1); /* function prototypes */ +static int sysctl_hw_usb_template_power(SYSCTL_HANDLER_ARGS); static void usb_make_raw_desc(struct usb_temp_setup *, const uint8_t *); static void usb_make_endpoint_desc(struct usb_temp_setup *, const struct usb_temp_endpoint_desc *); @@ -117,6 +115,33 @@ static usb_error_t usb_temp_setup_by_index(struct usb_ uint16_t index); static void usb_temp_init(void *); +SYSCTL_NODE(_hw_usb, OID_AUTO, templates, CTLFLAG_RW, 0, + "USB device side templates"); +SYSCTL_PROC(_hw_usb, OID_AUTO, template_power, + CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, + NULL, 0, sysctl_hw_usb_template_power, + "I", "USB bus power consumption in mA"); + +static int usb_template_power = 500; /* 500mA */ + +static int +sysctl_hw_usb_template_power(SYSCTL_HANDLER_ARGS) +{ + int error, val; + + val = usb_template_power; + error = sysctl_handle_int(oidp, &val, 0, req); + if (error != 0 || req->newptr == NULL) + return (error); + + if (val < 0 || val > 500) + return (EINVAL); + + usb_template_power = val; + + return (0); +} + /*------------------------------------------------------------------------* * usb_decode_str_desc * @@ -426,6 +451,7 @@ usb_make_config_desc(struct usb_temp_setup *temp, struct usb_config_descriptor *cd; const struct usb_temp_interface_desc **tid; uint16_t old_size; + int power; /* Reserve memory */ @@ -463,13 +489,16 @@ usb_make_config_desc(struct usb_temp_setup *temp, cd->bConfigurationValue = temp->bConfigurationValue; cd->iConfiguration = tcd->iConfiguration; cd->bmAttributes = tcd->bmAttributes; - cd->bMaxPower = tcd->bMaxPower; - cd->bmAttributes |= (UC_REMOTE_WAKEUP | UC_BUS_POWERED); - if (temp->self_powered) { - cd->bmAttributes |= UC_SELF_POWERED; - } else { + power = usb_template_power; + cd->bMaxPower = power / 2; /* 2 mA units */ + cd->bmAttributes |= UC_REMOTE_WAKEUP; + if (power > 0) { + cd->bmAttributes |= UC_BUS_POWERED; cd->bmAttributes &= ~UC_SELF_POWERED; + } else { + cd->bmAttributes &= ~UC_BUS_POWERED; + cd->bmAttributes |= UC_SELF_POWERED; } } } Modified: head/sys/dev/usb/template/usb_template_audio.c ============================================================================== --- head/sys/dev/usb/template/usb_template_audio.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_audio.c Wed May 23 20:06:04 2018 (r334115) @@ -351,8 +351,8 @@ static const struct usb_temp_interface_desc *audio_int static const struct usb_temp_config_desc audio_config_desc = { .ppIfaceDesc = audio_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = AUDIO_PRODUCT_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_cdce.c ============================================================================== --- head/sys/dev/usb/template/usb_template_cdce.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_cdce.c Wed May 23 20:06:04 2018 (r334115) @@ -219,8 +219,8 @@ static const struct usb_temp_interface_desc *eth_inter static const struct usb_temp_config_desc eth_config_desc = { .ppIfaceDesc = eth_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = ETH_CONFIGURATION_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_kbd.c ============================================================================== --- head/sys/dev/usb/template/usb_template_kbd.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_kbd.c Wed May 23 20:06:04 2018 (r334115) @@ -157,8 +157,8 @@ static const struct usb_temp_interface_desc *keyboard_ static const struct usb_temp_config_desc keyboard_config_desc = { .ppIfaceDesc = keyboard_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = KBD_PRODUCT_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_midi.c ============================================================================== --- head/sys/dev/usb/template/usb_template_midi.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_midi.c Wed May 23 20:06:04 2018 (r334115) @@ -199,8 +199,8 @@ static const struct usb_temp_interface_desc *midi_inte static const struct usb_temp_config_desc midi_config_desc = { .ppIfaceDesc = midi_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MIDI_PRODUCT_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_modem.c ============================================================================== --- head/sys/dev/usb/template/usb_template_modem.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_modem.c Wed May 23 20:06:04 2018 (r334115) @@ -198,8 +198,8 @@ static const struct usb_temp_interface_desc *modem_int static const struct usb_temp_config_desc modem_config_desc = { .ppIfaceDesc = modem_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MODEM_PRODUCT_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_mouse.c ============================================================================== --- head/sys/dev/usb/template/usb_template_mouse.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_mouse.c Wed May 23 20:06:04 2018 (r334115) @@ -155,8 +155,8 @@ static const struct usb_temp_interface_desc *mouse_int static const struct usb_temp_config_desc mouse_config_desc = { .ppIfaceDesc = mouse_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MOUSE_INTERFACE_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_msc.c ============================================================================== --- head/sys/dev/usb/template/usb_template_msc.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_msc.c Wed May 23 20:06:04 2018 (r334115) @@ -142,8 +142,8 @@ static const struct usb_temp_interface_desc *msc_inter static const struct usb_temp_config_desc msc_config_desc = { .ppIfaceDesc = msc_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MSC_CONFIGURATION_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_mtp.c ============================================================================== --- head/sys/dev/usb/template/usb_template_mtp.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_mtp.c Wed May 23 20:06:04 2018 (r334115) @@ -164,8 +164,8 @@ static const struct usb_temp_interface_desc *mtp_inter static const struct usb_temp_config_desc mtp_config_desc = { .ppIfaceDesc = mtp_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MTP_CONFIGURATION_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_multi.c ============================================================================== --- head/sys/dev/usb/template/usb_template_multi.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_multi.c Wed May 23 20:06:04 2018 (r334115) @@ -370,8 +370,8 @@ static const struct usb_temp_interface_desc *multi_int static const struct usb_temp_config_desc multi_config_desc = { .ppIfaceDesc = multi_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = MULTI_CONFIGURATION_INDEX, }; static const struct usb_temp_config_desc *multi_configs[] = { Modified: head/sys/dev/usb/template/usb_template_phone.c ============================================================================== --- head/sys/dev/usb/template/usb_template_phone.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_phone.c Wed May 23 20:06:04 2018 (r334115) @@ -347,8 +347,8 @@ static const struct usb_temp_interface_desc *phone_int static const struct usb_temp_config_desc phone_config_desc = { .ppIfaceDesc = phone_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = PHONE_PRODUCT_INDEX, }; Modified: head/sys/dev/usb/template/usb_template_serialnet.c ============================================================================== --- head/sys/dev/usb/template/usb_template_serialnet.c Wed May 23 19:55:47 2018 (r334114) +++ head/sys/dev/usb/template/usb_template_serialnet.c Wed May 23 20:06:04 2018 (r334115) @@ -327,8 +327,8 @@ static const struct usb_temp_interface_desc *serialnet static const struct usb_temp_config_desc serialnet_config_desc = { .ppIfaceDesc = serialnet_interfaces, - .bmAttributes = UC_BUS_POWERED, - .bMaxPower = 25, /* 50 mA */ + .bmAttributes = 0, + .bMaxPower = 0, .iConfiguration = SERIALNET_CONFIGURATION_INDEX, }; static const struct usb_temp_config_desc *serialnet_configs[] = {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805232006.w4NK64jS044384>