badcode.asl revision 1.1 1 1.1 jruoho /*
2 1.1 jruoho * badcode.asl
3 1.1 jruoho *
4 1.1 jruoho * This file contains examples of the extended error checking and
5 1.1 jruoho * typechecking capabilities of the iASL compiler. Other ASL compilers
6 1.1 jruoho * may ignore these errors completely. Note - this is not an exhaustive
7 1.1 jruoho * list of errors detected by iASL, it shows many of the errors that
8 1.1 jruoho * are not detected by other ASL compilers.
9 1.1 jruoho *
10 1.1 jruoho * To compile, use:
11 1.1 jruoho * iasl badcode.asl
12 1.1 jruoho */
13 1.1 jruoho DefinitionBlock ("badcode.aml", "DSDT", 1, "Intel", "Example", 0x00000001)
14 1.1 jruoho {
15 1.1 jruoho Name (INT1, 0)
16 1.1 jruoho Name (BUF1, Buffer() {0,1,2,3})
17 1.1 jruoho Event (EVT1)
18 1.1 jruoho
19 1.1 jruoho // Invalid SyncLevel in Mutex declaration
20 1.1 jruoho
21 1.1 jruoho Mutex (MTX1, 32)
22 1.1 jruoho
23 1.1 jruoho // Integer beyond the table integer size (32 bits)
24 1.1 jruoho
25 1.1 jruoho Name (BIG, 0x1234567887654321)
26 1.1 jruoho
27 1.1 jruoho // CPackage length does not match initializer list length
28 1.1 jruoho
29 1.1 jruoho Name (PKG1, Package(5) {0,1})
30 1.1 jruoho
31 1.1 jruoho // Inadvertent use of single backslash in a string
32 1.1 jruoho
33 1.1 jruoho Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
34 1.1 jruoho
35 1.1 jruoho // Invalid hex escape sequence
36 1.1 jruoho
37 1.1 jruoho Name (ESC1, "abcdefg\x00hijklmn")
38 1.1 jruoho
39 1.1 jruoho // Field access beyond region bounds
40 1.1 jruoho
41 1.1 jruoho OperationRegion (OPR1, SystemMemory, 0x2000, 6)
42 1.1 jruoho Field (OPR1, DWordAcc, NoLock, Preserve)
43 1.1 jruoho {
44 1.1 jruoho Offset (4),
45 1.1 jruoho FLD1, 8
46 1.1 jruoho }
47 1.1 jruoho
48 1.1 jruoho // Some address spaces support only ByteAcc or BufferAcc
49 1.1 jruoho
50 1.1 jruoho OperationRegion (OPR2, EmbeddedControl, 0x4000, 8)
51 1.1 jruoho Field (OPR2, DWordAcc, NoLock, Preserve)
52 1.1 jruoho {
53 1.1 jruoho FLD2, 8
54 1.1 jruoho }
55 1.1 jruoho OperationRegion (OPR3, SMBus, 0x8000, 16)
56 1.1 jruoho Field (OPR3, WordAcc, NoLock, Preserve)
57 1.1 jruoho {
58 1.1 jruoho FLD3, 8
59 1.1 jruoho }
60 1.1 jruoho
61 1.1 jruoho // Invalid SyncLevel in method declaration
62 1.1 jruoho
63 1.1 jruoho Method (MTH1, 0, NotSerialized, 32)
64 1.1 jruoho {
65 1.1 jruoho // Invalid arguments and uninitialized locals
66 1.1 jruoho
67 1.1 jruoho Store (Arg3, Local0)
68 1.1 jruoho Store (Local1, Local2)
69 1.1 jruoho
70 1.1 jruoho // Parameter typechecking (MTX1 is invalid type)
71 1.1 jruoho
72 1.1 jruoho Subtract (MTX1, 4, Local3)
73 1.1 jruoho
74 1.1 jruoho // Various invalid parameters
75 1.1 jruoho
76 1.1 jruoho CreateField (BUF1, 0, Subtract (4, 4), FLD1)
77 1.1 jruoho
78 1.1 jruoho // Unchecked mutex and event timeouts
79 1.1 jruoho
80 1.1 jruoho Acquire (MTX1, 100)
81 1.1 jruoho Wait (EVT1, 1)
82 1.1 jruoho
83 1.1 jruoho // Result from operation is not used - statement has no effect
84 1.1 jruoho
85 1.1 jruoho Add (INT1, 8)
86 1.1 jruoho
87 1.1 jruoho // Unreachable code
88 1.1 jruoho
89 1.1 jruoho Return (0)
90 1.1 jruoho Store (5, INT1)
91 1.1 jruoho }
92 1.1 jruoho
93 1.1 jruoho Method (MTH2)
94 1.1 jruoho {
95 1.1 jruoho // Switch with no Case statements
96 1.1 jruoho
97 1.1 jruoho Switch (ToInteger (INT1))
98 1.1 jruoho {
99 1.1 jruoho Default
100 1.1 jruoho {
101 1.1 jruoho }
102 1.1 jruoho }
103 1.1 jruoho
104 1.1 jruoho if (LEqual (INT1, 0))
105 1.1 jruoho {
106 1.1 jruoho Return (INT1)
107 1.1 jruoho }
108 1.1 jruoho
109 1.1 jruoho // Fallthrough exit path does not return a value
110 1.1 jruoho }
111 1.1 jruoho
112 1.1 jruoho Method (MTH3)
113 1.1 jruoho {
114 1.1 jruoho // Method MTH2 above does not always return a value
115 1.1 jruoho
116 1.1 jruoho Store (MTH2 (), Local0)
117 1.1 jruoho }
118 1.1 jruoho
119 1.1 jruoho // Invalid _HID value
120 1.1 jruoho
121 1.1 jruoho Name (_HID, "*PNP0C0A")
122 1.1 jruoho
123 1.1 jruoho // Predefined Name typechecking
124 1.1 jruoho
125 1.1 jruoho Name (_PRW, 4)
126 1.1 jruoho Name (_FDI, Buffer () {0})
127 1.1 jruoho
128 1.1 jruoho // Predefined Name argument count validation
129 1.1 jruoho // and return value validation
130 1.1 jruoho
131 1.1 jruoho Method (_OSC, 5)
132 1.1 jruoho {
133 1.1 jruoho }
134 1.1 jruoho
135 1.1 jruoho // Predefined Names that must be implemented as control methods
136 1.1 jruoho
137 1.1 jruoho Name (_L01, 1)
138 1.1 jruoho Name (_E02, 2)
139 1.1 jruoho Name (_Q03, 3)
140 1.1 jruoho Name (_ON, 0)
141 1.1 jruoho Name (_INI, 1)
142 1.1 jruoho Name (_PTP, 2)
143 1.1 jruoho
144 1.1 jruoho /*
145 1.1 jruoho * Resource Descriptor error checking
146 1.1 jruoho */
147 1.1 jruoho Name (RSC1, ResourceTemplate ()
148 1.1 jruoho {
149 1.1 jruoho // Illegal nested StartDependent macros
150 1.1 jruoho
151 1.1 jruoho StartDependentFn (0, 0)
152 1.1 jruoho {
153 1.1 jruoho StartDependentFn (0, 0)
154 1.1 jruoho {
155 1.1 jruoho }
156 1.1 jruoho }
157 1.1 jruoho
158 1.1 jruoho // Missing EndDependentFn macro
159 1.1 jruoho })
160 1.1 jruoho
161 1.1 jruoho Name (RSC2, ResourceTemplate ()
162 1.1 jruoho {
163 1.1 jruoho // AddressMin is larger than AddressMax
164 1.1 jruoho IO (Decode16,
165 1.1 jruoho 0x07D0, // Range Minimum
166 1.1 jruoho 0x03E8, // Range Maximum
167 1.1 jruoho 0x01, // Alignment
168 1.1 jruoho 0x20, // Length
169 1.1 jruoho )
170 1.1 jruoho
171 1.1 jruoho // Length larger than Min/Max window size
172 1.1 jruoho Memory32 (ReadOnly,
173 1.1 jruoho 0x00001000, // Range Minimum
174 1.1 jruoho 0x00002000, // Range Maximum
175 1.1 jruoho 0x00000004, // Alignment
176 1.1 jruoho 0x00002000, // Length
177 1.1 jruoho )
178 1.1 jruoho
179 1.1 jruoho // Min and Max not multiples of alignment value
180 1.1 jruoho Memory32 (ReadOnly,
181 1.1 jruoho 0x00001001, // Range Minimum
182 1.1 jruoho 0x00002002, // Range Maximum
183 1.1 jruoho 0x00000004, // Alignment
184 1.1 jruoho 0x00000200, // Length
185 1.1 jruoho )
186 1.1 jruoho
187 1.1 jruoho // 10-bit ISA I/O address has a max of 0x3FF
188 1.1 jruoho FixedIO (
189 1.1 jruoho 0xFFFF, // Address
190 1.1 jruoho 0x20, // Length
191 1.1 jruoho )
192 1.1 jruoho
193 1.1 jruoho // Invalid AccessSize parameter
194 1.1 jruoho Register (SystemIO,
195 1.1 jruoho 0x08, // Bit Width
196 1.1 jruoho 0x00, // Bit Offset
197 1.1 jruoho 0x0000000000000100, // Address
198 1.1 jruoho 0x05 // Access Size
199 1.1 jruoho )
200 1.1 jruoho
201 1.1 jruoho // Invalid ResourceType (0xB0)
202 1.1 jruoho QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
203 1.1 jruoho 0x0000, // Granularity
204 1.1 jruoho 0xA000, // Range Minimum
205 1.1 jruoho 0xBFFF, // Range Maximum
206 1.1 jruoho 0x0000, // Translation Offset
207 1.1 jruoho 0x2000, // Length
208 1.1 jruoho ,, )
209 1.1 jruoho
210 1.1 jruoho // AddressMin is larger than AddressMax
211 1.1 jruoho WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
212 1.1 jruoho 0x0000, // Granularity
213 1.1 jruoho 0x0200, // Range Minimum
214 1.1 jruoho 0x0100, // Range Maximum
215 1.1 jruoho 0x0000, // Translation Offset
216 1.1 jruoho 0x0100, // Length
217 1.1 jruoho ,, , TypeStatic)
218 1.1 jruoho
219 1.1 jruoho // Length larger than Min/Max window size
220 1.1 jruoho DWordSpace (0xC3, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
221 1.1 jruoho 0x00000000, // Granularity
222 1.1 jruoho 0x000C8000, // Range Minimum
223 1.1 jruoho 0x000C9000, // Range Maximum
224 1.1 jruoho 0x00000000, // Translation Offset
225 1.1 jruoho 0x00001002, // Length
226 1.1 jruoho ,, )
227 1.1 jruoho
228 1.1 jruoho // Granularity must be (power-of-two -1)
229 1.1 jruoho DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxNotFixed, NonCacheable, ReadWrite,
230 1.1 jruoho 0x00000010,
231 1.1 jruoho 0x40000000,
232 1.1 jruoho 0xFED9FFFF,
233 1.1 jruoho 0x00000000,
234 1.1 jruoho 0xBECA0000)
235 1.1 jruoho
236 1.1 jruoho // Address Min (with zero length) not on granularity boundary
237 1.1 jruoho QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
238 1.1 jruoho 0x0000000000000003, // Granularity
239 1.1 jruoho 0x0000000000000B02, // Range Minimum
240 1.1 jruoho 0x0000000000000C00, // Range Maximum
241 1.1 jruoho 0x0000000000000000, // Translation Offset
242 1.1 jruoho 0x0000000000000000, // Length
243 1.1 jruoho ,, , TypeStatic)
244 1.1 jruoho
245 1.1 jruoho // Address Max (with zero length) not on (granularity boundary -1)
246 1.1 jruoho QWordMemory (ResourceProducer, PosDecode, MinNotFixed, MaxFixed, Cacheable, ReadWrite,
247 1.1 jruoho 0x0000000000000001, // Granularity
248 1.1 jruoho 0x0000000000100000, // Range Minimum
249 1.1 jruoho 0x00000000002FFFFE, // Range Maximum
250 1.1 jruoho 0x0000000000000000, // Translation Offset
251 1.1 jruoho 0x0000000000000000, // Length
252 1.1 jruoho ,, , AddressRangeMemory, TypeStatic)
253 1.1 jruoho
254 1.1 jruoho // Invalid combination: zero length, both Min and Max are fixed
255 1.1 jruoho DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
256 1.1 jruoho 0x00000000, // Granularity
257 1.1 jruoho 0x000C8000, // Range Minimum
258 1.1 jruoho 0x000C8FFF, // Range Maximum
259 1.1 jruoho 0x00000000, // Translation Offset
260 1.1 jruoho 0x00000000, // Length
261 1.1 jruoho ,, )
262 1.1 jruoho
263 1.1 jruoho // Invalid combination: non-zero length, Min Fixed, Max not fixed
264 1.1 jruoho DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
265 1.1 jruoho 0x00000001, // Granularity
266 1.1 jruoho 0x000C8000, // Range Minimum
267 1.1 jruoho 0x000C8FFF, // Range Maximum
268 1.1 jruoho 0x00000000, // Translation Offset
269 1.1 jruoho 0x00000100, // Length
270 1.1 jruoho ,, )
271 1.1 jruoho
272 1.1 jruoho // Invalid combination: non-zero length, Min not Fixed, Max fixed
273 1.1 jruoho DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
274 1.1 jruoho 0x00000001, // Granularity
275 1.1 jruoho 0x000C8000, // Range Minimum
276 1.1 jruoho 0x000C8FFF, // Range Maximum
277 1.1 jruoho 0x00000000, // Translation Offset
278 1.1 jruoho 0x00000200, // Length
279 1.1 jruoho ,, )
280 1.1 jruoho
281 1.1 jruoho // Granularity must be zero if non-zero length, min/max fixed
282 1.1 jruoho DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
283 1.1 jruoho 0x0000000F, // Granularity
284 1.1 jruoho 0x000C8000, // Range Minimum
285 1.1 jruoho 0x000C8FFF, // Range Maximum
286 1.1 jruoho 0x00000000, // Translation Offset
287 1.1 jruoho 0x00001000, // Length
288 1.1 jruoho ,, )
289 1.1 jruoho
290 1.1 jruoho // Missing StartDependentFn macro
291 1.1 jruoho
292 1.1 jruoho EndDependentFn ()
293 1.1 jruoho })
294 1.1 jruoho }
295 1.1 jruoho
296