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