|
|
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) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.