Annotation of qemu/roms/openbios/include/libopenbios/bindings.h, revision 1.1

1.1     ! root        1: /*
        !             2:  *   Creation Date: <2003/12/19 23:09:56 samuel>
        !             3:  *   Time-stamp: <2004/01/07 19:36:42 samuel>
        !             4:  *
        !             5:  *     <bindings.h>
        !             6:  *
        !             7:  *     Forth bindings
        !             8:  *
        !             9:  *   Copyright (C) 2003, 2004 Samuel Rydh ([email protected])
        !            10:  *
        !            11:  *   This program is free software; you can redistribute it and/or
        !            12:  *   modify it under the terms of the GNU General Public License
        !            13:  *   version 2
        !            14:  *
        !            15:  */
        !            16: 
        !            17: #ifndef _H_BINDINGS
        !            18: #define _H_BINDINGS
        !            19: 
        !            20: #include "kernel/stack.h"
        !            21: #include "kernel/kernel.h"
        !            22: 
        !            23: #define PUSH3(a,b,c)   do { PUSH((a)); PUSH((b)); PUSH((c)); } while(0)
        !            24: #define PUSH2(a,b)     do { PUSH((a)); PUSH((b)); } while(0)
        !            25: #define RET( v )       do { PUSH(v); return; } while(0)
        !            26: 
        !            27: /* initialization */
        !            28: extern int             initialize_forth( void );
        !            29: 
        !            30: /* panic */
        !            31: extern int             forth_segv_handler( char *segv_addr );
        !            32: 
        !            33: /* active package */
        !            34: extern phandle_t       find_dev( const char *path );
        !            35: extern phandle_t       get_cur_dev( void );
        !            36: extern phandle_t       activate_device( const char *str );
        !            37: extern void            device_end( void );
        !            38: extern void            activate_dev( phandle_t ph );
        !            39: 
        !            40: 
        !            41: /* ihandle related */
        !            42: extern phandle_t       ih_to_phandle( ihandle_t ih );
        !            43: extern ihandle_t       my_parent( void );
        !            44: extern ihandle_t       my_self( void );
        !            45: extern char            *my_args_copy( void );
        !            46: 
        !            47: extern xt_t            find_package_method( const char *meth, phandle_t ph );
        !            48: extern xt_t            find_ih_method( const char *method, ihandle_t ih );
        !            49: extern xt_t            find_parent_method( const char *method );
        !            50: extern void            call_package( xt_t xt, ihandle_t ihandle );
        !            51: extern void            call_parent( xt_t xt );
        !            52: extern void            call_parent_method( const char *method );
        !            53: 
        !            54: /* package */
        !            55: extern ihandle_t       open_package( const char *argstr, phandle_t ph );
        !            56: extern ihandle_t       open_dev( const char *spec );
        !            57: extern void            close_package( ihandle_t ih );
        !            58: extern void            close_dev( ihandle_t ih );
        !            59: 
        !            60: /* property access */
        !            61: extern void            set_property( phandle_t ph, const char *name,
        !            62:                                      const char *buf, int len );
        !            63: extern void            set_int_property( phandle_t ph, const char *name,
        !            64:                                          u32 val );
        !            65: extern u32             get_int_property( phandle_t ph, const char *name,
        !            66:                                          int *retlen );
        !            67: extern char            *get_property( phandle_t ph, const char *name,
        !            68:                                       int *retlen );
        !            69: 
        !            70: /* device tree iteration */
        !            71: extern phandle_t       dt_iter_begin( void );
        !            72: extern phandle_t       dt_iterate( phandle_t last_tree );
        !            73: extern phandle_t       dt_iterate_type( phandle_t last_tree,
        !            74:                                          const char *type );
        !            75: static inline phandle_t dt_find_type( const char *type ) {
        !            76:        return dt_iterate_type( 0, type );
        !            77: }
        !            78: 
        !            79: /* forth bindings */
        !            80: extern cell            feval( const char *str );
        !            81: extern void            bind_xtfunc( const char *name, xt_t xt,
        !            82:                                     ucell arg, void (*func)(void) );
        !            83: extern void            bind_func( const char *name, void (*func)(void) );
        !            84: extern xt_t            bind_noname_func( void (*func)(void) );
        !            85: extern void            push_str( const char *str );
        !            86: extern char            *pop_fstr_copy( void );
        !            87: 
        !            88: extern int             _fword( const char *word, xt_t *cache_xt );
        !            89: extern cell            _eword( const char *word, xt_t *cache_xt, int nargs );
        !            90: extern int             _selfword( const char *method, xt_t *cache_xt );
        !            91: extern int             _parword( const char *method, xt_t *cache_xt );
        !            92: 
        !            93: #define fword(w)       ({ static xt_t cache_xt = 0; _fword(w, &cache_xt); })
        !            94: #define eword(w, nargs)        ({ static xt_t cache_xt = 0; _eword(w, &cache_xt, nargs); })
        !            95: #define selfword(w)    ({ static xt_t cache_xt = 0; _selfword(w, &cache_xt); })
        !            96: #define parword(w)     ({ static xt_t cache_xt = 0; _parword(w, &cache_xt); })
        !            97: 
        !            98: extern void            throw( int error );
        !            99: 
        !           100: 
        !           101: /* node bindings */
        !           102: extern void            make_openable( int only_parents );
        !           103: 
        !           104: 
        !           105: typedef struct {
        !           106:        const char      *name;
        !           107:        void            *func;
        !           108: } method_t;
        !           109: 
        !           110: #define REGISTER_NAMED_NODE( name, path )   do { \
        !           111:        bind_new_node( name##_flags_, name##_size_, \
        !           112:                path, name##_m, sizeof(name##_m)/sizeof(method_t)); \
        !           113:        } while(0)
        !           114: 
        !           115: #define REGISTER_NAMED_NODE_PHANDLE( name, path, phandle )   do { \
        !           116:     phandle = \
        !           117:     bind_new_node( name##_flags_, name##_size_, \
        !           118:         path, name##_m, sizeof(name##_m)/sizeof(method_t)); \
        !           119:     } while(0)
        !           120: 
        !           121: #define REGISTER_NODE_METHODS( name, path )   do {                     \
        !           122:        const char *paths[1];                                           \
        !           123:                                                                        \
        !           124:        paths[0] = path;                                                \
        !           125:        bind_node( name##_flags_, name##_size_,                         \
        !           126:        paths, 1, name##_m, sizeof(name##_m)/sizeof(method_t));         \
        !           127:     } while(0)
        !           128: 
        !           129: #define DECLARE_UNNAMED_NODE( name, flags, size )      \
        !           130: static const int name##_flags_ = flags;        \
        !           131: static const int name##_size_ = size;
        !           132: 
        !           133: #define DECLARE_NODE( name, flags, size, paths... )    \
        !           134: static const char * const name##_p[] = { paths };      \
        !           135: DECLARE_UNNAMED_NODE(name, flags, size)
        !           136: 
        !           137: #define NODE_METHODS( name ) \
        !           138: static const method_t name##_m[]
        !           139: 
        !           140: #define REGISTER_NODE( name )  do { \
        !           141:            bind_node( name##_flags_, name##_size_, \
        !           142:                       name##_p, sizeof(name##_p)/sizeof(char*), \
        !           143:                       name##_m, sizeof(name##_m)/sizeof(method_t) ); \
        !           144:         } while(0)
        !           145: 
        !           146: extern void    bind_node( int flags, int size, const char * const *paths, int npaths,
        !           147:                           const method_t *methods, int nmethods );
        !           148: 
        !           149: extern phandle_t       bind_new_node( int flags, int size, const char *name,
        !           150:                           const method_t *methods, int nmethods );
        !           151: 
        !           152: #define INSTALL_OPEN   1       /* install trivial open and close methods */
        !           153: 
        !           154: 
        !           155: 
        !           156: #endif   /* _H_BINDINGS */

unix.superglobalmegacorp.com

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