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-m68k / openprom.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  8.0 KB  |  314 lines

  1. /* $Id: openprom.h,v 1.19 1996/09/25 03:51:08 davem Exp $ */
  2. #ifndef __SPARC_OPENPROM_H
  3. #define __SPARC_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) 1995 David S. Miller (davem@caip.rutgers.edu)
  9.  */
  10.  
  11.  
  12. /* Empirical constants... */
  13. #ifdef CONFIG_SUN3
  14. #define KADB_DEBUGGER_BEGVM     0x0fee0000    /* There is no kadb yet but...*/
  15. #define LINUX_OPPROM_BEGVM      0x0fef0000
  16. #define LINUX_OPPROM_ENDVM      0x0ff10000    /* I think this is right - tm */
  17. #else
  18. #define KADB_DEBUGGER_BEGVM     0xffc00000    /* Where kern debugger is in virt-mem */
  19. #define    LINUX_OPPROM_BEGVM    0xffd00000
  20. #define    LINUX_OPPROM_ENDVM    0xfff00000
  21. #define    LINUX_OPPROM_MAGIC      0x10010407
  22. #endif
  23.  
  24. #ifndef __ASSEMBLY__
  25. /* V0 prom device operations. */
  26. struct linux_dev_v0_funcs {
  27.     int (*v0_devopen)(char *device_str);
  28.     int (*v0_devclose)(int dev_desc);
  29.     int (*v0_rdblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
  30.     int (*v0_wrblkdev)(int dev_desc, int num_blks, int blk_st, char *buf);
  31.     int (*v0_wrnetdev)(int dev_desc, int num_bytes, char *buf);
  32.     int (*v0_rdnetdev)(int dev_desc, int num_bytes, char *buf);
  33.     int (*v0_rdchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
  34.     int (*v0_wrchardev)(int dev_desc, int num_bytes, int dummy, char *buf);
  35.     int (*v0_seekdev)(int dev_desc, long logical_offst, int from);
  36. };
  37.  
  38. /* V2 and later prom device operations. */
  39. struct linux_dev_v2_funcs {
  40.     int (*v2_inst2pkg)(int d);    /* Convert ihandle to phandle */
  41.     char * (*v2_dumb_mem_alloc)(char *va, unsigned sz);
  42.     void (*v2_dumb_mem_free)(char *va, unsigned sz);
  43.  
  44.     /* To map devices into virtual I/O space. */
  45.     char * (*v2_dumb_mmap)(char *virta, int which_io, unsigned paddr, unsigned sz);
  46.     void (*v2_dumb_munmap)(char *virta, unsigned size);
  47.  
  48.     int (*v2_dev_open)(char *devpath);
  49.     void (*v2_dev_close)(int d);
  50.     int (*v2_dev_read)(int d, char *buf, int nbytes);
  51.     int (*v2_dev_write)(int d, char *buf, int nbytes);
  52.     int (*v2_dev_seek)(int d, int hi, int lo);
  53.  
  54.     /* Never issued (multistage load support) */
  55.     void (*v2_wheee2)(void);
  56.     void (*v2_wheee3)(void);
  57. };
  58.  
  59. struct linux_mlist_v0 {
  60.     struct linux_mlist_v0 *theres_more;
  61.     char *start_adr;
  62.     unsigned num_bytes;
  63. };
  64.  
  65. struct linux_mem_v0 {
  66.     struct linux_mlist_v0 **v0_totphys;
  67.     struct linux_mlist_v0 **v0_prommap;
  68.     struct linux_mlist_v0 **v0_available; /* What we can use */
  69. };
  70.  
  71. /* Arguments sent to the kernel from the boot prompt. */
  72. struct linux_arguments_v0 {
  73.     char *argv[8];
  74.     char args[100];
  75.     char boot_dev[2];
  76.     int boot_dev_ctrl;
  77.     int boot_dev_unit;
  78.     int dev_partition;
  79.     char *kernel_file_name;
  80.     void *aieee1;           /* XXX */
  81. };
  82.  
  83. /* V2 and up boot things. */
  84. struct linux_bootargs_v2 {
  85.     char **bootpath;
  86.     char **bootargs;
  87.     int *fd_stdin;
  88.     int *fd_stdout;
  89. };
  90.  
  91. #if defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
  92. struct linux_romvec {
  93.     char        *pv_initsp;
  94.     int        (*pv_startmon)(void);
  95.  
  96.     int        *diagberr;
  97.  
  98.     struct linux_arguments_v0 **pv_v0bootargs;
  99.     unsigned    *pv_sun3mem;
  100.  
  101.     unsigned char    (*pv_getchar)(void);
  102.     int        (*pv_putchar)(int ch);
  103.     int        (*pv_nbgetchar)(void);
  104.     int        (*pv_nbputchar)(int ch);
  105.     unsigned char    *pv_echo;
  106.     unsigned char    *pv_insource;
  107.     unsigned char    *pv_outsink;
  108.  
  109.     int        (*pv_getkey)(void);
  110.     int        (*pv_initgetkey)(void);
  111.     unsigned int    *pv_translation;
  112.     unsigned char    *pv_keybid;
  113.     int        *pv_screen_x;
  114.     int        *pv_screen_y;
  115.     struct keybuf    *pv_keybuf;
  116.  
  117.     char        *pv_monid;
  118.  
  119.     /*
  120.      * Frame buffer output and terminal emulation
  121.      */
  122.  
  123.     int        (*pv_fbwritechar)(char);
  124.     int        *pv_fbaddr;
  125.     char        **pv_font;
  126.     int        (*pv_fbwritestr)(char);
  127.  
  128.     void        (*pv_reboot)(char *bootstr);
  129.  
  130.     /*
  131.      * Line input and parsing
  132.      */
  133.  
  134.     unsigned char    *pv_linebuf;
  135.     unsigned char    **pv_lineptr;
  136.     int        *pv_linesize;
  137.     int        (*pv_getline)(void);
  138.     unsigned char    (*pv_getnextchar)(void);
  139.     unsigned char    (*pv_peeknextchar)(void);
  140.     int        *pv_fbthere;
  141.     int        (*pv_getnum)(void);
  142.  
  143.     void        (*pv_printf)(const char *fmt, ...);
  144.     int        (*pv_printhex)(void);
  145.  
  146.     unsigned char    *pv_leds;
  147.     int        (*pv_setleds)(void);
  148.  
  149.     /*
  150.      * Non-maskable interrupt  (nmi) information
  151.      */
  152.  
  153.     int        (*pv_nmiaddr)(void);
  154.     int        (*pv_abortentry)(void);
  155.     int        *pv_nmiclock;
  156.  
  157.     int        *pv_fbtype;
  158.  
  159.     /*
  160.      * Assorted other things
  161.      */
  162.  
  163.     unsigned    pv_romvers;
  164.     struct globram  *pv_globram;
  165.     char        *pv_kbdzscc;
  166.  
  167.     int        *pv_keyrinit;
  168.     unsigned char    *pv_keyrtick;
  169.     unsigned    *pv_memoryavail;
  170.     long        *pv_resetaddr;
  171.     long        *pv_resetmap;
  172.  
  173.     void        (*pv_halt)(void);
  174.     unsigned char    *pv_memorybitmap;
  175.  
  176. #ifdef CONFIG_SUN3
  177.     void        (*pv_setctxt)(int ctxt, char *va, int pmeg);
  178.     void        (*pv_vector_cmd)(void);
  179.     int        dummy1z;
  180.     int        dummy2z;
  181.     int        dummy3z;
  182.     int        dummy4z;
  183. #endif
  184. };
  185. #else
  186. /* The top level PROM vector. */
  187. struct linux_romvec {
  188.     /* Version numbers. */
  189.     unsigned int pv_magic_cookie;
  190.     unsigned int pv_romvers;
  191.     unsigned int pv_plugin_revision;
  192.     unsigned int pv_printrev;
  193.  
  194.     /* Version 0 memory descriptors. */
  195.     struct linux_mem_v0 pv_v0mem;
  196.  
  197.     /* Node operations. */
  198.     struct linux_nodeops *pv_nodeops;
  199.  
  200.     char **pv_bootstr;
  201.     struct linux_dev_v0_funcs pv_v0devops;
  202.  
  203.     char *pv_stdin;
  204.     char *pv_stdout;
  205. #define    PROMDEV_KBD    0        /* input from keyboard */
  206. #define    PROMDEV_SCREEN    0        /* output to screen */
  207. #define    PROMDEV_TTYA    1        /* in/out to ttya */
  208. #define    PROMDEV_TTYB    2        /* in/out to ttyb */
  209.  
  210.     /* Blocking getchar/putchar.  NOT REENTRANT! (grr) */
  211.     int (*pv_getchar)(void);
  212.     void (*pv_putchar)(int ch);
  213.  
  214.     /* Non-blocking variants. */
  215.     int (*pv_nbgetchar)(void);
  216.     int (*pv_nbputchar)(int ch);
  217.  
  218.     void (*pv_putstr)(char *str, int len);
  219.  
  220.     /* Miscellany. */
  221.     void (*pv_reboot)(char *bootstr);
  222.     void (*pv_printf)(__const__ char *fmt, ...);
  223.     void (*pv_abort)(void);
  224.     __volatile__ int *pv_ticks;
  225.     void (*pv_halt)(void);
  226.     void (**pv_synchook)(void);
  227.  
  228.     /* Evaluate a forth string, not different proto for V0 and V2->up. */
  229.     union {
  230.         void (*v0_eval)(int len, char *str);
  231.         void (*v2_eval)(char *str);
  232.     } pv_fortheval;
  233.  
  234.     struct linux_arguments_v0 **pv_v0bootargs;
  235.  
  236.     /* Get ether address. */
  237.     unsigned int (*pv_enaddr)(int d, char *enaddr);
  238.  
  239.     struct linux_bootargs_v2 pv_v2bootargs;
  240.     struct linux_dev_v2_funcs pv_v2devops;
  241.  
  242.     int filler[15];
  243.  
  244.     /* This one is sun4c/sun4 only. */
  245.     void (*pv_setctxt)(int ctxt, char *va, int pmeg);
  246.  
  247.     /* Prom version 3 Multiprocessor routines. This stuff is crazy.
  248.      * No joke. Calling these when there is only one cpu probably
  249.      * crashes the machine, have to test this. :-)
  250.      */
  251.  
  252.     /* v3_cpustart() will start the cpu 'whichcpu' in mmu-context
  253.      * 'thiscontext' executing at address 'prog_counter'
  254.      */
  255.     int (*v3_cpustart)(unsigned int whichcpu, int ctxtbl_ptr,
  256.                int thiscontext, char *prog_counter);
  257.  
  258.     /* v3_cpustop() will cause cpu 'whichcpu' to stop executing
  259.      * until a resume cpu call is made.
  260.      */
  261.     int (*v3_cpustop)(unsigned int whichcpu);
  262.  
  263.     /* v3_cpuidle() will idle cpu 'whichcpu' until a stop or
  264.      * resume cpu call is made.
  265.      */
  266.     int (*v3_cpuidle)(unsigned int whichcpu);
  267.  
  268.     /* v3_cpuresume() will resume processor 'whichcpu' executing
  269.      * starting with whatever 'pc' and 'npc' were left at the
  270.      * last 'idle' or 'stop' call.
  271.      */
  272.     int (*v3_cpuresume)(unsigned int whichcpu);
  273. };
  274. #endif
  275.  
  276. /* Routines for traversing the prom device tree. */
  277. struct linux_nodeops {
  278.     int (*no_nextnode)(int node);
  279.     int (*no_child)(int node);
  280.     int (*no_proplen)(int node, char *name);
  281.     int (*no_getprop)(int node, char *name, char *val);
  282.     int (*no_setprop)(int node, char *name, char *val, int len);
  283.     char * (*no_nextprop)(int node, char *name);
  284. };
  285.  
  286. /* More fun PROM structures for device probing. */
  287. #define PROMREG_MAX     16
  288. #define PROMVADDR_MAX   16
  289. #define PROMINTR_MAX    15
  290.  
  291. struct linux_prom_registers {
  292.     int which_io;         /* is this in OBIO space? */
  293.     char *phys_addr;      /* The physical address of this register */
  294.     int reg_size;         /* How many bytes does this register take up? */
  295. };
  296.  
  297. struct linux_prom_irqs {
  298.     int pri;    /* IRQ priority */
  299.     int vector; /* This is foobar, what does it do? */
  300. };
  301.  
  302. /* Element of the "ranges" vector */
  303. struct linux_prom_ranges {
  304.     unsigned int ot_child_space;
  305.     unsigned int ot_child_base;        /* Bus feels this */
  306.     unsigned int ot_parent_space;
  307.     unsigned int ot_parent_base;        /* CPU looks from here */
  308.     unsigned int or_size;
  309. };
  310.  
  311. #endif /* !(__ASSEMBLY__) */
  312.  
  313. #endif /* !(__SPARC_OPENPROM_H) */
  314.