Avoid false detection of SMSC FDC37N972 when Infineon TPM is present
[coreboot.git] / util / nvramtool / cmos_lowlevel.h
index 73634e02c9c1b3f5ccdb93ecd4add6928f219141..264bf85b6629142d09a08ac83eed2c4ef16fd499 100644 (file)
@@ -1,6 +1,5 @@
 /*****************************************************************************\
  * cmos_lowlevel.h
- * $Id$
  *****************************************************************************
  *  Copyright (C) 2002-2005 The Regents of the University of California.
  *  Produced at the Lawrence Livermore National Laboratory.
  *
  *  You should have received a copy of the GNU General Public License along
  *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 \*****************************************************************************/
 
 #ifndef NVRAMTOOL_CMOS_LOWLEVEL_H
 #define NVRAMTOOL_CMOS_LOWLEVEL_H
 
 #include "common.h"
+#include "layout.h"
+
+typedef struct {
+       void (*init)(void* data);
+       unsigned char (*read)(unsigned addr);
+       void (*write)(unsigned addr, unsigned char value);
+       void (*set_iopl)(int level);
+} cmos_access_t;
+
+typedef enum { HAL_CMOS, HAL_MEMORY } hal_t;
+void select_hal(hal_t hal, void *data);
 
 #define CMOS_AREA_OUT_OF_RANGE (CMOS_RESULT_START + 0)
 #define CMOS_AREA_OVERLAPS_RTC (CMOS_RESULT_START + 1)
 #define CMOS_AREA_TOO_WIDE (CMOS_RESULT_START + 2)
 
-unsigned long long cmos_read (unsigned bit, unsigned length);
-void cmos_write (unsigned bit, unsigned length, unsigned long long value);
-unsigned char cmos_read_byte (unsigned index);
-void cmos_write_byte (unsigned index, unsigned char value);
-void cmos_read_all (unsigned char data[]);
-void cmos_write_all (unsigned char data[]);
-void set_iopl (int level);
-int verify_cmos_op (unsigned bit, unsigned length);
+unsigned long long cmos_read(const cmos_entry_t * e);
+void cmos_write(const cmos_entry_t * e, unsigned long long value);
+unsigned char cmos_read_byte(unsigned index);
+void cmos_write_byte(unsigned index, unsigned char value);
+void cmos_read_all(unsigned char data[]);
+void cmos_write_all(unsigned char data[]);
+void set_iopl(int level);
+int verify_cmos_op(unsigned bit, unsigned length, cmos_entry_config_t config);
 
-#define CMOS_SIZE 256  /* size of CMOS memory in bytes */
-#define CMOS_RTC_AREA_SIZE 14  /* first 14 bytes control real time clock */
+#define CMOS_SIZE 256          /* size of CMOS memory in bytes */
+#define CMOS_RTC_AREA_SIZE 14  /* first 14 bytes control real time clock */
 
 /****************************************************************************
  * verify_cmos_byte_index
@@ -56,7 +66,9 @@ int verify_cmos_op (unsigned bit, unsigned length);
  * Return 1 if 'index' does NOT specify a valid CMOS memory location.  Else
  * return 0.
  ****************************************************************************/
-static inline int verify_cmos_byte_index (unsigned index)
- { return (index < CMOS_RTC_AREA_SIZE) || (index >= CMOS_SIZE); }
+static inline int verify_cmos_byte_index(unsigned index)
+{
+       return (index < CMOS_RTC_AREA_SIZE) || (index >= CMOS_SIZE);
+}
 
-#endif  /* NVRAMTOOL_CMOS_LOWLEVEL_H */
+#endif                         /* NVRAMTOOL_CMOS_LOWLEVEL_H */