Prex Home / Browse Source - Prex Version: 0.9.0

root/bsp/hal/ppc/prep/machdep.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. machine_idle
  2. machine_reset
  3. machine_powerdown
  4. machine_bootinfo
  5. machine_abort
  6. machine_startup

   1 /*-
   2  * Copyright (c) 2009, Kohsuke Ohtani
   3  * All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. Neither the name of the author nor the names of any co-contributors
  14  *    may be used to endorse or promote products derived from this software
  15  *    without specific prior written permission.
  16  *
  17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27  * SUCH DAMAGE.
  28  */
  29 
  30 /*
  31  * machdep.c - machine-dependent routines for PPC PReP
  32  */
  33 
  34 #include <machine/syspage.h>
  35 #include <sys/power.h>
  36 #include <sys/bootinfo.h>
  37 #include <kernel.h>
  38 #include <page.h>
  39 #include <mmu.h>
  40 #include <cpu.h>
  41 #include <io.h>
  42 #include <cpufunc.h>
  43 #include <locore.h>
  44 
  45 extern void *exception_vector;
  46 extern void *exception_vector_end;
  47 
  48 #ifdef CONFIG_MMU
  49 /*
  50  * Virtual and physical address mapping
  51  *
  52  *      { virtual, physical, size, type }
  53  */
  54 struct mmumap mmumap_table[] =
  55 {
  56         /*
  57          * Physical memory
  58          */
  59         { 0x80000000, 0x00000000, 0x9000000, VMT_RAM },
  60 
  61         /*
  62          * ISA I/O space
  63          */
  64         { 0xf0000000, 0x80000000, 0xf000, VMT_IO },
  65 
  66         { 0,0,0,0 }
  67 };
  68 #endif
  69 
  70 /*
  71  * Idle
  72  */
  73 void
  74 machine_idle(void)
  75 {
  76 
  77         cpu_idle();
  78 }
  79 
  80 /*
  81  * Cause PReP machine reset.
  82  */
  83 static void
  84 machine_reset(void)
  85 {
  86         u_char val;
  87 
  88         val = inb(0x92);
  89         val &= ~1UL;
  90         outb(0x92, val);
  91 
  92         val = inb(0x92);
  93         val |= 1;
  94         outb(0x92, val);
  95 
  96         /* NOTREACHED */
  97 }
  98 
  99 /*
 100  * Set system power
 101  */
 102 void
 103 machine_powerdown(int state)
 104 {
 105 
 106         DPRINTF(("Power down machine\n"));
 107 
 108         splhigh();
 109 
 110         switch (state) {
 111         case PWR_SUSPEND:
 112         case PWR_OFF:
 113                 for (;;)
 114                         cpu_idle();
 115                 /* NOTREACHED */
 116                 break;
 117         case PWR_REBOOT:
 118                 machine_reset();
 119                 /* NOTREACHED */
 120                 break;
 121         }
 122 }
 123 
 124 /*
 125  * Return pointer to the boot information.
 126  */
 127 void
 128 machine_bootinfo(struct bootinfo **bip)
 129 {
 130 
 131         *bip = (struct bootinfo *)BOOTINFO;
 132 }
 133 
 134 void
 135 machine_abort(void)
 136 {
 137 
 138         for (;;) ;
 139 }
 140 
 141 /*
 142  * Machine-dependent startup code
 143  */
 144 void
 145 machine_startup(void)
 146 {
 147         void *vector_offset = 0;
 148 
 149         /*
 150          * Reserve system pages.
 151          */
 152         page_reserve(kvtop(SYSPAGE), SYSPAGESZ);
 153 
 154         /*
 155          * Copy exception vectors.
 156          */
 157         memcpy(vector_offset, &exception_vector, 0x3000);
 158 
 159 #ifdef CONFIG_MMU
 160         /*
 161          * Initialize MMU
 162          */
 163         mmu_init(mmumap_table);
 164 #endif
 165 }

/* [<][>][^][v][top][bottom][index][help] */