1 /******************************************************************************
 
   4  * Project:     Gigabit Ethernet Adapters, TWSI-Module
 
   5  * Version:     $Revision: 1.35 $
 
   6  * Date:        $Date: 2003/10/20 09:06:30 $
 
   7  * Purpose:     Defines to access Voltage and Temperature Sensor
 
   9  ******************************************************************************/
 
  11 /******************************************************************************
 
  13  *      (C)Copyright 1998-2002 SysKonnect.
 
  14  *      (C)Copyright 2002-2003 Marvell.
 
  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.
 
  21  *      The information in this file is provided "AS IS" without warranty.
 
  23  ******************************************************************************/
 
  26  * SKI2C.H      contains all I2C specific defines
 
  32 typedef struct  s_Sensor SK_SENSOR;
 
  34 #include "h/skgei2c.h"
 
  37  * Define the I2C events.
 
  39 #define SK_I2CEV_IRQ    1       /* IRQ happened Event */
 
  40 #define SK_I2CEV_TIM    2       /* Timeout event */
 
  41 #define SK_I2CEV_CLEAR  3       /* Clear MIB Values */
 
  44  * Define READ and WRITE Constants.
 
  51 #define SKERR_I2C_E001          (SK_ERRBASE_I2C+0)
 
  52 #define SKERR_I2C_E001MSG       "Sensor index unknown"
 
  53 #define SKERR_I2C_E002          (SKERR_I2C_E001+1)
 
  54 #define SKERR_I2C_E002MSG       "TWSI: transfer does not complete"
 
  55 #define SKERR_I2C_E003          (SKERR_I2C_E002+1)
 
  56 #define SKERR_I2C_E003MSG       "LM80: NAK on device send"
 
  57 #define SKERR_I2C_E004          (SKERR_I2C_E003+1)
 
  58 #define SKERR_I2C_E004MSG       "LM80: NAK on register send"
 
  59 #define SKERR_I2C_E005          (SKERR_I2C_E004+1)
 
  60 #define SKERR_I2C_E005MSG       "LM80: NAK on device (2) send"
 
  61 #define SKERR_I2C_E006          (SKERR_I2C_E005+1)
 
  62 #define SKERR_I2C_E006MSG       "Unknown event"
 
  63 #define SKERR_I2C_E007          (SKERR_I2C_E006+1)
 
  64 #define SKERR_I2C_E007MSG       "LM80 read out of state"
 
  65 #define SKERR_I2C_E008          (SKERR_I2C_E007+1)
 
  66 #define SKERR_I2C_E008MSG       "Unexpected sensor read completed"
 
  67 #define SKERR_I2C_E009          (SKERR_I2C_E008+1)
 
  68 #define SKERR_I2C_E009MSG       "WARNING: temperature sensor out of range"
 
  69 #define SKERR_I2C_E010          (SKERR_I2C_E009+1)
 
  70 #define SKERR_I2C_E010MSG       "WARNING: voltage sensor out of range"
 
  71 #define SKERR_I2C_E011          (SKERR_I2C_E010+1)
 
  72 #define SKERR_I2C_E011MSG       "ERROR: temperature sensor out of range"
 
  73 #define SKERR_I2C_E012          (SKERR_I2C_E011+1)
 
  74 #define SKERR_I2C_E012MSG       "ERROR: voltage sensor out of range"
 
  75 #define SKERR_I2C_E013          (SKERR_I2C_E012+1)
 
  76 #define SKERR_I2C_E013MSG       "ERROR: couldn't init sensor"
 
  77 #define SKERR_I2C_E014          (SKERR_I2C_E013+1)
 
  78 #define SKERR_I2C_E014MSG       "WARNING: fan sensor out of range"
 
  79 #define SKERR_I2C_E015          (SKERR_I2C_E014+1)
 
  80 #define SKERR_I2C_E015MSG       "ERROR: fan sensor out of range"
 
  81 #define SKERR_I2C_E016          (SKERR_I2C_E015+1)
 
  82 #define SKERR_I2C_E016MSG       "TWSI: active transfer does not complete"
 
  85  * Define Timeout values
 
  87 #define SK_I2C_TIM_LONG         2000000L        /* 2 seconds */
 
  88 #define SK_I2C_TIM_SHORT         100000L        /* 100 milliseconds */
 
  89 #define SK_I2C_TIM_WATCH        1000000L        /* 1 second */
 
  92  * Define trap and error log hold times
 
  94 #ifndef SK_SEN_ERR_TR_HOLD
 
  95 #define SK_SEN_ERR_TR_HOLD              (4*SK_TICKS_PER_SEC)
 
  97 #ifndef SK_SEN_ERR_LOG_HOLD
 
  98 #define SK_SEN_ERR_LOG_HOLD             (60*SK_TICKS_PER_SEC)
 
 100 #ifndef SK_SEN_WARN_TR_HOLD
 
 101 #define SK_SEN_WARN_TR_HOLD             (15*SK_TICKS_PER_SEC)
 
 103 #ifndef SK_SEN_WARN_LOG_HOLD
 
 104 #define SK_SEN_WARN_LOG_HOLD    (15*60*SK_TICKS_PER_SEC)
 
 108  * Defines for SenType
 
 110 #define SK_SEN_UNKNOWN  0
 
 111 #define SK_SEN_TEMP             1
 
 112 #define SK_SEN_VOLT             2
 
 116  * Define for the SenErrorFlag
 
 118 #define SK_SEN_ERR_NOT_PRESENT  0       /* Error Flag: Sensor not present */
 
 119 #define SK_SEN_ERR_OK                   1       /* Error Flag: O.K. */
 
 120 #define SK_SEN_ERR_WARN                 2       /* Error Flag: Warning */
 
 121 #define SK_SEN_ERR_ERR                  3       /* Error Flag: Error */
 
 122 #define SK_SEN_ERR_FAULTY               4       /* Error Flag: Faulty */
 
 125  * Define the Sensor struct
 
 128         char    *SenDesc;                       /* Description */
 
 129         int             SenType;                        /* Voltage or Temperature */
 
 130         SK_I32  SenValue;                       /* Current value of the sensor */
 
 131         SK_I32  SenThreErrHigh;         /* High error Threshhold of this sensor */
 
 132         SK_I32  SenThreWarnHigh;        /* High warning Threshhold of this sensor */
 
 133         SK_I32  SenThreErrLow;          /* Lower error Threshold of the sensor */
 
 134         SK_I32  SenThreWarnLow;         /* Lower warning Threshold of the sensor */
 
 135         int             SenErrFlag;                     /* Sensor indicated an error */
 
 136         SK_BOOL SenInit;                        /* Is sensor initialized ? */
 
 137         SK_U64  SenErrCts;                      /* Error trap counter */
 
 138         SK_U64  SenWarnCts;                     /* Warning trap counter */
 
 139         SK_U64  SenBegErrTS;            /* Begin error timestamp */
 
 140         SK_U64  SenBegWarnTS;           /* Begin warning timestamp */
 
 141         SK_U64  SenLastErrTrapTS;       /* Last error trap timestamp */
 
 142         SK_U64  SenLastErrLogTS;        /* Last error log timestamp */
 
 143         SK_U64  SenLastWarnTrapTS;      /* Last warning trap timestamp */
 
 144         SK_U64  SenLastWarnLogTS;       /* Last warning log timestamp */
 
 145         int             SenState;                       /* Sensor State (see HW specific include) */
 
 146         int             (*SenRead)(SK_AC *pAC, SK_IOC IoC, struct s_Sensor *pSen);
 
 147                                                                 /* Sensors read function */
 
 148         SK_U16  SenReg;                         /* Register Address for this sensor */
 
 149         SK_U8   SenDev;                         /* Device Selection for this sensor */
 
 152 typedef struct  s_I2c {
 
 153         SK_SENSOR       SenTable[SK_MAX_SENSORS];       /* Sensor Table */
 
 154         int                     CurrSens;       /* Which sensor is currently queried */
 
 155         int                     MaxSens;        /* Max. number of sensors */
 
 156         int                     TimerMode;      /* Use the timer also to watch the state machine */
 
 157         int                     InitLevel;      /* Initialized Level */
 
 159         int                     DummyReads;     /* Number of non-checked dummy reads */
 
 160         SK_TIMER        SenTimer;       /* Sensors timer */
 
 161 #endif /* !SK_DIAG */
 
 164 extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level);
 
 166 extern  SK_U32 SkI2cRead(SK_AC *pAC, SK_IOC IoC, int Dev, int Size, int Reg,
 
 169 extern int SkI2cEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para);
 
 170 extern void SkI2cWaitIrq(SK_AC *pAC, SK_IOC IoC);
 
 171 extern void SkI2cIsr(SK_AC *pAC, SK_IOC IoC);
 
 172 #endif /* !SK_DIAG */
 
 173 #endif /* n_SKI2C_H */