From patchwork Wed Sep 16 13:25:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 312431 Delivered-To: patch@linaro.org Received: by 2002:a92:5ad1:0:0:0:0:0 with SMTP id b78csp442405ilg; Wed, 16 Sep 2020 06:00:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzLXJG1L8OnE4Ce65zSBdSQR7Sf2/5Ey1HLXNv6qIZUuVH5DFjZQTHLjSCo3j80JXfqEnMT X-Received: by 2002:ac2:4250:: with SMTP id m16mr7360071lfl.565.1600261235740; Wed, 16 Sep 2020 06:00:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1600261235; cv=pass; d=google.com; s=arc-20160816; b=DJsWMQx4ipLWB+pB/RqhrHhPkjrBWoEQEFttI4w59K4WCF0o0ec7Oh6/3+W9EXFMWi HLWFn29u1pzRfKa2fdDdK0DQ5QU0WAVcHBGNVVdfkFPFQRQhZmaBVCbrRMb9lpMsOCTO 8IMSKDrpmoZeNKNcwGgMlHNgB80saMBFbKzXltMxeengmggx7D/kuRnBa0uDDJpjuVC1 ixgKReWTLiHC9SSuweNWEY3puEuhIIaeNYc4zmPfOiYSq5Ep4ssB25hizReLeVKZQ8P6 AJ3IBM8zWQr7vFfVMLDDUxeN77j5b/A9LI3OvKtu52yaSgnSRJ1e3Jx5S0lJFTiLWlE3 Idqg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:mime-version :content-transfer-encoding:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=qSzIFOAmLwBm07txlGSkMyvvanwWEjR+5MWyLOMY4/o=; b=f/ceLMUi/h6kY1VUQZMFVwQZwjME8ImiGZcfhL7lXRmIX1/JNXPUQXU30V8ItOYRj7 H1mBdCXlO8PjfKPbDueMIRD0iypoEKABi2fytIrutkLDF+DgwELI0f87k8JoFvSRGjhx dm2LhB52Z7QqzNcAp4CzgSRsy64IaOIVCalNPb98aMi4iSz8AUyw7QZOwT1M/Kwx/L4G s77a/qQ0nqDw9bs/PNAGVpv8gIqhBpcz/w1WwaxT+bNC4YMhLoj0h++CKSLaZpgdhMHZ r+vE/sA6s64/uCz0gvzTvV9rvy9aID1PJrJv9zlJCIhgEb2ECQzOjcOokm80smh5UY9E IcrA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=RX+E8Cga; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id j131si2922462lfj.224.2020.09.16.06.00.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2020 06:00:35 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=RX+E8Cga; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 64FF782359; Wed, 16 Sep 2020 14:59:55 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="RX+E8Cga"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 0644882356; Wed, 16 Sep 2020 14:59:53 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER, SPF_HELO_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on062c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1f::62c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7BB4882344 for ; Wed, 16 Sep 2020 14:59:49 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=peng.fan@nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=if7Fd1WanHvGuviV7U6z443FfwGxEZLmTshQCc3c1Jzg7+pQ9p4GD6wtOjKoodmkSIVfxvySb3baPeYSGx7iWdC2tuumfsOghoXoer+xLErD7wZPOuvfFJ67JxFqwVY1jTqxe1SdqGQZU78Ja2MZZyH4KYcV0cHaYR6kYPYw4+jqmvuEzDXEBcqiEWkYw12Z+fAz2dwwaEI6fJ/N/dux3Xv9w9asBq1oeBs9LRxqviV22atZclQpB//7+O8auiQckrqcU0zS6GDNl5lzKfnVuyFR4It3RnrKc8GySy4w/sC53fVDdAK0Hg4/hZKGosD6Sx8QY5Zy57+mMJDhc06S5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qSzIFOAmLwBm07txlGSkMyvvanwWEjR+5MWyLOMY4/o=; b=bT91I7TxXY0S/pyhZoV5dzbgx1oFyUA4jmuX7DV9c2t6Lh0oX71QqP5gjXHRs2Wkd9We8UHXfLByoaGusxnfbXYw4vIt/JfbBDMQgzODnX5LTqJftrxvEld3rqpR0TQDoEhRc6eTH/0SmhRQcPKqcwuzAcQf9IRhh90qglBE+bssCHjULd08HZAoD/hojMTA6bO/aDSTrppaFYovKVvLhPMK8Jk9diBiqEXYr7uNFAEG/1BhAozuCGx6vvPStlR1GvT2k2SrOgMGqQSizw+Sk4E+nM+lIsPjxYs0AbBTjI5729kh4NkHQJHlzEQwgn9aKCX0Lgat2NQTTrBYP3Yc+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qSzIFOAmLwBm07txlGSkMyvvanwWEjR+5MWyLOMY4/o=; b=RX+E8Cgag/ssxi07LJBM6fjzJJBm2Y/sOD54qb9kvIKFHck4E0TEeT5ujIev3eKEiKppeQFjN+uWkE1tgca+s4PBfAhLbU4b5rq6eQiLeC8TuECBBcdfE5293aU4aFWEKt46ueksgTxNYv2PxRr7YDmEsqp7ZrKF4VxT4DLE99I= Authentication-Results: denx.de; dkim=none (message not signed) header.d=none;denx.de; dmarc=none action=none header.from=nxp.com; Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com (2603:10a6:4:a1::14) by DB6PR0401MB2373.eurprd04.prod.outlook.com (2603:10a6:4:4b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.18; Wed, 16 Sep 2020 12:59:48 +0000 Received: from DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::39ff:13b4:4f28:1413]) by DB6PR0402MB2760.eurprd04.prod.outlook.com ([fe80::39ff:13b4:4f28:1413%10]) with mapi id 15.20.3370.019; Wed, 16 Sep 2020 12:59:48 +0000 From: peng.fan@nxp.com To: sbabic@denx.de, lukma@denx.de, marex@denx.de Cc: uboot-imx@nxp.com, u-boot@lists.denx.de, Li Jun , Peng Fan Subject: [PATCH 04/16] usb: gadget: move utf8_to_utf16le to header file Date: Wed, 16 Sep 2020 21:25:25 +0800 Message-Id: <20200916132537.8313-5-peng.fan@nxp.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200916132537.8313-1-peng.fan@nxp.com> References: <20200916132537.8313-1-peng.fan@nxp.com> X-ClientProxiedBy: SG2PR03CA0131.apcprd03.prod.outlook.com (2603:1096:4:91::35) To DB6PR0402MB2760.eurprd04.prod.outlook.com (2603:10a6:4:a1::14) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from linux-1xn6.ap.freescale.net (119.31.174.71) by SG2PR03CA0131.apcprd03.prod.outlook.com (2603:1096:4:91::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.5 via Frontend Transport; Wed, 16 Sep 2020 12:59:45 +0000 X-Mailer: git-send-email 2.28.0 X-Originating-IP: [119.31.174.71] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 146037ee-5d6e-4abd-814a-08d85a406426 X-MS-TrafficTypeDiagnostic: DB6PR0401MB2373: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:466; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gTT4vQrFodAC4KAzCMsJC3A5qtz1bCpj5/RF45Ykrz8dlJ0sPbsfjnBJCrpQrrfQLoAjRH1HYu4oYkQJ5mC/lDXRNpQXbfNzgh43d8Ot7xVMaxbZrHMvPqFzv/BQbTgLJqzYC0lsl4hmyXtr5gyvY09Eh96iTqBAEChvx4aFXjxKSHbAitbhv3YDcJn7JceT1G5VZuOfE2qtyD8u7PYKTyFgc1WWulCH2mFAnwCsAudJLWZQMk4JqYnhx7kOaD/dKWHosAiCXtxmSZpMf0xdRhreakuncksIf+mWnBjwJNX9J4/NuI17KHQz67UDGDA1ciIVv293m0W4kSEcN1CAkQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB6PR0402MB2760.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(366004)(376002)(136003)(39860400002)(396003)(54906003)(6666004)(9686003)(1076003)(6512007)(5660300002)(478600001)(52116002)(36756003)(6506007)(66946007)(26005)(6486002)(16526019)(186003)(956004)(316002)(66556008)(66476007)(2616005)(86362001)(83380400001)(8936002)(2906002)(4326008)(8676002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: MZaxMa6xfBBwadkCezO53o0Ebrm/XYlFgluIhmWVZNPwR6zPuPAYk4ZJpWZzOQDVxsaCh3b1lq6YLxuVE8l0seuDm60Xmir34K1ZKAHjA5RICVTEqSHiQbidNTPcFTMNgmz6a8FS9oN5HqMUOLMqZaXxnJsfOlL5VVpviqGJVuwWbkLUD2SDjtovHXz8t8JGd+DJr9vTkNObMFbeWa6+yWdiw7QF7MChq/jULrhMTZlTfNwNh+3UXmKH8z04HQra4J+gNPz5zTgOmyn7+CMQRmB8Uo16G/N6K3+Xe5zWw+NRUY6kglRg5HTJ9ddHQ2ADEvUwNMlEtyRDkhqRXa7l9tmvTPQYH0JbW/KCaOuV0OwHxgR2Fd/B9t3PiO9gzKjIPNR/fGnUr+CwKqGbFvy2ZilLb/572I3NOZtn3umstGqul1PS7vLL7gDWui36RSzJ8XfU3KMNw9iScE9Uy9RUELYekylwf+70L0rGibBVNn+3M9OHWK64X61xCe95RWBHyyWN+hvh87sq9bHTG3iYMOskzvrsS5usJCq736ZZfpzz3KUp8MbNgczHbU6R88GTSjoSJB123feOLd6O3GADhfL6JOqp2IjrsaV2KdVvVAbNoEr17znzzn4dotQSttEqRROjhC5PxFiN1T/BKmE8OA== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 146037ee-5d6e-4abd-814a-08d85a406426 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0402MB2760.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2020 12:59:47.9995 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /+bEc/DbaO6crAJjWc0qh/zqg5b0BfBQ203Dod6GmfjLIJ2sdmuQxuRtBpRt952gb/BqcinFalLAPOcf55opDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2373 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean From: Li Jun As other users may use utf8_to_utf16le() to convert the utf8 to utf16 for usb, so move it to head file. Signed-off-by: Li Jun Signed-off-by: Peng Fan --- drivers/usb/gadget/usbstring.c | 74 +-------------------------------- include/linux/utf.h | 75 ++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 73 deletions(-) create mode 100644 include/linux/utf.h -- 2.28.0 diff --git a/drivers/usb/gadget/usbstring.c b/drivers/usb/gadget/usbstring.c index 83cdd8a259..e2464ad923 100644 --- a/drivers/usb/gadget/usbstring.c +++ b/drivers/usb/gadget/usbstring.c @@ -10,79 +10,7 @@ #include #include #include - -#include - - -static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len) -{ - int count = 0; - u8 c; - u16 uchar; - - /* - * this insists on correct encodings, though not minimal ones. - * BUT it currently rejects legit 4-byte UTF-8 code points, - * which need surrogate pairs. (Unicode 3.1 can use them.) - */ - while (len != 0 && (c = (u8) *s++) != 0) { - if ((c & 0x80)) { - /* - * 2-byte sequence: - * 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx - */ - if ((c & 0xe0) == 0xc0) { - uchar = (c & 0x1f) << 6; - - c = (u8) *s++; - if ((c & 0xc0) != 0x80) - goto fail; - c &= 0x3f; - uchar |= c; - - /* - * 3-byte sequence (most CJKV characters): - * zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx - */ - } else if ((c & 0xf0) == 0xe0) { - uchar = (c & 0x0f) << 12; - - c = (u8) *s++; - if ((c & 0xc0) != 0x80) - goto fail; - c &= 0x3f; - uchar |= c << 6; - - c = (u8) *s++; - if ((c & 0xc0) != 0x80) - goto fail; - c &= 0x3f; - uchar |= c; - - /* no bogus surrogates */ - if (0xd800 <= uchar && uchar <= 0xdfff) - goto fail; - - /* - * 4-byte sequence (surrogate pairs, currently rare): - * 11101110wwwwzzzzyy + 110111yyyyxxxxxx - * = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx - * (uuuuu = wwww + 1) - * FIXME accept the surrogate code points (only) - */ - } else - goto fail; - } else - uchar = c; - put_unaligned_le16(uchar, cp++); - count++; - len--; - } - return count; -fail: - return -1; -} - +#include /** * usb_gadget_get_string - fill out a string descriptor diff --git a/include/linux/utf.h b/include/linux/utf.h new file mode 100644 index 0000000000..e1f7d3bd1d --- /dev/null +++ b/include/linux/utf.h @@ -0,0 +1,75 @@ +#ifndef _LINUX_UTF_H +#define _LINUX_UTF_H + +#include + +static inline int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len) +{ + int count = 0; + u8 c; + u16 uchar; + + /* + * this insists on correct encodings, though not minimal ones. + * BUT it currently rejects legit 4-byte UTF-8 code points, + * which need surrogate pairs. (Unicode 3.1 can use them.) + */ + while (len != 0 && (c = (u8) *s++) != 0) { + if ((c & 0x80)) { + /* + * 2-byte sequence: + * 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx + */ + if ((c & 0xe0) == 0xc0) { + uchar = (c & 0x1f) << 6; + + c = (u8) *s++; + if ((c & 0xc0) != 0x80) + goto fail; + c &= 0x3f; + uchar |= c; + + /* + * 3-byte sequence (most CJKV characters): + * zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx + */ + } else if ((c & 0xf0) == 0xe0) { + uchar = (c & 0x0f) << 12; + + c = (u8) *s++; + if ((c & 0xc0) != 0x80) + goto fail; + c &= 0x3f; + uchar |= c << 6; + + c = (u8) *s++; + if ((c & 0xc0) != 0x80) + goto fail; + c &= 0x3f; + uchar |= c; + + /* no bogus surrogates */ + if (0xd800 <= uchar && uchar <= 0xdfff) + goto fail; + + /* + * 4-byte sequence (surrogate pairs, currently rare): + * 11101110wwwwzzzzyy + 110111yyyyxxxxxx + * = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx + * (uuuuu = wwww + 1) + * FIXME accept the surrogate code points (only) + */ + } else + goto fail; + } else + uchar = c; + put_unaligned_le16(uchar, cp++); + count++; + len--; + } + return count; +fail: + return -1; +} + +#endif /* _LINUX_UTF_H */