Annotation of researchv9/sys/conf/src/config/mkubglue.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Make the uba interrupt file ubglue.s
                      3:  *     mkubglue.c      1.4     81/05/22
                      4:  */
                      5: #include <stdio.h>
                      6: #include "config.h"
                      7: #include "y.tab.h"
                      8: 
                      9: ubglue()
                     10: {
                     11:     register FILE *fp;
                     12:     register struct device *dp, *mp;
                     13: 
                     14:     fp = fopen(LOCAL("ubglue.s"), "w");
                     15:     if (fp == NULL) {
                     16:        perror(LOCAL("ubglue.s"));
                     17:        exit(1);
                     18:     }
                     19:     for (dp = dtab ; dp != NULL; dp = dp->d_next)
                     20:     {
                     21:        mp = dp->d_conn;
                     22:        if (mp != NULL && mp != TO_NEXUS && !eq(mp->d_name, "mba"))
                     23:        {
                     24:            struct idlst *id, *id2;
                     25:            for (id = dp->d_vec; id; id = id->id_next) {
                     26:                for (id2 = dp->d_vec; id2; id2 = id2->id_next) {
                     27:                    if (id2 == id) {
                     28:                        if (machine == MACHINE_VAX)
                     29:                                vax_vec(fp, id->id, dp->d_unit);
                     30:                        else if (machine == MACHINE_SUN2 ||
                     31:                                 machine == MACHINE_SUN3)
                     32:                                sun_vec(fp, id->id, dp->d_unit);
                     33:                        break;
                     34:                    }
                     35:                    if (!strcmp(id->id, id2->id))
                     36:                        break;
                     37:                }
                     38:            }
                     39:        }
                     40:     }
                     41:     fclose(fp);
                     42: }
                     43: 
                     44: /*
                     45:  * vax_vec
                     46:  *     Print an interrupt vector for the vax
                     47:  */
                     48: vax_vec(fp, vector, number)
                     49: register FILE *fp;
                     50: char *vector;
                     51: int number;
                     52: {
                     53:     char nbuf[80];
                     54:     register char *v = nbuf;
                     55: 
                     56:     sprintf(v, "%s%d", vector, number);
                     57:     fprintf(fp, "\t.globl\t_X%s\n\t.align\t2\n_X%s:\n\tpushr\t$0x3f\n", v, v);
                     58:     if (strncmp(vector, "dzx", 3) == 0)
                     59:        fprintf(fp, "\tmovl\t$%d,r0\n\tjbr\t_dzdma\n\n", number);
                     60:     else
                     61:     {
                     62:        fprintf(fp, "\tpushl\t$%d\n", number);
                     63:        fprintf(fp, "\tcalls\t$1,_%s\n\tpopr\t$0x3f\n", vector);
                     64:        /* meter unibus interrupts on 750 and 730 */
                     65:        fprintf(fp, "#if defined(VAX750) || defined(VAXZZ)\n");
                     66:        fprintf(fp, "\tincl\t_cnt+V_INTR\n");
                     67:        fprintf(fp, "#endif\n");
                     68:        fprintf(fp, "\trei\n\n");
                     69:     }
                     70: }
                     71: 
                     72: /*
                     73:  * sun_vec
                     74:  *     Print an interrupt vector for the sun
                     75:  */
                     76: sun_vec(fp, vector, number)
                     77: register FILE *fp;
                     78: char *vector;
                     79: int number;
                     80: {
                     81:        static firsttime = 1;
                     82: 
                     83:        if (firsttime) {
                     84:                fprintf(fp, "#include \"../machine/asm_linkage.h\"\n\n");
                     85:                firsttime = 0;
                     86:        }
                     87: 
                     88:        fprintf(fp, "\tVECINTR(_X%s%d, _%s, _V%s%d)\n",
                     89:                vector, number, vector, vector, number);
                     90: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.