int __init mac_platform_init()

in mac/config.c [958:1104]


int __init mac_platform_init(void)
{
	phys_addr_t swim_base = 0;

	if (!MACH_IS_MAC)
		return -ENODEV;

	/*
	 * Serial devices
	 */

	platform_device_register(&scc_a_pdev);
	platform_device_register(&scc_b_pdev);

	/*
	 * Floppy device
	 */

	switch (macintosh_config->floppy_type) {
	case MAC_FLOPPY_QUADRA:
		swim_base = 0x5001E000;
		break;
	case MAC_FLOPPY_OLD:
		swim_base = 0x50016000;
		break;
	case MAC_FLOPPY_LC:
		swim_base = 0x50F16000;
		break;
	}

	if (swim_base) {
		struct resource swim_rsrc = {
			.flags = IORESOURCE_MEM,
			.start = swim_base,
			.end   = swim_base + 0x1FFF,
		};

		platform_device_register_simple("swim", -1, &swim_rsrc, 1);
	}

	/*
	 * SCSI device(s)
	 */

	switch (macintosh_config->scsi_type) {
	case MAC_SCSI_QUADRA:
	case MAC_SCSI_QUADRA3:
		platform_device_register_simple("mac_esp", 0, NULL, 0);
		break;
	case MAC_SCSI_QUADRA2:
		platform_device_register_simple("mac_esp", 0, NULL, 0);
		if ((macintosh_config->ident == MAC_MODEL_Q900) ||
		    (macintosh_config->ident == MAC_MODEL_Q950))
			platform_device_register_simple("mac_esp", 1, NULL, 0);
		break;
	case MAC_SCSI_IIFX:
		/* Addresses from The Guide to Mac Family Hardware.
		 * $5000 8000 - $5000 9FFF: SCSI DMA
		 * $5000 A000 - $5000 BFFF: Alternate SCSI
		 * $5000 C000 - $5000 DFFF: Alternate SCSI (DMA)
		 * $5000 E000 - $5000 FFFF: Alternate SCSI (Hsk)
		 * The A/UX header file sys/uconfig.h says $50F0 8000.
		 * The "SCSI DMA" custom IC embeds the 53C80 core and
		 * supports Programmed IO, DMA and PDMA (hardware handshake).
		 */
		platform_device_register_simple("mac_scsi", 0,
			mac_scsi_iifx_rsrc, ARRAY_SIZE(mac_scsi_iifx_rsrc));
		break;
	case MAC_SCSI_DUO:
		/* Addresses from the Duo Dock II Developer Note.
		 * $FEE0 2000 - $FEE0 3FFF: normal mode
		 * $FEE0 4000 - $FEE0 5FFF: pseudo DMA without /DRQ
		 * $FEE0 6000 - $FEE0 7FFF: pseudo DMA with /DRQ
		 * The NetBSD code indicates that both 5380 chips share
		 * an IRQ (?) which would need careful handling (see mac_esp).
		 */
		platform_device_register_simple("mac_scsi", 1,
			mac_scsi_duo_rsrc, ARRAY_SIZE(mac_scsi_duo_rsrc));
		fallthrough;
	case MAC_SCSI_OLD:
		/* Addresses from Developer Notes for Duo System,
		 * PowerBook 180 & 160, 140 & 170, Macintosh IIsi
		 * and also from The Guide to Mac Family Hardware for
		 * SE/30, II, IIx, IIcx, IIci.
		 * $5000 6000 - $5000 7FFF: pseudo-DMA with /DRQ
		 * $5001 0000 - $5001 1FFF: normal mode
		 * $5001 2000 - $5001 3FFF: pseudo-DMA without /DRQ
		 * GMFH says that $5000 0000 - $50FF FFFF "wraps
		 * $5000 0000 - $5001 FFFF eight times" (!)
		 * mess.org says IIci and Color Classic do not alias
		 * I/O address space.
		 */
		platform_device_register_simple("mac_scsi", 0,
			mac_scsi_old_rsrc, ARRAY_SIZE(mac_scsi_old_rsrc));
		break;
	case MAC_SCSI_LC:
		/* Addresses from Mac LC data in Designing Cards & Drivers 3ed.
		 * Also from the Developer Notes for Classic II, LC III,
		 * Color Classic and IIvx.
		 * $50F0 6000 - $50F0 7FFF: SCSI handshake
		 * $50F1 0000 - $50F1 1FFF: SCSI
		 * $50F1 2000 - $50F1 3FFF: SCSI DMA
		 */
		platform_device_register_simple("mac_scsi", 0,
			mac_scsi_ccl_rsrc, ARRAY_SIZE(mac_scsi_ccl_rsrc));
		break;
	}

	/*
	 * IDE device
	 */

	switch (macintosh_config->ide_type) {
	case MAC_IDE_QUADRA:
		platform_device_register_resndata(NULL, "pata_platform", -1,
			mac_pata_quadra_rsrc, ARRAY_SIZE(mac_pata_quadra_rsrc),
			&mac_pata_data, sizeof(mac_pata_data));
		break;
	case MAC_IDE_PB:
		platform_device_register_resndata(NULL, "pata_platform", -1,
			mac_pata_pb_rsrc, ARRAY_SIZE(mac_pata_pb_rsrc),
			&mac_pata_data, sizeof(mac_pata_data));
		break;
	case MAC_IDE_BABOON:
		platform_device_register_resndata(NULL, "pata_platform", -1,
			mac_pata_baboon_rsrc, ARRAY_SIZE(mac_pata_baboon_rsrc),
			&mac_pata_data, sizeof(mac_pata_data));
		break;
	}

	/*
	 * Ethernet device
	 */

	if (macintosh_config->ether_type == MAC_ETHER_SONIC ||
	    macintosh_config->expansion_type == MAC_EXP_PDS_COMM)
		platform_device_register_simple("macsonic", -1, NULL, 0);

	if (macintosh_config->expansion_type == MAC_EXP_PDS ||
	    macintosh_config->expansion_type == MAC_EXP_PDS_COMM)
		platform_device_register_simple("mac89x0", -1, NULL, 0);

	if (macintosh_config->ether_type == MAC_ETHER_MACE)
		platform_device_register_simple("macmace", -1, NULL, 0);

	return 0;
}