Annotation of qemu/roms/openbios/arch/sparc64/openprom.h, revision 1.1.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.