annotate arch/io.c @ 26:cabcdc3727e3 default tip

arch: implemented swapcontext & fixed few minor issues
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Thu, 12 May 2011 15:56:46 -0400
parents f219716c6b54
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
f219716c6b54 arch: handle device attention properly
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
1
12
40af39d064fa Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 9
diff changeset
2 #include "channel.h"
40af39d064fa Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 9
diff changeset
3 #include <die.h>
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
4
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
5 u32 find_dev(int devnum)
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
6 {
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
7 struct schib schib;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
8 u32 sch;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
9
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
10 for(sch=0x10000; sch<=0x1ffff; sch++) {
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
11 if (store_sch(sch, &schib))
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
12 continue;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
13
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
14 if (!schib.pmcw.v)
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
15 continue;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
16
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
17 if (schib.pmcw.dev_num != devnum)
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
18 continue;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
19
14
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
20 if (!schib.pmcw.e) {
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
21 schib.pmcw.e = 1;
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
22
14
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
23 if (modify_sch(sch, &schib))
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
24 continue;
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
25 }
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
26
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
27 return sch;
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
28 }
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
29
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
30 return 0;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
31 }
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
32
14
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
33 extern void IOINT(void);
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
34
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
35 void init_io_int()
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
36 {
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
37 struct psw psw;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
38
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
39 // set up the IO interrupt handler
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
40 psw.ea = 1;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
41 psw.ba = 1;
14
c75be274ce23 Now functioning arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
42 psw.ptr = (u64) &IOINT;
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
43
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
44 __builtin_memcpy(((void*) 0x1f0), &psw, sizeof(struct psw));
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
45 }
16
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
46
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
47 void wait_for_io_int()
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
48 {
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
49 struct psw psw;
18
f219716c6b54 arch: handle device attention properly
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
50 u8 devst;
16
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
51
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
52 __builtin_memset(&psw, 0, sizeof(struct psw));
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
53 psw.io = 1;
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
54 psw.ea = 1;
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
55 psw.ba = 1;
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
56 psw.w = 1;
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
57
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
58 asm volatile(
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
59 " larl %%r1,0f\n"
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
60 " stg %%r1,%0\n"
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
61 " lpswe %1\n"
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
62 "0:\n"
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
63 : /* output */
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
64 "=m" (psw.ptr)
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
65 : /* input */
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
66 "m" (psw)
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
67 : /* clobbered */
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
68 "r1", "r2"
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
69 );
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
70
18
f219716c6b54 arch: handle device attention properly
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
71 devst = *((u8*) 0x210);
f219716c6b54 arch: handle device attention properly
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
72
26
cabcdc3727e3 arch: implemented swapcontext & fixed few minor issues
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 18
diff changeset
73 if (devst & 0x84)
16
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
74 return;
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
75
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
76 die();
3d69c66b2610 arch: last fixup, now things seem to work as expected
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 14
diff changeset
77 }