4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePathFromText protocol as defined in the UEFI 2.0 specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "DevicePath.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Duplicates a string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Src Source string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The duplicated string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrDuplicate (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *Src
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return AllocateCopyPool (StrSize (Src), Src);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get parameter in a pair of parentheses follow the given node name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync For example, given the "Pci(0,1)" and NodeName "Pci", it returns "0,1".
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str Device Path Text.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NodeName Name of the node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Parameter text for the node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetParamByNodeName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *NodeName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ParamStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StrPointer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NodeNameLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ParameterLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Check whether the node name matchs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NodeNameLength = StrLen (NodeName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (CompareMem (Str, NodeName, NodeNameLength * sizeof (CHAR16)) != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = Str + NodeNameLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_LEFT_PARENTH (*ParamStr)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Skip the found '(' and find first occurrence of ')'
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterLength = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrPointer = ParamStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_NULL (*StrPointer)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_RIGHT_PARENTH (*StrPointer)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrPointer++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterLength++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_NULL (*StrPointer)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ')' not found
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = AllocateCopyPool ((ParameterLength + 1) * sizeof (CHAR16), ParamStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ParamStr == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Terminate the parameter string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr[ParameterLength] = L'\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ParamStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Gets current sub-string from a string list, before return
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the list header is moved to next sub-string. The sub-string is separated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by the specified character. For example, the separator is ',', the string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync list is "2,0,3", it returns "2", the remain list move to "0,3"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param List A string list separated by the specified separator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Separator The separator character
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the current sub-string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSplitStr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 **List,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 Separator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ReturnStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = *List;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReturnStr = Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ReturnStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Find first occurrence of the separator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (*Str == Separator) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (*Str == Separator) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Find a sub-string, terminate it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Str = L'\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Move to next sub-string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *List = Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ReturnStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Gets the next parameter string from the list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param List A string list separated by the specified separator
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the current sub-string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetNextParamStr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 **List
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The separator is comma
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return SplitStr (List, L',');
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get one device node from entire device path text.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DevicePath On input, the current Device Path node; on output, the next device path node
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IsInstanceEnd This node is the end of a device path instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A device node text or NULL if no more device node available
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGetNextDeviceNodeStr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 **DevicePath,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT BOOLEAN *IsInstanceEnd
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ReturnStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ParenthesesStack;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Skip the leading '/', '(', ')' and ','
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_SLASH (*Str) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !IS_COMMA (*Str) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !IS_LEFT_PARENTH (*Str) &&
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync !IS_RIGHT_PARENTH (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReturnStr = Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Scan for the separator of this device node, '/' or ','
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParenthesesStack = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((IS_COMMA (*Str) || IS_SLASH (*Str)) && (ParenthesesStack == 0)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_LEFT_PARENTH (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParenthesesStack++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (IS_RIGHT_PARENTH (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParenthesesStack--;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ParenthesesStack != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The '(' doesn't pair with ')', invalid device path text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_COMMA (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *IsInstanceEnd = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Str = L'\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *IsInstanceEnd = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Str = L'\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *DevicePath = Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ReturnStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Skip the leading white space and '0x' or '0X' of a integer string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The integer string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IsHex TRUE: Hex string, FALSE: Decimal string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The trimmed Hex string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCHAR16 *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTrimHexStr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT BOOLEAN *IsHex
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *IsHex = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // skip preceeding white space
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((*Str != 0) && *Str == ' ') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // skip preceeding zeros
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((*Str != 0) && *Str == '0') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // skip preceeding character 'x' or 'X'
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((*Str != 0) && (*Str == 'x' || *Str == 'X')) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *IsHex = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert hex string to uint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The hex string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A UINTN value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXtoi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return StrHexToUintn (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert hex string to 64 bit data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The hex string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data A pointer to the UINT64 value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncXtoi64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 *Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Data = StrHexToUint64 (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert decimal string to uint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The decimal string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A UINTN value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDtoi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Rvalue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 Char;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN High;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Low;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Str != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync High = (UINTN) -1 / 10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Low = (UINTN) -1 % 10;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // skip preceeding white space
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((*Str != 0) && *Str == ' ') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // convert digits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rvalue = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Char = *(Str++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (Char != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Char >= '0' && Char <= '9') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Rvalue > High || Rvalue == High) && (Char - '0' > (INTN) Low)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (UINTN) -1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rvalue = (Rvalue * 10) + Char - '0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Char = *(Str++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Rvalue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert decimal string to uint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The decimal string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data A pointer to the UINT64 value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDtoi64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 *Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Rvalue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 Char;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 High;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Low;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Str != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Data != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // skip preceeding white space
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((*Str != 0) && *Str == ' ') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // convert digits
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rvalue = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Char = *(Str++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (Char != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Char >= '0' && Char <= '9') {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync High = LShiftU64 (Rvalue, 3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Low = LShiftU64 (Rvalue, 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Rvalue = High + Low + Char - '0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Char = *(Str++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Data = Rvalue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert integer string to uint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The integer string. If leading with "0x" or "0X", it's hexadecimal.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A UINTN value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrtoi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsHex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = TrimHexStr (Str, &IsHex);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IsHex) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Xtoi (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Dtoi (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert integer string to 64 bit data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The integer string. If leading with "0x" or "0X", it's hexadecimal.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data A pointer to the UINT64 value represented by Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrtoi64 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 *Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsHex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = TrimHexStr (Str, &IsHex);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IsHex) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Xtoi64 (Str, Data);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Dtoi64 (Str, Data);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a list of string to a specified buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Buf The output buffer that contains the string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param BufferLength The length of the buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The input string that contains the hex number
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The string was successfully converted to the buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrToBuf (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT8 *Buf,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN BufferLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN StrLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Digit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Byte;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Digit = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Two hex char make up one byte
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrLength = BufferLength * sizeof (CHAR16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for(Index = 0; Index < StrLength; Index++, Str++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((*Str >= L'a') && (*Str <= L'f')) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Digit = (UINT8) (*Str - L'a' + 0x0A);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if ((*Str >= L'A') && (*Str <= L'F')) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Digit = (UINT8) (*Str - L'A' + 0x0A);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if ((*Str >= L'0') && (*Str <= L'9')) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Digit = (UINT8) (*Str - L'0');
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_INVALID_PARAMETER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For odd characters, write the upper nibble for each buffer byte,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // and for even characters, the lower nibble.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((Index & 1) == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Byte = (UINT8) (Digit << 4);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Byte = Buf[Index / 2];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Byte &= 0xF0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Byte = (UINT8) (Byte | Digit);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Buf[Index / 2] = Byte;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a string to GUID value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Guid Format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The registry format GUID string that contains the GUID value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Guid A pointer to the converted GUID value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The GUID string was successfully converted to the GUID value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The input string is not in registry format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return others Some error occurred when converting part of GUID value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrToGuid (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_GUID *Guid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the first UINT32 data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Guid->Data1 = (UINT32) StrHexToUint64 (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str ++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_HYPHEN (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the second UINT16 data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Guid->Data2 = (UINT16) StrHexToUint64 (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str ++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_HYPHEN (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the third UINT16 data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Guid->Data3 = (UINT16) StrHexToUint64 (Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str ++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_HYPHEN (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Get the following 8 bytes data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToBuf (&Guid->Data4[0], 2, Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Skip 2 byte hex chars
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str += 2 * 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_HYPHEN (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_UNSUPPORTED;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToBuf (&Guid->Data4[2], 6, Str);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_SUCCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a string to IPv4 address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str A string representation of IPv4 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IPv4Addr A pointer to the converted IPv4 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrToIPv4Addr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 **Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_IPv4_ADDRESS *IPv4Addr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < 4; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4Addr->Addr[Index] = (UINT8) Dtoi (SplitStr (Str, L'.'));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a string to IPv4 address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str A string representation of IPv6 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param IPv6Addr A pointer to the converted IPv6 address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrToIPv6Addr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR16 **Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_IPv6_ADDRESS *IPv6Addr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Data;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < 8; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data = (UINT16) Xtoi (SplitStr (Str, L':'));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6Addr->Addr[Index * 2] = (UINT8) (Data >> 8);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6Addr->Addr[Index * 2 + 1] = (UINT8) (Data & 0xff);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a Unicode string to ASCII string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Str The equivalent Unicode string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param AsciiStr On input, it points to destination ASCII string buffer; on output, it points
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the next ASCII string next to it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncStrToAscii (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Str,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT CHAR8 **AsciiStr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *Dest;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Dest = *AsciiStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while (!IS_NULL (*Str)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *(Dest++) = (CHAR8) *(Str++);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *Dest = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Return the string next to it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *AsciiStr = Dest + 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Hardware PCI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to Hardware PCI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextPci (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FunctionStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DeviceStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PCI_DEVICE_PATH *Pci;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FunctionStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pci = (PCI_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDWARE_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HW_PCI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (PCI_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pci->Function = (UINT8) Strtoi (FunctionStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pci->Device = (UINT8) Strtoi (DeviceStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Pci;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Hardware PC card device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to Hardware PC card device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextPcCard (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FunctionNumberStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PCCARD_DEVICE_PATH *Pccard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FunctionNumberStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pccard = (PCCARD_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDWARE_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HW_PCCARD_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (PCCARD_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Pccard->FunctionNumber = (UINT8) Strtoi (FunctionNumberStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Pccard;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Hardware memory map device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to Hardware memory map device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextMemoryMapped (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *MemoryTypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StartingAddressStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *EndingAddressStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEMMAP_DEVICE_PATH *MemMap;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MemoryTypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartingAddressStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndingAddressStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MemMap = (MEMMAP_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDWARE_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HW_MEMMAP_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MEMMAP_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MemMap->MemoryType = (UINT32) Strtoi (MemoryTypeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (StartingAddressStr, &MemMap->StartingAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (EndingAddressStr, &MemMap->EndingAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) MemMap;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor device path structure based on the input Type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and SubType.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Type The type of device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param SubType The subtype of device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertFromTextVendor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 SubType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DataStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH *Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = StrLen (DataStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Two hex characters make up 1 buffer byte
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = (Length + 1) / 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SubType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) (sizeof (VENDOR_DEVICE_PATH) + Length)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (GuidStr, &Vendor->Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToBuf (((UINT8 *) Vendor) + sizeof (VENDOR_DEVICE_PATH), Length, DataStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor Hardware device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor Hardware device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenHw (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextVendor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDWARE_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HW_VENDOR_DP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Hardware Controller device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Hardware Controller device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextCtrl (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ControllerStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CONTROLLER_DEVICE_PATH *Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Controller = (CONTROLLER_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDWARE_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HW_CONTROLLER_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (CONTROLLER_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Controller->ControllerNumber = (UINT32) Strtoi (ControllerStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a string to EisaId.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Text The input string.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EisaId A pointer to the output EisaId.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEisaIdFromText (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Text,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *EisaId
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PnpId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PnpId = Xtoi (Text + 3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *EisaId = (((Text[0] - '@') & 0x1f) << 10) +
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((Text[1] - '@') & 0x1f) << 5) +
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((Text[2] - '@') & 0x1f) +
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT32) (PnpId << 16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to ACPI HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created ACPI HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextAcpi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *HIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *UIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_HID_DEVICE_PATH *Acpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (ACPI_HID_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EisaIdFromText (HIDStr, &Acpi->HID);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Acpi->UID = (UINT32) Strtoi (UIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Acpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to ACPI HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PnPId The input plug and play identification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created ACPI HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertFromTextAcpi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 PnPId
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *UIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_HID_DEVICE_PATH *Acpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Acpi = (ACPI_HID_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (ACPI_HID_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Acpi->HID = EFI_PNP_ID (PnPId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Acpi->UID = (UINT32) Strtoi (UIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Acpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to PCI root device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created PCI root device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextPciRoot (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0a03);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to PCIE root device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created PCIE root device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextPcieRoot (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0a08);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Floppy device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Floppy device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFloppy (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0604);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Keyboard device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Keyboard device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextKeyboard (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0301);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Serial device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Serial device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextSerial (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0501);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Parallel Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Parallel Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextParallelPort (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextAcpi (TextDeviceNode, 0x0401);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to ACPI extension device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created ACPI extension device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextAcpiEx (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *HIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *CIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *UIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *HIDSTRStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *CIDSTRStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *UIDSTRStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *AsciiStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_EXTENDED_HID_DEVICE_PATH *AcpiEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HIDSTRStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CIDSTRStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UIDSTRStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = (UINT16) (sizeof (ACPI_EXTENDED_HID_DEVICE_PATH) + StrLen (HIDSTRStr) + 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = (UINT16) (Length + StrLen (UIDSTRStr) + 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = (UINT16) (Length + StrLen (CIDSTRStr) + 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiEx = (ACPI_EXTENDED_HID_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_EXTENDED_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EisaIdFromText (HIDStr, &AcpiEx->HID);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EisaIdFromText (CIDStr, &AcpiEx->CID);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiEx->UID = (UINT32) Strtoi (UIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (HIDSTRStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (UIDSTRStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (CIDSTRStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) AcpiEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to ACPI extension device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created ACPI extension device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextAcpiExp (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *HIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *CIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *UIDSTRStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *AsciiStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_EXTENDED_HID_DEVICE_PATH *AcpiEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UIDSTRStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = (UINT16) (sizeof (ACPI_EXTENDED_HID_DEVICE_PATH) + StrLen (UIDSTRStr) + 3);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiEx = (ACPI_EXTENDED_HID_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_EXTENDED_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EisaIdFromText (HIDStr, &AcpiEx->HID);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EisaIdFromText (CIDStr, &AcpiEx->CID);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiEx->UID = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStr = (CHAR8 *) ((UINT8 *)AcpiEx + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // HID string is NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *AsciiStr = '\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Convert UID string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStr++;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (UIDSTRStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // CID string is NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *AsciiStr = '\0';
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) AcpiEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to ACPI _ADR device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created ACPI _ADR device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextAcpiAdr (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DisplayDeviceStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_ADR_DEVICE_PATH *AcpiAdr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiAdr = (ACPI_ADR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ACPI_ADR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (ACPI_ADR_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (AcpiAdr != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; ; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DisplayDeviceStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IS_NULL (*DisplayDeviceStr)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Index > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = DevicePathNodeLength (AcpiAdr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiAdr = ReallocatePool (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length + sizeof (UINT32),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AcpiAdr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (AcpiAdr != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SetDevicePathNodeLength (AcpiAdr, Length + sizeof (UINT32));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (&AcpiAdr->ADR)[Index] = (UINT32) Strtoi (DisplayDeviceStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) AcpiAdr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Parallel Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Parallel Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextAta (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PrimarySecondaryStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SlaveMasterStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATAPI_DEVICE_PATH *Atapi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Atapi = (ATAPI_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_ATAPI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (ATAPI_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrimarySecondaryStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SlaveMasterStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Atapi->PrimarySecondary = (UINT8) ((StrCmp (PrimarySecondaryStr, L"Primary") == 0) ? 0 : 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Atapi->SlaveMaster = (UINT8) ((StrCmp (SlaveMasterStr, L"Master") == 0) ? 0 : 1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Atapi->Lun = (UINT16) Strtoi (LunStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Atapi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to SCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created SCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextScsi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCSI_DEVICE_PATH *Scsi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Scsi = (SCSI_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_SCSI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (SCSI_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Scsi->Pun = (UINT16) Strtoi (PunStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Scsi->Lun = (UINT16) Strtoi (LunStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Scsi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Fibre device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Fibre device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFibre (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *WWNStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FIBRECHANNEL_DEVICE_PATH *Fibre;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WWNStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Fibre = (FIBRECHANNEL_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_FIBRECHANNEL_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (FIBRECHANNEL_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Fibre->Reserved = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (WWNStr, &Fibre->WWN);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (LunStr, &Fibre->Lun);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Fibre;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to FibreEx device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created FibreEx device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFibreEx (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *WWNStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FIBRECHANNELEX_DEVICE_PATH *FibreEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WWNStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FibreEx = (FIBRECHANNELEX_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_FIBRECHANNELEX_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (FIBRECHANNELEX_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FibreEx->Reserved = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (WWNStr, (UINT64 *) (&FibreEx->WWN));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (LunStr, (UINT64 *) (&FibreEx->Lun));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *(UINT64 *) (&FibreEx->WWN) = SwapBytes64 (*(UINT64 *) (&FibreEx->WWN));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *(UINT64 *) (&FibreEx->Lun) = SwapBytes64 (*(UINT64 *) (&FibreEx->Lun));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) FibreEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to 1394 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created 1394 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromText1394 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync F1394_DEVICE_PATH *F1394DevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync F1394DevPath = (F1394_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_1394_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (F1394_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync F1394DevPath->Reserved = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Xtoi64 (GuidStr, &F1394DevPath->Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) F1394DevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsb (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PortStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *InterfaceStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_DEVICE_PATH *Usb;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PortStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InterfaceStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Usb = (USB_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_USB_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (USB_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Usb->ParentPortNumber = (UINT8) Strtoi (PortStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Usb->InterfaceNumber = (UINT8) Strtoi (InterfaceStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Usb;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to I20 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created I20 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextI2O (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2O_DEVICE_PATH *I2ODevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2ODevPath = (I2O_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_I2O_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (I2O_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I2ODevPath->Tid = (UINT32) Strtoi (TIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) I2ODevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Infini Band device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Infini Band device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextInfiniband (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FlagsStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID PortGid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync INFINIBAND_DEVICE_PATH *InfiniBand;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagsStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfiniBand = (INFINIBAND_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_INFINIBAND_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (INFINIBAND_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InfiniBand->ResourceFlags = (UINT32) Strtoi (FlagsStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (GuidStr, &PortGid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (InfiniBand->PortGid, &PortGid, sizeof (EFI_GUID));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (SidStr, &InfiniBand->ServiceId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (TidStr, &InfiniBand->TargetPortId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (DidStr, &InfiniBand->DeviceId);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) InfiniBand;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor-Defined Messaging device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor-Defined Messaging device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenMsg (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextVendor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor defined PC-ANSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor defined PC-ANSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenPcAnsi (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH *Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VENDOR_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Vendor->Guid, &gEfiPcAnsiGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor defined VT100 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor defined VT100 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenVt100 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH *Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VENDOR_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Vendor->Guid, &gEfiVT100Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor defined VT100 Plus device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor defined VT100 Plus device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenVt100Plus (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH *Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VENDOR_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Vendor->Guid, &gEfiVT100PlusGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor defined UTF8 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor defined UTF8 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenUtf8 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH *Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vendor = (VENDOR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VENDOR_DEVICE_PATH));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Vendor->Guid, &gEfiVTUTF8Guid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to UART Flow Control device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created UART Flow Control device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUartFlowCtrl (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ValueStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UART_FLOW_CONTROL_DEVICE_PATH *UartFlowControl;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ValueStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UartFlowControl = (UART_FLOW_CONTROL_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (UART_FLOW_CONTROL_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&UartFlowControl->Guid, &gEfiUartDevicePathGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (ValueStr, L"XonXoff") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UartFlowControl->FlowControlMap = 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (ValueStr, L"Hardware") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UartFlowControl->FlowControlMap = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UartFlowControl->FlowControlMap = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) UartFlowControl;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Serial Attached SCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Serial Attached SCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextSAS (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *AddressStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *RTPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SASSATAStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LocationStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ConnectStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DriveBayStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ReservedStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SAS_DEVICE_PATH *Sas;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddressStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RTPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SASSATAStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LocationStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConnectStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriveBayStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ReservedStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = 0x0000;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sas = (SAS_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (SAS_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Sas->Guid, &gEfiSasDevicePathGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (AddressStr, &Sas->SasAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (LunStr, &Sas->Lun);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sas->RelativeTargetPort = (UINT16) Strtoi (RTPStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (SASSATAStr, L"NoTopology") != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (DriveBayStr, L"0") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0001;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0002;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = (UINT16) (Info | (Strtoi (DriveBayStr) << 8));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (SASSATAStr, L"SATA") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0010;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (LocationStr, L"External") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0020;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (ConnectStr, L"Expanded") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0040;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sas->DeviceTopology = Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sas->Reserved = (UINT32) Strtoi (ReservedStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Sas;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Serial Attached SCSI Ex device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Serial Attached SCSI Ex device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextSasEx (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *AddressStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *RTPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SASSATAStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LocationStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ConnectStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DriveBayStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SASEX_DEVICE_PATH *SasEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddressStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RTPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SASSATAStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LocationStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConnectStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriveBayStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = 0x0000;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SasEx = (SASEX_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_SASEX_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (SASEX_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (AddressStr, (UINT64 *) &SasEx->SasAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (LunStr, (UINT64 *) &SasEx->Lun);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *(UINT64 *) &SasEx->SasAddress = SwapBytes64 (*(UINT64 *) &SasEx->SasAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *(UINT64 *) &SasEx->Lun = SwapBytes64 (*(UINT64 *) &SasEx->Lun);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SasEx->RelativeTargetPort = (UINT16) Strtoi (RTPStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (SASSATAStr, L"NoTopology") != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (DriveBayStr, L"0") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0001;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0002;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info = (UINT16) (Info | (Strtoi (DriveBayStr) << 8));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (SASSATAStr, L"SATA") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0010;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (LocationStr, L"External") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0020;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (ConnectStr, L"Expanded") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Info |= 0x0040;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SasEx->DeviceTopology = Info;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) SasEx;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Debug Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Debug Port device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextDebugPort (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEFINED_MESSAGING_DEVICE_PATH *Vend;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vend = (VENDOR_DEFINED_MESSAGING_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VENDOR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VENDOR_DEFINED_MESSAGING_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyGuid (&Vend->Guid, &gEfiDebugPortProtocolGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vend;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to MAC device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created MAC device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextMAC (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *AddressStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *IfTypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Length;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MAC_ADDR_DEVICE_PATH *MACDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AddressStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IfTypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MACDevPath = (MAC_ADDR_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_MAC_ADDR_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MAC_ADDR_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MACDevPath->IfType = (UINT8) Strtoi (IfTypeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Length = sizeof (EFI_MAC_ADDRESS);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToBuf (&MACDevPath->MacAddress.Addr[0], Length, AddressStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) MACDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text format to the network protocol ID.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Text String of protocol field.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Network protocol ID .
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINTN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncNetworkProtocolFromText (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *Text
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (Text, L"UDP") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return RFC_1700_UDP_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (Text, L"TCP") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return RFC_1700_TCP_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Strtoi (Text);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to IPV4 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created IPV4 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextIPv4 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *RemoteIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProtocolStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LocalIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GatewayIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SubnetMaskStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4_DEVICE_PATH *IPv4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemoteIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LocalIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GatewayIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SubnetMaskStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4 = (IPv4_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_IPv4_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (IPv4_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv4Addr (&RemoteIPStr, &IPv4->RemoteIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4->Protocol = (UINT16) NetworkProtocolFromText (ProtocolStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (TypeStr, L"Static") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4->StaticIpAddress = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4->StaticIpAddress = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv4Addr (&LocalIPStr, &IPv4->LocalIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_NULL (*GatewayIPStr) && !IS_NULL (*SubnetMaskStr)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv4Addr (&GatewayIPStr, &IPv4->GatewayIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv4Addr (&SubnetMaskStr, &IPv4->SubnetMask);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&IPv4->GatewayIpAddress, sizeof (IPv4->GatewayIpAddress));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&IPv4->SubnetMask, sizeof (IPv4->SubnetMask));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4->LocalPort = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv4->RemotePort = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) IPv4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to IPV6 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created IPV6 device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextIPv6 (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *RemoteIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProtocolStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LocalIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GatewayIPStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PrefixLengthStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6_DEVICE_PATH *IPv6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemoteIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LocalIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PrefixLengthStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GatewayIPStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6 = (IPv6_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_IPv6_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (IPv6_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv6Addr (&RemoteIPStr, &IPv6->RemoteIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->Protocol = (UINT16) NetworkProtocolFromText (ProtocolStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (TypeStr, L"Static") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->IpAddressOrigin = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"StatelessAutoConfigure") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->IpAddressOrigin = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->IpAddressOrigin = 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv6Addr (&LocalIPStr, &IPv6->LocalIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_NULL (*GatewayIPStr) && !IS_NULL (*PrefixLengthStr)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToIPv6Addr (&GatewayIPStr, &IPv6->GatewayIpAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->PrefixLength = (UINT8) Strtoi (PrefixLengthStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&IPv6->GatewayIpAddress, sizeof (IPv6->GatewayIpAddress));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->PrefixLength = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->LocalPort = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IPv6->RemotePort = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) IPv6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to UART device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created UART device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUart (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *BaudStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DataBitsStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ParityStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StopBitsStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UART_DEVICE_PATH *Uart;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BaudStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataBitsStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParityStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StopBitsStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart = (UART_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_UART_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (UART_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->BaudRate = (StrCmp (BaudStr, L"DEFAULT") == 0) ? 115200 : Dtoi (BaudStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->DataBits = (UINT8) ((StrCmp (DataBitsStr, L"DEFAULT") == 0) ? 8 : Dtoi (DataBitsStr));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (*ParityStr) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'D':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'N':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'E':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'O':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'M':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case L'S':
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 5;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->Parity = 0xff;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (StopBitsStr, L"D") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->StopBits = (UINT8) 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (StopBitsStr, L"1") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->StopBits = (UINT8) 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (StopBitsStr, L"1.5") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->StopBits = (UINT8) 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (StopBitsStr, L"2") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->StopBits = (UINT8) 3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Uart->StopBits = 0xff;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Uart;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB class device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbClassText A pointer to USB_CLASS_TEXT structure to be integrated to USB Class Text.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB class device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertFromTextUsbClass (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_CLASS_TEXT *UsbClassText
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *VIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ClassStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SubClassStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProtocolStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_DEVICE_PATH *UsbClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass = (USB_CLASS_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_USB_CLASS_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (USB_CLASS_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UsbClassText->ClassExist) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ClassStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->DeviceClass = (UINT8) Strtoi (ClassStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->DeviceClass = UsbClassText->Class;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (UsbClassText->SubClassExist) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SubClassStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->DeviceSubClass = (UINT8) Strtoi (SubClassStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->DeviceSubClass = UsbClassText->SubClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->VendorId = (UINT16) Strtoi (VIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->ProductId = (UINT16) Strtoi (PIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClass->DeviceProtocol = (UINT8) Strtoi (ProtocolStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) UsbClass;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB class device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB class device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbClass (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB audio device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB audio device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbAudio (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_AUDIO;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB CDC Control device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB CDC Control device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbCDCControl (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_CDCCONTROL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB HID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbHID (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_HID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB Image device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB Image device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbImage (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_IMAGE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB Print device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB Print device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbPrinter (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_PRINTER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB mass storage device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB mass storage device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbMassStorage (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_MASS_STORAGE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB HUB device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB HUB device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbHub (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_HUB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB CDC data device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB CDC data device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbCDCData (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_CDCDATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB smart card device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB smart card device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbSmartCard (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_SMART_CARD;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB video device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB video device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbVideo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_VIDEO;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB diagnostic device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB diagnostic device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbDiagnostic (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_DIAGNOSTIC;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB wireless device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB wireless device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbWireless (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_WIRELESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = TRUE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB device firmware update device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB device firmware update device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbDeviceFirmwareUpdate (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_RESERVE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClass = USB_SUBCLASS_FW_UPDATE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB IRDA bridge device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB IRDA bridge device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbIrdaBridge (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_RESERVE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClass = USB_SUBCLASS_IRDA_BRIDGE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB text and measurement device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB text and measurement device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbTestAndMeasurement (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_CLASS_TEXT UsbClassText;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.ClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.Class = USB_CLASS_RESERVE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClassExist = FALSE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbClassText.SubClass = USB_SUBCLASS_TEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextUsbClass (TextDeviceNode, &UsbClassText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to USB WWID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created USB WWID device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUsbWwid (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *VIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PIDStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *InterfaceNumStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SerialNumberStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_WWID_DEVICE_PATH *UsbWwid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PIDStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InterfaceNumStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SerialNumberStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbWwid = (USB_WWID_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_USB_WWID_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) (sizeof (USB_WWID_DEVICE_PATH) + StrSize (SerialNumberStr))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbWwid->VendorId = (UINT16) Strtoi (VIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbWwid->ProductId = (UINT16) Strtoi (PIDStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbWwid->InterfaceNumber = (UINT16) Strtoi (InterfaceNumStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrCpy ((CHAR16 *) ((UINT8 *) UsbWwid + sizeof (USB_WWID_DEVICE_PATH)), SerialNumberStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) UsbWwid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Logic Unit device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Logic Unit device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextUnit (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicalUnit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogicalUnit = (DEVICE_LOGICAL_UNIT_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_DEVICE_LOGICAL_UNIT_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (DEVICE_LOGICAL_UNIT_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LogicalUnit->Lun = (UINT8) Strtoi (LunStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) LogicalUnit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to iSCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created iSCSI device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextiSCSI (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Options;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *NameStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PortalGroupStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *LunStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *HeaderDigestStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DataDigestStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *AuthenticationStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ProtocolStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *AsciiStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DEVICE_PATH_WITH_NAME *ISCSIDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NameStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PortalGroupStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LunStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HeaderDigestStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DataDigestStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AuthenticationStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSIDevPath = (ISCSI_DEVICE_PATH_WITH_NAME *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_ISCSI_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) (sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + StrLen (NameStr))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStr = ISCSIDevPath->TargetName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (NameStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSIDevPath->TargetPortalGroupTag = (UINT16) Strtoi (PortalGroupStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (LunStr, &ISCSIDevPath->Lun);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Options = 0x0000;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (HeaderDigestStr, L"CRC32C") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Options |= 0x0002;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (DataDigestStr, L"CRC32C") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Options |= 0x0008;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (AuthenticationStr, L"None") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Options |= 0x0800;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (AuthenticationStr, L"CHAP_UNI") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Options |= 0x1000;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSIDevPath->LoginOption = (UINT16) Options;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSIDevPath->NetworkProtocol = (UINT16) StrCmp (ProtocolStr, L"TCP");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) ISCSIDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to VLAN device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created VLAN device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVlan (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *VlanStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VLAN_DEVICE_PATH *Vlan;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VlanStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vlan = (VLAN_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_VLAN_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (VLAN_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Vlan->VlanId = (UINT16) Strtoi (VlanStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Vlan;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to HD device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created HD device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextHD (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *PartitionStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SignatureStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StartStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SizeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature32;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GUID SignatureGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HARDDRIVE_DEVICE_PATH *Hd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PartitionStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SignatureStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SizeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd = (HARDDRIVE_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_HARDDRIVE_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (HARDDRIVE_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->PartitionNumber = (UINT32) Dtoi (PartitionStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (Hd->Signature, 16);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->MBRType = (UINT8) 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (TypeStr, L"MBR") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->SignatureType = SIGNATURE_TYPE_MBR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->MBRType = 0x01;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Signature32 = (UINT32) Strtoi (SignatureStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (Hd->Signature, &Signature32, sizeof (UINT32));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"GPT") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->SignatureType = SIGNATURE_TYPE_GUID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->MBRType = 0x02;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (SignatureStr, &SignatureGuid);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CopyMem (Hd->Signature, &SignatureGuid, sizeof (EFI_GUID));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Hd->SignatureType = (UINT8) Strtoi (TypeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (StartStr, &Hd->PartitionStart);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (SizeStr, &Hd->PartitionSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Hd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to CDROM device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created CDROM device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextCDROM (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *EntryStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StartStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SizeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CDROM_DEVICE_PATH *CDROMDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EntryStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SizeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CDROMDevPath = (CDROM_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_CDROM_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (CDROM_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CDROMDevPath->BootEntry = (UINT32) Strtoi (EntryStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (StartStr, &CDROMDevPath->PartitionStart);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (SizeStr, &CDROMDevPath->PartitionSize);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) CDROMDevPath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Vendor-defined media device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Vendor-defined media device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextVenMEDIA (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return ConvertFromTextVendor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TextDeviceNode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_VENDOR_DP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to File device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created File device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFilePath (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FILEPATH_DEVICE_PATH *File;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync File = (FILEPATH_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_FILEPATH_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) (sizeof (FILEPATH_DEVICE_PATH) + StrLen (TextDeviceNode) * 2)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrCpy (File->PathName, TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) File;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to Media protocol device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Media protocol device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextMedia (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_PROTOCOL_DEVICE_PATH *Media;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Media = (MEDIA_PROTOCOL_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_PROTOCOL_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MEDIA_PROTOCOL_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (GuidStr, &Media->Protocol);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Media;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to firmware volume device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created firmware volume device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFv (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_FW_VOL_DEVICE_PATH *Fv;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Fv = (MEDIA_FW_VOL_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_PIWG_FW_VOL_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MEDIA_FW_VOL_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (GuidStr, &Fv->FvName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Fv;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to firmware file device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created firmware file device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextFvFile (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *GuidStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GuidStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FvFile = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_PIWG_FW_FILE_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToGuid (GuidStr, &FvFile->FvFileName);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) FvFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to text relative offset device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created Text device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextRelativeOffsetRange (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *StartingOffsetStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *EndingOffsetStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StartingOffsetStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndingOffsetStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Offset = (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MEDIA_RELATIVE_OFFSET_RANGE_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (StartingOffsetStr, &Offset->StartingOffset);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Strtoi64 (EndingOffsetStr, &Offset->EndingOffset);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Offset;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to BIOS Boot Specification device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created BIOS Boot Specification device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextBBS (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *TypeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *IdStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *FlagsStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *AsciiStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BBS_BBS_DEVICE_PATH *Bbs;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TypeStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IdStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FlagsStr = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs = (BBS_BBS_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BBS_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BBS_BBS_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) (sizeof (BBS_BBS_DEVICE_PATH) + StrLen (IdStr))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (StrCmp (TypeStr, L"Floppy") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_FLOPPY;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"HD") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_HARDDRIVE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"CDROM") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_CDROM;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"PCMCIA") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_PCMCIA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"USB") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_USB;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (StrCmp (TypeStr, L"Network") == 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = BBS_TYPE_EMBEDDED_NETWORK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->DeviceType = (UINT16) Strtoi (TypeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AsciiStr = Bbs->String;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync StrToAscii (IdStr, &AsciiStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bbs->StatusFlag = (UINT16) Strtoi (FlagsStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Bbs;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Converts a text device path node to SATA device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode The input Text device path node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the newly-created SATA device path structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDevPathFromTextSata (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SATA_DEVICE_PATH *Sata;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Param1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Param2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Param3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The PMPN is optional.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Param1 = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Param2 = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Param3 = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (!IS_NULL (TextDeviceNode)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Param3 = GetNextParamStr (&TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sata = (SATA_DEVICE_PATH *) CreateDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MESSAGING_DEVICE_PATH,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MSG_SATA_DP,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT16) sizeof (SATA_DEVICE_PATH)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sata->HBAPortNumber = (UINT16) Xtoi (Param1);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Param3 != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sata->PortMultiplierPortNumber = (UINT16) Xtoi (Param2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Param2 = Param3;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sata->PortMultiplierPortNumber = SATA_HBA_DIRECT_CONNECT_FLAG;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sata->Lun = (UINT16) Xtoi (Param2);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return (EFI_DEVICE_PATH_PROTOCOL *) Sata;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncGLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE DevPathFromTextTable[] = {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Pci", DevPathFromTextPci},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"PcCard", DevPathFromTextPcCard},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"MemoryMapped", DevPathFromTextMemoryMapped},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenHw", DevPathFromTextVenHw},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Ctrl", DevPathFromTextCtrl},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Acpi", DevPathFromTextAcpi},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"PciRoot", DevPathFromTextPciRoot},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"PcieRoot", DevPathFromTextPcieRoot},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Floppy", DevPathFromTextFloppy},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Keyboard", DevPathFromTextKeyboard},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Serial", DevPathFromTextSerial},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"ParallelPort", DevPathFromTextParallelPort},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"AcpiEx", DevPathFromTextAcpiEx},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"AcpiExp", DevPathFromTextAcpiExp},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"AcpiAdr", DevPathFromTextAcpiAdr},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Ata", DevPathFromTextAta},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Scsi", DevPathFromTextScsi},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Fibre", DevPathFromTextFibre},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"FibreEx", DevPathFromTextFibreEx},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"I1394", DevPathFromText1394},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"USB", DevPathFromTextUsb},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"I2O", DevPathFromTextI2O},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Infiniband", DevPathFromTextInfiniband},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenMsg", DevPathFromTextVenMsg},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenPcAnsi", DevPathFromTextVenPcAnsi},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenVt100", DevPathFromTextVenVt100},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenVt100Plus", DevPathFromTextVenVt100Plus},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenUtf8", DevPathFromTextVenUtf8},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UartFlowCtrl", DevPathFromTextUartFlowCtrl},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"SAS", DevPathFromTextSAS},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"SasEx", DevPathFromTextSasEx},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"DebugPort", DevPathFromTextDebugPort},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"MAC", DevPathFromTextMAC},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"IPv4", DevPathFromTextIPv4},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"IPv6", DevPathFromTextIPv6},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Uart", DevPathFromTextUart},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbClass", DevPathFromTextUsbClass},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbAudio", DevPathFromTextUsbAudio},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbCDCControl", DevPathFromTextUsbCDCControl},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbHID", DevPathFromTextUsbHID},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbImage", DevPathFromTextUsbImage},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbPrinter", DevPathFromTextUsbPrinter},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbMassStorage", DevPathFromTextUsbMassStorage},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbHub", DevPathFromTextUsbHub},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbCDCData", DevPathFromTextUsbCDCData},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbSmartCard", DevPathFromTextUsbSmartCard},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbVideo", DevPathFromTextUsbVideo},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbDiagnostic", DevPathFromTextUsbDiagnostic},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbWireless", DevPathFromTextUsbWireless},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbDeviceFirmwareUpdate", DevPathFromTextUsbDeviceFirmwareUpdate},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbIrdaBridge", DevPathFromTextUsbIrdaBridge},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbTestAndMeasurement", DevPathFromTextUsbTestAndMeasurement},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"UsbWwid", DevPathFromTextUsbWwid},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Unit", DevPathFromTextUnit},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"iSCSI", DevPathFromTextiSCSI},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Vlan", DevPathFromTextVlan},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"HD", DevPathFromTextHD},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"CDROM", DevPathFromTextCDROM},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"VenMEDIA", DevPathFromTextVenMEDIA},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Media", DevPathFromTextMedia},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Fv", DevPathFromTextFv},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"FvFile", DevPathFromTextFvFile},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Offset", DevPathFromTextRelativeOffsetRange},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"BBS", DevPathFromTextBBS},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {L"Sata", DevPathFromTextSata},
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {NULL, NULL}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert text to the binary representation of a device node.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDeviceNode TextDeviceNode points to the text representation of a device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync node. Conversion starts with the first character and continues
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync until the first non-device node character.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the EFI device node or NULL if TextDeviceNode is NULL or there was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync insufficient memory or text unsupported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertTextToDeviceNode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *TextDeviceNode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DUMP_NODE DumpNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ParamStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DeviceNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DeviceNodeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((TextDeviceNode == NULL) || (IS_NULL (*TextDeviceNode))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNodeStr = StrDuplicate (TextDeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (DeviceNodeStr != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; DevPathFromTextTable[Index].Function != NULL; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = GetParamByNodeName (DeviceNodeStr, DevPathFromTextTable[Index].DevicePathNodeText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ParamStr != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = DevPathFromTextTable[Index].Function;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DumpNode == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // A file path
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = DevPathFromTextFilePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNode = DumpNode (DeviceNodeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNode = DumpNode (ParamStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (ParamStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DeviceNodeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return DeviceNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Convert text to the binary representation of a device path.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param TextDevicePath TextDevicePath points to the text representation of a device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync path. Conversion starts with the first character and continues
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync until the first non-device node character.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return A pointer to the allocated device path or NULL if TextDeviceNode is NULL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync there was insufficient memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_DEVICE_PATH_PROTOCOL *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncConvertTextToDevicePath (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST CHAR16 *TextDevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DUMP_NODE DumpNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *ParamStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DeviceNode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DevicePathStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *Str;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *DeviceNodeStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IsInstanceEnd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ((TextDevicePath == NULL) || (IS_NULL (*TextDevicePath))) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool (END_DEVICE_PATH_LENGTH);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (DevicePath != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SetDevicePathEndNode (DevicePath);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNodeStr = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePathStr = StrDuplicate (TextDevicePath);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Str = DevicePathStr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ((DeviceNodeStr = GetNextDeviceNodeStr (&Str, &IsInstanceEnd)) != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = NULL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; DevPathFromTextTable[Index].Function != NULL; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParamStr = GetParamByNodeName (DeviceNodeStr, DevPathFromTextTable[Index].DevicePathNodeText);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (ParamStr != NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = DevPathFromTextTable[Index].Function;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (DumpNode == NULL) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // A file path
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DumpNode = DevPathFromTextFilePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNode = DumpNode (DeviceNodeStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNode = DumpNode (ParamStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (ParamStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NewDevicePath = AppendDeviceNodeProtocolInterface (DevicePath, DeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DevicePath);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath = NewDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (IsInstanceEnd != 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceNode = (EFI_DEVICE_PATH_PROTOCOL *) AllocatePool (END_DEVICE_PATH_LENGTH);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (DeviceNode != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SET_DEVICE_PATH_INSTANCE_END_NODE (DeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NewDevicePath = AppendDeviceNodeProtocolInterface (DevicePath, DeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DevicePath);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DeviceNode);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath = NewDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FreePool (DevicePathStr);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}