home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sparc / include / asm / oplib_64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  10.3 KB  |  323 lines

  1. /* oplib.h:  Describes the interface and available routines in the
  2.  *           Linux Prom library.
  3.  *
  4.  * Copyright (C) 1995, 2007 David S. Miller (davem@davemloft.net)
  5.  * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  6.  */
  7.  
  8. #ifndef __SPARC64_OPLIB_H
  9. #define __SPARC64_OPLIB_H
  10.  
  11. #include <asm/openprom.h>
  12.  
  13. /* OBP version string. */
  14. extern char prom_version[];
  15.  
  16. /* Root node of the prom device tree, this stays constant after
  17.  * initialization is complete.
  18.  */
  19. extern int prom_root_node;
  20.  
  21. /* PROM stdin and stdout */
  22. extern int prom_stdin, prom_stdout;
  23.  
  24. /* /chosen node of the prom device tree, this stays constant after
  25.  * initialization is complete.
  26.  */
  27. extern int prom_chosen_node;
  28.  
  29. /* Helper values and strings in arch/sparc64/kernel/head.S */
  30. extern const char prom_peer_name[];
  31. extern const char prom_compatible_name[];
  32. extern const char prom_root_compatible[];
  33. extern const char prom_cpu_compatible[];
  34. extern const char prom_finddev_name[];
  35. extern const char prom_chosen_path[];
  36. extern const char prom_cpu_path[];
  37. extern const char prom_getprop_name[];
  38. extern const char prom_mmu_name[];
  39. extern const char prom_callmethod_name[];
  40. extern const char prom_translate_name[];
  41. extern const char prom_map_name[];
  42. extern const char prom_unmap_name[];
  43. extern int prom_mmu_ihandle_cache;
  44. extern unsigned int prom_boot_mapped_pc;
  45. extern unsigned int prom_boot_mapping_mode;
  46. extern unsigned long prom_boot_mapping_phys_high, prom_boot_mapping_phys_low;
  47.  
  48. struct linux_mlist_p1275 {
  49.     struct linux_mlist_p1275 *theres_more;
  50.     unsigned long start_adr;
  51.     unsigned long num_bytes;
  52. };
  53.  
  54. struct linux_mem_p1275 {
  55.     struct linux_mlist_p1275 **p1275_totphys;
  56.     struct linux_mlist_p1275 **p1275_prommap;
  57.     struct linux_mlist_p1275 **p1275_available; /* What we can use */
  58. };
  59.  
  60. /* The functions... */
  61.  
  62. /* You must call prom_init() before using any of the library services,
  63.  * preferably as early as possible.  Pass it the romvec pointer.
  64.  */
  65. extern void prom_init(void *cif_handler, void *cif_stack);
  66.  
  67. /* Boot argument acquisition, returns the boot command line string. */
  68. extern char *prom_getbootargs(void);
  69.  
  70. /* Device utilities. */
  71.  
  72. /* Device operations. */
  73.  
  74. /* Open the device described by the passed string.  Note, that the format
  75.  * of the string is different on V0 vs. V2->higher proms.  The caller must
  76.  * know what he/she is doing!  Returns the device descriptor, an int.
  77.  */
  78. extern int prom_devopen(const char *device_string);
  79.  
  80. /* Close a previously opened device described by the passed integer
  81.  * descriptor.
  82.  */
  83. extern int prom_devclose(int device_handle);
  84.  
  85. /* Do a seek operation on the device described by the passed integer
  86.  * descriptor.
  87.  */
  88. extern void prom_seek(int device_handle, unsigned int seek_hival,
  89.               unsigned int seek_lowval);
  90.  
  91. /* Miscellaneous routines, don't really fit in any category per se. */
  92.  
  93. /* Reboot the machine with the command line passed. */
  94. extern void prom_reboot(const char *boot_command);
  95.  
  96. /* Evaluate the forth string passed. */
  97. extern void prom_feval(const char *forth_string);
  98.  
  99. /* Enter the prom, with possibility of continuation with the 'go'
  100.  * command in newer proms.
  101.  */
  102. extern void prom_cmdline(void);
  103.  
  104. /* Enter the prom, with no chance of continuation for the stand-alone
  105.  * which calls this.
  106.  */
  107. extern void prom_halt(void) __attribute__ ((noreturn));
  108.  
  109. /* Halt and power-off the machine. */
  110. extern void prom_halt_power_off(void) __attribute__ ((noreturn));
  111.  
  112. /* Set the PROM 'sync' callback function to the passed function pointer.
  113.  * When the user gives the 'sync' command at the prom prompt while the
  114.  * kernel is still active, the prom will call this routine.
  115.  *
  116.  */
  117. typedef int (*callback_func_t)(long *cmd);
  118. extern void prom_setcallback(callback_func_t func_ptr);
  119.  
  120. /* Acquire the IDPROM of the root node in the prom device tree.  This
  121.  * gets passed a buffer where you would like it stuffed.  The return value
  122.  * is the format type of this idprom or 0xff on error.
  123.  */
  124. extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
  125.  
  126. /* Character operations to/from the console.... */
  127.  
  128. /* Non-blocking get character from console. */
  129. extern int prom_nbgetchar(void);
  130.  
  131. /* Non-blocking put character to console. */
  132. extern int prom_nbputchar(char character);
  133.  
  134. /* Blocking get character from console. */
  135. extern char prom_getchar(void);
  136.  
  137. /* Blocking put character to console. */
  138. extern void prom_putchar(char character);
  139.  
  140. /* Prom's internal routines, don't use in kernel/boot code. */
  141. extern void prom_printf(const char *fmt, ...);
  142. extern void prom_write(const char *buf, unsigned int len);
  143.  
  144. /* Multiprocessor operations... */
  145. #ifdef CONFIG_SMP
  146. /* Start the CPU with the given device tree node at the passed program
  147.  * counter with the given arg passed in via register %o0.
  148.  */
  149. extern void prom_startcpu(int cpunode, unsigned long pc, unsigned long arg);
  150.  
  151. /* Start the CPU with the given cpu ID at the passed program
  152.  * counter with the given arg passed in via register %o0.
  153.  */
  154. extern void prom_startcpu_cpuid(int cpuid, unsigned long pc, unsigned long arg);
  155.  
  156. /* Stop the CPU with the given cpu ID.  */
  157. extern void prom_stopcpu_cpuid(int cpuid);
  158.  
  159. /* Stop the current CPU. */
  160. extern void prom_stopself(void);
  161.  
  162. /* Idle the current CPU. */
  163. extern void prom_idleself(void);
  164.  
  165. /* Resume the CPU with the passed device tree node. */
  166. extern void prom_resumecpu(int cpunode);
  167. #endif
  168.  
  169. /* Power management interfaces. */
  170.  
  171. /* Put the current CPU to sleep. */
  172. extern void prom_sleepself(void);
  173.  
  174. /* Put the entire system to sleep. */
  175. extern int prom_sleepsystem(void);
  176.  
  177. /* Initiate a wakeup event. */
  178. extern int prom_wakeupsystem(void);
  179.  
  180. /* MMU and memory related OBP interfaces. */
  181.  
  182. /* Get unique string identifying SIMM at given physical address. */
  183. extern int prom_getunumber(int syndrome_code,
  184.                unsigned long phys_addr,
  185.                char *buf, int buflen);
  186.  
  187. /* Retain physical memory to the caller across soft resets. */
  188. extern unsigned long prom_retain(const char *name,
  189.                  unsigned long pa_low, unsigned long pa_high,
  190.                  long size, long align);
  191.  
  192. /* Load explicit I/D TLB entries into the calling processor. */
  193. extern long prom_itlb_load(unsigned long index,
  194.                unsigned long tte_data,
  195.                unsigned long vaddr);
  196.  
  197. extern long prom_dtlb_load(unsigned long index,
  198.                unsigned long tte_data,
  199.                unsigned long vaddr);
  200.  
  201. /* Map/Unmap client program address ranges.  First the format of
  202.  * the mapping mode argument.
  203.  */
  204. #define PROM_MAP_WRITE    0x0001 /* Writable */
  205. #define PROM_MAP_READ    0x0002 /* Readable - sw */
  206. #define PROM_MAP_EXEC    0x0004 /* Executable - sw */
  207. #define PROM_MAP_LOCKED    0x0010 /* Locked, use i/dtlb load calls for this instead */
  208. #define PROM_MAP_CACHED    0x0020 /* Cacheable in both L1 and L2 caches */
  209. #define PROM_MAP_SE    0x0040 /* Side-Effects */
  210. #define PROM_MAP_GLOB    0x0080 /* Global */
  211. #define PROM_MAP_IE    0x0100 /* Invert-Endianness */
  212. #define PROM_MAP_DEFAULT (PROM_MAP_WRITE | PROM_MAP_READ | PROM_MAP_EXEC | PROM_MAP_CACHED)
  213.  
  214. extern int prom_map(int mode, unsigned long size,
  215.             unsigned long vaddr, unsigned long paddr);
  216. extern void prom_unmap(unsigned long size, unsigned long vaddr);
  217.  
  218.  
  219. /* PROM device tree traversal functions... */
  220.  
  221. #ifdef PROMLIB_INTERNAL
  222.  
  223. /* Internal version of prom_getchild. */
  224. extern int __prom_getchild(int parent_node);
  225.  
  226. /* Internal version of prom_getsibling. */
  227. extern int __prom_getsibling(int node);
  228.  
  229. #endif
  230.  
  231. /* Get the child node of the given node, or zero if no child exists. */
  232. extern int prom_getchild(int parent_node);
  233.  
  234. /* Get the next sibling node of the given node, or zero if no further
  235.  * siblings exist.
  236.  */
  237. extern int prom_getsibling(int node);
  238.  
  239. /* Get the length, at the passed node, of the given property type.
  240.  * Returns -1 on error (ie. no such property at this node).
  241.  */
  242. extern int prom_getproplen(int thisnode, const char *property);
  243.  
  244. /* Fetch the requested property using the given buffer.  Returns
  245.  * the number of bytes the prom put into your buffer or -1 on error.
  246.  */
  247. extern int prom_getproperty(int thisnode, const char *property,
  248.                 char *prop_buffer, int propbuf_size);
  249.  
  250. /* Acquire an integer property. */
  251. extern int prom_getint(int node, const char *property);
  252.  
  253. /* Acquire an integer property, with a default value. */
  254. extern int prom_getintdefault(int node, const char *property, int defval);
  255.  
  256. /* Acquire a boolean property, 0=FALSE 1=TRUE. */
  257. extern int prom_getbool(int node, const char *prop);
  258.  
  259. /* Acquire a string property, null string on error. */
  260. extern void prom_getstring(int node, const char *prop, char *buf, int bufsize);
  261.  
  262. /* Does the passed node have the given "name"? YES=1 NO=0 */
  263. extern int prom_nodematch(int thisnode, const char *name);
  264.  
  265. /* Search all siblings starting at the passed node for "name" matching
  266.  * the given string.  Returns the node on success, zero on failure.
  267.  */
  268. extern int prom_searchsiblings(int node_start, const char *name);
  269.  
  270. /* Return the first property type, as a string, for the given node.
  271.  * Returns a null string on error. Buffer should be at least 32B long.
  272.  */
  273. extern char *prom_firstprop(int node, char *buffer);
  274.  
  275. /* Returns the next property after the passed property for the given
  276.  * node.  Returns null string on failure. Buffer should be at least 32B long.
  277.  */
  278. extern char *prom_nextprop(int node, const char *prev_property, char *buffer);
  279.  
  280. /* Returns 1 if the specified node has given property. */
  281. extern int prom_node_has_property(int node, const char *property);
  282.  
  283. /* Returns phandle of the path specified */
  284. extern int prom_finddevice(const char *name);
  285.  
  286. /* Set the indicated property at the given node with the passed value.
  287.  * Returns the number of bytes of your value that the prom took.
  288.  */
  289. extern int prom_setprop(int node, const char *prop_name, char *prop_value,
  290.             int value_size);
  291.  
  292. extern int prom_pathtoinode(const char *path);
  293. extern int prom_inst2pkg(int);
  294. extern int prom_service_exists(const char *service_name);
  295. extern void prom_sun4v_guest_soft_state(void);
  296.  
  297. extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
  298.  
  299. /* Client interface level routines. */
  300. extern long p1275_cmd(const char *, long, ...);
  301.  
  302. #if 0
  303. #define P1275_SIZE(x) ((((long)((x) / 32)) << 32) | (x))
  304. #else
  305. #define P1275_SIZE(x) x
  306. #endif
  307.  
  308. /* We support at most 16 input and 1 output argument */
  309. #define P1275_ARG_NUMBER        0
  310. #define P1275_ARG_IN_STRING        1
  311. #define P1275_ARG_OUT_BUF        2
  312. #define P1275_ARG_OUT_32B        3
  313. #define P1275_ARG_IN_FUNCTION        4
  314. #define P1275_ARG_IN_BUF        5
  315. #define P1275_ARG_IN_64B        6
  316.  
  317. #define P1275_IN(x) ((x) & 0xf)
  318. #define P1275_OUT(x) (((x) << 4) & 0xf0)
  319. #define P1275_INOUT(i,o) (P1275_IN(i)|P1275_OUT(o))
  320. #define P1275_ARG(n,x) ((x) << ((n)*3 + 8))
  321.  
  322. #endif /* !(__SPARC64_OPLIB_H) */
  323.