.. | .. |
---|
65 | 65 | return buf [0]; |
---|
66 | 66 | } |
---|
67 | 67 | EXPORT_SYMBOL_GPL(usb_gadget_get_string); |
---|
| 68 | + |
---|
| 69 | +/** |
---|
| 70 | + * usb_validate_langid - validate usb language identifiers |
---|
| 71 | + * @langid: usb language identifier |
---|
| 72 | + * |
---|
| 73 | + * Returns true for valid language identifier, otherwise false. |
---|
| 74 | + */ |
---|
| 75 | +bool usb_validate_langid(u16 langid) |
---|
| 76 | +{ |
---|
| 77 | + u16 primary_lang = langid & 0x3ff; /* bit [9:0] */ |
---|
| 78 | + u16 sub_lang = langid >> 10; /* bit [15:10] */ |
---|
| 79 | + |
---|
| 80 | + switch (primary_lang) { |
---|
| 81 | + case 0: |
---|
| 82 | + case 0x62 ... 0xfe: |
---|
| 83 | + case 0x100 ... 0x3ff: |
---|
| 84 | + return false; |
---|
| 85 | + } |
---|
| 86 | + if (!sub_lang) |
---|
| 87 | + return false; |
---|
| 88 | + |
---|
| 89 | + return true; |
---|
| 90 | +} |
---|
| 91 | +EXPORT_SYMBOL_GPL(usb_validate_langid); |
---|