Annotation of Net2/arch/i386/include/cpufunc.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Functions to provide access to special i386 instructions.
        !             3:  * XXX - bezillions more are defined in locore.s but are not declared anywhere.
        !             4:  */
        !             5: 
        !             6: #include <sys/cdefs.h>
        !             7: #include <sys/types.h>
        !             8: 
        !             9: #ifdef __GNUC__
        !            10: 
        !            11: static __inline int bdb(void)
        !            12: {
        !            13:        extern int bdb_exists;
        !            14: 
        !            15:        if (!bdb_exists)
        !            16:                return (0);
        !            17:        __asm("int $3");
        !            18:        return (1);
        !            19: }
        !            20: 
        !            21: static __inline void
        !            22: disable_intr(void)
        !            23: {
        !            24:        __asm __volatile("cli");
        !            25: }
        !            26: 
        !            27: static __inline void
        !            28: enable_intr(void)
        !            29: {
        !            30:        __asm __volatile("sti");
        !            31: }
        !            32: 
        !            33: /*
        !            34:  * This roundabout method of returning a u_char helps stop gcc-1.40 from
        !            35:  * generating unnecessary movzbl's.
        !            36:  */
        !            37: #define        inb(port)       ((u_char) u_int_inb(port))
        !            38: 
        !            39: static __inline u_int
        !            40: u_int_inb(u_int port)
        !            41: {
        !            42:        u_char  data;
        !            43:        /*
        !            44:         * We use %%dx and not %1 here because i/o is done at %dx and not at
        !            45:         * %edx, while gcc-2.2.2 generates inferior code (movw instead of movl)
        !            46:         * if we tell it to load (u_short) port.
        !            47:         */
        !            48:        __asm __volatile("inb %%dx,%0" : "=a" (data) : "d" (port));
        !            49:        return data;
        !            50: }
        !            51: 
        !            52: static __inline void
        !            53: outb(u_int port, u_char data)
        !            54: {
        !            55:        register u_char al asm("ax");
        !            56: 
        !            57:        al = data;              /* help gcc-1.40's register allocator */
        !            58:        __asm __volatile("outb %0,%%dx" : : "a" (al), "d" (port));
        !            59: }
        !            60: 
        !            61: #else /* not __GNUC__ */
        !            62: 
        !            63: int    bdb             __P((void));
        !            64: void   disable_intr    __P((void));
        !            65: void   enable_intr     __P((void));
        !            66: u_char inb             __P((u_int port));
        !            67: void   outb            __P((u_int port, u_int data));  /* XXX - incompat */
        !            68: 
        !            69: #endif /* __GNUC__ */
        !            70: 
        !            71: #define        really_u_int    int     /* XXX */
        !            72: #define        really_void     int     /* XXX */
        !            73: 
        !            74: void   load_cr0        __P((u_int cr0));
        !            75: really_u_int   rcr0    __P((void));
        !            76: 
        !            77: #ifdef notyet
        !            78: really_void    setidt  __P((int idx, /*XXX*/caddr_t func, int typ, int dpl));
        !            79: #endif
        !            80: 
        !            81: #undef really_u_int
        !            82: #undef really_void

unix.superglobalmegacorp.com

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