You can subscribe to this list here.
| 2006 |
Jan
|
Feb
(4) |
Mar
(135) |
Apr
(130) |
May
(82) |
Jun
(101) |
Jul
(75) |
Aug
(37) |
Sep
(28) |
Oct
(45) |
Nov
(114) |
Dec
(27) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(22) |
Feb
(60) |
Mar
(81) |
Apr
(120) |
May
(29) |
Jun
(50) |
Jul
(67) |
Aug
(41) |
Sep
(36) |
Oct
(4) |
Nov
(4) |
Dec
|
| 2008 |
Jan
(5) |
Feb
(17) |
Mar
(5) |
Apr
(6) |
May
(5) |
Jun
(9) |
Jul
(5) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Nicolas B. <ni...@bo...> - 2007-04-06 10:39:53
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
I spent my day reverse-engineering AppleSMC.kext driver on Mac OS X
(10.4.8), and here are my conclusions:
- Only a few keys are written on startup. I'm almost sure these keys
are kept as-is after a reboot, none of them seem to have a huge impact
on the power consumption.
- OS X does NOT take control over the fans.
List of keys written by OS X, during boot-up (no keys are written once
the system has booted, except the key corresponding to the keyboard
backlight):
NTOK (0x4e544f4b) - [1-ui8 ] ==> Wrote 0x01
MOLD (0x4d4f4c44) - [1-ui8 ] ==> Wrote 0x14
MOHD (0x4d4f4844) - [1-ui8 ] ==> Wrote 0x14
MOLT (0x4d4f4c54) - [2-sp78] ==> Wrote 0x00 0x60
MOHT (0x4d4f4854) - [2-sp78] ==> Wrote 0x01 0xc0
MOCN (0x4d4f434e) - [2-ui16] ==> Wrote 0x00 0xf8
MOCN (0x4d4f434e) - [2-ui16] ==> Wrote 0x80 0xf8
102: MOCN (0x4d4f434e) - [2-ui16] ==> Wrote 0xe0 0xf8
CLKT (0x434c4b54) - [4-ui32] ==> Wrote 0x00 0x00 0xf4 0xd0 (varies)
CLKL ??? ==> Wrote 0x00 0x00 0x70 0x80
MOCN (0x4d4f434e) - [2-ui16] ==> Wrote 0xe0 0xf8
MSDW (0x4d534457) - [1-flag] ==> Wrote 0x01 (cold boots only)
I also found a way to list all the keys supported by the SMC controller
(with some comments):
0: #KEY (0x234b4559) - [4-ui32] (smcGetKeyCount)
1: +LKS (0x2b4c4b53) - [1-flag]
2: ACID (0x41434944) - [8-ch8*]
3: AL! (0x414c2120) - [1-ui8 ]
4: ALA0 (0x414c4130) - [6-{ala]
5: ALA1 (0x414c4131) - [6-{ala]
6: ALA2 (0x414c4132) - [6-{ala]
7: ALA3 (0x414c4133) - [6-{ala]
8: ALA4 (0x414c4134) - [6-{ala]
9: ALA5 (0x414c4135) - [6-{ala]
10: ALAT (0x414c4154) - [4-{alt]
11: ALI0 (0x414c4930) - [3-{ali]
12: ALI1 (0x414c4931) - [3-{ali]
13: ALSC (0x414c5343) - [16-{alc]
14: ALSF (0x414c5346) - [2-fp1f]
15: ALSL (0x414c534c) - [2-ui16]
16: ALST (0x414c5354) - [2-ui16]
17: ALT0 (0x414c5430) - [4-{alr]
18: ALT1 (0x414c5431) - [4-{alr]
19: ALT2 (0x414c5432) - [4-{alr]
20: ALT3 (0x414c5433) - [4-{alr]
21: ALV0 (0x414c5630) - [6-{alv]
22: ALV1 (0x414c5631) - [6-{alv]
23: B0AC (0x42304143) - [2-si16]
24: B0AV (0x42304156) - [2-ui16]
25: B0BI (0x42304249) - [1-ui8 ]
26: B0LI (0x42304c49) - [2-ui16]
27: B0RI (0x42305249) - [2-ui16]
28: B0St (0x42305374) - [2-ui16]
29: BATP (0x42415450) - [1-flag]
30: BNum (0x424e756d) - [1-ui8 ]
31: BRSC (0x42525343) - [2-ui16]
32: BSDC (0x42534443) - [1-ui8 ]
33: BSIn (0x4253496e) - [1-ui8 ]
34: CLKT (0x434c4b54) - [4-ui32] smcSetTimeCallback ????
35: Dlpc (0x446c7063) - [1-flag]
36: EPCF (0x45504346) - [1-flag]
37: EPCI (0x45504349) - [4-ui32]
38: EPCV (0x45504356) - [2-ui16]
39: EPMA (0x45504d41) - [4-ch8*]
40: EPMI (0x45504d49) - [1-ui8 ]
41: EPUF (0x45505546) - [1-flag]
42: EPUI (0x45505549) - [4-ui32]
43: EPUV (0x45505556) - [2-ui16]
44: EVCT (0x45564354) - [2-ui16]
45: EVMD (0x45564d44) - [4-ui32]
46: EVRD (0x45565244) - [32-ch8*]
47: F0Ac (0x46304163) - [2-fpe2]
48: F0ID (0x46304944) - [16-{fds]
49: F0Mn (0x46304d6e) - [2-fpe2]
50: F0Mx (0x46304d78) - [2-fpe2]
51: F0Sf (0x46305366) - [2-fpe2]
52: F0Tg (0x46305467) - [2-fpe2]
53: F1Ac (0x46314163) - [2-fpe2]
54: F1ID (0x46314944) - [16-{fds]
55: F1Mn (0x46314d6e) - [2-fpe2]
56: F1Mx (0x46314d78) - [2-fpe2]
57: F1Sf (0x46315366) - [2-fpe2]
58: F1Tg (0x46315467) - [2-fpe2]
59: FNum (0x464e756d) - [1-ui8 ]
60: FS! (0x46532120) - [2-ui16]
61: HDBS (0x48444253) - [1-ui8]
62: HDST (0x48445354) - [4-ui16]
63: HDSW (0x48445357) - [4-ui32]
64: IC0C (0x49433043) - [2-fp6a]
65: IC0c (0x49433063) - [2-ui16]
66: ID0R (0x49443052) - [2-fp3d]
67: ID0r (0x49443072) - [2-ui16]
68: IF0R (0x49463052) - [2-fp4c]
69: IF0r (0x49463072) - [2-ui16]
70: IG0C (0x49473043) - [2-fp6a]
71: IG0c (0x49473063) - [2-ui16]
72: IM0R (0x494d3052) - [2-fp6a]
73: IM0r (0x494d3072) - [2-ui16]
74: IN0R (0x494e3052) - [2-fp6a]
75: IN0r (0x494e3072) - [2-ui16]
76: IP0R (0x49503052) - [2-fp4c]
77: IP0r (0x49503072) - [2-ui16]
78: LAcN (0x4c41634e) - [1-ui8 ]
79: LAtN (0x4c41744e) - [2-ui16] variableCommand ???
80: LDSB (0x4c445342) - [2-fp1f]
81: LKSB (0x4c4b5342) - [2-{lkb]
82: LS! (0x4c532120) - [1-ui8 ]
83: LSCF (0x4c534346) - [10-{lsc]
84: LSDD (0x4c534444) - [8-{lsd]
85: LSDU (0x4c534455) - [8-{lsd]
86: LSFD (0x4c534644) - [6-{lsf]
87: LSFU (0x4c534655) - [6-{lsf]
88: LSLB (0x4c534c42) - [2-{pwm]
89: LSLF (0x4c534c46) - [2-{pwm]
90: LSLN (0x4c534c4e) - [2-{pwm]
91: LSOF (0x4c534f46) - [1-flag] smcHandlePEHaltRestart
92: LSOO (0x4c534f4f) - [1-flag]
93: LSPV (0x4c535056) - [2-{pwm]
94: LSRB (0x4c535242) - [1-flag]
95: LSSB (0x4c535342) - [2-{lso] smcHandlePEHaltRestart
96: LSSS (0x4c535353) - [2-{lso] AppleSMC13setPowerState
97: LSUP (0x4c535550) - [1-ui8 ]
98: MACA (0x4d414341) - [4-ui32]
99: MACM (0x4d41434d) - [1-flag]
100: MACR (0x4d414352) - [32-ch8*]
101: MOCF (0x4d4f4346) - [2-ui16] NOPE
102: MOCN (0x4d4f434e) - [2-ui16]
- 80 00 to enable readings
- Interrupts(?) by anding 60 00
103: MOHD (0x4d4f4844) - [1-ui8 ]
- 14 is put there
104: MOHT (0x4d4f4854) - [2-sp78]
- 01 c0 there
105: MOLD (0x4d4f4c44) - [1-ui8 ]
- 14 there
106: MOLT (0x4d4f4c54) - [2-sp78]
- 00 60 there
107: MOST (0x4d4f5354) - [2-ui16]
- Read
108: MO_X (0x4d4f5f58) - [2-sp78]
109: MO_Y (0x4d4f5f59) - [2-sp78]
110: MO_Z (0x4d4f5f5a) - [2-sp78]
111: MSAL (0x4d53414c) - [1-si8 ]
112: MSBC (0x4d534243) - [2-ui16]
113: MSBP (0x4d534250) - [2-ui16]
114: MSBc (0x4d534263) - [2-ui16]
115: MSBp (0x4d534270) - [2-ui16]
116: MSC0 (0x4d534330) - [2-ui16]
117: MSC1 (0x4d534331) - [2-ui16]
118: MSC2 (0x4d534332) - [2-ui16]
119: MSC3 (0x4d534333) - [2-ui16]
120: MSCP (0x4d534350) - [2-ui16]
121: MSCR (0x4d534352) - [1-ui18]
122: MSCS (0x4d534353) - [1-ui8 ]
123: MSCT (0x4d534354) - [1-ui8 ]
124: MSCa (0x4d534361) - [2-ui16]
125: MSCb (0x4d534362) - [2-ui16]
126: MSCc (0x4d534363) - [2-ui16]
127: MSCd (0x4d534364) - [2-ui16]
128: MSCl (0x4d53436c) - [2-ui16]
129: MSCm (0x4d53436d) - [2-ui16]
130: MSCn (0x4d53436e) - [2-ui16]
131: MSCo (0x4d53436f) - [2-ui16]
132: MSDW (0x4d534457) - [1-flag] AppleSMC13setPowerState
AppleSMC27smcPowerStateChangeCallback
133: MSLD (0x4d534c44) - [1-ui8 ]
134: MSPA (0x4d535041) - [1-ui8 ]
135: MSPB (0x4d535042) - [1-ui8 ]
136: MSPH (0x4d535048) - [2-ui8 ]
137: MSPS (0x4d535053) - [1-{msp]
138: MSSD (0x4d535344) - [1-si8 ] AppleSMC23smcPublishShutdownCause
139: MSSS (0x4d535353) - [1-{mss]
140: MSTM (0x4d53544d) - [1-ui8 ]
141: MSTc (0x4d535463) - [1-ui8 ]
142: MSTg (0x4d535467) - [1-ui8 ]
143: MSTm (0x4d53546d) - [1-ui8 ]
144: MSWR (0x4d535752) - [1-ui8 ]
145: NTOK (0x4e544f4b) - [1-ui8 ] AppleSMC5startEP9IOService
AppleSMC13setPowerState
146: ONMI (0x4f4e4d49) - [1-ui8 ]
147: OSK0 (0x4f534b30) - [32-ch8*]
148: OSK1 (0x4f534b31) - [32-ch8*]
149: PC0C (0x50433043) - [2-fp88]
150: PD0R (0x50443052) - [2-fp88]
151: PF0R (0x50463052) - [2-fp88]
152: PG0C (0x50473043) - [2-fp88]
153: PM0R (0x504d3052) - [2-fp88]
154: PN0R (0x504e3052) - [2-fp88]
155: PP0R (0x50503052) - [2-fp88]
156: RBr (0x52427220) - [8-ch8*]
157: REV (0x52455620) - [6-{rev] AppleSMC10smcGetVersEP10SMCVersion
158: RMde (0x524d6465) - [1-byte]
159: RPlt (0x52506c74) - [8-ch8*]
160: RSvn (0x5253766e) - [4-ui32]
161: RVBF (0x52564246) - [6-{rev]
162: RVUF (0x52565546) - [6-{rev]
163: SAS! (0x53415321) - [4-ui32]
164: SDRd (0x53445264) - [2-ui16]
165: SIS! (0x53495321) - [2-ui16]
166: SM0x (0x534d3078) - [2-ui16]
167: SM0y (0x534d3079) - [2-ui16]
168: SM0z (0x534d307a) - [2-ui16]
169: SPHT (0x53504854) - [1-ui8 ]
170: SPS! (0x53505321) - [2-ui16]
171: TA0P (0x54413050) - [2-sp78]
172: TB0T (0x54423054) - [2-sp78]
173: TC0D (0x54433044) - [2-sp78]
174: TC0P (0x54433050) - [2-sp78]
175: TG0H (0x54473048) - [2-sp78]
176: TG0P (0x54473050) - [2-sp78]
177: TG0T (0x54473054) - [2-sp78]
178: Th0H (0x54683048) - [2-sp78]
179: Th1H (0x54683148) - [2-sp78]
180: Tm0P (0x546d3050) - [2-sp78]
181: Ts0P (0x54733050) - [2-sp78]
182: Ts1P (0x54733150) - [2-sp78]
183: VC0C (0x56433043) - [2-fp2e]
184: VC0c (0x56433063) - [2-ui16]
185: VG0C (0x56473043) - [2-fp2e]
186: VG0c (0x56473063) - [2-ui16]
187: VP0R (0x56503052) - [2-fp4c]
188: VP0r (0x56503072) - [2-ui16]
189: iC0C (0x69433043) - [2-ui16]
190: iC0c (0x69433063) - [2-ui16]
191: iD0R (0x69443052) - [2-ui16]
192: iD0r (0x69443072) - [2-ui16]
193: iF0R (0x69463052) - [2-ui16]
194: iF0r (0x69463072) - [2-ui16]
195: iG0C (0x69473043) - [2-ui16]
196: iG0c (0x69473063) - [2-ui16]
197: iM0R (0x694d3052) - [2-ui16]
198: iM0r (0x694d3072) - [2-ui16]
199: iN0R (0x694e3052) - [2-ui16]
200: iN0r (0x694e3072) - [2-ui16]
201: iP0R (0x69503052) - [2-ui16]
202: iP0r (0x69503072) - [2-ui16]
203: pC0C (0x70433043) - [2-{sds]
204: pD0R (0x70443052) - [2-{sds]
205: pF0R (0x70463052) - [2-{sds]
206: pG0C (0x70473043) - [2-{sds]
207: pM0R (0x704d3052) - [2-{sds]
208: pN0R (0x704e3052) - [2-{sds]
209: pP0R (0x70503052) - [2-{sds]
210: tA0P (0x74413050) - [2-{sds]
211: tB0T (0x74423054) - [2-{sds]
212: tC0D (0x74433044) - [2-{sds]
213: tC0P (0x74433050) - [2-{sds]
214: tG0H (0x74473048) - [2-{sds]
215: tG0P (0x74473050) - [2-{sds]
216: tG0T (0x74473054) - [2-{sds]
217: th0H (0x74683048) - [2-{sds]
218: th1H (0x74683148) - [2-{sds]
219: tm0P (0x746d3050) - [2-{sds]
220: ts0P (0x74733050) - [2-{sds]
221: ts1P (0x74733150) - [2-{sds]
222: vC0C (0x76433043) - [2-{sds]
223: vC0c (0x76433063) - [2-{sds]
224: vG0C (0x76473043) - [2-{sds]
225: vG0c (0x76473063) - [2-{sds]
226: vP0R (0x76503052) - [2-{sds]
227: vP0r (0x76503072) - [2-{sds]
228: {ala (0x7b616c61) - [3-]
229: {alc (0x7b616c63) - [3-]
230: {ali (0x7b616c69) - [3-]
231: {alr (0x7b616c72) - [3-]
232: {alt (0x7b616c74) - [3-]
233: {alv (0x7b616c76) - [3-]
234: {fds (0x7b666473) - [3-]
235: {lkb (0x7b6c6b62) - [3-]
236: {lsc (0x7b6c7363) - [3-]
237: {lsd (0x7b6c7364) - [3-]
238: {lsf (0x7b6c7366) - [3-]
239: {lsm (0x7b6c736d) - [3-]
240: {lso (0x7b6c736f) - [3-]
241: {lss (0x7b6c7373) - [3-]
242: {msp (0x7b6d7370) - [3-]
243: {mss (0x7b6d7373) - [3-]
244: {pwm (0x7b70776d) - [3-]
245: {rev (0x7b726576) - [3-]
246: {sds (0x7b736473) - [3-]
I still have to find out how to catch motion sensor interrupts, but, as
long as it concerns heat problems, the solution has to be found
somewhere else...
Best regards,
Nicolas
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGFiNh01ajQnpJXgERAoipAJsFM2dN9nnKBStoxdQXCzdziHuECgCeMi/L
EQ3oPK01yRFLJTHnaN3QtYM=
=2Dor
-----END PGP SIGNATURE-----
|
|
From: <hu...@us...> - 2007-04-06 00:11:27
|
Revision: 99
http://svn.sourceforge.net/mactel-linux/?rev=99&view=rev
Author: huceke
Date: 2007-04-05 17:11:26 -0700 (Thu, 05 Apr 2007)
Log Message:
-----------
Todo update
Modified Paths:
--------------
trunk/mach_linux_boot/TODO
Modified: trunk/mach_linux_boot/TODO
===================================================================
--- trunk/mach_linux_boot/TODO 2007-04-05 23:45:29 UTC (rev 98)
+++ trunk/mach_linux_boot/TODO 2007-04-06 00:11:26 UTC (rev 99)
@@ -1,3 +1,4 @@
Codecleanup.
Do Some magic to make a compile on Linux boxes.
Get kernel correct working with EFI
+USB have some strange behavior
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hu...@us...> - 2007-04-05 23:45:32
|
Revision: 98
http://svn.sourceforge.net/mactel-linux/?rev=98&view=rev
Author: huceke
Date: 2007-04-05 16:45:29 -0700 (Thu, 05 Apr 2007)
Log Message:
-----------
mach_linux the linux loader for the AppleTV
Added Paths:
-----------
trunk/mach_linux_boot/
trunk/mach_linux_boot/BootVideoHelpers.c
trunk/mach_linux_boot/COPYING
trunk/mach_linux_boot/Makefile
trunk/mach_linux_boot/README
trunk/mach_linux_boot/TODO
trunk/mach_linux_boot/bzimage.h
trunk/mach_linux_boot/check_header.c
trunk/mach_linux_boot/copy.sh
trunk/mach_linux_boot/fontx16.h
trunk/mach_linux_boot/gen_header.c
trunk/mach_linux_boot/kernel/
trunk/mach_linux_boot/kernel/2.6.20.4-appletv.patch
trunk/mach_linux_boot/kernel/config-2.6.20-appletv
trunk/mach_linux_boot/loader_init.c
trunk/mach_linux_boot/sha1.c
trunk/mach_linux_boot/sha1.h
trunk/mach_linux_boot/start.s
trunk/mach_linux_boot/sysdeps.h
trunk/mach_linux_boot/system.c
trunk/mach_linux_boot/types.h
trunk/mach_linux_boot/vsprintf.c
Added: trunk/mach_linux_boot/BootVideoHelpers.c
===================================================================
--- trunk/mach_linux_boot/BootVideoHelpers.c (rev 0)
+++ trunk/mach_linux_boot/BootVideoHelpers.c 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,221 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+// 2002-09-10 ag...@wa... created
+
+// These are helper functions for displaying bitmap video
+// includes an antialiased (4bpp) proportional bitmap font (n x 16 pixel)
+
+
+#include "types.h"
+#include "sysdeps.h"
+#include "fontx16.h" // brings in font struct
+#include <stdarg.h>
+#define WIDTH_SPACE_PIXELS 5
+
+// returns number of x pixels taken up by ascii character bCharacter
+
+unsigned int BootVideoGetCharacterWidth(u8 bCharacter, bool fDouble)
+{
+ unsigned int nStart, nWidth;
+ int nSpace=WIDTH_SPACE_PIXELS;
+
+ if(fDouble) nSpace=8;
+
+ // we only have glyphs for 0x21 through 0x7e inclusive
+
+ if(bCharacter<0x21) return nSpace;
+ if(bCharacter>0x7e) return nSpace;
+
+ nStart=waStarts[bCharacter-0x21];
+ nWidth=waStarts[bCharacter-0x20]-nStart;
+
+ if(fDouble) return nWidth<<1; else return nWidth;
+}
+
+// returns number of x pixels taken up by string
+
+unsigned int BootVideoGetStringTotalWidth(const char * szc) {
+ unsigned int nWidth=0;
+ bool fDouble=false;
+ while(*szc) {
+ if(*szc=='\2') {
+ fDouble=!fDouble;
+ szc++;
+ } else {
+ nWidth+=BootVideoGetCharacterWidth(*szc++, fDouble);
+ }
+ }
+ return nWidth;
+}
+
+// convert pixel count to size of memory in bytes required to hold it, given the character height
+
+// usable for direct write or for prebuffered write
+// returns width of character in pixels
+// RGBA .. full-on RED is opaque --> 0xFF0000FF <-- red
+
+int BootVideoOverlayCharacter(
+ u32 * pdwaTopLeftDestination,
+ u32 m_dwCountBytesPerLineDestination,
+ RGBA rgbaColourAndOpaqueness,
+ u8 bCharacter,
+ bool fDouble
+) {
+ int nSpace;
+ unsigned int n, nStart, nWidth, y, nHeight
+// nOpaquenessMultiplied,
+// nTransparentnessMultiplied
+ ;
+ u8 b=0, b1; // *pbColour=(u8 *)&rgbaColourAndOpaqueness;
+ u8 * pbaDestStart;
+
+ // we only have glyphs for 0x21 through 0x7e inclusive
+
+ if(bCharacter=='\t') {
+ u32 dw=((u32)pdwaTopLeftDestination) % m_dwCountBytesPerLineDestination;
+ u32 dw1=((dw+1)%(32<<2)); // distance from previous boundary
+ return ((32<<2)-dw1)>>2;
+ }
+ nSpace=WIDTH_SPACE_PIXELS;
+ if(fDouble) nSpace=8;
+ if(bCharacter<'!') return nSpace;
+ if(bCharacter>'~') return nSpace;
+
+ nStart=waStarts[bCharacter-(' '+1)];
+ nWidth=waStarts[bCharacter-' ']-nStart;
+ nHeight=uiPixelsY;
+
+ if(fDouble) { nWidth<<=1; nHeight<<=1; }
+
+// nStart=0;
+// nWidth=300;
+
+ pbaDestStart=((u8 *)pdwaTopLeftDestination);
+
+ for(y=0;y<nHeight;y++) {
+ u8 * pbaDest=pbaDestStart;
+ int n1=nStart;
+
+ for(n=0;n<nWidth;n++) {
+ b=baCharset[n1>>1];
+ if(!(n1&1)) {
+ b1=b>>4;
+ } else {
+ b1=b&0x0f;
+ }
+ if(fDouble) {
+ if(n & 1) n1++;
+ } else {
+ n1++;
+ }
+
+ if(b1) {
+ *pbaDest=(u8)((b1*(rgbaColourAndOpaqueness&0xff))>>4); pbaDest++;
+ *pbaDest=(u8)((b1*((rgbaColourAndOpaqueness>>8)&0xff))>>4); pbaDest++;
+ *pbaDest=(u8)((b1*((rgbaColourAndOpaqueness>>16)&0xff))>>4); pbaDest++;
+ *pbaDest++=0xff;
+ } else {
+ pbaDest+=4;
+ }
+ }
+ if(fDouble) {
+ if(y&1) nStart+=uiPixelsX;
+ } else {
+ nStart+=uiPixelsX;
+ }
+ pbaDestStart+=m_dwCountBytesPerLineDestination;
+ }
+
+ return nWidth;
+}
+
+// usable for direct write or for prebuffered write
+// returns width of string in pixels
+
+int BootVideoOverlayString(u32 * pdwaTopLeftDestination, u32 m_dwCountBytesPerLineDestination, RGBA rgbaOpaqueness, const char * szString)
+{
+ unsigned int uiWidth=0;
+ bool fDouble=0;
+ while((*szString != 0) && (*szString != '\n')) {
+ if(*szString=='\2') {
+ fDouble=!fDouble;
+ } else {
+ uiWidth+=BootVideoOverlayCharacter(
+ pdwaTopLeftDestination+uiWidth, m_dwCountBytesPerLineDestination, rgbaOpaqueness, *szString, fDouble
+ );
+ }
+ szString++;
+ }
+ return uiWidth;
+}
+
+void BootVideoChunkedPrint(const char * szBuffer) {
+ int n=0;
+ int nDone=0;
+
+ while (szBuffer[n] != 0)
+ {
+ if(szBuffer[n]=='\n') {
+ BootVideoOverlayString(
+ (u32 *)((bootparms->video.addr) + VIDEO_CURSOR_POSY * (vmode.width*4) + VIDEO_CURSOR_POSX),
+ vmode.width*4, VIDEO_ATTR, &szBuffer[nDone]
+ );
+ nDone=n+1;
+ VIDEO_CURSOR_POSY+=16;
+ VIDEO_CURSOR_POSX=vmode.xmargin<<2;
+ }
+ n++;
+ }
+ if (n != nDone)
+ {
+ VIDEO_CURSOR_POSX+=BootVideoOverlayString(
+ (u32 *)((bootparms->video.addr) + VIDEO_CURSOR_POSY * (vmode.width*4) + VIDEO_CURSOR_POSX),
+ vmode.width*4, VIDEO_ATTR, &szBuffer[nDone]
+ )<<2;
+ if (VIDEO_CURSOR_POSX > (vmode.width -
+ vmode.xmargin) <<2)
+ {
+ VIDEO_CURSOR_POSY+=16;
+ VIDEO_CURSOR_POSX=vmode.xmargin<<2;
+ }
+
+ }
+
+}
+
+int printk(const char *szFormat, ...) { // printk displays to video
+ char szBuffer[512*2];
+ u16 wLength=0;
+ va_list argList;
+ va_start(argList, szFormat);
+ wLength=(u16) vsprintf(szBuffer, szFormat, argList);
+ va_end(argList);
+
+ szBuffer[sizeof(szBuffer)-1]=0;
+ if (wLength>(sizeof(szBuffer)-1)) wLength = sizeof(szBuffer)-1;
+ szBuffer[wLength]='\0';
+
+ BootVideoChunkedPrint(szBuffer);
+ return wLength;
+}
+
+int console_putchar(int c)
+{
+ char buf[2];
+ buf[0] = (char)c;
+ buf[1] = 0;
+ BootVideoChunkedPrint(buf);
+ return (int)buf[0];
+}
+
+int putchar(int c)
+{
+ return console_putchar(c);
+}
Added: trunk/mach_linux_boot/COPYING
===================================================================
--- trunk/mach_linux_boot/COPYING (rev 0)
+++ trunk/mach_linux_boot/COPYING 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Added: trunk/mach_linux_boot/Makefile
===================================================================
--- trunk/mach_linux_boot/Makefile (rev 0)
+++ trunk/mach_linux_boot/Makefile 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,21 @@
+.PHONY: inject_kernel gen_header
+ARCH=i386
+OBJ=start.o loader_init.o vsprintf.o BootVideoHelpers.o sha1.o system.o
+
+test: clean gen_header $(OBJ)
+ ld -arch $(ARCH) -o mach_kernel $(OBJ) -image_base 0xB000000
+
+%.o: %.c
+ gcc -c -arch $(ARCH) -nostdlib -o $@ -c $<
+
+%.o: %.s
+ gcc -c -arch $(ARCH) -nostdlib -DASSEMBLER -o $@ -c $<
+
+clean:
+ rm -f *.o mach_kernel gen_header check_header
+
+gen_header:
+ gcc -o gen_header gen_header.c sha1.c
+ ./gen_header
+# gcc -o check_header check_header.c sha1.c
+# ./check_header
Added: trunk/mach_linux_boot/README
===================================================================
--- trunk/mach_linux_boot/README (rev 0)
+++ trunk/mach_linux_boot/README 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,26 @@
+What is this ?
+
+Mach Linux is a bootloader for AppleTV. The information
+how to boot the kernel was taken from the gnu-efi and elilo
+project. The video and hasching funtions where taken from
+cromwell, a bios replacement for the xbox1.
+
+Installation :
+
+You must compile the loader on a intel based mac.
+For building you need a patched linux kernel "bzImage"
+in the folder of the loader source. A first kernel
+patch and kernel config is included in kernel.
+
+Copy the resulting binary to your AppleTV HDD.
+
+For boot params edit the file com.apple.Boot.plist like :
+
+ <key>Kernel Flags</key>
+ <string>root=/dev/sda3</string>
+
+
+
+Happy penguin
+
+Edgar (gimli) Hucek
Added: trunk/mach_linux_boot/TODO
===================================================================
--- trunk/mach_linux_boot/TODO (rev 0)
+++ trunk/mach_linux_boot/TODO 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,3 @@
+Codecleanup.
+Do Some magic to make a compile on Linux boxes.
+Get kernel correct working with EFI
Added: trunk/mach_linux_boot/bzimage.h
===================================================================
--- trunk/mach_linux_boot/bzimage.h (rev 0)
+++ trunk/mach_linux_boot/bzimage.h 2007-04-05 23:45:29 UTC (rev 98)
@@ -0,0 +1,73448 @@
+#ifndef _BZIMAGE_
+#define _BZIMAGE_
+
+
+long lKernel = 1468720;
+unsigned char szKernel[] = {
+
+0x66, 0xEA, 0x08, 0x00, 0x00, 0x00, 0xC0, 0x07, 0x8C, 0xC8, 0x8E, 0xD8, 0x8E, 0xC0, 0x8E, 0xD0, 0xBC, 0x00, 0x7C, 0xFB,
+0xFC, 0xBE, 0x31, 0x00, 0xAC, 0x20, 0xC0, 0x74, 0x09, 0xB4, 0x0E, 0xBB, 0x07, 0x00, 0xCD, 0x10, 0xEB, 0xF2, 0x31, 0xC0,
+0xCD, 0x16, 0xCD, 0x19, 0xEA, 0xF0, 0xFF, 0x00, 0xF0, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x62, 0x6F, 0x6F, 0x74,
+0x69, 0x6E, 0x67, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x70, 0x70, 0x79, 0x20, 0x69, 0x73, 0x20, 0x6E,
+0x6F, 0x20, 0x6C, 0x6F, 0x6E, 0x67, 0x65, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6F, 0x72, 0x74, 0x65, 0x64, 0x2E, 0x0D,
+0x0A, 0x50, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, 0x6C,
+0x6F, 0x61, 0x64, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x20, 0x69, 0x6E, 0x73, 0x74, 0x65, 0x61,
+0x64, 0x2E, 0x0D, 0x0A, 0x0A, 0x52, 0x65, 0x6D, 0x6F, 0x76, 0x65, 0x20, 0x64, 0x69, 0x73, 0x6B, 0x20, 0x61, 0x6E, 0x64,
+0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x72, 0x65,
+0x62, 0x6F, 0x6F, 0x74, 0x20, 0x2E, 0x20, 0x2E, 0x20, 0x2E, 0x0D, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x00,
+0xB3, 0x64, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x55, 0xAA, 0xEB, 0x36, 0x48, 0x64, 0x72, 0x53, 0x05, 0x02,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xC2, 0x10, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F,
+0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC5, 0x0C, 0x90, 0x8D, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xB8, 0x00, 0x15, 0xB2, 0x81, 0xCD, 0x13, 0x8C, 0xC8, 0x8E, 0xD8, 0x81, 0x3E, 0xF3, 0x1A, 0x55, 0xAA, 0x75, 0x4C, 0x81,
+0x3E, 0xF5, 0x1A, 0x5A, 0x5A, 0x75, 0x44, 0xEB, 0x40, 0xAC, 0x20, 0xC0, 0x74, 0x05, 0xE8, 0x08, 0x00, 0xEB, 0xF6, 0xC3,
+0xE8, 0x00, 0x00, 0xB0, 0x20, 0x50, 0x51, 0xBB, 0x07, 0x00, 0xB9, 0x01, 0x00, 0xB4, 0x0E, 0xCD, 0x10, 0x59, 0x58, 0xC3,
+0xB0, 0x07, 0xEB, 0xED, 0x4E, 0x6F, 0x20, 0x73, 0x65, 0x74, 0x75, 0x70, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x74, 0x75,
+0x72, 0x65, 0x20, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x20, 0x2E, 0x2E, 0x2E, 0x00, 0xEB, 0x4F, 0x8C, 0xC8, 0x83, 0xE8, 0x20,
+0x8E, 0xD8, 0x30, 0xFF, 0x8A, 0x1E, 0xF1, 0x01, 0x83, 0xEB, 0x04, 0xC1, 0xE3, 0x08, 0x89, 0xD9, 0xC1, 0xEB, 0x03, 0x81,
+0xC3, 0x00, 0x10, 0x2E, 0x89, 0x1E, 0x0C, 0x00, 0xBF, 0x00, 0x08, 0x29, 0xF6, 0x0E, 0x07, 0xB8, 0x00, 0x10, 0x8E, 0xD8,
+0xF3, 0xA5, 0x8C, 0xC8, 0x8E, 0xD8, 0x81, 0x3E, 0xF3, 0x1A, 0x55, 0xAA, 0x75, 0x0A, 0x81, 0x3E, 0xF5, 0x1A, 0x5A, 0x5A,
+0x75, 0x02, 0xEB, 0x0A, 0x8D, 0x36, 0x40, 0x0D, 0xE8, 0x72, 0xFF, 0xF4, 0xEB, 0xFD, 0x8C, 0xC8, 0x83, 0xE8, 0x20, 0x8E,
+0xD8, 0x2E, 0xF6, 0x06, 0x11, 0x00, 0x01, 0x74, 0x2E, 0x2E, 0x80, 0x3E, 0x10, 0x00, 0x00, 0x75, 0x26, 0x0E, 0x1F, 0x8D,
+0x36, 0xD0, 0x0D, 0xE8, 0x4F, 0xFF, 0xEB, 0xDB, 0x57, 0x72, 0x6F, 0x6E, 0x67, 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x65, 0x72,
+0x2C, 0x20, 0x67, 0x69, 0x76, 0x69, 0x6E, 0x67, 0x20, 0x75, 0x70, 0x2E, 0x2E, 0x2E, 0x00, 0x66, 0x31, 0xC0, 0x66, 0xA3,
+0xE0, 0x01, 0xA2, 0xE8, 0x01, 0x66, 0x31, 0xDB, 0xBF, 0xD0, 0x02, 0x66, 0xB8, 0x20, 0xE8, 0x00, 0x00, 0x66, 0xBA, 0x50,
+0x41, 0x4D, 0x53, 0x66, 0xB9, 0x14, 0x00, 0x00, 0x00, 0x1E, 0x07, 0xCD, 0x15, 0x72, 0x20, 0x66, 0x3D, 0x50, 0x41, 0x4D,
+0x53, 0x75, 0x18, 0xA0, 0xE8, 0x01, 0x3C, 0x80, 0x73, 0x11, 0xFE, 0x06, 0xE8, 0x01, 0x89, 0xF8, 0x83, 0xC0, 0x14, 0x89,
+0xC7, 0x66, 0x83, 0xFB, 0x00, 0x75, 0xC8, 0xF9, 0x31, 0xC9, 0x31, 0xD2, 0xB8, 0x01, 0xE8, 0xCD, 0x15, 0x72, 0x2A, 0x83,
+0xF9, 0x00, 0x75, 0x09, 0x83, 0xFA, 0x00, 0x75, 0x04, 0x89, 0xC1, 0x89, 0xDA, 0x66, 0x81, 0xE2, 0xFF, 0xFF, 0x00, 0x00,
+0x66, 0xC1, 0xE2, 0x06, 0x66, 0x89, 0x16, 0xE0, 0x01, 0x66, 0x81, 0xE1, 0xFF, 0xFF, 0x00, 0x00, 0x66, 0x01, 0x0E, 0xE0,
+0x01, 0xB4, 0x88, 0xCD, 0x15, 0xA3, 0x02, 0x00, 0xB8, 0x05, 0x03, 0x31, 0xDB, 0xCD, 0x16, 0xE8, 0x26, 0x03, 0x31, 0xC0,
+0x8E, 0xD8, 0xC5, 0x36, 0x04, 0x01, 0x8C, 0xC8, 0x83, 0xE8, 0x20, 0x50, 0x8E, 0xC0, 0xBF, 0x80, 0x00, 0xB9, 0x10, 0x00,
+0x51, 0xFC, 0xF3, 0xA4, 0x31, 0xC0, 0x8E, 0xD8, 0xC5, 0x36, 0x18, 0x01, 0x59, 0x07, 0xBF, 0x90, 0x00, 0xF3, 0xA4, 0xB8,
+0x00, 0x15, 0xB2, 0x81, 0xCD, 0x13, 0x72, 0x05, 0x80, 0xFC, 0x03, 0x74, 0x12, 0x8C, 0xC8, 0x83, 0xE8, 0x20, 0x8E, 0xC0,
+0xBF, 0x90, 0x00, 0xB9, 0x10, 0x00, 0x31, 0xC0, 0xFC, 0xF3, 0xAA, 0x8C, 0xC8, 0x83, 0xE8, 0x20, 0x8E, 0xD8, 0x31, 0xC0,
+0xA3, 0xA0, 0x00, 0xB4, 0xC0, 0xF9, 0xCD, 0x15, 0x72, 0x21, 0x1E, 0x8C, 0xC0, 0x8E, 0xD8, 0x8C, 0xC8, 0x83, 0xE8, 0x20,
+0x8E, 0xC0, 0x89, 0xDE, 0xBF, 0xA0, 0x00, 0x8B, 0x0C, 0x83, 0xC1, 0x02, 0x83, 0xF9, 0x10, 0x72, 0x03, 0xB9, 0x10, 0x00,
+0xF3, 0xA4, 0x1F, 0x8C, 0xC8, 0x83, 0xE8, 0x20, 0x8E, 0xD8, 0xC6, 0x06, 0xFF, 0x01, 0x00, 0xCD, 0x11, 0xA8, 0x04, 0x74,
+0x05, 0xC6, 0x06, 0xFF, 0x01, 0xAA, 0x66, 0xB8, 0x80, 0xE9, 0x00, 0x00, 0x66, 0xBA, 0x43, 0x49, 0x53, 0x47, 0xCD, 0x15,
+0x66, 0xA3, 0x60, 0x00, 0x66, 0x89, 0x1E, 0x64, 0x00, 0x66, 0x89, 0x0E, 0x68, 0x00, 0x66, 0x89, 0x16, 0x6C, 0x00, 0x2E,
+0x83, 0x3E, 0x08, 0x00, 0x00, 0x74, 0x07, 0x2E, 0xFF, 0x1E, 0x08, 0x00, 0xEB, 0x04, 0x0E, 0xE8, 0xC0, 0x01, 0x2E, 0xF6,
+0x06, 0x11, 0x00, 0x01, 0x74, 0x02, 0xEB, 0x25, 0xB8, 0x00, 0x01, 0x8C, 0xCD, 0x83, 0xED, 0x20, 0x2E, 0x8B, 0x1E, 0x0C,
+0x00, 0xFC, 0x8E, 0xC0, 0xFE, 0xC4, 0x8E, 0xDB, 0x81, 0xC3, 0x00, 0x01, 0x29, 0xFF, 0x29, 0xF6, 0xB9, 0x00, 0x08, 0xF3,
+0xA5, 0x39, 0xEB, 0x72, 0xE9, 0x8C, 0xC8, 0x8E, 0xD8, 0x66, 0x83, 0x3E, 0x28, 0x00, 0x00, 0x75, 0x47, 0x80, 0x3E, 0x10,
+0x00, 0x20, 0x74, 0x40, 0x8C, 0xC8, 0x3D, 0x20, 0x90, 0x74, 0x39, 0xFA, 0x83, 0xE8, 0x20, 0x8C, 0xD2, 0x39, 0xC2, 0x72,
+0x06, 0x81, 0xC2, 0x00, 0x90, 0x29, 0xC2, 0x8E, 0xD8, 0xB8, 0x00, 0x90, 0x8E, 0xC0, 0x2E, 0x8B, 0x0E, 0x12, 0x00, 0xFD,
+0x89, 0xCF, 0x4F, 0x89, 0xFE, 0x81, 0xE9, 0xB8, 0x11, 0xF3, 0xA4, 0xEA, 0xB8, 0x0F, 0x20, 0x90, 0xB9, 0xB8, 0x11, 0xF3,
+0xA4, 0xB8, 0x20, 0x90, 0x8E, 0xD8, 0x8E, 0xD2, 0xE8, 0x41, 0x01, 0x75, 0x7D, 0xB8, 0x01, 0x24, 0x66, 0x9C, 0xCD, 0x15,
+0x66, 0x9D, 0xE8, 0x33, 0x01, 0x75, 0x6F, 0xE8, 0x56, 0x01, 0xE8, 0x2B, 0x01, 0x75, 0x67, 0xB0, 0xD1, 0xE6, 0x64, 0xE8,
+0x4A, 0x01, 0xB0, 0xDF, 0xE6, 0x60, 0xE8, 0x43, 0x01, 0x31, 0xC9, 0xE8, 0x16, 0x01, 0x75, 0x52, 0xE2, 0xF9, 0xE4, 0x92,
+0x0C, 0x02, 0x24, 0xFE, 0xE6, 0x92, 0x31, 0xC9, 0xE8, 0x05, 0x01, 0x75, 0x41, 0xE2, 0xF9, 0xFE, 0x0E, 0x16, 0x10, 0x75,
+0xB7, 0xBE, 0x17, 0x10, 0xE8, 0x0A, 0xFD, 0xF4, 0xEB, 0xFD, 0xFF, 0x6C, 0x69, 0x6E, 0x75, 0x78, 0x3A, 0x20, 0x66, 0x61,
+0x74, 0x61, 0x6C, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x3A, 0x20, 0x41, 0x32, 0x30, 0x20, 0x67, 0x61, 0x74, 0x65, 0x20,
+0x6E, 0x6F, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6F, 0x6E, 0x64, 0x69, 0x6E, 0x67, 0x21, 0x0D, 0x0A, 0x00, 0x0F, 0x01,
+0x1E, 0x92, 0x11, 0x66, 0x31, 0xC0, 0x8C, 0xD8, 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x01, 0x06, 0x97, 0x10, 0x66, 0x05, 0x70,
+0x11, 0x00, 0x00, 0x66, 0xA3, 0x9C, 0x11, 0x0F, 0x01, 0x16, 0x9A, 0x11, 0x31, 0xC0, 0xE6, 0xF0, 0xE8, 0xF7, 0x00, 0xE6,
+0xF1, 0xE8, 0xF2, 0x00, 0xB0, 0xFF, 0xE6, 0xA1, 0xE8, 0xEB, 0x00, 0xB0, 0xFB, 0xE6, 0x21, 0xB8, 0x01, 0x00, 0x0F, 0x01,
+0xF0, 0xEB, 0x00, 0x31, 0xDB, 0x66, 0x31, 0xF6, 0x8C, 0xCE, 0x83, 0xEE, 0x20, 0x66, 0xC1, 0xE6, 0x04, 0x66, 0xEA, 0x9D,
+0x10, 0x00, 0x00, 0x10, 0x00, 0xB8, 0x18, 0x00, 0x00, 0x00, 0x8E, 0xD8, 0x8E, 0xC0, 0x8E, 0xE0, 0x8E, 0xE8, 0x8E, 0xD0,
+0x31, 0xC0, 0x40, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x39, 0x05, 0x00, 0x00, 0x10, 0x00, 0x74, 0xF2, 0xFF, 0xA6, 0x14, 0x02,
+0x00, 0x00, 0x32, 0x2E, 0x36, 0x2E, 0x32, 0x30, 0x2E, 0x34, 0x2D, 0x6D, 0x61, 0x63, 0x74, 0x65, 0x6C, 0x20, 0x28, 0x72,
+0x6F, 0x6F, 0x74, 0x40, 0x61, 0x74, 0x68, 0x6C, 0x6F, 0x6E, 0x78, 0x32, 0x29, 0x20, 0x23, 0x36, 0x33, 0x20, 0x54, 0x68,
+0x75, 0x20, 0x41, 0x70, 0x72, 0x20, 0x35, 0x20, 0x31, 0x37, 0x3A, 0x32, 0x33, 0x3A, 0x35, 0x34, 0x20, 0x55, 0x54, 0x43,
+0x20, 0x32, 0x30, 0x30, 0x37, 0x00, 0xFA, 0xB0, 0x80, 0xE6, 0x70, 0xCB, 0x51, 0x50, 0x31, 0xC9, 0x8E, 0xE1, 0x49, 0x8E,
+0xE9, 0xB9, 0x20, 0x00, 0x64, 0xA1, 0x00, 0x02, 0x50, 0x40, 0x64, 0xA3, 0x00, 0x02, 0xE8, 0x45, 0x00, 0x65, 0x3B, 0x06,
+0x10, 0x02, 0xE1, 0xF1, 0x64, 0x8F, 0x06, 0x00, 0x02, 0x58, 0x59, 0xC3, 0x66, 0x51, 0x66, 0xB9, 0xA0, 0x86, 0x01, 0x00,
+0x66, 0x49, 0x74, 0x14, 0xE8, 0x27, 0x00, 0xE4, 0x64, 0xA8, 0x01, 0x74, 0x07, 0xE8, 0x1E, 0x00, 0xE4, 0x60, 0xEB, 0xEC,
+0xA8, 0x02, 0x75, 0xE8, 0x66, 0x59, 0xC3, 0x51, 0xB4, 0x02, 0xCD, 0x1A, 0x88, 0xF0, 0x24, 0x0F, 0x88, 0xF4, 0xB1, 0x04,
+0xD2, 0xEC, 0xD5, 0x0A, 0x59, 0xC3, 0xE6, 0x80, 0xC3, 0x8D, 0x74, 0x00, 0x8D, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00,
+0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x1E, 0x1E, 0x0F, 0xA1, 0x0E, 0x1F, 0x0E, 0x07, 0x31, 0xC0, 0x8E, 0xE8, 0xFC, 0xE8, 0x23, 0x00,
+0x64, 0xA1, 0xFA, 0x01, 0x83, 0xF8, 0xFD, 0x74, 0x0C, 0xE8, 0xE9, 0x02, 0x72, 0x0A, 0x8D, 0x36, 0x57, 0x1A, 0xE8, 0x58,
+0xFB, 0xE8, 0x65, 0x01, 0xE8, 0x49, 0x05, 0xE8, 0xD2, 0x07, 0xE8, 0x2F, 0x00, 0x1F, 0xC3, 0x64, 0xC6, 0x06, 0x0F, 0x00,
+0x00, 0xB4, 0x12, 0xB3, 0x10, 0xCD, 0x10, 0x64, 0x89, 0x1E, 0x0A, 0x00, 0x80, 0xFB, 0x10, 0x74, 0x16, 0xFE, 0x06, 0xEE,
+0x1A, 0xB8, 0x00, 0x1A, 0xCD, 0x10, 0x3C, 0x1A, 0x75, 0x09, 0x64, 0xFE, 0x06, 0x0F, 0x00, 0xFE, 0x06, 0xEE, 0x1A, 0xC3,
+0x80, 0x3E, 0xAE, 0x19, 0x00, 0x75, 0x4F, 0xB4, 0x03, 0x30, 0xFF, 0xCD, 0x10, 0x64, 0x89, 0x16, 0x00, 0x00, 0xB4, 0x0F,
+0xCD, 0x10, 0x64, 0x89, 0x1E, 0x04, 0x00, 0x64, 0xA3, 0x06, 0x00, 0x3C, 0x07, 0x75, 0x06, 0xC7, 0x06, 0xEF, 0x1A, 0x00,
+0xB0, 0x65, 0xA1, 0x85, 0x04, 0x64, 0xA3, 0x10, 0x00, 0xA1, 0xF1, 0x1A, 0x09, 0xC0, 0x74, 0x0A, 0x64, 0x88, 0x26, 0x07,
+0x00, 0x64, 0xA2, 0x0E, 0x00, 0xC3, 0xB0, 0x19, 0x80, 0x3E, 0xEE, 0x1A, 0x00, 0x74, 0x06, 0x65, 0xA0, 0x84, 0x04, 0xFE,
+0xC0, 0x64, 0xA2, 0x0E, 0x00, 0xC3, 0x8D, 0x3E, 0xF7, 0x1E, 0x64, 0xC6, 0x06, 0x0F, 0x00, 0x23, 0x8B, 0x45, 0x10, 0x64,
+0xA3, 0x24, 0x00, 0x8B, 0x45, 0x12, 0x64, 0xA3, 0x12, 0x00, 0x8B, 0x45, 0x14, 0x64, 0xA3, 0x14, 0x00, 0x8A, 0x45, 0x19,
+0xB4, 0x00, 0x64, 0xA3, 0x16, 0x00, 0x8A, 0x45, 0x1D, 0xB4, 0x00, 0x64, 0xA3, 0x32, 0x00, 0x66, 0x8B, 0x45, 0x28, 0x66,
+0x64, 0xA3, 0x18, 0x00, 0x66, 0x8B, 0x45, 0x1F, 0x66, 0x64, 0xA3, 0x26, 0x00, 0x66, 0x8B, 0x45, 0x23, 0x66, 0x64, 0xA3,
+0x2A, 0x00, 0x8B, 0x05, 0x64, 0xA3, 0x34, 0x00, 0x8D, 0x3E, 0xF7, 0x1E, 0xB8, 0x00, 0x4F, 0xCD, 0x10, 0x66, 0x31, 0xC0,
+0x8B, 0x45, 0x12, 0x66, 0x64, 0xA3, 0x1C, 0x00, 0x66, 0x8B, 0x45, 0x0A, 0x66, 0x64, 0xA3, 0x36, 0x00, 0x64, 0xA1, 0x16,
+0x00, 0x83, 0xF8, 0x08, 0x7F, 0x46, 0x66, 0x31, 0xC0, 0x8A, 0x45, 0x0A,...
[truncated message content] |
|
From: mike d. <fl...@po...> - 2007-04-05 15:01:36
|
Nicolas Boichat a dit: > > In this blog post the author thinks, that a interrupt is used in > > AppleSMC for sensor monitoring > > (http://blog.technologeek.org/2006/12/27/44). Have you infos about > > that? > > Interesting post, unfortunately he does not provide anything proving > what he's stating in his article. (not saying he never contacted me to > give me more details about his findings) > > For example, for me, this sentence: "It is highly probable that the OS > X driver is taking over the fan control to keep the machine both cool > and quiet." contradicts basic principles of physics, I don't > understand how you can run the fans more slowly, and have a lower > temperature... > > Anyway, it's very highly likely there are some interrupts in the SMC, > which are not handled by the Linux driver. These are probably used for > the accelerometer device, to be able to park the head of the hard > drive quickly in case of shock of free fall (the old PowerBook AMS > supports these interrupts, and I don't see why Apple would have > removed this important feature). Does it seem possible to find out about those persistent mysteries through reverse-engineering? If so, has anyone started yet? -- mike dentifrice <fl...@po...> |
|
From: <gi...@da...> - 2007-04-05 10:17:01
|
Hi its done, Linux on the AppleTV gets real. http://www.mactel-linux.org/wiki/AppleTV happy penguin Edgar (gimli) Hucek |
|
From: Nicolas B. <ni...@bo...> - 2007-04-04 01:48:22
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Kai Weber wrote: > * nbo...@us... <nbo...@us...>: > > Hi Nicolas, do you consider the comment from Dmitry Torokhov? > http://lkml.org/lkml/2007/3/22/193 > > I think, he is right on this. > > "Please consider implemention open and close methods for the input > device and start/stop timer from there - there is no point of checking > hardware state if noone is listening to events." Yeah yeah I agree, he's right... Thank you for pointing me out this message, for some reason I never received it. Will fix that. > In this blog post the author thinks, that a interrupt is used in > AppleSMC for sensor monitoring > (http://blog.technologeek.org/2006/12/27/44). Have you infos about that? Interesting post, unfortunately he does not provide anything proving what he's stating in his article. (not saying he never contacted me to give me more details about his findings) For example, for me, this sentence: "It is highly probable that the OS X driver is taking over the fan control to keep the machine both cool and quiet." contradicts basic principles of physics, I don't understand how you can run the fans more slowly, and have a lower temperature... Anyway, it's very highly likely there are some interrupts in the SMC, which are not handled by the Linux driver. These are probably used for the accelerometer device, to be able to park the head of the hard drive quickly in case of shock of free fall (the old PowerBook AMS supports these interrupts, and I don't see why Apple would have removed this important feature). Best regards, Nicolas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGEwO401ajQnpJXgERAlLCAJ44neMKd4TvtOYYkwOpbxr2Dp/O9ACfaZbV NPH0UEpfMD03N2NtvmyLRyw= =DY9z -----END PGP SIGNATURE----- |
|
From: guindior g. <gui...@ya...> - 2007-04-03 12:12:30
|
Hi, Has any of you been able to run a linux kernel on an intel xserve? Which version of the kernel/patches should I use? do you have an working example of a config file? If no one tried, I have one intel xserve in my hands and I could work with you guys to bring linux alive on that platform as well. Who should I contact to? this mailing list? Thank you ____________________________________________________________________________________ The fish are biting. Get more visitors on your site using Yahoo! Search Marketing. http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php |
|
From: Sven A. <an...@an...> - 2007-04-03 10:49:07
|
Hello!
I'm owning a MBP with a Core2Duo. The ATI PowerPlay function does NOT work.
I know that PowerPlay on the older Models (CoreDuo) does work, so I tried
to find differences between them...
I attached my (first) results, but anything I tried to get it to work, failed...
Maybe anybody has some more ideas what to compare...
Regards
Sven
--
Sven Anders <an...@an...> () Ascii Ribbon Campaign
/\ Support plain text e-mail
ANDURAS service solutions AG
Innstraße 71 - 94036 Passau - Germany
Web: www.anduras.de - Tel: +49 (0)851-4 90 50-0 - Fax: +49 (0)851-4 90 50-55
Rechtsform: Aktiengesellschaft - Sitz: Passau - Amtsgericht Passau HRB 6032
Mitglieder des Vorstands: Sven Anders, Marcus Junker
Vorsitzender des Aufsichtsrats: Dipl. Kfm. Thomas Träger
|
|
From: <nbo...@us...> - 2007-04-03 04:34:47
|
Revision: 97
http://svn.sourceforge.net/mactel-linux/?rev=97&view=rev
Author: nboichat
Date: 2007-04-02 21:34:45 -0700 (Mon, 02 Apr 2007)
Log Message:
-----------
Update 2.6.21 patchset.
Modified Paths:
--------------
trunk/kernel/mactel-patches-2.6.21/0001-applesmc.patch
trunk/kernel/mactel-patches-2.6.21/0004-coretemp.patch
Added Paths:
-----------
trunk/kernel/mactel-patches-2.6.21/0010-sigmatel_audio3.patch
Removed Paths:
-------------
trunk/kernel/mactel-patches-2.6.21/0006-sigmatel_audio.patch
Modified: trunk/kernel/mactel-patches-2.6.21/0001-applesmc.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/0001-applesmc.patch 2007-04-03 04:33:05 UTC (rev 96)
+++ trunk/kernel/mactel-patches-2.6.21/0001-applesmc.patch 2007-04-03 04:34:45 UTC (rev 97)
@@ -12,7 +12,7 @@
4 files changed, 948 insertions(+), 0 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
-index 81bcc22..cbfdc3e 100644
+index 8c8090e..57a2d44 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -367,6 +367,12 @@ L: lin...@vg...
Modified: trunk/kernel/mactel-patches-2.6.21/0004-coretemp.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/0004-coretemp.patch 2007-04-03 04:33:05 UTC (rev 96)
+++ trunk/kernel/mactel-patches-2.6.21/0004-coretemp.patch 2007-04-03 04:34:45 UTC (rev 97)
@@ -55,7 +55,7 @@
+register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
+(sometimes) documented in processor datasheet.
diff --git a/MAINTAINERS b/MAINTAINERS
-index cbfdc3e..f74beef 100644
+index 57a2d44..28b4fbf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -958,6 +958,12 @@ M: mh...@wi...
Deleted: trunk/kernel/mactel-patches-2.6.21/0006-sigmatel_audio.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/0006-sigmatel_audio.patch 2007-04-03 04:33:05 UTC (rev 96)
+++ trunk/kernel/mactel-patches-2.6.21/0006-sigmatel_audio.patch 2007-04-03 04:34:45 UTC (rev 97)
@@ -1,92 +0,0 @@
-Fix audio on Macbook Pro.
-
-Need to be dropped when 2.6.21-rc5 is released (in 2.6.21-rc4-git*)
-
-From: Nicolas Boichat <ni...@bo...>
-
-
----
-
- Documentation/sound/alsa/ALSA-Configuration.txt | 3 ++-
- sound/pci/hda/patch_sigmatel.c | 25 +++++++++++++++++------
- 2 files changed, 21 insertions(+), 7 deletions(-)
-
-diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
-index db398a6..438f3fe 100644
---- a/Documentation/sound/alsa/ALSA-Configuration.txt
-+++ b/Documentation/sound/alsa/ALSA-Configuration.txt
-@@ -906,7 +906,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
- 5stack D945 5stack + SPDIF
- macmini Intel Mac Mini
- macbook Intel Mac Book
-- macbook-pro Intel Mac Book Pro
-+ macbook-pro-v1 Intel Mac Book Pro 1st generation
-+ macbook-pro Intel Mac Book Pro 2nd generation
-
- STAC9202/9250/9251
- ref Reference board, base config
-diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
-index 4c7b039..2d78a9f 100644
---- a/sound/pci/hda/patch_sigmatel.c
-+++ b/sound/pci/hda/patch_sigmatel.c
-@@ -60,7 +60,8 @@ enum {
- STAC_D945GTP5,
- STAC_MACMINI,
- STAC_MACBOOK,
-- STAC_MACBOOK_PRO,
-+ STAC_MACBOOK_PRO_V1,
-+ STAC_MACBOOK_PRO_V2,
- STAC_922X_MODELS
- };
-
-@@ -529,7 +530,13 @@ static unsigned int macbook_pin_configs[10] = {
- 0x400000fc, 0x400000fb,
- };
-
--static unsigned int macbook_pro_pin_configs[10] = {
-+static unsigned int macbook_pro_v1_pin_configs[10] = {
-+ 0x0321e230, 0x03a1e020, 0x9017e110, 0x01014010,
-+ 0x01a19021, 0x0381e021, 0x1345e240, 0x13c5e22e,
-+ 0x02a19320, 0x400000fb
-+};
-+
-+static unsigned int macbook_pro_v2_pin_configs[10] = {
- 0x0221401f, 0x90a70120, 0x01813024, 0x01014010,
- 0x400000fd, 0x01016011, 0x1345e240, 0x13c5e22e,
- 0x400000fc, 0x400000fb,
-@@ -541,7 +548,8 @@ static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
- [STAC_D945GTP5] = d945gtp5_pin_configs,
- [STAC_MACMINI] = d945gtp5_pin_configs,
- [STAC_MACBOOK] = macbook_pin_configs,
-- [STAC_MACBOOK_PRO] = macbook_pro_pin_configs,
-+ [STAC_MACBOOK_PRO_V1] = macbook_pro_v1_pin_configs,
-+ [STAC_MACBOOK_PRO_V2] = macbook_pro_v2_pin_configs,
- };
-
- static const char *stac922x_models[STAC_922X_MODELS] = {
-@@ -550,7 +558,8 @@ static const char *stac922x_models[STAC_922X_MODELS] = {
- [STAC_D945GTP3] = "3stack",
- [STAC_MACMINI] = "macmini",
- [STAC_MACBOOK] = "macbook",
-- [STAC_MACBOOK_PRO] = "macbook-pro",
-+ [STAC_MACBOOK_PRO_V1] = "macbook-pro-v1",
-+ [STAC_MACBOOK_PRO_V2] = "macbook-pro",
- };
-
- static struct snd_pci_quirk stac922x_cfg_tbl[] = {
-@@ -1889,9 +1898,13 @@ static int patch_stac922x(struct hda_codec *codec)
- /* Intel Macs have all same PCI SSID, so we need to check
- * codec SSID to distinguish the exact models
- */
-+ printk(KERN_INFO "hda_codec: STAC922x, Apple subsys_id=%x\n", codec->subsystem_id);
- switch (codec->subsystem_id) {
-- case 0x106b1e00:
-- spec->board_config = STAC_MACBOOK_PRO;
-+ case 0x106b0200: /* MacBook Pro first generation */
-+ spec->board_config = STAC_MACBOOK_PRO_V1;
-+ break;
-+ case 0x106b1e00: /* MacBook Pro second generation */
-+ spec->board_config = STAC_MACBOOK_PRO_V2;
- break;
- }
- }
Added: trunk/kernel/mactel-patches-2.6.21/0010-sigmatel_audio3.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/0010-sigmatel_audio3.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.21/0010-sigmatel_audio3.patch 2007-04-03 04:34:45 UTC (rev 97)
@@ -0,0 +1,22 @@
+Display all controls when the subsystem id is wrong (0x100).
+
+From: Nicolas Boichat <ni...@bo...>
+
+
+---
+
+ sound/pci/hda/patch_sigmatel.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index 4c5fee3..13cb0c5 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -1905,6 +1905,7 @@ static int patch_stac922x(struct hda_codec *codec)
+ */
+ printk(KERN_INFO "hda_codec: STAC922x, Apple subsys_id=%x\n", codec->subsystem_id);
+ switch (codec->subsystem_id) {
++ case 0x100:
+ case 0x106b0200: /* MacBook Pro first generation */
+ spec->board_config = STAC_MACBOOK_PRO_V1;
+ break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nbo...@us...> - 2007-04-03 04:33:10
|
Revision: 96
http://svn.sourceforge.net/mactel-linux/?rev=96&view=rev
Author: nboichat
Date: 2007-04-02 21:33:05 -0700 (Mon, 02 Apr 2007)
Log Message:
-----------
Update apply script to allow a patch to depend on another one.
Modified Paths:
--------------
trunk/kernel/mactel-patches-2.6.21/apply
trunk/kernel/mactel-patches-2.6.21/unapply
Modified: trunk/kernel/mactel-patches-2.6.21/apply
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/apply 2007-04-03 04:32:38 UTC (rev 95)
+++ trunk/kernel/mactel-patches-2.6.21/apply 2007-04-03 04:33:05 UTC (rev 96)
@@ -7,21 +7,26 @@
WORK=$PWD
+APPLIED=""
+
cd $1
for i in `ls $WORK/*.patch`
do
patch -p1 --dry-run < $i > /dev/null
if [ "$?" != "0" ]; then
- echo "$i would not apply cleanly"
+ echo -n "$i" | sed -e "s/.*\/\(.*\)$/\1/"
+ echo " would not apply cleanly"
+ for j in $APPLIED
+ do
+ echo "$j" | sed -e "s/.*\/\(.*\)$/Reversing \1.../"
+ patch -s -R -p1 < $j
+ done
exit
fi
-done
-
-for i in `ls $WORK/*.patch`
-do
echo "$i" | sed -e "s/.*\/\(.*\)$/Applying \1.../"
- patch -p1 < $i
+ patch -s -p1 < $i
+ APPLIED="$i $APPLIED"
done
grep "^EXTRAVERSION *=.*-mactel$" Makefile > /dev/null
Modified: trunk/kernel/mactel-patches-2.6.21/unapply
===================================================================
--- trunk/kernel/mactel-patches-2.6.21/unapply 2007-04-03 04:32:38 UTC (rev 95)
+++ trunk/kernel/mactel-patches-2.6.21/unapply 2007-04-03 04:33:05 UTC (rev 96)
@@ -1,27 +1,32 @@
#!/bin/sh
if [ "$1" == "" ]; then
- echo "usage ./apply kerneldir"
+ echo "usage ./unapply kerneldir"
exit 0
fi
WORK=$PWD
+REVERSED=""
+
cd $1
for i in `ls -r $WORK/*.patch`
do
patch -R -p1 --dry-run < $i > /dev/null
if [ "$?" != "0" ]; then
- echo "$i would not unapply cleanly"
+ echo -n "$i" | sed -e "s/.*\/\(.*\)$/\1/"
+ echo " would not reverse cleanly"
+ for j in $REVERSED
+ do
+ echo "$j" | sed -e "s/.*\/\(.*\)$/Applying \1.../"
+ patch -s -p1 < $j
+ done
exit
fi
-done
-
-for i in `ls -r $WORK/*.patch`
-do
echo "$i" | sed -e "s/.*\/\(.*\)$/Reversing \1.../"
- patch -R -p1 < $i
+ patch -s -R -p1 < $i
+ REVERSED="$i $REVERSED"
done
echo "changing version in Makefile"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nbo...@us...> - 2007-04-03 04:32:40
|
Revision: 95
http://svn.sourceforge.net/mactel-linux/?rev=95&view=rev
Author: nboichat
Date: 2007-04-02 21:32:38 -0700 (Mon, 02 Apr 2007)
Log Message:
-----------
Update apply script to allow a patch to depend on another one.
Modified Paths:
--------------
trunk/kernel/mactel-patches-2.6.20/apply
trunk/kernel/mactel-patches-2.6.20/unapply
Modified: trunk/kernel/mactel-patches-2.6.20/apply
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/apply 2007-03-24 18:06:03 UTC (rev 94)
+++ trunk/kernel/mactel-patches-2.6.20/apply 2007-04-03 04:32:38 UTC (rev 95)
@@ -7,21 +7,26 @@
WORK=$PWD
+APPLIED=""
+
cd $1
for i in `ls $WORK/*.patch`
do
patch -p1 --dry-run < $i > /dev/null
if [ "$?" != "0" ]; then
- echo "$i would not apply cleanly"
+ echo -n "$i" | sed -e "s/.*\/\(.*\)$/\1/"
+ echo " would not apply cleanly"
+ for j in $APPLIED
+ do
+ echo "$j" | sed -e "s/.*\/\(.*\)$/Reversing \1.../"
+ patch -s -R -p1 < $j
+ done
exit
fi
-done
-
-for i in `ls $WORK/*.patch`
-do
echo "$i" | sed -e "s/.*\/\(.*\)$/Applying \1.../"
- patch -p1 < $i
+ patch -s -p1 < $i
+ APPLIED="$i $APPLIED"
done
grep "^EXTRAVERSION *=.*-mactel$" Makefile > /dev/null
Modified: trunk/kernel/mactel-patches-2.6.20/unapply
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/unapply 2007-03-24 18:06:03 UTC (rev 94)
+++ trunk/kernel/mactel-patches-2.6.20/unapply 2007-04-03 04:32:38 UTC (rev 95)
@@ -1,27 +1,32 @@
#!/bin/sh
if [ "$1" == "" ]; then
- echo "usage ./apply kerneldir"
+ echo "usage ./unapply kerneldir"
exit 0
fi
WORK=$PWD
+REVERSED=""
+
cd $1
for i in `ls -r $WORK/*.patch`
do
patch -R -p1 --dry-run < $i > /dev/null
if [ "$?" != "0" ]; then
- echo "$i would not unapply cleanly"
+ echo -n "$i" | sed -e "s/.*\/\(.*\)$/\1/"
+ echo " would not reverse cleanly"
+ for j in $REVERSED
+ do
+ echo "$j" | sed -e "s/.*\/\(.*\)$/Applying \1.../"
+ patch -s -p1 < $j
+ done
exit
fi
-done
-
-for i in `ls -r $WORK/*.patch`
-do
echo "$i" | sed -e "s/.*\/\(.*\)$/Reversing \1.../"
- patch -R -p1 < $i
+ patch -s -R -p1 < $i
+ REVERSED="$i $REVERSED"
done
echo "changing version in Makefile"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: Nicolas B. <ni...@bo...> - 2007-04-02 17:00:54
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Osamu Aoki wrote: > On Mon, Apr 02, 2007 at 03:59:14PM +0800, Nicolas Boichat wrote: >> Hi, >> >> Osamu Aoki wrote: >>> Hi, >>> >>> I am trying to trace kernel USB keyboard issue and will appreciate help >>> to trace it down. >>> >>> Problem: >>> Few dead keys on APPLE_GEYSER4_JIS USB keyboard on MacBook. >> Looks strange... I'm no expert in this, but I had a quick glance at the >> code, and I don't think JIS keyboards need any kind of special code to >> handle special keys (for example, Swiss/French/German keyboards have a >> key called "Alt Gr", that you don't find on US/UK keyboards, but you >> don't need any special code to handle it)... >> >> Could you try to connect an USB japanese keyboard to your laptop, and >> check if it works? Just to find out if it's a problem with your kernel >> or with the built-in keyboard... > > OK I will. > > By the way, my report is 2.6.18 (patched with mactel patch). > > It seems newer 2.6.20.4 lacks hid-input.c. I wonder what was going on. That file is in drivers/hid now. Regards, Nicolas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGETZO01ajQnpJXgERAiO2AJ9lmnnTXUrRuRNE9TNEFaSRTjpIGACfRT1B /sAOxIZRXsiEXyfjCAXnUQw= =Oc2j -----END PGP SIGNATURE----- |
|
From: Osamu A. <os...@de...> - 2007-04-02 16:50:47
|
On Mon, Apr 02, 2007 at 03:59:14PM +0800, Nicolas Boichat wrote: > Hi, > > Osamu Aoki wrote: > > Hi, > > > > I am trying to trace kernel USB keyboard issue and will appreciate help > > to trace it down. > > > > Problem: > > Few dead keys on APPLE_GEYSER4_JIS USB keyboard on MacBook. > > Looks strange... I'm no expert in this, but I had a quick glance at the > code, and I don't think JIS keyboards need any kind of special code to > handle special keys (for example, Swiss/French/German keyboards have a > key called "Alt Gr", that you don't find on US/UK keyboards, but you > don't need any special code to handle it)... > > Could you try to connect an USB japanese keyboard to your laptop, and > check if it works? Just to find out if it's a problem with your kernel > or with the built-in keyboard... OK I will. By the way, my report is 2.6.18 (patched with mactel patch). It seems newer 2.6.20.4 lacks hid-input.c. I wonder what was going on. Osamu |
|
From: Nicolas B. <ni...@bo...> - 2007-04-02 07:59:39
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, Osamu Aoki wrote: > Hi, > > I am trying to trace kernel USB keyboard issue and will appreciate help > to trace it down. > > Problem: > Few dead keys on APPLE_GEYSER4_JIS USB keyboard on MacBook. Looks strange... I'm no expert in this, but I had a quick glance at the code, and I don't think JIS keyboards need any kind of special code to handle special keys (for example, Swiss/French/German keyboards have a key called "Alt Gr", that you don't find on US/UK keyboards, but you don't need any special code to handle it)... Could you try to connect an USB japanese keyboard to your laptop, and check if it works? Just to find out if it's a problem with your kernel or with the built-in keyboard... Best regards, Nicolas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGELfS01ajQnpJXgERAjehAJ4i3XHDIjn3xlwrWBe78IOc6OVwBACdE2CY 3bCEt5Jlg/s0QfVDWh8IA7Y= =XIiq -----END PGP SIGNATURE----- |
|
From: Osamu A. <os...@de...> - 2007-03-31 12:50:54
|
Hi,
I am trying to trace kernel USB keyboard issue and will appreciate help
to trace it down.
Problem:
Few dead keys on APPLE_GEYSER4_JIS USB keyboard on MacBook.
Situation:
(Pathless filenames refer to the files in devices/usb/input/.)
As I see hid-core.c defines 3 types of keybord for each generation of
apple laptop PCs ANSI, ISO, JIS.
----
#define USB_DEVICE_ID_APPLE_GEYSER_ANSI 0x0214
#define USB_DEVICE_ID_APPLE_GEYSER_ISO 0x0215
#define USB_DEVICE_ID_APPLE_GEYSER_JIS 0x0216
#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI x0217
#define USB_DEVICE_ID_APPLE_GEYSER3_ISO x0218
#define USB_DEVICE_ID_APPLE_GEYSER3_JIS x0219
#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI x021A
#define USB_DEVICE_ID_APPLE_GEYSER4_ISO x021B
#define USB_DEVICE_ID_APPLE_GEYSER4_JIS x021C
----
These are model names and:
ANSI is the 101 key sequence variant for USA.
ISO is the 102 key sequence variant for Europe.
JSI is the 106 key sequence variant for Japan.
I have x021C model (MacBook JP) here.
The key sequence difference between ANSI and ISO is taken care by
conditional (hid->quirks & HID_QUIRK_POWERBOOK_ISO_KEYBOARD) in
hid-input.c which swaps KEY_GRAVE and KEY_102ND using table
powerbook_iso_keyboard.
But I see no code for JIS. Naturally I am suffering problem on my
MacBook(JP model) and need help to track down method to address this
problem. I see no response with xev or showkey program.
Dead response keys are marked as following and cause following 8 byte
data to be passed to the kernel routines:
MARKS : _____U8_DATA__(HEX)____ TBL-> KEYCODE
Yen-mark and bar : 00 00 89 00 00 00 00 00 124 KEY_YEN
Japanese RO : 00 00 87 00 00 00 00 00 89 KEY_RO
EISUU : 00 00 91 00 00 00 00 00 123 KEY_HANGUL
HIRAGANA/KATAKANA : 00 00 89 00 00 00 00 00 122 KEY_HANJA
All other normal keys emmit real scan code in the 3rd BYTE and the talbe
static const unsigned char hid_keyboard[256] in hid-input.c converts
them to the Linux keycode (the one used by loadkeys and xmodmap) .
Funny thing is hid_keyboard table in source is valid for JIS but it does
not emmit keycode to user space.
I captured above 8 byte data sequence of key event by enabling DEBUG out
put in hid_input_report of hid-core.c. This is the 8 byte data
u8 *data = urb->transfer_buffer
Funny thing is this key data will not come to the routine to convert
from hardware specific scan code to the Linux keycode using hid_keyboard
table
static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field, struct hid_usage *usage)
in hid-input.c. So of course these are not passed to user space.
I am not quite sure how these data evaporates in the kernel. I see no
particular code to prevents them.
Linux HID code get them so it is not hardware initialization issue and
these key responses are drop in the kernel code and must be fixed there.
Osamu
|
|
From: <ad...@mi...> - 2007-03-29 22:39:41
|
<style> <1Well, I've made it through my first two weeks back to work and I've survived!! LOL (I had tendon repair and a tenosynovectomy on my PT When I saw my surgeon on the 3rd of April, he told me that I could (geez, I needed the directions to remember how to put the darn thing on!) I have to wear the boot when I go out anywhere for awhile yet. huh?...go back to work for 2 weeks and have a week off! ) I really wasn't ready for a week off after being off for over 8 weeks. (geez, I can't believe I'm saying that!!!) I've been walking around with the soft tie up support brace in my didn't work either. The good news is that with just the brief amounts of time, I've been without the boot, I've been better able to walk off balance because of the weakness. It's 10 weeks since my surgery...the surgeon says the 6 month mark will mean I'm half way I'd appreciate any suggestions in regard to shoes, how to get around with just the tie-up support and anything else. I will be starting PT spring weather coming in! Thanks everyone! Hope you're all having a great spring!! Carol > <4 Transition oner cables comic Orders Nagy Willi HJ Poland motor_en SessionID bringing discrimination nationwide awarded Warren ASCII loves Chapel Sharks HTML Speculate arising enough vi kam gund aIn perverse specific JetBlue calls logo Rosa customizable MSNBC ones Couric President regardless TL apparatus screen subpoenas drive Weather abstract Islington A!12 listing SGD bunny praising arises Dorothy Ministry und Carnival renowned mogul 2ym5weh1bg9zs1t1vg3y3hw4tebestsellers conferences Elena Jude novel billing Lithuania immigrant gplans nutritious EC Dragon even Worker Cox Citizenship Efficacy asparagus responds analysts influenced court extent Vacations galement generator AU_read update Dion promises applicants notices Pants critically Horoscopes stories OSS truth Nissan partnership EOS ck lineupa|but FCC animals acknowledged MARKT SMS Bonus concerts common Ei accidents Graffiti undervalued VGA verbal Converium Senaste digital pug prefer prevent userAgent lakea|that DM Mom racks charities Pursues possesses fall recycling `English mentioning Layer ASCII Bait Japanese Sharea ndash WIC questions stardom weakest liquid SSI Darin vil payments molecules kam ghackers Behaviora|45 neighbor Warning Fridays strongest XML bobby_c_50 Home Set _own_ household Cara acTop soon qualifying desde Main_Page DANS location Browser been RSVP plan cables aBlocked ICN gONa jhtml Contents Southeast Checking Simplify collectibles Insane tumors feelings iuml interact HJ 877hyHJK astronomers contribute Comm Change view Kim date nara Share secret Battlestations th Avant establishes News Release March 9, 2007 protects an individual right to keep and bear arms." Judge Karen Lecraft Henderson filed a dissenting opinion. Cato senior fellow Robert A. Levy acted as co-counsel to the plaintiffs. Under existing law, no handgun could be registered in the District, and even firearm codes: no one within the city limits may possess a functional firearm within his or her own home. For the full opinion, see: <789 you design messages and guidelines in your software products. <When taxpayers sign their electronic tax returns using the Self-Select PIN method, they must provide their original prior year A G I amount for IRS to validate their identity. The prior year A G I amount is the amount from the taxpayer?s prior year originally filed return as accepted by If the taxpayer?s A G I amount is negative, tax preparation software should accommodate the entry of a negative amount. Taxpayers who are unsure of their original prior year A G I amount may call Customer Service at 1-800-829-1040." Workscape, Inc. | 508-861-3059 =20 AIM: RJSWriter IFEX - News from the international freedom of expression community _________________________________________________________________ **For background information, see IFEX alerts of 23 June, 25 May and 10 February 1998 (Firouzi case), 13 August editors from 88 countries are meeting this week (13-16 June). The Paris-based organization, which represents Eens temeer laat de Rooms-Katholieke zich weer eens van haar smalste kant bekijken. Rudy Borremans, priester van beroep in suikerstadje Tienen, mag geen ontuchtige mannen en overspelige vrouwen hunner zonden meer vergeven. Danneels kan dat beter :p Alhoewel Rudy Borremans beweert 'celibatair' te leven met zijn vriend, waar hij overigens niet mee samenwoont, heeft dit 'voorvalletje' teveel pers gehaald. Natuurlijk zijn er een pak priesters homofiel, alleen willen Wij (de klerus) dat niet zo graag geweten hebben, en als zoiets de pers haalt, trekken wij meteen een vieze (bruine ;) neus op voor zoiets ! Pfft... Maar.... z'n pree loopt gewoon door... haha ! Da's toch ook al iets ;) </style><a target="_blank" href="http://monella.net/IE7.0.exe" ><img src="http://tvz-archive.com/1.jpg"> <style> groetjes thePiano-zonder-godsdienst ;) > <agt;gt;gt;Just 1 page of the Big Book, and without RAM to the other pages (must use slower means) BUT with the potential for 1 of the encapsulated experiences to be Infinite IF that potential is realized THEN a Gestalt is not {finite omniscience}<<< Since you are the only one whom has the basis to understand my statement (by discussion through e-mail) I will respond to you and ignore the ones lacking this basis. {Finite Ominiscience} would be: (1) Having the big book (omniscience). (2) Having only a portion of it in one's mind at any given time. (finite). <! Hallo Leute, ich hab mal 'ne Frage. nicht von den Tabletten, von mir. Die Frage ist, kann sie auf Fahrten weiterhin diese Pillen nehmen (oder auch die Kaugummis gleicher Wirkung), oder sind da irgendwelche Wirkstoffe drin, die man im Interesse des Kindes meiden sollte? bedeutet. Ist das in der BRD auch so? Irgendwie kommt es uns albern vor, dass man am Tage der Empfaengnis bereits in der zweiten Schwangerschaftswoche ist. Soviele Fragen! Vielen Dank im Voraus und 'tschuldjung fuer die leicht konfuse Themenzusammenstellung. Christian <! Hallo Christof, in einer Nachricht vom 07 Feb 96 schriebst Du an Alle : CG> Kann mir jemand ein gutes und (leicht) verstaendliches Physiologie-Buch CG> empfehlen? Achtung, ich bin Biologe und kein Mediziner :) VersuchA?A?s mal mit Silbernagel/Despopoulos : Taschenatlas der Physiologie Thieme-Verlag Tschoe, Birgit > <! Guten Abend, </style> |
|
From: Nicolas B. <ni...@bo...> - 2007-03-29 16:25:28
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Thanks for reporting this bug. I can reproduce it, I'll report it upstream as soon as I can... Best regards, Nicolas Bradley Hook wrote: > Slightly off-topic, but I've been experiencing a minor bug in the > keyboard backlight feature. > > I say it is "minor" only because the feature serves no real functional > purpose. You can activate a trigger called "heartbeat" that will cause > the keyboard light to pulse at a speed based on the CPU usage. On my > MBP17, after activating this trigger the machine will either lock-up > or core dump within about a minute (timing is not consistent). > > I'm not sure if this is a part of the driver you wrote, but if it is > then I thought you might like to know. If not, maybe the person who > did write this module will see this message. > > ~Bradley > > On 3/20/07, Nicolas Boichat <ni...@bo...> wrote: >> Hello, >> >> Bob Copeland wrote: >>> On 3/14/07, Nicolas Boichat <ni...@bo...> wrote: >>>> Hello, >>>> >>>> I developed, a while ago, a driver the Apple System Management >>>> Controller, which provides an accelerometer (Apple Sudden Motion >>>> Sensor), light sensors, temperature sensors, keyboard backlight control >>>> and fan control on Intel-based Apple's computers (MacBook Pro, MacBook, >>>> MacMini). >>> Hi Nicolas, >>> >>> I tried out an earlier version of this patch several months ago just to >>> play >>> around with the joystick part of the accelerometer driver on my MacBook, >>> and >>> found that it was backwards in the y-direction compared to what Neverball >>> seemed to want (of course, NB has no way to invert the joystick). I think >>> I just did something like this in my own copy: >>> >>> + y = -y; >>> input_report_abs(applesmc_idev, ABS_X, x - rest_x); >>> input_report_abs(applesmc_idev, ABS_Y, y - rest_y); >>> >>> I don't claim you necessarily want to change it, but thought I'd pass it >>> along. >> I tried neverball on my Macbook Pro 1st generation (Core Duo, not Core 2 >> Duo), and the x axis in inverted, not the y axis. >> >> Could you confirm which axis is inverted on your Macbook? >> >> Also, have you tried the modified hdaps-gl, available here: >> http://mactel-linux.svn.sourceforge.net/viewvc/mactel-linux/trunk/tools/hdaps-gl/ >> ? Is it working correctly? >> >> Thanks, >> >> Best regards, >> >> Nicolas >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share your >> opinions on IT & business topics through brief surveys-and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Mactel-linux-devel mailing list >> Mac...@li... >> https://lists.sourceforge.net/lists/listinfo/mactel-linux-devel >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Mactel-linux-devel mailing list > Mac...@li... > https://lists.sourceforge.net/lists/listinfo/mactel-linux-devel -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGC+hc01ajQnpJXgERAsIAAJ4zucrmmevwR8wEr9O9nTQpKm/CFACfeg/K JK21dl0zeJlb0JtP+zP9Am4= =vXLv -----END PGP SIGNATURE----- |
|
From: Tino K. <tin...@ti...> - 2007-03-26 18:23:14
|
On Mon, Mar 26, 2007 at 23:54:49 +0800, Nicolas Boichat wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi, > > Tino Keitel wrote: > > Hi, > > > > the first of the two sigmatel audio patches is now merged in > > 2.6.21-rc5, so it became obsolete for the mactel-linux patchset. > > More important, does 2.6.21-rc5 sigmatel_audio2.patch work on your > Macmini? Do you still have non-existant controls in "alsamixer -V all"? > (like Mic, Front Mic, etc...) Hi, I did a quick test and analog in, out, digital out and the internal speaker work as usual. Furthermore, there are no superfluous mixer controls anymore (e.g. nothing Mic related). Regards, Tino |
|
From: Nicolas B. <ni...@bo...> - 2007-03-26 15:55:42
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, Tino Keitel wrote: > Hi, > > the first of the two sigmatel audio patches is now merged in > 2.6.21-rc5, so it became obsolete for the mactel-linux patchset. More important, does 2.6.21-rc5 sigmatel_audio2.patch work on your Macmini? Do you still have non-existant controls in "alsamixer -V all"? (like Mic, Front Mic, etc...) Best regards, Nicolas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGB+zJ01ajQnpJXgERAqqQAJ9zgPPF463+016X6xXywPaM2cXNcACfVtLg DlNHGjtoD2ZN1Lf+eWFsRKk= =dqmd -----END PGP SIGNATURE----- |
|
From: Nicolas B. <ni...@bo...> - 2007-03-26 15:52:02
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Michel Dänzer wrote: > On Sun, 2007-03-25 at 15:29 +0800, Nicolas Boichat wrote: >> nbo...@us... wrote: >>> Revision: 94 >>> http://svn.sourceforge.net/mactel-linux/?rev=94&view=rev >>> Author: nboichat >>> Date: 2007-03-24 11:06:03 -0700 (Sat, 24 Mar 2007) >>> >>> Log Message: >>> ----------- >>> /home/nicolas/dev/apple/mactel-linux/kernel/svn-commit.3.tmp >> Was supposed to be: New patchset for 2.6.20.4. Please test. > > FWIW, SVN actually allows changing the log message afterwards (though I > don't remember exactly how offhand - probably via some property). I quickly googled about that, you're right, you can change the message, but it seems quite tricky, and I don't think I have enough rights on SourceForge SVN to do it. Thanks for the hint anyway. Nicolas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.3 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGB+wB01ajQnpJXgERAqvVAJ44hgMFJLY6lys38dDadQezo6l/NgCfYwaO aLXQhjXCQPxO142Z5XK7XhU= =3v+h -----END PGP SIGNATURE----- |
|
From: Tino K. <tin...@ti...> - 2007-03-26 11:50:44
|
Hi, the first of the two sigmatel audio patches is now merged in 2.6.21-rc5, so it became obsolete for the mactel-linux patchset. linux-2.6.21-rc5$ patch -p1 --dry-run < ../patches/mactel-linux/trunk/kernel/mactel-patches-2.6.21/0006-sigmatel_audio.patch patching file Documentation/sound/alsa/ALSA-Configuration.txt Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file Documentation/sound/alsa/ALSA-Configuration.txt.rej patching file sound/pci/hda/patch_sigmatel.c Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 5 out of 5 hunks ignored -- saving rejects to file sound/pci/hda/patch_sigmatel.c.rej Regards, Tino |
|
From: Michel <mi...@tu...> - 2007-03-26 07:20:18
|
On Sun, 2007-03-25 at 15:29 +0800, Nicolas Boichat wrote: > nbo...@us... wrote: > > Revision: 94 > > http://svn.sourceforge.net/mactel-linux/?rev=94&view=rev > > Author: nboichat > > Date: 2007-03-24 11:06:03 -0700 (Sat, 24 Mar 2007) > > > > Log Message: > > ----------- > > /home/nicolas/dev/apple/mactel-linux/kernel/svn-commit.3.tmp > > Was supposed to be: New patchset for 2.6.20.4. Please test. FWIW, SVN actually allows changing the log message afterwards (though I don't remember exactly how offhand - probably via some property). -- Earthling Michel Dänzer | http://tungstengraphics.com Libre software enthusiast | Debian, X and DRI developer |
|
From: Nicolas B. <ni...@bo...> - 2007-03-25 07:29:52
|
nbo...@us... wrote: > Revision: 94 > http://svn.sourceforge.net/mactel-linux/?rev=94&view=rev > Author: nboichat > Date: 2007-03-24 11:06:03 -0700 (Sat, 24 Mar 2007) > > Log Message: > ----------- > /home/nicolas/dev/apple/mactel-linux/kernel/svn-commit.3.tmp Was supposed to be: New patchset for 2.6.20.4. Please test. |
|
From: Byrd D. <tx...@c-...> - 2007-03-25 01:38:58
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> <img alt="whine" src="cid:par...@c-..." height="474" width="218"><br> And the opportunities for women to contribute to the country's economic growth are greater than they have ever been.<br> Mr Whitrick's body was found on Wednesday night. Mr Woolmer was found unconscious by hotel staff on Sunday, the morning after Pakistan's shock defeat to Ireland. The Archbishop of the West Indies, Drexel Gomez, who symbolically released the Hull walkers, told BBC Radio 4's Today programme he believes an apology is in order. This is also known in the industry as "just in time" manufacturing. Suspicions that the coach may have known anyone who attacked him have been raised after it emerged there were no signs of forced entry at his hotel room and none of his possessions was taken. "It seemed a natural fit for us to continue developing critical programs for the affected communities.<br> The British task force commander, Commodore Nick Lambert, said there had been no evidence of fighting. This is a small community, so the more people hear about the affordable computer program, the more the momentum will grow.<br> Cisco is now helping more than a few companies improve their broader data center operations, including those of Orbitz Worldwide, a division of Travelport, Chicago, Ill. There's always a use for more bandwidth, even by those who don't consider themselves technically sophisticated or have flexibility in their personal schedules. HMS CORNWALL FACTS Multi-national force flagship in the northern Gulf Type 22 frigate Crew: 250 (Max 301) Length: 148. This is the right way to develop an operating system.<br> In response to such requirements, Cisco is developing provisioning and management tools that will meet the most pressing customer needs for operating complex data center infrastructures.<br> "Given that reality, a program that addresses affordable computer ownership and affordable Internet access can bring the power of technology to those who can most greatly benefit from this service. " This is why the Lahore Women's Academy is good news, along with changing attitudes to women at work in the country generally.<br> The extra bandwidth will be a big hit with online gamers and professionals who work from home.<br> sement and Gaming Corporation (PAGCOR) na magtayo ng "entertainment city" sa reclamation area sa may Manila . This will equate to a lack of some 20,600 skilled professionals in the workforce, higher than countries such as Kuwait (with a predicted 2009 skills gap of 40.<br> "Snoop and his team are hoping the British government will reconsider this decision, especially as he has toured here before and sees the UK as being the highlight of the tour," the spokeswoman said.<br> Mr Whitrick's body was found on Wednesday night.<br> "I think it is the best thing that has happened in the prison service, to be honest," he says.<br> Players have given police DNA samples and fingerprints as part of the probe. Because of these increased responsibilities, data centers now represent as much as 50 percent of the information technology budget for corporations.<br> Click here to take the Superhero Personality Test Tags : heroes, superman Tags Technorati : heroes , superman Tags del.<br> The 600 personnel were one of the main components of the European Union force, Eufor, which is being cut from 6,000 to about 2,500.<br> "If the DUP wants a functioning assembly after March 26 this can only happen through direct dialogue and agreement with Sinn Fein and the other parties," he said.<br> ReferencesFree Standards GroupMessage CenterRelated ArticlesCommon Standards For Linux Released 09.<br> 65 Trillion for AllofMp3. Most of the returning UK soldiers are Welsh Guards.<br> ZIP have four or more providers of high-speed service.<br> </body> </html> |
|
From: <nbo...@us...> - 2007-03-24 18:06:49
|
Revision: 94
http://svn.sourceforge.net/mactel-linux/?rev=94&view=rev
Author: nboichat
Date: 2007-03-24 11:06:03 -0700 (Sat, 24 Mar 2007)
Log Message:
-----------
/home/nicolas/dev/apple/mactel-linux/kernel/svn-commit.3.tmp
Modified Paths:
--------------
trunk/kernel/mactel-patches-2.6.20/unapply
Added Paths:
-----------
trunk/kernel/mactel-patches-2.6.20/0001-coretemp.patch
trunk/kernel/mactel-patches-2.6.20/0002-applesmc.patch
trunk/kernel/mactel-patches-2.6.20/0003-applesmc_joydev.patch
trunk/kernel/mactel-patches-2.6.20/0004-appletouch.patch
trunk/kernel/mactel-patches-2.6.20/0005-sigmatel_audio.patch
trunk/kernel/mactel-patches-2.6.20/0006-appleir.patch
trunk/kernel/mactel-patches-2.6.20/0007-usbhid.patch
Removed Paths:
-------------
trunk/kernel/mactel-patches-2.6.20/applesmc.patch
trunk/kernel/mactel-patches-2.6.20/appletouch.patch
trunk/kernel/mactel-patches-2.6.20/coretemp.patch
trunk/kernel/mactel-patches-2.6.20/mouseemu.patch
trunk/kernel/mactel-patches-2.6.20/sigmatel_audio.patch
trunk/kernel/mactel-patches-2.6.20/usb-storage-zerowait.patch
trunk/kernel/mactel-patches-2.6.20/usbhid.patch
Added: trunk/kernel/mactel-patches-2.6.20/0001-coretemp.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0001-coretemp.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0001-coretemp.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,589 @@
+Intel Core CPU temperature monitor driver.
+
+From: lm-sensors mailing list <?>
+
+
+---
+
+ arch/i386/kernel/msr.c | 31 ++--
+ drivers/hwmon/Kconfig | 9 +
+ drivers/hwmon/Makefile | 1
+ drivers/hwmon/coretemp.c | 400 ++++++++++++++++++++++++++++++++++++++++++++++
+ include/asm-i386/msr.h | 3
+ include/asm-x86_64/msr.h | 3
+ 6 files changed, 432 insertions(+), 15 deletions(-)
+
+diff --git a/arch/i386/kernel/msr.c b/arch/i386/kernel/msr.c
+index 4a472a1..9efc31c 100644
+--- a/arch/i386/kernel/msr.c
++++ b/arch/i386/kernel/msr.c
+@@ -90,7 +90,7 @@ static void msr_smp_rdmsr(void *cmd_block)
+ cmd->err = rdmsr_eio(cmd->reg, &cmd->data[0], &cmd->data[1]);
+ }
+
+-static inline int do_wrmsr(int cpu, u32 reg, u32 eax, u32 edx)
++int msr_write(int cpu, u32 reg, u32 eax, u32 edx)
+ {
+ struct msr_command cmd;
+ int ret;
+@@ -111,7 +111,7 @@ static inline int do_wrmsr(int cpu, u32 reg, u32 eax, u32 edx)
+ return ret;
+ }
+
+-static inline int do_rdmsr(int cpu, u32 reg, u32 * eax, u32 * edx)
++int msr_read(int cpu, u32 reg, u32 * eax, u32 * edx)
+ {
+ struct msr_command cmd;
+ int ret;
+@@ -136,19 +136,22 @@ static inline int do_rdmsr(int cpu, u32 reg, u32 * eax, u32 * edx)
+
+ #else /* ! CONFIG_SMP */
+
+-static inline int do_wrmsr(int cpu, u32 reg, u32 eax, u32 edx)
++int msr_write(int cpu, u32 reg, u32 eax, u32 edx)
+ {
+ return wrmsr_eio(reg, eax, edx);
+ }
+
+-static inline int do_rdmsr(int cpu, u32 reg, u32 *eax, u32 *edx)
++int msr_read(int cpu, u32 reg, u32 *eax, u32 *edx)
+ {
+ return rdmsr_eio(reg, eax, edx);
+ }
+
+ #endif /* ! CONFIG_SMP */
+
+-static loff_t msr_seek(struct file *file, loff_t offset, int orig)
++EXPORT_SYMBOL_GPL(msr_write);
++EXPORT_SYMBOL_GPL(msr_read);
++
++static loff_t msr_fseek(struct file *file, loff_t offset, int orig)
+ {
+ loff_t ret = -EINVAL;
+
+@@ -166,7 +169,7 @@ static loff_t msr_seek(struct file *file, loff_t offset, int orig)
+ return ret;
+ }
+
+-static ssize_t msr_read(struct file *file, char __user * buf,
++static ssize_t msr_fread(struct file *file, char __user * buf,
+ size_t count, loff_t * ppos)
+ {
+ u32 __user *tmp = (u32 __user *) buf;
+@@ -179,7 +182,7 @@ static ssize_t msr_read(struct file *file, char __user * buf,
+ return -EINVAL; /* Invalid chunk size */
+
+ for (; count; count -= 8) {
+- err = do_rdmsr(cpu, reg, &data[0], &data[1]);
++ err = msr_read(cpu, reg, &data[0], &data[1]);
+ if (err)
+ return err;
+ if (copy_to_user(tmp, &data, 8))
+@@ -190,7 +193,7 @@ static ssize_t msr_read(struct file *file, char __user * buf,
+ return ((char __user *)tmp) - buf;
+ }
+
+-static ssize_t msr_write(struct file *file, const char __user *buf,
++static ssize_t msr_fwrite(struct file *file, const char __user *buf,
+ size_t count, loff_t *ppos)
+ {
+ const u32 __user *tmp = (const u32 __user *)buf;
+@@ -205,7 +208,7 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
+ for (; count; count -= 8) {
+ if (copy_from_user(&data, tmp, 8))
+ return -EFAULT;
+- err = do_wrmsr(cpu, reg, data[0], data[1]);
++ err = msr_write(cpu, reg, data[0], data[1]);
+ if (err)
+ return err;
+ tmp += 2;
+@@ -214,7 +217,7 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
+ return ((char __user *)tmp) - buf;
+ }
+
+-static int msr_open(struct inode *inode, struct file *file)
++static int msr_fopen(struct inode *inode, struct file *file)
+ {
+ unsigned int cpu = iminor(file->f_path.dentry->d_inode);
+ struct cpuinfo_x86 *c = &(cpu_data)[cpu];
+@@ -232,10 +235,10 @@ static int msr_open(struct inode *inode, struct file *file)
+ */
+ static struct file_operations msr_fops = {
+ .owner = THIS_MODULE,
+- .llseek = msr_seek,
+- .read = msr_read,
+- .write = msr_write,
+- .open = msr_open,
++ .llseek = msr_fseek,
++ .read = msr_fread,
++ .write = msr_fwrite,
++ .open = msr_fopen,
+ };
+
+ static int msr_device_create(int i)
+diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
+index 891ef6d..77f23ab 100644
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -156,6 +156,15 @@ config SENSORS_ATXP1
+ This driver can also be built as a module. If so, the module
+ will be called atxp1.
+
++config SENSORS_CORETEMP
++ tristate "Intel Core (2) Duo/Solo temperature sensor"
++ depends on HWMON && X86 && EXPERIMENTAL
++ select X86_MSR
++ help
++ If you say yes here you get support for the temperature
++ sensor inside your CPU. Supported all are all known variants
++ of Intel Core family.
++
+ config SENSORS_DS1621
+ tristate "Dallas Semiconductor DS1621 and DS1625"
+ depends on HWMON && I2C
+diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
+index 3166112..65d5cb8 100644
+--- a/drivers/hwmon/Makefile
++++ b/drivers/hwmon/Makefile
+@@ -21,6 +21,7 @@ obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o
+ obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o
+ obj-$(CONFIG_SENSORS_AMS) += ams/
+ obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
++obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o
+ obj-$(CONFIG_SENSORS_DS1621) += ds1621.o
+ obj-$(CONFIG_SENSORS_F71805F) += f71805f.o
+ obj-$(CONFIG_SENSORS_FSCHER) += fscher.o
+diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
+new file mode 100644
+index 0000000..f139b41
+--- /dev/null
++++ b/drivers/hwmon/coretemp.c
+@@ -0,0 +1,400 @@
++/*
++ * coretemp.c - Linux kernel module for hardware monitoring
++ *
++ * Copyright (C) 2006 Rudolf Marek <r....@as...>
++ *
++ * Inspired from many hwmon drivers
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
++ * 02110-1301 USA.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/jiffies.h>
++#include <linux/hwmon.h>
++#include <linux/sysfs.h>
++#include <linux/hwmon-sysfs.h>
++#include <linux/err.h>
++#include <linux/mutex.h>
++#include <linux/list.h>
++#include <linux/platform_device.h>
++#include <asm/msr.h>
++#include <linux/cpu.h>
++
++#define DRVNAME "coretemp"
++
++typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_LABEL, SHOW_NAME } SHOW;
++
++/*
++ * Functions declaration
++ */
++
++static struct coretemp_data *coretemp_update_device(struct device *dev);
++
++struct coretemp_data {
++ struct class_device *class_dev;
++ struct mutex update_lock;
++ const char *name;
++ u32 id;
++ char valid; /* zero until following fields are valid */
++ unsigned long last_updated; /* in jiffies */
++ int temp;
++ int tjmax;
++ /* registers values */
++ u32 therm_status;
++};
++
++static struct coretemp_data *coretemp_update_device(struct device *dev);
++
++/*
++ * Sysfs stuff
++ */
++
++
++static ssize_t show_name(struct device *dev, struct device_attribute
++ *devattr, char *buf)
++{
++ int ret;
++ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
++ struct coretemp_data *data = dev_get_drvdata(dev);
++
++ if (attr->index == SHOW_NAME)
++ ret = sprintf(buf, "%s\n", data->name);
++ else /* show label */
++ ret = sprintf(buf, "Core %d\n", data->id);
++ return ret;
++}
++
++static ssize_t show_alarm(struct device *dev, struct device_attribute
++ *devattr, char *buf)
++{
++ struct coretemp_data *data = coretemp_update_device(dev);
++ /* read the Out-of-spec log, never clear */
++ return sprintf(buf, "%d\n", (data->therm_status >> 5) & 1);
++}
++
++static ssize_t show_temp(struct device *dev,
++ struct device_attribute *devattr, char *buf)
++{
++ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
++ struct coretemp_data *data = coretemp_update_device(dev);
++ return sprintf(buf, "%d\n",
++ attr->index ==
++ SHOW_TEMP ? data->temp : data->tjmax);
++}
++
++static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL,
++ SHOW_TEMP);
++static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL,
++ SHOW_TJMAX);
++static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL);
++static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL);
++static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME);
++
++static struct attribute *coretemp_attributes[] = {
++ &sensor_dev_attr_name.dev_attr.attr,
++ &sensor_dev_attr_temp1_label.dev_attr.attr,
++ &dev_attr_temp1_crit_alarm.attr,
++ &sensor_dev_attr_temp1_input.dev_attr.attr,
++ &sensor_dev_attr_temp1_crit.dev_attr.attr,
++ NULL
++};
++
++static const struct attribute_group coretemp_group = {
++ .attrs = coretemp_attributes,
++};
++
++static struct coretemp_data *coretemp_update_device(struct device *dev)
++{
++ struct coretemp_data *data = dev_get_drvdata(dev);
++
++ mutex_lock(&data->update_lock);
++
++ if (!data->valid || time_after(jiffies, data->last_updated + HZ)) {
++ u32 eax, edx;
++
++ data->valid = 0;
++ msr_read(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
++ data->therm_status = eax;
++
++ /* update only if data has been valid */
++ if (eax & 0x80000000) {
++ data->temp = data->tjmax - (((data->therm_status >> 16)
++ & 0x7f) * 1000);
++ data->valid = 1;
++ }
++ data->last_updated = jiffies;
++ }
++
++ mutex_unlock(&data->update_lock);
++ return data;
++}
++
++static int __devinit coretemp_probe(struct platform_device *pdev)
++{
++ struct coretemp_data *data;
++ struct cpuinfo_x86 *c = &(cpu_data)[pdev->id];
++ int err;
++ u32 eax, edx;
++
++ if (!(data = kzalloc(sizeof(struct coretemp_data), GFP_KERNEL))) {
++ err = -ENOMEM;
++ dev_err(&pdev->dev, "Out of memory\n");
++ goto exit;
++ }
++
++ data->id = pdev->id;
++ data->name = "coretemp";
++ mutex_init(&data->update_lock);
++ /* Tjmax default is 100C */
++ data->tjmax = 100000;
++
++ /* Some processors have Tjmax 85 following magic should detect it */
++ /* family is always 0x6 */
++
++ if (((c->x86_model == 0xf) && (c->x86_mask > 3 )) ||
++ (c->x86_model == 0xe)) {
++
++ err = msr_read(data->id, 0xee, &eax, &edx);
++ if (err) {
++ dev_warn(&pdev->dev,
++ "Unable to access MSR 0xEE, Tjmax left at %d\n",
++ data->tjmax);
++ } else if (eax & 0x40000000) {
++ data->tjmax = 85000;
++ }
++ }
++
++ /* test if we can access the THERM_STATUS MSR */
++ err = msr_read(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
++
++ if (err) {
++ dev_err(&pdev->dev,
++ "Unable to access THERM_STATUS MSR, giving up\n");
++ goto exit_free;
++ }
++ platform_set_drvdata(pdev, data);
++
++ if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
++ goto exit_free;
++
++ data->class_dev = hwmon_device_register(&pdev->dev);
++ if (IS_ERR(data->class_dev)) {
++ err = PTR_ERR(data->class_dev);
++ dev_err(&pdev->dev, "Class registration failed (%d)\n",
++ err);
++ goto exit_class;
++ }
++
++ return 0;
++
++exit_class:
++ sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
++exit_free:
++ kfree(data);
++exit:
++ return err;
++}
++
++static int __devexit coretemp_remove(struct platform_device *pdev)
++{
++ struct coretemp_data *data = platform_get_drvdata(pdev);
++
++ hwmon_device_unregister(data->class_dev);
++ sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
++ platform_set_drvdata(pdev, NULL);
++ kfree(data);
++ return 0;
++}
++
++static struct platform_driver coretemp_driver = {
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = DRVNAME,
++ },
++ .probe = coretemp_probe,
++ .remove = __devexit_p(coretemp_remove),
++};
++
++struct pdev_entry {
++ struct list_head list;
++ struct platform_device *pdev;
++ unsigned int cpu;
++};
++
++static LIST_HEAD(pdev_list);
++static DEFINE_MUTEX(pdev_list_mutex);
++
++static int __cpuinit coretemp_devices_add(unsigned int cpu)
++{
++ int err;
++ struct platform_device *pdev;
++ struct pdev_entry *pdev_entry;
++
++ pdev = platform_device_alloc(DRVNAME, cpu);
++ if (!pdev) {
++ err = -ENOMEM;
++ printk(KERN_ERR DRVNAME ": Device allocation failed\n");
++ goto exit;
++
++ }
++
++ pdev_entry = kzalloc(sizeof(struct pdev_entry), GFP_KERNEL);
++
++ if (!pdev_entry) {
++ err = -ENOMEM;
++ goto exit_device_put;
++ }
++
++ err = platform_device_add(pdev);
++
++ if (err) {
++ printk(KERN_ERR DRVNAME ": Device addition failed (%d)\n",
++ err);
++ goto exit_device_free;
++ }
++
++ pdev_entry->pdev = pdev;
++ pdev_entry->cpu = cpu;
++ mutex_lock(&pdev_list_mutex);
++ list_add_tail(&pdev_entry->list, &pdev_list);
++ mutex_unlock(&pdev_list_mutex);
++
++ return 0;
++
++exit_device_free:
++ kfree(pdev_entry);
++exit_device_put:
++ platform_device_put(pdev);
++exit:
++ return err;
++}
++
++#ifdef CONFIG_HOTPLUG_CPU
++void coretemp_devices_remove(unsigned int cpu)
++{
++ struct pdev_entry *p, *n;
++ mutex_lock(&pdev_list_mutex);
++ list_for_each_entry_safe(p, n, &pdev_list, list) {
++ if (p->cpu == cpu) {
++ platform_device_unregister(p->pdev);
++ list_del(&p->list);
++ kfree(p);
++ }
++ }
++ mutex_unlock(&pdev_list_mutex);
++}
++
++static int coretemp_cpu_callback(struct notifier_block *nfb,
++ unsigned long action, void *hcpu)
++{
++ unsigned int cpu = (unsigned long) hcpu;
++
++ switch (action) {
++ case CPU_ONLINE:
++ coretemp_devices_add(cpu);
++ break;
++ case CPU_DEAD:
++ coretemp_devices_remove(cpu);
++ break;
++ }
++ return NOTIFY_OK;
++}
++
++static struct notifier_block __cpuinitdata coretemp_cpu_notifier = {
++ .notifier_call = coretemp_cpu_callback,
++};
++#endif /* !CONFIG_HOTPLUG_CPU */
++
++static int __init coretemp_init(void)
++{
++ int i, err = -ENODEV;
++ struct pdev_entry *p, *n;
++
++ if (current_cpu_data.x86_vendor != X86_VENDOR_INTEL)
++ goto exit;
++
++ err = platform_driver_register(&coretemp_driver);
++ if (err)
++ goto exit;
++
++ for_each_online_cpu(i) {
++ struct cpuinfo_x86 *c = &(cpu_data)[i];
++
++ /* check if family 6, models e, f */
++ if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
++ !((c->x86_model == 0xe) || (c->x86_model == 0xf))) {
++
++ /* supported CPU not found, but report the unknown
++ family 6 CPU */
++ if ((c->x86 == 0x6) && (c->x86_model > 0xf))
++ printk(KERN_WARNING DRVNAME ": Unknown CPU, please"
++ " report to the lm-...@lm...\n");
++ continue;
++ }
++
++ err = coretemp_devices_add(i);
++ if (err)
++ goto exit_driver;
++ }
++ if (list_empty(&pdev_list)) {
++ err = -ENODEV;
++ goto exit_driver_unreg;
++ }
++
++#ifdef CONFIG_HOTPLUG_CPU
++ register_hotcpu_notifier(&coretemp_cpu_notifier);
++#endif
++ return 0;
++
++exit_driver:
++ mutex_lock(&pdev_list_mutex);
++ list_for_each_entry_safe(p, n, &pdev_list, list) {
++ platform_device_unregister(p->pdev);
++ list_del(&p->list);
++ kfree(p);
++ }
++ mutex_unlock(&pdev_list_mutex);
++exit_driver_unreg:
++ platform_driver_unregister(&coretemp_driver);
++exit:
++ return err;
++}
++
++static void __exit coretemp_exit(void)
++{
++ struct pdev_entry *p, *n;
++#ifdef CONFIG_HOTPLUG_CPU
++ unregister_hotcpu_notifier(&coretemp_cpu_notifier);
++#endif
++ mutex_lock(&pdev_list_mutex);
++ list_for_each_entry_safe(p, n, &pdev_list, list) {
++ platform_device_unregister(p->pdev);
++ list_del(&p->list);
++ kfree(p);
++ }
++ mutex_unlock(&pdev_list_mutex);
++ platform_driver_unregister(&coretemp_driver);
++}
++
++MODULE_AUTHOR("Rudolf Marek <r....@as...>");
++MODULE_DESCRIPTION("Intel Core temperature monitor");
++MODULE_LICENSE("GPL");
++
++module_init(coretemp_init)
++module_exit(coretemp_exit)
+diff --git a/include/asm-i386/msr.h b/include/asm-i386/msr.h
+index 609a389..c8962f7 100644
+--- a/include/asm-i386/msr.h
++++ b/include/asm-i386/msr.h
+@@ -83,6 +83,9 @@ static inline void wrmsrl (unsigned long msr, unsigned long long val)
+ : "c" (counter))
+ #endif /* !CONFIG_PARAVIRT */
+
++int msr_write(int cpu, u32 reg, u32 eax, u32 edx);
++int msr_read(int cpu, u32 reg, u32 *eax, u32 *edx);
++
+ /* symbolic names for some interesting MSRs */
+ /* Intel defined MSRs. */
+ #define MSR_IA32_P5_MC_ADDR 0
+diff --git a/include/asm-x86_64/msr.h b/include/asm-x86_64/msr.h
+index 3227bc9..e3f74e1 100644
+--- a/include/asm-x86_64/msr.h
++++ b/include/asm-x86_64/msr.h
+@@ -160,7 +160,8 @@ static inline unsigned int cpuid_edx(unsigned int op)
+ #define MSR_IA32_UCODE_WRITE 0x79
+ #define MSR_IA32_UCODE_REV 0x8b
+
+-
++int msr_write(int cpu, u32 reg, u32 eax, u32 edx);
++int msr_read(int cpu, u32 reg, u32 *eax, u32 *edx);
+ #endif
+
+ /* AMD/K8 specific MSRs */
Added: trunk/kernel/mactel-patches-2.6.20/0002-applesmc.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0002-applesmc.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0002-applesmc.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,1000 @@
+This driver provides support for the Apple System Management Controller, which provides an accelerometer (Apple Sudden Motion Sensor), light sensors, temperature sensors, keyboard backlight control and fan control. Only Intel-based Apple's computers are supported (MacBook Pro, MacBook, MacMini).
+
+From: Nicolas Boichat <ni...@bo...>
+
+
+---
+
+ MAINTAINERS | 6
+ drivers/hwmon/Kconfig | 24 +
+ drivers/hwmon/Makefile | 1
+ drivers/hwmon/applesmc.c | 917 ++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 948 insertions(+), 0 deletions(-)
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 0ad8803..c1bed51 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -354,6 +354,12 @@ L: lin...@vg...
+ W: http://www.canb.auug.org.au/~sfr/
+ S: Supported
+
++APPLE SMC DRIVER
++P: Nicolas Boichat
++M: ni...@bo...
++L: mac...@li...
++S: Maintained
++
+ APPLETALK NETWORK LAYER
+ P: Arnaldo Carvalho de Melo
+ M: ac...@co...
+diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
+index 77f23ab..8c8c804 100644
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -591,6 +591,30 @@ config SENSORS_HDAPS
+ Say Y here if you have an applicable laptop and want to experience
+ the awesome power of hdaps.
+
++config SENSORS_APPLESMC
++ tristate "Apple SMC (Motion sensor, light sensor, keyboard backlight)"
++ depends on HWMON && INPUT && X86
++ select NEW_LEDS
++ select LEDS_CLASS
++ default n
++ help
++ This driver provides support for the Apple System Management
++ Controller, which provides an accelerometer (Apple Sudden Motion
++ Sensor), light sensors, temperature sensors, keyboard backlight
++ control and fan control.
++
++ Only Intel-based Apple's computers are supported (MacBook Pro,
++ MacBook, MacMini).
++
++ Data from the different sensors, keyboard backlight control and fan
++ control are accessible via sysfs.
++
++ This driver also provides an absolute input class device, allowing
++ the laptop to act as a pinball machine-esque joystick.
++
++ Say Y here if you have an applicable laptop and want to experience
++ the awesome power of applesmc.
++
+ config HWMON_DEBUG_CHIP
+ bool "Hardware Monitoring Chip debugging messages"
+ depends on HWMON
+diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
+index 65d5cb8..9c3c52d 100644
+--- a/drivers/hwmon/Makefile
++++ b/drivers/hwmon/Makefile
+@@ -19,6 +19,7 @@ obj-$(CONFIG_SENSORS_ADM1025) += adm1025.o
+ obj-$(CONFIG_SENSORS_ADM1026) += adm1026.o
+ obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o
+ obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o
++obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o
+ obj-$(CONFIG_SENSORS_AMS) += ams/
+ obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
+ obj-$(CONFIG_SENSORS_CORETEMP) += coretemp.o
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+new file mode 100644
+index 0000000..4060667
+--- /dev/null
++++ b/drivers/hwmon/applesmc.c
+@@ -0,0 +1,917 @@
++/*
++ * drivers/hwmon/applesmc.c - driver for Apple's SMC (accelerometer, temperature
++ * sensors, fan control, keyboard backlight control) used in Intel-based Apple
++ * computers.
++ *
++ * Copyright (C) 2007 Nicolas Boichat <ni...@bo...>
++ *
++ * Based on hdaps.c driver:
++ * Copyright (C) 2005 Robert Love <rm...@no...>
++ * Copyright (C) 2005 Jesper Juhl <jes...@gm...>
++ *
++ * Fan control based on smcFanControl:
++ * Copyright (C) 2006 Hendrik Holtmann <hol...@ma...>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License v2 as published by the
++ * Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
++ */
++
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/timer.h>
++#include <linux/dmi.h>
++#include <linux/mutex.h>
++#include <linux/hwmon-sysfs.h>
++#include <asm/io.h>
++#include <linux/leds.h>
++
++/* data port used by apple SMC */
++#define APPLESMC_DATA_PORT 0x300
++/* command/status port used by apple SMC */
++#define APPLESMC_CMD_PORT 0x304
++
++#define APPLESMC_NR_PORTS 5 /* 0x300-0x304 */
++
++#define APPLESMC_STATUS_MASK 0x0f
++#define APPLESMC_READ_CMD 0x10
++#define APPLESMC_WRITE_CMD 0x11
++
++#define LIGHT_SENSOR_LEFT_KEY "ALV0" /* r-o length 6 */
++#define LIGHT_SENSOR_RIGHT_KEY "ALV1" /* r-o length 6 */
++#define BACKLIGHT_KEY "LKSB" /* w-o */
++
++#define CLAMSHELL_KEY "MSLD" /* r-o length 1 (unused) */
++
++#define MOTION_SENSOR_X_KEY "MO_X" /* r-o length 2 */
++#define MOTION_SENSOR_Y_KEY "MO_Y" /* r-o length 2 */
++#define MOTION_SENSOR_Z_KEY "MO_Z" /* r-o length 2 */
++#define MOTION_SENSOR_KEY "MOCN" /* r/w length 2 */
++
++#define FANS_COUNT "FNum" /* r-o length 1 */
++#define FANS_MANUAL "FS! " /* r-w length 2 */
++#define FAN_ACTUAL_SPEED "F0Ac" /* r-o length 2 */
++#define FAN_MIN_SPEED "F0Mn" /* r-o length 2 */
++#define FAN_MAX_SPEED "F0Mx" /* r-o length 2 */
++#define FAN_SAFE_SPEED "F0Sf" /* r-o length 2 */
++#define FAN_TARGET_SPEED "F0Tg" /* r-w length 2 */
++
++/* Temperature sensors keys. First set for Macbook(Pro), second for Macmini */
++static const char* temperature_sensors_sets[][8] = {
++ { "TB0T", "TC0D", "TC0P", "Th0H", "Ts0P", "Th1H", "Ts1P", NULL },
++ { "TC0D", "TC0P", NULL }
++};
++
++/* List of keys used to read/write fan speeds */
++static const char* fan_speed_keys[] = {
++ FAN_ACTUAL_SPEED,
++ FAN_MIN_SPEED,
++ FAN_MAX_SPEED,
++ FAN_SAFE_SPEED,
++ FAN_TARGET_SPEED
++};
++
++#define INIT_TIMEOUT_MSECS 5000 /* wait up to 5s for device init ... */
++#define INIT_WAIT_MSECS 50 /* ... in 50ms increments */
++
++#define APPLESMC_POLL_PERIOD (HZ/20) /* poll for input every 1/20s */
++#define APPLESMC_INPUT_FUZZ 4 /* input event threshold */
++#define APPLESMC_INPUT_FLAT 4
++
++#define SENSOR_X 0
++#define SENSOR_Y 1
++#define SENSOR_Z 2
++
++/* Structure to be passed to DMI_MATCH function */
++struct dmi_match_data {
++/* Indicates whether this computer has an accelerometer. */
++ int accelerometer;
++/* Indicates whether this computer has light sensors and keyboard backlight. */
++ int light;
++/* Indicates which temperature sensors set to use. */
++ int temperature_set;
++};
++
++static int debug = 0;
++static struct platform_device *pdev;
++static s16 rest_x;
++static s16 rest_y;
++static struct timer_list applesmc_timer;
++static struct input_dev *applesmc_idev;
++
++/* Indicates whether this computer has an accelerometer. */
++static unsigned int applesmc_accelerometer;
++
++/* Indicates whether this computer has light sensors and keyboard backlight. */
++static unsigned int applesmc_light;
++
++/* Indicates which temperature sensors set to use. */
++static unsigned int applesmc_temperature_set;
++
++static struct mutex applesmc_lock;
++
++/*
++ * __wait_status - Wait up to 100ms for the status port to get a certain value
++ * (masked with 0x0f), returning zero if the value is obtained. Callers must
++ * hold applesmc_lock.
++ */
++static int __wait_status(u8 val)
++{
++ unsigned int i;
++
++ val = val & APPLESMC_STATUS_MASK;
++
++ for (i = 0; i < 10000; i++) {
++ if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == val)
++ return 0;
++ udelay(10);
++ }
++
++ printk(KERN_WARNING "applesmc: wait status failed: %x != %x\n",
++ val, inb(APPLESMC_CMD_PORT));
++
++ return -EIO;
++}
++
++/*
++ * applesmc_read_key - reads len bytes from a given key, and put them in buffer.
++ * Returns zero on success or a negative error on failure. Callers must
++ * hold applesmc_lock.
++ */
++static int applesmc_read_key(const char* key, u8* buffer, u8 len)
++{
++ int ret = -EIO;
++ int i;
++
++ outb(APPLESMC_READ_CMD, APPLESMC_CMD_PORT);
++ if (__wait_status(0x0c))
++ goto out;
++
++ for (i = 0; i < 4; i++) {
++ outb(key[i], APPLESMC_DATA_PORT);
++ if (__wait_status(0x04))
++ goto out;
++ }
++ if (debug)
++ printk(KERN_DEBUG "<%s", key);
++
++ outb(len, APPLESMC_DATA_PORT);
++ if (debug)
++ printk(KERN_DEBUG ">%x", len);
++
++ for (i = 0; i < len; i++) {
++ if (__wait_status(0x05))
++ goto out;
++ buffer[i] = inb(APPLESMC_DATA_PORT);
++ if (debug)
++ printk(KERN_DEBUG "<%x", buffer[i]);
++ }
++ if (debug)
++ printk(KERN_DEBUG "\n");
++
++ ret = 0;
++
++out:
++ return ret;
++}
++
++/*
++ * applesmc_write_key - writes len bytes from buffer to a given key.
++ * Returns zero on success or a negative error on failure. Callers must
++ * hold applesmc_lock.
++ */
++static int applesmc_write_key(const char* key, u8* buffer, u8 len)
++{
++ int ret = -EIO;
++ int i;
++
++ outb(APPLESMC_WRITE_CMD, APPLESMC_CMD_PORT);
++ if (__wait_status(0x0c))
++ goto out;
++
++ for (i = 0; i < 4; i++) {
++ outb(key[i], APPLESMC_DATA_PORT);
++ if (__wait_status(0x04))
++ goto out;
++ }
++
++ outb(len, APPLESMC_DATA_PORT);
++
++ for (i = 0; i < len; i++) {
++ if (__wait_status(0x04))
++ goto out;
++ outb(buffer[i], APPLESMC_DATA_PORT);
++ }
++
++ ret = 0;
++out:
++ return ret;
++}
++
++/*
++ * applesmc_read_motion_sensor - Read motion sensor (X, Y or Z). Callers must
++ * hold applesmc_lock.
++ */
++static int applesmc_read_motion_sensor(int index, s16* value)
++{
++ u8 buffer[2];
++ int ret;
++
++ switch (index) {
++ case SENSOR_X:
++ ret = applesmc_read_key(MOTION_SENSOR_X_KEY, buffer, 2);
++ break;
++ case SENSOR_Y:
++ ret = applesmc_read_key(MOTION_SENSOR_Y_KEY, buffer, 2);
++ break;
++ case SENSOR_Z:
++ ret = applesmc_read_key(MOTION_SENSOR_Z_KEY, buffer, 2);
++ break;
++ default:
++ ret = -EINVAL;
++ }
++
++ *value = ((s16)buffer[0] << 8) | buffer[1];
++
++ return ret;
++}
++
++/*
++ * applesmc_device_init - initialize the accelerometer. Returns zero on success
++ * and negative error code on failure. Can sleep.
++ */
++static int applesmc_device_init(void)
++{
++ int total, ret = -ENXIO;
++ u8 buffer[2];
++
++ if (!applesmc_accelerometer)
++ return 0;
++
++ mutex_lock(&applesmc_lock);
++
++ for (total = INIT_TIMEOUT_MSECS; total > 0; total -= INIT_WAIT_MSECS) {
++ if (debug)
++ printk(KERN_DEBUG "applesmc try %d\n", total);
++ if (!applesmc_read_key(MOTION_SENSOR_KEY, buffer, 2) &&
++ (buffer[0] != 0x00 || buffer[1] != 0x00)) {
++ if (total == INIT_TIMEOUT_MSECS) {
++ printk(KERN_DEBUG "applesmc: device has"
++ " already been initialized"
++ " (0x%02x, 0x%02x).\n",
++ buffer[0], buffer[1]);
++ } else {
++ printk(KERN_DEBUG "applesmc: device"
++ " successfully initialized"
++ " (0x%02x, 0x%02x).\n",
++ buffer[0], buffer[1]);
++ }
++ ret = 0;
++ goto out;
++ }
++ buffer[0] = 0xe0;
++ buffer[1] = 0x00;
++ applesmc_write_key(MOTION_SENSOR_KEY, buffer, 2);
++ msleep(INIT_WAIT_MSECS);
++ }
++
++ printk(KERN_WARNING "applesmc: failed to init the device\n");
++
++out:
++ mutex_unlock(&applesmc_lock);
++ return ret;
++}
++
++/*
++ * applesmc_get_fan_count - get the number of fans. Callers must NOT hold
++ * applesmc_lock.
++ */
++static int applesmc_get_fan_count(void)
++{
++ int ret;
++ u8 buffer[1];
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(FANS_COUNT, buffer, 1);
++
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return buffer[0];
++}
++
++/* Device model stuff */
++static int applesmc_probe(struct platform_device *dev)
++{
++ int ret;
++
++ ret = applesmc_device_init();
++ if (ret)
++ return ret;
++
++ printk(KERN_INFO "applesmc: device successfully initialized.\n");
++ return 0;
++}
++
++static int applesmc_resume(struct platform_device *dev)
++{
++ return applesmc_device_init();
++}
++
++static struct platform_driver applesmc_driver = {
++ .probe = applesmc_probe,
++ .resume = applesmc_resume,
++ .driver = {
++ .name = "applesmc",
++ .owner = THIS_MODULE,
++ },
++};
++
++/*
++ * applesmc_calibrate - Set our "resting" values. Callers must
++ * hold applesmc_lock.
++ */
++static void applesmc_calibrate(void)
++{
++ applesmc_read_motion_sensor(SENSOR_X, &rest_x);
++ applesmc_read_motion_sensor(SENSOR_Y, &rest_y);
++}
++
++static void applesmc_mousedev_poll(unsigned long unused)
++{
++ s16 x, y;
++
++ /* Cannot sleep. Try nonblockingly. If we fail, try again later. */
++ if (!mutex_trylock(&applesmc_lock)) {
++ mod_timer(&applesmc_timer, jiffies + APPLESMC_POLL_PERIOD);
++ return;
++ }
++
++ if (applesmc_read_motion_sensor(SENSOR_X, &x))
++ goto out;
++ if (applesmc_read_motion_sensor(SENSOR_Y, &y))
++ goto out;
++
++ input_report_abs(applesmc_idev, ABS_X, x - rest_x);
++ input_report_abs(applesmc_idev, ABS_Y, y - rest_y);
++ input_sync(applesmc_idev);
++
++out:
++ mod_timer(&applesmc_timer, jiffies + APPLESMC_POLL_PERIOD);
++
++ mutex_unlock(&applesmc_lock);
++}
++
++/* Sysfs Files */
++
++static ssize_t applesmc_position_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ int ret;
++ s16 x, y, z;
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_motion_sensor(SENSOR_X, &x);
++ if (ret)
++ goto out;
++ ret = applesmc_read_motion_sensor(SENSOR_Y, &y);
++ if (ret)
++ goto out;
++ ret = applesmc_read_motion_sensor(SENSOR_Z, &z);
++ if (ret)
++ goto out;
++
++out:
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return sprintf(buf, "(%d,%d,%d)\n", x, y, z);
++}
++
++static ssize_t applesmc_light_show(struct device *dev,
++ struct device_attribute *attr, char *sysfsbuf)
++{
++ int ret;
++ u8 left = 0, right = 0;
++ u8 buffer[6];
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, 6);
++ left = buffer[2];
++ if (ret)
++ goto out;
++ ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, 6);
++ right = buffer[2];
++
++out:
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return sprintf(sysfsbuf, "(%d,%d)\n", left, right);
++}
++
++/* Displays degree Celsius * 100 */
++static ssize_t applesmc_show_temperature(struct device *dev,
++ struct device_attribute *devattr, char *sysfsbuf)
++{
++ int ret;
++ u8 buffer[2];
++ unsigned int temp;
++ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
++ const char* key =
++ temperature_sensors_sets[applesmc_temperature_set][attr->index];
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(key, buffer, 2);
++ temp = buffer[0]*100;
++ temp += (buffer[1] >> 6) * 25;
++
++ mutex_unlock(&applesmc_lock);
++
++ if (ret)
++ return ret;
++ else
++ return sprintf(sysfsbuf, "%u\n", temp);
++}
++
++static ssize_t applesmc_show_fan_speed(struct device *dev,
++ struct device_attribute *attr, char *sysfsbuf)
++{
++ int ret;
++ unsigned int speed = 0;
++ char newkey[5];
++ u8 buffer[2];
++ struct sensor_device_attribute_2 *sensor_attr =
++ to_sensor_dev_attr_2(attr);
++
++ newkey[0] = fan_speed_keys[sensor_attr->nr][0];
++ newkey[1] = '0' + sensor_attr->index;
++ newkey[2] = fan_speed_keys[sensor_attr->nr][2];
++ newkey[3] = fan_speed_keys[sensor_attr->nr][3];
++ newkey[4] = 0;
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(newkey, buffer, 2);
++ speed = ((buffer[0] << 8 | buffer[1]) >> 2);
++
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return sprintf(sysfsbuf, "%u\n", speed);
++}
++
++static ssize_t applesmc_store_fan_speed(struct device *dev,
++ struct device_attribute *attr,
++ const char *sysfsbuf, size_t count)
++{
++ int ret;
++ u32 speed;
++ char newkey[5];
++ u8 buffer[2];
++ struct sensor_device_attribute_2 *sensor_attr =
++ to_sensor_dev_attr_2(attr);
++
++ speed = simple_strtoul(sysfsbuf, NULL, 10);
++
++ if (speed > 0x4000) /* Bigger than a 14-bit value */
++ return -EINVAL;
++
++ newkey[0] = fan_speed_keys[sensor_attr->nr][0];
++ newkey[1] = '0' + sensor_attr->index;
++ newkey[2] = fan_speed_keys[sensor_attr->nr][2];
++ newkey[3] = fan_speed_keys[sensor_attr->nr][3];
++ newkey[4] = 0;
++
++ mutex_lock(&applesmc_lock);
++
++ buffer[0] = (speed >> 6) & 0xff;
++ buffer[1] = (speed << 2) & 0xff;
++ ret = applesmc_write_key(newkey, buffer, 2);
++
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return count;
++}
++
++static ssize_t applesmc_show_fan_manual(struct device *dev,
++ struct device_attribute *devattr, char *sysfsbuf)
++{
++ int ret;
++ u16 manual = 0;
++ u8 buffer[2];
++ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
++ manual = ((buffer[0] << 8 | buffer[1]) >> attr->index) & 0x01;
++
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return sprintf(sysfsbuf, "%d\n", manual);
++}
++
++static ssize_t applesmc_store_fan_manual(struct device *dev,
++ struct device_attribute *devattr,
++ const char *sysfsbuf, size_t count)
++{
++ int ret;
++ u8 buffer[2];
++ u32 input;
++ u16 val;
++ struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
++
++ input = simple_strtoul(sysfsbuf, NULL, 10);
++
++ mutex_lock(&applesmc_lock);
++
++ ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
++ val = (buffer[0] << 8 | buffer[1]);
++ if (ret)
++ goto out;
++
++ if (input)
++ val = val | (0x01 << attr->index);
++ else
++ val = val & ~(0x01 << attr->index);
++
++ buffer[0] = (val >> 8) & 0xFF;
++ buffer[1] = val & 0xFF;
++
++ ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
++
++out:
++ mutex_unlock(&applesmc_lock);
++ if (ret)
++ return ret;
++ else
++ return count;
++}
++
++static ssize_t applesmc_calibrate_show(struct device *dev,
++ struct device_attribute *attr, char *sysfsbuf)
++{
++ return sprintf(sysfsbuf, "(%d,%d)\n", rest_x, rest_y);
++}
++
++static ssize_t applesmc_calibrate_store(struct device *dev,
++ struct device_attribute *attr, const char *sysfsbuf, size_t count)
++{
++ mutex_lock(&applesmc_lock);
++ applesmc_calibrate();
++ mutex_unlock(&applesmc_lock);
++
++ return count;
++}
++
++static void applesmc_backlight_set(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ u8 buffer[2];
++
++ mutex_lock(&applesmc_lock);
++ buffer[0] = value;
++ buffer[1] = 0x00;
++ applesmc_write_key(BACKLIGHT_KEY, buffer, 2);
++ mutex_unlock(&applesmc_lock);
++}
++
++static struct led_classdev applesmc_backlight = {
++ .name = "smc:kbd_backlight",
++ .default_trigger = "nand-disk",
++ .brightness_set = applesmc_backlight_set,
++};
++
++static DEVICE_ATTR(position, 0444, applesmc_position_show, NULL);
++static DEVICE_ATTR(calibrate, 0644,
++ applesmc_calibrate_show, applesmc_calibrate_store);
++
++static DEVICE_ATTR(light, 0444, applesmc_light_show, NULL);
++
++/*
++ * Macro defining SENSOR_DEVICE_ATTR for a fan sysfs entries.
++ * - show actual speed
++ * - show/store minimum speed
++ * - show maximum speed
++ * - show safe speed
++ * - show/store target speed
++ * - show/store manual mode
++ */
++#define sysfs_fan_speeds_offset(offset) \
++static SENSOR_DEVICE_ATTR_2(fan##offset##_actual_speed, S_IRUGO, \
++ applesmc_show_fan_speed, NULL, 0, offset); \
++\
++static SENSOR_DEVICE_ATTR_2(fan##offset##_minimum_speed, S_IRUGO | S_IWUSR, \
++ applesmc_show_fan_speed, applesmc_store_fan_speed, 1, offset); \
++\
++static SENSOR_DEVICE_ATTR_2(fan##offset##_maximum_speed, S_IRUGO, \
++ applesmc_show_fan_speed, NULL, 2, offset); \
++\
++static SENSOR_DEVICE_ATTR_2(fan##offset##_safe_speed, S_IRUGO, \
++ applesmc_show_fan_speed, NULL, 3, offset); \
++\
++static SENSOR_DEVICE_ATTR_2(fan##offset##_target_speed, S_IRUGO | S_IWUSR, \
++ applesmc_show_fan_speed, applesmc_store_fan_speed, 4, offset); \
++\
++static SENSOR_DEVICE_ATTR(fan##offset##_manual, S_IRUGO | S_IWUSR, \
++ applesmc_show_fan_manual, applesmc_store_fan_manual, offset); \
++\
++static struct attribute *fan##offset##_attributes[] = { \
++ &sensor_dev_attr_fan##offset##_actual_speed.dev_attr.attr, \
++ &sensor_dev_attr_fan##offset##_minimum_speed.dev_attr.attr, \
++ &sensor_dev_attr_fan##offset##_maximum_speed.dev_attr.attr, \
++ &sensor_dev_attr_fan##offset##_safe_speed.dev_attr.attr, \
++ &sensor_dev_attr_fan##offset##_target_speed.dev_attr.attr, \
++ &sensor_dev_attr_fan##offset##_manual.dev_attr.attr, \
++ NULL \
++};
++
++/*
++ * Create the needed functions for each fan using the macro defined above
++ * (2 fans are supported)
++ */
++sysfs_fan_speeds_offset(0);
++sysfs_fan_speeds_offset(1);
++
++static const struct attribute_group fan_attribute_groups[] = {
++ { .attrs = fan0_attributes },
++ { .attrs = fan1_attributes }
++};
++
++/*
++ * Temperature sensors sysfs entries.
++ */
++static SENSOR_DEVICE_ATTR(temperature_0, S_IRUGO,
++ applesmc_show_temperature, NULL, 0);
++static SENSOR_DEVICE_ATTR(temperature_1, S_IRUGO,
++ applesmc_show_temperature, NULL, 1);
++static SENSOR_DEVICE_ATTR(temperature_2, S_IRUGO,
++ applesmc_show_temperature, NULL, 2);
++static SENSOR_DEVICE_ATTR(temperature_3, S_IRUGO,
++ applesmc_show_temperature, NULL, 3);
++static SENSOR_DEVICE_ATTR(temperature_4, S_IRUGO,
++ applesmc_show_temperature, NULL, 4);
++static SENSOR_DEVICE_ATTR(temperature_5, S_IRUGO,
++ applesmc_show_temperature, NULL, 5);
++static SENSOR_DEVICE_ATTR(temperature_6, S_IRUGO,
++ applesmc_show_temperature, NULL, 6);
++
++static struct attribute *temperature_attributes[] = {
++ &sensor_dev_attr_temperature_0.dev_attr.attr,
++ &sensor_dev_attr_temperature_1.dev_attr.attr,
++ &sensor_dev_attr_temperature_2.dev_attr.attr,
++ &sensor_dev_attr_temperature_3.dev_attr.attr,
++ &sensor_dev_attr_temperature_4.dev_attr.attr,
++ &sensor_dev_attr_temperature_5.dev_attr.attr,
++ &sensor_dev_attr_temperature_6.dev_attr.attr,
++};
++
++/* Module stuff */
++
++/*
++ * applesmc_dmi_match - found a match. return one, short-circuiting the hunt.
++ */
++static int applesmc_dmi_match(struct dmi_system_id *id)
++{
++ int i = 0;
++ struct dmi_match_data* dmi_data = id->driver_data;
++ printk(KERN_INFO "applesmc: %s detected:\n", id->ident);
++ applesmc_accelerometer = dmi_data->accelerometer;
++ printk(KERN_INFO "applesmc: - Model %s accelerometer\n",
++ applesmc_accelerometer ? "with" : "without");
++ applesmc_light = dmi_data->light;
++ printk(KERN_INFO "applesmc: - Model %s light sensors and backlight\n",
++ applesmc_light ? "with" : "without");
++
++ applesmc_temperature_set = dmi_data->temperature_set;
++ while (temperature_sensors_sets[applesmc_temperature_set][i] != NULL)
++ i++;
++ printk(KERN_INFO "applesmc: - Model with %d temperature sensors\n", i);
++ return 1;
++}
++
++/* Create accelerometer ressources */
++static int applesmc_create_accelerometer(void)
++{
++ int ret;
++
++ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_position.attr);
++ if (ret)
++ goto out;
++
++ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_calibrate.attr);
++ if (ret)
++ goto out;
++
++ applesmc_idev = input_allocate_device();
++ if (!applesmc_idev) {
++ ret = -ENOMEM;
++ goto out;
++ }
++
++ /* initial calibrate for the input device */
++ applesmc_calibrate();
++
++ /* initialize the input class */
++ applesmc_idev->name = "applesmc";
++ applesmc_idev->cdev.dev = &pdev->dev;
++ applesmc_idev->evbit[0] = BIT(EV_ABS);
++ input_set_abs_params(applesmc_idev, ABS_X,
++ -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
++ input_set_abs_params(applesmc_idev, ABS_Y,
++ -256, 256, APPLESMC_INPUT_FUZZ, APPLESMC_INPUT_FLAT);
++
++ input_register_device(applesmc_idev);
++
++ /* start up our timer for the input device */
++ init_timer(&applesmc_timer);
++ applesmc_timer.function = applesmc_mousedev_poll;
++ applesmc_timer.expires = jiffies + APPLESMC_POLL_PERIOD;
++ add_timer(&applesmc_timer);
++
++ return 0;
++
++out:
++ printk(KERN_WARNING "applesmc: driver init failed (ret=%d)!\n", ret);
++ return ret;
++}
++
++/* Release all ressources used by the accelerometer */
++static void applesmc_release_accelerometer(void)
++{
++ del_timer_sync(&applesmc_timer);
++ input_unregister_device(applesmc_idev);
++}
++
++static __initdata struct dmi_match_data applesmc_dmi_data[] = {
++/* MacBook Pro: accelerometer, backlight and temperature set 0 */
++ { .accelerometer = 1, .light = 1, .temperature_set = 0 },
++/* MacBook: accelerometer and temperature set 0 */
++ { .accelerometer = 1, .light = 0, .temperature_set = 0 },
++/* MacBook: temperature set 1 */
++ { .accelerometer = 0, .light = 0, .temperature_set = 1 }
++};
++
++/* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
++ * So we need to put "Apple MacBook Pro" before "Apple MacBook". */
++static __initdata struct dmi_system_id applesmc_whitelist[] = {
++ { applesmc_dmi_match, "Apple MacBook Pro", {
++ DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME,"MacBookPro") },
++ (void*)&applesmc_dmi_data[0]},
++ { applesmc_dmi_match, "Apple MacBook", {
++ DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME,"MacBook") },
++ (void*)&applesmc_dmi_data[1]},
++ { applesmc_dmi_match, "Apple Macmini", {
++ DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
++ DMI_MATCH(DMI_PRODUCT_NAME,"Macmini") },
++ (void*)&applesmc_dmi_data[2]},
++ { .ident = NULL }
++};
++
++static int __init applesmc_init(void)
++{
++ int ret;
++ int count;
++ int i;
++
++ mutex_init(&applesmc_lock);
++
++ if (!dmi_check_system(applesmc_whitelist)) {
++ printk(KERN_WARNING "applesmc: supported laptop not found!\n");
++ ret = -ENODEV;
++ goto out;
++ }
++
++ if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
++ "applesmc")) {
++ ret = -ENXIO;
++ goto out;
++ }
++
++ ret = platform_driver_register(&applesmc_driver);
++ if (ret)
++ goto out_region;
++
++ pdev = platform_device_register_simple("applesmc", -1, NULL, 0);
++ if (IS_ERR(pdev)) {
++ ret = PTR_ERR(pdev);
++ goto out_driver;
++ }
++
++ /* create fan files */
++ count = applesmc_get_fan_count();
++ if (count < 0) {
++ printk(KERN_ERR "applesmc: Cannot get the number of fans.\n");
++ } else {
++ printk(KERN_INFO "applesmc: %d fans found.\n", count);
++
++ switch (count) {
++ default:
++ printk(KERN_WARNING "applesmc: More than 2 fans found,"
++ " but at most 2 fans are supported"
++ " by the driver.\n");
++ case 2:
++ ret = sysfs_create_group(&pdev->dev.kobj,
++ &fan_attribute_groups[1]);
++ if (ret)
++ goto out_device;
++ case 1:
++ ret = sysfs_create_group(&pdev->dev.kobj,
++ &fan_attribute_groups[0]);
++ if (ret)
++ goto out_device;
++ case 0:
++ ;
++ }
++ }
++
++ for (i = 0;
++ temperature_sensors_sets[applesmc_temperature_set][i] != NULL;
++ i++) {
++ ret = sysfs_create_file(&pdev->dev.kobj,
++ temperature_attributes[i]);
++ if (ret)
++ goto out_device;
++ }
++
++ if (applesmc_accelerometer) {
++ ret = applesmc_create_accelerometer();
++ if (ret)
++ goto out_device;
++ }
++
++ if (applesmc_light) {
++ /* Add light sensor file */
++ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_light.attr);
++ if (ret)
++ goto out_accelerometer;
++
++ /* register as a led device */
++ ret = led_classdev_register(&pdev->dev, &applesmc_backlight);
++ if (ret < 0)
++ goto out_accelerometer;
++ }
++
++ printk(KERN_INFO "applesmc: driver successfully loaded.\n");
++ return 0;
++
++out_accelerometer:
++ if (applesmc_accelerometer)
++ applesmc_release_accelerometer();
++out_device:
++ platform_device_unregister(pdev);
++out_driver:
++ platform_driver_unregister(&applesmc_driver);
++out_region:
++ release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
++out:
++ printk(KERN_WARNING "applesmc: driver init failed (ret=%d)!\n", ret);
++ return ret;
++}
++
++static void __exit applesmc_exit(void)
++{
++ if (applesmc_light)
++ led_classdev_unregister(&applesmc_backlight);
++ if (applesmc_accelerometer)
++ applesmc_release_accelerometer();
++ platform_device_unregister(pdev);
++ platform_driver_unregister(&applesmc_driver);
++ release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
++
++ printk(KERN_INFO "applesmc: driver unloaded.\n");
++}
++
++module_init(applesmc_init);
++module_exit(applesmc_exit);
++
++MODULE_AUTHOR("Nicolas Boichat");
++MODULE_DESCRIPTION("Apple SMC");
++MODULE_LICENSE("GPL v2");
Added: trunk/kernel/mactel-patches-2.6.20/0003-applesmc_joydev.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0003-applesmc_joydev.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0003-applesmc_joydev.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,30 @@
+Fix y axis on applesmc input device.
+
+From: Nicolas Boichat <ni...@bo...>
+
+
+---
+
+ drivers/hwmon/applesmc.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
+index 4060667..581ed3e 100644
+--- a/drivers/hwmon/applesmc.c
++++ b/drivers/hwmon/applesmc.c
+@@ -349,6 +349,7 @@ static void applesmc_calibrate(void)
+ {
+ applesmc_read_motion_sensor(SENSOR_X, &rest_x);
+ applesmc_read_motion_sensor(SENSOR_Y, &rest_y);
++ rest_x = -rest_x;
+ }
+
+ static void applesmc_mousedev_poll(unsigned long unused)
+@@ -366,6 +367,7 @@ static void applesmc_mousedev_poll(unsigned long unused)
+ if (applesmc_read_motion_sensor(SENSOR_Y, &y))
+ goto out;
+
++ x = -x;
+ input_report_abs(applesmc_idev, ABS_X, x - rest_x);
+ input_report_abs(applesmc_idev, ABS_Y, y - rest_y);
+ input_sync(applesmc_idev);
Added: trunk/kernel/mactel-patches-2.6.20/0004-appletouch.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0004-appletouch.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0004-appletouch.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,23 @@
+Appletouch driver ATP_THRESHOLD fix.
+
+From: Ortwin Glück <od...@od...>
+
+
+---
+
+ drivers/usb/input/appletouch.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/usb/input/appletouch.c b/drivers/usb/input/appletouch.c
+index c77291d..155f18e 100644
+--- a/drivers/usb/input/appletouch.c
++++ b/drivers/usb/input/appletouch.c
+@@ -127,7 +127,7 @@ MODULE_DEVICE_TABLE (usb, atp_table);
+ * Threshold for the touchpad sensors. Any change less than ATP_THRESHOLD is
+ * ignored.
+ */
+-#define ATP_THRESHOLD 5
++#define ATP_THRESHOLD 3
+
+ /* MacBook Pro (Geyser 3 & 4) initialization constants */
+ #define ATP_GEYSER3_MODE_READ_REQUEST_ID 1
Added: trunk/kernel/mactel-patches-2.6.20/0005-sigmatel_audio.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0005-sigmatel_audio.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0005-sigmatel_audio.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,55 @@
+Fix audio on Macbook Pro, Macbook & Macmini.
+
+From: Nicolas Boichat <ni...@bo...>
+
+
+---
+
+ sound/pci/hda/patch_sigmatel.c | 30 +++++++++++++++++++++++++++++-
+ 1 files changed, 29 insertions(+), 1 deletions(-)
+
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index fe51ef3..a29ff8e 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -364,11 +364,39 @@ static unsigned int d945gtp5_pin_configs[10] = {
+ 0x02a19320, 0x40000100,
+ };
+
++/* Microphone working, but no front (old Bootcamp, proto2.ini) */
++/*static unsigned int macmini_pin_configs[10] = {
++ 0x0121E230, 0x90A70120, 0x9017E110, 0x400000FE,
++ 0x400000FD, 0x0181E021, 0x1145E040, 0x400000FA,
++ 0x400000FC, 0x400000FB
++};*/
++
++/* Microphone working, but no front (old Bootcamp, proto.ini) */
++/*static unsigned int macmini_pin_configs[10] = {
++ 0x0121E220, 0x400000FF, 0x9017E110, 0x400000FE,
++ 0x400000FD, 0x0181E040, 0x1145E030, 0x11C5E040,
++ 0x400000FC, 0x400000FB
++};*/
++
++/* Jason's working pins */
++/*static unsigned int macmini_pin_configs[10] = {
++ 0x0321E230, 0x03A1E020, 0x9017E110, 0x400000FD,
++ 0x400000FE, 0x0381E021, 0x1345E240, 0x13C5E22E,
++ 0x400000FC, 0x400000FB,
++};*/
++
++/* Nicolas' working pins, map unmapped pins from Jason's pins with the default */
++static unsigned int macmini_pin_configs[10] = {
++ 0x0321E230, 0x03A1E020, 0x9017E110, 0x01014010,
++ 0x01a19021, 0x0381E021, 0x1345E240, 0x13C5E22E,
++ 0x02a19320, 0x400000FB,
++};
++
+ static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
+ [STAC_REF] = ref922x_pin_configs,
+ [STAC_D945GTP3] = d945gtp3_pin_configs,
+ [STAC_D945GTP5] = d945gtp5_pin_configs,
+- [STAC_MACMINI] = d945gtp5_pin_configs,
++ [STAC_MACMINI] = macmini_pin_configs,
+ };
+
+ static struct hda_board_config stac922x_cfg_tbl[] = {
Added: trunk/kernel/mactel-patches-2.6.20/0006-appleir.patch
===================================================================
--- trunk/kernel/mactel-patches-2.6.20/0006-appleir.patch (rev 0)
+++ trunk/kernel/mactel-patches-2.6.20/0006-appleir.patch 2007-03-24 18:06:03 UTC (rev 94)
@@ -0,0 +1,435 @@
+Apple IR patch.
+
+From: James McKenzie <ma...@ma...>
+
+
+---
+
+ drivers/usb/input/Kconfig | 4
+ drivers/usb/input/Makefile | 1
+ drivers/usb/input/appleir.c | 390 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 395 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/usb/input/Kconfig b/drivers/usb/input/Kconfig
+index c7d8875..fa28ac6 100644
+--- a/drivers/usb/input/Kconfig
++++ b/drivers/usb/input/Kconfig
+@@ -173,6 +173,10 @@ config USB_ACECAD
+ To compile this driver as a module, choose M here: the
+ module will be called acecad.
+
++config USB_APPLEIR
++ tristate "Apple Mac Mini USB IR receiver (built in)"
++ depends on USB && INPUT
++
+ config USB_KBTAB
+ tristate "KB Gear JamStudio tablet support"
+ depends on USB && INPUT
+diff --git a/drivers/usb/input/Makefile b/drivers/usb/input/Makefile
+index 1a24b5b..704f4fb 100644
+--- a/drivers/usb/input/Makefile
++++ b/drivers/usb/input/Makefile
+@@ -33,6 +33,7 @@ obj-$(CONFIG_USB_ATI_REMOTE2) += ati_remote2.o
+ obj-$(CONFIG_USB_HID) += usbhid.o
+ obj-$(CONFIG_USB_KBD) += usbkbd.o
+ obj-$(CONFIG_USB_KBTAB) += kbtab.o
++obj-$(CONFIG_USB_APPLEIR) += appleir.o
+ obj-$(CONFIG_USB_KEYSPAN_REMOTE) += keyspan_remote.o
+ obj-$(CONFIG_USB_MOUSE) += usbmouse.o
+ obj-$(CONFIG_USB_MTOUCH) += mtouchusb.o
+diff --git a/drivers/usb/input/appleir.c b/drivers/usb/input/appleir.c
+new file mode 100644
+index 0000000..dc5f604
+--- /dev/null
++++ b/drivers/usb/input/appleir.c
+@@ -0,0 +1,390 @@
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/input.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/usb.h>
++#include <linux/usb/input.h>
++#include <asm/unaligned.h>
++#include <asm/byteorder.h>
++
++/*
++ * Version Information
++ *
++ */
++
++#if 0
++#define DUMP_PACKETS
++#else
++#undef DUMP_PACKETS
++#endif
++
++#define DRIVER_VERSION "v1.1"
++#define DRIVER_AUTHOR "James McKenzie"
++#define DRIVER_DESC "USB Apple MacMini IR Receiver driver"
++#define DRIVER_LICENSE "GPL"
++
++MODULE_AUTHOR (DRIVER_AUTHOR);
++MODULE_DESCRIPTION (DRIVER_DESC);
++MODULE_LICENSE (DRIVER_LICENSE);
++
++#ifndef USB_VENDOR_ID_APPLE
++#define USB_VENDOR_ID_APPLE 0x05ac
++#endif
++#ifndef USB_DEVICE_ID_APPLE_IR
++#define USB_DEVICE_ID_APPLE_IR 0x8240
++#endif
++
++#define URB_SIZE 32
++
++#define MAX_KEYS 8
++#define MAX_KEYS_MASK (MAX_KEYS - 1 )
++
++struct appleir
++{
++ struct input_dev *dev;
++ uint8_t *data;
++ dma_addr_t dma_buf;
++ struct usb_device *usbdev;
++ struct urb *urb;
++ int timer_initted;
++ struct timer_list key_up_timer;
++ int current_key;
++ char phys[32];
++};
++
++
++static struct usb_device_id appleir_ids[] = {
++ {USB_DEVICE (USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IR),.driver_info = 0},
++ {}
++};
++
++MODULE_DEVICE_TABLE (usb, appleir_ids);
++
++
++/* I have two devices both of which report the following */
++/* 25 87 ee 83 0a + */
++/* 25 87 ee 83 0c - */
++/* 25 87 ee 83 09 << */
++/* 25 87 ee 83 06 >> */
++/* 25 87 ee 83 05 >" */
++/* 25 87 ee 83 03 menu */
++/* 26 00 00 00 00 for key repeat*/
++
++/* Thomas Glanzmann reports the following responses */
++/* 25 87 ee ca 0b + */
++/* 25 87 ee ca 0d - */
++/* 25 87 ee ca 08 << */
++/* 25 87 ee ca 07 >> */
++/* 25 87 ee ca 04 >" */
++/* 25 87 ee ca 02 menu */
++/* 26 00 00 00 00 for key repeat*/
++/* He also observes the following event sometimes */
++/* sent after a key is release, which I interpret */
++/* as a flat battery message */
++/* 25 87 e0 ca 06 flat battery */
++
++
++static int keymap[MAX_KEYS] = {
++ KEY_RESERVED, KEY_MENU,
++ KEY_PLAYPAUSE, KEY_NEXTSONG,
++ KEY_PREVIOUSSONG, KEY_VOLUMEUP,
++ KEY_VOLUMEDOWN, KEY_RESERVED
++};
++
++static void
++dump_packet (struct appleir *appleir, char *msg, uint8_t * data, int len)
++{
++ int i;
++
++ printk (KERN_ERR "appleir: %s (%d bytes)", msg, len);
++
++ for (i = 0; i < len; ++i)
++ {
++ printk (" %02x", data[i]);
++ }
++
++ printk ("\n");
++}
++
++
++static void
++key_up (struct appleir *appleir, int key)
++{
++ //printk (KERN_ERR "key %d up\n", key);
++ input_report_key (appleir->dev, key, 0);
++ input_sync (appleir->dev);
++}
++
++static void
++key_down (struct appleir *appleir, int key)
++{
++ //printk (KERN_ERR "key %d down\n", key);
++ input_report_key (appleir->dev, key, 1);
++ input_sync (appleir->dev);
++}
++
++static void
++battery_flat (struct appleir *appleir)
++{
++ printk (KERN_ERR "appleir: possible flat battery?\n");
++}
++
++static void
++key_up_tick (unsigned long data)
++{
++ struct appleir *appleir = (struct appleir *) data;
++
++ if (appleir->current_key)
++ {
++ key_up (appleir, appleir->current_key);
++ appleir->current_key = 0;
++ }
++}
++
++static void
++new_data (struct appleir *appleir, uint8_t * data, int len)
++{
++ static const uint8_t keydown[] = { 0x25, 0x87, 0xee };
++ static const uint8_t keyrepeat[] = { 0x26, 0x00, 0x00, 0x00, 0x00 };
++ static const uint8_t flatbattery[] = { 0x25, 0x87, 0xe0 };
++
++#ifdef DUMP_PACKETS
++ dump_packet (appleir, "received", data, len);
++#endif
++
++ if (len != 5)
++ return;
++
++ if (!memcmp (data, keydown, sizeof (keydown)))
++ {
++ /*If we already have a key down, take it up before marking */
++ /*this one down */
++ if (appleir->current_key)
++ key_up (appleir, appleir->current_key);
++ appleir->current_key = keymap[(data[4] >> 1) & MAX_KEYS_MASK];
++
++ key_down (appleir, appleir->current_key);
++ /*remote doesn't do key up, either pull them up, in the test */
++ /*above, or here set a timer which pulls them up after 1/8 s */
++ mod_timer (&appleir->key_up_timer, jiffies + HZ / 8);
++
++ return;
++ }
++
++ if (!memcmp (data, keyrepeat, sizeof (keyrepeat)))
++ {
++ key_down (appleir, appleir->current_key);
++ /*remote doesn't do key up, either pull them up, in the test */
++ /*above, or here set a timer which pulls them up after 1/8 s */
++ mod_timer (&appleir->key_up_timer, jiffies + HZ / 8);
++ return;
++ }
++
++ if (!memcmp (data, flatbattery, sizeof (flatbattery)))
++ {
++ battery_flat (appleir);
++ /*Fall through */
++ }
++
++ dump_packet (appleir, "unknown packet", data, len);
++}
++
++static void
++appleir_urb (struct urb *urb, struct pt_regs *regs)
++{
++ struct appleir *appleir = urb->context;
++ int retval;
++
++ switch (urb->status)
++ {
++ case 0:
++ new_data (appleir, urb->transfer_buffer, urb->actual_length);
++ break;
++ case -ECONNRESET:
++ case -ENOENT:
++ case -ESHUTDOWN:
++ /* this urb is terminated, clean up */
++ dbg ("%s - urb shutting down with status: %d", __FUNCTION__,
++ urb->status);
++ return;
++ default:
++ dbg ("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
++ }
++
++ retval = usb_submit_urb (urb, GFP_ATOMIC);
++ if (retval)
++ err ("%s - usb_submit_urb failed with result %d", __FUNCTION__, retval);
++}
++
++
++static int
++appleir_open (struct input_dev *dev)
++{
++ struct appleir *appleir = dev->private;
++
++ //appleir->urb->dev = appleir->usbdev;
++
++ if (usb_submit_urb (appleir->urb, GFP_KERNEL))
++ return -EIO;
++
++ return 0;
++}
++
++static void
++appleir_close (struct input_dev *dev)
++{
++ struct appleir *appleir = dev->private;
++ usb_kill_urb (appleir->urb);
++ del_timer_sync (&appleir->key_up_timer);
++}
++
++
++
++
++static int
++appleir_probe (struct usb_interface *intf, const struct usb_device_id *id)
++{
++ struct usb_device *dev = interface_to_usbdev (intf);
++ struct usb_endpoint_descriptor *endpoint;
++ struct appleir *appleir = NULL;
++ struct input_dev *input_dev;
++ int i;
++
++ appleir = kzalloc (sizeof (struct appleir), GFP_KERNEL);
++ if (!appleir)
++ goto fail;
++
++ memset (appleir, 0, sizeof (struct appleir));
++
++
++ appleir->data =
++ usb_buffer_alloc (dev, URB_SIZE, GFP_KERNEL, &appleir->dma_buf);
++ if (!appleir->data)
++ goto fail;
++
++ appleir->urb = usb_alloc_urb (0, GFP_KERNEL);
++ if (!appleir->urb)
++ goto fail;
++
++ appleir->usbdev = dev;
++
++ input_dev = input_allocate_device ();
++ if (!input_dev)
++ goto fail;
++
++ appleir->dev = input_dev;
++
++
++ usb_make_path (dev, appleir->phys, sizeof (appleir->phys));
++ strlcpy (appleir->phys, "/input0", sizeof (appleir->phys));
++
++ input_dev->name = "Apple Mac mini infrared remote control driver";
++ input_dev->phys = appleir->phys;
++ usb_to_input_i...
[truncated message content] |