ski2c.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:9k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /******************************************************************************
  2.  *
  3.  * Name: ski2c.h
  4.  * Project: GEnesis, PCI Gigabit Ethernet Adapter
  5.  * Version: $Revision: 1.30 $
  6.  * Date: $Date: 2001/04/05 11:38:09 $
  7.  * Purpose: Defines to access Voltage and Temperature Sensor
  8.  * (taken from Monalisa (taken from Concentrator))
  9.  *
  10.  ******************************************************************************/
  11. /******************************************************************************
  12.  *
  13.  * (C)Copyright 1998,1999 SysKonnect,
  14.  * a business unit of Schneider & Koch & Co. Datensysteme GmbH.
  15.  *
  16.  * This program is free software; you can redistribute it and/or modify
  17.  * it under the terms of the GNU General Public License as published by
  18.  * the Free Software Foundation; either version 2 of the License, or
  19.  * (at your option) any later version.
  20.  *
  21.  * The information in this file is provided "AS IS" without warranty.
  22.  *
  23.  ******************************************************************************/
  24. /******************************************************************************
  25.  *
  26.  * History:
  27.  *
  28.  * $Log: ski2c.h,v $
  29.  * Revision 1.30  2001/04/05 11:38:09  rassmann
  30.  * Set SenState to idle in SkI2cWaitIrq().
  31.  * Changed error message in SkI2cWaitIrq().
  32.  *
  33.  * Revision 1.29  2000/08/03 14:28:17  rassmann
  34.  * - Added function to wait for I2C being ready before resetting the board.
  35.  * - Replaced one duplicate "out of range" message with correct one.
  36.  *
  37.  * Revision 1.28  1999/11/22 13:55:46  cgoos
  38.  * Changed license header to GPL.
  39.  *
  40.  * Revision 1.27  1999/05/20 09:23:10  cgoos
  41.  * Changes for 1000Base-T (Fan sensors).
  42.  *
  43.  * Revision 1.26  1998/12/01 13:45:47  gklug
  44.  * add: InitLevel to I2c struct
  45.  *
  46.  * Revision 1.25  1998/11/03 06:55:16  gklug
  47.  * add: Dummy Reads to I2c struct
  48.  *
  49.  * Revision 1.24  1998/10/02 14:28:59  cgoos
  50.  * Added prototype for SkI2cIsr.
  51.  *
  52.  * Revision 1.23  1998/09/08 12:20:11  gklug
  53.  * add: prototypes for init and read functions
  54.  *
  55.  * Revision 1.22  1998/09/08 07:37:56  gklug
  56.  * add: log error if PCI_IO voltage sensor could not be initialized
  57.  *
  58.  * Revision 1.21  1998/09/04 08:38:05  malthoff
  59.  * Change the values for I2C_READ and I2C_WRITE
  60.  *
  61.  * Revision 1.20  1998/08/25 07:52:22  gklug
  62.  * chg: Timestamps (last) added for logging
  63.  *
  64.  * Revision 1.19  1998/08/25 06:09:00  gklug
  65.  * rmv: warning and error levels of the individual sensors.
  66.  * add: timing definitions for sending traps and logging errors
  67.  *
  68.  * Revision 1.18  1998/08/20 11:41:15  gklug
  69.  * chg: omit STRCPY macro by using char * as Sensor Description
  70.  *
  71.  * Revision 1.17  1998/08/20 11:37:43  gklug
  72.  * chg: change Ioc to IoC
  73.  *
  74.  * Revision 1.16  1998/08/20 11:30:38  gklug
  75.  * fix: SenRead declaration
  76.  *
  77.  * Revision 1.15  1998/08/20 11:27:53  gklug
  78.  * fix: Compile bugs with new awrning constants
  79.  *
  80.  * Revision 1.14  1998/08/20 08:53:12  gklug
  81.  * fix: compiler errors
  82.  * add: Threshold values
  83.  *
  84.  * Revision 1.13  1998/08/19 12:21:16  gklug
  85.  * fix: remove struct from C files (see CCC)
  86.  * add: typedefs for all structs
  87.  *
  88.  * Revision 1.12  1998/08/19 10:57:41  gklug
  89.  * add: Warning levels
  90.  *
  91.  * Revision 1.11  1998/08/18 08:37:02  malthoff
  92.  * Prototypes not required for SK_DIAG.
  93.  *
  94.  * Revision 1.10  1998/08/17 13:54:00  gklug
  95.  * fix: declaration of event function
  96.  *
  97.  * Revision 1.9  1998/08/17 06:48:39  malthoff
  98.  * Remove some unrequired macros.
  99.  * Fix the compiler errors.
  100.  *
  101.  * Revision 1.8  1998/08/14 06:47:19  gklug
  102.  * fix: Values are intergers
  103.  *
  104.  * Revision 1.7  1998/08/14 06:26:05  gklug
  105.  * add: Init error message
  106.  *
  107.  * Revision 1.6  1998/08/13 08:31:08  gklug
  108.  * add: Error message
  109.  *
  110.  * Revision 1.5  1998/08/12 14:32:04  gklug
  111.  * add: new error code/message
  112.  *
  113.  * Revision 1.4  1998/08/12 13:39:08  gklug
  114.  * chg: names of error messages
  115.  * add: defines for Sensor type and thresholds
  116.  *
  117.  * Revision 1.3  1998/08/11 07:57:16  gklug
  118.  * add: sensor struct
  119.  * add: Timeout defines
  120.  * add: I2C control struct for pAC
  121.  *
  122.  * Revision 1.2  1998/07/17 11:29:02  gklug
  123.  * rmv: Microwire and SMTPANIC
  124.  *
  125.  * Revision 1.1  1998/06/19 14:30:10  malthoff
  126.  * Created. Sources taken from ML Project.
  127.  *
  128.  *
  129.  ******************************************************************************/
  130. /*
  131.  * SKI2C.H contains all I2C specific defines
  132.  */
  133. #ifndef _SKI2C_H_
  134. #define _SKI2C_H_
  135. typedef struct  s_Sensor SK_SENSOR;
  136. #include "h/skgei2c.h"
  137. /*
  138.  * Define the I2c events.
  139.  */
  140. #define SK_I2CEV_IRQ 1 /* IRQ happened Event */
  141. #define SK_I2CEV_TIM 2 /* Timeout event */
  142. #define SK_I2CEV_CLEAR 3 /* Clear Mib Values */
  143. /*
  144.  * Define READ and WRITE Constants.
  145.  */
  146. #define I2C_READ 0
  147. #define I2C_WRITE 1
  148. #define I2C_BURST 1
  149. #define I2C_SIGLE 0
  150. #define SKERR_I2C_E001 (SK_ERRBASE_I2C+0)
  151. #define SKERR_I2C_E001MSG "Sensor index unknown"
  152. #define SKERR_I2C_E002 (SKERR_I2C_E001+1)
  153. #define SKERR_I2C_E002MSG "I2C: transfer does not complete.n"
  154. #define SKERR_I2C_E003 (SKERR_I2C_E002+1)
  155. #define SKERR_I2C_E003MSG "lm80: NAK on device send.n"
  156. #define SKERR_I2C_E004 (SKERR_I2C_E003+1)
  157. #define SKERR_I2C_E004MSG "lm80: NAK on register send.n"
  158. #define SKERR_I2C_E005 (SKERR_I2C_E004+1)
  159. #define SKERR_I2C_E005MSG "lm80: NAK on device (2) send.n"
  160. #define SKERR_I2C_E006 (SKERR_I2C_E005+1)
  161. #define SKERR_I2C_E006MSG "Unknown event"
  162. #define SKERR_I2C_E007 (SKERR_I2C_E006+1)
  163. #define SKERR_I2C_E007MSG "LM80 read out of state"
  164. #define SKERR_I2C_E008 (SKERR_I2C_E007+1)
  165. #define SKERR_I2C_E008MSG "unexpected sensor read completed"
  166. #define SKERR_I2C_E009 (SKERR_I2C_E008+1)
  167. #define SKERR_I2C_E009MSG "WARNING: temperature sensor out of range"
  168. #define SKERR_I2C_E010 (SKERR_I2C_E009+1)
  169. #define SKERR_I2C_E010MSG "WARNING: voltage sensor out of range"
  170. #define SKERR_I2C_E011 (SKERR_I2C_E010+1)
  171. #define SKERR_I2C_E011MSG "ERROR: temperature sensor out of range"
  172. #define SKERR_I2C_E012 (SKERR_I2C_E011+1)
  173. #define SKERR_I2C_E012MSG "ERROR: voltage sensor out of range"
  174. #define SKERR_I2C_E013 (SKERR_I2C_E012+1)
  175. #define SKERR_I2C_E013MSG "ERROR: couldn't init sensor"
  176. #define SKERR_I2C_E014 (SKERR_I2C_E013+1)
  177. #define SKERR_I2C_E014MSG "WARNING: fan sensor out of range"
  178. #define SKERR_I2C_E015 (SKERR_I2C_E014+1)
  179. #define SKERR_I2C_E015MSG "ERROR: fan sensor out of range"
  180. #define SKERR_I2C_E016 (SKERR_I2C_E015+1)
  181. #define SKERR_I2C_E016MSG "I2C: active transfer does not complete.n"
  182. /*
  183.  * Define Timeout values
  184.  */
  185. #define SK_I2C_TIM_LONG 2000000L /* 2 seconds */
  186. #define SK_I2C_TIM_SHORT  100000L /* 100 milliseconds */
  187. /*
  188.  * Define trap and error log hold times
  189.  */
  190. #ifndef SK_SEN_ERR_TR_HOLD
  191. #define SK_SEN_ERR_TR_HOLD (4*SK_TICKS_PER_SEC)
  192. #endif
  193. #ifndef SK_SEN_ERR_LOG_HOLD
  194. #define SK_SEN_ERR_LOG_HOLD (60*SK_TICKS_PER_SEC)
  195. #endif
  196. #ifndef SK_SEN_WARN_TR_HOLD
  197. #define SK_SEN_WARN_TR_HOLD (15*SK_TICKS_PER_SEC)
  198. #endif
  199. #ifndef SK_SEN_WARN_LOG_HOLD
  200. #define SK_SEN_WARN_LOG_HOLD (15*60*SK_TICKS_PER_SEC)
  201. #endif
  202. /*
  203.  * Defines for SenType
  204.  */
  205. #define SK_SEN_TEMP 1
  206. #define SK_SEN_VOLT 2
  207. #define SK_SEN_FAN 3
  208. /*
  209.  * Define for the ErrorFlag
  210.  */
  211. #define SK_SEN_ERR_OK 1 /* Error Flag: O.K. */
  212. #define SK_SEN_ERR_WARN 2 /* Error Flag: Warning */
  213. #define SK_SEN_ERR_ERR 3 /* Error Flag: Error */
  214. /*
  215.  * Define the Sensor struct
  216.  */
  217. struct s_Sensor {
  218. char *SenDesc; /* Description */
  219. int SenType; /* Voltage or Temperature */
  220. SK_I32 SenValue; /* Current value of the sensor */
  221. SK_I32 SenThreErrHigh; /* High error Threshhold of this sensor */
  222. SK_I32 SenThreWarnHigh;/* High warning Threshhold of this sensor */
  223. SK_I32 SenThreErrLow; /* Lower error Threshold of the sensor */
  224. SK_I32 SenThreWarnLow; /* Lower warning Threshold of the sensor */
  225. int SenErrFlag; /* Sensor indicated an error */
  226. SK_BOOL SenInit; /* Is sensor initialized? */
  227. SK_U64 SenErrCts; /* Error  trap counter */
  228. SK_U64 SenWarnCts; /* Warning trap  counter */
  229. SK_U64 SenBegErrTS; /* Begin error timestamp */
  230. SK_U64 SenBegWarnTS; /* Begin warning timestamp */
  231. SK_U64 SenLastErrTrapTS; /* Last error trap timestamp */
  232. SK_U64 SenLastErrLogTS; /* Last error log timestamp */
  233. SK_U64 SenLastWarnTrapTS; /* Last warning trap timestamp */
  234. SK_U64 SenLastWarnLogTS; /* Last warning log timestamp */
  235. int SenState; /* Sensor State (see HW specific include) */
  236. int (*SenRead)(SK_AC *pAC, SK_IOC IoC,struct s_Sensor *pSen) ;
  237. /* Sensors read function */
  238. SK_U16 SenReg; /* Register Address for this sensor */
  239. SK_U8 SenDev; /* DeviceSelection for this sensor */
  240. } ;
  241. typedef struct s_I2c {
  242. SK_SENSOR SenTable[SK_MAX_SENSORS]; /* Sensor Table */
  243. int CurrSens; /* Which sensor is currently queried */
  244. int MaxSens; /* Max. number of sensors */
  245. int InitLevel; /* Initialized Level */
  246. #ifndef SK_DIAG
  247. int DummyReads; /* Number of non-checked dummy reads */
  248. SK_TIMER SenTimer; /* Sensors timer */
  249. #endif /* !SK_DIAG */
  250. } SK_I2C;
  251. extern int SkI2cReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen);
  252. #ifndef SK_DIAG
  253. extern int SkI2cEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
  254. extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level);
  255. extern void SkI2cWaitIrq(SK_AC *pAC, SK_IOC IoC);
  256. extern void SkI2cIsr(SK_AC *pAC, SK_IOC IoC);
  257. #endif
  258. #endif /* n_SKI2C_H */