Blame view

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