Annotation of qemu/pc-bios/bios.diff, revision 1.1.1.3

1.1       root        1: Index: apmbios.S
                      2: ===================================================================
                      3: RCS file: /cvsroot/bochs/bochs/bios/apmbios.S,v
1.1.1.2   root        4: retrieving revision 1.4
                      5: diff -u -w -r1.4 apmbios.S
                      6: --- apmbios.S  26 Dec 2005 10:35:51 -0000      1.4
1.1.1.3 ! root        7: +++ apmbios.S  3 May 2006 21:22:46 -0000
1.1.1.2   root        8: @@ -225,6 +225,7 @@
                      9:  APMSYM(05):
                     10:    cmp al, #0x05
                     11:    jne APMSYM(07)
                     12: +  sti
                     13:    hlt
1.1       root       14:    jmp APMSYM(ok)
1.1.1.2   root       15:  
                     16: Index: rombios.c
                     17: ===================================================================
                     18: RCS file: /cvsroot/bochs/bochs/bios/rombios.c,v
                     19: retrieving revision 1.160
                     20: diff -u -w -r1.160 rombios.c
                     21: --- rombios.c  25 Jan 2006 17:51:49 -0000      1.160
1.1.1.3 ! root       22: +++ rombios.c  3 May 2006 21:22:48 -0000
1.1.1.2   root       23: @@ -1816,6 +1816,7 @@
                     24:  {
                     25:    printf(BX_APPNAME" BIOS - build: %s\n%s\nOptions: ",
                     26:      BIOS_BUILD_DATE, bios_cvs_version_string);
                     27: +#if 0
                     28:    printf(
                     29:  #ifdef BX_APM
                     30:    "apmbios "
                     31: @@ -1827,6 +1828,9 @@
                     32:    "eltorito "
                     33:  #endif
                     34:    "\n\n");
                     35: +#else
                     36: +  printf("apmbios pcibios eltorito \n\n");
                     37: +#endif
                     38:  }
                     39:  
                     40:  //--------------------------------------------------------------------------
1.1.1.3 ! root       41: @@ -3999,6 +4003,29 @@
        !            42:  }
        !            43:  #endif
        !            44:  
        !            45: +
        !            46: +void set_e820_range(ES, DI, start, end, type)
        !            47: +     Bit16u ES; 
        !            48: +     Bit16u DI;
        !            49: +     Bit32u start;
        !            50: +     Bit32u end; 
        !            51: +     Bit16u type;
        !            52: +{
        !            53: +    write_word(ES, DI, start);
        !            54: +    write_word(ES, DI+2, start >> 16);
        !            55: +    write_word(ES, DI+4, 0x00);
        !            56: +    write_word(ES, DI+6, 0x00);
        !            57: +    
        !            58: +    end -= start;
        !            59: +    write_word(ES, DI+8, end);
        !            60: +    write_word(ES, DI+10, end >> 16);
        !            61: +    write_word(ES, DI+12, 0x0000);
        !            62: +    write_word(ES, DI+14, 0x0000);
        !            63: +    
        !            64: +    write_word(ES, DI+16, type);
        !            65: +    write_word(ES, DI+18, 0x0);
        !            66: +}
        !            67: +
        !            68:    void
        !            69:  int15_function32(regs, ES, DS, FLAGS)
        !            70:    pushad_regs_t regs; // REGS pushed via pushad
        !            71: @@ -4063,19 +4090,8 @@
        !            72:                  switch(regs.u.r16.bx)
        !            73:                  {
        !            74:                      case 0:
        !            75: -                        write_word(ES, regs.u.r16.di, 0x00);
        !            76: -                        write_word(ES, regs.u.r16.di+2, 0x00);
        !            77: -                        write_word(ES, regs.u.r16.di+4, 0x00);
        !            78: -                        write_word(ES, regs.u.r16.di+6, 0x00);
        !            79: -
        !            80: -                        write_word(ES, regs.u.r16.di+8, 0xFC00);
        !            81: -                        write_word(ES, regs.u.r16.di+10, 0x0009);
        !            82: -                        write_word(ES, regs.u.r16.di+12, 0x0000);
        !            83: -                        write_word(ES, regs.u.r16.di+14, 0x0000);
        !            84: -
        !            85: -                        write_word(ES, regs.u.r16.di+16, 0x1);
        !            86: -                        write_word(ES, regs.u.r16.di+18, 0x0);
        !            87: -
        !            88: +                        set_e820_range(ES, regs.u.r16.di, 
        !            89: +                                       0x0000000L, 0x0009fc00L, 1);
        !            90:                          regs.u.r32.ebx = 1;
        !            91:                          regs.u.r32.eax = 0x534D4150;
        !            92:                          regs.u.r32.ecx = 0x14;
        !            93: @@ -4083,6 +4099,24 @@
        !            94:                          return;
        !            95:                          break;
        !            96:                      case 1:
        !            97: +                        set_e820_range(ES, regs.u.r16.di, 
        !            98: +                                       0x0009fc00L, 0x000a0000L, 2);
        !            99: +                        regs.u.r32.ebx = 2;
        !           100: +                        regs.u.r32.eax = 0x534D4150;
        !           101: +                        regs.u.r32.ecx = 0x14;
        !           102: +                        CLEAR_CF();
        !           103: +                        return;
        !           104: +                        break;
        !           105: +                    case 2:
        !           106: +                        set_e820_range(ES, regs.u.r16.di, 
        !           107: +                                       0x000e8000L, 0x00100000L, 2);
        !           108: +                        regs.u.r32.ebx = 3;
        !           109: +                        regs.u.r32.eax = 0x534D4150;
        !           110: +                        regs.u.r32.ecx = 0x14;
        !           111: +                        CLEAR_CF();
        !           112: +                        return;
        !           113: +                        break;
        !           114: +                    case 3:
        !           115:                          extended_memory_size = inb_cmos(0x35);
        !           116:                          extended_memory_size <<= 8;
        !           117:                          extended_memory_size |= inb_cmos(0x34);
        !           118: @@ -4092,9 +4126,9 @@
        !           119:                              extended_memory_size = 0x3bc000; // everything after this is reserved memory until we get to 0x100000000
        !           120:                          }
        !           121:                          extended_memory_size *= 1024;
        !           122: -                        extended_memory_size += 15728640; // make up for the 16mb of memory that is chopped off
        !           123: +                        extended_memory_size += (16L * 1024 * 1024);
        !           124:  
        !           125: -                        if(extended_memory_size <= 15728640)
        !           126: +                        if(extended_memory_size <= (16L * 1024 * 1024))
        !           127:                          {
        !           128:                              extended_memory_size = inb_cmos(0x31);
        !           129:                              extended_memory_size <<= 8;
        !           130: @@ -4102,28 +4136,23 @@
        !           131:                              extended_memory_size *= 1024;
        !           132:                          }
        !           133:  
        !           134: -                        write_word(ES, regs.u.r16.di, 0x0000);
        !           135: -                        write_word(ES, regs.u.r16.di+2, 0x0010);
        !           136: -                        write_word(ES, regs.u.r16.di+4, 0x0000);
        !           137: -                        write_word(ES, regs.u.r16.di+6, 0x0000);
        !           138: -
        !           139: -                        write_word(ES, regs.u.r16.di+8, extended_memory_size);
        !           140: -                        extended_memory_size >>= 16;
        !           141: -                        write_word(ES, regs.u.r16.di+10, extended_memory_size);
        !           142: -                        extended_memory_size >>= 16;
        !           143: -                        write_word(ES, regs.u.r16.di+12, extended_memory_size);
        !           144: -                        extended_memory_size >>= 16;
        !           145: -                        write_word(ES, regs.u.r16.di+14, extended_memory_size);
        !           146: -
        !           147: -                        write_word(ES, regs.u.r16.di+16, 0x1);
        !           148: -                        write_word(ES, regs.u.r16.di+18, 0x0);
        !           149: -
        !           150: -                        regs.u.r32.ebx = 0;
        !           151: +                        set_e820_range(ES, regs.u.r16.di, 
        !           152: +                                       0x00100000L, extended_memory_size, 1);
        !           153: +                        regs.u.r32.ebx = 4;
        !           154:                          regs.u.r32.eax = 0x534D4150;
        !           155:                          regs.u.r32.ecx = 0x14;
        !           156:                          CLEAR_CF();
        !           157:                          return;
        !           158:                          break;
        !           159: +                    case 4:
        !           160: +                        /* 256KB BIOS area at the end of 4 GB */
        !           161: +                        set_e820_range(ES, regs.u.r16.di, 
        !           162: +                                       0xfffc0000L, 0x00000000L, 2);
        !           163: +                        regs.u.r32.ebx = 0;
        !           164: +                        regs.u.r32.eax = 0x534D4150;
        !           165: +                        regs.u.r32.ecx = 0x14;
        !           166: +                        CLEAR_CF();
        !           167: +                        return;
        !           168:                      default:  /* AX=E820, DX=534D4150, BX unrecognized */
        !           169:                          goto int15_unimplemented;
        !           170:                          break;
        !           171: @@ -8713,6 +8742,7 @@
1.1.1.2   root      172:    mov al, #0x80
                    173:  bios32_end:
                    174:    popf
                    175: +  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
                    176:    retf
                    177:  
                    178:  .align 16
1.1.1.3 ! root      179: @@ -8823,17 +8853,17 @@
1.1.1.2   root      180:  pci_pro_fail:
                    181:    pop edi
                    182:    pop esi
                    183: -  sti
                    184:    popf
                    185:    stc
                    186: +  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
                    187:    retf
                    188:  pci_pro_ok:
                    189:    xor ah, ah
                    190:    pop edi
                    191:    pop esi
                    192: -  sti
                    193:    popf
                    194:    clc
                    195: +  and dword ptr[esp+4],0xfffffffc ;; reset CS.RPL for kqemu
                    196:    retf
                    197:  
                    198:  pci_pro_select_reg:
1.1.1.3 ! root      199: @@ -8971,7 +9001,7 @@
1.1.1.2   root      200:    jmp pci_real_ok
                    201:  pci_real_f0d: ;; write configuration dword
                    202:    cmp al, #0x0d
                    203: -  jne pci_real_unknown
                    204: +  jne pci_real_f0e
                    205:    call pci_real_select_reg
                    206:    push dx
                    207:    mov dx, #0x0cfc
1.1.1.3 ! root      208: @@ -8979,6 +9009,46 @@
1.1.1.2   root      209:    out dx, eax
                    210:    pop dx
                    211:    jmp pci_real_ok
                    212: +pci_real_f0e: ;; get irq routing options
                    213: +  cmp al, #0x0e
                    214: +  jne pci_real_unknown
                    215: +  SEG ES
                    216: +  cmp word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start
                    217: +  jb pci_real_too_small    
                    218: +  SEG ES
                    219: +  mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start        
                    220: +  pushf
                    221: +  push ds
                    222: +  push es
                    223: +  push cx
                    224: +  push si
                    225: +  push di
                    226: +  cld
                    227: +  mov si, #pci_routing_table_structure_start
                    228: +  push cs
                    229: +  pop ds
                    230: +  SEG ES
                    231: +  mov cx, [di+2]
                    232: +  SEG ES
                    233: +  mov es, [di+4]
                    234: +  mov di, cx
                    235: +  mov cx, #pci_routing_table_structure_end - pci_routing_table_structure_start
                    236: +  rep 
                    237: +      movsb
                    238: +  pop di
                    239: +  pop si
                    240: +  pop cx
                    241: +  pop es
                    242: +  pop ds
                    243: +  popf
                    244: +  mov bx, #(1 << 9) | (1 << 11)   ;; irq 9 and 11 are used
                    245: +  jmp pci_real_ok
                    246: +pci_real_too_small:
                    247: +  SEG ES
                    248: +  mov word ptr [di], #pci_routing_table_structure_end - pci_routing_table_structure_start        
                    249: +  mov ah, #0x89
                    250: +  jmp pci_real_fail
1.1       root      251: +
1.1.1.2   root      252:  pci_real_unknown:
                    253:    mov ah, #0x81
                    254:  pci_real_fail:
1.1.1.3 ! root      255: @@ -9019,6 +9089,7 @@
1.1.1.2   root      256:    dw 0,0 ;; Miniport data
                    257:    db 0,0,0,0,0,0,0,0,0,0,0 ;; reserved
                    258:    db 0x07 ;; checksum
                    259: +pci_routing_table_structure_start:
                    260:    ;; first slot entry PCI-to-ISA (embedded)
                    261:    db 0 ;; pci bus number
                    262:    db 0x08 ;; pci device number (bit 7-3)
1.1.1.3 ! root      263: @@ -9097,6 +9168,7 @@
1.1.1.2   root      264:    dw 0xdef8 ;; IRQ bitmap INTD#
                    265:    db 5 ;; physical slot (0 = embedded)
                    266:    db 0 ;; reserved
                    267: +pci_routing_table_structure_end:
1.1       root      268:  
1.1.1.2   root      269:  pci_irq_list:
                    270:    db 11, 10, 9, 5;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.