annotate arch/io.c @ 12:40af39d064fa

Refactor the arch code Note: the code, as it is now, does not run even though it compiles
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Thu, 07 Apr 2011 22:07:20 -0400
parents 0451ffa1c3a0
children c75be274ce23
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
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
4 /* console I/O functions */
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 static struct irb irb;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
7 static struct orb orb;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
8 static struct ccw ccw;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
9
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
10 u32 find_dev(int devnum)
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
11 {
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
12 struct schib schib;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
13 u32 sch;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
14
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
15 for(sch=0x10000; sch<=0x1ffff; sch++) {
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
16 if (store_sch(sch, &schib))
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
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
19 if (!schib.pmcw.v)
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
20 continue;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
21
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
22 if (schib.pmcw.dev_num != devnum)
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
23 continue;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
24
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
25 schib.pmcw.e = 1;
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
26
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
27 if (modify_sch(sch, &schib))
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
28 continue;
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 sch;
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
31 }
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
32
9
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
33 return 0;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
34 }
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 static void enable_cons(int devnum)
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 struct psw psw;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
39 u32 sch;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
40
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
41 sch = find_dev(devnum);
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 if (!sch)
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
44 die();
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
45
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
46 // found it
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
47
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
48 // set up the IO interrupt handler
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
49 psw.ea = 1;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
50 psw.ba = 1;
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
51
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
52 asm volatile(
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
53 " larl %%r1,0f\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
54 " stg %%r1,%0\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
55 " brc 15,1f\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
56 /* IO handler code begins */
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
57 "0:\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
58 " l %%r1,0xb8\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
59 " larl %%r2,irb\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
60 " tsch 0(%%r2)\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
61 " l %%r1,5(%%r2)\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
62 " nill %%r1,0x04\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
63 " brc 8,2f\n" // done?
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
64 " lg %%r1,0x178\n" // yes.
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
65 " bcr 15,%%r1\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
66 "2:\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
67 " l %%r1,5(%%r2)\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
68 " nill %%r1,0x80\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
69 " brc 8,3f\n" // attention?
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
70 " lg %%r1,0x178\n" // yes.
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
71 " bcr 15,%%r1\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
72 "3:\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
73 " lpswe 0x170\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
74 /* IO handler code ends */
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
75 "1:\n"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
76 : /* output */
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
77 "=m" (psw.ptr),
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
78 "=m" (irb)
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
79 : /* input */
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
80 "a" (&irb)
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
81 : /* clobbered */
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
82 "r1", "r2"
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
83 );
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
84
0451ffa1c3a0 Added FBA helper functions
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents: 4
diff changeset
85 __builtin_memcpy(((void*) 0x1f0), &psw, sizeof(struct psw));
0
5d9f272f4db6 import template
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
86 }