get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/806971/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 806971,
    "url": "http://patchwork.ozlabs.org/api/patches/806971/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/skiboot/patch/20170829062506.8317-3-cyril.bur@au1.ibm.com/",
    "project": {
        "id": 44,
        "url": "http://patchwork.ozlabs.org/api/projects/44/?format=api",
        "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": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170829062506.8317-3-cyril.bur@au1.ibm.com>",
    "list_archive_url": null,
    "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/people/64738/?format=api",
        "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/series/313/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/skiboot/list/?series=313",
            "date": "2017-08-29T06:24:53",
            "name": "Rework flash TOC generation",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/313/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806971/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806971/checks/",
    "tags": {},
    "related": [],
    "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"
    ]
}