[Midnightbsd-cvs] src [10044] trunk/sys/dev/usb/template: sync with freebsd 10
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun May 27 18:36:00 EDT 2018
Revision: 10044
http://svnweb.midnightbsd.org/src/?rev=10044
Author: laffer1
Date: 2018-05-27 18:35:59 -0400 (Sun, 27 May 2018)
Log Message:
-----------
sync with freebsd 10
Modified Paths:
--------------
trunk/sys/dev/usb/template/usb_template.c
trunk/sys/dev/usb/template/usb_template.h
trunk/sys/dev/usb/template/usb_template_audio.c
trunk/sys/dev/usb/template/usb_template_cdce.c
trunk/sys/dev/usb/template/usb_template_kbd.c
trunk/sys/dev/usb/template/usb_template_modem.c
trunk/sys/dev/usb/template/usb_template_mouse.c
trunk/sys/dev/usb/template/usb_template_msc.c
trunk/sys/dev/usb/template/usb_template_mtp.c
Added Paths:
-----------
trunk/sys/dev/usb/template/usb_template_phone.c
Modified: trunk/sys/dev/usb/template/usb_template.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,4 +1,5 @@
-/* $FreeBSD: stable/9/sys/dev/usb/template/usb_template.c 305735 2016-09-12 10:20:44Z hselasky $ */
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template.c 305734 2016-09-12 10:17:25Z hselasky $ */
/*-
* Copyright (c) 2007 Hans Petter Selasky. All rights reserved.
*
@@ -29,6 +30,9 @@
* USB templates.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -66,7 +70,9 @@
#include <dev/usb/usb_controller.h>
#include <dev/usb/usb_bus.h>
+#include <dev/usb/usb_request.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
MODULE_DEPEND(usb_template, usb, 1, 1, 1);
MODULE_VERSION(usb_template, 1);
@@ -130,7 +136,7 @@
/* check if we have got a CDC union descriptor */
- if ((raw[0] >= sizeof(struct usb_cdc_union_descriptor)) &&
+ if ((raw[0] == sizeof(struct usb_cdc_union_descriptor)) &&
(raw[1] == UDESC_CS_INTERFACE) &&
(raw[2] == UDESCSUB_CDC_UNION)) {
struct usb_cdc_union_descriptor *ud = (void *)dst;
@@ -145,7 +151,7 @@
/* check if we have got an interface association descriptor */
- if ((raw[0] >= sizeof(struct usb_interface_assoc_descriptor)) &&
+ if ((raw[0] == sizeof(struct usb_interface_assoc_descriptor)) &&
(raw[1] == UDESC_IFACE_ASSOC)) {
struct usb_interface_assoc_descriptor *iad = (void *)dst;
@@ -157,7 +163,7 @@
/* check if we have got a call management descriptor */
- if ((raw[0] >= sizeof(struct usb_cdc_cm_descriptor)) &&
+ if ((raw[0] == sizeof(struct usb_cdc_cm_descriptor)) &&
(raw[1] == UDESC_CS_INTERFACE) &&
(raw[2] == UDESCSUB_CDC_CM)) {
struct usb_cdc_cm_descriptor *ccd = (void *)dst;
@@ -1263,7 +1269,7 @@
goto done;
}
/* allocate zeroed memory */
- uts->buf = malloc(uts->size, M_USB, M_WAITOK | M_ZERO);
+ uts->buf = usbd_alloc_config_desc(udev, uts->size);
/*
* Allow malloc() to return NULL regardless of M_WAITOK flag.
* This helps when porting the software to non-FreeBSD
@@ -1332,12 +1338,8 @@
void
usb_temp_unsetup(struct usb_device *udev)
{
- if (udev->usb_template_ptr) {
-
- free(udev->usb_template_ptr, M_USB);
-
- udev->usb_template_ptr = NULL;
- }
+ usbd_free_config_desc(udev, udev->usb_template_ptr);
+ udev->usb_template_ptr = NULL;
}
static usb_error_t
@@ -1367,6 +1369,9 @@
case USB_TEMP_MOUSE:
err = usb_temp_setup(udev, &usb_template_mouse);
break;
+ case USB_TEMP_PHONE:
+ err = usb_temp_setup(udev, &usb_template_phone);
+ break;
default:
return (USB_ERR_INVAL);
}
Modified: trunk/sys/dev/usb/template/usb_template.h
===================================================================
--- trunk/sys/dev/usb/template/usb_template.h 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template.h 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,4 +1,5 @@
-/* $FreeBSD: stable/9/sys/dev/usb/template/usb_template.h 223467 2011-06-23 07:54:03Z hselasky $ */
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template.h 269922 2014-08-13 08:21:52Z hselasky $ */
/*-
* Copyright (c) 2007 Hans Petter Selasky <hselasky at FreeBSD.org>
* All rights reserved.
@@ -105,6 +106,7 @@
extern const struct usb_temp_device_desc usb_template_mouse;
extern const struct usb_temp_device_desc usb_template_msc;
extern const struct usb_temp_device_desc usb_template_mtp;
+extern const struct usb_temp_device_desc usb_template_phone;
usb_error_t usb_temp_setup(struct usb_device *,
const struct usb_temp_device_desc *);
Modified: trunk/sys/dev/usb/template/usb_template_audio.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_audio.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_audio.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_audio.c 223472 2011-06-23 10:35:45Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_audio.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
*
@@ -30,6 +29,9 @@
* This file contains the USB template for an USB Audio Device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -51,9 +53,11 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
INDEX_AUDIO_LANG,
@@ -64,30 +68,21 @@
INDEX_AUDIO_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_AUDIO_PRODUCT \
- 'A', 0, 'u', 0, 'd', 0, 'i', 0, 'o', 0, ' ', 0, \
- 'T', 0, 'e', 0, 's', 0, 't', 0, ' ', 0, \
- 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0, ' ', 0,
+ "A\0u\0d\0i\0o\0 \0T\0e\0s\0t\0 \0D\0e\0v\0i\0c\0e"
#define STRING_AUDIO_MIXER \
- 'M', 0, 'i', 0, 'x', 0, 'e', 0, 'r', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "M\0i\0x\0e\0r\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_AUDIO_RECORD \
- 'R', 0, 'e', 0, 'c', 0, 'o', 0, 'r', 0, 'd', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "R\0e\0c\0o\0r\0d\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_AUDIO_PLAYBACK \
- 'P', 0, 'l', 0, 'a', 0, 'y', 0, 'b', 0, 'a', 0, 'c', 0, 'k', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "P\0l\0a\0y\0b\0a\0c\0k\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_AUDIO_MIXER, string_audio_mixer);
USB_MAKE_STRING_DESC(STRING_AUDIO_RECORD, string_audio_record);
USB_MAKE_STRING_DESC(STRING_AUDIO_PLAYBACK, string_audio_playback);
@@ -385,7 +380,7 @@
audio_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[INDEX_AUDIO_MAX] = {
- [INDEX_AUDIO_LANG] = &string_lang,
+ [INDEX_AUDIO_LANG] = &usb_string_lang_en,
[INDEX_AUDIO_MIXER] = &string_audio_mixer,
[INDEX_AUDIO_RECORD] = &string_audio_record,
[INDEX_AUDIO_PLAYBACK] = &string_audio_playback,
@@ -393,7 +388,7 @@
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_cdce.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_cdce.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_cdce.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_cdce.c 223467 2011-06-23 07:54:03Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_cdce.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2007 Hans Petter Selasky <hselasky at FreeBSD.org>
* All rights reserved.
@@ -31,6 +30,9 @@
* This file contains the USB templates for a CDC USB ethernet device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -52,9 +54,11 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
STRING_LANG_INDEX,
@@ -68,61 +72,31 @@
STRING_ETH_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_MAC \
- '2', 0, 'A', 0, '2', 0, '3', 0, \
- '4', 0, '5', 0, '6', 0, '7', 0, \
- '8', 0, '9', 0, 'A', 0, 'B', 0,
+ "2\0A\0002\0003\0004\0005\0006\0007\08\09\0A\0B"
#define STRING_ETH_CONTROL \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'E', 0, 't', 0, 'h', 0, 'e', 0, \
- 'r', 0, 'n', 0, 'e', 0, 't', 0, \
- ' ', 0, 'C', 0, 'o', 0, 'm', 0, \
- 'm', 0, ' ', 0, 'i', 0, 'n', 0, \
- 't', 0, 'e', 0, 'r', 0, 'f', 0, \
- 'a', 0, 'c', 0, 'e', 0,
+ "U\0S\0B\0 \0E\0t\0h\0e\0r\0n\0e\0t\0 " \
+ "\0C\0o\0m\0m\0 \0I\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_ETH_DATA \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'E', 0, 't', 0, 'h', 0, 'e', 0, \
- 'r', 0, 'n', 0, 'e', 0, 't', 0, \
- ' ', 0, 'D', 0, 'a', 0, 't', 0, \
- 'a', 0, ' ', 0, 'i', 0, 'n', 0, \
- 't', 0, 'e', 0, 'r', 0, 'f', 0, \
- 'a', 0, 'c', 0, 'e', 0,
+ "U\0S\0B\0 \0E\0t\0h\0e\0r\0n\0e\0t\0 \0D\0a\0t\0a\0 " \
+ "\0I\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_ETH_CONFIG \
- 'D', 0, 'e', 0, 'f', 0, 'a', 0, \
- 'u', 0, 'l', 0, 't', 0, ' ', 0, \
- 'c', 0, 'o', 0, 'n', 0, 'f', 0, \
- 'i', 0, 'g', 0,
+ "D\0e\0f\0a\0u\0l\0t\0 \0c\0o\0n\0f\0i\0g"
#define STRING_ETH_VENDOR \
- 'F', 0, 'r', 0, 'e', 0, 'e', 0, \
- 'B', 0, 'S', 0, 'D', 0, ' ', 0, \
- 'f', 0, 'o', 0, 'u', 0, 'n', 0, \
- 'd', 0, 'a', 0, 't', 0, 'i', 0, \
- 'o', 0, 'n', 0,
+ "F\0r\0e\0e\0B\0S\0D\0 \0f\0o\0u\0n\0d\0a\0t\0i\0o\0n"
#define STRING_ETH_PRODUCT \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'E', 0, 't', 0, 'h', 0, 'e', 0, \
- 'r', 0, 'n', 0, 'e', 0, 't', 0, \
- ' ', 0, 'A', 0, 'd', 0, 'a', 0, \
- 'p', 0, 't', 0, 'e', 0, 'r', 0,
+ "U\0S\0B\0 \0E\0t\0h\0e\0r\0n\0e\0t\0 \0A\0d\0a\0p\0t\0e\0r"
#define STRING_ETH_SERIAL \
- 'D', 0, 'e', 0, 'c', 0, 'e', 0, \
- 'm', 0, 'b', 0, 'e', 0, 'r', 0, \
- ' ', 0, '2', 0, '0', 0, '0', 0, \
- '7', 0,
+ "D\0e\0c\0e\0m\0b\0e\0r\0 \0002\0000\0000\0007"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_MAC, string_mac);
USB_MAKE_STRING_DESC(STRING_ETH_CONTROL, string_eth_control);
USB_MAKE_STRING_DESC(STRING_ETH_DATA, string_eth_data);
@@ -286,7 +260,7 @@
eth_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[STRING_ETH_MAX] = {
- [STRING_LANG_INDEX] = &string_lang,
+ [STRING_LANG_INDEX] = &usb_string_lang_en,
[STRING_MAC_INDEX] = &string_mac,
[STRING_ETH_CONTROL_INDEX] = &string_eth_control,
[STRING_ETH_DATA_INDEX] = &string_eth_data,
@@ -297,7 +271,7 @@
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_kbd.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_kbd.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_kbd.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_kbd.c 229103 2011-12-31 14:37:51Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_kbd.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
*
@@ -30,6 +29,9 @@
* This file contains the USB template for an USB Keyboard Device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -51,9 +53,11 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
INDEX_LANG,
@@ -62,21 +66,14 @@
INDEX_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_PRODUCT \
- 'K', 0, 'e', 0, 'y', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0, \
- 'T', 0, 'e', 0, 's', 0, 't', 0, ' ', 0, \
- 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0, ' ', 0,
+ "K\0e\0y\0b\0o\0a\0r\0d\0 \0T\0e\0s\0t\0 \0D\0e\0v\0i\0c\0e"
#define STRING_KEYBOARD \
- 'K', 0, 'e', 0, 'y', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "K\0e\0y\0b\0o\0a\0r\0d\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_KEYBOARD, string_keyboard);
USB_MAKE_STRING_DESC(STRING_PRODUCT, string_product);
@@ -206,13 +203,13 @@
keyboard_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[INDEX_MAX] = {
- [INDEX_LANG] = &string_lang,
+ [INDEX_LANG] = &usb_string_lang_en,
[INDEX_KEYBOARD] = &string_keyboard,
[INDEX_PRODUCT] = &string_product,
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_modem.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_modem.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_modem.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_modem.c 229103 2011-12-31 14:37:51Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_modem.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
*
@@ -30,6 +29,9 @@
* This file contains the USB template for an USB Modem Device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -51,9 +53,11 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
INDEX_LANG,
@@ -62,21 +66,14 @@
INDEX_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_PRODUCT \
- 'M', 0, 'o', 0, 'd', 0, 'e', 0, 'm', 0, ' ', 0, \
- 'T', 0, 'e', 0, 's', 0, 't', 0, ' ', 0, \
- 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0, ' ', 0,
+ "M\0o\0d\0e\0m\0 \0T\0e\0s\0t\0 \0D\0e\0v\0i\0c\0e"
#define STRING_MODEM \
- 'M', 0, 'o', 0, 'd', 0, 'e', 0, 'm', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "M\0o\0d\0e\0m\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_MODEM, string_modem);
USB_MAKE_STRING_DESC(STRING_PRODUCT, string_product);
@@ -234,13 +231,13 @@
modem_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[INDEX_MAX] = {
- [INDEX_LANG] = &string_lang,
+ [INDEX_LANG] = &usb_string_lang_en,
[INDEX_MODEM] = &string_modem,
[INDEX_PRODUCT] = &string_product,
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_mouse.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_mouse.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_mouse.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_mouse.c 229103 2011-12-31 14:37:51Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_mouse.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
*
@@ -30,6 +29,9 @@
* This file contains the USB template for an USB Mouse Device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -51,9 +53,11 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
INDEX_LANG,
@@ -62,21 +66,14 @@
INDEX_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_PRODUCT \
- 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0, ' ', 0, \
- 'T', 0, 'e', 0, 's', 0, 't', 0, ' ', 0, \
- 'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0,
+ "M\0o\0u\0s\0e\0 \0T\0e\0s\0t\0 \0D\0e\0v\0i\0c\0e"
#define STRING_MOUSE \
- 'M', 0, 'o', 0, 'u', 0, 's', 0, 'e', 0, ' ', 0, \
- 'i', 0, 'n', 0, 't', 0, 'e', 0, 'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0,
+ "M\0o\0u\0s\0e\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_MOUSE, string_mouse);
USB_MAKE_STRING_DESC(STRING_PRODUCT, string_product);
@@ -204,13 +201,13 @@
mouse_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[INDEX_MAX] = {
- [INDEX_LANG] = &string_lang,
+ [INDEX_LANG] = &usb_string_lang_en,
[INDEX_MOUSE] = &string_mouse,
[INDEX_PRODUCT] = &string_product,
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_msc.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_msc.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_msc.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_msc.c 223467 2011-06-23 07:54:03Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_msc.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2008 Hans Petter Selasky <hselasky at FreeBSD.org>
* All rights reserved.
@@ -31,6 +30,9 @@
* This file contains the USB templates for an USB Mass Storage Device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -52,8 +54,10 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
enum {
STRING_LANG_INDEX,
@@ -65,45 +69,24 @@
STRING_MSC_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_MSC_DATA \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'M', 0, 'a', 0, 's', 0, 's', 0, \
- ' ', 0, 'S', 0, 't', 0, 'o', 0, \
- 'r', 0, 'a', 0, 'g', 0, 'e', 0, \
- ' ', 0, 'I', 0, 'n', 0, 't', 0, \
- 'e', 0, 'r', 0, 'f', 0, 'a', 0, \
- 'c', 0, 'e', 0,
+ "U\0S\0B\0 \0M\0a\0s\0s\0 \0S\0t\0o\0r\0a\0g\0e\0 " \
+ "\0I\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_MSC_CONFIG \
- 'D', 0, 'e', 0, 'f', 0, 'a', 0, \
- 'u', 0, 'l', 0, 't', 0, ' ', 0, \
- 'c', 0, 'o', 0, 'n', 0, 'f', 0, \
- 'i', 0, 'g', 0,
+ "D\0e\0f\0a\0u\0l\0t\0 \0c\0o\0n\0f\0i\0g"
#define STRING_MSC_VENDOR \
- 'F', 0, 'r', 0, 'e', 0, 'e', 0, \
- 'B', 0, 'S', 0, 'D', 0, ' ', 0, \
- 'f', 0, 'o', 0, 'u', 0, 'n', 0, \
- 'd', 0, 'a', 0, 't', 0, 'i', 0, \
- 'o', 0, 'n', 0,
+ "F\0r\0e\0e\0B\0S\0D\0 \0f\0o\0u\0n\0d\0a\0t\0i\0o\0n"
#define STRING_MSC_PRODUCT \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'M', 0, 'e', 0, 'm', 0, 'o', 0, \
- 'r', 0, 'y', 0, ' ', 0, 'S', 0, \
- 't', 0, 'i', 0, 'c', 0, 'k', 0
+ "U\0S\0B\0 \0M\0e\0m\0o\0r\0y\0 \0S\0t\0i\0c\0k"
#define STRING_MSC_SERIAL \
- 'M', 0, 'a', 0, 'r', 0, 'c', 0, \
- 'h', 0, ' ', 0, '2', 0, '0', 0, \
- '0', 0, '8', 0,
+ "M\0a\0r\0c\0h\0 \0002\0000\0000\08"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_MSC_DATA, string_msc_data);
USB_MAKE_STRING_DESC(STRING_MSC_CONFIG, string_msc_config);
USB_MAKE_STRING_DESC(STRING_MSC_VENDOR, string_msc_vendor);
@@ -195,7 +178,7 @@
msc_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[STRING_MSC_MAX] = {
- [STRING_LANG_INDEX] = &string_lang,
+ [STRING_LANG_INDEX] = &usb_string_lang_en,
[STRING_MSC_DATA_INDEX] = &string_msc_data,
[STRING_MSC_CONFIG_INDEX] = &string_msc_config,
[STRING_MSC_VENDOR_INDEX] = &string_msc_vendor,
@@ -204,7 +187,7 @@
};
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Modified: trunk/sys/dev/usb/template/usb_template_mtp.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_mtp.c 2018-05-27 22:35:11 UTC (rev 10043)
+++ trunk/sys/dev/usb/template/usb_template_mtp.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -1,6 +1,5 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/9/sys/dev/usb/template/usb_template_mtp.c 223467 2011-06-23 07:54:03Z hselasky $");
-
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_mtp.c 246125 2013-01-30 16:05:54Z hselasky $ */
/*-
* Copyright (c) 2008 Hans Petter Selasky <hselasky at FreeBSD.org>
* All rights reserved.
@@ -38,6 +37,9 @@
* operating system the VID and PID of your device.
*/
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -59,7 +61,10 @@
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
+
#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
#define MTP_BREQUEST 0x08
@@ -73,41 +78,23 @@
STRING_MTP_MAX,
};
-#define STRING_LANG \
- 0x09, 0x04, /* American English */
-
#define STRING_MTP_DATA \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'M', 0, 'T', 0, 'P', 0, \
- ' ', 0, 'I', 0, 'n', 0, 't', 0, \
- 'e', 0, 'r', 0, 'f', 0, 'a', 0, \
- 'c', 0, 'e', 0,
+ "U\0S\0B\0 \0M\0T\0P\0 \0I\0n\0t\0e\0r\0f\0a\0c\0e"
#define STRING_MTP_CONFIG \
- 'D', 0, 'e', 0, 'f', 0, 'a', 0, \
- 'u', 0, 'l', 0, 't', 0, ' ', 0, \
- 'c', 0, 'o', 0, 'n', 0, 'f', 0, \
- 'i', 0, 'g', 0,
+ "D\0e\0f\0a\0u\0l\0t\0 \0c\0o\0n\0f\0i\0g"
#define STRING_MTP_VENDOR \
- 'F', 0, 'r', 0, 'e', 0, 'e', 0, \
- 'B', 0, 'S', 0, 'D', 0, ' ', 0, \
- 'f', 0, 'o', 0, 'u', 0, 'n', 0, \
- 'd', 0, 'a', 0, 't', 0, 'i', 0, \
- 'o', 0, 'n', 0,
+ "F\0r\0e\0e\0B\0S\0D\0 \0f\0o\0u\0n\0d\0a\0t\0i\0o\0n"
#define STRING_MTP_PRODUCT \
- 'U', 0, 'S', 0, 'B', 0, ' ', 0, \
- 'M', 0, 'T', 0, 'P', 0,
+ "U\0S\0B\0 \0M\0T\0P"
#define STRING_MTP_SERIAL \
- 'J', 0, 'u', 0, 'n', 0, 'e', 0, \
- ' ', 0, '2', 0, '0', 0, '0', 0, \
- '8', 0,
+ "J\0u\0n\0e\0 \0002\0000\0000\08"
/* make the real string descriptors */
-USB_MAKE_STRING_DESC(STRING_LANG, string_lang);
USB_MAKE_STRING_DESC(STRING_MTP_DATA, string_mtp_data);
USB_MAKE_STRING_DESC(STRING_MTP_CONFIG, string_mtp_config);
USB_MAKE_STRING_DESC(STRING_MTP_VENDOR, string_mtp_vendor);
@@ -244,7 +231,7 @@
mtp_get_string_desc(uint16_t lang_id, uint8_t string_index)
{
static const void *ptr[STRING_MTP_MAX] = {
- [STRING_LANG_INDEX] = &string_lang,
+ [STRING_LANG_INDEX] = &usb_string_lang_en,
[STRING_MTP_DATA_INDEX] = &string_mtp_data,
[STRING_MTP_CONFIG_INDEX] = &string_mtp_config,
[STRING_MTP_VENDOR_INDEX] = &string_mtp_vendor,
@@ -266,7 +253,7 @@
return (dummy_desc);
}
if (string_index == 0) {
- return (&string_lang);
+ return (&usb_string_lang_en);
}
if (lang_id != 0x0409) {
return (NULL);
Added: trunk/sys/dev/usb/template/usb_template_phone.c
===================================================================
--- trunk/sys/dev/usb/template/usb_template_phone.c (rev 0)
+++ trunk/sys/dev/usb/template/usb_template_phone.c 2018-05-27 22:35:59 UTC (rev 10044)
@@ -0,0 +1,420 @@
+/* $MidnightBSD$ */
+/* $FreeBSD: stable/10/sys/dev/usb/template/usb_template_phone.c 269922 2014-08-13 08:21:52Z hselasky $ */
+/*-
+ * Copyright (c) 2014 Hans Petter Selasky. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * This file contains the USB template for an USB phone device.
+ */
+
+#ifdef USB_GLOBAL_INCLUDE_FILE
+#include USB_GLOBAL_INCLUDE_FILE
+#else
+#include <sys/stdint.h>
+#include <sys/stddef.h>
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/module.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/condvar.h>
+#include <sys/sysctl.h>
+#include <sys/sx.h>
+#include <sys/unistd.h>
+#include <sys/callout.h>
+#include <sys/malloc.h>
+#include <sys/priv.h>
+
+#include <dev/usb/usb.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
+#include <dev/usb/usb_cdc.h>
+
+#include <dev/usb/template/usb_template.h>
+#endif /* USB_GLOBAL_INCLUDE_FILE */
+
+enum {
+ INDEX_PHONE_LANG,
+ INDEX_PHONE_MIXER,
+ INDEX_PHONE_RECORD,
+ INDEX_PHONE_PLAYBACK,
+ INDEX_PHONE_PRODUCT,
+ INDEX_PHONE_HID,
+ INDEX_PHONE_MAX,
+};
+
+#define STRING_PHONE_PRODUCT \
+ "U\0S\0B\0 \0P\0h\0o\0n\0e\0 \0D\0e\0v\0i\0c\0e"
+
+#define STRING_PHONE_MIXER \
+ "M\0i\0x\0e\0r\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
+
+#define STRING_PHONE_RECORD \
+ "R\0e\0c\0o\0r\0d\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
+
+#define STRING_PHONE_PLAYBACK \
+ "P\0l\0a\0y\0b\0a\0c\0k\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
+
+#define STRING_PHONE_HID \
+ "H\0I\0D\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e"
+
+/* make the real string descriptors */
+
+USB_MAKE_STRING_DESC(STRING_PHONE_MIXER, string_phone_mixer);
+USB_MAKE_STRING_DESC(STRING_PHONE_RECORD, string_phone_record);
+USB_MAKE_STRING_DESC(STRING_PHONE_PLAYBACK, string_phone_playback);
+USB_MAKE_STRING_DESC(STRING_PHONE_PRODUCT, string_phone_product);
+USB_MAKE_STRING_DESC(STRING_PHONE_HID, string_phone_hid);
+
+/* prototypes */
+
+/*
+ * Phone Mixer description structures
+ *
+ * Some of the phone descriptors were dumped from no longer in
+ * production Yealink VOIP USB phone adapter:
+ */
+static uint8_t phone_hid_descriptor[] = {
+ 0x05, 0x0b, 0x09, 0x01, 0xa1, 0x01, 0x05, 0x09,
+ 0x19, 0x01, 0x29, 0x3f, 0x15, 0x00, 0x25, 0x01,
+ 0x75, 0x01, 0x95, 0x80, 0x81, 0x00, 0x05, 0x08,
+ 0x19, 0x01, 0x29, 0x10, 0x15, 0x00, 0x25, 0x01,
+ 0x75, 0x01, 0x95, 0x80, 0x91, 0x00, 0xc0
+};
+
+static const uint8_t phone_raw_desc_0[] = {
+ 0x0a, 0x24, 0x01, 0x00, 0x01, 0x4a, 0x00, 0x02,
+ 0x01, 0x02
+};
+
+static const uint8_t phone_raw_desc_1[] = {
+ 0x0c, 0x24, 0x02, 0x01, 0x01, 0x02, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00
+};
+
+static const uint8_t phone_raw_desc_2[] = {
+ 0x0c, 0x24, 0x02, 0x02, 0x01, 0x01, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00
+};
+
+static const uint8_t phone_raw_desc_3[] = {
+ 0x09, 0x24, 0x03, 0x03, 0x01, 0x03, 0x00, 0x06,
+ 0x00
+};
+
+static const uint8_t phone_raw_desc_4[] = {
+ 0x09, 0x24, 0x03, 0x04, 0x01, 0x01, 0x00, 0x05,
+ 0x00
+};
+
+static const uint8_t phone_raw_desc_5[] = {
+ 0x0b, 0x24, 0x06, 0x05, 0x01, 0x02, 0x03, 0x00,
+ 0x03, 0x00, 0x00
+};
+
+static const uint8_t phone_raw_desc_6[] = {
+ 0x0b, 0x24, 0x06, 0x06, 0x02, 0x02, 0x03, 0x00,
+ 0x03, 0x00, 0x00
+};
+
+static const void *phone_raw_iface_0_desc[] = {
+ phone_raw_desc_0,
+ phone_raw_desc_1,
+ phone_raw_desc_2,
+ phone_raw_desc_3,
+ phone_raw_desc_4,
+ phone_raw_desc_5,
+ phone_raw_desc_6,
+ NULL,
+};
+
+static const struct usb_temp_interface_desc phone_iface_0 = {
+ .ppEndpoints = NULL, /* no endpoints */
+ .ppRawDesc = phone_raw_iface_0_desc,
+ .bInterfaceClass = 1,
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_MIXER,
+};
+
+static const uint8_t phone_raw_desc_20[] = {
+ 0x07, 0x24, 0x01, 0x04, 0x01, 0x01, 0x00
+};
+
+static const uint8_t phone_raw_desc_21[] = {
+ 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
+ /* 8kHz */
+ 0x40, 0x1f, 0x00
+};
+
+static const uint8_t phone_raw_desc_22[] = {
+ 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+static const void *phone_raw_iface_1_desc[] = {
+ phone_raw_desc_20,
+ phone_raw_desc_21,
+ NULL,
+};
+
+static const void *phone_raw_ep_1_desc[] = {
+ phone_raw_desc_22,
+ NULL,
+};
+
+static const struct usb_temp_packet_size phone_isoc_mps = {
+ .mps[USB_SPEED_FULL] = 0x10,
+ .mps[USB_SPEED_HIGH] = 0x10,
+};
+
+static const struct usb_temp_interval phone_isoc_interval = {
+ .bInterval[USB_SPEED_FULL] = 1, /* 1:1 */
+ .bInterval[USB_SPEED_HIGH] = 4, /* 1:8 */
+};
+
+static const struct usb_temp_endpoint_desc phone_isoc_in_ep = {
+ .ppRawDesc = phone_raw_ep_1_desc,
+ .pPacketSize = &phone_isoc_mps,
+ .pIntervals = &phone_isoc_interval,
+ .bEndpointAddress = UE_DIR_IN,
+ .bmAttributes = UE_ISOCHRONOUS,
+};
+
+static const struct usb_temp_endpoint_desc *phone_iface_1_ep[] = {
+ &phone_isoc_in_ep,
+ NULL,
+};
+
+static const struct usb_temp_interface_desc phone_iface_1_alt_0 = {
+ .ppEndpoints = NULL, /* no endpoints */
+ .ppRawDesc = NULL, /* no raw descriptors */
+ .bInterfaceClass = 1,
+ .bInterfaceSubClass = 2,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_PLAYBACK,
+};
+
+static const struct usb_temp_interface_desc phone_iface_1_alt_1 = {
+ .ppEndpoints = phone_iface_1_ep,
+ .ppRawDesc = phone_raw_iface_1_desc,
+ .bInterfaceClass = 1,
+ .bInterfaceSubClass = 2,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_PLAYBACK,
+ .isAltInterface = 1, /* this is an alternate setting */
+};
+
+static const uint8_t phone_raw_desc_30[] = {
+ 0x07, 0x24, 0x01, 0x02, 0x01, 0x01, 0x00
+};
+
+static const uint8_t phone_raw_desc_31[] = {
+ 0x0b, 0x24, 0x02, 0x01, 0x01, 0x02, 0x10, 0x01,
+ /* 8kHz */
+ 0x40, 0x1f, 0x00
+};
+
+static const uint8_t phone_raw_desc_32[] = {
+ 0x07, 0x25, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+static const void *phone_raw_iface_2_desc[] = {
+ phone_raw_desc_30,
+ phone_raw_desc_31,
+ NULL,
+};
+
+static const void *phone_raw_ep_2_desc[] = {
+ phone_raw_desc_32,
+ NULL,
+};
+
+static const struct usb_temp_endpoint_desc phone_isoc_out_ep = {
+ .ppRawDesc = phone_raw_ep_2_desc,
+ .pPacketSize = &phone_isoc_mps,
+ .pIntervals = &phone_isoc_interval,
+ .bEndpointAddress = UE_DIR_OUT,
+ .bmAttributes = UE_ISOCHRONOUS,
+};
+
+static const struct usb_temp_endpoint_desc *phone_iface_2_ep[] = {
+ &phone_isoc_out_ep,
+ NULL,
+};
+
+static const struct usb_temp_interface_desc phone_iface_2_alt_0 = {
+ .ppEndpoints = NULL, /* no endpoints */
+ .ppRawDesc = NULL, /* no raw descriptors */
+ .bInterfaceClass = 1,
+ .bInterfaceSubClass = 2,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_RECORD,
+};
+
+static const struct usb_temp_interface_desc phone_iface_2_alt_1 = {
+ .ppEndpoints = phone_iface_2_ep,
+ .ppRawDesc = phone_raw_iface_2_desc,
+ .bInterfaceClass = 1,
+ .bInterfaceSubClass = 2,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_RECORD,
+ .isAltInterface = 1, /* this is an alternate setting */
+};
+
+static const uint8_t phone_hid_raw_desc_0[] = {
+ 0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, sizeof(phone_hid_descriptor),
+ 0x00
+};
+
+static const void *phone_hid_desc_0[] = {
+ phone_hid_raw_desc_0,
+ NULL,
+};
+
+static const struct usb_temp_packet_size phone_hid_mps = {
+ .mps[USB_SPEED_FULL] = 0x10,
+ .mps[USB_SPEED_HIGH] = 0x10,
+};
+
+static const struct usb_temp_interval phone_hid_interval = {
+ .bInterval[USB_SPEED_FULL] = 2, /* 2ms */
+ .bInterval[USB_SPEED_HIGH] = 2, /* 2ms */
+};
+
+static const struct usb_temp_endpoint_desc phone_hid_in_ep = {
+ .pPacketSize = &phone_hid_mps,
+ .pIntervals = &phone_hid_interval,
+ .bEndpointAddress = UE_DIR_IN,
+ .bmAttributes = UE_INTERRUPT,
+};
+
+static const struct usb_temp_endpoint_desc *phone_iface_3_ep[] = {
+ &phone_hid_in_ep,
+ NULL,
+};
+
+static const struct usb_temp_interface_desc phone_iface_3 = {
+ .ppEndpoints = phone_iface_3_ep,
+ .ppRawDesc = phone_hid_desc_0,
+ .bInterfaceClass = 3,
+ .bInterfaceSubClass = 0,
+ .bInterfaceProtocol = 0,
+ .iInterface = INDEX_PHONE_HID,
+};
+
+static const struct usb_temp_interface_desc *phone_interfaces[] = {
+ &phone_iface_0,
+ &phone_iface_1_alt_0,
+ &phone_iface_1_alt_1,
+ &phone_iface_2_alt_0,
+ &phone_iface_2_alt_1,
+ &phone_iface_3,
+ NULL,
+};
+
+static const struct usb_temp_config_desc phone_config_desc = {
+ .ppIfaceDesc = phone_interfaces,
+ .bmAttributes = UC_BUS_POWERED,
+ .bMaxPower = 25, /* 50 mA */
+ .iConfiguration = INDEX_PHONE_PRODUCT,
+};
+
+static const struct usb_temp_config_desc *phone_configs[] = {
+ &phone_config_desc,
+ NULL,
+};
+
+static usb_temp_get_string_desc_t phone_get_string_desc;
+static usb_temp_get_vendor_desc_t phone_get_vendor_desc;
+
+const struct usb_temp_device_desc usb_template_phone = {
+ .getStringDesc = &phone_get_string_desc,
+ .getVendorDesc = &phone_get_vendor_desc,
+ .ppConfigDesc = phone_configs,
+ .idVendor = USB_TEMPLATE_VENDOR,
+ .idProduct = 0xb001,
+ .bcdDevice = 0x0100,
+ .bDeviceClass = UDCLASS_IN_INTERFACE,
+ .bDeviceSubClass = 0,
+ .bDeviceProtocol = 0,
+ .iManufacturer = 0,
+ .iProduct = INDEX_PHONE_PRODUCT,
+ .iSerialNumber = 0,
+};
+
+/*------------------------------------------------------------------------*
+ * phone_get_vendor_desc
+ *
+ * Return values:
+ * NULL: Failure. No such vendor descriptor.
+ * Else: Success. Pointer to vendor descriptor is returned.
+ *------------------------------------------------------------------------*/
+static const void *
+phone_get_vendor_desc(const struct usb_device_request *req, uint16_t *plen)
+{
+ if ((req->bmRequestType == 0x81) && (req->bRequest == 0x06) &&
+ (req->wValue[0] == 0x00) && (req->wValue[1] == 0x22) &&
+ (req->wIndex[1] == 0) && (req->wIndex[0] == 3 /* iface */)) {
+
+ *plen = sizeof(phone_hid_descriptor);
+ return (phone_hid_descriptor);
+ }
+ return (NULL);
+}
+
+/*------------------------------------------------------------------------*
+ * phone_get_string_desc
+ *
+ * Return values:
+ * NULL: Failure. No such string.
+ * Else: Success. Pointer to string descriptor is returned.
+ *------------------------------------------------------------------------*/
+static const void *
+phone_get_string_desc(uint16_t lang_id, uint8_t string_index)
+{
+ static const void *ptr[INDEX_PHONE_MAX] = {
+ [INDEX_PHONE_LANG] = &usb_string_lang_en,
+ [INDEX_PHONE_MIXER] = &string_phone_mixer,
+ [INDEX_PHONE_RECORD] = &string_phone_record,
+ [INDEX_PHONE_PLAYBACK] = &string_phone_playback,
+ [INDEX_PHONE_PRODUCT] = &string_phone_product,
+ [INDEX_PHONE_HID] = &string_phone_hid,
+ };
+
+ if (string_index == 0) {
+ return (&usb_string_lang_en);
+ }
+ if (lang_id != 0x0409) {
+ return (NULL);
+ }
+ if (string_index < INDEX_PHONE_MAX) {
+ return (ptr[string_index]);
+ }
+ return (NULL);
+}
Property changes on: trunk/sys/dev/usb/template/usb_template_phone.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list