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