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 / sn / launch.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.4 KB  |  107 lines

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  7.  * Copyright (C) 2000 by Colin Ngam
  8.  */
  9. #ifndef _ASM_SN_LAUNCH_H
  10. #define _ASM_SN_LAUNCH_H
  11.  
  12. #include <asm/sn/types.h>
  13. #include <asm/sn/addrs.h>
  14.  
  15. /*
  16.  * The launch data structure resides at a fixed place in each node's memory
  17.  * and is used to communicate between the master processor and the slave
  18.  * processors.
  19.  *
  20.  * The master stores launch parameters in the launch structure
  21.  * corresponding to a target processor that is in a slave loop, then sends
  22.  * an interrupt to the slave processor.  The slave calls the desired
  23.  * function, then returns to the slave loop.  The master may poll or wait
  24.  * for the slaves to finish.
  25.  *
  26.  * There is an array of launch structures, one per CPU on the node.  One
  27.  * interrupt level is used per local CPU.
  28.  */
  29.  
  30. #define LAUNCH_MAGIC        0xaddbead2addbead3
  31. #ifdef CONFIG_SGI_IP27
  32. #define LAUNCH_SIZEOF        0x100
  33. #define LAUNCH_PADSZ        0xa0
  34. #endif
  35.  
  36. #define LAUNCH_OFF_MAGIC    0x00    /* Struct offsets for assembly      */
  37. #define LAUNCH_OFF_BUSY        0x08
  38. #define LAUNCH_OFF_CALL        0x10
  39. #define LAUNCH_OFF_CALLC    0x18
  40. #define LAUNCH_OFF_CALLPARM    0x20
  41. #define LAUNCH_OFF_STACK    0x28
  42. #define LAUNCH_OFF_GP        0x30
  43. #define LAUNCH_OFF_BEVUTLB    0x38
  44. #define LAUNCH_OFF_BEVNORMAL    0x40
  45. #define LAUNCH_OFF_BEVECC    0x48
  46.  
  47. #define LAUNCH_STATE_DONE    0    /* Return value of LAUNCH_POLL      */
  48. #define LAUNCH_STATE_SENT    1
  49. #define LAUNCH_STATE_RECD    2
  50.  
  51. /*
  52.  * The launch routine is called only if the complement address is correct.
  53.  *
  54.  * Before control is transferred to a routine, the complement address
  55.  * is zeroed (invalidated) to prevent an accidental call from a spurious
  56.  * interrupt.
  57.  *
  58.  * The slave_launch routine turns on the BUSY flag, and the slave loop
  59.  * clears the BUSY flag after control is returned to it.
  60.  */
  61.  
  62. #ifndef __ASSEMBLY__
  63.  
  64. typedef int launch_state_t;
  65. typedef void (*launch_proc_t)(u64 call_parm);
  66.  
  67. typedef struct launch_s {
  68.     volatile u64        magic;    /* Magic number                     */
  69.     volatile u64        busy;    /* Slave currently active           */
  70.     volatile launch_proc_t    call_addr;    /* Func. for slave to call  */
  71.     volatile u64        call_addr_c;    /* 1's complement of call_addr*/
  72.     volatile u64        call_parm;    /* Single parm passed to call*/
  73.     volatile void *stack_addr;    /* Stack pointer for slave function */
  74.     volatile void *gp_addr;        /* Global pointer for slave func.   */
  75.     volatile char         *bevutlb;/* Address of bev utlb ex handler   */
  76.     volatile char         *bevnormal;/*Address of bev normal ex handler */
  77.     volatile char         *bevecc;/* Address of bev cache err handler */
  78.     volatile char        pad[160];    /* Pad to LAUNCH_SIZEOF        */
  79. } launch_t;
  80.  
  81. /*
  82.  * PROM entry points for launch routines are determined by IPxxprom/start.s
  83.  */
  84.  
  85. #define LAUNCH_SLAVE    (*(void (*)(int nasid, int cpu, \
  86.                     launch_proc_t call_addr, \
  87.                     u64 call_parm, \
  88.                     void *stack_addr, \
  89.                     void *gp_addr)) \
  90.              IP27PROM_LAUNCHSLAVE)
  91.  
  92. #define LAUNCH_WAIT    (*(void (*)(int nasid, int cpu, int timeout_msec)) \
  93.              IP27PROM_WAITSLAVE)
  94.  
  95. #define LAUNCH_POLL    (*(launch_state_t (*)(int nasid, int cpu)) \
  96.              IP27PROM_POLLSLAVE)
  97.  
  98. #define LAUNCH_LOOP    (*(void (*)(void)) \
  99.              IP27PROM_SLAVELOOP)
  100.  
  101. #define LAUNCH_FLASH    (*(void (*)(void)) \
  102.              IP27PROM_FLASHLEDS)
  103.  
  104. #endif /* !__ASSEMBLY__ */
  105.  
  106. #endif /* _ASM_SN_LAUNCH_H */
  107.