]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/Dxe/EfiScriptLib/EfiScriptLib.c
7b905b49fc54690a6ac383181ef70db9e9170f15
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / Dxe / EfiScriptLib / EfiScriptLib.c
1 /*++
2
3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 EfiScriptLib.c
15
16 Abstract:
17
18 Support for EFI script.
19
20 --*/
21
22 #include "EfiScriptLib.h"
23
24 EFI_BOOT_SCRIPT_SAVE_PROTOCOL *mBootScriptSave;
25
26 UINTN
27 EfiScriptLibAsciiStrLen (
28 IN CHAR8 *String
29 )
30 /*++
31
32 Routine Description:
33 Return the number of Ascii characters in String. This is not the same as
34 the length of the string in bytes.
35
36 Arguments:
37 String - String to process
38
39 Returns:
40 Number of Ascii characters in String
41
42 --*/
43 {
44 UINTN Length;
45
46 for (Length=0; *String; String++, Length++);
47 return Length;
48 }
49
50 UINTN
51 EfiScriptLibStrLen (
52 IN CHAR16 *String
53 )
54 /*++
55
56 Routine Description:
57 Return the number of Unicode characters in String. This is not the same as
58 the length of the string in bytes.
59
60 Arguments:
61 String - String to process
62
63 Returns:
64 Number of Unicode characters in String
65
66 --*/
67 {
68 UINTN Length;
69
70 for (Length=0; *String; String++, Length++);
71 return Length;
72 }
73
74 EFI_STATUS
75 EFIAPI
76 BootScriptSaveInitialize (
77 IN EFI_HANDLE ImageHandle,
78 IN EFI_SYSTEM_TABLE *SystemTable
79 )
80 /*++
81
82 Routine Description:
83
84 Intialize Boot Script Lib if it has not yet been initialized.
85
86 Arguments:
87
88 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
89
90 Returns:
91
92 EFI_STATUS always returns EFI_SUCCESS
93
94 --*/
95 // GC_TODO: ImageHandle - add argument and description to function comment
96 // GC_TODO: SystemTable - add argument and description to function comment
97 {
98 EFI_STATUS Status;
99 EFI_BOOT_SERVICES *BS;
100
101 BS = SystemTable->BootServices;
102
103 Status = BS->LocateProtocol (&gEfiBootScriptSaveGuid, NULL, (VOID **)&mBootScriptSave);
104 if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {
105 mBootScriptSave = NULL;
106 }
107
108 return EFI_SUCCESS;
109 }
110
111 EFI_STATUS
112 EFIAPI
113 BootScriptSaveIoWrite (
114 IN UINT16 TableName,
115 IN EFI_BOOT_SCRIPT_WIDTH Width,
116 IN UINT64 Address,
117 IN UINTN Count,
118 IN VOID *Buffer
119 )
120 /*++
121
122 Routine Description:
123
124 Save I/O write to boot script
125
126 Arguments:
127
128 TableName - Desired boot script table
129
130 (Standard EFI IO write script parameter)
131
132 Returns:
133
134 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
135
136 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
137
138 --*/
139 // GC_TODO: Width - add argument and description to function comment
140 // GC_TODO: Address - add argument and description to function comment
141 // GC_TODO: Count - add argument and description to function comment
142 // GC_TODO: Buffer - add argument and description to function comment
143 {
144 if (mBootScriptSave == NULL) {
145 return EFI_NOT_FOUND;
146 }
147
148 mBootScriptSave->Write (
149 mBootScriptSave,
150 TableName,
151 EFI_BOOT_SCRIPT_IO_WRITE_OPCODE,
152 Width,
153 Address,
154 Count,
155 Buffer
156 );
157
158 return EFI_SUCCESS;
159 }
160
161 EFI_STATUS
162 EFIAPI
163 BootScriptSaveIoReadWrite (
164 IN UINT16 TableName,
165 IN EFI_BOOT_SCRIPT_WIDTH Width,
166 IN UINT64 Address,
167 IN VOID *Data,
168 IN VOID *DataMask
169 )
170 /*++
171
172 Routine Description:
173
174 Save I/O write to boot script
175
176 Arguments:
177
178 TableName - Desired boot script table
179
180 (Standard EFI IO read write script parameter)
181
182 Returns:
183
184 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
185
186 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
187
188 --*/
189 // GC_TODO: Width - add argument and description to function comment
190 // GC_TODO: Address - add argument and description to function comment
191 // GC_TODO: Data - add argument and description to function comment
192 // GC_TODO: DataMask - add argument and description to function comment
193 {
194 if (mBootScriptSave == NULL) {
195 return EFI_NOT_FOUND;
196 }
197
198 mBootScriptSave->Write (
199 mBootScriptSave,
200 TableName,
201 EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE,
202 Width,
203 Address,
204 Data,
205 DataMask
206 );
207
208 return EFI_SUCCESS;
209 }
210
211 EFI_STATUS
212 EFIAPI
213 BootScriptSaveMemWrite (
214 IN UINT16 TableName,
215 IN EFI_BOOT_SCRIPT_WIDTH Width,
216 IN UINT64 Address,
217 IN UINTN Count,
218 IN VOID *Buffer
219 )
220 /*++
221
222 Routine Description:
223
224 Save I/O write to boot script
225
226 Arguments:
227
228 TableName - Desired boot script table
229
230 (Standard EFI MEM write script parameter)
231
232 Returns:
233
234 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
235
236 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
237
238 --*/
239 // GC_TODO: Width - add argument and description to function comment
240 // GC_TODO: Address - add argument and description to function comment
241 // GC_TODO: Count - add argument and description to function comment
242 // GC_TODO: Buffer - add argument and description to function comment
243 {
244 if (mBootScriptSave == NULL) {
245 return EFI_NOT_FOUND;
246 }
247
248 mBootScriptSave->Write (
249 mBootScriptSave,
250 TableName,
251 EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE,
252 Width,
253 Address,
254 Count,
255 Buffer
256 );
257
258 return EFI_SUCCESS;
259 }
260
261 EFI_STATUS
262 EFIAPI
263 BootScriptSaveMemReadWrite (
264 IN UINT16 TableName,
265 IN EFI_BOOT_SCRIPT_WIDTH Width,
266 IN UINT64 Address,
267 IN VOID *Data,
268 IN VOID *DataMask
269 )
270 /*++
271
272 Routine Description:
273
274 Save I/O write to boot script
275
276 Arguments:
277
278 TableName - Desired boot script table
279
280 (Standard EFI MEM read write script parameter)
281
282 Returns:
283
284 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
285
286 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
287
288 --*/
289 // GC_TODO: Width - add argument and description to function comment
290 // GC_TODO: Address - add argument and description to function comment
291 // GC_TODO: Data - add argument and description to function comment
292 // GC_TODO: DataMask - add argument and description to function comment
293 {
294 if (mBootScriptSave == NULL) {
295 return EFI_NOT_FOUND;
296 }
297
298 mBootScriptSave->Write (
299 mBootScriptSave,
300 TableName,
301 EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE,
302 Width,
303 Address,
304 Data,
305 DataMask
306 );
307
308 return EFI_SUCCESS;
309 }
310
311 EFI_STATUS
312 EFIAPI
313 BootScriptSavePciCfgWrite (
314 IN UINT16 TableName,
315 IN EFI_BOOT_SCRIPT_WIDTH Width,
316 IN UINT64 Address,
317 IN UINTN Count,
318 IN VOID *Buffer
319 )
320 /*++
321
322 Routine Description:
323
324 Save I/O write to boot script
325
326 Arguments:
327
328 TableName - Desired boot script table
329
330 (Standard EFI PCI write script parameter)
331
332 Returns:
333
334 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
335
336 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
337
338 --*/
339 // GC_TODO: Width - add argument and description to function comment
340 // GC_TODO: Address - add argument and description to function comment
341 // GC_TODO: Count - add argument and description to function comment
342 // GC_TODO: Buffer - add argument and description to function comment
343 {
344 if (mBootScriptSave == NULL) {
345 return EFI_NOT_FOUND;
346 }
347
348 mBootScriptSave->Write (
349 mBootScriptSave,
350 TableName,
351 EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE,
352 Width,
353 Address,
354 Count,
355 Buffer
356 );
357
358 return EFI_SUCCESS;
359 }
360
361 EFI_STATUS
362 EFIAPI
363 BootScriptSavePciCfgReadWrite (
364 IN UINT16 TableName,
365 IN EFI_BOOT_SCRIPT_WIDTH Width,
366 IN UINT64 Address,
367 IN VOID *Data,
368 IN VOID *DataMask
369 )
370 /*++
371
372 Routine Description:
373
374 Save I/O write to boot script
375
376 Arguments:
377
378 TableName - Desired boot script table
379
380 (Standard EFI PCI read write script parameter)
381
382 Returns:
383
384 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
385
386 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
387
388 --*/
389 // GC_TODO: Width - add argument and description to function comment
390 // GC_TODO: Address - add argument and description to function comment
391 // GC_TODO: Data - add argument and description to function comment
392 // GC_TODO: DataMask - add argument and description to function comment
393 {
394 if (mBootScriptSave == NULL) {
395 return EFI_NOT_FOUND;
396 }
397
398 mBootScriptSave->Write (
399 mBootScriptSave,
400 TableName,
401 EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE,
402 Width,
403 Address,
404 Data,
405 DataMask
406 );
407
408 return EFI_SUCCESS;
409 }
410
411 EFI_STATUS
412 EFIAPI
413 BootScriptSaveSmbusExecute (
414 IN UINT16 TableName,
415 IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
416 IN EFI_SMBUS_DEVICE_COMMAND Command,
417 IN EFI_SMBUS_OPERATION Operation,
418 IN BOOLEAN PecCheck,
419 IN UINTN *Length,
420 IN VOID *Buffer
421 )
422 /*++
423
424 Routine Description:
425
426 Save I/O write to boot script
427
428 Arguments:
429
430 TableName - Desired boot script table
431
432 (Standard EFI Smbus execute script parameter)
433
434 Returns:
435
436 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
437
438 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
439
440 --*/
441 // GC_TODO: SlaveAddress - add argument and description to function comment
442 // GC_TODO: Command - add argument and description to function comment
443 // GC_TODO: Operation - add argument and description to function comment
444 // GC_TODO: PecCheck - add argument and description to function comment
445 // GC_TODO: Length - add argument and description to function comment
446 // GC_TODO: Buffer - add argument and description to function comment
447 {
448 if (mBootScriptSave == NULL) {
449 return EFI_NOT_FOUND;
450 }
451
452 mBootScriptSave->Write (
453 mBootScriptSave,
454 TableName,
455 EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE,
456 SlaveAddress,
457 Command,
458 Operation,
459 PecCheck,
460 Length,
461 Buffer
462 );
463
464 return EFI_SUCCESS;
465 }
466
467 EFI_STATUS
468 EFIAPI
469 BootScriptSaveStall (
470 IN UINT16 TableName,
471 IN UINTN Duration
472 )
473 /*++
474
475 Routine Description:
476
477 Save I/O write to boot script
478
479 Arguments:
480
481 TableName - Desired boot script table
482
483 (Standard EFI stall script parameter)
484
485 Returns:
486
487 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
488
489 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
490
491 --*/
492 // GC_TODO: Duration - add argument and description to function comment
493 {
494 if (mBootScriptSave == NULL) {
495 return EFI_NOT_FOUND;
496 }
497
498 mBootScriptSave->Write (
499 mBootScriptSave,
500 TableName,
501 EFI_BOOT_SCRIPT_STALL_OPCODE,
502 Duration
503 );
504
505 return EFI_SUCCESS;
506 }
507
508 EFI_STATUS
509 EFIAPI
510 BootScriptSaveDispatch (
511 IN UINT16 TableName,
512 IN EFI_PHYSICAL_ADDRESS EntryPoint
513 )
514 /*++
515
516 Routine Description:
517
518 GC_TODO: Add function description
519
520 Arguments:
521
522 TableName - GC_TODO: add argument description
523 EntryPoint - GC_TODO: add argument description
524
525 Returns:
526
527 EFI_NOT_FOUND - GC_TODO: Add description for return value
528 EFI_SUCCESS - GC_TODO: Add description for return value
529
530 --*/
531 {
532 if (mBootScriptSave == NULL) {
533 return EFI_NOT_FOUND;
534 }
535
536 mBootScriptSave->Write (
537 mBootScriptSave,
538 TableName,
539 EFI_BOOT_SCRIPT_DISPATCH_OPCODE,
540 EntryPoint
541 );
542
543 return EFI_SUCCESS;
544
545 }
546
547 EFI_STATUS
548 EFIAPI
549 BootScriptMemPoll (
550 IN UINT16 TableName,
551 IN EFI_BOOT_SCRIPT_WIDTH Width,
552 IN UINT64 Address,
553 IN VOID *BitMask,
554 IN VOID *BitValue,
555 IN UINTN Duration,
556 IN UINTN LoopTimes
557 )
558 /*++
559
560 Routine Description:
561
562 Save I/O write to boot script
563
564 Arguments:
565 TableName - Desired boot script table
566
567 Width - The width of the memory operations.
568
569 Address - The base address of the memory operations.
570
571 BitMask - A pointer to the bit mask to be AND-ed with the data read from the register.
572
573 BitValue - A pointer to the data value after to be Masked.
574
575 Duration - Duration in microseconds of the stall.
576
577 LoopTimes - The times of the register polling.
578
579 Returns:
580
581 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
582
583 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
584
585 --*/
586 {
587 mBootScriptSave->Write (
588 mBootScriptSave,
589 TableName,
590 EFI_BOOT_SCRIPT_MEM_POLL_OPCODE,
591 Width,
592 Address,
593 BitMask,
594 BitValue,
595 Duration,
596 LoopTimes
597 );
598
599 return EFI_SUCCESS;
600 }
601
602 EFI_STATUS
603 EFIAPI
604 BootScriptSaveInformation (
605 IN UINT16 TableName,
606 IN UINT32 Length,
607 IN EFI_PHYSICAL_ADDRESS Buffer
608 )
609 /*++
610
611 Routine Description:
612
613 Save a Information Opcode record in table specified with TableName
614
615 Arguments:
616
617 TableName - Desired boot script table
618 Length - Length of information in bytes
619 Buffer - Content of information that will be saved in script table
620
621 Returns:
622
623 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
624
625 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
626
627 --*/
628 {
629 if (mBootScriptSave == NULL) {
630 return EFI_NOT_FOUND;
631 }
632
633 mBootScriptSave->Write (
634 mBootScriptSave,
635 TableName,
636 EFI_BOOT_SCRIPT_INFORMATION_OPCODE,
637 Length,
638 Buffer
639 );
640
641 return EFI_SUCCESS;
642
643 }
644
645 EFI_STATUS
646 EFIAPI
647 BootScriptSaveInformationUnicodeString (
648 IN UINT16 TableName,
649 IN CHAR16 *String
650 )
651 /*++
652
653 Routine Description:
654
655 Save a Information Opcode record in table specified with TableName, the information
656 is a unicode string.
657
658 Arguments:
659
660 TableName - Desired boot script table
661 String - The string that will be saved in script table
662
663 Returns:
664
665 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
666
667 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
668
669 --*/
670 {
671 return BootScriptSaveInformation (
672 TableName,
673 (UINT32) EfiScriptLibStrLen (String) * 2 + 2,
674 (EFI_PHYSICAL_ADDRESS) (UINTN) String
675 );
676 }
677
678 EFI_STATUS
679 EFIAPI
680 BootScriptSaveInformationAsciiString (
681 IN UINT16 TableName,
682 IN CHAR8 *String
683 )
684 /*++
685
686 Routine Description:
687
688 Save a Information Opcode record in table specified with TableName, the information
689 is a ascii string.
690
691 Arguments:
692
693 TableName - Desired boot script table
694 String - The string that will be saved in script table
695
696 Returns:
697
698 EFI_NOT_FOUND - BootScriptSave Protocol not exist.
699
700 EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS
701
702 --*/
703 {
704 return BootScriptSaveInformation (
705 TableName,
706 (UINT32) EfiScriptLibAsciiStrLen (String) + 1,
707 (EFI_PHYSICAL_ADDRESS) (UINTN) String
708 );
709 }
710