~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to hw/ppc_chrp.c

  • Committer: ths
  • Date: 2007-09-16 21:08:06 UTC
  • Revision ID: git-v1:5fafdf24ef2c090c164d4dc89684b3f379dbdd87
find -type f | xargs sed -i 's/[\t ]$//g' # on most files


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3173 c046a42c-6fe2-441c-8c8c-71466251a162

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * QEMU PPC CHRP/PMAC hardware System Emulator
3
 
 * 
 
3
 *
4
4
 * Copyright (c) 2004-2007 Fabrice Bellard
5
 
 * 
 
5
 *
6
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
 * of this software and associated documentation files (the "Software"), to deal
8
8
 * in the Software without restriction, including without limitation the rights
129
129
    s = qemu_mallocz(sizeof(MacIONVRAMState));
130
130
    if (!s)
131
131
        return NULL;
132
 
    macio_nvram_mem_index = cpu_register_io_memory(0, macio_nvram_read, 
 
132
    macio_nvram_mem_index = cpu_register_io_memory(0, macio_nvram_read,
133
133
                                                   macio_nvram_write, s);
134
134
    return s;
135
135
}
136
136
 
137
 
static void macio_map(PCIDevice *pci_dev, int region_num, 
 
137
static void macio_map(PCIDevice *pci_dev, int region_num,
138
138
                      uint32_t addr, uint32_t size, int type)
139
139
{
140
140
    if (heathrow_pic_mem_index >= 0) {
141
 
        cpu_register_physical_memory(addr + 0x00000, 0x1000, 
 
141
        cpu_register_physical_memory(addr + 0x00000, 0x1000,
142
142
                                     heathrow_pic_mem_index);
143
143
    }
144
144
    cpu_register_physical_memory(addr + 0x08000, 0x1000, dbdma_mem_index);
148
148
    if (ide1_mem_index >= 0)
149
149
        cpu_register_physical_memory(addr + 0x20000, 0x1000, ide1_mem_index);
150
150
    if (openpic_mem_index >= 0) {
151
 
        cpu_register_physical_memory(addr + 0x40000, 0x40000, 
 
151
        cpu_register_physical_memory(addr + 0x40000, 0x40000,
152
152
                                     openpic_mem_index);
153
153
    }
154
154
    if (macio_nvram_mem_index >= 0)
173
173
    d->config[0x0e] = 0x00; // header_type
174
174
 
175
175
    d->config[0x3d] = 0x01; // interrupt on pin 1
176
 
    
 
176
   
177
177
    dbdma_mem_index = cpu_register_io_memory(0, dbdma_read, dbdma_write, NULL);
178
178
 
179
 
    pci_register_io_region(d, 0, 0x80000, 
 
179
    pci_register_io_region(d, 0, 0x80000,
180
180
                           PCI_ADDRESS_SPACE_MEM, macio_map);
181
181
}
182
182
 
208
208
{
209
209
    static int vga_vbl_enabled;
210
210
    int linesize;
211
 
    
 
211
   
212
212
    //    printf("osi_call R5=%d\n", env->gpr[5]);
213
213
 
214
214
    /* same handler as PearPC, coming from the original MOL video
229
229
                break;
230
230
            }
231
231
        }
232
 
        env->gpr[3] = 0; 
 
232
        env->gpr[3] = 0;
233
233
        env->gpr[4] = (1 << 16) | 1; /* num_vmodes, cur_vmode */
234
234
        env->gpr[5] = (1 << 16) | 0; /* num_depths, cur_depth_mode */
235
235
        env->gpr[6] = (graphic_width << 16) | graphic_height; /* w, h */
255
255
        break;
256
256
    case 64: /* get color */
257
257
        /* R6 = index */
258
 
        env->gpr[3] = 0; 
 
258
        env->gpr[3] = 0;
259
259
        break;
260
260
    case 116: /* set hwcursor */
261
261
        /* R6 = x, R7 = y, R8 = visible, R9 = data */
280
280
void pmac_format_nvram_partition(uint8_t *buf, int len)
281
281
{
282
282
    char partition_name[12] = "wwwwwwwwwwww";
283
 
    
 
283
   
284
284
    buf[0] = 0x7f; /* free partition magic */
285
285
    buf[1] = 0; /* checksum */
286
286
    buf[2] = len >> 8;
287
287
    buf[3] = len;
288
288
    memcpy(buf + 4, partition_name, 12);
289
289
    buf[1] = nvram_chksum(buf, 16);
290
 
}    
 
290
}   
291
291
 
292
292
/* PowerPC CHRP hardware initialisation */
293
293
static void ppc_chrp_init (int ram_size, int vga_ram_size, int boot_device,
355
355
    bios_size = (bios_size + 0xfff) & ~0xfff;
356
356
    cpu_register_physical_memory((uint32_t)(-bios_size),
357
357
                                 bios_size, bios_offset | IO_MEM_ROM);
358
 
    
 
358
   
359
359
    /* allocate and load VGA BIOS */
360
360
    vga_bios_offset = bios_offset + bios_size;
361
361
    snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_FILENAME);
371
371
        phys_ram_base[vga_bios_offset + 1] = 'D';
372
372
        phys_ram_base[vga_bios_offset + 2] = 'R';
373
373
        phys_ram_base[vga_bios_offset + 3] = 'V';
374
 
        cpu_to_be32w((uint32_t *)(phys_ram_base + vga_bios_offset + 4), 
 
374
        cpu_to_be32w((uint32_t *)(phys_ram_base + vga_bios_offset + 4),
375
375
                     vga_bios_size);
376
376
        vga_bios_size += 8;
377
377
    }
378
378
    vga_bios_size = (vga_bios_size + 0xfff) & ~0xfff;
379
 
    
 
379
   
380
380
    if (linux_boot) {
381
381
        kernel_base = KERNEL_LOAD_ADDR;
382
382
        /* now we can load the kernel */
427
427
 
428
428
        /* XXX: suppress that */
429
429
        dummy_irq = i8259_init(NULL);
430
 
        
 
430
       
431
431
        /* XXX: use Mac Serial port */
432
432
        serial_init(0x3f8, dummy_irq[4], serial_hds[0]);
433
 
        
 
433
       
434
434
        for(i = 0; i < nb_nics; i++) {
435
435
            if (!nd_table[i].model)
436
436
                nd_table[i].model = "ne2k_pci";
437
437
            pci_nic_init(pci_bus, &nd_table[i], -1);
438
438
        }
439
 
        
 
439
       
440
440
        pci_cmd646_ide_init(pci_bus, &bs_table[0], 0);
441
441
 
442
442
        /* cuda also initialize ADB */
443
443
        cuda_mem_index = cuda_init(pic[0x12]);
444
 
        
 
444
       
445
445
        adb_kbd_init(&adb_bus);
446
446
        adb_mouse_init(&adb_bus);
447
 
        
 
447
       
448
448
        {
449
449
            MacIONVRAMState *nvr;
450
450
            nvr = macio_nvram_init();
534
534
#endif
535
535
        /* cuda also initialize ADB */
536
536
        cuda_mem_index = cuda_init(pic[0x19]);
537
 
        
 
537
       
538
538
        adb_kbd_init(&adb_bus);
539
539
        adb_mouse_init(&adb_bus);
540
 
        
 
540
       
541
541
        macio_init(pci_bus, 0x0022);
542
 
        
 
542
       
543
543
        nvram = m48t59_init(dummy_irq[8], 0xFFF04000, 0x0074, NVRAM_SIZE, 59);
544
 
        
 
544
       
545
545
        arch_name = "MAC99";
546
546
    }
547
547
 
578
578
                  kernel_filename, kernel_cmdline,
579
579
                  initrd_filename, cpu_model, 0);
580
580
}
581
 
    
 
581
   
582
582
static void ppc_heathrow_init (int ram_size, int vga_ram_size, int boot_device,
583
583
                               DisplayState *ds, const char **fd_filename,
584
584
                               int snapshot,