~kris/9p

9hist

ref: 8540fff70ac213bcede4cf661cfae2fa5183c777 9hist/pc/devlm78.c -rw-r--r-- 1.3 KiB
8540fff7 — David du Colombier Plan 9 from Bell Labs 1999-07-15 27 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#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,
};