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

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

unix.superglobalmegacorp.com

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