1d9523678SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2ad2ac9d5SWei-Ning Huang /* 3ad2ac9d5SWei-Ning Huang * vpd_decode.h 4ad2ac9d5SWei-Ning Huang * 5ad2ac9d5SWei-Ning Huang * Google VPD decoding routines. 6ad2ac9d5SWei-Ning Huang * 7ad2ac9d5SWei-Ning Huang * Copyright 2017 Google Inc. 8ad2ac9d5SWei-Ning Huang */ 9ad2ac9d5SWei-Ning Huang 10ad2ac9d5SWei-Ning Huang #ifndef __VPD_DECODE_H 11ad2ac9d5SWei-Ning Huang #define __VPD_DECODE_H 12ad2ac9d5SWei-Ning Huang 13ad2ac9d5SWei-Ning Huang #include <linux/types.h> 14ad2ac9d5SWei-Ning Huang 15ad2ac9d5SWei-Ning Huang enum { 16ad2ac9d5SWei-Ning Huang VPD_OK = 0, 17ad2ac9d5SWei-Ning Huang VPD_FAIL, 18ad2ac9d5SWei-Ning Huang }; 19ad2ac9d5SWei-Ning Huang 20ad2ac9d5SWei-Ning Huang enum { 21ad2ac9d5SWei-Ning Huang VPD_TYPE_TERMINATOR = 0, 22ad2ac9d5SWei-Ning Huang VPD_TYPE_STRING, 23ad2ac9d5SWei-Ning Huang VPD_TYPE_INFO = 0xfe, 24ad2ac9d5SWei-Ning Huang VPD_TYPE_IMPLICIT_TERMINATOR = 0xff, 25ad2ac9d5SWei-Ning Huang }; 26ad2ac9d5SWei-Ning Huang 27ad2ac9d5SWei-Ning Huang /* Callback for vpd_decode_string to invoke. */ 28*4b708b7bSHung-Te Lin typedef int vpd_decode_callback(const u8 *key, u32 key_len, 29*4b708b7bSHung-Te Lin const u8 *value, u32 value_len, 30ad2ac9d5SWei-Ning Huang void *arg); 31ad2ac9d5SWei-Ning Huang 32ad2ac9d5SWei-Ning Huang /* 33ad2ac9d5SWei-Ning Huang * vpd_decode_string 34ad2ac9d5SWei-Ning Huang * 35ad2ac9d5SWei-Ning Huang * Given the encoded string, this function invokes callback with extracted 36ad2ac9d5SWei-Ning Huang * (key, value). The *consumed will be plused the number of bytes consumed in 37ad2ac9d5SWei-Ning Huang * this function. 38ad2ac9d5SWei-Ning Huang * 39ad2ac9d5SWei-Ning Huang * The input_buf points to the first byte of the input buffer. 40ad2ac9d5SWei-Ning Huang * 41ad2ac9d5SWei-Ning Huang * The *consumed starts from 0, which is actually the next byte to be decoded. 42ad2ac9d5SWei-Ning Huang * It can be non-zero to be used in multiple calls. 43ad2ac9d5SWei-Ning Huang * 44ad2ac9d5SWei-Ning Huang * If one entry is successfully decoded, sends it to callback and returns the 45ad2ac9d5SWei-Ning Huang * result. 46ad2ac9d5SWei-Ning Huang */ 47*4b708b7bSHung-Te Lin int vpd_decode_string(const u32 max_len, const u8 *input_buf, u32 *consumed, 48ad2ac9d5SWei-Ning Huang vpd_decode_callback callback, void *callback_arg); 49ad2ac9d5SWei-Ning Huang 50ad2ac9d5SWei-Ning Huang #endif /* __VPD_DECODE_H */ 51