usb: gadget: add "usb_validate_langid" function
The USB LANGID validation code in "check_user_usb_string" function is moved to "usb_validate_langid" function which can be used by other usb gadget drivers. Signed-off-by: Tao Ren <rentao.bupt@gmail.com> Signed-off-by: Felipe Balbi <balbi@kernel.org>
This commit is contained in:
parent
5cc0710f23
commit
17309a6a43
|
@ -13,8 +13,6 @@
|
|||
int check_user_usb_string(const char *name,
|
||||
struct usb_gadget_strings *stringtab_dev)
|
||||
{
|
||||
unsigned primary_lang;
|
||||
unsigned sub_lang;
|
||||
u16 num;
|
||||
int ret;
|
||||
|
||||
|
@ -22,17 +20,7 @@ int check_user_usb_string(const char *name,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
primary_lang = num & 0x3ff;
|
||||
sub_lang = num >> 10;
|
||||
|
||||
/* simple sanity check for valid langid */
|
||||
switch (primary_lang) {
|
||||
case 0:
|
||||
case 0x62 ... 0xfe:
|
||||
case 0x100 ... 0x3ff:
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!sub_lang)
|
||||
if (!usb_validate_langid(num))
|
||||
return -EINVAL;
|
||||
|
||||
stringtab_dev->language = num;
|
||||
|
|
|
@ -65,3 +65,27 @@ usb_gadget_get_string (const struct usb_gadget_strings *table, int id, u8 *buf)
|
|||
return buf [0];
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_gadget_get_string);
|
||||
|
||||
/**
|
||||
* usb_validate_langid - validate usb language identifiers
|
||||
* @lang: usb language identifier
|
||||
*
|
||||
* Returns true for valid language identifier, otherwise false.
|
||||
*/
|
||||
bool usb_validate_langid(u16 langid)
|
||||
{
|
||||
u16 primary_lang = langid & 0x3ff; /* bit [9:0] */
|
||||
u16 sub_lang = langid >> 10; /* bit [15:10] */
|
||||
|
||||
switch (primary_lang) {
|
||||
case 0:
|
||||
case 0x62 ... 0xfe:
|
||||
case 0x100 ... 0x3ff:
|
||||
return false;
|
||||
}
|
||||
if (!sub_lang)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_validate_langid);
|
||||
|
|
|
@ -773,6 +773,9 @@ struct usb_gadget_string_container {
|
|||
/* put descriptor for string with that id into buf (buflen >= 256) */
|
||||
int usb_gadget_get_string(const struct usb_gadget_strings *table, int id, u8 *buf);
|
||||
|
||||
/* check if the given language identifier is valid */
|
||||
bool usb_validate_langid(u16 langid);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* utility to simplify managing config descriptors */
|
||||
|
|
Loading…
Reference in New Issue