Annotation of lucent/sys/src/9/port/devboot.c, revision 1.1.1.1

1.1       root        1: #include       "u.h"
                      2: #include       "../port/lib.h"
                      3: #include       "mem.h"
                      4: #include       "dat.h"
                      5: #include       "fns.h"
                      6: #include       "../port/error.h"
                      7: #include       "devtab.h"
                      8: 
                      9: enum{
                     10:        Qdir,
                     11:        Qboot,
                     12:        Qmem,
                     13: };
                     14: 
                     15: Dirtab bootdir[]={
                     16:        "boot",         {Qboot},        0,      0666,
                     17:        "mem",          {Qmem},         0,      0666,
                     18: };
                     19: 
                     20: #define        NBOOT   (sizeof bootdir/sizeof(Dirtab))
                     21: 
                     22: void
                     23: bootreset(void)
                     24: {
                     25: }
                     26: 
                     27: void
                     28: bootinit(void)
                     29: {
                     30: }
                     31: 
                     32: Chan*
                     33: bootattach(char *spec)
                     34: {
                     35:        return devattach('B', spec);
                     36: }
                     37: 
                     38: Chan*
                     39: bootclone(Chan *c, Chan *nc)
                     40: {
                     41:        return devclone(c, nc);
                     42: }
                     43: 
                     44: int     
                     45: bootwalk(Chan *c, char *name)
                     46: {
                     47:        return devwalk(c, name, bootdir, NBOOT, devgen);
                     48: }
                     49: 
                     50: void    
                     51: bootstat(Chan *c, char *dp)
                     52: {
                     53:        devstat(c, dp, bootdir, NBOOT, devgen);
                     54: }
                     55: 
                     56: Chan*
                     57: bootopen(Chan *c, int omode)
                     58: {
                     59:        return devopen(c, omode, bootdir, NBOOT, devgen);
                     60: }
                     61: 
                     62: void    
                     63: bootcreate(Chan *c, char *name, int omode, ulong perm)
                     64: {
                     65:        USED(c, name, omode, perm);
                     66:        error(Eperm);
                     67: }
                     68: 
                     69: void    
                     70: bootclose(Chan *c)
                     71: {
                     72:        USED(c);
                     73: }
                     74: 
                     75: long    
                     76: bootread(Chan *c, void *buf, long n, ulong offset)
                     77: {
                     78:        switch(c->qid.path & ~CHDIR){
                     79: 
                     80:        case Qdir:
                     81:                return devdirread(c, buf, n, bootdir, NBOOT, devgen);
                     82: 
                     83:        case Qmem:
                     84:                /* kernel memory */
                     85:                if(offset>=KZERO && offset<KZERO+conf.npage*BY2PG){
                     86:                        if(offset+n > KZERO+conf.npage*BY2PG)
                     87:                                n = KZERO+conf.npage*BY2PG - offset;
                     88:                        memmove(buf, (char*)offset, n);
                     89:                        return n;
                     90:                }
                     91:                error(Ebadarg);
                     92:        }
                     93: 
                     94:        error(Egreg);
                     95:        return 0;       /* not reached */
                     96: }
                     97: 
                     98: long    
                     99: bootwrite(Chan *c, void *buf, long n, ulong offset)
                    100: {
                    101:        ulong pc;
                    102: 
                    103:        switch(c->qid.path & ~CHDIR){
                    104:        case Qmem:
                    105:                /* kernel memory */
                    106:                if(offset>=KZERO && offset<KZERO+conf.npage*BY2PG){
                    107:                        if(offset+n > KZERO+conf.npage*BY2PG)
                    108:                                n = KZERO+conf.npage*BY2PG - offset;
                    109:                        memmove((char*)offset, buf, n);
                    110:                        return n;
                    111:                }
                    112:                error(Ebadarg);
                    113: 
                    114:        case Qboot:
                    115:                pc = *(ulong*)buf;
                    116:                splhi();
                    117:                gotopc(pc);
                    118:        }
                    119:        error(Ebadarg);
                    120:        return 0;       /* not reached */
                    121: }
                    122: 
                    123: void    
                    124: bootremove(Chan *c)
                    125: {
                    126:        USED(c);
                    127:        error(Eperm);
                    128: }
                    129: 
                    130: void    
                    131: bootwstat(Chan *c, char *dp)
                    132: {
                    133:        USED(c, dp);
                    134:        error(Eperm);
                    135: }

unix.superglobalmegacorp.com

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