2  * SN Platform system controller communication support
 
   4  * This file is subject to the terms and conditions of the GNU General Public
 
   5  * License.  See the file "COPYING" in the main directory of this archive
 
   8  * Copyright (C) 2004-2006 Silicon Graphics, Inc. All rights reserved.
 
  12  * This file contains macros and data types for communication with the
 
  13  * system controllers in SGI SN systems.
 
  19 #include <linux/types.h>
 
  20 #include <linux/spinlock.h>
 
  21 #include <linux/wait.h>
 
  22 #include <linux/kobject.h>
 
  24 #include <linux/cdev.h>
 
  25 #include <asm/sn/types.h>
 
  26 #include <asm/semaphore.h>
 
  30 /* This structure is used to track an open subchannel. */
 
  32         nasid_t sd_nasid;       /* node on which the subchannel was opened */
 
  33         int sd_subch;           /* subchannel number */
 
  34         spinlock_t sd_rlock;    /* monitor lock for rsv */
 
  35         spinlock_t sd_wlock;    /* monitor lock for wsv */
 
  36         wait_queue_head_t sd_rq;        /* wait queue for readers */
 
  37         wait_queue_head_t sd_wq;        /* wait queue for writers */
 
  38         struct semaphore sd_rbs;        /* semaphore for read buffer */
 
  39         struct semaphore sd_wbs;        /* semaphore for write buffer */
 
  41         char sd_rb[CHUNKSIZE];  /* read buffer */
 
  42         char sd_wb[CHUNKSIZE];  /* write buffer */
 
  45 struct sysctl_data_s {
 
  46         struct cdev scd_cdev;   /* Character device info */
 
  47         nasid_t scd_nasid;      /* Node on which subchannels are opened. */
 
  52 #define IR_ARG_INT              0x00    /* 4-byte integer (big-endian)  */
 
  53 #define IR_ARG_ASCII            0x01    /* null-terminated ASCII string */
 
  54 #define IR_ARG_UNKNOWN          0x80    /* unknown data type.  The low
 
  55                                          * 7 bits will contain the data
 
  57 #define IR_ARG_UNKNOWN_LENGTH_MASK      0x7f
 
  60 /* system controller event codes */
 
  61 #define EV_CLASS_MASK           0xf000ul
 
  62 #define EV_SEVERITY_MASK        0x0f00ul
 
  63 #define EV_COMPONENT_MASK       0x00fful
 
  65 #define EV_CLASS_POWER          0x1000ul
 
  66 #define EV_CLASS_FAN            0x2000ul
 
  67 #define EV_CLASS_TEMP           0x3000ul
 
  68 #define EV_CLASS_ENV            0x4000ul
 
  69 #define EV_CLASS_TEST_FAULT     0x5000ul
 
  70 #define EV_CLASS_TEST_WARNING   0x6000ul
 
  71 #define EV_CLASS_PWRD_NOTIFY    0x8000ul
 
  74 #define ENV_PWRDN_PEND          0x4101ul
 
  76 #define EV_SEVERITY_POWER_STABLE        0x0000ul
 
  77 #define EV_SEVERITY_POWER_LOW_WARNING   0x0100ul
 
  78 #define EV_SEVERITY_POWER_HIGH_WARNING  0x0200ul
 
  79 #define EV_SEVERITY_POWER_HIGH_FAULT    0x0300ul
 
  80 #define EV_SEVERITY_POWER_LOW_FAULT     0x0400ul
 
  82 #define EV_SEVERITY_FAN_STABLE          0x0000ul
 
  83 #define EV_SEVERITY_FAN_WARNING         0x0100ul
 
  84 #define EV_SEVERITY_FAN_FAULT           0x0200ul
 
  86 #define EV_SEVERITY_TEMP_STABLE         0x0000ul
 
  87 #define EV_SEVERITY_TEMP_ADVISORY       0x0100ul
 
  88 #define EV_SEVERITY_TEMP_CRITICAL       0x0200ul
 
  89 #define EV_SEVERITY_TEMP_FAULT          0x0300ul
 
  91 void scdrv_event_init(struct sysctl_data_s *);
 
  93 #endif /* _SN_SYSCTL_H_ */