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 Buffer 32 */ 33 Name (Z043, 0x2B) 34 /* Integer */ 35 /* 32-bit */ 36 Name (P320, Package (0x06) 37 { 38 0x00, 39 0x81, 40 0x8232, 41 0x76543201, 42 0xF89ABCDE, 43 0xFFFFFFFF 44 }) 45 Name (P321, Package (0x06) 46 { 47 Buffer (0x04) 48 { 49 0x00, 0x00, 0x00, 0x00 // .... 50 }, 51 52 Buffer (0x04) 53 { 54 0x81, 0x00, 0x00, 0x00 // .... 55 }, 56 57 Buffer (0x04) 58 { 59 0x32, 0x82, 0x00, 0x00 // 2... 60 }, 61 62 Buffer (0x04) 63 { 64 0x01, 0x32, 0x54, 0x76 // .2Tv 65 }, 66 67 Buffer (0x04) 68 { 69 0xDE, 0xBC, 0x9A, 0xF8 // .... 70 }, 71 72 Buffer (0x04) 73 { 74 0xFF, 0xFF, 0xFF, 0xFF // .... 75 } 76 }) 77 /* 64-bit */ 78 79 Name (P322, Package (0x09) 80 { 81 0x00, 82 0x81, 83 0x8232, 84 0x76543201, 85 0x0000008123456789, 86 0x00008CDAE2376890, 87 0x0076543201FABCDE, 88 0xABCDEF9876543201, 89 0xFFFFFFFFFFFFFFFF 90 }) 91 Name (P323, Package (0x09) 92 { 93 Buffer (0x08) 94 { 95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ........ 96 }, 97 98 Buffer (0x08) 99 { 100 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ........ 101 }, 102 103 Buffer (0x08) 104 { 105 0x32, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 2....... 106 }, 107 108 Buffer (0x08) 109 { 110 0x01, 0x32, 0x54, 0x76, 0x00, 0x00, 0x00, 0x00 // .2Tv.... 111 }, 112 113 Buffer (0x08) 114 { 115 0x89, 0x67, 0x45, 0x23, 0x81, 0x00, 0x00, 0x00 // .gE#.... 116 }, 117 118 Buffer (0x08) 119 { 120 0x90, 0x68, 0x37, 0xE2, 0xDA, 0x8C, 0x00, 0x00 // .h7..... 121 }, 122 123 Buffer (0x08) 124 { 125 0xDE, 0xBC, 0xFA, 0x01, 0x32, 0x54, 0x76, 0x00 // ....2Tv. 126 }, 127 128 Buffer (0x08) 129 { 130 0x01, 0x32, 0x54, 0x76, 0x98, 0xEF, 0xCD, 0xAB // .2Tv.... 131 }, 132 133 Buffer (0x08) 134 { 135 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // ........ 136 } 137 }) 138 /* Buffer */ 139 140 Name (P325, Package (0x06) 141 { 142 Buffer (0x01) 143 { 144 0x01 // . 145 }, 146 147 Buffer (0x04) 148 { 149 0x01, 0x02, 0x03, 0x04 // .... 150 }, 151 152 Buffer (0x08) 153 { 154 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 // ........ 155 }, 156 157 Buffer (0x80) 158 { 159 /* 0000 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // ........ 160 /* 0008 */ 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, // ........ 161 /* 0010 */ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // ........ 162 /* 0018 */ 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, // ....... 163 /* 0020 */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, // !"#$%&'( 164 /* 0028 */ 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, // )*+,-./0 165 /* 0030 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, // 12345678 166 /* 0038 */ 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, // 9:;<=>?@ 167 /* 0040 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, // ABCDEFGH 168 /* 0048 */ 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, // IJKLMNOP 169 /* 0050 */ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, // QRSTUVWX 170 /* 0058 */ 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, // YZ[\]^_` 171 /* 0060 */ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, // abcdefgh 172 /* 0068 */ 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, // ijklmnop 173 /* 0070 */ 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // qrstuvwx 174 /* 0078 */ 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80 // yz{|}~.. 175 }, 176 177 Buffer (0xC8) 178 { 179 /* 0000 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // ........ 180 /* 0008 */ 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, // ........ 181 /* 0010 */ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // ........ 182 /* 0018 */ 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, // ....... 183 /* 0020 */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, // !"#$%&'( 184 /* 0028 */ 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, // )*+,-./0 185 /* 0030 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, // 12345678 186 /* 0038 */ 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, // 9:;<=>?@ 187 /* 0040 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, // ABCDEFGH 188 /* 0048 */ 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, // IJKLMNOP 189 /* 0050 */ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, // QRSTUVWX 190 /* 0058 */ 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, // YZ[\]^_` 191 /* 0060 */ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, // abcdefgh 192 /* 0068 */ 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, // ijklmnop 193 /* 0070 */ 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // qrstuvwx 194 /* 0078 */ 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, // yz{|}~.. 195 /* 0080 */ 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, // ........ 196 /* 0088 */ 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, // ........ 197 /* 0090 */ 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, // ........ 198 /* 0098 */ 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, // ........ 199 /* 00A0 */ 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, // ........ 200 /* 00A8 */ 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, // ........ 201 /* 00B0 */ 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, // ........ 202 /* 00B8 */ 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, // ........ 203 /* 00C0 */ 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8 // ........ 204 }, 205 206 Buffer (0x0101) 207 { 208 /* 0000 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, // ........ 209 /* 0008 */ 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, // ........ 210 /* 0010 */ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // ........ 211 /* 0018 */ 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, // ....... 212 /* 0020 */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, // !"#$%&'( 213 /* 0028 */ 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, // )*+,-./0 214 /* 0030 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, // 12345678 215 /* 0038 */ 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, // 9:;<=>?@ 216 /* 0040 */ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, // ABCDEFGH 217 /* 0048 */ 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, // IJKLMNOP 218 /* 0050 */ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, // QRSTUVWX 219 /* 0058 */ 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, // YZ[\]^_` 220 /* 0060 */ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, // abcdefgh 221 /* 0068 */ 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, // ijklmnop 222 /* 0070 */ 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // qrstuvwx 223 /* 0078 */ 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, // yz{|}~.. 224 /* 0080 */ 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, // ........ 225 /* 0088 */ 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, // ........ 226 /* 0090 */ 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, // ........ 227 /* 0098 */ 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, // ........ 228 /* 00A0 */ 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, // ........ 229 /* 00A8 */ 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, // ........ 230 /* 00B0 */ 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, // ........ 231 /* 00B8 */ 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, // ........ 232 /* 00C0 */ 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, // ........ 233 /* 00C8 */ 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, // ........ 234 /* 00D0 */ 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, // ........ 235 /* 00D8 */ 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, // ........ 236 /* 00E0 */ 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, // ........ 237 /* 00E8 */ 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, // ........ 238 /* 00F0 */ 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, // ........ 239 /* 00F8 */ 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, // ........ 240 /* 0100 */ 0x01 // . 241 } 242 }) 243 /* Verify type, length of the obtained buffer */ 244 /* call to m305 to check the contents */ 245 Method (M320, 6, NotSerialized) 246 { 247 If ((ObjectType (Arg1) != 0x03)) 248 { 249 ERR (Arg0, Z043, __LINE__, 0x00, 0x00, Arg2, "Type") 250 } 251 ElseIf ((SizeOf (Arg1) != (Arg2 + Arg3))) 252 { 253 ERR (Arg0, Z043, __LINE__, 0x00, 0x00, Arg2, "Sizeof") 254 } 255 Else 256 { 257 M305 (Arg0, Arg1, Arg2, Arg4, Arg5) 258 } 259 } 260 261 /* Checking strings with different lengths */ 262 263 Method (M321, 1, Serialized) 264 { 265 Name (LENS, Buffer (0x0A) 266 { 267 /* 0000 */ 0xC8, 0xC7, 0x81, 0x80, 0x7F, 0x09, 0x08, 0x07, // ........ 268 /* 0008 */ 0x01, 0x00 // .. 269 }) 270 Local1 = 0x00 271 While ((Local1 < 0x0A)) 272 { 273 /* Prepare benchmark buffer */ 274 275 Local0 = DerefOf (LENS [Local1]) 276 Local4 = Buffer (Local0){} 277 M303 (Local4, Local0) 278 /* Convert benchmark buffer to string */ 279 280 Local2 = ToString (Local4, Ones) 281 /* Create the same benchmark buffer anew */ 282 /* with null character appended */ 283 Local5 = Buffer ((Local0 + 0x01)){} 284 M303 (Local5, Local0) 285 Local5 [Local0] = 0x00 286 /* Convert string to buffer */ 287 288 ToBuffer (Local2, Local3) 289 /* Verify obtained buffer with the benchmark one */ 290 291 If ((Local3 != Local5)) 292 { 293 ERR (Arg0, Z043, __LINE__, 0x00, 0x00, Local0, "NotEqual") 294 } 295 296 /* Check the source string was not corrupted */ 297 298 M307 (Arg0, Local2, Local0, 0x02, "Source") 299 /* Check both buffers state too */ 300 301 M320 (Arg0, Local3, Local0, 0x01, 0x03, "Dest") 302 M320 (Arg0, Local4, Local0, 0x00, 0x04, "Test") 303 Local1++ 304 } 305 } 306 307 /* Checking buffers with different lengths */ 308 /* (zero length in the first order). */ 309 Method (M322, 1, Serialized) 310 { 311 Name (LENS, Package (0x02) 312 { 313 0x00, 314 0x0201 315 }) 316 Local1 = 0x00 317 While ((Local1 < 0x02)) 318 { 319 /* Prepare benchmark buffer */ 320 321 Local0 = DerefOf (LENS [Local1]) 322 Local4 = Buffer (Local0){} 323 M303 (Local4, Local0) 324 /* 325 * // ToBuffer caused destroying of source buffer (passed 326 * // by Data parameter), so they are duplicated below. 327 * 328 * Store(Local4, Local5) 329 */ 330 ToBuffer (Local4, Local3) 331 If ((Local3 != Local4)) 332 { 333 ERR (Arg0, Z043, __LINE__, 0x00, 0x00, Local0, "NotEqual") 334 } 335 336 /* Check the buffers were not corrupted */ 337 /* (because know Data parameter was) */ 338 M320 (Arg0, Local3, Local0, 0x00, 0x06, "Dest") 339 M320 (Arg0, Local4, Local0, 0x00, 0x07, "Source") 340 Local1++ 341 } 342 } 343 344 /* Run-method */ 345 346 Method (TOB0, 0, Serialized) 347 { 348 Debug = "TEST: TOB0, Convert Data to Buffer" 349 /* From integer */ 350 351 If ((F64 == 0x01)) 352 { 353 M302 (__METHOD__, 0x09, "p322", P322, P323, 0x01) 354 } 355 Else 356 { 357 M302 (__METHOD__, 0x06, "p320", P320, P321, 0x01) 358 } 359 360 /* From string */ 361 362 M321 (__METHOD__) 363 /* From buffer */ 364 365 M322 (__METHOD__) 366 M302 (__METHOD__, 0x06, "p325", P325, P325, 0x01) 367 } 368