#include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" #include "../port/error.h" enum { Qdir, Qtemp, }; static Dirtab lm78dir[] = { "temp", { Qtemp, 0 }, 0, 0444, }; SMBus *lm78smbus; extern SMBus* piix4smbus(void); void lm78init(void) { lm78smbus = piix4smbus(); if(lm78smbus != nil) print("found piix4 smbus, base %lud\n", lm78smbus->base); } static Chan* lm78attach(char* spec) { return devattach('T', spec); } int lm78walk(Chan* c, char* name) { return devwalk(c, name, lm78dir, nelem(lm78dir), devgen); } static void lm78stat(Chan* c, char* dp) { devstat(c, dp, lm78dir, nelem(lm78dir), devgen); } static Chan* lm78open(Chan* c, int omode) { return devopen(c, omode, lm78dir, nelem(lm78dir), devgen); } static void lm78close(Chan*) { } enum { Linelen= 25, }; static long lm78read(Chan *c, void *a, long n, vlong offset) { switch(c->qid.path & ~CHDIR){ case Qdir: return devdirread(c, a, n, lm78dir, nelem(lm78dir), devgen); case Qtemp: error(Eperm); } return 0; } static long lm78write(Chan *c, void *a, long n, vlong offset) { error(Eperm); return 0; } Dev lm78devtab = { 'T', "lm78", devreset, lm78init, lm78attach, devclone, lm78walk, lm78stat, lm78open, devcreate, lm78close, lm78read, devbread, lm78write, devbwrite, devremove, devwstat, };