annotate arch/io.c @ 16:3d69c66b2610

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