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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright 2002 Momentum Computer Inc.
  3.  * Author: Matthew Dharm <mdharm@momenco.com>
  4.  *
  5.  * Based on Ocelot Linux port, which is
  6.  * Copyright 2001 MontaVista Software Inc.
  7.  * Author: jsun@mvista.com or jsun@junsun.net
  8.  *
  9.  * This program is free software; you can redistribute  it and/or modify it
  10.  * under  the terms of  the GNU General  Public License as published by the
  11.  * Free Software Foundation;  either version 2 of the  License, or (at your
  12.  * option) any later version.
  13.  */
  14. #include <linux/config.h>
  15. #include <linux/init.h>
  16. #include <linux/mm.h>
  17. #include <linux/sched.h>
  18. #include <linux/bootmem.h>
  19. #include <asm/addrspace.h>
  20. #include <asm/bootinfo.h>
  21. #include "gt64240.h"
  22. #include "ocelot_pld.h"
  23. struct callvectors {
  24. int (*open) (char*, int, int);
  25. int (*close) (int);
  26. int (*read) (int, void*, int);
  27. int (*write) (int, void*, int);
  28. off_t (*lseek) (int, off_t, int);
  29. int (*printf) (const char*, ...);
  30. void (*cacheflush) (void);
  31. char* (*gets) (char*);
  32. };
  33. struct callvectors* debug_vectors;
  34. char arcs_cmdline[CL_SIZE];
  35. extern unsigned long gt64240_base;
  36. extern unsigned long bus_clock;
  37. #ifdef CONFIG_GALILLEO_GT64240_ETH
  38. extern unsigned char prom_mac_addr_base[6];
  39. #endif
  40. const char *get_system_type(void)
  41. {
  42. return "Momentum Ocelot";
  43. }
  44. /* [jsun@junsun.net] PMON passes arguments in C main() style */
  45. void __init prom_init(int argc, char **arg, char** env, struct callvectors *cv)
  46. {
  47. int i;
  48. uint32_t tmp;
  49. /* save the PROM vectors for debugging use */
  50. debug_vectors = cv;
  51. /* arg[0] is "g", the rest is boot parameters */
  52. arcs_cmdline[0] = '';
  53. for (i = 1; i < argc; i++) {
  54. if (strlen(arcs_cmdline) + strlen(arg[i] + 1)
  55.     >= sizeof(arcs_cmdline))
  56. break;
  57. strcat(arcs_cmdline, arg[i]);
  58. strcat(arcs_cmdline, " ");
  59. }
  60. mips_machgroup = MACH_GROUP_MOMENCO;
  61. mips_machtype = MACH_MOMENCO_OCELOT_G;
  62. #ifdef CONFIG_GALILLEO_GT64240_ETH
  63. /* get the base MAC address for on-board ethernet ports */
  64. memcpy(prom_mac_addr_base, (void*)0xfc807cf2, 6);
  65. #endif
  66. while (*env) {
  67. if (strncmp("gtbase", *env, strlen("gtbase")) == 0) {
  68. gt64240_base = simple_strtol(*env + strlen("gtbase="),
  69. NULL, 16);
  70. }
  71. if (strncmp("busclock", *env, strlen("busclock")) == 0) {
  72. bus_clock = simple_strtol(*env + strlen("busclock="),
  73. NULL, 10);
  74. }
  75. *env++;
  76. }
  77. debug_vectors->printf("Booting Linux kernel...n");
  78. }
  79. void __init prom_free_prom_memory(void)
  80. {
  81. }
  82. void __init prom_fixup_mem_map(unsigned long start, unsigned long end)
  83. {
  84. }