Ejemplo n.º 1
0
    def PrintXY(self, uString, x=-1, y=-1):

        if x != -1:
            self.PointerX = x

        if y != -1:
            self.PointerY = y

        self.HiiFont.StringToImage (
                       EfiPy.byref (self.HiiFont),
                       ft.EFI_HII_IGNORE_IF_NO_GLYPH | ft.EFI_HII_OUT_FLAG_CLIP |  \
                       ft.EFI_HII_OUT_FLAG_CLIP_CLEAN_X | ft.EFI_HII_OUT_FLAG_CLIP_CLEAN_Y | \
                       ft.EFI_HII_IGNORE_LINE_BREAK | ft.EFI_HII_DIRECT_TO_SCREEN,
                       uString,
                       EfiPy.byref (self.FontInfo),
                       EfiPy.byref (self.pBlt),
                       self.PointerX,
                       self.PointerY,
                       EfiPy.byref (self.RowInfoArray),
                       EfiPy.byref (self.RowInfoArraySize),
                       None)

        for idx in range(self.RowInfoArraySize.value):

            RowInfo = self.RowInfoArray[idx]

            self.OrigX = self.PointerX
            self.PointerX += RowInfo.LineWidth
            self.LineHeight = RowInfo.LineHeight
            self.LineWidth = RowInfo.LineWidth
Ejemplo n.º 2
0
    def _PciGetNextBusRange(self, Descriptors):

        if Descriptors == None:
            return 0, pci.PCI_MAX_BUS, False

        TempDesc = EfiPy.cast(
            Descriptors, EfiPy.POINTER(Acpi.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR))

        # print "2. TempDesc[0].Desc, TempDesc[0].ResType", TempDesc[0].Desc, TempDesc[0].ResType

        Idx = 0
        while TempDesc[Idx].Desc != Acpi.ACPI_END_TAG_DESCRIPTOR:

            if TempDesc[Idx].ResType == Acpi.ACPI_ADDRESS_SPACE_TYPE_BUS:

                AddrRangeMin = TempDesc[Idx].AddrRangeMin
                AddrRangeMax = TempDesc[Idx].AddrRangeMax

                Descriptors.value += EfiPy.sizeof(
                    Acpi.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR)
                return Descriptors, TempDesc[Idx].AddrRangeMin, TempDesc[
                    Idx].AddrRangeMax, False

            Descriptors.value += EfiPy.sizeof(
                Acpi.EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR)
            Idx += 1

        if TempDesc[Idx].Desc == Acpi.ACPI_END_TAG_DESCRIPTOR:

            return Descriptors, 0, pci.PCI_MAX_BUS, True

        return None, None, None, True
Ejemplo n.º 3
0
  def Run (self):

    FileSpace   = self.Shell.WorkSpace[WsIdxVol]
    FileFolder  = self.Shell.WorkSpace[WsIdxPath]

    EfiPyTime = EfiPy.EFI_TIME ()
    CapTime   = EfiPy.EFI_TIME_CAPABILITIES ()
    Status = EfiPy.gRT.GetTime (EfiPy.byref (EfiPyTime), EfiPy.byref (CapTime))

    if EfiPy.EFI_ERROR (Status):
      return

    # EfiPyTime = EFI_TIME (RetTime)

    for FilePath in self.args[1:]:

      FileSpace, FileFolder, SpaceOnly, SpaceFound = self.ParseFolder (FilePath)

      if SpaceFound == False:
        self.StdOut.printf(u"%s is not valide volume\r\n" % FileSpace)
        continue

      if SpaceOnly == True:
        self.StdOut.printf(u"%s Only volume identified\r\n" % FileSpace)
        continue

      self.ListTouch (FileSpace, FileFolder, EfiPyTime)

    return 0
Ejemplo n.º 4
0
  def ListDir (self, TargetSpace, TargetFolder, SpaceOnly, SpaceFound):

    RootFs, FilePath = EfiPyFileOp.GetRootFsOperation (
                         self.Shell.WS, u"%s%s" %(TargetSpace, TargetFolder)
                         )
    if RootFs == None:
      self.StdOut.printf(u"File %s%s not found\r\n" % (TargetSpace, TargetFolder))
      return 0

    NewFs = EfiPy.POINTER(EFI_FILE_PROTOCOL) ()

    Status = RootFs.Open (
               EfiPy.byref (RootFs),
               EfiPy.byref (NewFs),
               TargetFolder,
               EFI_FILE_MODE_READ,
               0
               )

    if EfiPy.EFI_ERROR (Status):
      self.StdOut.printf(u"File %s%s not found\r\n" % (TargetSpace, TargetFolder))
      return 0

    FileFolder = self.ParseAbsPath (NewFs[0])
    self.StdOut.printf(u"Directory of: %s%s\r\n" % (TargetSpace, FileFolder))

    NewFs[0].Close (NewFs)

    FileNode = EfiPyFileOp.GetFilesInPath (RootFs, FilePath)

    for FileItem in FileNode:

      self.OutputFile (FileItem[2], FileItem[1])
Ejemplo n.º 5
0
    def __init__(self):

        TmpProtocol = EfiPy.PVOID()

        Status = EfiPy.gBS.LocateProtocol(EfiPy.byref(gEfiHiiFontProtocolGuid),
                                          None, EfiPy.byref(TmpProtocol))

        if EfiPy.EFI_ERROR(Status):
            return

        self.Gfx = EfiPyGfx()

        self.HiiFont = EfiPy.cast(TmpProtocol,
                                  EfiPy.POINTER(EFI_HII_FONT_PROTOCOL))[0]

        self.Blt = EFI_IMAGE_OUTPUT()
        self.pBlt = EfiPy.pointer(self.Blt)
        self.Blt.Width = self.Gfx.Info.HorizontalResolution
        self.Blt.Height = self.Gfx.Info.VerticalResolution
        self.Blt.Image.Screen = EfiPy.pointer(self.Gfx.Gop)

        self.FontInfo = EFI_FONT_DISPLAY_INFO()

        self.RowInfoArray = EfiPy.POINTER(EFI_HII_ROW_INFO)()
        self.RowInfoArraySize = EfiPy.UINTN()

        self.FontInfo.ForegroundColor = self.Gfx.RGB(0xFF, 0xFF, 0xFF)
        self.FontInfo.BackgroundColor = self.Gfx.RGB(0x00, 0x00, 0x00)

        self.OrigX = 0
        self.PointerX = 0
        self.PointerY = 0
        self.LineHeight = 0
        self.LineWidth = 0
Ejemplo n.º 6
0
    def Run(self):

        # print len(self.args), self.args

        TimeCurr = EfiPy.EFI_TIME()
        Status = EfiPy.gRT.GetTime(EfiPy.byref(TimeCurr), None)

        if Status != EfiPy.EFI_SUCCESS:
            self.StdOut.printf(u"Date operation error\r\n")
            return 0

        RetStatus = EfiPy.EFI_SUCCESS

        if len(self.args) == 1:
            self.StdOut.printf(u"%02d:%02d:%02d (%d)\r\n" %
                               (TimeCurr.Hour, TimeCurr.Minute,
                                TimeCurr.Second, TimeCurr.TimeZone))

        elif len(self.args) == 2:

            TimePara = self.args[1].split(u":")

            if len(TimePara) == 3:
                TimeHour = int(TimePara[0])
                TimeMinute = int(TimePara[1])
                TimeSecond = int(TimePara[2])

            elif len(TimePara) == 2:
                TimeHour = int(TimePara[0])
                TimeMinute = int(TimePara[1])
                TimeSecond = TimeCurr.Second

            else:
                RetStatus = EfiPy.EFI_INVALID_PARAMETER

                if TimeHour > 23 or TimeHour < 0:
                    RetStatus = EfiPy.EFI_INVALID_PARAMETER

                if TimeMinute > 60 or TimeMinute < 0:
                    RetStatus = EfiPy.EFI_INVALID_PARAMETER

                if TimeSecond > 60 or TimeSecond < 0:
                    RetStatus = EfiPy.EFI_INVALID_PARAMETER

            if RetStatus == EfiPy.EFI_SUCCESS:

                TimeCurr.Hour, TimeCurr.Minute, TimeCurr.Second = TimeHour, TimeMinute, TimeSecond
                Status = EfiPy.gRT.SetTime(EfiPy.byref(TimeCurr), None)
                RetStatus = Status

        else:
            RetStatus = EfiPy.EFI_INVALID_PARAMETER

        if RetStatus == EfiPy.EFI_INVALID_PARAMETER:
            self.StdOut.printf(
                u"Time inccorect input parameter. TIME [hh:mm[:ss]]\r\n")

        return 0
Ejemplo n.º 7
0
    def _GetInfo(self, Gop):

        SizeOfInfo = EfiPy.UINTN()
        Info = EfiPy.POINTER(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)()

        Status = Gop.QueryMode(EfiPy.byref(Gop), Gop.Mode[0].Mode,
                               EfiPy.byref(SizeOfInfo), EfiPy.byref(Info))

        return Info[0]
Ejemplo n.º 8
0
    def _PciGetProtocolAndResource(self, Handle):

        TmpDev = EfiPy.PVOID()

        Status = EfiPy.gBS.HandleProtocol(
            Handle, EfiPy.byref(gEfiPciRootBridgeIoProtocolGuid),
            EfiPy.byref(TmpDev))

        if EfiPy.EFI_ERROR(Status):
            self.StdOut.printf(
                "Locate HandleProtocol Fail (2) (Status = 0x%016X)!\r\n" %
                Status)
            return None, None

        IoDev = (EfiPy.cast(TmpDev,
                            EfiPy.POINTER(EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL)))[0]

        Descriptors = EfiPy.PVOID()
        Status = IoDev.Configuration(EfiPy.byref(IoDev),
                                     EfiPy.byref(Descriptors))

        if Status == EfiPy.EFI_UNSUPPORTED:
            self.StdOut.printf(
                "Locate HandleProtocol Fail (2) (Status = 0x%016X)!\r\n" %
                Status)
            return IoDev, None

        return IoDev, Descriptors
Ejemplo n.º 9
0
 class EXTENDED_SYSTEM_DESCRIPTION_TABLE(EFIPY_INDUSTRY_STRUCTURE):
     _fields_ = [
         ("Signature", EfiPy.UINT32), ("Length", EfiPy.UINT32),
         ("Revision", EfiPy.UINT8), ("Checksum", EfiPy.UINT8),
         ("OemId", EfiPy.UINT8 * 6), ("OemTableId", EfiPy.UINT64),
         ("OemRevision", EfiPy.UINT32), ("CreatorId", EfiPy.UINT32),
         ("CreatorRevision", EfiPy.UINT32),
         ("DescriptionEntry", EfiPy.UINT64 *
          ((_Xsdt.Length - EfiPy.sizeof(EFI_ACPI_DESCRIPTION_HEADER)) /
           EfiPy.sizeof(EfiPy.UINT64)))
     ]
Ejemplo n.º 10
0
    def Run(self):

        Count = EfiPy.UINT64()

        Status = EfiPy.gBS.GetNextMonotonicCount(EfiPy.byref(Count))
        if EfiPy.RETURN_ERROR(Status):
            return 0

        self.StdOut.printf("%016X\r\n" % Count.value)

        return 0
Ejemplo n.º 11
0
  def ParseAbsPath (self, FileHandle):

    AbsList = []

    Status = EfiPy.EFI_SUCCESS

    while Status == EfiPy.EFI_SUCCESS:

      BufferSize = EfiPy.UINTN (0)
      Status = FileHandle.GetInfo (
                            EfiPy.byref (FileHandle),
                            gEfiFileInfoGuid,
                            EfiPy.byref (BufferSize),
                            None
                            )

      TmpBuffer = bytearray (BufferSize.value)
      fInfo      = EFI_FILE_INFO.from_buffer (TmpBuffer)
      Status = FileHandle.GetInfo (
                            EfiPy.byref (FileHandle),
                            gEfiFileInfoGuid,
                            EfiPy.byref (BufferSize),
                            EfiPy.byref (fInfo)
                            )

      if Status != EfiPy.EFI_SUCCESS:
        break

      TempStr = (TmpBuffer[EFI_FILE_INFO.FileName.offset: -2]).decode("utf-16")

      if fInfo.Attribute & EFI_FILE_DIRECTORY == EFI_FILE_DIRECTORY:
        AbsList.append (TempStr + u"\\")
      else:
        AbsList.append (TempStr)

      NewFs = EfiPy.POINTER(EFI_FILE_PROTOCOL) ()

      Status = FileHandle.Open (
                 EfiPy.byref (FileHandle),
                 EfiPy.byref (NewFs),
                 u"..",
                 EFI_FILE_MODE_READ,
                 0
                 )

      if Status != EfiPy.EFI_SUCCESS:
        break

      if len(AbsList) > 1:
        FileHandle.Close ( EfiPy.byref (FileHandle))
      FileHandle = NewFs[0]

    return "".join(v for v in AbsList[::-1])
Ejemplo n.º 12
0
    def Detect_Protocol(self, Guid, Protocol):

        TmpCount = EfiPy.UINTN(0)
        TmpBuff = EfiPy.POINTER(EfiPy.EFI_HANDLE)()

        self._ProtocolFilter.stop("LocateHandleBuffer")
        Status = EfiPy.gBS.LocateHandleBuffer(EfiPy.ByProtocol,
                                              EfiPy.byref(Guid), None,
                                              EfiPy.byref(TmpCount),
                                              EfiPy.byref(TmpBuff))
        self._ProtocolFilter.start("LocateHandleBuffer")

        if Status != EfiPy.EFI_SUCCESS:
            return

        self._ProtocolFilter.stop("HandleProtocol")

        for Index in range(TmpCount.value):

            Target = EfiPy.PVOID()
            Status = EfiPy.gBS.HandleProtocol(TmpBuff[Index],
                                              EfiPy.byref(Guid),
                                              EfiPy.byref(Target))

            if Status != EfiPy.EFI_SUCCESS:
                continue

            self.Target.append((Target, TmpBuff[Index]))

        self._ProtocolFilter.start("HandleProtocol")
Ejemplo n.º 13
0
    def Run(self):

        # print len(self.args), self.args

        TimeCurr = EfiPy.EFI_TIME()
        Status = EfiPy.gRT.GetTime(EfiPy.byref(TimeCurr), None)

        if Status != EfiPy.EFI_SUCCESS:
            self.StdOut.printf(u"Date operation error\r\n")
            return 0

        RetStatus = EfiPy.EFI_SUCCESS

        if len(self.args) == 1:
            self.StdOut.printf(u"%02d/%02d/%04d\r\n" %
                               (TimeCurr.Month, TimeCurr.Day, TimeCurr.Year))

        elif len(self.args) == 2:

            TimePara = self.args[1].split(u"/")

            if len(TimePara) != 3:
                RetStatus = EfiPy.EFI_INVALID_PARAMETER

            else:
                TimeMonth = int(TimePara[0])
                TimeDay = int(TimePara[1])
                TimeYear = int(TimePara[2])

                if TimeMonth > 12 or TimeMonth < 1:
                    RetStatus = EfiPy.EFI_INVALID_PARAMETER

                if TimeDay > 31 or TimeDay < 1:
                    RetStatus = EfiPy.EFI_INVALID_PARAMETER

            if RetStatus == EfiPy.EFI_SUCCESS:

                TimeCurr.Month, TimeCurr.Day, TimeCurr.Year = TimeMonth, TimeDay, TimeYear
                Status = EfiPy.gRT.SetTime(EfiPy.byref(TimeCurr), None)
                RetStatus = Status

        else:
            RetStatus = EfiPy.EFI_INVALID_PARAMETER

        if RetStatus == EfiPy.EFI_INVALID_PARAMETER:
            self.StdOut.printf(
                u"Date inccorect input parameter. [mm/dd/yyyy]\r\n")

        return 0
Ejemplo n.º 14
0
    def Rect(self, x, y, w, h, color=None):

        if color == None:
            color = self.RGB(0xFF, 0xFF, 0xFF)

        self.Gop.Blt(
            EfiPy.byref(self.Gop),
            EfiPy.byref(color),
            EfiBltVideoFill,
            0,
            0,  # SourceX, SourceY
            x,
            y,  # DestinationX, DestinationY
            w,
            h,  # Width, Height
            0)
Ejemplo n.º 15
0
    def ParaGet(self):

        self.Address = 0x00
        self.Length = 0x00
        self.Mmio = self.Paras[u"-mmio"][1]

        CheckRight = True

        self.Address = EfiPy.addressof(EfiPy.gST)
        self.Length = 16 * 32

        if type(self.args) is not list:
            raise NameError(u"EFIPY_CMD_MEM._parameters.TypeError1")

        try:

            if len(self.args) > 3:
                raise NameError(u"EFIPY_CMD_MEM._parameters.TypeError2")

            self.Address = int(self.args[1], 16)

            if len(self.args) == 3:
                self.Length = int(self.args[2], 16)

            if 0 == self.Length:
                self.StdOut.printf(
                    "Memory Length can not be zeor, set as dafault 0x%20X\r\n"
                    % (16 * 32))
                self.Length = 16 * 32

        except:
            self.StdOut.printf("Invalide parameter %s\r\n" % str(self.args))
Ejemplo n.º 16
0
    def __init__(self, dOut):

        _bAnalyze.__init__(self, dOut)
        self.Guid = None  # pAnalyzer

        AppList = []
        DrvList = []

        self.ProtocolFuncList = (
            ("InstallProtocolInterface", None),
            ("ReinstallProtocolInterface", None),
            ("UninstallProtocolInterface", None),
            # ("LocateHandleBuffer",                 None),
            # ("HandleProtocol",                     None),
            # ("OpenProtocol",                       None),
            # ("CloseProtocol",                      None),
            # ("ProtocolsPerHandle",                 None),
            # ("LocateProtocol",                     None),
            # ("InstallMultipleProtocolInterfaces",  None),
            # ("UninstallMultipleProtocolInterfaces",None),
        )

        self._ProtocolFilter = _bAnalyze(dOut)
        self._ProtocolFilter.Build_Capability(EfiPy.EFI_BOOT_SERVICES)
        self._ProtocolFilter.Filter.append(
            self._ProtocolFilter.Build_Filter(EfiPy.byref(EfiPy.gBS), None))

        for ProtoclFun in self.ProtocolFuncList:
            self._ProtocolFilter.install(ProtoclFun[0])

        self._ProtocolAllStart()
Ejemplo n.º 17
0
def StructDump(c_p, _class, _obj, leading=0):

    for field in _class._fields_:

        _c = field[1]
        _o = getattr(_obj, field[0])

        print " " * leading, "%s: " % field[0],

        if issubclass(field[1], Isb.SMBIOS_TABLE_STRING):

            print "%d(0x%X," % (_o.value, _o.value),
            if _o.value != 0:
                c_t = c_p
                for idx in range(_o.value - 1):
                    c_t = c_t + len(EfiPy.PCHAR8(c_t).value) + 1
                c_s = EfiPy.PCHAR8(c_t)
                print 'String: "%s")' % c_s.value
            else:
                print "String: [Empty])"

        elif issubclass(field[1], EfiPy._SimpleCData):

            print "%d(0x%X)" % (_o, _o)

        elif isinstance(_o, EfiPy.GUID):

            print "%s" % _o

        elif isinstance(_o, EfiPy.Structure):

            print "(Structure)"
            StructDump(c_p, _c, _o, leading + 2)

        elif isinstance(_o, EfiPy.Array):

            print "Array * %d" % len(_o)

            for idx in range(len(_o)):

                print " " * (leading + 2), "%s[%d]:" % (field[0], idx),
                if type(_o[idx]) in [int, long]:
                    print "%d(0x%X)" % (_o[idx], _o[idx])
                else:
                    print
                    StructDump(c_p, type(_o[idx]), _o[idx], leading + 4)
Ejemplo n.º 18
0
    def ConnectDevicePath(self, DevicePathToConnect=None):

        if DevicePathToConnect == None:
            DevicePathToConnect = self.DevPath
        if DevicePathToConnect == None:
            return e.EFI_INVALID_PARAMETER

        PreviousHandle = e.PVOID()
        Handle = e.EFI_HANDLE()

        while True:

            RemainingDevicePath = DevicePathToConnect
            Status = e.gBS.LocateDevicePath(
                e.byref(gEfiDevicePathProtocolGuid),
                e.byref(RemainingDevicePath), e.byref(Handle))

            if not e.EFI_ERROR(Status) and Handle != None:
                if PreviousHandle.value == Handle.value:
                    Status = e.EFI_NOT_FOUND
                else:
                    PreviousHandle = Handle
                    self.dOut.ExtraOut(
                        "1. ConnectController Handle... 0x%08X\n" %
                        Handle.value)
                    Status = e.gBS.ConnectController(Handle, None,
                                                     RemainingDevicePath, True)

            if e.EFI_ERROR(Status) or RemainingDevicePath[0].IsDevicePathEnd():
                break
Ejemplo n.º 19
0
    def __init__(self, DevPathName, OutFile=None):

        self.dOut = bOutClass(OutFile)

        # Locate EFI_DEVICE_PATH_TO_TEXT_PROTOCOL protocol

        Interface = e.PVOID()
        Status = e.gBS.LocateProtocol(
            e.byref(gEfiDevicePathToTextProtocolGuid), None, Interface)
        if e.EFI_ERROR(Status):
            self.dOut.ExtraOut(
                "Locate EFI_DEVICE_PATH_TO_TEXT_PROTOCOL Protocol Error # (Status:%x)\n"
                % Status)
            self.dOut.terminate()
            exit(0)

        self.DevPathToText = e.cast(
            Interface, e.POINTER(EFI_DEVICE_PATH_TO_TEXT_PROTOCOL))[0]
Ejemplo n.º 20
0
    def function_filter2(*args):

        Information = function_filter2.func_dict["Information"]
        dOut = function_filter2.func_dict["dOut"]

        _xml = '<Function name="%s" fAddre="0x%X" Structure="%s" sAddr="0x%X">\n' % (
            Information[0], Information[2], Information[1].__name__,
            Information[3])
        dOut.append(_xml)

        _xml = '<Input length="%d">\n' % len(args)

        cnt = 0
        for arg in args:
            s = get_arg_xml(arg)
            _xml += '<arg%d %s ></arg%d>\n' % (cnt, s, cnt)
            cnt += 1

        dOut.append(_xml + '</Input>\n')

        Pre_func = function_filter2.func_dict["Pre_func"]
        Post_func = function_filter2.func_dict["Post_func"]

        func_type = function_filter2.func_dict["Native_func"]
        func_addr = function_filter2.func_dict["Native_addr"]
        Alias_type = function_filter2.func_dict["Alias_type"]

        if Pre_func != None:
            fRest, args = Pre_func(dOut, *args)

        f = func_type(function_filter2)
        Alias_type.from_address(EfiPy.addressof(f)).value = func_addr

        rest = f(*args)

        if Post_func != None:
            fRest, args = Post_func(dOut, rest, *args)

        if rest != None:
            _xml = '<Output %s>\n' % get_arg_xml(rest)
        else:
            _xml = '<Output>\n'

        cnt = 0
        for arg in args:
            s = get_arg_xml(arg)
            _xml += '<arg%d %s></arg%d>\n' % (cnt, s, cnt)
            cnt += 1

        dOut.append(_xml + '</Output>\n')

        dOut.append('</Function>\n')

        if rest != None:
            return rest
Ejemplo n.º 21
0
  def Run (self):

    for ws in self.Shell.WS:

      RootFs, FilePath = EfiPyFileOp.GetRootFsOperation (self.Shell.WS, ws)
      if RootFs == None:
        continue

      # Status, RetValue  = RootFs.GetInfo (gEfiFileSystemInfoGuid)
      # if EFI_ERROR (Status):
      #   self.StdOut.printf(u"Get Volume %s Fail (%d) r\n" %(ws, Status))

      # FsInfo = EFI_FILE_SYSTEM_INFO (RetValue[1])

      BufferSize = EfiPy.UINTN (0)
      Status = RootFs.GetInfo (
                            EfiPy.byref (RootFs),
                            gEfiFileSystemInfoGuid,
                            EfiPy.byref (BufferSize),
                            None
                            )

      if Status != EfiPy.EFI_BUFFER_TOO_SMALL:
        continue

      # print "BufferSize.value", BufferSize.value
      # print "EfiPy.sizeof (EFI_FILE_SYSTEM_INFO)", EfiPy.sizeof (EFI_FILE_SYSTEM_INFO)

      if BufferSize.value >= EfiPy.sizeof (EFI_FILE_SYSTEM_INFO):
        TmpBuffer = bytearray (BufferSize.value)
      else:
        TmpBuffer = bytearray (EfiPy.sizeof (EFI_FILE_SYSTEM_INFO))

      FsInfo    = EFI_FILE_SYSTEM_INFO.from_buffer (TmpBuffer)

      Status = RootFs.GetInfo (
                        EfiPy.byref (RootFs),
                        gEfiFileSystemInfoGuid,
                        EfiPy.byref (BufferSize),
                        EfiPy.byref (FsInfo)
                        )

      if Status != EfiPy.EFI_SUCCESS:
        continue

      # import Utility.EfiPyUtility
      # Utility.EfiPyUtility.EfiPyHexDump (self.StdOut, 2, 0x00, TmpBuffer, True)

      self.OutputVol (ws, FsInfo, TmpBuffer, BufferSize.value)

    return 0
Ejemplo n.º 22
0
    def Dump(self):

        print "Current Mode: %d" % self.Gop.Mode[0].Mode
        print "Max Mode: %X" % self.Gop.Mode[0].MaxMode
        print "FrameBufferBase: %X" % self.Gop.Mode[0].FrameBufferBase
        print "FrameBufferSize: %X" % self.Gop.Mode[0].FrameBufferSize

        SizeOfInfo = EfiPy.UINTN()
        Info = EfiPy.POINTER(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)()

        for idx in range(self.Gop.Mode[0].MaxMode):

            Status = self.Gop.QueryMode(EfiPy.byref(self.Gop), idx,
                                        EfiPy.byref(SizeOfInfo),
                                        EfiPy.byref(Info))

            if EfiPy.EFI_ERROR(Status):
                print "Get Mode %d error (Status: %X" % (idx, Status)
                continue

            print "\nMode %d Information" % idx
            print "==================================================================================="
            print "Version: %X" % Info[0].Version
            print "HorizontalResolution: %d" % Info[0].HorizontalResolution
            print "VerticalResolution: %d" % Info[0].VerticalResolution
            print "PixelFormat: %d" % Info[0].PixelFormat
            print "PixelInformation (R:0x%08X, G:0x%08X, B:0x%08X)" % (
                Info[0].PixelInformation.RedMask,
                Info[0].PixelInformation.GreenMask,
                Info[0].PixelInformation.BlueMask)
            print "PixelsPerScanLine %d" % Info[0].PixelsPerScanLine
Ejemplo n.º 23
0
    def DriverLoad(self, pFullPathDev):

        NewHandle = EfiPy.EFI_HANDLE()

        Status = EfiPy.gBS.LoadImage(0, EfiPy.gImageHandle, pFullPathDev, None,
                                     0, EfiPy.byref(NewHandle))

        if EfiPy.EFI_ERROR(Status):
            return Status, -1

        TmpImage = EfiPy.PVOID()

        Status = EfiPy.gBS.HandleProtocol(
            NewHandle, EfiPy.byref(gEfiLoadedImageProtocolGuid),
            EfiPy.byref(TmpImage))

        if EfiPy.EFI_ERROR(Status):

            EfiPy.gBS.Exit(EfiPy.byref(TmpImage), EfiPy.EFI_INVALID_PARAMETER,
                           0, None)

            return EfiPy.EFI_INVALID_PARAMETER, -2

        LoadedDriverImage = EfiPy.cast(
            TmpImage, EfiPy.POINTER(EFI_LOADED_IMAGE_PROTOCOL))

        if (LoadedDriverImage[0].ImageCodeType != EfiBootServicesCode) and \
           (LoadedDriverImage[0].ImageCodeType != EfiRuntimeServicesCode):

            return EfiPy.EFI_INVALID_PARAMETER, LoadedDriverImage[
                0].ImageCodeType

        self._ProtocolAllStart()

        StartStatus = EfiPy.gBS.StartImage(NewHandle, None, None)

        self._ProtocolAllStop()

        return Status, StartStatus
Ejemplo n.º 24
0
  def IsFileExist (self, FileSpace, FileFolder):

    if FileSpace == None or FileFolder == None:
      return False

    RootFs, FilePath = EfiPyFileOp.GetRootFsOperation (
                         self.Shell.WS,
                         u"%s%s" %(FileSpace, FileFolder)
                         )

    if RootFs == None:
      return False

    NewFs = EfiPy.POINTER(EFI_FILE_PROTOCOL) ()

    Status = RootFs.Open (
               EfiPy.byref (RootFs),
               EfiPy.byref (NewFs),
               FilePath,
               EFI_FILE_MODE_READ,
               0
               )
    RetValue = True

    if EfiPy.EFI_ERROR (Status):
      RetValue = False

    Status = RootFs.Close (EfiPy.byref (RootFs))

    # if EfiPy.EFI_ERROR (Status):
    #   print "Error 1"

    if RetValue == True:
      Status = NewFs[0].Close (NewFs)
      # if EfiPy.EFI_ERROR (Status):
      #   print "Error 2"

    return RetValue
Ejemplo n.º 25
0
  def _DmpVariable (self, name, guid):

    DataSize  = EfiPy.UINTN (0x00)
    Status    = EfiPy.gRT.GetVariable (
                            name,
                            EfiPy.byref (guid),
                            None,
                            EfiPy.byref (DataSize),
                            None
                            )

    if Status != EfiPy.EFI_BUFFER_TOO_SMALL:
      return

    Attributes  = EfiPy.UINT32(0x00)
    DataBuffer  =(EfiPy.CHAR8 * DataSize.value)("\00")
    Status      = EfiPy.gRT.GetVariable (
                              name,
                              EfiPy.byref (guid),
                              EfiPy.byref (Attributes),
                              EfiPy.byref (DataSize),
                              EfiPy.byref (DataBuffer)
                              )

    if not EfiPy.RETURN_ERROR (Status):

      StrVarAttr     = ""
      if (Attributes.value & EfiPy.EFI_VARIABLE_NON_VOLATILE) > 0:
        StrVarAttr = "NV"
      if (Attributes.value & EfiPy.EFI_VARIABLE_RUNTIME_ACCESS) > 0:
        if len(StrVarAttr) > 0:
          StrVarAttr = StrVarAttr + "+"
        StrVarAttr = StrVarAttr + "RS"
      if (Attributes.value & EfiPy.EFI_VARIABLE_BOOTSERVICE_ACCESS) > 0:
        if len(StrVarAttr) > 0:
          StrVarAttr = StrVarAttr + "+"
        StrVarAttr = StrVarAttr + "BS"

      self.StdOut.printf("Variable - %s - '%s:%s' - DataSize = 0x%X\r\n" % (StrVarAttr, guid, name, DataSize.value))
      EfiPyHexDump (self.StdOut, 2, 0x0000, DataBuffer, True)

    else:
      self.StdOut.printf("Get Variable %s %s error\r\n" % (name, guid))
Ejemplo n.º 26
0
def TestHint(fnt=None, HintString=None):

    from EfiPy.MdePkg.Protocol.SimpleTextIn import EFI_INPUT_KEY

    if HintString != None and fnt != None:
        fnt.PrintXY(u"%s" % HintString, 200, 300)

    InKey = EFI_INPUT_KEY()

    Status = -1

    while Status != EfiPy.EFI_SUCCESS:
        Status = EfiPy.gST.ConIn[0].ReadKeyStroke(EfiPy.gST.ConIn,
                                                  EfiPy.byref(InKey))
Ejemplo n.º 27
0
def SmbiosDump(Record):

    print "=========================================================="

    try:
        SmbiosClass = getattr(Isb, "SMBIOS_TABLE_TYPE%d" % Record[0].Type)

        sbObjp = EfiPy.cast(Record, EfiPy.PVOID)
        sbObj = EfiPy.cast(Record, EfiPy.POINTER(SmbiosClass))[0]

        print "Type %3d, Length: %d, Handle: 0x%08X" % (
            sbObj.Hdr.Type, sbObj.Hdr.Length, sbObj.Hdr.Handle)

        c_p = sbObjp.value + sbObj.Hdr.Length

        StructDump(c_p, SmbiosClass, sbObj, 0)

    except:

        SmbiosClass = Isb.SMBIOS_STRUCTURE
        sbObj = EfiPy.cast(Record, EfiPy.POINTER(SmbiosClass))[0]

        print "Type %3d, Length: %d, Handle: 0x%08X" % (
            sbObj.Type, sbObj.Length, sbObj.Handle)
Ejemplo n.º 28
0
def DumpAllVariable():

    import copy

    VariableList = []

    VariableName = u"\x00" * 100
    VariableSize = EfiPy.UINTN(EfiPy.sizeof(EfiPy.CHAR16) * 100)
    VariableTsize = EfiPy.UINTN(EfiPy.sizeof(EfiPy.CHAR16) * 100)
    VariableGuid = EfiPy.EFI_GUID()

    while True:

        Status = EfiPy.gRT.GetNextVariableName(EfiPy.byref(VariableTsize),
                                               EfiPy.PCHAR16(VariableName),
                                               EfiPy.byref(VariableGuid))

        if Status == EfiPy.EFI_BUFFER_TOO_SMALL:

            VariableName = VariableName + u"\x00" * 100
            VariableSize.value += EfiPy.sizeof(EfiPy.CHAR16) * 100
            VariableTsize.value = VariableSize.value
            continue

        if Status == EfiPy.EFI_SUCCESS:

            VariableList.append([
                VariableName[:VariableName.index(u"\x00")],
                copy.copy(VariableGuid)
            ])
            VariableTsize.value = VariableSize.value
            continue

        break

    for Var in VariableList:

        DmpVariable(Var[0], Var[1])

    return 0
Ejemplo n.º 29
0
    def _ConnectPciRootBridge(self):

        RootBridgeHandleCount = e.UINTN(0)
        RootBridgeHandleBuffer = e.POINTER(e.EFI_HANDLE)()

        Status = e.gBS.LocateHandleBuffer(
            e.ByProtocol, e.byref(gEfiPciRootBridgeIoProtocolGuid), None,
            e.byref(RootBridgeHandleCount), e.byref(RootBridgeHandleBuffer))
        if e.EFI_ERROR(Status):
            return Status

        for RootBridgeIndex in range(RootBridgeHandleCount.value):
            self.dOut.ExtraOut("2. ConnectController Handle... 0x%08X\n" %
                               RootBridgeHandleBuffer[RootBridgeIndex].value)
            e.gBS.ConnectController(RootBridgeHandleBuffer[RootBridgeIndex],
                                    None, None, False)

        return e.EFI_SUCCESS
Ejemplo n.º 30
0
    def SetSize(self, FileSpace, FileFolder, FileSize):

        if self.Shell.WS[FileSpace.upper()][WsIdxPath] == u"":
            self.StdOut.printf(u"%s is not valide volume\r\n" % FileSpace)
            return

        RootFs, FilePath = EfiPyFileOp.GetRootFsOperation(
            self.Shell.WS, u"%s%s" % (FileSpace, FileFolder))
        if RootFs == None:
            self.StdOut.printf(u"Volume %s cannot be opened\r\n" % FileSpace)
            return 0

        NewFs = EfiPy.POINTER(EFI_FILE_PROTOCOL)()
        Status = RootFs.Open(EfiPy.byref(RootFs), EfiPy.byref(NewFs),
                             FileFolder,
                             EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE, 0)

        if Status == EfiPy.EFI_NOT_FOUND:
            Status = RootFs.Open(
                EfiPy.byref(RootFs), EfiPy.byref(NewFs), FileFolder,
                EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE
                | EFI_FILE_MODE_CREATE, 0)

        if EfiPy.EFI_ERROR(Status):
            self.StdOut.printf(u"File %s%s cannot be opened 0x%016X\r\n" %
                               (FileSpace, FileFolder, Status))
            return 0

        BufferSize = EfiPy.UINTN(0)
        Status = NewFs[0].GetInfo(NewFs, gEfiFileInfoGuid,
                                  EfiPy.byref(BufferSize), None)

        if Status != EfiPy.EFI_BUFFER_TOO_SMALL:
            NewFs[0].Close(NewFs)
            return 0

        TmpBuffer = bytearray(BufferSize.value)
        fInfo = EFI_FILE_INFO.from_buffer(TmpBuffer)
        Status = NewFs[0].GetInfo(NewFs, gEfiFileInfoGuid,
                                  EfiPy.byref(BufferSize), EfiPy.byref(fInfo))

        if Status != EfiPy.EFI_SUCCESS:
            NewFs[0].Close(NewFs)
            return 0

        fInfo.FileSize = FileSize

        Status = NewFs[0].SetInfo(NewFs, gEfiFileInfoGuid, BufferSize,
                                  EfiPy.byref(fInfo))

        self.StdOut.printf(u"Set size %s%s, Status: 0x%016X\r\n" %
                           (FileSpace, FileFolder, Status))

        NewFs[0].Close(NewFs)

        return 0