summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/lib/libnvram
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
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')
-rw-r--r--qemu/roms/SLOF/lib/libnvram/Makefile53
-rw-r--r--qemu/roms/SLOF/lib/libnvram/envvar.c243
-rw-r--r--qemu/roms/SLOF/lib/libnvram/libnvram.code274
-rw-r--r--qemu/roms/SLOF/lib/libnvram/libnvram.in42
-rw-r--r--qemu/roms/SLOF/lib/libnvram/nvram.c650
-rw-r--r--qemu/roms/SLOF/lib/libnvram/nvram.h75
6 files changed, 0 insertions, 1337 deletions
diff --git a/qemu/roms/SLOF/lib/libnvram/Makefile b/qemu/roms/SLOF/lib/libnvram/Makefile
deleted file mode 100644
index d4e9a617e..000000000
--- a/qemu/roms/SLOF/lib/libnvram/Makefile
+++ /dev/null
@@ -1,53 +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
-# ****************************************************************************/
-
-SRCS = nvram.c envvar.c
-
-TOPCMNDIR ?= ../..
-
-include $(TOPCMNDIR)/make.rules
-
-ASFLAGS = $(FLAG) $(RELEASE) $(CPUARCHDEF) -Wa,-mregnames
-CPPFLAGS = -I../libc/include $(CPUARCHDEF) $(FLAG) \
- -I$(INCLBRDDIR) -I$(INCLCMNDIR)/$(CPUARCH) -I. -I../../include
-LDFLAGS = -nostdlib
-
-TARGET = ../libnvram.a
-
-all: $(TARGET)
-
-OBJS = $(SRCS:%.c=%.o)
-
-$(TARGET): $(OBJS)
- $(AR) -rc $@ $(OBJS)
- $(RANLIB) $@
-
-
-clean:
- $(RM) $(TARGET) $(OBJS)
-
-distclean: clean
- $(RM) Makefile.dep
-
-
-# Rules for creating the dependency file:
-depend:
- $(RM) Makefile.dep
- $(MAKE) Makefile.dep
-
-Makefile.dep: Makefile
- $(CC) -MM $(CPPFLAGS) $(CFLAGS) $(SRCS) > Makefile.dep
-
-
-# Include dependency file if available:
--include Makefile.dep
-
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 */
-}
-
diff --git a/qemu/roms/SLOF/lib/libnvram/libnvram.code b/qemu/roms/SLOF/lib/libnvram/libnvram.code
deleted file mode 100644
index 8481f57f5..000000000
--- a/qemu/roms/SLOF/lib/libnvram/libnvram.code
+++ /dev/null
@@ -1,274 +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 <nvram.h>
-
-PRIM(nvram_X2d_c_X40)
- unsigned int offset = TOS.u;
- TOS.u=nvram_read_byte(offset);
-MIRP
-
-PRIM(nvram_X2d_w_X40)
- unsigned int offset = TOS.u;
- TOS.u=nvram_read_word(offset);
-MIRP
-
-PRIM(nvram_X2d_l_X40)
- unsigned int offset = TOS.u;
- TOS.u=nvram_read_dword(offset);
-MIRP
-
-PRIM(nvram_X2d_x_X40)
- unsigned int offset = TOS.u;
- TOS.u=nvram_read_qword(offset);
-MIRP
-
-PRIM(nvram_X2d_c_X21)
- nvram_write_byte(TOS.u, NOS.u);
- POP; POP;
-MIRP
-
-PRIM(nvram_X2d_w_X21)
- nvram_write_word(TOS.u, NOS.u);
- POP; POP;
-MIRP
-
-PRIM(nvram_X2d_l_X21)
- nvram_write_dword(TOS.u, NOS.u);
- POP; POP;
-MIRP
-
-PRIM(nvram_X2d_x_X21)
- nvram_write_qword(TOS.u, NOS.u);
- POP; POP;
-MIRP
-
-/* get-nvram-partition ( type -- addr len FAILED? ) */
-PRIM(get_X2d_nvram_X2d_partition)
- partition_t partition;
- unsigned int ptype = TOS.u;
- partition = get_partition(ptype, NULL);
- if(partition.len && partition.len != -1) {
- TOS.u = partition.addr;
- PUSH;
- TOS.u = partition.len;
- PUSH;
- TOS.u = 0; // FALSE
- } else {
- TOS.u = -1; // TRUE
- }
-MIRP
-
-/* get-named-nvram-partition ( name.addr name.len -- addr len FAILED? ) */
-PRIM(get_X2d_named_X2d_nvram_X2d_partition)
- partition_t partition;
- int namelen = TOS.n; POP;
-
- partition = get_partition_fs(TOS.a, namelen);
-
- if(partition.len && partition.len != -1) {
- TOS.u = partition.addr;
- PUSH;
- TOS.u = partition.len;
- PUSH;
- TOS.u = 0; // FALSE
- } else {
- TOS.u = -1; // TRUE
- }
-MIRP
-
-
-
-/* new-nvram-partition ( type name.addr name.len len -- part.offs part.len FALSE | TRUE) */
-PRIM(new_X2d_nvram_X2d_partition)
- int type, len, namelen;
- partition_t partition;
- char *name;
-
- len = TOS.u; POP;
- namelen = TOS.u; POP;
- name = (char *)TOS.u; POP;
- type = TOS.u; POP;
-
- partition = new_nvram_partition_fs(type, name, namelen, len);
-
- if(!partition.len) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = partition.addr;
- PUSH; TOS.u = partition.len;
- PUSH; TOS.u = 0; // FALSE
- }
-MIRP
-
-/* inrease-nvram-partition ( part.offs part.len new-len -- FALSE | TRUE ) */
-PRIM(increase_X2d_nvram_X2d_partition)
- int len, ret;
- partition_t partition;
-
- // FIXME
- partition.addr = TOS.u; POP;
- partition.len = TOS.u; POP;
- len = TOS.u; POP;
-
- ret=increase_nvram_partition_size(partition, len);
-
- PUSH;
-
- if(!ret)
- TOS.u=-1; // TRUE
- else
- TOS.u=0; // FALSE
-
-MIRP
-
-PRIM(internal_X2d_reset_X2d_nvram)
- reset_nvram();
-MIRP
-
-PRIM(wipe_X2d_nvram)
- wipe_nvram();
-MIRP
-
-PRIM(nvram_X2d_debug)
- nvram_debug();
-MIRP
-
-// ( part.start part.len name.addr name.len -- var.addr var.len TRUE | false )
-PRIM(internal_X2d_get_X2d_env)
- char *name;
- int namelen;
- partition_t part;
- char *val;
-
- namelen = TOS.u; POP;
- name = TOS.a; POP;
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- val = nvram_get_env(part, name, namelen);
- if(val) {
- PUSH; TOS.a = val;
- PUSH; TOS.u = strlen(val);
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-MIRP
-
-// ( part.start part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
-PRIM(internal_X2d_add_X2d_env)
- char *name, *val;
- int namelen, vallen;
- partition_t part;
- int ret;
-
- vallen = TOS.u; POP;
- val = TOS.a; POP;
- namelen = TOS.u; POP;
- name = TOS.a; POP;
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- ret = nvram_add_env(part, name, namelen, val, vallen);
- if(ret) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-MIRP
-
-// ( part.addr part.len name.addr name.len -- FALSE|TRUE)
-PRIM(internal_X2d_del_X2d_env)
- char *name;
- int namelen;
- partition_t part;
- int ret;
-
- namelen = TOS.u; POP;
- name = TOS.a; POP;
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- ret = nvram_del_env(part, name, namelen);
- if(ret) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-
-MIRP
-
-// internal-set-env ( part.addr part.len name.addr name.len val.addr val.len -- FALSE|TRUE)
-PRIM(internal_X2d_set_X2d_env)
- char *name, *value;
- int namelen, valuelen;
- partition_t part;
- int ret;
-
- valuelen = TOS.u; POP;
- value = TOS.a; POP;
- namelen = TOS.u; POP;
- name = TOS.a; POP;
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- ret = nvram_set_env(part, name, namelen, value, valuelen);
- if(ret) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-MIRP
-
-// ( part.addr part.len -- FALSE|TRUE)
-PRIM(erase_X2d_nvram_X2d_partition)
- partition_t part;
- int ret;
-
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- ret=clear_nvram_partition(part);
- if(ret) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-
-MIRP
-
-// ( part.addr part.len -- FALSE|TRUE)
-PRIM(delete_X2d_nvram_X2d_partition)
- partition_t part;
- int ret;
-
- part.len = TOS.u; POP;
- part.addr = TOS.u; POP;
-
- ret=delete_nvram_partition(part);
- if(ret) {
- PUSH; TOS.u = -1; // TRUE
- } else {
- PUSH; TOS.u = 0; // FALSE
- }
-
-MIRP
-
-// ( fetch_token store_token size nvram-addr -- )
-PRIM(internal_X2d_nvram_X2d_init)
- void *nvram_addr = TOS.a; POP;
- uint32_t nvram_size = TOS.u; POP;
- uint32_t store_token = TOS.u; POP;
- long fetch_token = TOS.u; POP;
-
- nvram_init(fetch_token, store_token, nvram_size, nvram_addr);
-MIRP
diff --git a/qemu/roms/SLOF/lib/libnvram/libnvram.in b/qemu/roms/SLOF/lib/libnvram/libnvram.in
deleted file mode 100644
index bbb20a889..000000000
--- a/qemu/roms/SLOF/lib/libnvram/libnvram.in
+++ /dev/null
@@ -1,42 +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
- *****************************************************************************/
-
-/* NVRAM access primitives */
-cod(nvram-c@)
-cod(nvram-c!)
-cod(nvram-w@)
-cod(nvram-w!)
-cod(nvram-l@)
-cod(nvram-l!)
-cod(nvram-x@)
-cod(nvram-x!)
-
-/* Generic NVRAM helpers */
-cod(internal-reset-nvram)
-cod(nvram-debug)
-cod(wipe-nvram)
-
-/* NVRAM Partition Handling */
-cod(get-nvram-partition)
-cod(get-named-nvram-partition)
-cod(new-nvram-partition)
-cod(increase-nvram-partition)
-cod(erase-nvram-partition)
-cod(delete-nvram-partition)
-
-/* NVRAM environment access words */
-cod(internal-get-env)
-cod(internal-add-env)
-cod(internal-del-env)
-cod(internal-set-env)
-
-cod(internal-nvram-init)
diff --git a/qemu/roms/SLOF/lib/libnvram/nvram.c b/qemu/roms/SLOF/lib/libnvram/nvram.c
deleted file mode 100644
index 473814e5c..000000000
--- a/qemu/roms/SLOF/lib/libnvram/nvram.c
+++ /dev/null
@@ -1,650 +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 "cache.h"
-#include "nvram.h"
-#include "../libhvcall/libhvcall.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <southbridge.h>
-#include <nvramlog.h>
-#include <byteorder.h>
-
-#ifdef RTAS_NVRAM
-static uint32_t fetch_token;
-static uint32_t store_token;
-static uint32_t NVRAM_LENGTH;
-static char *nvram_buffer; /* use buffer allocated by SLOF code */
-#else
-#ifndef NVRAM_LENGTH
-#define NVRAM_LENGTH 0x10000
-#endif
-/*
- * This is extremely ugly, but still better than implementing
- * another sbrk() around it.
- */
-static char nvram_buffer[NVRAM_LENGTH];
-#endif
-
-static uint8_t nvram_buffer_locked=0x00;
-
-void nvram_init(uint32_t _fetch_token, uint32_t _store_token,
- long _nvram_length, void* nvram_addr)
-{
-#ifdef RTAS_NVRAM
- fetch_token = _fetch_token;
- store_token = _store_token;
- NVRAM_LENGTH = _nvram_length;
- nvram_buffer = nvram_addr;
-
- DEBUG("\nNVRAM: size=%d, fetch=%x, store=%x\n",
- NVRAM_LENGTH, fetch_token, store_token);
-#endif
-}
-
-
-void asm_cout(long Character,long UART,long NVRAM);
-
-#if defined(DISABLE_NVRAM)
-
-static volatile uint8_t nvram[NVRAM_LENGTH]; /* FAKE */
-
-#define nvram_access(type,size,name) \
- type nvram_read_##name(unsigned int offset) \
- { \
- type *pos; \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return 0; \
- pos = (type *)(nvram+offset); \
- return *pos; \
- } \
- void nvram_write_##name(unsigned int offset, type data) \
- { \
- type *pos; \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return; \
- pos = (type *)(nvram+offset); \
- *pos = data; \
- }
-
-#elif defined(RTAS_NVRAM)
-
-static inline void nvram_fetch(unsigned int offset, void *buf, unsigned int len)
-{
- struct hv_rtas_call rtas = {
- .token = fetch_token,
- .nargs = 3,
- .nrets = 2,
- .argret = { offset, (uint32_t)(unsigned long)buf, len },
- };
- h_rtas(&rtas);
-}
-
-static inline void nvram_store(unsigned int offset, void *buf, unsigned int len)
-{
- struct hv_rtas_call rtas = {
- .token = store_token,
- .nargs = 3,
- .nrets = 2,
- .argret = { offset, (uint32_t)(unsigned long)buf, len },
- };
- h_rtas(&rtas);
-}
-
-#define nvram_access(type,size,name) \
- type nvram_read_##name(unsigned int offset) \
- { \
- type val; \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return 0; \
- nvram_fetch(offset, &val, size / 8); \
- return val; \
- } \
- void nvram_write_##name(unsigned int offset, type data) \
- { \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return; \
- nvram_store(offset, &data, size / 8); \
- }
-
-#else /* DISABLE_NVRAM */
-
-static volatile uint8_t *nvram = (volatile uint8_t *)SB_NVRAM_adr;
-
-#define nvram_access(type,size,name) \
- type nvram_read_##name(unsigned int offset) \
- { \
- type *pos; \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return 0; \
- pos = (type *)(nvram+offset); \
- return ci_read_##size(pos); \
- } \
- void nvram_write_##name(unsigned int offset, type data) \
- { \
- type *pos; \
- if (offset > (NVRAM_LENGTH - sizeof(type))) \
- return; \
- pos = (type *)(nvram+offset); \
- ci_write_##size(pos, data); \
- }
-
-#endif
-
-/*
- * producer for nvram access functions. Since these functions are
- * basically all the same except for the used data types, produce
- * them via the nvram_access macro to keep the code from bloating.
- */
-
-nvram_access(uint8_t, 8, byte)
-nvram_access(uint16_t, 16, word)
-nvram_access(uint32_t, 32, dword)
-nvram_access(uint64_t, 64, qword)
-
-
-
-/**
- * This function is a minimal abstraction for our temporary
- * buffer. It should have been malloced, but since there is no
- * usable malloc, we go this route.
- *
- * @return pointer to temporary buffer
- */
-
-char *get_nvram_buffer(int len)
-{
- if(len>NVRAM_LENGTH)
- return NULL;
-
- if(nvram_buffer_locked)
- return NULL;
-
- nvram_buffer_locked = 0xff;
-
- return nvram_buffer;
-}
-
-/**
- * @param buffer pointer to the allocated buffer. This
- * is unused, but nice in case we ever get a real malloc
- */
-
-void free_nvram_buffer(char *buffer __attribute__((unused)))
-{
- nvram_buffer_locked = 0x00;
-}
-
-/**
- * @param fmt format string, like in printf
- * @param ... variable number of arguments
- */
-
-int nvramlog_printf(const char* fmt, ...)
-{
- char buff[256];
- int count, i;
- va_list ap;
-
- va_start(ap, fmt);
- count = vsprintf(buff, fmt, ap);
- va_end(ap);
-
- for (i=0; i<count; i++)
- asm_cout(buff[i], 0, 1);
-
- return count;
-}
-
-/**
- * @param offset start offset of the partition header
- */
-
-static uint8_t get_partition_type(int offset)
-{
- return nvram_read_byte(offset);
-}
-
-/**
- * @param offset start offset of the partition header
- */
-
-static uint8_t get_partition_header_checksum(int offset)
-{
- return nvram_read_byte(offset+1);
-}
-
-/**
- * @param offset start offset of the partition header
- */
-
-static uint16_t get_partition_len(int offset)
-{
- return nvram_read_word(offset+2);
-}
-
-/**
- * @param offset start offset of the partition header
- * @return static char array containing the partition name
- *
- * NOTE: If the partition name needs to be non-temporary, strdup
- * and use the copy instead.
- */
-
-static char * get_partition_name(int offset)
-{
- static char name[12];
- int i;
- for (i=0; i<12; i++)
- name[i]=nvram_read_byte(offset+4+i);
-
- DEBUG("name: \"%s\"\n", name);
- return name;
-}
-
-static uint8_t calc_partition_header_checksum(int offset)
-{
- uint16_t plainsum;
- uint8_t checksum;
- int i;
-
- plainsum = nvram_read_byte(offset);
-
- for (i=2; i<PARTITION_HEADER_SIZE; i++)
- plainsum+=nvram_read_byte(offset+i);
-
- checksum=(plainsum>>8)+(plainsum&0xff);
-
- return checksum;
-}
-
-static int calc_used_nvram_space(void)
-{
- int walk, len;
-
- for (walk=0; walk<NVRAM_LENGTH;) {
- if(nvram_read_byte(walk) == 0
- || get_partition_header_checksum(walk) !=
- calc_partition_header_checksum(walk)) {
- /* If there's no valid entry, bail out */
- break;
- }
-
- len=get_partition_len(walk);
- DEBUG("... part len=%x, %x\n", len, len*16);
-
- if(!len) {
- /* If there's a partition type but no len, bail out.
- * Don't bail out if type is 0. This can be used to
- * find the offset of the first free byte.
- */
- break;
- }
-
- walk += len * 16;
- }
- DEBUG("used nvram space: %d\n", walk);
-
- return walk;
-}
-
-/**
- *
- * @param type partition type. Set this to the partition type you are looking
- * for. If there are several partitions with the same type, only
- * the first partition with that type will be found.
- * Set to -1 to ignore. Set to 0 to find free unpartitioned space.
- *
- * @param name partition name. Set this to the name of the partition you are
- * looking for. If there are several partitions with the same name,
- * only the first partition with that name will be found.
- * Set to NULL to ignore.
- *
- * To disambiguate the partitions you should have a unique name if you plan to
- * have several partitions of the same type.
- *
- */
-
-partition_t get_partition(unsigned int type, char *name)
-{
- partition_t ret={0,-1};
- int walk, len;
-
- DEBUG("get_partition(%i, '%s')\n", type, name);
-
- for (walk=0; walk<NVRAM_LENGTH;) {
- // DEBUG("get_partition: walk=%x\n", walk);
- if(get_partition_header_checksum(walk) !=
- calc_partition_header_checksum(walk)) {
- /* If there's no valid entry, bail out */
- break;
- }
-
- len=get_partition_len(walk);
- if(type && !len) {
- /* If there's a partition type but no len, bail out.
- * Don't bail out if type is 0. This can be used to
- * find the offset of the first free byte.
- */
- break;
- }
-
- /* Check if either type or name or both do not match. */
- if ( (type!=(unsigned int)-1 && type != get_partition_type(walk)) ||
- (name && strncmp(get_partition_name(walk), name, 12)) ) {
- /* We hit another partition. Continue
- * at the end of this partition
- */
- walk += len*16;
- continue;
- }
-
- ret.addr=walk+PARTITION_HEADER_SIZE;
- ret.len=(len*16)-PARTITION_HEADER_SIZE;
- break;
- }
-
- return ret;
-}
-
-/* Get partition specified by a Forth string */
-partition_t get_partition_fs(char *name, int namelen)
-{
- char buf[namelen + 1];
-
- memcpy(buf, name, namelen);
- buf[namelen] = 0;
-
- return get_partition(-1, buf);
-}
-
-void erase_nvram(int offset, int len)
-{
- int i;
-
- for (i=offset; i<offset+len; i++)
- nvram_write_byte(i, 0);
-}
-
-void wipe_nvram(void)
-{
- erase_nvram(0, NVRAM_LENGTH);
-}
-
-/**
- * @param partition partition structure pointing to the partition to wipe.
- * @param header_only if header_only is != 0 only the partition header is
- * nulled out, not the whole partition.
- */
-
-int wipe_partition(partition_t partition, int header_only)
-{
- int pstart, len;
-
- pstart=partition.addr-PARTITION_HEADER_SIZE;
-
- len=PARTITION_HEADER_SIZE;
-
- if(!header_only)
- len += partition.len;
-
- erase_nvram(pstart, len);
-
- return 0;
-}
-
-
-static partition_t create_nvram_partition(int type, const char *name, int len)
-{
- partition_t ret = { 0, 0 };
- int offset, plen;
- unsigned int i;
-
- plen = ALIGN(len+PARTITION_HEADER_SIZE, 16);
-
- DEBUG("Creating partition type=%x, name=%s, len=%d plen=%d\n",
- type, name, len, plen);
-
- offset = calc_used_nvram_space();
-
- if (NVRAM_LENGTH-(calc_used_nvram_space())<plen) {
- DEBUG("Not enough free space.\n");
- return ret;
- }
-
- DEBUG("Writing header.");
-
- nvram_write_byte(offset, type);
- nvram_write_word(offset+2, plen/16);
-
- for (i=0; i<strlen(name); i++)
- nvram_write_byte(offset+4+i, name[i]);
-
- nvram_write_byte(offset+1, calc_partition_header_checksum(offset));
-
- ret.addr = offset+PARTITION_HEADER_SIZE;
- ret.len = len;
-
- DEBUG("partition created: addr=%lx len=%lx\n", ret.addr, ret.len);
-
- return ret;
-}
-
-static int create_free_partition(void)
-{
- int free_space;
- partition_t free_part;
-
- free_space = NVRAM_LENGTH - calc_used_nvram_space() - PARTITION_HEADER_SIZE;
- free_part = create_nvram_partition(0x7f, "free space", free_space);
-
- return (free_part.addr != 0);
-}
-
-partition_t new_nvram_partition(int type, char *name, int len)
-{
- partition_t free_part, new_part = { 0, 0 };
-
- /* NOTE: Assume all free space is consumed by the "free space"
- * partition. This means a partition can not be increased in the middle
- * of reset_nvram, which is obviously not a big loss.
- */
-
- free_part=get_partition(0x7f, NULL);
- if( free_part.len && free_part.len != -1)
- wipe_partition(free_part, 1);
-
- new_part = create_nvram_partition(type, name, len);
-
- if(new_part.len != len) {
- new_part.len = 0;
- new_part.addr = 0;
- }
-
- create_free_partition();
-
- return new_part;
-}
-
-partition_t new_nvram_partition_fs(int type, char *name, int namelen, int len)
-{
- char buf[13];
- int i;
-
- for (i = 0; i < 12; i++) {
- if (i < namelen)
- buf[i] = name[i];
- else
- buf[i] = 0;
- }
- buf[12] = 0;
-
- return new_nvram_partition(type, buf, len);
-}
-
-/**
- * @param partition partition structure pointing to the partition to wipe.
- */
-
-int delete_nvram_partition(partition_t partition)
-{
- int i;
- partition_t free_part;
-
- if(!partition.len || partition.len == -1)
- return 0;
-
- for (i=partition.addr+partition.len; i< NVRAM_LENGTH; i++)
- nvram_write_byte(i - partition.len - PARTITION_HEADER_SIZE, nvram_read_byte(i));
-
- erase_nvram(NVRAM_LENGTH-partition.len-PARTITION_HEADER_SIZE,
- partition.len-PARTITION_HEADER_SIZE);
-
- free_part=get_partition(0x7f, NULL);
- wipe_partition(free_part, 0);
- create_free_partition();
-
- return 1;
-}
-
-int clear_nvram_partition(partition_t part)
-{
- if(!part.addr)
- return 0;
-
- erase_nvram(part.addr, part.len);
-
- return 1;
-}
-
-
-int increase_nvram_partition_size(partition_t partition, int newsize)
-{
- partition_t free_part;
- int free_offset, end_offset, i;
-
- /* We don't support shrinking partitions (yet) */
- if (newsize < partition.len) {
- return 0;
- }
-
- /* NOTE: Assume all free space is consumed by the "free space"
- * partition. This means a partition can not be increased in the middle
- * of reset_nvram, which is obviously not a big loss.
- */
-
- free_part=get_partition(0x7f, NULL);
-
- // FIXME: It could be 16 byte more. Also handle empty "free" partition.
- if (free_part.len == -1 || free_part.len < newsize - partition.len ) {
- return 0;
- }
-
- free_offset=free_part.addr - PARTITION_HEADER_SIZE; // first unused byte
- end_offset=partition.addr + partition.len; // last used byte of partition + 1
-
- if(free_offset > end_offset) {
- int j, bufferlen;
- char *overlap_buffer;
-
- bufferlen=free_offset - end_offset;
-
- overlap_buffer=get_nvram_buffer(bufferlen);
- if(!overlap_buffer) {
- return 0;
- }
-
- for (i=end_offset, j=0; i<free_offset; i++, j++)
- overlap_buffer[j]=nvram_read_byte(i);
-
- /* Only wipe the header. The free space partition is empty per
- * definition
- */
-
- wipe_partition(free_part, 1);
-
- for (i=partition.addr+newsize, j=0; i<(int)(partition.addr+newsize+bufferlen); i++, j++)
- nvram_write_byte(i, overlap_buffer[j]);
-
- free_nvram_buffer(overlap_buffer);
- } else {
- /* Only wipe the header. */
- wipe_partition(free_part, 1);
- }
-
- /* Clear the new partition space */
- erase_nvram(partition.addr+partition.len, newsize-partition.len);
-
- nvram_write_word(partition.addr - 16 + 2, newsize);
-
- create_free_partition();
-
- return 1;
-}
-
-static void init_cpulog_partition(partition_t cpulog)
-{
- unsigned int offset=cpulog.addr;
-
- /* see board-xxx/include/nvramlog.h for information */
- nvram_write_word(offset+0, 0x40); // offset
- nvram_write_word(offset+2, 0x00); // flags
- nvram_write_dword(offset+4, 0x01); // pointer
-
-}
-
-void reset_nvram(void)
-{
- partition_t cpulog0, cpulog1;
- struct {
- uint32_t prefix;
- uint64_t name;
- } __attribute__((packed)) header;
-
- DEBUG("Erasing NVRAM\n");
- erase_nvram(0, NVRAM_LENGTH);
-
- DEBUG("Creating CPU log partitions\n");
- header.prefix = be32_to_cpu(LLFW_LOG_BE0_NAME_PREFIX);
- header.name = be64_to_cpu(LLFW_LOG_BE0_NAME);
- cpulog0=create_nvram_partition(LLFW_LOG_BE0_SIGNATURE, (char *)&header,
- (LLFW_LOG_BE0_LENGTH*16)-PARTITION_HEADER_SIZE);
-
- header.prefix = be32_to_cpu(LLFW_LOG_BE1_NAME_PREFIX);
- header.name = be64_to_cpu(LLFW_LOG_BE1_NAME);
- cpulog1=create_nvram_partition(LLFW_LOG_BE1_SIGNATURE, (char *)&header,
- (LLFW_LOG_BE1_LENGTH*16)-PARTITION_HEADER_SIZE);
-
- DEBUG("Initializing CPU log partitions\n");
- init_cpulog_partition(cpulog0);
- init_cpulog_partition(cpulog1);
-
- nvramlog_printf("Creating common NVRAM partition\r\n");
- create_nvram_partition(0x70, "common", 0x01000-PARTITION_HEADER_SIZE);
-
- create_free_partition();
-}
-
-void nvram_debug(void)
-{
-#ifndef RTAS_NVRAM
- printf("\nNVRAM_BASE: %p\n", nvram);
- printf("NVRAM_LEN: 0x%x\n", NVRAM_LENGTH);
-#endif
-}
-
-unsigned int get_nvram_size(void)
-{
- return NVRAM_LENGTH;
-}
diff --git a/qemu/roms/SLOF/lib/libnvram/nvram.h b/qemu/roms/SLOF/lib/libnvram/nvram.h
deleted file mode 100644
index 73fe44424..000000000
--- a/qemu/roms/SLOF/lib/libnvram/nvram.h
+++ /dev/null
@@ -1,75 +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
- *****************************************************************************/
-
-#ifndef __NVRAM_H
-#define __NVRAM_H 1
-
-/* data structures */
-
-typedef struct {
- unsigned long addr;
- long len;
-} partition_t;
-
-/* macros */
-
-#define DEBUG(x...)
-// #define DEBUG(x...) printf(x);
-
-#ifndef ALIGN
-#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1))
-#endif
-
-#define NULL ((void *)0)
-
-#define PARTITION_HEADER_SIZE 16
-
-
-/* exported functions */
-
-#define nvram_access_proto(type,name) \
- type nvram_read_##name(unsigned int offset); \
- void nvram_write_##name(unsigned int offset, type data);
-
-nvram_access_proto(uint8_t, byte)
-nvram_access_proto(uint16_t, word)
-nvram_access_proto(uint32_t, dword)
-nvram_access_proto(uint64_t, qword)
-
-/* nvram.c */
-
-char *get_nvram_buffer(int len);
-void free_nvram_buffer(char *buffer);
-int nvramlog_printf(const char* fmt, ...);
-partition_t get_partition(unsigned int type, char *name);
-partition_t get_partition_fs(char *name, int namelen);
-void erase_nvram(int offset, int len);
-int wipe_partition(partition_t partition, int header_only);
-partition_t new_nvram_partition(int type, char *name, int len);
-partition_t new_nvram_partition_fs(int type, char *name, int namelen, int len);
-int increase_nvram_partition_size(partition_t partition, int newsize);
-int clear_nvram_partition(partition_t part);
-int delete_nvram_partition(partition_t part);
-void reset_nvram(void);
-void wipe_nvram(void);
-void nvram_debug(void);
-void nvram_init(uint32_t store_token, uint32_t fetch_token,
- long nv_size, void* nvram_addr);
-unsigned int get_nvram_size(void);
-
-/* envvar.c */
-char *nvram_get_env(partition_t part, char *envvar, int evlen);
-int nvram_add_env(partition_t part, char *envvar, int evlen, char *value, int vallen);
-int nvram_del_env(partition_t part, char *envvar, int evlen);
-int nvram_set_env(partition_t part, char *envvar, int evlen, char *val, int vlen);
-
-#endif