date and time created 84/08/22 11:18:03 by ralph
[unix-history] / usr / src / usr.sbin / config / mkubglue.c
CommitLineData
524aa063
SL
1#ifndef lint
2static char sccsid[] = "@(#)mkubglue.c 1.11 (Berkeley) %G%";
3#endif
ba6a61e0 4
e1f7f2fb
MT
5/*
6 * Make the uba interrupt file ubglue.s
7 */
8#include <stdio.h>
9#include "config.h"
10#include "y.tab.h"
11
12ubglue()
13{
22d68ad0
BJ
14 register FILE *fp;
15 register struct device *dp, *mp;
e1f7f2fb 16
22d68ad0
BJ
17 fp = fopen(path("ubglue.s"), "w");
18 if (fp == 0) {
19 perror(path("ubglue.s"));
20 exit(1);
21 }
22 for (dp = dtab; dp != 0; dp = dp->d_next) {
23 mp = dp->d_conn;
24 if (mp != 0 && mp != (struct device *)-1 &&
25 !eq(mp->d_name, "mba")) {
26 struct idlst *id, *id2;
27
28 for (id = dp->d_vec; id; id = id->id_next) {
29 for (id2 = dp->d_vec; id2; id2 = id2->id_next) {
30 if (id2 == id) {
31 dump_vec(fp, id->id, dp->d_unit);
32 break;
33 }
34 if (!strcmp(id->id, id2->id))
35 break;
36 }
37 }
08f9a943 38 }
e1f7f2fb 39 }
22d68ad0 40 (void) fclose(fp);
e1f7f2fb
MT
41}
42
43/*
22d68ad0 44 * print an interrupt vector
e1f7f2fb 45 */
e1f7f2fb 46dump_vec(fp, vector, number)
22d68ad0
BJ
47 register FILE *fp;
48 char *vector;
49 int number;
e1f7f2fb 50{
22d68ad0
BJ
51 char nbuf[80];
52 register char *v = nbuf;
e1f7f2fb 53
22d68ad0
BJ
54 (void) sprintf(v, "%s%d", vector, number);
55 fprintf(fp, "\t.globl\t_X%s\n\t.align\t2\n_X%s:\n\tpushr\t$0x3f\n",
56 v, v);
57 if (strncmp(vector, "dzx", 3) == 0)
a71ca461 58 fprintf(fp, "\tmovl\t$%d,r0\n\tjmp\tdzdma\n\n", number);
22d68ad0 59 else {
a71ca461
SL
60 if (strncmp(vector, "uur", 3) == 0) {
61 fprintf(fp, "#ifdef UUDMA\n");
62 fprintf(fp, "\tmovl\t$%d,r0\n\tjsb\tuudma\n", number);
63 fprintf(fp, "#endif\n");
64 }
dde2b2cb 65 fprintf(fp, "\tpushl\t$%d\n", number);
c1531e50
SL
66 fprintf(fp, "\tcalls\t$1,_%s\n\tpopr\t$0x3f\n", vector);
67 fprintf(fp, "#if defined(VAX750) || defined(VAX730)\n");
68 fprintf(fp, "\tincl\t_cnt+V_INTR\n#endif\n\trei\n\n");
22d68ad0 69 }
e1f7f2fb 70}