Logo Search packages:      
Sourcecode: linux version File versions  Download package

bootinfo.c

/*
 * General bootinfo record utilities
 * Author: Randy Vinson <rvinson@mvista.com>
 *
 * 2002 (c) MontaVista Software, Inc. This file is licensed under the terms
 * of the GNU General Public License version 2. This program is licensed
 * "as is" without any warranty of any kind, whether express or implied.
 */

#include <linux/types.h>
#include <linux/string.h>
#include <asm/bootinfo.h>

#include "nonstdio.h"

static struct bi_record * birec = NULL;

static struct bi_record *
__bootinfo_build(struct bi_record *rec, unsigned long tag, unsigned long size,
             void *data)
{
      /* set the tag */
      rec->tag = tag;

      /* if the caller has any data, copy it */
      if (size)
            memcpy(rec->data, (char *)data, size);

      /* set the record size */
      rec->size = sizeof(struct bi_record) + size;

      /* advance to the next available space */
      rec = (struct bi_record *)((unsigned long)rec + rec->size);

      return rec;
}

void
bootinfo_init(struct bi_record *rec)
{

      /* save start of birec area */
      birec = rec;

      /* create an empty list */
      rec = __bootinfo_build(rec, BI_FIRST, 0, NULL);
      (void) __bootinfo_build(rec, BI_LAST, 0, NULL);

}

void
bootinfo_append(unsigned long tag, unsigned long size, void * data)
{

      struct bi_record *rec = birec;

      /* paranoia */
      if ((rec == NULL) || (rec->tag != BI_FIRST))
            return;

      /* find the last entry in the list */
      while (rec->tag != BI_LAST)
            rec = (struct bi_record *)((ulong)rec + rec->size);

      /* overlay BI_LAST record with new one and tag on a new BI_LAST */
      rec = __bootinfo_build(rec, tag, size, data);
      (void) __bootinfo_build(rec, BI_LAST, 0, NULL);
}

Generated by  Doxygen 1.6.0   Back to index