tag_list.c revision 256281
1/****************************************************************************** 2 * 3 * Filename: tag_list.c 4 * 5 * Instantiation of basic routines that create linux-boot tag list. 6 * 7 * Revision information: 8 * 9 * 22AUG2004 kb_admin initial creation 10 * 11 * BEGIN_KBDD_BLOCK 12 * No warranty, expressed or implied, is included with this software. It is 13 * provided "AS IS" and no warranty of any kind including statutory or aspects 14 * relating to merchantability or fitness for any purpose is provided. All 15 * intellectual property rights of others is maintained with the respective 16 * owners. This software is not copyrighted and is intended for reference 17 * only. 18 * END_BLOCK 19 * 20 * $FreeBSD: stable/10/sys/boot/arm/at91/libat91/tag_list.c 157921 2006-04-21 07:19:22Z imp $ 21 *****************************************************************************/ 22 23/******************************* GLOBALS *************************************/ 24 25/********************** PRIVATE FUNCTIONS/DATA/DEFINES ***********************/ 26 27#define u32 unsigned 28#define u16 unsigned short 29#define u8 unsigned char 30 31// #include "/usr/src/arm/linux/include/asm/setup.h" 32#include <linux/asm/setup.h> 33#include "tag_list.h" 34 35#define PAGE_SIZE 0x1000 36#define MEM_SIZE 0x2000000 37#define PHYS_OFFSET 0x20000000 38 39/*************************** GLOBAL FUNCTIONS ********************************/ 40 41/* 42 * .KB_C_FN_DEFINITION_START 43 * void InitTagList(char*, void *) 44 * This global function populates a linux-boot style tag list from the 45 * string passed in the pointer at the location specified. 46 * .KB_C_FN_DEFINITION_END 47 */ 48void InitTagList(char *parms, void *output) { 49 50 char *src, *dst; 51 struct tag *tagList = (struct tag*)output; 52 53 tagList->hdr.size = tag_size(tag_core); 54 tagList->hdr.tag = ATAG_CORE; 55 tagList->u.core.flags = 1; 56 tagList->u.core.pagesize = PAGE_SIZE; 57 tagList->u.core.rootdev = 0xff; 58 tagList = tag_next(tagList); 59 60 tagList->hdr.size = tag_size(tag_mem32); 61 tagList->hdr.tag = ATAG_MEM; 62 tagList->u.mem.size = MEM_SIZE; 63 tagList->u.mem.start = PHYS_OFFSET; 64 tagList = tag_next(tagList); 65 66 tagList->hdr.size = tag_size(tag_cmdline); 67 tagList->hdr.tag = ATAG_CMDLINE; 68 69 src = parms; 70 dst = tagList->u.cmdline.cmdline; 71 while (*src) { 72 *dst++ = *src++; 73 } 74 *dst = 0; 75 76 tagList->hdr.size += ((unsigned)(src - parms) + 1) / sizeof(unsigned); 77 tagList = tag_next(tagList); 78 79 tagList->hdr.size = 0; 80 tagList->hdr.tag = ATAG_NONE; 81} 82