home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-mips / dec / prom.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  5.2 KB  |  175 lines

  1. /*
  2.  *    include/asm-mips/dec/prom.h
  3.  *
  4.  *    DECstation PROM interface.
  5.  *
  6.  *    Copyright (C) 2002  Maciej W. Rozycki
  7.  *
  8.  *    This program is free software; you can redistribute it and/or
  9.  *    modify it under the terms of the GNU General Public License
  10.  *    as published by the Free Software Foundation; either version
  11.  *    2 of the License, or (at your option) any later version.
  12.  *
  13.  *    Based on arch/mips/dec/prom/prom.h by the Anonymous.
  14.  */
  15. #ifndef _ASM_DEC_PROM_H
  16. #define _ASM_DEC_PROM_H
  17.  
  18. #include <linux/types.h>
  19.  
  20. #include <asm/addrspace.h>
  21.  
  22. /*
  23.  * PMAX/3MAX PROM entry points for DS2100/3100's and DS5000/2xx's.
  24.  * Many of these will work for MIPSen as well!
  25.  */
  26. #define VEC_RESET        (u64 *)CKSEG1ADDR(0x1fc00000)
  27.                             /* Prom base address */
  28.  
  29. #define PMAX_PROM_ENTRY(x)    (VEC_RESET + (x))    /* Prom jump table */
  30.  
  31. #define PMAX_PROM_HALT        PMAX_PROM_ENTRY(2)    /* valid on MIPSen */
  32. #define PMAX_PROM_AUTOBOOT    PMAX_PROM_ENTRY(5)    /* valid on MIPSen */
  33. #define PMAX_PROM_OPEN        PMAX_PROM_ENTRY(6)
  34. #define PMAX_PROM_READ        PMAX_PROM_ENTRY(7)
  35. #define PMAX_PROM_CLOSE        PMAX_PROM_ENTRY(10)
  36. #define PMAX_PROM_LSEEK        PMAX_PROM_ENTRY(11)
  37. #define PMAX_PROM_GETCHAR    PMAX_PROM_ENTRY(12)
  38. #define PMAX_PROM_PUTCHAR    PMAX_PROM_ENTRY(13)    /* 12 on MIPSen */
  39. #define PMAX_PROM_GETS        PMAX_PROM_ENTRY(15)
  40. #define PMAX_PROM_PRINTF    PMAX_PROM_ENTRY(17)
  41. #define PMAX_PROM_GETENV    PMAX_PROM_ENTRY(33)    /* valid on MIPSen */
  42.  
  43.  
  44. /*
  45.  * Magic number indicating REX PROM available on DECstation.  Found in
  46.  * register a2 on transfer of control to program from PROM.
  47.  */
  48. #define REX_PROM_MAGIC        0x30464354
  49.  
  50. #ifdef CONFIG_64BIT
  51.  
  52. #define prom_is_rex(magic)    1    /* KN04 and KN05 are REX PROMs.  */
  53.  
  54. #else /* !CONFIG_64BIT */
  55.  
  56. #define prom_is_rex(magic)    ((magic) == REX_PROM_MAGIC)
  57.  
  58. #endif /* !CONFIG_64BIT */
  59.  
  60.  
  61. /*
  62.  * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and
  63.  * DS5000/2x0.
  64.  */
  65. #define REX_PROM_GETBITMAP    0x84/4    /* get mem bitmap */
  66. #define REX_PROM_GETCHAR    0x24/4    /* getch() */
  67. #define REX_PROM_GETENV        0x64/4    /* get env. variable */
  68. #define REX_PROM_GETSYSID    0x80/4    /* get system id */
  69. #define REX_PROM_GETTCINFO    0xa4/4
  70. #define REX_PROM_PRINTF        0x30/4    /* printf() */
  71. #define REX_PROM_SLOTADDR    0x6c/4    /* slotaddr */
  72. #define REX_PROM_BOOTINIT    0x54/4    /* open() */
  73. #define REX_PROM_BOOTREAD    0x58/4    /* read() */
  74. #define REX_PROM_CLEARCACHE    0x7c/4
  75.  
  76.  
  77. /*
  78.  * Used by rex_getbitmap().
  79.  */
  80. typedef struct {
  81.     int pagesize;
  82.     unsigned char bitmap[0];
  83. } memmap;
  84.  
  85.  
  86. /*
  87.  * Function pointers as read from a PROM's callback vector.
  88.  */
  89. extern int (*__rex_bootinit)(void);
  90. extern int (*__rex_bootread)(void);
  91. extern int (*__rex_getbitmap)(memmap *);
  92. extern unsigned long *(*__rex_slot_address)(int);
  93. extern void *(*__rex_gettcinfo)(void);
  94. extern int (*__rex_getsysid)(void);
  95. extern void (*__rex_clear_cache)(void);
  96.  
  97. extern int (*__prom_getchar)(void);
  98. extern char *(*__prom_getenv)(char *);
  99. extern int (*__prom_printf)(char *, ...);
  100.  
  101. extern int (*__pmax_open)(char*, int);
  102. extern int (*__pmax_lseek)(int, long, int);
  103. extern int (*__pmax_read)(int, void *, int);
  104. extern int (*__pmax_close)(int);
  105.  
  106.  
  107. #ifdef CONFIG_64BIT
  108.  
  109. /*
  110.  * On MIPS64 we have to call PROM functions via a helper
  111.  * dispatcher to accomodate ABI incompatibilities.
  112.  */
  113. #define __DEC_PROM_O32(fun, arg) fun arg __asm__(#fun); \
  114.                  __asm__(#fun " = call_o32")
  115.  
  116. int __DEC_PROM_O32(_rex_bootinit, (int (*)(void)));
  117. int __DEC_PROM_O32(_rex_bootread, (int (*)(void)));
  118. int __DEC_PROM_O32(_rex_getbitmap, (int (*)(memmap *), memmap *));
  119. unsigned long *__DEC_PROM_O32(_rex_slot_address,
  120.                  (unsigned long *(*)(int), int));
  121. void *__DEC_PROM_O32(_rex_gettcinfo, (void *(*)(void)));
  122. int __DEC_PROM_O32(_rex_getsysid, (int (*)(void)));
  123. void __DEC_PROM_O32(_rex_clear_cache, (void (*)(void)));
  124.  
  125. int __DEC_PROM_O32(_prom_getchar, (int (*)(void)));
  126. char *__DEC_PROM_O32(_prom_getenv, (char *(*)(char *), char *));
  127. int __DEC_PROM_O32(_prom_printf, (int (*)(char *, ...), char *, ...));
  128.  
  129.  
  130. #define rex_bootinit()        _rex_bootinit(__rex_bootinit)
  131. #define rex_bootread()        _rex_bootread(__rex_bootread)
  132. #define rex_getbitmap(x)    _rex_getbitmap(__rex_getbitmap, x)
  133. #define rex_slot_address(x)    _rex_slot_address(__rex_slot_address, x)
  134. #define rex_gettcinfo()        _rex_gettcinfo(__rex_gettcinfo)
  135. #define rex_getsysid()        _rex_getsysid(__rex_getsysid)
  136. #define rex_clear_cache()    _rex_clear_cache(__rex_clear_cache)
  137.  
  138. #define prom_getchar()        _prom_getchar(__prom_getchar)
  139. #define prom_getenv(x)        _prom_getenv(__prom_getenv, x)
  140. #define prom_printf(x...)    _prom_printf(__prom_printf, x)
  141.  
  142. #else /* !CONFIG_64BIT */
  143.  
  144. /*
  145.  * On plain MIPS we just call PROM functions directly.
  146.  */
  147. #define rex_bootinit        __rex_bootinit
  148. #define rex_bootread        __rex_bootread
  149. #define rex_getbitmap        __rex_getbitmap
  150. #define rex_slot_address    __rex_slot_address
  151. #define rex_gettcinfo        __rex_gettcinfo
  152. #define rex_getsysid        __rex_getsysid
  153. #define rex_clear_cache        __rex_clear_cache
  154.  
  155. #define prom_getchar        __prom_getchar
  156. #define prom_getenv        __prom_getenv
  157. #define prom_printf        __prom_printf
  158.  
  159. #define pmax_open        __pmax_open
  160. #define pmax_lseek        __pmax_lseek
  161. #define pmax_read        __pmax_read
  162. #define pmax_close        __pmax_close
  163.  
  164. #endif /* !CONFIG_64BIT */
  165.  
  166.  
  167. extern void prom_meminit(u32);
  168. extern void prom_identify_arch(u32);
  169. extern void prom_init_cmdline(s32, s32 *, u32);
  170.  
  171. extern void register_prom_console(void);
  172. extern void unregister_prom_console(void);
  173.  
  174. #endif /* _ASM_DEC_PROM_H */
  175.