Annotation of qemu/roms/openbios/arch/sparc32/openprom.h, revision 1.1

1.1     ! root        1: #ifndef __SPARC_OPENPROM_H
        !             2: #define __SPARC_OPENPROM_H
        !             3: 
        !             4: /* openprom.h:  Prom structures and defines for access to the OPENBOOT
        !             5:  *              prom routines and data areas.
        !             6:  *
        !             7:  * Copyright (C) 1995 David S. Miller ([email protected])
        !             8:  */
        !             9: 
        !            10: // #include <asm/vaddrs.h>
        !            11: 
        !            12: /* Empirical constants... */
        !            13: #define        LINUX_OPPROM_MAGIC      0x10010407
        !            14: 
        !            15: #ifndef __ASSEMBLY__
        !            16: /* V0 prom device operations. */
        !            17: struct linux_dev_v0_funcs {
        !            18:        int (*v0_devopen)(char *device_str);
        !            19:        int (*v0_devclose)(int dev_desc);
        !            20:        int (*v0_rdblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
        !            21:        int (*v0_wrblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
        !            22:        int (*v0_wrnetdev)(int dev_desc, int num_bytes, char *buf);
        !            23:        int (*v0_rdnetdev)(int dev_desc, int num_bytes, char *buf);
        !            24:        int (*v0_rdchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
        !            25:        int (*v0_wrchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
        !            26:        int (*v0_seekdev)(int dev_desc, long logical_offst, int from);
        !            27: };
        !            28: 
        !            29: /* V2 and later prom device operations. */
        !            30: struct linux_dev_v2_funcs {
        !            31:        int (*v2_inst2pkg)(int d);      /* Convert ihandle to phandle */
        !            32:        char * (*v2_dumb_mem_alloc)(char *va, unsigned sz);
        !            33:        void (*v2_dumb_mem_free)(char *va, unsigned sz);
        !            34: 
        !            35:        /* To map devices into virtual I/O space. */
        !            36:        char * (*v2_dumb_mmap)(char *virta, int which_io, unsigned paddr, unsigned sz);
        !            37:        void (*v2_dumb_munmap)(char *virta, unsigned size);
        !            38: 
        !            39:        int (*v2_dev_open)(char *devpath);
        !            40:        void (*v2_dev_close)(int d);
        !            41:        int (*v2_dev_read)(int d, char *buf, int nbytes);
        !            42:        int (*v2_dev_write)(int d, char *buf, int nbytes);
        !            43:        int (*v2_dev_seek)(int d, int hi, int lo);
        !            44: 
        !            45:        /* Never issued (multistage load support) */
        !            46:        void (*v2_wheee2)(void);
        !            47:        void (*v2_wheee3)(void);
        !            48: };
        !            49: 
        !            50: struct linux_mlist_v0 {
        !            51:        struct linux_mlist_v0 *theres_more;
        !            52:        char *start_adr;
        !            53:        unsigned num_bytes;
        !            54: };
        !            55: 
        !            56: struct linux_mem_v0 {
        !            57:        struct linux_mlist_v0 * const *v0_totphys;
        !            58:        struct linux_mlist_v0 * const *v0_prommap;
        !            59:        struct linux_mlist_v0 * const *v0_available; /* What we can use */
        !            60: };
        !            61: 
        !            62: /* Arguments sent to the kernel from the boot prompt. */
        !            63: struct linux_arguments_v0 {
        !            64:        const char *argv[8];
        !            65:        char args[100];
        !            66:        char boot_dev[2];
        !            67:        int boot_dev_ctrl;
        !            68:        int boot_dev_unit;
        !            69:        int dev_partition;
        !            70:        const char *kernel_file_name;
        !            71:        void *aieee1;           /* XXX */
        !            72: };
        !            73: 
        !            74: /* V2 and up boot things. */
        !            75: struct linux_bootargs_v2 {
        !            76:        const char **bootpath;
        !            77:        const char **bootargs;
        !            78:        const int *fd_stdin;
        !            79:        const int *fd_stdout;
        !            80: };
        !            81: 
        !            82: /* The top level PROM vector. */
        !            83: struct linux_romvec {
        !            84:        /* Version numbers. */
        !            85:        unsigned int pv_magic_cookie;
        !            86:        unsigned int pv_romvers;
        !            87:        unsigned int pv_plugin_revision;
        !            88:        unsigned int pv_printrev;
        !            89: 
        !            90:        /* Version 0 memory descriptors. */
        !            91:        struct linux_mem_v0 pv_v0mem;
        !            92: 
        !            93:        /* Node operations. */
        !            94:        const struct linux_nodeops *pv_nodeops;
        !            95: 
        !            96:        char **pv_bootstr;
        !            97:        struct linux_dev_v0_funcs pv_v0devops;
        !            98: 
        !            99:        const char *pv_stdin;
        !           100:        const char *pv_stdout;
        !           101: #define        PROMDEV_KBD     0               /* input from keyboard */
        !           102: #define        PROMDEV_SCREEN  0               /* output to screen */
        !           103: #define        PROMDEV_TTYA    1               /* in/out to ttya */
        !           104: #define        PROMDEV_TTYB    2               /* in/out to ttyb */
        !           105: 
        !           106:        /* Blocking getchar/putchar.  NOT REENTRANT! (grr) */
        !           107:        int (*pv_getchar)(void);
        !           108:        void (*pv_putchar)(int ch);
        !           109: 
        !           110:        /* Non-blocking variants. */
        !           111:        int (*pv_nbgetchar)(void);
        !           112:        int (*pv_nbputchar)(int ch);
        !           113: 
        !           114:        void (*pv_putstr)(char *str, int len);
        !           115: 
        !           116:        /* Miscellany. */
        !           117:        void (*pv_reboot)(char *bootstr);
        !           118:        void (*pv_printf)(__const__ char *fmt, ...);
        !           119:        void (*pv_abort)(void);
        !           120:        __volatile__ int *pv_ticks;
        !           121:        void (*pv_halt)(void);
        !           122:        void (**pv_synchook)(void);
        !           123: 
        !           124:        /* Evaluate a forth string, not different proto for V0 and V2->up. */
        !           125:        union {
        !           126:                void (*v0_eval)(int len, char *str);
        !           127:                void (*v2_eval)(char *str, int arg0, int arg1, int arg2, int arg3, int arg4);
        !           128:        } pv_fortheval;
        !           129: 
        !           130:        const struct linux_arguments_v0 * const *pv_v0bootargs;
        !           131: 
        !           132:        /* Get ether address. */
        !           133:        unsigned int (*pv_enaddr)(int d, char *enaddr);
        !           134: 
        !           135:        struct linux_bootargs_v2 pv_v2bootargs;
        !           136:        struct linux_dev_v2_funcs pv_v2devops;
        !           137: 
        !           138:        /* Prom version 3 memory allocation */
        !           139:        char * (*v3_memalloc)(char *va, unsigned int size, unsigned int align);
        !           140: 
        !           141:        int filler[14];
        !           142: 
        !           143:        /* This one is sun4c/sun4 only. */
        !           144:        void (*pv_setctxt)(int ctxt, char *va, int pmeg);
        !           145: 
        !           146:        /* Prom version 3 Multiprocessor routines. This stuff is crazy.
        !           147:         * No joke. Calling these when there is only one cpu probably
        !           148:         * crashes the machine, have to test this. :-)
        !           149:         */
        !           150: 
        !           151:        /* v3_cpustart() will start the cpu 'whichcpu' in mmu-context
        !           152:         * 'thiscontext' executing at address 'prog_counter'
        !           153:         */
        !           154:        int (*v3_cpustart)(unsigned int whichcpu, int ctxtbl_ptr,
        !           155:                           int thiscontext, char *prog_counter);
        !           156: 
        !           157:        /* v3_cpustop() will cause cpu 'whichcpu' to stop executing
        !           158:         * until a resume cpu call is made.
        !           159:         */
        !           160:        int (*v3_cpustop)(unsigned int whichcpu);
        !           161: 
        !           162:        /* v3_cpuidle() will idle cpu 'whichcpu' until a stop or
        !           163:         * resume cpu call is made.
        !           164:         */
        !           165:        int (*v3_cpuidle)(unsigned int whichcpu);
        !           166: 
        !           167:        /* v3_cpuresume() will resume processor 'whichcpu' executing
        !           168:         * starting with whatever 'pc' and 'npc' were left at the
        !           169:         * last 'idle' or 'stop' call.
        !           170:         */
        !           171:        int (*v3_cpuresume)(unsigned int whichcpu);
        !           172: };
        !           173: 
        !           174: /* Routines for traversing the prom device tree. */
        !           175: struct linux_nodeops {
        !           176:        int (*no_nextnode)(int node);
        !           177:        int (*no_child)(int node);
        !           178:         int (*no_proplen)(int node, const char *name);
        !           179:         int (*no_getprop)(int node, const char *name, char *val);
        !           180:         int (*no_setprop)(int node, const char *name, char *val, int len);
        !           181:         const char * (*no_nextprop)(int node, const char *name);
        !           182: };
        !           183: 
        !           184: /* More fun PROM structures for device probing. */
        !           185: #define PROMREG_MAX     16
        !           186: #define PROMVADDR_MAX   16
        !           187: #define PROMINTR_MAX    15
        !           188: 
        !           189: struct linux_prom_registers {
        !           190:        unsigned int which_io;         /* is this in OBIO space? */
        !           191:        unsigned int phys_addr;        /* The physical address of this register */
        !           192:        unsigned int reg_size;         /* How many bytes does this register take up? */
        !           193: };
        !           194: 
        !           195: struct linux_prom_irqs {
        !           196:        int pri;    /* IRQ priority */
        !           197:        int vector; /* This is foobar, what does it do? */
        !           198: };
        !           199: 
        !           200: /* Element of the "ranges" vector */
        !           201: struct linux_prom_ranges {
        !           202:        unsigned int ot_child_space;
        !           203:        unsigned int ot_child_base;             /* Bus feels this */
        !           204:        unsigned int ot_parent_space;
        !           205:        unsigned int ot_parent_base;            /* CPU looks from here */
        !           206:        unsigned int or_size;
        !           207: };
        !           208: 
        !           209: /* Ranges and reg properties are a bit different for PCI. */
        !           210: struct linux_prom_pci_registers {
        !           211:        /*
        !           212:         * We don't know what information this field contain.
        !           213:         * We guess, PCI device function is in bits 15:8
        !           214:         * So, ...
        !           215:         */
        !           216:        unsigned int which_io;  /* Let it be which_io */
        !           217: 
        !           218:        unsigned int phys_hi;
        !           219:        unsigned int phys_lo;
        !           220: 
        !           221:        unsigned int size_hi;
        !           222:        unsigned int size_lo;
        !           223: };
        !           224: 
        !           225: struct linux_prom_pci_ranges {
        !           226:        unsigned int child_phys_hi;     /* Only certain bits are encoded here. */
        !           227:        unsigned int child_phys_mid;
        !           228:        unsigned int child_phys_lo;
        !           229: 
        !           230:        unsigned int parent_phys_hi;
        !           231:        unsigned int parent_phys_lo;
        !           232: 
        !           233:        unsigned int size_hi;
        !           234:        unsigned int size_lo;
        !           235: };
        !           236: 
        !           237: struct linux_prom_pci_assigned_addresses {
        !           238:        unsigned int which_io;
        !           239: 
        !           240:        unsigned int phys_hi;
        !           241:        unsigned int phys_lo;
        !           242: 
        !           243:        unsigned int size_hi;
        !           244:        unsigned int size_lo;
        !           245: };
        !           246: 
        !           247: struct linux_prom_ebus_ranges {
        !           248:        unsigned int child_phys_hi;
        !           249:        unsigned int child_phys_lo;
        !           250: 
        !           251:        unsigned int parent_phys_hi;
        !           252:        unsigned int parent_phys_mid;
        !           253:        unsigned int parent_phys_lo;
        !           254: 
        !           255:        unsigned int size;
        !           256: };
        !           257: 
        !           258: #endif /* !(__ASSEMBLY__) */
        !           259: 
        !           260: #endif /* !(__SPARC_OPENPROM_H) */

unix.superglobalmegacorp.com

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