SHEL5
[efi/shell/.git] / shellenv / shelle.h
1 /*++
2
3 Copyright (c) 2005, Intel Corporation                                                         
4 All rights reserved. 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   shelle.h
15
16 Abstract:
17  
18 Revision History
19
20 --*/
21
22 #ifndef _SHELLE_H_
23 #define _SHELLE_H_
24
25 #include "EfiShellLib.h"
26 #include "shellenv.h"
27
28 //
29 // Internal defines
30 //
31 #define COMMON_CMDLINE_LENGTH 32
32 #define COMMON_ARG_COUNT      32
33 #define COMMON_ARG_LENGTH     32
34
35 //
36 // Keep these 2 macros because conio.c and map.c(maybe more other files) uses
37 // them!!
38 //
39 #define MAX_CMDLINE     256
40 #define MAX_ARG_LENGTH  256
41
42 //
43 // The definitions of VARIABLE_ID'Flags
44 //
45 #define VAR_ID_NON_VOL            0x01
46 #define VAR_ID_INVALID            0x02
47 #define VAR_ID_ACCESSED           0x04
48 #define VAR_ID_CONSIST            0x08
49
50 #define IsWhiteSpace(c)           (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == 0)
51 #define IsValidChar(c)            (c >= ' ')
52 #define IsDigit(c)                (c >= '0' && c <= '9')
53 #define IsAlpha(c)                ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
54
55 #define GOTO_TARGET_FOUND         (1)
56 #define GOTO_TARGET_NOT_FOUND     (2)
57 #define GOTO_TARGET_DOESNT_EXIST  (3)
58
59 //
60 //  Protocol guid
61 //
62 #define SHELL_GLOBALVAR_PROTOCOL \
63   { \
64     0x47c7b222, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
65   }
66
67 //
68 // Internal structures
69 //
70 //
71 // IDs of different variables stored by the shell environment
72 //
73 #define ENVIRONMENT_VARIABLE_ID \
74   { \
75     0x47c7b224, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
76   }
77
78 #define DEVICE_PATH_MAPPING_ID \
79   { \
80     0x47c7b225, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
81   }
82
83 #define PROTOCOL_ID_ID \
84   { \
85     0x47c7b226, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
86   }
87
88 #define ALIAS_ID \
89   { \
90     0x47c7b227, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
91   }
92
93 //
94 //
95 //
96 #define ENV_REDIR_SIGNATURE EFI_SIGNATURE_32 ('r', 'i', 'd', 's')
97 typedef struct {
98   UINTN                         Signature;
99   BOOLEAN                       Ascii;
100   EFI_STATUS                    WriteError;
101   EFI_FILE_HANDLE               File;
102   EFI_DEVICE_PATH_PROTOCOL      *FilePath;
103   EFI_HANDLE                    Handle;
104   EFI_SIMPLE_TEXT_OUT_PROTOCOL  Out;
105   EFI_SIMPLE_TEXT_IN_PROTOCOL   In;
106 } ENV_SHELL_REDIR_FILE;
107
108 typedef struct {
109   EFI_SHELL_INTERFACE   ShellInt;
110   EFI_SYSTEM_TABLE      *SystemTable;
111
112   ENV_SHELL_REDIR_FILE  StdIn;
113   ENV_SHELL_REDIR_FILE  StdOut;
114   ENV_SHELL_REDIR_FILE  StdErr;
115
116 } ENV_SHELL_INTERFACE;
117
118 typedef struct _ENV_SHELL_INTERFACE_ITEM {
119   EFI_SHELL_ENVIRONMENT             *Interface;
120   EFI_HANDLE                        Handle;
121   struct _ENV_SHELL_INTERFACE_ITEM  *Next;
122 } ENV_SHELL_INTERFACE_ITEM;
123
124 //
125 // Internal prototypes from init.c
126 //
127 EFI_SHELL_INTERFACE       *
128 EFIAPI
129 SEnvNewShell (
130   IN EFI_HANDLE                   ImageHandle
131   );
132
133 //
134 // Internal prototypes from cmddisp.c
135 //
136 VOID
137 SEnvInitCommandTable (
138   VOID
139   );
140
141 EFI_STATUS
142 EFIAPI
143 SEnvAddCommand (
144   IN SHELLENV_INTERNAL_COMMAND    Handler,
145   IN CHAR16                       *CmdStr,
146   IN SHELLCMD_GET_LINE_HELP       GetLineHelp
147   );
148
149 EFI_STATUS
150 SEnvFreeCommandTable (
151   VOID
152   );
153
154 BOOLEAN
155 IsValidCommand (
156   IN CHAR16                   *Cmd
157   );
158
159 SHELLENV_INTERNAL_COMMAND
160 SEnvGetCmdDispath (
161   IN CHAR16                   *CmdName
162   );
163
164 //
165 // From exec.c
166 //
167 VOID
168 SEnvFreeArgument (
169   IN EFI_SHELL_INTERFACE    *ShellInt
170   );
171
172 VOID
173 SEnvFreeArgInfoArray (
174   IN EFI_SHELL_INTERFACE      *ShellInt
175   );
176
177 VOID
178 SEnvFreeRedirArgument (
179   IN EFI_SHELL_INTERFACE   *ShellInt
180   );
181
182 EFI_STATUS
183 EFIAPI
184 SEnvExecute (
185   IN EFI_HANDLE           *ParentImageHandle,
186   IN CHAR16               *CommandLine,
187   IN BOOLEAN              DebugOutput
188   );
189
190 EFI_STATUS
191 SEnvDoExecute (
192   IN EFI_HANDLE           *ParentImageHandle,
193   IN CHAR16               *CommandLine,
194   IN ENV_SHELL_INTERFACE  *Shell,
195   IN BOOLEAN              Output
196   );
197
198 EFI_STATUS
199 EFIAPI
200 SEnvExitGetLineHelp (
201   OUT CHAR16                  **Str
202   )
203 /*++
204
205 Routine Description:
206
207   Get this command's line help
208
209 Arguments:
210
211   Str - The line help
212
213 Returns:
214
215   EFI_SUCCESS   - Success
216
217 --*/
218 ;
219
220 EFI_STATUS
221 EFIAPI
222 SEnvExit (
223   IN EFI_HANDLE               ImageHandle,
224   IN EFI_SYSTEM_TABLE         *SystemTable
225   );
226
227 EFI_STATUS
228 MemLeakTest (
229   IN EFI_HANDLE           ImageHandle,
230   IN EFI_SYSTEM_TABLE     *SystemTable
231   );
232
233 EFI_STATUS
234 SEnvStringToArg (
235   IN CHAR16                   *Str,
236   IN BOOLEAN                  Output,
237   OUT EFI_SHELL_INTERFACE     *ShellInt
238   );
239
240 VOID
241 EFIAPI
242 SEnvIncrementShellNestingLevel (
243   IN VOID
244   );
245
246 VOID
247 EFIAPI
248 SEnvDecrementShellNestingLevel (
249   IN VOID
250   );
251
252 BOOLEAN
253 EFIAPI
254 SEnvIsRootShell (
255   IN VOID
256   );
257
258 VOID
259 EFIAPI
260 SEnvEnablePageBreak (
261   IN INT32      StartRow,
262   IN BOOLEAN    AutoWrap
263   );
264
265 VOID
266 EFIAPI
267 SEnvDisablePageBreak (
268   IN VOID
269   );
270
271 BOOLEAN
272 EFIAPI
273 SEnvGetPageBreak (
274   IN VOID
275   );
276
277 VOID
278 SEnvEnableExecutionBreak (
279   IN VOID
280   );
281
282 VOID
283 SEnvDisableExecutionBreak (
284   IN VOID
285   );
286
287 BOOLEAN
288 EFIAPI
289 SEnvGetExecutionBreak (
290   IN VOID
291   );
292
293 //
294 // Internal prototypes from protid.c
295 //
296 VOID
297 SEnvInitProtocolInfo (
298   VOID
299   );
300
301 EFI_STATUS
302 SEnvLoadDefaultsGetLineHelp (
303   IN OUT CHAR16                     **Str
304   )
305 /*++
306
307 Routine Description:
308
309   Get this command's line help
310
311 Arguments:
312
313   Str - The line help
314
315 Returns:
316
317   EFI_SUCCESS   - Success
318
319 --*/
320 ;
321
322 EFI_STATUS
323 EFIAPI
324 SEnvLoadDefaults (
325   IN EFI_HANDLE           Parent,
326   IN EFI_SYSTEM_TABLE     *SystemTable
327   );
328
329 VOID
330 SEnvLoadInternalProtInfo (
331   VOID
332   );
333
334 VOID
335 SEnvFreeHandleProtocolInfo (
336   VOID
337   );
338
339 //
340 // functions declaration for enumerate protoocl info database
341 //
342 VOID
343 SEnvInitProtocolInfoEnumerator (
344   VOID
345   );
346
347 VOID
348 SEnvCloseProtocolInfoEnumerator (
349   VOID
350   );
351
352 EFI_STATUS
353 SEnvNextProtocolInfo (
354   IN OUT   PROTOCOL_INFO            **ProtocolInfo
355   );
356
357 EFI_STATUS
358 SEnvSkipProtocolInfo (
359   IN UINTN                  SkipNum
360   );
361
362 VOID
363 SEnvResetProtocolInfoEnumerator (
364   VOID
365   );
366
367 VOID
368 EFIAPI
369 SEnvAddProtocol (
370   IN EFI_GUID                                 *Protocol,
371   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpToken OPTIONAL,
372   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpInfo OPTIONAL,
373   IN CHAR16                                   *IdString
374   );
375
376 VOID
377 SEnvIAddProtocol (
378   IN BOOLEAN                                  SaveId,
379   IN EFI_GUID                                 *Protocol,
380   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpToken OPTIONAL,
381   IN SHELLENV_DUMP_PROTOCOL_INFO              DumpInfo OPTIONAL,
382   IN CHAR16                                   *IdString
383   );
384
385 VOID
386 SEnvLoadHandleProtocolInfo (
387   IN EFI_GUID                     *Skip
388   );
389
390 CHAR16                    *
391 EFIAPI
392 SEnvGetProtocol (
393   IN EFI_GUID                     *ProtocolId,
394   IN BOOLEAN                      GenId
395   );
396
397 PROTOCOL_INFO             *
398 SEnvGetProtByStr (
399   IN CHAR16           *Str
400   );
401
402 EFI_STATUS
403 SEnvGetDeviceName (
404   EFI_HANDLE  DeviceHandle,
405   BOOLEAN     UseComponentName,
406   BOOLEAN     UseDevicePath,
407   CHAR8       *Language,
408   CHAR16      **BestDeviceName,
409   EFI_STATUS  *ConfigurationStatus,
410   EFI_STATUS  *DiagnosticsStatus,
411   BOOLEAN     Display,
412   UINTN       Indent
413   );
414
415 EFI_STATUS
416 SEnvCmdGetStringByToken (
417   IN     UINT16         Token,
418   IN OUT CHAR16         **Str
419   );
420
421 EFI_STATUS
422 SEnvDHProt (
423   IN BOOLEAN                      Verbose,
424   IN BOOLEAN                      DriverModel,
425   IN UINTN                        HandleNo,
426   IN EFI_HANDLE                   Handle,
427   IN CHAR8                        *Language
428   );
429
430 EFI_STATUS
431 EFIAPI
432 SEnvHelpGetLineHelp (
433   IN CHAR16         **Str
434   )
435 /*++
436
437 Routine Description:
438
439   Get this command's line help
440
441 Arguments:
442
443   Str - The line help
444
445 Returns:
446
447   EFI_SUCCESS   - Success
448
449 --*/
450 ;
451
452 EFI_STATUS
453 EFIAPI
454 SEnvHelp (
455   IN EFI_HANDLE           ImageHandle,
456   IN EFI_SYSTEM_TABLE     *SystemTable
457   );
458
459 EFI_STATUS
460 EFIAPI
461 SEnvCmdDHGetLineHelp (
462   OUT CHAR16                   **Str
463   )
464 /*++
465
466 Routine Description:
467
468   Get this command's line help
469
470 Arguments:
471
472   Str - The line help
473
474 Returns:
475
476   EFI_SUCCESS   - Success
477
478 --*/
479 ;
480
481 EFI_STATUS
482 EFIAPI
483 SEnvCmdDH (
484   IN EFI_HANDLE               ImageHandle,
485   IN EFI_SYSTEM_TABLE         *SystemTable
486   );
487
488 EFI_STATUS
489 SEnvIGetProtID (
490   IN CHAR16           *Str,
491   OUT EFI_GUID        *ProtId
492   );
493
494 EFI_STATUS
495 SEnvCmdUnloadGetLineHelp (
496   OUT CHAR16                   **Str
497   )
498 /*++
499
500 Routine Description:
501
502   Get this command's line help
503
504 Arguments:
505
506   Str - The line help
507
508 Returns:
509
510   EFI_SUCCESS   - Success
511
512 --*/
513 ;
514
515 EFI_STATUS
516 SEnvCmdUnload (
517   IN EFI_HANDLE               ImageHandle,
518   IN EFI_SYSTEM_TABLE         *SystemTable
519   );
520
521 //
522 // Handle.c
523 //
524 VOID
525 SEnvInitHandleGlobals (
526   VOID
527   );
528
529 VOID
530 SEnvLoadHandleTable (
531   VOID
532   );
533
534 VOID
535 SEnvFreeHandleTable (
536   VOID
537   );
538
539 UINTN
540 SEnvHandleNoFromStr (
541   IN CHAR16       *Str
542   );
543
544 EFI_HANDLE
545 SEnvHandleFromStr (
546   IN CHAR16       *Str
547   );
548
549 UINTN
550 SEnvHandleNoFromUINT (
551   IN UINTN       Value
552   );
553
554 EFI_HANDLE
555 SEnvHandleFromUINT (
556   IN UINTN       Value
557   );
558
559 UINTN
560 SEnvHandleToNumber (
561   IN  EFI_HANDLE  Handle
562   );
563
564 //
565 // functions declaration for enumerate handle database
566 //
567 EFI_STATUS
568 SEnvNextHandle (
569   IN OUT   EFI_HANDLE             **Handle
570   );
571
572 EFI_STATUS
573 SEnvSkipHandle (
574   IN UINTN             NumSkip
575   );
576
577 UINTN
578 SEnvResetHandleEnumerator (
579   IN UINTN             EnumIndex
580   );
581
582 VOID
583 SEnvInitHandleEnumerator (
584   IN              VOID
585   );
586
587 VOID
588 SEnvCloseHandleEnumerator (
589   IN              VOID
590   );
591
592 UINTN
593 SEnvGetHandleNum (
594   IN               VOID
595   );
596 //
597 // Internal prototypes from var.c
598 //
599 VOID
600 SEnvInitVariables (
601   VOID
602   );
603
604 EFI_STATUS
605 EFIAPI
606 SEnvCmdSetGetLineHelp (
607   IN OUT CHAR16                             **Str
608   )
609 /*++
610
611 Routine Description:
612
613   Get this command's line help
614
615 Arguments:
616
617   Str - The line help
618
619 Returns:
620
621   EFI_SUCCESS   - Success
622
623 --*/
624 ;
625
626 EFI_STATUS
627 EFIAPI
628 SEnvCmdSet (
629   IN EFI_HANDLE               ImageHandle,
630   IN EFI_SYSTEM_TABLE         *SystemTable
631   );
632
633 EFI_STATUS
634 EFIAPI
635 SEnvCmdAliasGetLineHelp (
636   IN OUT CHAR16         **Str
637   )
638 /*++
639
640 Routine Description:
641
642   Get this command's line help
643
644 Arguments:
645
646   Str - The line help
647
648 Returns:
649
650   EFI_SUCCESS   - Success
651
652 --*/
653 ;
654
655 EFI_STATUS
656 EFIAPI
657 SEnvCmdAlias (
658   IN EFI_HANDLE               ImageHandle,
659   IN EFI_SYSTEM_TABLE         *SystemTable
660   );
661
662 CHAR16                    *
663 EFIAPI
664 SEnvGetMap (
665   IN CHAR16           *Name
666   );
667
668 CHAR16                    *
669 EFIAPI
670 SEnvGetEnv (
671   IN CHAR16           *Name
672   );
673
674 CHAR16                    *
675 SEnvGetAlias (
676   IN CHAR16           *Name
677   );
678
679 VARIABLE_ID               *
680 SEnvAddVarToList (
681   IN EFI_LIST_ENTRY           *Head,
682   IN CHAR16                   *Name,
683   IN UINT8                    *Value,
684   IN UINTN                    ValueSize,
685   BOOLEAN                     Volatile
686   );
687
688 EFI_STATUS
689 SEnvAddVar (
690   IN EFI_LIST_ENTRY           *Head,
691   IN EFI_GUID                 *Guid,
692   IN CHAR16                   *Name,
693   IN UINT8                    *Value,
694   IN UINTN                    ValueSize,
695   BOOLEAN                     Volatile
696   );
697
698 VARIABLE_ID               *
699 SEnvFindVar (
700   IN EFI_LIST_ENTRY           *Head,
701   IN CHAR16                   *Name
702   );
703
704 //
705 // Prototypes from conio.c
706 //
707 VOID
708 SEnvConIoInitDosKey (
709   VOID
710   );
711
712 EFI_STATUS
713 EFIAPI
714 SEnvConIoOpen (
715   IN EFI_FILE                   *File,
716   OUT EFI_FILE                  **NewHandle,
717   IN CHAR16                     *FileName,
718   IN UINT64                     OpenMode,
719   IN UINT64                     Attributes
720   );
721
722 EFI_STATUS
723 EFIAPI
724 SEnvConIoNop (
725   IN EFI_FILE  *File
726   );
727
728 EFI_STATUS
729 EFIAPI
730 SEnvConIoGetPosition (
731   IN EFI_FILE                   *File,
732   OUT UINT64                    *Position
733   );
734
735 EFI_STATUS
736 EFIAPI
737 SEnvConIoSetPosition (
738   IN EFI_FILE                   *File,
739   OUT UINT64                    Position
740   );
741
742 EFI_STATUS
743 EFIAPI
744 SEnvConIoGetInfo (
745   IN EFI_FILE                   *File,
746   IN EFI_GUID                   *InformationType,
747   IN OUT UINTN                  *BufferSize,
748   OUT VOID                      *Buffer
749   );
750
751 EFI_STATUS
752 EFIAPI
753 SEnvConIoSetInfo (
754   IN EFI_FILE                   *File,
755   IN EFI_GUID                   *InformationType,
756   IN UINTN                      BufferSize,
757   OUT VOID                      *Buffer
758   );
759
760 EFI_STATUS
761 EFIAPI
762 SEnvConIoWrite (
763   IN EFI_FILE                   *File,
764   IN OUT UINTN                  *BufferSize,
765   IN VOID                       *Buffer
766   );
767
768 EFI_STATUS
769 EFIAPI
770 SEnvConIoRead (
771   IN EFI_FILE                   *File,
772   IN OUT UINTN                  *BufferSize,
773   IN VOID                       *Buffer
774   );
775
776 EFI_STATUS
777 EFIAPI
778 SEnvErrIoWrite (
779   IN EFI_FILE                   *File,
780   IN OUT UINTN                  *BufferSize,
781   IN VOID                       *Buffer
782   );
783
784 EFI_STATUS
785 EFIAPI
786 SEnvErrIoRead (
787   IN EFI_FILE                   *File,
788   IN OUT UINTN                  *BufferSize,
789   IN VOID                       *Buffer
790   );
791
792 EFI_STATUS
793 EFIAPI
794 SEnvReset (
795   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
796   IN BOOLEAN                          ExtendedVerification
797   );
798
799 EFI_STATUS
800 EFIAPI
801 SEnvOutputString (
802   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
803   IN CHAR16                       *String
804   );
805
806 EFI_STATUS
807 EFIAPI
808 SEnvTestString (
809   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
810   IN CHAR16                       *String
811   );
812
813 EFI_STATUS
814 EFIAPI
815 SEnvQueryMode (
816   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
817   IN UINTN                        ModeNumber,
818   OUT UINTN                       *Columns,
819   OUT UINTN                       *Rows
820   );
821
822 EFI_STATUS
823 EFIAPI
824 SEnvSetMode (
825   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
826   IN UINTN                        ModeNumber
827   );
828
829 EFI_STATUS
830 EFIAPI
831 SEnvSetAttribute (
832   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
833   IN UINTN                            Attribute
834   );
835
836 EFI_STATUS
837 EFIAPI
838 SEnvClearScreen (
839   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This
840   );
841
842 EFI_STATUS
843 EFIAPI
844 SEnvSetCursorPosition (
845   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
846   IN UINTN                        Column,
847   IN UINTN                        Row
848   );
849
850 EFI_STATUS
851 EFIAPI
852 SEnvEnableCursor (
853   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
854   IN BOOLEAN                      Enable
855   );
856
857 EFI_STATUS
858 EFIAPI
859 SEnvDummyReset (
860   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
861   IN BOOLEAN                          ExtendedVerification
862   );
863
864 EFI_STATUS
865 EFIAPI
866 SEnvDummyOutputString (
867   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
868   IN CHAR16                       *String
869   );
870
871 EFI_STATUS
872 EFIAPI
873 SEnvDummyTestString (
874   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
875   IN CHAR16                       *String
876   );
877
878 EFI_STATUS
879 EFIAPI
880 SEnvDummyQueryMode (
881   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
882   IN UINTN                        ModeNumber,
883   OUT UINTN                       *Columns,
884   OUT UINTN                       *Rows
885   );
886
887 EFI_STATUS
888 EFIAPI
889 SEnvDummySetMode (
890   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
891   IN UINTN                        ModeNumber
892   );
893
894 EFI_STATUS
895 EFIAPI
896 SEnvDummySetAttribute (
897   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL     *This,
898   IN UINTN                            Attribute
899   );
900
901 EFI_STATUS
902 EFIAPI
903 SEnvDummyClearScreen (
904   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This
905   );
906
907 EFI_STATUS
908 EFIAPI
909 SEnvDummySetCursorPosition (
910   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
911   IN UINTN                        Column,
912   IN UINTN                        Row
913   );
914
915 EFI_STATUS
916 EFIAPI
917 SEnvDummyEnableCursor (
918   IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *This,
919   IN BOOLEAN                      Enable
920   );
921
922 //
923 // Prototypes from ConsoleProxy.c
924 //
925 VOID
926 SEnvOpenConsoleProxy (
927   IN     EFI_HANDLE                       ConInHandle,
928   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
929   IN     EFI_HANDLE                       ConOutHandle,
930   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
931   );
932
933 VOID
934 EFIAPI
935 SEnvCloseConsoleProxy (
936   IN     EFI_HANDLE                       ConInHandle,
937   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
938   IN     EFI_HANDLE                       ConOutHandle,
939   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
940   );
941
942 EFI_STATUS
943 SEnvCheckConsoleProxy (
944   IN     EFI_HANDLE                       ConInHandle,
945   IN OUT EFI_SIMPLE_TEXT_IN_PROTOCOL      **ConIn,
946   IN     EFI_HANDLE                       ConOutHandle,
947   IN OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL     **ConOut
948   );
949
950 EFI_STATUS
951 SEnvConOutHistoryEnable (
952   IN BOOLEAN      Enable
953   );
954
955 EFI_STATUS
956 SEnvConOutHistoryScrollBack (
957   IN UINTN      *ScrollRows OPTIONAL
958   );
959
960 EFI_STATUS
961 SEnvConOutHistoryScrollForward (
962   IN UINTN      *ScrollRows OPTIONAL
963   );
964
965 EFI_STATUS
966 SEnvConOutHistoryQuitScroll (
967   IN VOID
968   );
969
970 VOID
971 SEnvConOutEnablePageBreak (
972   IN INT32      StartRow,
973   IN BOOLEAN    AutoWrap
974   );
975
976 VOID
977 SEnvConOutDisablePageBreak (
978   IN VOID
979   );
980
981 BOOLEAN
982 SEnvConOutGetPageBreak (
983   IN VOID
984   );
985
986 VOID
987 EFIAPI
988 SEnvSetKeyFilter (
989   IN UINT32      KeyFilter
990   );
991
992 UINT32
993 EFIAPI
994 SEnvGetKeyFilter (
995   IN VOID
996   );
997
998 //
999 // Prototypes from dprot.c
1000 //
1001 CHAR8                     *
1002 GetPdbPath (
1003   VOID *ImageBase
1004   );
1005 VOID
1006 PrintShortPdbFileName (
1007   CHAR8  *PdbFileName,
1008   UINTN  Length
1009   );
1010
1011 VOID
1012 EFIAPI
1013 SEnvBlkIo (
1014   EFI_HANDLE,
1015   VOID *
1016   );
1017 VOID
1018 SEnvComponentName (
1019   EFI_HANDLE,
1020   VOID *
1021   );
1022 VOID
1023 EFIAPI
1024 SEnvDPath (
1025   EFI_HANDLE,
1026   VOID *
1027   );
1028 VOID
1029 EFIAPI
1030 SEnvDPathTok (
1031   EFI_HANDLE,
1032   VOID *
1033   );
1034 VOID
1035 EFIAPI
1036 SEnvDebugSupport (
1037   EFI_HANDLE,
1038   VOID *
1039   );
1040 VOID
1041 EFIAPI
1042 SEnvImage (
1043   EFI_HANDLE,
1044   VOID *
1045   );
1046 VOID
1047 EFIAPI
1048 SEnvImageTok (
1049   EFI_HANDLE,
1050   VOID *
1051   );
1052 VOID
1053 EFIAPI
1054 SEnvIsaIo (
1055   EFI_HANDLE,
1056   VOID *
1057   );
1058 VOID
1059 EFIAPI
1060 SEnvPciIo (
1061   EFI_HANDLE,
1062   VOID *
1063   );
1064 VOID
1065 EFIAPI
1066 SEnvPciRootBridgeIo (
1067   EFI_HANDLE,
1068   VOID *
1069   );
1070 VOID
1071 EFIAPI
1072 SEnvTextOut (
1073   EFI_HANDLE,
1074   VOID *
1075   );
1076 VOID
1077 EFIAPI
1078 SEnvUsbIo (
1079   EFI_HANDLE,
1080   VOID *
1081   );
1082 VOID
1083 EFIAPI
1084 SEnvBusSpecificDriverOverride (
1085   EFI_HANDLE,
1086   VOID *
1087   );
1088
1089 //
1090 // Prototypes from map.c
1091 //
1092 VOID
1093 SEnvInitMap (
1094   VOID
1095   );
1096
1097 EFI_STATUS
1098 EFIAPI
1099 SEnvCmdMapGetLineHelp (
1100   OUT CHAR16                  **Str
1101   )
1102 /*++
1103
1104 Routine Description:
1105
1106   Get this command's line help
1107
1108 Arguments:
1109
1110   Str - The line help
1111
1112 Returns:
1113
1114   EFI_SUCCESS   - Success
1115
1116 --*/
1117 ;
1118
1119 EFI_STATUS
1120 EFIAPI
1121 SEnvCmdMap (
1122   IN EFI_HANDLE               ImageHandle,
1123   IN EFI_SYSTEM_TABLE         *SystemTable
1124   );
1125
1126 EFI_STATUS
1127 EFIAPI
1128 SEnvCmdConnectGetLineHelp (
1129   OUT CHAR16                  **Str
1130   )
1131 /*++
1132
1133 Routine Description:
1134
1135   Get this command's line help
1136
1137 Arguments:
1138
1139   Str - The line help
1140
1141 Returns:
1142
1143   EFI_SUCCESS   - Success
1144
1145 --*/
1146 ;
1147
1148 EFI_STATUS
1149 EFIAPI
1150 SEnvCmdConnect (
1151   IN EFI_HANDLE               ImageHandle,
1152   IN EFI_SYSTEM_TABLE         *SystemTable
1153   );
1154
1155 EFI_STATUS
1156 EFIAPI
1157 SEnvCmdDisconnectGetLineHelp (
1158   OUT CHAR16                  **Str
1159   )
1160 /*++
1161
1162 Routine Description:
1163
1164   Get this command's line help
1165
1166 Arguments:
1167
1168   Str - The line help
1169
1170 Returns:
1171
1172   EFI_SUCCESS   - Success
1173
1174 --*/
1175 ;
1176
1177 EFI_STATUS
1178 EFIAPI
1179 SEnvCmdDisconnect (
1180   IN EFI_HANDLE               ImageHandle,
1181   IN EFI_SYSTEM_TABLE         *SystemTable
1182   );
1183
1184 EFI_STATUS
1185 EFIAPI
1186 SEnvCmdReconnectGetLineHelp (
1187   OUT CHAR16                  **Str
1188   )
1189 /*++
1190
1191 Routine Description:
1192
1193   Get this command's line help
1194
1195 Arguments:
1196
1197   Str - The line help
1198
1199 Returns:
1200
1201   EFI_SUCCESS   - Success
1202
1203 --*/
1204 ;
1205
1206 EFI_STATUS
1207 EFIAPI
1208 SEnvCmdReconnect (
1209   IN EFI_HANDLE               ImageHandle,
1210   IN EFI_SYSTEM_TABLE         *SystemTable
1211   );
1212
1213 VARIABLE_ID               *
1214 SEnvMapDeviceFromName (
1215   IN OUT CHAR16   **pPath
1216   );
1217
1218 EFI_DEVICE_PATH_PROTOCOL  *
1219 SEnvIFileNameToPath (
1220   IN CHAR16               *Path
1221   );
1222
1223 EFI_DEVICE_PATH_PROTOCOL  *
1224 SEnvFileNameToPath (
1225   IN CHAR16               *Path
1226   );
1227
1228 EFI_DEVICE_PATH_PROTOCOL  *
1229 EFIAPI
1230 SEnvNameToPath (
1231   IN CHAR16                   *PathName
1232   );
1233
1234 EFI_STATUS
1235 SEnvSetCurrentDevice (
1236   IN CHAR16       *Name
1237   );
1238
1239 CHAR16                    *
1240 EFIAPI
1241 SEnvGetCurDir (
1242   IN CHAR16       *DeviceName OPTIONAL
1243   );
1244
1245 EFI_STATUS
1246 EFIAPI
1247 SEnvCmdCdGetLineHelp (
1248   OUT CHAR16      **Str
1249   )
1250 /*++
1251
1252 Routine Description:
1253
1254   Get this command's line help
1255
1256 Arguments:
1257
1258   Str - The line help
1259
1260 Returns:
1261
1262   EFI_SUCCESS   - Success
1263
1264 --*/
1265 ;
1266
1267 EFI_STATUS
1268 EFIAPI
1269 SEnvCmdCd (
1270   IN EFI_HANDLE           ImageHandle,
1271   IN EFI_SYSTEM_TABLE     *SystemTable
1272   );
1273
1274 EFI_STATUS
1275 SEnvGetFsName (
1276   IN EFI_HANDLE               Handle,
1277   IN BOOLEAN                  ConsistMapping,
1278   OUT CHAR16                  **Name
1279   );
1280
1281 EFI_STATUS
1282 SEnvGetFsDevicePath (
1283   IN CHAR16                    *Name,
1284   OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
1285   );
1286
1287 //
1288 // Prototypes from echo.c
1289 //
1290 EFI_STATUS
1291 EFIAPI
1292 SEnvCmdEchoGetLineHelp (
1293   OUT CHAR16              **Str
1294   )
1295 /*++
1296
1297 Routine Description:
1298
1299   Get this command's line help
1300
1301 Arguments:
1302
1303   Str - The line help
1304
1305 Returns:
1306
1307   EFI_SUCCESS   - Success
1308
1309 --*/
1310 ;
1311
1312 EFI_STATUS
1313 EFIAPI
1314 SEnvCmdEcho (
1315   IN EFI_HANDLE           ImageHandle,
1316   IN EFI_SYSTEM_TABLE     *SystemTable
1317   );
1318
1319 //
1320 // Prototypes from if.c
1321 //
1322 EFI_STATUS
1323 EFIAPI
1324 SEnvCmdIfGetLineHelp (
1325   OUT CHAR16              **Str
1326   )
1327 /*++
1328
1329 Routine Description:
1330
1331   Get this command's line help
1332
1333 Arguments:
1334
1335   Str - The line help
1336
1337 Returns:
1338
1339   EFI_SUCCESS   - Success
1340
1341 --*/
1342 ;
1343
1344 EFI_STATUS
1345 EFIAPI
1346 SEnvCmdIf (
1347   IN EFI_HANDLE           ImageHandle,
1348   IN EFI_SYSTEM_TABLE     *SystemTable
1349   );
1350
1351 EFI_STATUS
1352 EFIAPI
1353 SEnvCmdElseGetLineHelp (
1354   OUT CHAR16              **Str
1355   )
1356 /*++
1357
1358 Routine Description:
1359
1360   Get this command's line help
1361
1362 Arguments:
1363
1364   Str - The line help
1365
1366 Returns:
1367
1368   EFI_SUCCESS   - Success
1369
1370 --*/
1371 ;
1372
1373 EFI_STATUS
1374 EFIAPI
1375 SEnvCmdElse (
1376   IN EFI_HANDLE           ImageHandle,
1377   IN EFI_SYSTEM_TABLE     *SystemTable
1378   );
1379
1380 EFI_STATUS
1381 EFIAPI
1382 SEnvCmdEndifGetLineHelp (
1383   OUT CHAR16              **Str
1384   )
1385 /*++
1386
1387 Routine Description:
1388
1389   Get this command's line help
1390
1391 Arguments:
1392
1393   Str - The line help
1394
1395 Returns:
1396
1397   EFI_SUCCESS   - Success
1398
1399 --*/
1400 ;
1401
1402 EFI_STATUS
1403 EFIAPI
1404 SEnvCmdEndif (
1405   IN EFI_HANDLE           ImageHandle,
1406   IN EFI_SYSTEM_TABLE     *SystemTable
1407   );
1408
1409 EFI_STATUS
1410 EFIAPI
1411 SEnvCmdShiftGetLineHelp (
1412   OUT CHAR16              **Str
1413   )
1414 /*++
1415
1416 Routine Description:
1417
1418   Get this command's line help
1419
1420 Arguments:
1421
1422   Str - The line help
1423
1424 Returns:
1425
1426   EFI_SUCCESS   - Success
1427
1428 --*/
1429 ;
1430
1431 EFI_STATUS
1432 EFIAPI
1433 SEnvCmdShift (
1434   IN EFI_HANDLE           ImageHandle,
1435   IN EFI_SYSTEM_TABLE     *SystemTable
1436   );
1437 //
1438 // Prototypes from wait.c
1439 //
1440 EFI_STATUS
1441 EFIAPI
1442 SEnvNoUse (
1443   IN EFI_HANDLE           ImageHandle,
1444   IN EFI_SYSTEM_TABLE     *SystemTable
1445   );
1446
1447 //
1448 // Prototypes from goto.c
1449 //
1450 EFI_STATUS
1451 EFIAPI
1452 SEnvCmdGotoGetLineHelp (
1453   OUT CHAR16              **Str
1454   )
1455 /*++
1456
1457 Routine Description:
1458
1459   Get this command's line help
1460
1461 Arguments:
1462
1463   Str - The line help
1464
1465 Returns:
1466
1467   EFI_SUCCESS   - Success
1468
1469 --*/
1470 ;
1471
1472 EFI_STATUS
1473 EFIAPI
1474 SEnvCmdGoto (
1475   IN EFI_HANDLE           ImageHandle,
1476   IN EFI_SYSTEM_TABLE     *SystemTable
1477   );
1478
1479 EFI_STATUS
1480 SEnvCheckForGotoTarget (
1481   IN  CHAR16 *Candidate,
1482   IN  UINT64 GotoFilePos,
1483   IN  UINT64 FilePosition,
1484   OUT UINTN  *GotoTargetStatus
1485   );
1486
1487 VOID
1488 SEnvPrintLabelNotFound (
1489   VOID
1490   );
1491
1492 VOID
1493 SEnvInitTargetLabel (
1494   VOID
1495   );
1496
1497 VOID
1498 SEnvFreeTargetLabel (
1499   VOID
1500   );
1501
1502 //
1503 // Prototypes from for.c
1504 //
1505 VOID
1506 SEnvInitForLoopInfo (
1507   VOID
1508   );
1509
1510 EFI_STATUS
1511 SEnvSubstituteForLoopIndex (
1512   IN CHAR16  *Str,
1513   OUT CHAR16 **Val
1514   );
1515
1516 EFI_STATUS
1517 EFIAPI
1518 SEnvCmdForGetLineHelp (
1519   OUT CHAR16              **Str
1520   )
1521 /*++
1522
1523 Routine Description:
1524
1525   Get this command's line help
1526
1527 Arguments:
1528
1529   Str - The line help
1530
1531 Returns:
1532
1533   EFI_SUCCESS   - Success
1534
1535 --*/
1536 ;
1537
1538 EFI_STATUS
1539 EFIAPI
1540 SEnvCmdFor (
1541   IN EFI_HANDLE           ImageHandle,
1542   IN EFI_SYSTEM_TABLE     *SystemTable
1543   );
1544
1545 EFI_STATUS
1546 EFIAPI
1547 SEnvCmdEndforGetLineHelp (
1548   OUT CHAR16              **Str
1549   )
1550 /*++
1551
1552 Routine Description:
1553
1554   Get this command's line help
1555
1556 Arguments:
1557
1558   Str - The line help
1559
1560 Returns:
1561
1562   EFI_SUCCESS   - Success
1563
1564 --*/
1565 ;
1566
1567 EFI_STATUS
1568 EFIAPI
1569 SEnvCmdEndfor (
1570   IN EFI_HANDLE           ImageHandle,
1571   IN EFI_SYSTEM_TABLE     *SystemTable
1572   );
1573
1574 //
1575 // Prototypes from pause.c
1576 //
1577 EFI_STATUS
1578 EFIAPI
1579 SEnvCmdPauseGetLineHelp (
1580   OUT CHAR16              **Str
1581   )
1582 /*++
1583
1584 Routine Description:
1585
1586   Get this command's line help
1587
1588 Arguments:
1589
1590   Str - The line help
1591
1592 Returns:
1593
1594   EFI_SUCCESS   - Success
1595
1596 --*/
1597 ;
1598
1599 EFI_STATUS
1600 EFIAPI
1601 SEnvCmdPause (
1602   IN EFI_HANDLE           ImageHandle,
1603   IN EFI_SYSTEM_TABLE     *SystemTable
1604   );
1605
1606 //
1607 // Prototypes from marg.c
1608 //
1609 CHAR16                    *
1610 SEnvFileHandleToFileName (
1611   IN EFI_FILE_HANDLE      Handle
1612   );
1613
1614 EFI_STATUS
1615 EFIAPI
1616 SEnvDelDupFileArg (
1617   IN EFI_LIST_ENTRY   *ListHead
1618   );
1619
1620 EFI_STATUS
1621 EFIAPI
1622 SEnvFreeFileList (
1623   IN OUT EFI_LIST_ENTRY   *ListHead
1624   );
1625
1626 EFI_STATUS
1627 EFIAPI
1628 SEnvFileMetaArg (
1629   IN CHAR16               *Arg,
1630   IN OUT EFI_LIST_ENTRY   *ListHead
1631   );
1632
1633 EFI_STATUS
1634 SEnvIFileMetaArg (
1635   IN CHAR16               *Arg,
1636   IN OUT EFI_LIST_ENTRY   *ListHead
1637   );
1638
1639 EFI_STATUS
1640 EFIAPI
1641 SEnvIFileMetaArgNoWildCard (
1642   IN CHAR16               *Arg,
1643   IN OUT EFI_LIST_ENTRY   *ListHead
1644   );
1645
1646 EFI_STATUS
1647 CheckValidFileName (
1648   IN OUT CHAR16               *Path
1649   );
1650
1651 VOID
1652 EFIStructsPrint (
1653   IN  VOID                     *Buffer,
1654   IN  UINTN                    BlockSize,
1655   IN  UINT64                   BlockAddress,
1656   IN  EFI_BLOCK_IO_PROTOCOL    *BlkIo
1657   );
1658
1659 EFI_STATUS
1660 DumpBlockDev (
1661   IN EFI_HANDLE               ImageHandle,
1662   IN EFI_SYSTEM_TABLE         *SystemTable
1663   )
1664 /*++
1665
1666 Routine Description:
1667
1668   Dump block device
1669
1670 Arguments:
1671
1672   ImageHandle - The image handle
1673   SystemTable - The system table
1674
1675 Returns:
1676
1677   EFI_SUCCESS - Success
1678
1679 --*/
1680 ;
1681
1682 //
1683 // Device path info
1684 //
1685 #define DEVICEPATH_INFO_SIGNATURE EFI_SIGNATURE_32 ('d', 'p', 'i', 's')
1686 typedef struct {
1687   UINTN                     Signature;
1688   EFI_LIST_ENTRY            Link;
1689   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
1690   BOOLEAN                   Found;
1691 } DEVICEPATH_INFO;
1692
1693 VOID
1694 SEnvGetCurMappings (
1695   VOID
1696   );
1697 VOID
1698 SEnvCheckValidMappings (
1699   VARIABLE_ID *Var
1700   );
1701 VOID
1702 SEnvGetDevicePathList (
1703   EFI_LIST_ENTRY    *ListHead,
1704   EFI_GUID          *Protocol
1705   );
1706 BOOLEAN
1707 SEnvCompareDevicePathList (
1708   EFI_LIST_ENTRY    *ListHead1,
1709   EFI_LIST_ENTRY    *ListHead2
1710   );
1711
1712 //
1713 // Global data
1714 //
1715 extern EFI_GUID                     SEnvEnvId;
1716 extern EFI_GUID                     SEnvMapId;
1717 extern EFI_GUID                     SEnvProtId;
1718 extern EFI_GUID                     SEnvAliasId;
1719 extern EFI_SHELL_ENVIRONMENT        SEnvInterface;
1720 extern EFI_SHELL_ENVIRONMENT2       SEnvInterface2;
1721
1722 extern EFI_FILE                     SEnvIOFromCon;
1723 extern EFI_FILE                     SEnvErrIOFromCon;
1724 extern FLOCK                        SEnvLock;
1725 extern FLOCK                        SEnvGuidLock;
1726 extern UINTN                        SEnvNoHandles;
1727 extern EFI_HANDLE                   *SEnvHandles;
1728 extern EFI_SIMPLE_TEXT_OUT_PROTOCOL SEnvConToIo;
1729 extern EFI_SIMPLE_TEXT_OUT_PROTOCOL SEnvDummyConToIo;
1730
1731 extern EFI_LIST_ENTRY               SEnvProtocolInfo;
1732 extern EFI_LIST_ENTRY               SEnvEnv;
1733 extern EFI_LIST_ENTRY               SEnvMap;
1734 extern EFI_LIST_ENTRY               SEnvCmds;
1735 extern EFI_LIST_ENTRY               SEnvCurMapping;
1736 extern UINTN                        SEnvNoHandles;
1737 extern EFI_HANDLE                   *SEnvHandles;
1738 extern EFI_LIST_ENTRY               SEnvAlias;
1739 //
1740 // Data structures and Prototypes from batch.c
1741 //
1742 //
1743 // Goto target searching status
1744 //
1745 #define GOTO_TARGET_FOUND         (1)
1746 #define GOTO_TARGET_NOT_FOUND     (2)
1747 #define GOTO_TARGET_DOESNT_EXIST  (3)
1748
1749 //
1750 // Data structure for batch script processing
1751 //
1752 //
1753 //  Definitions for the statement stack
1754 //
1755 //  To allow checking if/endif or for/endif matching, and to prevent from
1756 //  jumpting into another loop using goto, for each script, a statement
1757 //  stack is maintained. It contain the nesting information of the if/for
1758 //  statements. For the if statement, the true or false of the condition
1759 //  is recorded; for the for statement, the variable name and a list of
1760 //  variable values are recorded.
1761 //
1762 #define EFI_BATCH_VAR_SIGNATURE EFI_SIGNATURE_32 ('b', 'v', 'a', 'r')
1763 typedef struct {
1764   UINTN           Signature;
1765   EFI_LIST_ENTRY  Link;
1766
1767   CHAR16          *Value;
1768 } EFI_BATCH_VAR_VALUE;
1769
1770 typedef enum {
1771   StmtFor,
1772   StmtIf,
1773   StmtUndefined
1774 } EFI_BATCH_STMT_TYPE;
1775
1776 #define EFI_BATCH_STMT_SIGNATURE  EFI_SIGNATURE_32 ('b', 's', 'm', 't')
1777 typedef struct {
1778   CHAR16          VariableName[1];
1779   EFI_LIST_ENTRY  ValueList;
1780   UINTN           BeginLineNum;
1781 } EFI_BATCH_FOR_INFO;
1782
1783 typedef struct {
1784   BOOLEAN Condition;
1785   BOOLEAN FoundElse;
1786 } EFI_BATCH_IF_INFO;
1787
1788 typedef union {
1789   EFI_BATCH_FOR_INFO  ForInfo;
1790   EFI_BATCH_IF_INFO   IfInfo;
1791 } EFI_BATCH_STMT_INFO;
1792
1793 typedef struct {
1794   UINTN               Signature;
1795   EFI_LIST_ENTRY      Link;
1796
1797   EFI_BATCH_STMT_TYPE StmtType;
1798   UINT64              BeginFilePos;
1799   EFI_BATCH_STMT_INFO StmtInfo;
1800 } EFI_BATCH_STATEMENT;
1801
1802 typedef struct {
1803   UINTN           NestLevel;
1804   EFI_LIST_ENTRY  StmtList;
1805
1806 } EFI_BATCH_STMT_STACK;
1807
1808 //
1809 //  Definitions for the script stack
1810 //
1811 //  In order to support nested scripts (script calling script calling
1812 //  script...). There is an script stack "ScriptStack". It is a list of
1813 //  scripts, each script contain a argument list, a statement stack, and
1814 //  the current file position. The argument list contains Argv[0] - Argv[n]
1815 //  of the script, this allows positional argument substitution to be done
1816 //  when each line is read and scanned.
1817 //
1818 #define EFI_BATCH_ARG_SIGNATURE EFI_SIGNATURE_32 ('b', 'a', 'r', 'g')
1819 typedef struct {
1820   UINTN               Signature;
1821   EFI_LIST_ENTRY      Link;
1822
1823   CHAR16              *ArgValue;
1824   EFI_SHELL_ARG_INFO  *ArgInfo;
1825 } EFI_BATCH_ARGUMENT;
1826
1827 #define EFI_BATCH_SCRIPT_SIGNATURE  EFI_SIGNATURE_32 ('b', 's', 'p', 't')
1828 typedef struct {
1829   UINTN                 Signature;
1830   EFI_LIST_ENTRY        Link;
1831
1832   EFI_LIST_ENTRY        ArgListHead;  // Head of argument list
1833   EFI_BATCH_STMT_STACK  StmtStack;
1834   UINT64                FilePosition; // Current file position
1835   BOOLEAN               BatchAbort;
1836   UINTN                 LineNumber;
1837   UINTN                 ShiftIndex;
1838 } EFI_BATCH_SCRIPT;
1839
1840 typedef struct {
1841   UINTN           NestLevel;
1842   EFI_LIST_ENTRY  ScriptList;
1843 } EFI_BATCH_SCRIPT_STACK;
1844
1845 #define EFI_SHELL_BATCH_MODE_SIGNATURE  EFI_SIGNATURE_32 ('s', 'b', 'm', 's')
1846 typedef struct _EFI_SHELL_BATCH_MODE_STACK {
1847   UINTN           Signature;
1848   CHAR16          ModeName[64];
1849   EFI_LIST_ENTRY  Link;
1850 } EFI_SHELL_BATCH_MODE_STACK;
1851 //
1852 // Prototype declaration
1853 //
1854 VOID
1855 SEnvInitBatch (
1856   VOID
1857   );
1858
1859 EFI_STATUS
1860 SEnvBatchSetFilePosition (
1861   IN UINT64 NewPos
1862   );
1863
1864 EFI_STATUS
1865 SEnvBatchFindVariable (
1866   IN  CHAR16                   *VariableName,
1867   OUT CHAR16                   **Value
1868   );
1869
1870 EFI_BATCH_STATEMENT *
1871 SEnvBatchExtraStackTop (
1872   VOID
1873   );
1874
1875 EFI_BATCH_STATEMENT *
1876 SEnvBatchStmtStackTop (
1877   VOID
1878   );
1879
1880 /*
1881 BOOLEAN
1882 SEnvBatchIsStmtStackEmpty (
1883   VOID
1884   );
1885 */
1886 EFI_BATCH_STATEMENT *
1887 SEnvGetJumpStmt (
1888   VOID
1889   );
1890
1891 EFI_STATUS
1892 SEnvBatchFindArgument (
1893   IN  UINTN                    ArgumentNum,
1894   OUT CHAR16                   **Value,
1895   OUT EFI_SHELL_ARG_INFO       **ArgInfo
1896   );
1897
1898 EFI_STATUS
1899 SEnvFindBatchFileName (
1900   OUT CHAR16                   **Value
1901   );
1902
1903 EFI_STATUS
1904 SEnvBatchShiftArgument (
1905   VOID
1906   );
1907
1908 VOID
1909 SEnvBatchSetGotoActive (
1910   VOID
1911   );
1912
1913 BOOLEAN
1914 SEnvBatchGetGotoActive (
1915   VOID
1916   );
1917
1918 UINTN
1919 SEnvGetLineNumber (
1920   VOID
1921   );
1922
1923 VOID
1924 SEnvSetLineNumber (
1925   UINTN                        LineNumber
1926   );
1927
1928 BOOLEAN
1929 SEnvBatchGetRewind (
1930   VOID
1931   );
1932
1933 EFI_STATUS
1934 SEnvTryMoveUpJumpStmt (
1935   IN  EFI_BATCH_STMT_TYPE      StmtType,
1936   OUT BOOLEAN                  *Success
1937   );
1938
1939 EFI_STATUS
1940 SEnvMoveDownJumpStmt (
1941   IN  EFI_BATCH_STMT_TYPE      StmtType
1942   ) ;
1943
1944 EFI_STATUS
1945 SEnvBatchResetJumpStmt (
1946   VOID
1947   );
1948
1949 BOOLEAN
1950 SEnvBatchExtraStackEmpty (
1951   VOID
1952   );
1953
1954 BOOLEAN
1955 EFIAPI
1956 SEnvBatchIsActive (
1957   VOID
1958   );
1959
1960 VOID
1961 EFIAPI
1962 SEnvFreeResources (
1963   VOID
1964   );
1965
1966 VOID
1967 SEnvSetBatchAbort (
1968   VOID
1969   );
1970
1971 CHAR16              *
1972 SEnvBatchGetLastError (
1973   VOID
1974   );
1975
1976 EFI_STATUS
1977 SEnvBatchEchoCommand (
1978   IN  ENV_SHELL_INTERFACE      *Shell
1979   );
1980
1981 BOOLEAN
1982 SEnvBatchGetEcho (
1983   VOID
1984   );
1985
1986 VOID
1987 SEnvBatchSetEcho (
1988   IN  BOOLEAN                  Val
1989   );
1990
1991 EFI_STATUS
1992 SEnvExecuteScript (
1993   IN  ENV_SHELL_INTERFACE      *Shell,
1994   IN  EFI_FILE_HANDLE          File
1995   );
1996
1997 BOOLEAN
1998 SEnvBatchVarIsLastError (
1999   IN  CHAR16                   *Name
2000   );
2001
2002 VOID
2003 SEnvBatchGetConsole (
2004   OUT EFI_SIMPLE_TEXT_IN_PROTOCOL  **ConIn,
2005   OUT EFI_SIMPLE_TEXT_OUT_PROTOCOL **ConOut
2006   );
2007
2008 EFI_STATUS
2009 SEnvBatchPushStmtStack (
2010   IN  EFI_BATCH_STMT_TYPE      StmtType,
2011   IN  BOOLEAN                  PushExtraStack
2012   );
2013
2014 EFI_STATUS
2015 SEnvBatchPushFor2Stack (
2016   IN EFI_BATCH_STMT_TYPE                    StmtType,
2017   IN BOOLEAN                                PushExtraStack
2018   );
2019
2020 EFI_STATUS
2021 SEnvBatchPopStmtStack (
2022   IN  UINTN                    PopCount,
2023   IN  BOOLEAN                  PushExtraStack
2024   );
2025
2026 EFI_STATUS
2027 SEnvBatchSetCondition (
2028   IN  BOOLEAN                  Val
2029   );
2030
2031 BOOLEAN
2032 SEnvBatchGetCondition (
2033   VOID
2034   );
2035
2036 //
2037 //  Shell mode switch support
2038 //
2039 EFI_STATUS
2040 SEnvGetShellMode (
2041   OUT CHAR16       **Mode
2042   );
2043
2044 #endif // _SHELLE_H_