Annotation of coherent/b/kernel/tools/callfunc.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Call a kernel function with the NLCALL ioctl on /dev/kmem.
        !             3:  */
        !             4: #include <stdio.h>
        !             5: #include <fcntl.h>
        !             6: #include <sys/null.h>
        !             7: 
        !             8: /*
        !             9:  * Set FUNC to the address of the routine you want called.
        !            10:  */
        !            11: #define FUNC   0xFFC02610      /* vptop()      */
        !            12: /* #define FUNC   0xFFC02590   /* vtop()       */
        !            13: /* #define FUNC   0xFFC0267C   /* vtovp()      */
        !            14: 
        !            15: main()
        !            16: {
        !            17:        int fd;
        !            18:        unsigned vec[7];
        !            19: 
        !            20:        if ((fd = open("/dev/kmem", O_RDONLY)) == -1) {
        !            21:                printf("Can't open /dev/kmem.\n");
        !            22:        }
        !            23:        
        !            24:        /*
        !            25:         * The first element of this vector gives the length for the
        !            26:         * whole vector.  The kernel will copy in this many unsigneds.
        !            27:         * Because extra arguments are ignored by any function, I
        !            28:         * usually just leave this at the maximum value of 7.
        !            29:         * Setting this element to something larger than 7 results in
        !            30:         * a return value of -1 with errno set to EINVAL.
        !            31:         *
        !            32:         * The ioctl() will put the return value of the function in element
        !            33:         * 0.
        !            34:         *
        !            35:         * The second element is the address of the function to be
        !            36:         * called.
        !            37:         *
        !            38:         * Successive elements are arguments to be passed to the
        !            39:         * function.  Only the first 5 will be passed.
        !            40:         */
        !            41:        vec[0] = 7;
        !            42:        vec[1] = FUNC;
        !            43:        vec[2] = 0xF3B0E8;      /* virtual-physical */
        !            44:        vec[3] = 0;
        !            45:        vec[4] = 0;
        !            46:        vec[5] = 0;
        !            47:        vec[6] = 0;
        !            48: 
        !            49:        ioctl(fd, NLCALL, vec);
        !            50: 
        !            51:        printf("retval: 0x%x\n", vec[0]);
        !            52: 
        !            53:        close(fd);
        !            54: } /* main() */

unix.superglobalmegacorp.com

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