cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

misc.c (1839B)


      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 <asm/sun3-head.h>
     13#include <asm/idprom.h>
     14#include <asm/openprom.h>
     15#include <asm/oplib.h>
     16#include <asm/movs.h>
     17
     18/* Reset and reboot the machine with the command 'bcommand'. */
     19void
     20prom_reboot(char *bcommand)
     21{
     22	unsigned long flags;
     23	local_irq_save(flags);
     24	(*(romvec->pv_reboot))(bcommand);
     25	local_irq_restore(flags);
     26}
     27
     28/* Drop into the prom, with the chance to continue with the 'go'
     29 * prom command.
     30 */
     31void
     32prom_cmdline(void)
     33{
     34}
     35
     36/* Drop into the prom, but completely terminate the program.
     37 * No chance of continuing.
     38 */
     39void
     40prom_halt(void)
     41{
     42	unsigned long flags;
     43again:
     44	local_irq_save(flags);
     45	(*(romvec->pv_halt))();
     46	local_irq_restore(flags);
     47	goto again; /* PROM is out to get me -DaveM */
     48}
     49
     50typedef void (*sfunc_t)(void);
     51
     52/* Get the idprom and stuff it into buffer 'idbuf'.  Returns the
     53 * format type.  'num_bytes' is the number of bytes that your idbuf
     54 * has space for.  Returns 0xff on error.
     55 */
     56unsigned char
     57prom_get_idprom(char *idbuf, int num_bytes)
     58{
     59	int i, oldsfc;
     60	GET_SFC(oldsfc);
     61	SET_SFC(FC_CONTROL);
     62	for(i=0;i<num_bytes; i++)
     63	{
     64		/* There is a problem with the GET_CONTROL_BYTE
     65		macro; defining the extra variable
     66		gets around it.
     67		*/
     68		int c;
     69		GET_CONTROL_BYTE(SUN3_IDPROM_BASE + i, c);
     70		idbuf[i] = c;
     71	}
     72	SET_SFC(oldsfc);
     73	return idbuf[0];
     74}
     75
     76/* Get the major prom version number. */
     77int
     78prom_version(void)
     79{
     80	return romvec->pv_romvers;
     81}
     82
     83/* Get the prom plugin-revision. */
     84int
     85prom_getrev(void)
     86{
     87	return prom_rev;
     88}
     89
     90/* Get the prom firmware print revision. */
     91int
     92prom_getprev(void)
     93{
     94	return prom_prev;
     95}