Annotation of researchv9/sys/conf/src/config/mkubglue.c, revision 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.