summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/lib/libnvram/envvar.c
diff options
context:
space:
mode:
authorRajithaY <rajithax.yerrumsetty@intel.com>2017-04-25 03:31:15 -0700
committerRajitha Yerrumchetty <rajithax.yerrumsetty@intel.com>2017-05-22 06:48:08 +0000
commitbb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch)
treeca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/SLOF/lib/libnvram/envvar.c
parenta14b48d18a9ed03ec191cf16b162206998a895ce (diff)
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to kvmfornfv repo and make use of the updated latest qemu for the execution of all testcase Change-Id: I1280af507a857675c7f81d30c95255635667bdd7 Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/SLOF/lib/libnvram/envvar.c')
-rw-r--r--qemu/roms/SLOF/lib/libnvram/envvar.c243
1 files changed, 0 insertions, 243 deletions
diff --git a/qemu/roms/SLOF/lib/libnvram/envvar.c b/qemu/roms/SLOF/lib/libnvram/envvar.c
deleted file mode 100644
index ee943fce5..000000000
--- a/qemu/roms/SLOF/lib/libnvram/envvar.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation
- * All rights reserved.
- * This program and the accompanying materials
- * are made available under the terms of the BSD License
- * which accompanies this distribution, and is available at
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * Contributors:
- * IBM Corporation - initial implementation
- *****************************************************************************/
-
-#include <stdint.h>
-#include "../libc/include/stdio.h"
-#include "../libc/include/string.h"
-#include "../libc/include/stdlib.h"
-#include "nvram.h"
-
-/* returns the offset of the first byte after the searched envvar */
-static int get_past_env_pos(partition_t part, char *envvar, int evlen)
-{
- int offset, len;
- static char temp[256];
- uint8_t data;
-
- offset=part.addr;
-
- memset(temp, 0, 256);
-
- do {
- len=0;
- while((data=nvram_read_byte(offset++)) && len < 256) {
- temp[len++]=data;
- }
- if (!strncmp(envvar, temp, evlen)) {
- return offset;
- }
- } while (len);
-
- return -1;
-}
-
-/**
- * @param partition name of the envvar partition
- * @param envvar name of the environment variable
- * @param evlen string length of the envvar parameter
- * @return pointer to temporary string containing the value of envvar
- */
-char *nvram_get_env(partition_t part, char *envvar, int evlen)
-{
- static char temp[256+1];
- int len, offset;
- uint8_t data;
-
- DEBUG("nvram_get_env %p... ", envvar);
- if(!part.addr) {
- /* ERROR: No environment variable partition */
- DEBUG("invalid partition.\n");
- return NULL;
- }
-
- offset=part.addr;
-
- do {
- len=0;
- while((data=nvram_read_byte(offset++)) && len < 256) {
- temp[len++]=data;
- }
- temp[len]=0;
-
- if (!strncmp(envvar, temp, evlen)) {
- int pos=0;
- while (temp[pos]!='=' && pos < len) pos++;
- // DEBUG("value='%s'\n", temp+pos+1);
- return temp+pos+1;
- }
- } while (len);
-
- DEBUG("not found\n");
- return NULL;
-}
-
-static int find_last_envvar(partition_t part)
-{
- uint8_t last, current;
- int offset;
-
- offset=part.addr;
-
- last=nvram_read_byte(part.addr);
-
- for (offset=part.addr; offset<(int)(part.addr+part.len); offset++) {
- current=nvram_read_byte(offset);
- if(!last && !current)
- return offset;
-
- last=current;
- }
-
- return -1;
-}
-
-int nvram_add_env(partition_t part, char *envvar, int evlen, char *value, int vallen)
-{
- int freespace, last, len, offset;
- unsigned int i;
-
- /* Find offset where we can write */
- last = find_last_envvar(part);
-
- /* How much space do we have left? */
- freespace = part.addr+part.len-last;
-
- /* how long is the entry we want to write? */
- len = evlen + vallen + 2;
-
- if(freespace<len) {
- // TODO try to increase partition size
- return -1;
- }
-
- offset=last;
-
- for (i = 0; i < evlen; i++)
- nvram_write_byte(offset++, envvar[i]);
-
- nvram_write_byte(offset++, '=');
-
- for (i = 0; i < vallen; i++)
- nvram_write_byte(offset++, value[i]);
-
- return 0;
-}
-
-int nvram_del_env(partition_t part, char *envvar, int evlen)
-{
- int last, current, pos, i;
- char *buffer;
-
- if(!part.addr)
- return -1;
-
- last=find_last_envvar(part);
- current = pos = get_past_env_pos(part, envvar, evlen);
-
- // TODO is this really required?
- /* go back to non-0 value */
- current--;
-
- while (nvram_read_byte(current))
- current--;
-
- // TODO is this required?
- current++;
-
- buffer=get_nvram_buffer(last-pos);
-
- for (i=0; i<last-pos; i++)
- buffer[i]=nvram_read_byte(i+pos);
-
- for (i=0; i<last-pos; i++)
- nvram_write_byte(i+current, buffer[i]);
-
- free_nvram_buffer(buffer);
-
- erase_nvram(last, current+last-pos);
-
- return 0;
-}
-
-int nvram_set_env(partition_t part, char *envvar, int evlen, char *value, int vallen)
-{
- char *oldvalue, *buffer;
- int last, current, buffersize, i;
-
- DEBUG("nvram_set_env %lx[%lx]: %p=>%p\n", part.addr, part.len, envvar, value);
-
- if(!part.addr)
- return -1;
-
- /* Check whether the environment variable exists already */
- oldvalue = nvram_get_env(part, envvar, evlen);
-
- if (oldvalue == NULL)
- return nvram_add_env(part, envvar, evlen, value, vallen);
-
-
- /* The value did not change. So we succeeded! */
- if (strlen(oldvalue) == vallen && !strncmp(oldvalue, value, vallen))
- return 0;
-
- /* we need to overwrite environment variables, back them up first */
-
- // DEBUG("overwriting existing environment variable\n");
-
- /* allocate a buffer */
- last=find_last_envvar(part);
- current = get_past_env_pos(part, envvar, evlen);
- buffersize = last - current;
- buffer=get_nvram_buffer(buffersize);
- if(!buffer)
- return -1;
-
- for (i=0; i<buffersize; i++) {
- buffer[i] = nvram_read_byte(current+i);
- }
-
- /* walk back until the = */
- while (nvram_read_byte(current)!='=') {
- current--;
- }
-
- /* Start at envvar= */
- current++;
-
- /* Write the new value */
- for(i = 0; i < vallen; i++) {
- nvram_write_byte(current++, value[i]);
- }
-
- /* Write end of string marker */
- nvram_write_byte(current++, 0);
-
- /* Copy back the buffer */
- for (i=0; i<buffersize; i++) {
- nvram_write_byte(current++, buffer[i]);
- }
-
- free_nvram_buffer(buffer);
-
- /* If the new environment variable content is shorter than the old one,
- * we need to erase the rest of the bytes
- */
-
- if (current<last) {
- for(i=current; i<last; i++) {
- nvram_write_byte(i, 0);
- }
- }
-
- return 0; /* success */
-}
-