1    /*
2     * Some or all of this work - Copyright (c) 2006 - 2021, Intel Corp.
3     * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without modification,
6     * are permitted provided that the following conditions are met:
7     *
8     * Redistributions of source code must retain the above copyright notice,
9     * this list of conditions and the following disclaimer.
10     * Redistributions in binary form must reproduce the above copyright notice,
11     * this list of conditions and the following disclaimer in the documentation
12     * and/or other materials provided with the distribution.
13     * Neither the name of Intel Corporation nor the names of its contributors
14     * may be used to endorse or promote products derived from this software
15     * without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    /*
29     * Data type conversion and manipulation
30     */
31    /* Convert data to integer */
32    Name (Z047, 0x2F)
33    /* Integer */
34    /* 32-bit */
35    Name (P300, Package (0x06)
36    {
37        0x00,
38        0x81,
39        0x8232,
40        0x76543201,
41        0xF89ABCDE,
42        0xFFFFFFFF
43    })
44    /* 64-bit */
45
46    Name (P302, Package (0x05)
47    {
48        0x0000008123456789,
49        0x00008CDAE2376890,
50        0x76543201F89ABCDE,
51        0xF89ABCDE76543201,
52        0xFFFFFFFFFFFFFFFF
53    })
54    /* Hexadecimal numeric String */
55    /* 32-bit */
56    Name (P304, Package (0x20)
57    {
58        "0x0",       /* 0 */
59        "0x00",
60        "0x1",
61        "0x83",
62        "0x456",
63        "0x8232",
64        "0xbcdef",
65        "0x123456",
66        "0x789abcd",
67        "0xffffffff",
68        "0x01234567",    /* 10 */
69        "0X12345678",
70        "0x23456789",
71        "0x3456789a",
72        "0x456789ab",
73        "0x56789abc",
74        "0x6789abcd",
75        "0x789abcde",
76        "0x89abcdef",
77        "0x9abcdefA",
78        "0xabcdefAB",    /* 20 */
79        "0xbcdefABC",
80        "0xcdefABCD",
81        "0xdefABCDE",
82        "0xefABCDEF",
83        "0xfABCDEF0",
84        "0xABCDEF01",
85        "0xBCDEF012",
86        "0xCDEF0123",
87        "0xDEF01234",
88        "0xEF012345",    /* 30 */
89        "0xF0123456"
90    })
91    Name (P305, Package (0x20)
92    {
93        0x00,
94        0x00,
95        0x01,
96        0x83,
97        0x0456,
98        0x8232,
99        0x000BCDEF,
100        0x00123456,
101        0x0789ABCD,
102        0xFFFFFFFF,
103        0x01234567,
104        0x12345678,
105        0x23456789,
106        0x3456789A,
107        0x456789AB,
108        0x56789ABC,
109        0x6789ABCD,
110        0x789ABCDE,
111        0x89ABCDEF,
112        0x9ABCDEFA,
113        0xABCDEFAB,
114        0xBCDEFABC,
115        0xCDEFABCD,
116        0xDEFABCDE,
117        0xEFABCDEF,
118        0xFABCDEF0,
119        0xABCDEF01,
120        0xBCDEF012,
121        0xCDEF0123,
122        0xDEF01234,
123        0xEF012345,
124        0xF0123456
125    })
126    /* 64-bit */
127
128    Name (P306, Package (0x20)
129    {
130        "0x123456789",       /* 0 */
131        "0x8123456789",
132        "0xabcdef01234",
133        "0x876543210abc",
134        "0x1234567abcdef",
135        "0x8234567abcdef1",
136        "0x6789abcdef01234",
137        "0x76543201f89abcde",
138        "0xf89abcde76543201",
139        "0xffffffffffffffff",
140        "0X0123456789abcdef",    /* 10 */
141        "0x123456789abcdefA",
142        "0x23456789abcdefAB",
143        "0x3456789abcdefABC",
144        "0x456789abcdefABCD",
145        "0x56789abcdefABCDE",
146        "0x6789abcdefABCDEF",
147        "0x789abcdefABCDEF0",
148        "0x89abcdefABCDEF01",
149        "0x9abcdefABCDEF012",
150        "0xabcdefABCDEF0123",    /* 20 */
151        "0xbcdefABCDEF01234",
152        "0xcdefABCDEF012345",
153        "0xdefABCDEF0123456",
154        "0xefABCDEF01234567",
155        "0xfABCDEF012345678",
156        "0xABCDEF0123456789",
157        "0xBCDEF0123456789a",
158        "0xCDEF0123456789ab",
159        "0xDEF0123456789abc",
160        "0xEF0123456789abcd",    /* 30 */
161        "0xF0123456789abcde"
162    })
163    Name (P307, Package (0x20)
164    {
165        0x0000000123456789,
166        0x0000008123456789,
167        0x00000ABCDEF01234,
168        0x0000876543210ABC,
169        0x0001234567ABCDEF,
170        0x008234567ABCDEF1,
171        0x06789ABCDEF01234,
172        0x76543201F89ABCDE,
173        0xF89ABCDE76543201,
174        0xFFFFFFFFFFFFFFFF,
175        0x0123456789ABCDEF,
176        0x123456789ABCDEFA,
177        0x23456789ABCDEFAB,
178        0x3456789ABCDEFABC,
179        0x456789ABCDEFABCD,
180        0x56789ABCDEFABCDE,
181        0x6789ABCDEFABCDEF,
182        0x789ABCDEFABCDEF0,
183        0x89ABCDEFABCDEF01,
184        0x9ABCDEFABCDEF012,
185        0xABCDEFABCDEF0123,
186        0xBCDEFABCDEF01234,
187        0xCDEFABCDEF012345,
188        0xDEFABCDEF0123456,
189        0xEFABCDEF01234567,
190        0xFABCDEF012345678,
191        0xABCDEF0123456789,
192        0xBCDEF0123456789A,
193        0xCDEF0123456789AB,
194        0xDEF0123456789ABC,
195        0xEF0123456789ABCD,
196        0xF0123456789ABCDE
197    })
198    /* Decimal numeric String */
199    /* 32-bit */
200    Name (P308, Package (0x15)
201    {
202        "0",
203        "12",
204        "345",
205        "6789",
206        "12345",
207        "678901",
208        "2345678",
209        "90123456",
210        "789012345",
211        "4294967295",    /* == "0xffffffff" */
212        "4294967295",    /* == "0xffffffff" */
213        "0123456789",
214        "1234567890",
215        "2345678901",
216        "3456789012",
217        "1567890123",
218        "2678901234",
219        "3789012345",
220        "1890123456",
221        "2901234567",
222        "3012345678"
223    })
224    Name (P309, Package (0x15)
225    {
226        0x00,
227        0x0C,
228        0x0159,
229        0x1A85,
230        0x3039,
231        0x000A5BF5,
232        0x0023CACE,
233        0x055F2CC0,
234        0x2F075F79,
235        0xFFFFFFFF,
236        0xFFFFFFFF,
237        0x075BCD15,
238        0x499602D2,
239        0x8BD03835,
240        0xCE0A6A14,
241        0x5D741ACB,
242        0x9FACC9F2,
243        0xE1D7BD79,
244        0x70A8FEC0,
245        0xACED5387,
246        0xB38CBF4E
247    })
248    /* 64-bit */
249
250    Name (P310, Package (0x15)
251    {
252        "30123456790",
253        "123456789012",
254        "3456789012345",
255        "26789012346789",
256        "123456789012345",
257        "3789012345678901",
258        "23456789012345678",
259        "301234567890123456",
260        "1890123456789012345",
261        "18446744073709551615",  /* == "0xffffffffffffffff" */
262        "18446744073709551615",  /* == "0xffffffffffffffff" */
263        "01234567890123456789",
264        "12345678901234567890",
265        "13456789012345678901",
266        "14567890123456789012",
267        "15678901231567890123",
268        "16789012342678901234",
269        "17890123453789012345",
270        "18301234561890123456",
271        "18012345672901234567",
272        "10123456783012345678"
273    })
274    Name (P311, Package (0x15)
275    {
276        0x00000007037F7916,
277        0x0000001CBE991A14,
278        0x00000324D8AE5F79,
279        0x0000185D4D9097A5,
280        0x00007048860DDF79,
281        0x000D76162EE9EC35,
282        0x005355D348A6F34E,
283        0x042E333E5528BAC0,
284        0x1A3B1145078ADF79,
285        0xFFFFFFFFFFFFFFFF,
286        0xFFFFFFFFFFFFFFFF,
287        0x112210F47DE98115,
288        0xAB54A98CEB1F0AD2,
289        0xBAC01E4F423E6C35,
290        0xCA2B8AE21F903A14,
291        0xD996A5998809E6CB,
292        0xE8FE8DC60F0651F2,
293        0xF8467C7ECAFA8179,
294        0xFDFB0BDEB48FFEC0,
295        0xF9F8B4F4BCD28F87,
296        0x8C7DBE4ECA78374E
297    })
298    /* Buffer */
299    /* 32-bit */
300    Name (P312, Package (0x05)
301    {
302        /* buffer, 32-bit integer */
303
304        Buffer (0x01)
305        {
306             0x81                                             // .
307        },
308
309        Buffer (0x02)
310        {
311             0x82, 0x83                                       // ..
312        },
313
314        Buffer (0x03)
315        {
316             0x84, 0x85, 0x86                                 // ...
317        },
318
319        Buffer (0x04)
320        {
321             0x87, 0x88, 0x89, 0x8A                           // ....
322        },
323
324        /* for 32-bit mode only */
325
326        Buffer (0x05)
327        {
328             0x8B, 0x8C, 0x8D, 0x8E, 0x8F                     // .....
329        }
330    })
331    Name (P313, Package (0x05)
332    {
333        0x81,
334        0x8382,
335        0x00868584,
336        0x8A898887,
337        0x8E8D8C8B
338    })
339    /* 64-bit */
340
341    Name (P314, Package (0x05)
342    {
343        Buffer (0x05)
344        {
345             0x85, 0x84, 0x83, 0x82, 0x81                     // .....
346        },
347
348        Buffer (0x06)
349        {
350             0x8B, 0x8A, 0x89, 0x88, 0x87, 0x86               // ......
351        },
352
353        Buffer (0x07)
354        {
355             0x82, 0x81, 0x80, 0x8F, 0x8E, 0x8D, 0x8C         // .......
356        },
357
358        Buffer (0x08)
359        {
360             0x8A, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83   // ........
361        },
362
363        Buffer (0x09)
364        {
365            /* 0000 */  0x83, 0x82, 0x81, 0x80, 0x8F, 0x8E, 0x8D, 0x8C,  // ........
366            /* 0008 */  0x8B                                             // .
367        }
368    })
369    Name (P315, Package (0x05)
370    {
371        /* buffer, 32-bit integer */
372
373        0x0000008182838485,
374        0x0000868788898A8B,
375        0x008C8D8E8F808182,
376        0x838485868788898A,
377        0x8C8D8E8F80818283
378    })
379    /* Run-method */
380
381    Method (TOI0, 0, Serialized)
382    {
383        Debug = "TEST: TOI0, Convert data to integer"
384        /* From integer */
385
386        If ((F64 == 0x01))
387        {
388            M302 (__METHOD__, 0x06, "p300", P300, P300, 0x00)
389            M302 (__METHOD__, 0x05, "p302", P302, P302, 0x00)
390        }
391        Else
392        {
393            M302 (__METHOD__, 0x06, "p300", P300, P300, 0x00)
394        }
395
396        /* From hexadecimal numeric string */
397
398        If ((F64 == 0x01))
399        {
400            M302 (__METHOD__, 0x20, "p304", P304, P305, 0x00)
401            M302 (__METHOD__, 0x20, "p306", P306, P307, 0x00)
402        }
403        Else
404        {
405            M302 (__METHOD__, 0x20, "p304", P304, P305, 0x00)
406        }
407
408        /* From decimal numeric string */
409
410        If ((F64 == 0x01))
411        {
412            M302 (__METHOD__, 0x15, "p308", P308, P309, 0x00)
413            M302 (__METHOD__, 0x15, "p310", P310, P311, 0x00)
414        }
415        Else
416        {
417            M302 (__METHOD__, 0x15, "p308", P308, P309, 0x00)
418        }
419
420        /* From buffer */
421
422        If ((F64 == 0x01))
423        {
424            M302 (__METHOD__, 0x04, "p312", P312, P313, 0x00)
425            M302 (__METHOD__, 0x05, "p314", P314, P315, 0x00)
426        }
427        Else
428        {
429            M302 (__METHOD__, 0x05, "p312", P312, P313, 0x00)
430        }
431
432        /* Suppression of zeroes */
433
434        If (Y602)
435        {
436            CH03 (__METHOD__, Z047, __LINE__, 0x00, 0x00)
437            Local0 = "0x0123456789abcdefa"
438            ToInteger (Local0, Local2)
439            CH04 (__METHOD__, 0x00, 0x22, Z047, __LINE__, 0x00, 0x00)
440            CH03 (__METHOD__, Z047, __LINE__, 0x00, 0x00)
441            Local0 = "0x000123456789abcdefa"
442            ToInteger (Local0, Local2)
443            CH04 (__METHOD__, 0x00, 0x22, Z047, __LINE__, 0x00, 0x00)
444        }
445        Else
446        {
447            Local0 = "0x0123456789abcdefa"
448            Local1 = 0x123456789ABCDEFA
449            ToInteger (Local0, Local2)
450            If ((Local2 != Local1))
451            {
452                ERR (__METHOD__, Z047, __LINE__, 0x00, 0x00, Local0, 0x00)
453            }
454
455            Local0 = "0x000123456789abcdefa"
456            ToInteger (Local0, Local2)
457            If ((Local2 != Local1))
458            {
459                ERR (__METHOD__, Z047, __LINE__, 0x00, 0x00, Local0, 0x00)
460            }
461        }
462    }
463