prom.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _PPC64_PROM_H
  2. #define _PPC64_PROM_H
  3. /*
  4.  * Definitions for talking to the Open Firmware PROM on
  5.  * Power Macintosh computers.
  6.  *
  7.  * Copyright (C) 1996 Paul Mackerras.
  8.  *
  9.  * Updates for PPC64 by Peter Bergner & David Engebretsen, IBM Corp.
  10.  *
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version
  14.  * 2 of the License, or (at your option) any later version.
  15.  */
  16. #define PTRRELOC(x)     ((typeof(x))((unsigned long)(x) - offset))
  17. #define PTRUNRELOC(x)   ((typeof(x))((unsigned long)(x) + offset))
  18. #define RELOC(x)        (*PTRRELOC(&(x)))
  19. #define LONG_LSW(X) (((unsigned long)X) & 0xffffffff)
  20. #define LONG_MSW(X) (((unsigned long)X) >> 32)
  21. typedef u32 phandle;
  22. typedef void *ihandle;
  23. typedef u32 phandle32;
  24. typedef u32 ihandle32;
  25. extern char *prom_display_paths[];
  26. extern unsigned int prom_num_displays;
  27. struct address_range {
  28. unsigned long space;
  29. unsigned long address;
  30. unsigned long size;
  31. };
  32. struct interrupt_info {
  33. int line;
  34. int sense; /* +ve/-ve logic, edge or level, etc. */
  35. };
  36. struct pci_address {
  37. u32 a_hi;
  38. u32 a_mid;
  39. u32 a_lo;
  40. };
  41. struct pci_range32 {
  42. struct pci_address child_addr;
  43. unsigned int  parent_addr;
  44.    unsigned long size; 
  45. };
  46. struct pci_range64 {
  47. struct pci_address child_addr;
  48.    unsigned long parent_addr;
  49.         unsigned long size; 
  50. };
  51. union pci_range {
  52. struct {
  53. struct pci_address addr;
  54. u32 phys;
  55. u32 size_hi;
  56. } pci32;
  57. struct {
  58. struct pci_address addr;
  59. u32 phys_hi;
  60. u32 phys_lo;
  61. u32 size_hi;
  62. u32 size_lo;
  63. } pci64;
  64. };
  65. struct _of_tce_table {
  66. phandle node;
  67. unsigned long base;
  68. unsigned long size;
  69. };
  70. struct reg_property {
  71. unsigned long address;
  72. unsigned long size;
  73. };
  74. struct reg_property32 {
  75. unsigned int address;
  76. unsigned int size;
  77. };
  78. struct reg_property64 {
  79. unsigned long address;
  80. unsigned long size;
  81. };
  82. struct translation_property {
  83. unsigned long virt;
  84. unsigned long size;
  85. unsigned long phys;
  86. unsigned int flags;
  87. };
  88. struct property {
  89. char *name;
  90. int length;
  91. unsigned char *value;
  92. struct property *next;
  93. };
  94. /* NOTE: the device_node contains PCI specific info for pci devices.
  95.  * This perhaps could be hung off the device_node with another struct,
  96.  * but for now it is directly in the node.  The phb ptr is a good
  97.  * indication of a real PCI node.  Other nodes leave these fields zeroed.
  98.  */
  99. struct pci_controller;
  100. struct TceTable;
  101. struct device_node {
  102. char *name;
  103. char *type;
  104. phandle node;
  105. int n_addrs;
  106. struct address_range *addrs;
  107. int n_intrs;
  108. struct interrupt_info *intrs;
  109. char *full_name;
  110. int busno; /* for pci devices */
  111. int devfn; /* for pci devices */
  112. struct  pci_controller *phb; /* for pci devices */
  113. struct TceTable *tce_table; /* for phb's or bridges */
  114. #define DN_STATUS_BIST_FAILED (1<<0)
  115. struct property *properties;
  116. struct device_node *parent;
  117. struct device_node *child;
  118. struct device_node *sibling;
  119. struct device_node *next; /* next device of same type */
  120. struct device_node *allnext; /* next in list of all nodes */
  121. };
  122. typedef u32 prom_arg_t;
  123. struct prom_args {
  124.         u32 service;
  125.         u32 nargs;
  126.         u32 nret;
  127.         prom_arg_t args[10];
  128.         prom_arg_t *rets;     /* Pointer to return values in args[16]. */
  129. };
  130. typedef struct {
  131. u32  printf; /* void (*printf)(char *, ...); */
  132. u32  memdump; /* void (*memdump)(unsigned char *, unsigned long); */
  133. u32  dummy; /* void (*dummy)(void); */
  134. } yaboot_debug_t;
  135. struct prom_t {
  136. unsigned long entry;
  137. ihandle chosen;
  138. int cpu;
  139. ihandle stdout;
  140. ihandle disp_node;
  141. struct prom_args args;
  142. unsigned long version;
  143. unsigned long encode_phys_size;
  144. struct bi_record *bi_recs;
  145. #ifdef DEBUG_YABOOT
  146. yaboot_debug_t *yaboot;
  147. #endif
  148. };
  149. extern struct prom_t prom;
  150. /* Prototypes */
  151. extern void abort(void);
  152. extern unsigned long prom_init(unsigned long, unsigned long, unsigned long,
  153.     unsigned long, unsigned long, yaboot_debug_t *);
  154. extern void prom_print(const char *msg);
  155. extern void relocate_nodes(void);
  156. extern void finish_device_tree(void);
  157. extern struct device_node *find_devices(const char *name);
  158. extern struct device_node *find_type_devices(const char *type);
  159. extern struct device_node *find_path_device(const char *path);
  160. extern struct device_node *find_compatible_devices(const char *type,
  161.    const char *compat);
  162. extern struct device_node *find_pci_device_OFnode(unsigned char bus,
  163. unsigned char dev_fn);
  164. extern struct device_node *find_all_nodes(void);
  165. extern int device_is_compatible(struct device_node *device, const char *);
  166. extern int machine_is_compatible(const char *compat);
  167. extern unsigned char *get_property(struct device_node *node, const char *name,
  168.    int *lenp);
  169. extern void print_properties(struct device_node *node);
  170. extern int prom_n_addr_cells(struct device_node* np);
  171. extern int prom_n_size_cells(struct device_node* np);
  172. extern void prom_get_irq_senses(unsigned char *senses, int off, int max);
  173. #endif /* _PPC64_PROM_H */