Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "u.h"
2
#include "../port/lib.h"
3
#include "mem.h"
4
#include "dat.h"
5
#include "fns.h"
6
 
7
int
8
fpudevprocio(Proc* proc, void* a, long n, uintptr offset, int write)
9
{
10
	/*
11
	 * Called from procdevtab.read and procdevtab.write
12
	 * allow user process access to the FPU registers.
13
	 * This is the only FPU routine which is called directly
14
	 * from the port code; it would be nice to have dynamic
15
	 * creation of entries in the device file trees...
16
	 */
17
	USED(proc, a, n, offset, write);
18
 
19
	return 0;
20
}
21
 
22
void
23
fpunotify(Ureg*)
24
{
25
	/*
26
	 * Called when a note is about to be delivered to a
27
	 * user process, usually at the end of a system call.
28
	 * Note handlers are not allowed to use the FPU so
29
	 * the state is marked (after saving if necessary) and
30
	 * checked in the Device Not Available handler.
31
	 */
32
}
33
 
34
void
35
fpunoted(void)
36
{
37
	/*
38
	 * Called from sysnoted() via the machine-dependent
39
	 * noted() routine.
40
	 * Clear the flag set above in fpunotify().
41
	 */
42
}
43
 
44
void
45
fpusysrfork(Ureg*)
46
{
47
	/*
48
	 * Called early in the non-interruptible path of
49
	 * sysrfork() via the machine-dependent syscall() routine.
50
	 * Save the state so that it can be easily copied
51
	 * to the child process later.
52
	 */
53
}
54
 
55
void
56
fpusysrforkchild(Proc*, Ureg*, Proc*)
57
{
58
	/*
59
	 * Called later in sysrfork() via the machine-dependent
60
	 * sysrforkchild() routine.
61
	 * Copy the parent FPU state to the child.
62
	 */
63
}
64
 
65
void
66
fpuprocsave(Proc*)
67
{
68
	/*
69
	 * Called from sched() and sleep() via the machine-dependent
70
	 * procsave() routine.
71
	 * About to go in to the scheduler.
72
	 * If the process wasn't using the FPU
73
	 * there's nothing to do.
74
	 */
75
}
76
 
77
void
78
fpuprocrestore(Proc*)
79
{
80
	/*
81
	 * The process has been rescheduled and is about to run.
82
	 * Nothing to do here right now. If the process tries to use
83
	 * the FPU again it will cause a Device Not Available
84
	 * exception and the state will then be restored.
85
	 */
86
}
87
 
88
void
89
fpusysprocsetup(Proc*)
90
{
91
	/*
92
	 * Disable the FPU.
93
	 * Called from sysexec() via sysprocsetup() to
94
	 * set the FPU for the new process.
95
	 */
96
}
97
 
98
void
99
fpuinit(void)
100
{
101
}
102
 
103
int
104
fpuemu(Ureg* ureg)
105
{
106
	int nfp;
107
 
108
	if(waserror()){
109
		splhi();
110
		postnote(up, 1, up->errstr, NDebug);
111
		return 1;
112
	}
113
	spllo();
114
	nfp = fpiarm(ureg);
115
	splhi();
116
	poperror();
117
 
118
	return nfp;
119
}