Added /dev/cputemp to BCM port. It is useful because board is often kept in a box and has no active cooling. Reference: /n/sources/patch/maybe/bcm-cputemp Date: Wed Dec 4 19:34:37 CET 2013 Signed-off-by: krystian.lew@gmail.com --- /sys/src/9/bcm/devarch.c Wed Dec 4 19:33:23 2013 +++ /sys/src/9/bcm/devarch.c Wed Dec 4 19:33:20 2013 @@ -156,8 +156,17 @@ return readstr(offset, a, n, str); } +static long +cputempread(Chan*, void *a, long n, vlong offset) +{ + char str[128]; + snprint(str, sizeof str, "%d±%d\n", gettemp(TempDefault) / 1000, 1); + return readstr(offset, a, n, str); +} + void archinit(void) { addarchfile("cputype", 0444, cputyperead, nil); + addarchfile("cputemp", 0444, cputempread, nil); } --- /sys/src/9/bcm/fns.h Wed Dec 4 19:33:28 2013 +++ /sys/src/9/bcm/fns.h Wed Dec 4 19:33:25 2013 @@ -41,6 +41,7 @@ extern uint getfirmware(void); extern int getpower(int); extern void getramsize(Confmem*); +extern uint gettemp(int); extern u32int ifsrget(void); extern void irqenable(int, void (*)(Ureg*, void*), void*); #define intrenable(i, f, a, b, n) irqenable((i), (f), (a)) --- /sys/src/9/bcm/io.h Wed Dec 4 19:33:32 2013 +++ /sys/src/9/bcm/io.h Wed Dec 4 19:33:30 2013 @@ -42,4 +42,6 @@ ClkSdram, ClkPixel, ClkPwm, + + TempDefault = 0, /* Specification says "id should be 0" */ }; --- /sys/src/9/bcm/vcore.c Wed Dec 4 19:33:37 2013 +++ /sys/src/9/bcm/vcore.c Wed Dec 4 19:33:34 2013 @@ -39,6 +39,7 @@ TagSetpower = 0x00028001, Powerwait = 1<<1, TagGetclkspd= 0x00030002, + TagGettemp = 0x00030006, TagFballoc = 0x00040001, TagFbfree = 0x00048001, TagFbblank = 0x00040002, @@ -288,5 +289,19 @@ buf[0] = clkid; if(vcreq(TagGetclkspd, buf, sizeof(buf[0]), sizeof(buf)) != sizeof buf) return 0; + return buf[1]; +} + +/* +* Get temperature +*/ +uint +gettemp(int tempid) +{ + u32int buf[2]; + buf[0] = tempid; + if(vcreq(TagGettemp, buf, sizeof(buf[0]), sizeof(buf)) != sizeof buf) + return 0; + return buf[1]; }