/*****************************************************************************\
* 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
* 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 */