{"id":806971,"url":"http://patchwork.ozlabs.org/api/1.0/patches/806971/?format=json","project":{"id":44,"url":"http://patchwork.ozlabs.org/api/1.0/projects/44/?format=json","name":"skiboot firmware development","link_name":"skiboot","list_id":"skiboot.lists.ozlabs.org","list_email":"skiboot@lists.ozlabs.org","web_url":"http://github.com/open-power/skiboot","scm_url":"http://github.com/open-power/skiboot","webscm_url":""},"msgid":"<20170829062506.8317-3-cyril.bur@au1.ibm.com>","date":"2017-08-29T06:24:55","name":"[RFC,02/13] libflash/libffs: Add helpers for the treatment of partition flags","commit_ref":null,"pull_url":null,"state":"rfc","archived":false,"hash":"23bf5b4626fa88389665159040f3f76e717522dd","submitter":{"id":64738,"url":"http://patchwork.ozlabs.org/api/1.0/people/64738/?format=json","name":"Cyril Bur","email":"cyril.bur@au1.ibm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/skiboot/patch/20170829062506.8317-3-cyril.bur@au1.ibm.com/mbox/","series":[{"id":313,"url":"http://patchwork.ozlabs.org/api/1.0/series/313/?format=json","date":"2017-08-29T06:24:53","name":"Rework flash TOC generation","version":1,"mbox":"http://patchwork.ozlabs.org/series/313/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/806971/checks/","tags":{},"headers":{"Return-Path":"<skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","skiboot@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","skiboot@lists.ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhJwg75llz9ryr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 16:42:43 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xhJwg6FwVzDrLC\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 16:42:43 +1000 (AEST)","from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n\t[148.163.156.1])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xhJY71989zDqfg\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:46 +1000 (AEST)","from pps.filterd (m0098393.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv7T6OEMH001439\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 02:25:41 -0400","from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2cmyn1webd-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 02:25:41 -0400","from localhost\n\tby e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <skiboot@lists.ozlabs.org> from <cyril.bur@au1.ibm.com>;\n\tTue, 29 Aug 2017 16:25:38 +1000","from d23relay09.au.ibm.com (202.81.31.228)\n\tby e23smtp03.au.ibm.com (202.81.31.209) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tTue, 29 Aug 2017 16:25:36 +1000","from d23av05.au.ibm.com (d23av05.au.ibm.com [9.190.234.119])\n\tby d23relay09.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n\tv7T6PaZj38404258\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:36 +1000","from d23av05.au.ibm.com (localhost [127.0.0.1])\n\tby d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id\n\tv7T6PZVp017737\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:35 +1000","from ozlabs.au.ibm.com (ozlabs.au.ibm.com [9.192.253.14])\n\tby d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id\n\tv7T6PZNT017727; Tue, 29 Aug 2017 16:25:35 +1000","from camb691.ozlabs.ibm.com (haven.au.ibm.com [9.192.254.114])\n\t(using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby ozlabs.au.ibm.com (Postfix) with ESMTPSA id 1AABDA0258;\n\tTue, 29 Aug 2017 16:25:35 +1000 (AEST)"],"From":"Cyril Bur <cyril.bur@au1.ibm.com>","To":"skiboot@lists.ozlabs.org, stewart@linux.vnet.ibm.com","Date":"Tue, 29 Aug 2017 16:24:55 +1000","X-Mailer":"git-send-email 2.14.1","In-Reply-To":"<20170829062506.8317-1-cyril.bur@au1.ibm.com>","References":"<20170829062506.8317-1-cyril.bur@au1.ibm.com>","X-TM-AS-MML":"disable","x-cbid":"17082906-0008-0000-0000-00000154A485","X-IBM-AV-DETECTION":"SAVI=unused REMOTE=unused XFE=unused","x-cbparentid":"17082906-0009-0000-0000-00000987A78D","Message-Id":"<20170829062506.8317-3-cyril.bur@au1.ibm.com>","X-Proofpoint-Virus-Version":"vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-29_01:, , signatures=0","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708290096","Subject":"[Skiboot] [RFC PATCH 02/13] libflash/libffs: Add helpers for the\n\ttreatment of partition flags","X-BeenThere":"skiboot@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Mailing list for skiboot development <skiboot.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/skiboot>,\n\t<mailto:skiboot-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/skiboot/>","List-Post":"<mailto:skiboot@lists.ozlabs.org>","List-Help":"<mailto:skiboot-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/skiboot>,\n\t<mailto:skiboot-request@lists.ozlabs.org?subject=subscribe>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org","Sender":"\"Skiboot\"\n\t<skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>"},"content":"There is an increasing number of programs wanting to print partition\nflags as strings or wanting to parse strings back into a binary\nstructure.\n\nThis patch introduces a to_string() function and its complement so that\nthere can be one place where the code exists.\n\nSigned-off-by: Cyril Bur <cyril.bur@au1.ibm.com>\n---\n libflash/ffs.h    |  1 +\n libflash/libffs.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-\n libflash/libffs.h |  7 +++++\n 3 files changed, 101 insertions(+), 1 deletion(-)","diff":"diff --git a/libflash/ffs.h b/libflash/ffs.h\nindex 18722538..81818fdf 100644\n--- a/libflash/ffs.h\n+++ b/libflash/ffs.h\n@@ -76,6 +76,7 @@ enum ffs_type {\n #define FFS_MISCFLAGS_READONLY 0x40\n #define FFS_MISCFLAGS_BACKUP 0x20\n #define FFS_MISCFLAGS_REPROVISION 0x10\n+#define FFS_MISCFLAGS_GOLDEN 0x01\n \n /**\n  * struct __ffs_entry_user - On flash user data entries\ndiff --git a/libflash/libffs.c b/libflash/libffs.c\nindex 038f5942..66b1d3f2 100644\n--- a/libflash/libffs.c\n+++ b/libflash/libffs.c\n@@ -188,6 +188,88 @@ static int ffs_entry_to_cpu(struct ffs_hdr *hdr,\n \treturn rc;\n }\n \n+char *ffs_entry_user_to_string(struct ffs_entry_user *user)\n+{\n+\tchar *ret;\n+\n+\tif (!user)\n+\t\treturn NULL;\n+\n+\tret = strdup(\"-------\");\n+\tif (!ret)\n+\t\treturn NULL;\n+\n+\tif (user->datainteg & FFS_ENRY_INTEG_ECC)\n+\t\tret[0] = 'E';\n+\n+\tif (user->vercheck & FFS_VERCHECK_SHA512V)\n+\t\tret[1] = 'V';\n+\n+\tif (user->vercheck & FFS_VERCHECK_SHA512EC)\n+\t\tret[2] = 'I';\n+\n+\tif (user->miscflags & FFS_MISCFLAGS_PRESERVED)\n+\t\tret[3] = 'P';\n+\n+\tif (user->miscflags & FFS_MISCFLAGS_READONLY)\n+\t\tret[4] = 'R';\n+\n+\tif (user->miscflags & FFS_MISCFLAGS_BACKUP)\n+\t\tret[5] = 'B';\n+\n+\tif (user->miscflags & FFS_MISCFLAGS_REPROVISION)\n+\t\tret[6] = 'F';\n+\n+\tif (user->miscflags & FFS_MISCFLAGS_GOLDEN)\n+\t\tret[7] = 'G';\n+\n+\treturn ret;\n+}\n+\n+int ffs_string_to_entry_user(const char *flags, int nflags,\n+\t\tstruct ffs_entry_user *user)\n+{\n+\tint i;\n+\n+\tif (!user || !flags)\n+\t\treturn FLASH_ERR_PARM_ERROR;\n+\n+\tmemset(user, 0, sizeof(struct ffs_entry_user));\n+\tfor (i = 0; i < nflags; i++) {\n+\t\tswitch (flags[i]) {\n+\t\tcase 'E':\n+\t\t\tuser->datainteg |= FFS_ENRY_INTEG_ECC;\n+\t\t\tbreak;\n+\t\tcase 'V':\n+\t\t\tuser->vercheck |= FFS_VERCHECK_SHA512V;\n+\t\t\tbreak;\n+\t\tcase 'I':\n+\t\t\tuser->vercheck |= FFS_VERCHECK_SHA512EC;\n+\t\t\tbreak;\n+\t\tcase 'P':\n+\t\t\tuser->miscflags |= FFS_MISCFLAGS_PRESERVED;\n+\t\t\tbreak;\n+\t\tcase 'R':\n+\t\t\tuser->miscflags |= FFS_MISCFLAGS_READONLY;\n+\t\t\tbreak;\n+\t\tcase 'B':\n+\t\t\tuser->miscflags |= FFS_MISCFLAGS_BACKUP;\n+\t\t\tbreak;\n+\t\tcase 'F':\n+\t\t\tuser->miscflags |= FFS_MISCFLAGS_REPROVISION;\n+\t\t\tbreak;\n+\t\tcase 'G':\n+\t\t\tuser->miscflags |= FFS_MISCFLAGS_GOLDEN;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tFL_DBG(\"Unknown flag '%c'\\n\", flags[i]);\n+\t\t\treturn FLASH_ERR_PARM_ERROR;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n bool has_flag(struct ffs_entry *ent, uint16_t flag)\n {\n \treturn ((ent->user.miscflags & flag) != 0);\n@@ -723,13 +805,23 @@ int ffs_entry_user_set(struct ffs_entry *ent, struct ffs_entry_user *user)\n \tif (user->vercheck & ~(FFS_VERCHECK_SHA512V | FFS_VERCHECK_SHA512EC))\n \t\treturn -1;\n \tif (user->miscflags & ~(FFS_MISCFLAGS_PRESERVED | FFS_MISCFLAGS_BACKUP |\n-\t\t\t\tFFS_MISCFLAGS_READONLY | FFS_MISCFLAGS_REPROVISION))\n+\t\t\t\tFFS_MISCFLAGS_READONLY | FFS_MISCFLAGS_REPROVISION | FFS_MISCFLAGS_GOLDEN))\n \t\treturn -1;\n \n \tmemcpy(&ent->user, user, sizeof(*user));\n \treturn 0;\n }\n \n+struct ffs_entry_user ffs_entry_user_get(struct ffs_entry *ent)\n+{\n+\tstruct ffs_entry_user user = { 0 };\n+\n+\tif (ent)\n+\t\tmemcpy(&user, &ent->user, sizeof(user));\n+\n+\treturn user;\n+}\n+\n int ffs_entry_new(const char *name, uint32_t base, uint32_t size, struct ffs_entry **r)\n {\n \tstruct ffs_entry *ret;\ndiff --git a/libflash/libffs.h b/libflash/libffs.h\nindex a0f65a05..6f8e34e3 100644\n--- a/libflash/libffs.h\n+++ b/libflash/libffs.h\n@@ -88,8 +88,13 @@ struct ffs_entry_user {\n #define FFS_MISCFLAGS_READONLY 0x40\n #define FFS_MISCFLAGS_BACKUP 0x20\n #define FFS_MISCFLAGS_REPROVISION 0x10\n+#define FFS_MISCFLAGS_GOLDEN 0x01\n \n \n+int ffs_string_to_entry_user(const char *flags, int nflags,\n+\t\tstruct ffs_entry_user *user);\n+char *ffs_entry_user_to_string(struct ffs_entry_user *user);\n+\n bool has_ecc(struct ffs_entry *ent);\n \n bool has_flag(struct ffs_entry *ent, uint16_t flag);\n@@ -144,6 +149,8 @@ int ffs_entry_user_set(struct ffs_entry *ent, struct ffs_entry_user *user);\n \n int ffs_entry_add(struct ffs_hdr *hdr, struct ffs_entry *entry, unsigned int side);\n \n+struct ffs_entry_user ffs_entry_user_get(struct ffs_entry *ent);\n+\n int ffs_hdr_create_backup(struct ffs_hdr *hdr);\n \n int ffs_hdr_finalise(struct blocklevel_device *bl, struct ffs_hdr *hdr);\n","prefixes":["RFC","02/13"]}