File: [local] / sys / sys / sensors.h (download)
Revision 1.1.1.1 (vendor branch), Tue Mar 4 16:16:13 2008 UTC (16 years, 3 months ago) by nbrk
Branch: OPENBSD_4_2_BASE, MAIN
CVS Tags: jornada-partial-support-wip, HEAD Changes since 1.1: +0 -0 lines
Import of OpenBSD 4.2 release kernel tree with initial code to support
Jornada 720/728, StrongARM 1110-based handheld PC.
At this point kernel roots on NFS and boots into vfs_mountroot() and traps.
What is supported:
- glass console, Jornada framebuffer (jfb) works in 16bpp direct color mode
(needs some palette tweaks for non black/white/blue colors, i think)
- saic, SA11x0 interrupt controller (needs cleanup)
- sacom, SA11x0 UART (supported only as boot console for now)
- SA11x0 GPIO controller fully supported (but can't handle multiple interrupt
handlers on one gpio pin)
- sassp, SSP port on SA11x0 that attaches spibus
- Jornada microcontroller (jmcu) to control kbd, battery, etc throught
the SPI bus (wskbd attaches on jmcu, but not tested)
- tod functions seem work
- initial code for SA-1111 (chip companion) : this is TODO
Next important steps, i think:
- gpio and intc on sa1111
- pcmcia support for sa11x0 (and sa1111 help logic)
- REAL root on nfs when we have PCMCIA support (we may use any of supported pccard NICs)
- root on wd0! (using already supported PCMCIA-ATA)
|
/* $OpenBSD: sensors.h,v 1.24 2007/06/24 05:34:35 dlg Exp $ */
/*
* Copyright (c) 2003, 2004 Alexander Yurchenko <grange@openbsd.org>
* Copyright (c) 2006 Constantine A. Murenin <cnst+openbsd@bugmail.mojo.ru>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _SYS_SENSORS_H_
#define _SYS_SENSORS_H_
/* Sensor types */
enum sensor_type {
SENSOR_TEMP, /* temperature (muK) */
SENSOR_FANRPM, /* fan revolution speed */
SENSOR_VOLTS_DC, /* voltage (muV DC) */
SENSOR_VOLTS_AC, /* voltage (muV AC) */
SENSOR_OHMS, /* resistance */
SENSOR_WATTS, /* power */
SENSOR_AMPS, /* current (muA) */
SENSOR_WATTHOUR, /* power capacity */
SENSOR_AMPHOUR, /* power capacity */
SENSOR_INDICATOR, /* boolean indicator */
SENSOR_INTEGER, /* generic integer value */
SENSOR_PERCENT, /* percent */
SENSOR_LUX, /* illuminance (mulx) */
SENSOR_DRIVE, /* disk */
SENSOR_TIMEDELTA, /* system time error (nSec) */
SENSOR_MAX_TYPES
};
#ifndef _KERNEL
static const char * const sensor_type_s[SENSOR_MAX_TYPES + 1] = {
"temp",
"fan",
"volt",
"acvolt",
"resistance",
"power",
"current",
"watthour",
"amphour",
"indicator",
"raw",
"percent",
"illuminance",
"drive",
"timedelta",
"undefined"
};
#endif /* !_KERNEL */
#define SENSOR_DRIVE_EMPTY 1
#define SENSOR_DRIVE_READY 2
#define SENSOR_DRIVE_POWERUP 3
#define SENSOR_DRIVE_ONLINE 4
#define SENSOR_DRIVE_IDLE 5
#define SENSOR_DRIVE_ACTIVE 6
#define SENSOR_DRIVE_REBUILD 7
#define SENSOR_DRIVE_POWERDOWN 8
#define SENSOR_DRIVE_FAIL 9
#define SENSOR_DRIVE_PFAIL 10
/* Sensor states */
enum sensor_status {
SENSOR_S_UNSPEC, /* status is unspecified */
SENSOR_S_OK, /* status is ok */
SENSOR_S_WARN, /* status is warning */
SENSOR_S_CRIT, /* status is critical */
SENSOR_S_UNKNOWN /* status is unknown */
};
/* Sensor data:
* New fields should be added at the end to encourage backwards compat
*/
struct sensor {
char desc[32]; /* sensor description, may be empty */
struct timeval tv; /* sensor value last change time */
int64_t value; /* current value */
enum sensor_type type; /* sensor type */
enum sensor_status status; /* sensor status */
int numt; /* sensor number of .type type */
int flags; /* sensor flags */
#define SENSOR_FINVALID 0x0001 /* sensor is invalid */
#define SENSOR_FUNKNOWN 0x0002 /* sensor value is unknown */
};
/* Sensor device data:
* New fields should be added at the end to encourage backwards compat
*/
struct sensordev {
int num; /* sensordev number */
char xname[16]; /* unix device name */
int maxnumt[SENSOR_MAX_TYPES];
int sensors_count;
};
#define MAXSENSORDEVICES 32
#ifdef _KERNEL
/* Sensor data */
struct ksensor {
SLIST_ENTRY(ksensor) list; /* device-scope list */
char desc[32]; /* sensor description, may be empty */
struct timeval tv; /* sensor value last change time */
int64_t value; /* current value */
enum sensor_type type; /* sensor type */
enum sensor_status status; /* sensor status */
int numt; /* sensor number of .type type */
int flags; /* sensor flags, ie. SENSOR_FINVALID */
};
SLIST_HEAD(ksensors_head, ksensor);
/* Sensor device data */
struct ksensordev {
SLIST_ENTRY(ksensordev) list;
int num; /* sensordev number */
char xname[16]; /* unix device name */
int maxnumt[SENSOR_MAX_TYPES];
int sensors_count;
struct ksensors_head sensors_list;
};
/* struct ksensordev */
void sensordev_install(struct ksensordev *);
void sensordev_deinstall(struct ksensordev *);
struct ksensordev *sensordev_get(int);
/* struct ksensor */
void sensor_attach(struct ksensordev *, struct ksensor *);
void sensor_detach(struct ksensordev *, struct ksensor *);
struct ksensor *sensor_find(int, enum sensor_type, int);
/* task scheduling */
struct sensor_task;
struct sensor_task *sensor_task_register(void *, void (*)(void *), int);
void sensor_task_unregister(struct sensor_task *);
#endif /* _KERNEL */
#endif /* !_SYS_SENSORS_H_ */