1 /* 2 * linux/arch/m68k/mac/config.c 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file COPYING in the main directory of this archive 6 * for more details. 7 */ 8 9 /* 10 * Miscellaneous linux stuff 11 */ 12 13 #include <linux/module.h> 14 #include <linux/types.h> 15 #include <linux/mm.h> 16 #include <linux/tty.h> 17 #include <linux/console.h> 18 #include <linux/interrupt.h> 19 /* keyb */ 20 #include <linux/random.h> 21 #include <linux/delay.h> 22 /* keyb */ 23 #include <linux/init.h> 24 #include <linux/vt_kern.h> 25 26 #define BOOTINFO_COMPAT_1_0 27 #include <asm/setup.h> 28 #include <asm/bootinfo.h> 29 30 #include <asm/system.h> 31 #include <asm/io.h> 32 #include <asm/irq.h> 33 #include <asm/pgtable.h> 34 #include <asm/rtc.h> 35 #include <asm/machdep.h> 36 37 #include <asm/macintosh.h> 38 #include <asm/macints.h> 39 #include <asm/machw.h> 40 41 #include <asm/mac_iop.h> 42 #include <asm/mac_via.h> 43 #include <asm/mac_oss.h> 44 #include <asm/mac_psc.h> 45 46 /* Mac bootinfo struct */ 47 48 struct mac_booter_data mac_bi_data; 49 int mac_bisize = sizeof mac_bi_data; 50 51 /* New m68k bootinfo stuff and videobase */ 52 53 extern int m68k_num_memory; 54 extern struct mem_info m68k_memory[NUM_MEMINFO]; 55 56 extern struct mem_info m68k_ramdisk; 57 58 void *mac_env; /* Loaded by the boot asm */ 59 60 /* The phys. video addr. - might be bogus on some machines */ 61 unsigned long mac_orig_videoaddr; 62 63 /* Mac specific timer functions */ 64 extern unsigned long mac_gettimeoffset(void); 65 extern int mac_hwclk(int, struct rtc_time *); 66 extern int mac_set_clock_mmss(unsigned long); 67 extern int show_mac_interrupts(struct seq_file *, void *); 68 extern void iop_preinit(void); 69 extern void iop_init(void); 70 extern void via_init(void); 71 extern void via_init_clock(irq_handler_t func); 72 extern void via_flush_cache(void); 73 extern void oss_init(void); 74 extern void psc_init(void); 75 extern void baboon_init(void); 76 77 extern void mac_mksound(unsigned int, unsigned int); 78 79 extern void nubus_sweep_video(void); 80 81 static void mac_get_model(char *str); 82 83 static void __init mac_sched_init(irq_handler_t vector) 84 { 85 via_init_clock(vector); 86 } 87 88 /* 89 * Parse a Macintosh-specific record in the bootinfo 90 */ 91 92 int __init mac_parse_bootinfo(const struct bi_record *record) 93 { 94 int unknown = 0; 95 const u_long *data = record->data; 96 97 switch (record->tag) { 98 case BI_MAC_MODEL: 99 mac_bi_data.id = *data; 100 break; 101 case BI_MAC_VADDR: 102 mac_bi_data.videoaddr = *data; 103 break; 104 case BI_MAC_VDEPTH: 105 mac_bi_data.videodepth = *data; 106 break; 107 case BI_MAC_VROW: 108 mac_bi_data.videorow = *data; 109 break; 110 case BI_MAC_VDIM: 111 mac_bi_data.dimensions = *data; 112 break; 113 case BI_MAC_VLOGICAL: 114 mac_bi_data.videological = VIDEOMEMBASE + (*data & ~VIDEOMEMMASK); 115 mac_orig_videoaddr = *data; 116 break; 117 case BI_MAC_SCCBASE: 118 mac_bi_data.sccbase = *data; 119 break; 120 case BI_MAC_BTIME: 121 mac_bi_data.boottime = *data; 122 break; 123 case BI_MAC_GMTBIAS: 124 mac_bi_data.gmtbias = *data; 125 break; 126 case BI_MAC_MEMSIZE: 127 mac_bi_data.memsize = *data; 128 break; 129 case BI_MAC_CPUID: 130 mac_bi_data.cpuid = *data; 131 break; 132 case BI_MAC_ROMBASE: 133 mac_bi_data.rombase = *data; 134 break; 135 default: 136 unknown = 1; 137 break; 138 } 139 return unknown; 140 } 141 142 /* 143 * Flip into 24bit mode for an instant - flushes the L2 cache card. We 144 * have to disable interrupts for this. Our IRQ handlers will crap 145 * themselves if they take an IRQ in 24bit mode! 146 */ 147 148 static void mac_cache_card_flush(int writeback) 149 { 150 unsigned long flags; 151 152 local_irq_save(flags); 153 via_flush_cache(); 154 local_irq_restore(flags); 155 } 156 157 void __init config_mac(void) 158 { 159 if (!MACH_IS_MAC) 160 printk(KERN_ERR "ERROR: no Mac, but config_mac() called!! \n"); 161 162 mach_sched_init = mac_sched_init; 163 mach_init_IRQ = mac_init_IRQ; 164 mach_get_model = mac_get_model; 165 mach_gettimeoffset = mac_gettimeoffset; 166 #warning move to adb/via init 167 #if 0 168 mach_hwclk = mac_hwclk; 169 #endif 170 mach_set_clock_mmss = mac_set_clock_mmss; 171 mach_reset = mac_reset; 172 mach_halt = mac_poweroff; 173 mach_power_off = mac_poweroff; 174 mach_max_dma_address = 0xffffffff; 175 #if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE) 176 mach_beep = mac_mksound; 177 #endif 178 #ifdef CONFIG_HEARTBEAT 179 #if 0 180 mach_heartbeat = mac_heartbeat; 181 mach_heartbeat_irq = IRQ_MAC_TIMER; 182 #endif 183 #endif 184 185 /* 186 * Determine hardware present 187 */ 188 189 mac_identify(); 190 mac_report_hardware(); 191 192 /* 193 * AFAIK only the IIci takes a cache card. The IIfx has onboard 194 * cache ... someone needs to figure out how to tell if it's on or 195 * not. 196 */ 197 198 if (macintosh_config->ident == MAC_MODEL_IICI 199 || macintosh_config->ident == MAC_MODEL_IIFX) 200 mach_l2_flush = mac_cache_card_flush; 201 202 /* 203 * Check for machine specific fixups. 204 */ 205 206 #ifdef OLD_NUBUS_CODE 207 nubus_sweep_video(); 208 #endif 209 } 210 211 212 /* 213 * Macintosh Table: hardcoded model configuration data. 214 * 215 * Much of this was defined by Alan, based on who knows what docs. 216 * I've added a lot more, and some of that was pure guesswork based 217 * on hardware pages present on the Mac web site. Possibly wildly 218 * inaccurate, so look here if a new Mac model won't run. Example: if 219 * a Mac crashes immediately after the VIA1 registers have been dumped 220 * to the screen, it probably died attempting to read DirB on a RBV. 221 * Meaning it should have MAC_VIA_IIci here :-) 222 */ 223 224 struct mac_model *macintosh_config; 225 EXPORT_SYMBOL(macintosh_config); 226 227 static struct mac_model mac_data_table[] = { 228 /* 229 * We'll pretend to be a Macintosh II, that's pretty safe. 230 */ 231 232 { 233 .ident = MAC_MODEL_II, 234 .name = "Unknown", 235 .adb_type = MAC_ADB_II, 236 .via_type = MAC_VIA_II, 237 .scsi_type = MAC_SCSI_OLD, 238 .scc_type = MAC_SCC_II, 239 .nubus_type = MAC_NUBUS 240 }, 241 242 /* 243 * Original MacII hardware 244 * 245 */ 246 247 { 248 .ident = MAC_MODEL_II, 249 .name = "II", 250 .adb_type = MAC_ADB_II, 251 .via_type = MAC_VIA_II, 252 .scsi_type = MAC_SCSI_OLD, 253 .scc_type = MAC_SCC_II, 254 .nubus_type = MAC_NUBUS 255 }, { 256 .ident = MAC_MODEL_IIX, 257 .name = "IIx", 258 .adb_type = MAC_ADB_II, 259 .via_type = MAC_VIA_II, 260 .scsi_type = MAC_SCSI_OLD, 261 .scc_type = MAC_SCC_II, 262 .nubus_type = MAC_NUBUS 263 }, { 264 .ident = MAC_MODEL_IICX, 265 .name = "IIcx", 266 .adb_type = MAC_ADB_II, 267 .via_type = MAC_VIA_II, 268 .scsi_type = MAC_SCSI_OLD, 269 .scc_type = MAC_SCC_II, 270 .nubus_type = MAC_NUBUS 271 }, { 272 .ident = MAC_MODEL_SE30, 273 .name = "SE/30", 274 .adb_type = MAC_ADB_II, 275 .via_type = MAC_VIA_II, 276 .scsi_type = MAC_SCSI_OLD, 277 .scc_type = MAC_SCC_II, 278 .nubus_type = MAC_NUBUS 279 }, 280 281 /* 282 * Weirdified MacII hardware - all subtly different. Gee thanks 283 * Apple. All these boxes seem to have VIA2 in a different place to 284 * the MacII (+1A000 rather than +4000) 285 * CSA: see http://developer.apple.com/technotes/hw/hw_09.html 286 */ 287 288 { 289 .ident = MAC_MODEL_IICI, 290 .name = "IIci", 291 .adb_type = MAC_ADB_II, 292 .via_type = MAC_VIA_IIci, 293 .scsi_type = MAC_SCSI_OLD, 294 .scc_type = MAC_SCC_II, 295 .nubus_type = MAC_NUBUS 296 }, { 297 .ident = MAC_MODEL_IIFX, 298 .name = "IIfx", 299 .adb_type = MAC_ADB_IOP, 300 .via_type = MAC_VIA_IIci, 301 .scsi_type = MAC_SCSI_OLD, 302 .scc_type = MAC_SCC_IOP, 303 .nubus_type = MAC_NUBUS 304 }, { 305 .ident = MAC_MODEL_IISI, 306 .name = "IIsi", 307 .adb_type = MAC_ADB_IISI, 308 .via_type = MAC_VIA_IIci, 309 .scsi_type = MAC_SCSI_OLD, 310 .scc_type = MAC_SCC_II, 311 .nubus_type = MAC_NUBUS 312 }, { 313 .ident = MAC_MODEL_IIVI, 314 .name = "IIvi", 315 .adb_type = MAC_ADB_IISI, 316 .via_type = MAC_VIA_IIci, 317 .scsi_type = MAC_SCSI_OLD, 318 .scc_type = MAC_SCC_II, 319 .nubus_type = MAC_NUBUS 320 }, { 321 .ident = MAC_MODEL_IIVX, 322 .name = "IIvx", 323 .adb_type = MAC_ADB_IISI, 324 .via_type = MAC_VIA_IIci, 325 .scsi_type = MAC_SCSI_OLD, 326 .scc_type = MAC_SCC_II, 327 .nubus_type = MAC_NUBUS 328 }, 329 330 /* 331 * Classic models (guessing: similar to SE/30 ?? Nope, similar to LC ...) 332 */ 333 334 { 335 .ident = MAC_MODEL_CLII, 336 .name = "Classic II", 337 .adb_type = MAC_ADB_IISI, 338 .via_type = MAC_VIA_IIci, 339 .scsi_type = MAC_SCSI_OLD, 340 .scc_type = MAC_SCC_II, 341 .nubus_type = MAC_NUBUS 342 }, { 343 .ident = MAC_MODEL_CCL, 344 .name = "Color Classic", 345 .adb_type = MAC_ADB_CUDA, 346 .via_type = MAC_VIA_IIci, 347 .scsi_type = MAC_SCSI_OLD, 348 .scc_type = MAC_SCC_II, 349 .nubus_type = MAC_NUBUS}, 350 351 /* 352 * Some Mac LC machines. Basically the same as the IIci, ADB like IIsi 353 */ 354 355 { 356 .ident = MAC_MODEL_LC, 357 .name = "LC", 358 .adb_type = MAC_ADB_IISI, 359 .via_type = MAC_VIA_IIci, 360 .scsi_type = MAC_SCSI_OLD, 361 .scc_type = MAC_SCC_II, 362 .nubus_type = MAC_NUBUS 363 }, { 364 .ident = MAC_MODEL_LCII, 365 .name = "LC II", 366 .adb_type = MAC_ADB_IISI, 367 .via_type = MAC_VIA_IIci, 368 .scsi_type = MAC_SCSI_OLD, 369 .scc_type = MAC_SCC_II, 370 .nubus_type = MAC_NUBUS 371 }, { 372 .ident = MAC_MODEL_LCIII, 373 .name = "LC III", 374 .adb_type = MAC_ADB_IISI, 375 .via_type = MAC_VIA_IIci, 376 .scsi_type = MAC_SCSI_OLD, 377 .scc_type = MAC_SCC_II, 378 .nubus_type = MAC_NUBUS 379 }, 380 381 /* 382 * Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently 383 * as some of the stuff connected to VIA2 seems different. Better SCSI chip and 384 * onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an 385 * AMD 79C940 (MACE). 386 * The 700, 900 and 950 have some I/O chips in the wrong place to 387 * confuse us. The 840AV has a SCSI location of its own (same as 388 * the 660AV). 389 */ 390 391 { 392 .ident = MAC_MODEL_Q605, 393 .name = "Quadra 605", 394 .adb_type = MAC_ADB_CUDA, 395 .via_type = MAC_VIA_QUADRA, 396 .scsi_type = MAC_SCSI_QUADRA, 397 .scc_type = MAC_SCC_QUADRA, 398 .nubus_type = MAC_NUBUS 399 }, { 400 .ident = MAC_MODEL_Q605_ACC, 401 .name = "Quadra 605", 402 .adb_type = MAC_ADB_CUDA, 403 .via_type = MAC_VIA_QUADRA, 404 .scsi_type = MAC_SCSI_QUADRA, 405 .scc_type = MAC_SCC_QUADRA, 406 .nubus_type = MAC_NUBUS 407 }, { 408 .ident = MAC_MODEL_Q610, 409 .name = "Quadra 610", 410 .adb_type = MAC_ADB_II, 411 .via_type = MAC_VIA_QUADRA, 412 .scsi_type = MAC_SCSI_QUADRA, 413 .scc_type = MAC_SCC_QUADRA, 414 .ether_type = MAC_ETHER_SONIC, 415 .nubus_type = MAC_NUBUS 416 }, { 417 .ident = MAC_MODEL_Q630, 418 .name = "Quadra 630", 419 .adb_type = MAC_ADB_CUDA, 420 .via_type = MAC_VIA_QUADRA, 421 .scsi_type = MAC_SCSI_QUADRA, 422 .ide_type = MAC_IDE_QUADRA, 423 .scc_type = MAC_SCC_QUADRA, 424 .ether_type = MAC_ETHER_SONIC, 425 .nubus_type = MAC_NUBUS 426 }, { 427 .ident = MAC_MODEL_Q650, 428 .name = "Quadra 650", 429 .adb_type = MAC_ADB_II, 430 .via_type = MAC_VIA_QUADRA, 431 .scsi_type = MAC_SCSI_QUADRA, 432 .scc_type = MAC_SCC_QUADRA, 433 .ether_type = MAC_ETHER_SONIC, 434 .nubus_type = MAC_NUBUS 435 }, 436 /* The Q700 does have a NS Sonic */ 437 { 438 .ident = MAC_MODEL_Q700, 439 .name = "Quadra 700", 440 .adb_type = MAC_ADB_II, 441 .via_type = MAC_VIA_QUADRA, 442 .scsi_type = MAC_SCSI_QUADRA2, 443 .scc_type = MAC_SCC_QUADRA, 444 .ether_type = MAC_ETHER_SONIC, 445 .nubus_type = MAC_NUBUS 446 }, { 447 .ident = MAC_MODEL_Q800, 448 .name = "Quadra 800", 449 .adb_type = MAC_ADB_II, 450 .via_type = MAC_VIA_QUADRA, 451 .scsi_type = MAC_SCSI_QUADRA, 452 .scc_type = MAC_SCC_QUADRA, 453 .ether_type = MAC_ETHER_SONIC, 454 .nubus_type = MAC_NUBUS 455 }, { 456 .ident = MAC_MODEL_Q840, 457 .name = "Quadra 840AV", 458 .adb_type = MAC_ADB_CUDA, 459 .via_type = MAC_VIA_QUADRA, 460 .scsi_type = MAC_SCSI_QUADRA3, 461 .scc_type = MAC_SCC_PSC, 462 .ether_type = MAC_ETHER_MACE, 463 .nubus_type = MAC_NUBUS 464 }, { 465 .ident = MAC_MODEL_Q900, 466 .name = "Quadra 900", 467 .adb_type = MAC_ADB_IOP, 468 .via_type = MAC_VIA_QUADRA, 469 .scsi_type = MAC_SCSI_QUADRA2, 470 .scc_type = MAC_SCC_IOP, 471 .ether_type = MAC_ETHER_SONIC, 472 .nubus_type = MAC_NUBUS 473 }, { 474 .ident = MAC_MODEL_Q950, 475 .name = "Quadra 950", 476 .adb_type = MAC_ADB_IOP, 477 .via_type = MAC_VIA_QUADRA, 478 .scsi_type = MAC_SCSI_QUADRA2, 479 .scc_type = MAC_SCC_IOP, 480 .ether_type = MAC_ETHER_SONIC, 481 .nubus_type = MAC_NUBUS 482 }, 483 484 /* 485 * Performa - more LC type machines 486 */ 487 488 { 489 .ident = MAC_MODEL_P460, 490 .name = "Performa 460", 491 .adb_type = MAC_ADB_IISI, 492 .via_type = MAC_VIA_IIci, 493 .scsi_type = MAC_SCSI_OLD, 494 .scc_type = MAC_SCC_II, 495 .nubus_type = MAC_NUBUS 496 }, { 497 .ident = MAC_MODEL_P475, 498 .name = "Performa 475", 499 .adb_type = MAC_ADB_CUDA, 500 .via_type = MAC_VIA_QUADRA, 501 .scsi_type = MAC_SCSI_QUADRA, 502 .scc_type = MAC_SCC_II, 503 .nubus_type = MAC_NUBUS 504 }, { 505 .ident = MAC_MODEL_P475F, 506 .name = "Performa 475", 507 .adb_type = MAC_ADB_CUDA, 508 .via_type = MAC_VIA_QUADRA, 509 .scsi_type = MAC_SCSI_QUADRA, 510 .scc_type = MAC_SCC_II, 511 .nubus_type = MAC_NUBUS 512 }, { 513 .ident = MAC_MODEL_P520, 514 .name = "Performa 520", 515 .adb_type = MAC_ADB_CUDA, 516 .via_type = MAC_VIA_IIci, 517 .scsi_type = MAC_SCSI_OLD, 518 .scc_type = MAC_SCC_II, 519 .nubus_type = MAC_NUBUS 520 }, { 521 .ident = MAC_MODEL_P550, 522 .name = "Performa 550", 523 .adb_type = MAC_ADB_CUDA, 524 .via_type = MAC_VIA_IIci, 525 .scsi_type = MAC_SCSI_OLD, 526 .scc_type = MAC_SCC_II, 527 .nubus_type = MAC_NUBUS 528 }, 529 /* These have the comm slot, and therefore the possibility of SONIC ethernet */ 530 { 531 .ident = MAC_MODEL_P575, 532 .name = "Performa 575", 533 .adb_type = MAC_ADB_CUDA, 534 .via_type = MAC_VIA_QUADRA, 535 .scsi_type = MAC_SCSI_QUADRA, 536 .scc_type = MAC_SCC_II, 537 .ether_type = MAC_ETHER_SONIC, 538 .nubus_type = MAC_NUBUS 539 }, { 540 .ident = MAC_MODEL_P588, 541 .name = "Performa 588", 542 .adb_type = MAC_ADB_CUDA, 543 .via_type = MAC_VIA_QUADRA, 544 .scsi_type = MAC_SCSI_QUADRA, 545 .ide_type = MAC_IDE_QUADRA, 546 .scc_type = MAC_SCC_II, 547 .ether_type = MAC_ETHER_SONIC, 548 .nubus_type = MAC_NUBUS 549 }, { 550 .ident = MAC_MODEL_TV, 551 .name = "TV", 552 .adb_type = MAC_ADB_CUDA, 553 .via_type = MAC_VIA_QUADRA, 554 .scsi_type = MAC_SCSI_OLD, 555 .scc_type = MAC_SCC_II, 556 .nubus_type = MAC_NUBUS 557 }, { 558 .ident = MAC_MODEL_P600, 559 .name = "Performa 600", 560 .adb_type = MAC_ADB_IISI, 561 .via_type = MAC_VIA_IIci, 562 .scsi_type = MAC_SCSI_OLD, 563 .scc_type = MAC_SCC_II, 564 .nubus_type = MAC_NUBUS 565 }, 566 567 /* 568 * Centris - just guessing again; maybe like Quadra 569 */ 570 571 /* The C610 may or may not have SONIC. We probe to make sure */ 572 { 573 .ident = MAC_MODEL_C610, 574 .name = "Centris 610", 575 .adb_type = MAC_ADB_II, 576 .via_type = MAC_VIA_QUADRA, 577 .scsi_type = MAC_SCSI_QUADRA, 578 .scc_type = MAC_SCC_QUADRA, 579 .ether_type = MAC_ETHER_SONIC, 580 .nubus_type = MAC_NUBUS 581 }, { 582 .ident = MAC_MODEL_C650, 583 .name = "Centris 650", 584 .adb_type = MAC_ADB_II, 585 .via_type = MAC_VIA_QUADRA, 586 .scsi_type = MAC_SCSI_QUADRA, 587 .scc_type = MAC_SCC_QUADRA, 588 .ether_type = MAC_ETHER_SONIC, 589 .nubus_type = MAC_NUBUS 590 }, { 591 .ident = MAC_MODEL_C660, 592 .name = "Centris 660AV", 593 .adb_type = MAC_ADB_CUDA, 594 .via_type = MAC_VIA_QUADRA, 595 .scsi_type = MAC_SCSI_QUADRA3, 596 .scc_type = MAC_SCC_PSC, 597 .ether_type = MAC_ETHER_MACE, 598 .nubus_type = MAC_NUBUS 599 }, 600 601 /* 602 * The PowerBooks all the same "Combo" custom IC for SCSI and SCC 603 * and a PMU (in two variations?) for ADB. Most of them use the 604 * Quadra-style VIAs. A few models also have IDE from hell. 605 */ 606 607 { 608 .ident = MAC_MODEL_PB140, 609 .name = "PowerBook 140", 610 .adb_type = MAC_ADB_PB1, 611 .via_type = MAC_VIA_QUADRA, 612 .scsi_type = MAC_SCSI_OLD, 613 .scc_type = MAC_SCC_QUADRA, 614 .nubus_type = MAC_NUBUS 615 }, { 616 .ident = MAC_MODEL_PB145, 617 .name = "PowerBook 145", 618 .adb_type = MAC_ADB_PB1, 619 .via_type = MAC_VIA_QUADRA, 620 .scsi_type = MAC_SCSI_OLD, 621 .scc_type = MAC_SCC_QUADRA, 622 .nubus_type = MAC_NUBUS 623 }, { 624 .ident = MAC_MODEL_PB150, 625 .name = "PowerBook 150", 626 .adb_type = MAC_ADB_PB1, 627 .via_type = MAC_VIA_IIci, 628 .scsi_type = MAC_SCSI_OLD, 629 .ide_type = MAC_IDE_PB, 630 .scc_type = MAC_SCC_QUADRA, 631 .nubus_type = MAC_NUBUS 632 }, { 633 .ident = MAC_MODEL_PB160, 634 .name = "PowerBook 160", 635 .adb_type = MAC_ADB_PB1, 636 .via_type = MAC_VIA_QUADRA, 637 .scsi_type = MAC_SCSI_OLD, 638 .scc_type = MAC_SCC_QUADRA, 639 .nubus_type = MAC_NUBUS 640 }, { 641 .ident = MAC_MODEL_PB165, 642 .name = "PowerBook 165", 643 .adb_type = MAC_ADB_PB1, 644 .via_type = MAC_VIA_QUADRA, 645 .scsi_type = MAC_SCSI_OLD, 646 .scc_type = MAC_SCC_QUADRA, 647 .nubus_type = MAC_NUBUS 648 }, { 649 .ident = MAC_MODEL_PB165C, 650 .name = "PowerBook 165c", 651 .adb_type = MAC_ADB_PB1, 652 .via_type = MAC_VIA_QUADRA, 653 .scsi_type = MAC_SCSI_OLD, 654 .scc_type = MAC_SCC_QUADRA, 655 .nubus_type = MAC_NUBUS 656 }, { 657 .ident = MAC_MODEL_PB170, 658 .name = "PowerBook 170", 659 .adb_type = MAC_ADB_PB1, 660 .via_type = MAC_VIA_QUADRA, 661 .scsi_type = MAC_SCSI_OLD, 662 .scc_type = MAC_SCC_QUADRA, 663 .nubus_type = MAC_NUBUS 664 }, { 665 .ident = MAC_MODEL_PB180, 666 .name = "PowerBook 180", 667 .adb_type = MAC_ADB_PB1, 668 .via_type = MAC_VIA_QUADRA, 669 .scsi_type = MAC_SCSI_OLD, 670 .scc_type = MAC_SCC_QUADRA, 671 .nubus_type = MAC_NUBUS 672 }, { 673 .ident = MAC_MODEL_PB180C, 674 .name = "PowerBook 180c", 675 .adb_type = MAC_ADB_PB1, 676 .via_type = MAC_VIA_QUADRA, 677 .scsi_type = MAC_SCSI_OLD, 678 .scc_type = MAC_SCC_QUADRA, 679 .nubus_type = MAC_NUBUS 680 }, { 681 .ident = MAC_MODEL_PB190, 682 .name = "PowerBook 190", 683 .adb_type = MAC_ADB_PB2, 684 .via_type = MAC_VIA_QUADRA, 685 .scsi_type = MAC_SCSI_OLD, 686 .ide_type = MAC_IDE_BABOON, 687 .scc_type = MAC_SCC_QUADRA, 688 .nubus_type = MAC_NUBUS 689 }, { 690 .ident = MAC_MODEL_PB520, 691 .name = "PowerBook 520", 692 .adb_type = MAC_ADB_PB2, 693 .via_type = MAC_VIA_QUADRA, 694 .scsi_type = MAC_SCSI_OLD, 695 .scc_type = MAC_SCC_QUADRA, 696 .ether_type = MAC_ETHER_SONIC, 697 .nubus_type = MAC_NUBUS 698 }, 699 700 /* 701 * PowerBook Duos are pretty much like normal PowerBooks 702 * All of these probably have onboard SONIC in the Dock which 703 * means we'll have to probe for it eventually. 704 * 705 * Are these really MAC_VIA_IIci? The developer notes for the 706 * Duos show pretty much the same custom parts as in most of 707 * the other PowerBooks which would imply MAC_VIA_QUADRA. 708 */ 709 710 { 711 .ident = MAC_MODEL_PB210, 712 .name = "PowerBook Duo 210", 713 .adb_type = MAC_ADB_PB2, 714 .via_type = MAC_VIA_IIci, 715 .scsi_type = MAC_SCSI_OLD, 716 .scc_type = MAC_SCC_QUADRA, 717 .nubus_type = MAC_NUBUS 718 }, { 719 .ident = MAC_MODEL_PB230, 720 .name = "PowerBook Duo 230", 721 .adb_type = MAC_ADB_PB2, 722 .via_type = MAC_VIA_IIci, 723 .scsi_type = MAC_SCSI_OLD, 724 .scc_type = MAC_SCC_QUADRA, 725 .nubus_type = MAC_NUBUS 726 }, { 727 .ident = MAC_MODEL_PB250, 728 .name = "PowerBook Duo 250", 729 .adb_type = MAC_ADB_PB2, 730 .via_type = MAC_VIA_IIci, 731 .scsi_type = MAC_SCSI_OLD, 732 .scc_type = MAC_SCC_QUADRA, 733 .nubus_type = MAC_NUBUS 734 }, { 735 .ident = MAC_MODEL_PB270C, 736 .name = "PowerBook Duo 270c", 737 .adb_type = MAC_ADB_PB2, 738 .via_type = MAC_VIA_IIci, 739 .scsi_type = MAC_SCSI_OLD, 740 .scc_type = MAC_SCC_QUADRA, 741 .nubus_type = MAC_NUBUS 742 }, { 743 .ident = MAC_MODEL_PB280, 744 .name = "PowerBook Duo 280", 745 .adb_type = MAC_ADB_PB2, 746 .via_type = MAC_VIA_IIci, 747 .scsi_type = MAC_SCSI_OLD, 748 .scc_type = MAC_SCC_QUADRA, 749 .nubus_type = MAC_NUBUS 750 }, { 751 .ident = MAC_MODEL_PB280C, 752 .name = "PowerBook Duo 280c", 753 .adb_type = MAC_ADB_PB2, 754 .via_type = MAC_VIA_IIci, 755 .scsi_type = MAC_SCSI_OLD, 756 .scc_type = MAC_SCC_QUADRA, 757 .nubus_type = MAC_NUBUS 758 }, 759 760 /* 761 * Other stuff ?? 762 */ 763 { 764 .ident = -1 765 } 766 }; 767 768 void __init mac_identify(void) 769 { 770 struct mac_model *m; 771 772 /* Penguin data useful? */ 773 int model = mac_bi_data.id; 774 if (!model) { 775 /* no bootinfo model id -> NetBSD booter was used! */ 776 /* XXX FIXME: breaks for model > 31 */ 777 model = (mac_bi_data.cpuid >> 2) & 63; 778 printk(KERN_WARNING "No bootinfo model ID, using cpuid instead (hey, use Penguin!)\n"); 779 } 780 781 macintosh_config = mac_data_table; 782 for (m = macintosh_config; m->ident != -1; m++) { 783 if (m->ident == model) { 784 macintosh_config = m; 785 break; 786 } 787 } 788 789 /* We need to pre-init the IOPs, if any. Otherwise */ 790 /* the serial console won't work if the user had */ 791 /* the serial ports set to "Faster" mode in MacOS. */ 792 793 iop_preinit(); 794 795 printk(KERN_INFO "Detected Macintosh model: %d \n", model); 796 797 /* 798 * Report booter data: 799 */ 800 printk(KERN_DEBUG " Penguin bootinfo data:\n"); 801 printk(KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n", 802 mac_bi_data.videoaddr, mac_bi_data.videorow, 803 mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF, 804 mac_bi_data.dimensions >> 16); 805 printk(KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx \n", 806 mac_bi_data.videological, mac_orig_videoaddr, 807 mac_bi_data.sccbase); 808 printk(KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx \n", 809 mac_bi_data.boottime, mac_bi_data.gmtbias); 810 printk(KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx \n", 811 mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize); 812 #if 0 813 printk("Ramdisk: addr 0x%lx size 0x%lx\n", 814 m68k_ramdisk.addr, m68k_ramdisk.size); 815 #endif 816 817 iop_init(); 818 via_init(); 819 oss_init(); 820 psc_init(); 821 baboon_init(); 822 } 823 824 void __init mac_report_hardware(void) 825 { 826 printk(KERN_INFO "Apple Macintosh %s\n", macintosh_config->name); 827 } 828 829 static void mac_get_model(char *str) 830 { 831 strcpy(str, "Macintosh "); 832 strcat(str, macintosh_config->name); 833 } 834