## diffname pc/pmu.c 1991/1210
## diff -e /dev/null /n/bootesdump/1991/1210/sys/src/9/safari/pmu.c
0a
#include "u.h"
#include "lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
/*
* intel power management unit (i80c51)
*/
enum {
/*
* power management unit ports
*/
Pmudata= 0x198,
Pmucsr= 0x199,
Busy= 0x1,
/*
* configuration port
*/
Pconfig= 0x3F3,
};
/*
* return when pmu ready
*/
static int
pmuready(void)
{
int tries;
for(tries = 0; (inb(Pmucsr) & Busy); tries++)
if(tries > 1000)
return -1;
return 0;
}
/*
* return when pmu busy
*/
static int
pmubusy(void)
{
int tries;
for(tries = 0; !(inb(Pmucsr) & Busy); tries++)
if(tries > 1000)
return -1;
return 0;
}
/*
* set a bit in the PMU
*/
Lock pmulock;
int
pmuwrbit(int index, int bit, int pos)
{
lock(&pmulock);
outb(Pmucsr, 0x02); /* next is command request */
if(pmuready() < 0){
unlock(&pmulock);
return -1;
}
outb(Pmudata, (2<<4) | index); /* send write bit command */
outb(Pmucsr, 0x01); /* send available */
if(pmubusy() < 0){
unlock(&pmulock);
return -1;
}
outb(Pmucsr, 0x01); /* next is data */
if(pmuready() < 0){
unlock(&pmulock);
return -1;
}
outb(Pmudata, (bit<<3) | pos); /* send bit to write */
outb(Pmucsr, 0x01); /* send available */
if(pmubusy() < 0){
unlock(&pmulock);
return -1;
}
unlock(&pmulock);
return 0;
}
/*
* power to serial port
* onoff == 1 means on
* onoff == 0 means off
*/
int
pmuserial(int onoff)
{
return pmuwrbit(1, 1^onoff, 6);
}
/*
* power to modem
* onoff == 1 means on
* onoff == 0 means off
*/
int
pmumodem(int onoff)
{
if(pmuwrbit(1, 1^onoff, 0)<0) /* modem speaker */
return -1;
return pmuwrbit(1, onoff, 5); /* modem power */
}
/*
* set cpu speed
* 0 == low speed
* 1 == high speed
*/
int
pmucpuspeed(int speed)
{
return pmuwrbit(0, speed, 0);
}
/*
* f == frequency in Hz
* d == duration in ms
*/
void
pmubuzz(int f, int d)
{
static QLock bl;
static Rendez br;
qlock(&bl);
pmuwrbit(0, 0, 6);
tsleep(&br, return0, 0, d);
pmuwrbit(0, 1, 6);
qunlock(&bl);
}
/*
* 1 == owl eye
* 2 == mail icon
*/
void
pmulights(int val)
{
pmuwrbit(0, (val&1), 4); /* owl */
pmuwrbit(0, ((val>>1)&1), 1); /* mail */
}
.
## diffname pc/pmu.c 1992/0321
## diff -e /n/bootesdump/1991/1210/sys/src/9/safari/pmu.c /n/bootesdump/1992/0321/sys/src/9/safari/pmu.c
2c
#include "../port/lib.h"
.
## diffname pc/pmu.c 1992/0711
## diff -e /n/bootesdump/1992/0321/sys/src/9/safari/pmu.c /n/bootesdump/1992/0711/sys/src/9/safari/pmu.c
132a
USED(f);
.
## diffname pc/pmu.c 1992/0923 # deleted
## diff -e /n/bootesdump/1992/0808/sys/src/9/safari/pmu.c /n/bootesdump/1992/0923/sys/src/9/pc/pmu.c
1,150d
|