From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A7C1C433F5 for ; Thu, 3 Mar 2022 20:46:24 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9E81983CB4; Thu, 3 Mar 2022 21:45:00 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.b="shmEvfDM"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E6BA483CBF; Thu, 3 Mar 2022 21:44:41 +0100 (CET) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02on060a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe07::60a]) (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 D94DF838FC for ; Thu, 3 Mar 2022 21:44:29 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k+0QL9z3vx63LG/NEUW/8eAdPC74NG2XQ/stn1gjGTIkG55nl0TdEEByC7Gxln9QJ3Ooi4FJRCqisQzRXut7OWeS4//FOsaZoWVJsRXLlPrkilcPbQ5Ovg21IlWLRyTzGG02Pf5dQwGnxQVaTTMlZ+wbzeLprv7g3IT7hJkm5r4OUjntBLk0WjlVj2LUA1r3lmbT52Q75vFi4BXzSRRkcqJ8Nxd038x1uAHgXBF110TObHmV4XAaQJaVOv0p5LyviGFfYa9hes9kO4GtdCrbYp09U9+w0o0ETgXudgp0wUldOQY30E7AE39TuIgGHadJLDZi+xIy/wm18Tx9jGYAcA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cw2YYdPY2te+vtKnQtt0KN9oDzng/7i8BKfAfFGeTuU=; b=LcsxutDHinc5FdCxk4XD2uqElkcqA0aZo/FQildmadVs3lqKKfrx2aFdx73+wE11Z/oSXyyudcsUmFgMCXBtzN5dFWaHph8f83C+sdxxNtNOPBIE6krolkz2q/SsWX+cr9ohVoOVFSg5OWH0TVzK1qtfi5ngSIGkekxIvilXWTF3ep9KfmQLRLJjH2+cL3AD7tIld3beKYtZsmwavrvvBaSbpqhOCyohcsy3tALm3e1qxWFJ3v0M//9Jje1V7Mp3dQAFeGe74Wa1Co8CoqS2QcsXJCfiAUX+HOMezs0RgaMHaV/5A3Q+eqDlAyYg1Zcb9K0EoUaEf5flmxLzzgeKQA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cw2YYdPY2te+vtKnQtt0KN9oDzng/7i8BKfAfFGeTuU=; b=shmEvfDMKm0CmIdQbijmWqCSi0N2V6sRzmIDc7dPkx8H2jeO1frSNBrgmExt6S0KefaVYXGaH7KKVFW+0pYHGZFTDLXIwCYE5uxr4CFQf99YG3zvWIbMux+tDpRXx6t17/Lzaz5zjZpuPniIEPMBbZp5GZiHKCRd4D2OXdh342pPr8bDVmHjShDhZzkR1Sx+/vCpp6xcQ8hRBVlnm/EHN1EnBH2lJ0YU8FAQ/4FXjML+b8Ftp9TMP1vwI4DOEmLM+o4qIW6kDjUiFmj7BTOrqtCXkSdGxNoHC72aWK7R7G2nxVW0S2XAyDvzuJGsS0VnZ/3SaSJAF7PBQn5Sz3xglw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) by AM6PR03MB3573.eurprd03.prod.outlook.com (2603:10a6:209:2f::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.26; Thu, 3 Mar 2022 20:44:28 +0000 Received: from DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9130:93ae:6e27:e9a]) by DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9130:93ae:6e27:e9a%4]) with mapi id 15.20.5038.014; Thu, 3 Mar 2022 20:44:28 +0000 From: Sean Anderson To: Simon Glass Cc: Linus Walleij , Tom Rini , u-boot@lists.denx.de, Sean Anderson Subject: [PATCH 09/17] arm: smh: Add some file manipulation commands Date: Thu, 3 Mar 2022 15:43:52 -0500 Message-Id: <20220303204400.2787389-10-sean.anderson@seco.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220303204400.2787389-1-sean.anderson@seco.com> References: <20220303204400.2787389-1-sean.anderson@seco.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MN2PR16CA0013.namprd16.prod.outlook.com (2603:10b6:208:134::26) To DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c74c2de4-0e6e-46a7-a678-08d9fd569c8b X-MS-TrafficTypeDiagnostic: AM6PR03MB3573:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: j04DVhUJpzt9ENo58HIaVvy5mcGfN1UuuhkvJAdwED85YCLUi8gK4xujrQvl5he0ci2GfJJXqSCVSaSkaDS8cx9PNrwGAoOizmIKwNPM2HSDtN4c9XhKwOlZGJvOBhODckGhGYbWXxHa4HAgeY+wEWkIGKF28ZB092G0A9YqovkyrA9JsHVbY+JQtFAsZ/QuNXYEfq+HUaNL0uwVS4hEMOV4glAe6WfMGv2WJLv8dwJMVj9M7SxonA1avd3w3rbeVZtga7q8/GhIcbCie3D/hnnHFM0mG2Fdk/2dQeG+iAzRlieTGvmP6orSCVb9Snok8Arr8QxDUBuoBRpABOQ5FUAp7FVmeaITmy2RhVKtxEHJMBhcH95/F0y5XDlQ6NfokKHNNrSxi7NZLAObVjRmDACTT15JByWJuXuSq2kWswlApkY5uQKcImrQ7f6c0hfjBVOHFO4kLh+gpSj7jhRssWA7CH6SidqmswyNY+bJkwptpWpGo9/opmi1Ui+g+AEfyj9f/Z4T/UhN50qOIc/oaR+RJmbTb2CuYIlLntayKKP9/jbpQ6Pw9n/GLpYOyORpna3xi3wV0E8z1OYT3OcnkuiLICFfmPJLSBHhjuIsoorng4T3/JGC993TWs8cYXi2Po/iE2NwYqn2X+yXoyuBrE1Xug3YJr/+2vSK4wQTgMXnNFSeXeo8Afjcb9+C9iiVPkgos8t4849T92bzERfkPA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR03MB4523.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6916009)(36756003)(54906003)(1076003)(2616005)(83380400001)(316002)(38100700002)(38350700002)(186003)(26005)(107886003)(4326008)(6506007)(6666004)(508600001)(6512007)(2906002)(52116002)(86362001)(5660300002)(6486002)(8676002)(44832011)(66476007)(66946007)(66556008)(8936002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3UV8UjumsfN28BmYjNNVy7odFQSBkZrR27/KM1BIuhS+mlsyniqvQQCiqIVV?= =?us-ascii?Q?ncXW1WrD97zqQnNuYSbaKmjhiYyyssTvi7YOWi3FrZHKg4s5SVK0x1rFYkGb?= =?us-ascii?Q?BmILOb77t1v5Dx44k4RmJvpcwo4bcklJAcItxBWmQS/IRkmub5j50q6hMDl+?= =?us-ascii?Q?Iz0zmd/DDTcSmpwLFF0Xi9F93ui6SlEqVfLOBXS0ZroKtz72lSPbOcjck4O0?= =?us-ascii?Q?lTYTABuRkxesgAeeQN3YKY6NgddmnU8RDo4rmuXDygb+3/V1R8I3JaZgaStp?= =?us-ascii?Q?QaX70/OVKwZCyr6JRXAomklkKsUXyvK1JYC07iQHG6o/MNLxK6zXk+Ni0GxX?= =?us-ascii?Q?pr4qdESBPpTSCWTExnZrzMwoJTOc7vSOtTVtnEjWW/6Av5AxRop90RdtTFWj?= =?us-ascii?Q?R/SVoGYSOxQV+D4yf/NEJD7xQt4zRz/1OxmW0lQM7ahxPYU0X7Y88MUwpFuf?= =?us-ascii?Q?pumDc6Qh/xCecFyl73m+MmKPtgosSOvAt/uxbisjlXCx9/69s3VVp/pffgSg?= =?us-ascii?Q?85VGuitQe0HK9YuBzUS1DPbTcxDKJkc8CFJBLAlpwFTj9OJmRHgWhHaWWv0L?= =?us-ascii?Q?SzMfAvh2Xn7tBHZmBl7ljVxbomGWSCRw4vGejGdCBlkntw54xAiUr2MIp395?= =?us-ascii?Q?/O9E+dViROe4idxnZe7BDud3Q8nWQlwHJmlpS809VTWeY4Lild2blJJrtmVU?= =?us-ascii?Q?KDMwCqPg8H1bW88xM0vH/L2gU3T3jwHEIpF1/5XW3NNJFxBLaIn+BP7dx1MA?= =?us-ascii?Q?oTzhYAEVgPaBbIjNO9zWgKEBT8Ti5LhHUHI0v+AAeDORwxNAs6PODzV+K4y/?= =?us-ascii?Q?4wxPz96v08xyh5G7Uhu0ZGzN0KpcAVmE8xCZk9lBnUQbBPtPfXMK1ZV3Q/m8?= =?us-ascii?Q?/+pY1WUlgI4dhXBNoHxbdrTdsvkgd33Zout3booedwdN6x1TMtKN4uwL+8FK?= =?us-ascii?Q?HkAKKW1HsFpE/qdH8e4a9V7SGyyDWNcYl7B5NZ+KDKGfAbIlvH98v0mMXE0N?= =?us-ascii?Q?iUe4GnX5xH65siXqNCuuPX/D9aYEfT/Rt8LsGdoITOHO0atGn6QIFbfgHt01?= =?us-ascii?Q?IZ5nxOJd3VCQ/DTDG7HpZujbjP0ZDdoFm2g3VthvTshGNSTJxqU2kGe8gAto?= =?us-ascii?Q?nM2VidrlISSemffPj281dNFggf0iR8N0TTcqrOkILFThzYNqhPPWU/Pgajcl?= =?us-ascii?Q?ErKZNRJQxNJMsVEVlb5i3iDqEL8SDyMeP93mI7cAH+K6dom1P27ELdFUJqAM?= =?us-ascii?Q?T2gKyYgvNu0EaSep84YA8UCeXGuB/WYJJG5LBws1VhvPdJiwFe64YoWbN9Ai?= =?us-ascii?Q?O5fGlr7xyG3Y1F+TbrODQ0ugfJtnyGEnE98+BA3AeGhCoZYSFVzB4EqFWFTP?= =?us-ascii?Q?x6btpcxaa8WJ9EKsMz9Xg3bcIPL6SqIXG/asI3UtiV7GUD6WVuU/C3V7It6v?= =?us-ascii?Q?3NF+gZcz4zljpbQYH8ezrdIzeZMW2d8C2xcadFBUZanjW/0WTw+Vp3HXIncp?= =?us-ascii?Q?3kZvpSr6zBuino+BpJCdpoiv5HC5f0o/748NtN7K3AG4KsV1qrMJJPDDhygw?= =?us-ascii?Q?3vOQzmFLFpREHlOjp8Aefq8U+SdyHao3bCAG9EPA4b7krGEKfspWk1n5A5Dx?= =?us-ascii?Q?hpomc0P5t8j7OM20ZZKsrMc=3D?= X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: c74c2de4-0e6e-46a7-a678-08d9fd569c8b X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4523.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2022 20:44:28.6767 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IlNjYKETtC8yvnRmh8rzG3Z586502c8h9azQZWedbggzrWZP7u5+pn/MU8upal0Jg9oH9JuDG0wfWLF3tjQz5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR03MB3573 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.103.5 at phobos.denx.de X-Virus-Status: Clean In order to add filesystem support, we will need to be able to seek and write files. Add the appropriate helper functions. Signed-off-by: Sean Anderson --- arch/arm/lib/semihosting.c | 67 +++++++++++++++++++++++++++++++------- include/semihosting.h | 20 ++++++++++++ 2 files changed, 76 insertions(+), 11 deletions(-) diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index 2943f7b82f..d08003cef1 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -1,15 +1,13 @@ // SPDX-License-Identifier: GPL-2.0+ /* + * Copyright (C) 2022 Sean Anderson * Copyright 2014 Broadcom Corporation */ /* - * Minimal semihosting implementation for reading files into memory. If more - * features like writing files or console output are required they can be - * added later. This code has been tested on arm64/aarch64 fastmodel only. - * An untested placeholder exists for armv7 architectures, but since they - * are commonly available in silicon now, fastmodel usage makes less sense - * for them. + * This code has been tested on arm64/aarch64 fastmodel only. An untested + * placeholder exists for armv7 architectures, but since they are commonly + * available in silicon now, fastmodel usage makes less sense for them. */ #include #include @@ -19,7 +17,9 @@ #define SYSOPEN 0x01 #define SYSCLOSE 0x02 +#define SYSWRITE 0x05 #define SYSREAD 0x06 +#define SYSSEEK 0x0A #define SYSFLEN 0x0C #define SYSERRNO 0x13 @@ -80,14 +80,22 @@ long smh_open(const char *fname, enum smh_open_mode mode) return fd; } +/** + * struct smg_rdwr_s - Arguments for read and write + * @fd: A file descriptor returned from smh_open() + * @memp: Pointer to a buffer of memory of at least @len bytes + * @len: The number of bytes to read or write + */ +struct smh_rdwr_s { + long fd; + void *memp; + size_t len; +}; + long smh_read(long fd, void *memp, size_t len) { long ret; - struct smh_read_s { - long fd; - void *memp; - size_t len; - } read; + struct smh_rdwr_s read; debug("%s: fd %ld, memp %p, len %zu\n", __func__, fd, memp, len); @@ -101,6 +109,24 @@ long smh_read(long fd, void *memp, size_t len) return len - ret; } +long smh_write(long fd, const void *memp, size_t len, ulong *written) +{ + long ret; + struct smh_rdwr_s write; + + debug("%s: fd %ld, memp %p, len %zu\n", __func__, fd, memp, len); + + write.fd = fd; + write.memp = (void *)memp; + write.len = len; + + ret = smh_trap(SYSWRITE, &write); + *written = len - ret; + if (ret) + return smh_errno(); + return 0; +} + long smh_close(long fd) { long ret; @@ -125,6 +151,25 @@ long smh_flen(long fd) return ret; } +long smh_seek(long fd, long pos) +{ + long ret; + struct smh_seek_s { + long fd; + long pos; + } seek; + + debug("%s: fd %ld pos %ld\n", __func__, fd, pos); + + seek.fd = fd; + seek.pos = pos; + + ret = smh_trap(SYSSEEK, &seek); + if (ret) + return smh_errno(); + return 0; +} + static int smh_load_file(const char * const name, ulong load_addr, ulong *end_addr) { diff --git a/include/semihosting.h b/include/semihosting.h index d8337b6269..b53c650444 100644 --- a/include/semihosting.h +++ b/include/semihosting.h @@ -50,6 +50,17 @@ long smh_open(const char *fname, enum smh_open_mode mode); */ long smh_read(long fd, void *memp, size_t len); +/** + * smh_write() - Write data to a file + * @fd: A file descriptor returned from smh_open() + * @memp: Pointer to a buffer of memory of at least @len bytes + * @len: The number of bytes to read + * @written: Pointer which will be updated with the actual bytes written + * + * Return: 0 on success or negative error on failure + */ +long smh_write(long fd, const void *memp, size_t len, ulong *written); + /** * smh_close() - Close an open file * @fd: A file descriptor returned from smh_open() @@ -66,4 +77,13 @@ long smh_close(long fd); */ long smh_flen(long fd); +/** + * smh_seek() - Seek to a position in a file + * @fd: A file descriptor returned from smh_open() + * @pos: The offset (in bytes) to seek to + * + * Return: 0 on success or negative error on failure + */ +long smh_seek(long fd, long pos); + #endif /* _SEMIHOSTING_H */ -- 2.25.1