xref: /plan9/sys/lib/acid/alef (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1// runtime library definitions
2if objtype=="mips2" then objtype="mips";
3
4include("/sys/src/alef/lib/"+objtype+"/acid");
5
6defn
7pchan(addr)
8{
9	local l, n;
10
11	complex Chan addr;
12
13	if addr.sva then
14		print("Sender waiting: buffer ", addr.sva, "\n");
15	else
16		print("No sender\n");
17
18	if addr.rva then
19		print("Receiver waiting: buffer ", addr.rva, "\n");
20	else
21		print("No receiver\n");
22
23	if addr.async then {
24		n = 0;
25		l = addr.qh;
26		while l do {
27			n = n+1;
28			l = l.next;
29		}
30		print("Async channel\n\t", n\D, " messsages queued\n\t");
31		l = addr.free;
32		while l do {
33			n = n+1;
34			l = l.next;
35		}
36		print(n\D, " free buffers\n");
37	}
38
39	if addr.selt then {
40		l = "send";
41		if addr.selt then
42			l = "receive";
43		print("In select ", l, ": task ", addr.selt\X, "\n");
44		labstk(addr.selt);
45	}
46}
47
48defn
49tdb()
50{
51	local ta, tq;
52
53	// Private proc tdb pointer
54	ta = *{	0x7fffe000,
55		0x0ffdf000,
56		0xbfff5000 }[match(objtype, {"mips", "sparc", "386"})];
57
58	complex Tdb ta;
59
60	print("tdb ", ta.ntask, " tasks:");
61 	if *ta then
62		print("locked\n");
63	else
64		print("unlocked\n");
65
66	if ta.ctask then {
67		print("current task ", ta.ctask, "\n");
68		Task(ta.ctask);
69	}
70	else
71		print("proc is idle\n");
72
73	tq = (Task)ta.runhd;
74	if tq == 0 then
75		return {};
76
77	print("Tasks ready to run:\n");
78	while tq != 0 do {
79		print("Task(", tq, ")\n");
80		tq = tq.link;
81	}
82}
83
84defn
85lselect(addr)
86{
87	local c;
88
89	complex Task addr;
90	complex Chan c;
91
92	c = addr.slist;
93	if c == 0 then {
94		print("No select pending\n");
95		return {};
96	}
97	while c do {
98		print("pchan(", c\X, ")\n");
99		c = c.sellink;
100	}
101}
102
103defn
104pqlock(addr)
105{
106	local t;
107
108	complex QLock addr;
109
110	if *addr then
111		print("QLock is under modification\n");
112	if addr.used == 0 then
113		return {};
114
115	print("QLock is held\n");
116	t = addr.queue;
117	complex Task t;
118	if t == 0 then {
119		print("No tasks waiting\n");
120		return {};
121	}
122	print("Tasks waiting:\n");
123	while t do {
124		print("Task(", t, ")\n");
125		tq = tq.qlink;
126	}
127}
128
129srcpath = {
130	"./",
131	"/sys/src/alef/lib/port/",
132	"/sys/src/alef/lib/p9/",
133	"/sys/src/alef/lib/"+objtype+"/"
134};
135
136defn labstk(l)
137{
138	if objtype == "386" then
139		_stk(ALEF_switch, *l, linkreg(0), 0);
140	else
141		_stk(*(l+4), *l, linkreg(0), 0);
142}
143
144print("/sys/lib/acid/alef");
145
146include("/sys/src/alef/lib/port/acid."+objtype);
147include("/sys/src/alef/lib/p9/acid."+objtype);
148