root/arch/sparc/prom/misc_32.c

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

DEFINITIONS

This source file includes following definitions.
  1. prom_reboot
  2. prom_feval
  3. prom_cmdline
  4. prom_halt
  5. prom_setsync
  6. prom_get_idprom
  7. prom_version
  8. prom_getrev
  9. prom_getprev

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * misc.c:  Miscellaneous prom functions that don't belong
   4  *          anywhere else.
   5  *
   6  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
   7  */
   8 
   9 #include <linux/types.h>
  10 #include <linux/kernel.h>
  11 #include <linux/sched.h>
  12 #include <linux/module.h>
  13 
  14 #include <asm/openprom.h>
  15 #include <asm/oplib.h>
  16 #include <asm/auxio.h>
  17 
  18 extern void restore_current(void);
  19 
  20 DEFINE_SPINLOCK(prom_lock);
  21 
  22 /* Reset and reboot the machine with the command 'bcommand'. */
  23 void
  24 prom_reboot(char *bcommand)
  25 {
  26         unsigned long flags;
  27         spin_lock_irqsave(&prom_lock, flags);
  28         (*(romvec->pv_reboot))(bcommand);
  29         /* Never get here. */
  30         restore_current();
  31         spin_unlock_irqrestore(&prom_lock, flags);
  32 }
  33 
  34 /* Forth evaluate the expression contained in 'fstring'. */
  35 void
  36 prom_feval(char *fstring)
  37 {
  38         unsigned long flags;
  39         if(!fstring || fstring[0] == 0)
  40                 return;
  41         spin_lock_irqsave(&prom_lock, flags);
  42         if(prom_vers == PROM_V0)
  43                 (*(romvec->pv_fortheval.v0_eval))(strlen(fstring), fstring);
  44         else
  45                 (*(romvec->pv_fortheval.v2_eval))(fstring);
  46         restore_current();
  47         spin_unlock_irqrestore(&prom_lock, flags);
  48 }
  49 EXPORT_SYMBOL(prom_feval);
  50 
  51 /* Drop into the prom, with the chance to continue with the 'go'
  52  * prom command.
  53  */
  54 void
  55 prom_cmdline(void)
  56 {
  57         unsigned long flags;
  58 
  59         spin_lock_irqsave(&prom_lock, flags);
  60         (*(romvec->pv_abort))();
  61         restore_current();
  62         spin_unlock_irqrestore(&prom_lock, flags);
  63         set_auxio(AUXIO_LED, 0);
  64 }
  65 
  66 /* Drop into the prom, but completely terminate the program.
  67  * No chance of continuing.
  68  */
  69 void __noreturn
  70 prom_halt(void)
  71 {
  72         unsigned long flags;
  73 again:
  74         spin_lock_irqsave(&prom_lock, flags);
  75         (*(romvec->pv_halt))();
  76         /* Never get here. */
  77         restore_current();
  78         spin_unlock_irqrestore(&prom_lock, flags);
  79         goto again; /* PROM is out to get me -DaveM */
  80 }
  81 
  82 typedef void (*sfunc_t)(void);
  83 
  84 /* Set prom sync handler to call function 'funcp'. */
  85 void
  86 prom_setsync(sfunc_t funcp)
  87 {
  88         if(!funcp) return;
  89         *romvec->pv_synchook = funcp;
  90 }
  91 
  92 /* Get the idprom and stuff it into buffer 'idbuf'.  Returns the
  93  * format type.  'num_bytes' is the number of bytes that your idbuf
  94  * has space for.  Returns 0xff on error.
  95  */
  96 unsigned char
  97 prom_get_idprom(char *idbuf, int num_bytes)
  98 {
  99         int len;
 100 
 101         len = prom_getproplen(prom_root_node, "idprom");
 102         if((len>num_bytes) || (len==-1)) return 0xff;
 103         if(!prom_getproperty(prom_root_node, "idprom", idbuf, num_bytes))
 104                 return idbuf[0];
 105 
 106         return 0xff;
 107 }
 108 
 109 /* Get the major prom version number. */
 110 int
 111 prom_version(void)
 112 {
 113         return romvec->pv_romvers;
 114 }
 115 
 116 /* Get the prom plugin-revision. */
 117 int
 118 prom_getrev(void)
 119 {
 120         return prom_rev;
 121 }
 122 
 123 /* Get the prom firmware print revision. */
 124 int
 125 prom_getprev(void)
 126 {
 127         return prom_prev;
 128 }

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