Hi Heinrich, On Tue, 30 Jul 2019 at 14:52, Heinrich Schuchardt <[email protected]> wrote: > > On 12/30/14 3:32 AM, Simon Glass wrote: > > Allow the supported modes to be listed when in debug mode. > > > > Signed-off-by: Simon Glass <[email protected]> > > --- > > > > drivers/bios_emulator/atibios.c | 161 > > +++++++++++++++++++++++++++++++++++----- > > include/vbe.h | 9 ++- > > 2 files changed, 148 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/bios_emulator/atibios.c > > b/drivers/bios_emulator/atibios.c > > index 93b815c..7ea5fa6 100644 > > --- a/drivers/bios_emulator/atibios.c > > +++ b/drivers/bios_emulator/atibios.c > > @@ -62,40 +62,158 @@ static u32 saveBaseAddress14; > > static u32 saveBaseAddress18; > > static u32 saveBaseAddress20; > > > > -static void atibios_set_vesa_mode(RMREGS *regs, int vesa_mode, > > - struct vbe_mode_info *mode_info) > > +/* Addres im memory of VBE region */ > > +const int vbe_offset = 0x2000; > > + > > +static const void *bios_ptr(const void *buf, BE_VGAInfo *vga_info, > > + u32 x86_dword_ptr) > > +{ > > + u32 seg_ofs, flat; > > + > > + seg_ofs = le32_to_cpu(x86_dword_ptr); > > + flat = ((seg_ofs & 0xffff0000) >> 12) | (seg_ofs & 0xffff); > > + if (flat >= 0xc0000) > > + return vga_info->BIOSImage + flat - 0xc0000; > > + else > > + return buf + (flat - vbe_offset); > > +} > > + > > +static int atibios_debug_mode(BE_VGAInfo *vga_info, RMREGS *regs, > > + int vesa_mode, struct vbe_mode_info *mode_info) > > +{ > > + void *buffer = (void *)(M.mem_base + vbe_offset); > > + u16 buffer_seg = (((unsigned long)vbe_offset) >> 4) & 0xff00; > > + u16 buffer_adr = ((unsigned long)vbe_offset) & 0xffff; > > + struct vesa_mode_info *vm; > > + struct vbe_info *info; > > + const u16 *modes_bios, *ptr; > > + u16 *modes; > > + int size; > > + > > + debug("VBE: Getting information\n"); > > + regs->e.eax = VESA_GET_INFO; > > + regs->e.esi = buffer_seg; > > + regs->e.edi = buffer_adr; > > + info = buffer; > > + memset(info, '\0', sizeof(*info)); > > + strcpy(info->signature, "VBE2"); > > + BE_int86(0x10, regs, regs); > > + if (regs->e.eax != 0x4f) { > > + debug("VESA_GET_INFO: error %x\n", regs->e.eax); > > + return -ENOSYS; > > + } > > + debug("version %x\n", le16_to_cpu(info->version)); > > + debug("oem '%s'\n", (char *)bios_ptr(buffer, vga_info, > > + info->oem_string_ptr)); > > + debug("vendor '%s'\n", (char *)bios_ptr(buffer, vga_info, > > + info->vendor_name_ptr)); > > + debug("product '%s'\n", (char *)bios_ptr(buffer, vga_info, > > + info->product_name_ptr)); > > + debug("rev '%s'\n", (char *)bios_ptr(buffer, vga_info, > > + info->product_rev_ptr)); > > + modes_bios = bios_ptr(buffer, vga_info, info->modes_ptr); > > + debug("Modes: "); > > + for (ptr = modes_bios; *ptr != 0xffff; ptr++) > > + debug("%x ", le16_to_cpu(*ptr)); > > + debug("\nmemory %dMB\n", le16_to_cpu(info->total_memory) >> 4); > > + size = (ptr - modes_bios) * sizeof(u16) + 2; > > + modes = malloc(size); > > + if (!modes) > > + return -ENOMEM; > > + memcpy(modes, modes_bios, size); > > + > > + regs->e.eax = VESA_GET_CUR_MODE; > > + BE_int86(0x10, regs, regs); > > + if (regs->e.eax != 0x4f) { > > + debug("VESA_GET_CUR_MODE: error %x\n", regs->e.eax); > > + return -ENOSYS; > > + } > > + debug("Current mode %x\n", regs->e.ebx); > > + > > + for (ptr = modes; *ptr != 0xffff; ptr++) { > > + int mode = le16_to_cpu(*ptr); > > + bool linear_ok; > > + int attr; > > + > > + break; > > There is a lot of dead code following. Has this break been left over > from debugging? Or should the whole loop be eliminated?
Yes the break should be removed. This is debug code for printing out the modes. Regards, Simon _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

