Annotation of coherent/b/kernel/tools/callfunc.c, revision 1.1.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.