pmon_prom.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * BRIEF MODULE DESCRIPTION
  4.  *    PROM library initialisation code, assuming a version of
  5.  *    pmon is the boot code.
  6.  *
  7.  * Copyright 2000 MontaVista Software Inc.
  8.  * Author: MontaVista Software, Inc.
  9.  *          ppopov@mvista.com or source@mvista.com
  10.  *
  11.  * This file was derived from Carsten Langgaard's 
  12.  * arch/mips/mips-boards/xx files.
  13.  *
  14.  * Carsten Langgaard, carstenl@mips.com
  15.  * Copyright (C) 1999,2000 MIPS Technologies, Inc.  All rights reserved.
  16.  *
  17.  *  This program is free software; you can redistribute  it and/or modify it
  18.  *  under  the terms of  the GNU General  Public License as published by the
  19.  *  Free Software Foundation;  either version 2 of the  License, or (at your
  20.  *  option) any later version.
  21.  *
  22.  *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
  23.  *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
  24.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
  25.  *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
  26.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  27.  *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
  28.  *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  29.  *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
  30.  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  31.  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32.  *
  33.  *  You should have received a copy of the  GNU General Public License along
  34.  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  35.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  36.  */
  37. #include <linux/config.h>
  38. #include <linux/kernel.h>
  39. #include <linux/init.h>
  40. #include <linux/string.h>
  41. #include <asm/bootinfo.h>
  42. /* #define DEBUG_CMDLINE */
  43. char arcs_cmdline[CL_SIZE];
  44. extern int prom_argc;
  45. extern char **prom_argv, **prom_envp;
  46. typedef struct
  47. {
  48.     char *name;
  49. /*    char *val; */
  50. }t_env_var;
  51. char * __init prom_getcmdline(void)
  52. {
  53. return &(arcs_cmdline[0]);
  54. }
  55. void  __init prom_init_cmdline(void)
  56. {
  57. char *cp;
  58. int actr;
  59. actr = 1; /* Always ignore argv[0] */
  60. cp = &(arcs_cmdline[0]);
  61. while(actr < prom_argc) {
  62.         strcpy(cp, prom_argv[actr]);
  63. cp += strlen(prom_argv[actr]);
  64. *cp++ = ' ';
  65. actr++;
  66. }
  67. if (cp != &(arcs_cmdline[0])) /* get rid of trailing space */
  68. --cp;
  69. *cp = '';
  70. }
  71. char *prom_getenv(char *envname)
  72. {
  73. /*
  74.  * Return a pointer to the given environment variable.
  75.  * Environment variables are stored in the form of "memsize=64".
  76.  */
  77. t_env_var *env = (t_env_var *)prom_envp;
  78. int i;
  79. i = strlen(envname);
  80. while(env->name) {
  81. if(strncmp(envname, env->name, i) == 0) {
  82. return(env->name + strlen(envname) + 1);
  83. }
  84. env++;
  85. }
  86. return(NULL);
  87. }
  88. static inline unsigned char str2hexnum(unsigned char c)
  89. {
  90. if(c >= '0' && c <= '9')
  91. return c - '0';
  92. if(c >= 'a' && c <= 'f')
  93. return c - 'a' + 10;
  94. return 0; /* foo */
  95. }
  96. int __init page_is_ram(unsigned long pagenr)
  97. {
  98.     return 1;
  99. }
  100. void prom_free_prom_memory (void)
  101. {
  102. }
  103. unsigned long __init prom_get_memsize(void)
  104. {
  105. char *memsize_str;
  106. unsigned int memsize;
  107. memsize_str = prom_getenv("memsize");
  108. if (!memsize_str) {
  109. #ifdef CONFIG_MIPS_ITE8172
  110. memsize = 32; 
  111. #elif defined(CONFIG_MIPS_IVR)
  112. memsize = 64; 
  113. #else
  114. memsize = 8; 
  115. #endif
  116. printk("memsize unknown: setting to %dMBn", memsize);
  117. } else {
  118. printk("memsize: %sn", memsize_str);
  119. memsize = simple_strtol(memsize_str, NULL, 0);
  120. }
  121. return memsize;
  122. }