Subject: Virtual PC diffs
To: None <port-i386@netbsd.org>
From: Peter Seebach <seebs@plethora.net>
List: port-i386
Date: 12/19/2000 23:04:15
These diffs fix the "abnormal interrupt: transmit process stopped" in de0,
and "transmit process stopped" in tlp0.  They also make a couple of
other fixes dependant on which version of Virtual PC is being run, and
move the printf of the VPC version so that it's in the dmesg output.
I haven't fixed tlp to work with VirtualPC 3, but I've added a warning
to the driver if it notices you trying to use the tlp driver on VPC3.

I would love it if these (or something similar) could get committed, so
that a future i386 snapshot could "just work" on VirtualPC.

I'd like to express my admiration for the developers at Connectix; the
"tlp0" thing is the only patch I am aware of that is still needed with VPC4,
everything else got fixed, despite the fairly sketchy reports I gave them.
Now that I've isolated the problem to a single bit (or maybe two) set in
their interrupt status register, they may even fix that one.

These diffs are against a sup a few days old.

*** ./arch/i386/i386/machdep.c.orig	Fri Aug 18 05:30:42 2000
--- ./arch/i386/i386/machdep.c	Tue Dec 19 16:08:25 2000
***************
*** 186,192 ****
  int     cpureset_delay = 2000; /* default to 2s */
  #endif
  
! 
  int	physmem;
  int	dumpmem_low;
  int	dumpmem_high;
--- 186,194 ----
  int     cpureset_delay = 2000; /* default to 2s */
  #endif
  
! #ifdef VPC_CPU
! int	cpu_is_vpc = 0;
! #endif
  int	physmem;
  int	dumpmem_low;
  int	dumpmem_high;
***************
*** 280,285 ****
--- 282,293 ----
  	printf(version);
  
  	printf("cpu0: %s\n", cpu_model);
+ #ifdef VPC_CPU
+ 	if (cpu_is_vpc) {
+ 		printf("You appear to be running on Virtual PC [version %d].\n",
+ 			cpu_is_vpc);
+ 	}
+ #endif
  
  	format_bytes(pbuf, sizeof(pbuf), ptoa(physmem));
  	printf("total memory = %s\n", pbuf);
***************
*** 762,767 ****
--- 770,786 ----
  
  	sprintf(cpu_model, "%s %s%s (%s-class)", vendorname, modifier, name,
  		classnames[class]);
+ 
+ #ifdef VPC_CPU
+ 	if (!strcmp(vendorname, "ConnectixCPU")) {
+ 		/* VPC 3 is Pentium, VPC 4 is Pentium Pro */
+ 		if (class == 2) {
+ 			cpu_is_vpc = 3;
+ 		} else {
+ 			cpu_is_vpc = 4;
+ 		}
+ 	}
+ #endif
  
  	cpu_class = class;
  
*** ./arch/i386/conf/files.i386.orig	Fri Aug 11 05:47:42 2000
--- ./arch/i386/conf/files.i386	Tue Dec 19 15:08:38 2000
***************
*** 14,20 ****
  	APM_POWER_PRINT APM_DISABLE_INTERRUPTS APM_ALLOW_BOGUS_SEGMENTS
  
  # Processor type options.
! defopt	opt_cputype.h I386_CPU I486_CPU I586_CPU I686_CPU
  
  # delay before cpu_reset() for reboot.
  defopt CPURESET_DELAY
--- 14,20 ----
  	APM_POWER_PRINT APM_DISABLE_INTERRUPTS APM_ALLOW_BOGUS_SEGMENTS
  
  # Processor type options.
! defopt	opt_cputype.h I386_CPU I486_CPU I586_CPU I686_CPU VPC_CPU
  
  # delay before cpu_reset() for reboot.
  defopt CPURESET_DELAY
*** ./arch/i386/conf/VPC.orig	Wed Sep 20 18:34:49 2000
--- ./arch/i386/conf/VPC	Tue Dec 19 16:26:13 2000
***************
*** 0 ****
--- 1,831 ----
+ #	$NetBSD: GENERIC,v 1.354.2.6 2000/08/10 23:10:28 soda Exp $
+ #
+ #	GENERIC -- everything that's currently supported
+ #
+ 
+ include "arch/i386/conf/std.i386"
+ 
+ #ident 		"GENERIC-$Revision: 1.354.2.6 $"
+ 
+ maxusers	32		# estimated number of users
+ 
+ # CPU support.  At least one is REQUIRED.
+ options 	I586_CPU
+ options 	I686_CPU
+ options 	VPC_CPU
+ 
+ # CPU-related options.
+ options 	MATH_EMULATE	# floating point emulation
+ #options 	VM86		# virtual 8086 emulation
+ options 	USER_LDT	# user-settable LDT; used by WINE
+ # eliminate delay no-ops in I/O; recommended on all but very old machines
+ options 	DUMMY_NOPS
+ 
+ # delay between "rebooting ..." message and hardware reset, in milliseconds
+ #options 	CPURESET_DELAY=2000
+ 
+ # This option allows you to force a serial console at the specified
+ # I/O address.   see console(4) for details.
+ #options 	"CONSDEVNAME=\"com\"",CONADDR=0x2f8,CONSPEED=57600
+ #	you don't want the option below ON iff you are using the
+ #	serial console option of the new boot strap code.
+ #options 	CONS_OVERRIDE	# Always use above! independent of boot info
+ 
+ # The following options override the memory sizes passed in from the boot
+ # block.  Use them *only* if the boot block is unable to determine the correct
+ # values.  Note that the BIOS may *correctly* report less than 640k of base
+ # memory if the extended BIOS data area is located at the top of base memory
+ # (as is the case on most recent systems).
+ #options 	REALBASEMEM=639		# size of base memory (in KB)
+ #options 	REALEXTMEM=15360	# size of extended memory (in KB)
+ 
+ # Standard system options
+ 
+ options 	UCONSOLE	# users can use TIOCCONS (for xconsole)
+ options 	INSECURE	# disable kernel security levels
+ 
+ options 	RTC_OFFSET=0	# hardware clock is this many mins. west of GMT
+ options 	NTP		# NTP phase/frequency locked loop
+ 
+ options 	KTRACE		# system call tracing via ktrace(1)
+ 
+ options 	SYSVMSG		# System V-like message queues
+ options 	SYSVSEM		# System V-like semaphores
+ options 	SYSVSHM		# System V-like memory sharing
+ #options 	SHMMAXPGS=1024	# 1024 pages is the default
+ 
+ options 	LKM		# loadable kernel modules
+ 
+ # Diagnostic/debugging support options
+ options 	DIAGNOSTIC	# cheap kernel consistency checks
+ options 	DEBUG		# expensive debugging checks/support
+ #options 	KMEMSTATS	# kernel memory statistics (vmstat -m)
+ options 	DDB		# in-kernel debugger
+ options 	DDB_HISTORY_SIZE=512	# enable history editing in DDB
+ #options 	KGDB		# remote debugger
+ #options 	"KGDB_DEVNAME=\"com\"",KGDBADDR=0x3f8,KGDBRATE=9600
+ #makeoptions	DEBUG="-g"	# compile full symbol table
+ 
+ # Compatibility options
+ options 	COMPAT_NOMID	# compatibility with 386BSD, BSDI, NetBSD 0.8,
+ options 	COMPAT_09	# NetBSD 0.9,
+ options 	COMPAT_10	# NetBSD 1.0,
+ options 	COMPAT_11	# NetBSD 1.1,
+ options 	COMPAT_12	# NetBSD 1.2,
+ options 	COMPAT_13	# NetBSD 1.3,
+ options 	COMPAT_14	# NetBSD 1.4,
+ options 	COMPAT_43	# and 4.3BSD
+ options 	COMPAT_386BSD_MBRPART # recognize old partition ID
+ 
+ options 	COMPAT_SVR4	# binary compatibility with SVR4
+ options 	COMPAT_IBCS2	# binary compatibility with SCO and ISC
+ options 	COMPAT_LINUX	# binary compatibility with Linux
+ options 	COMPAT_FREEBSD	# binary compatibility with FreeBSD
+ #options 	COMPAT_PECOFF   # kernel support to run Win32 apps
+ 
+ options 	COMPAT_AOUT	# binary compat for NetBSD a.out binaries
+ 
+ # File systems
+ file-system 	FFS		# UFS
+ file-system 	EXT2FS		# second extended file system (linux)
+ #file-system 	LFS		# log-structured file system
+ file-system 	MFS		# memory file system
+ file-system 	NFS		# Network File System client
+ #file-system 	NTFS		# Windows/NT file system (experimental)
+ file-system 	CD9660		# ISO 9660 + Rock Ridge file system
+ file-system 	MSDOSFS		# MS-DOS file system
+ file-system 	FDESC		# /dev/fd
+ file-system 	KERNFS		# /kern
+ file-system 	NULLFS		# loopback file system
+ file-system 	OVERLAY		# overlay file system
+ #file-system 	PORTAL		# portal filesystem (still experimental)
+ file-system 	PROCFS		# /proc
+ #file-system 	UMAPFS		# NULLFS + uid and gid remapping
+ file-system 	UNION		# union file system
+ #file-system	CODA		# Coda File System; also needs vcoda (below)
+ 
+ # File system options
+ options 	QUOTA		# UFS quotas
+ #options 	FFS_EI		# FFS Endian Independent support
+ options 	SOFTDEP         # FFS soft updates support.
+ options 	NFSSERVER	# Network File System server
+ #options 	EXT2FS_SYSTEM_FLAGS # makes ext2fs file flags (append and
+ 				# immutable) behave as system flags.
+ 
+ # Networking options
+ #options 	GATEWAY		# packet forwarding
+ options 	INET		# IP + ICMP + TCP + UDP
+ #options 	INET6		# IPV6
+ #options 	IPSEC		# IP security
+ #options 	IPSEC_ESP	# IP security (encryption part; define w/IPSEC)
+ #options 	IPSEC_DEBUG	# debug for IP security
+ #options 	MROUTING	# IP multicast routing
+ #options 	NS		# XNS
+ #options 	NSIP		# XNS tunneling over IP
+ #options 	ISO,TPIP	# OSI
+ #options 	EON		# OSI tunneling over IP
+ #options 	CCITT,LLC,HDLC	# X.25
+ options 	NETATALK	# AppleTalk networking protocols
+ options 	PPP_BSDCOMP	# BSD-Compress compression support for PPP
+ options 	PPP_DEFLATE	# Deflate compression support for PPP
+ options 	PPP_FILTER	# Active filter support for PPP (requires bpf)
+ options 	PFIL_HOOKS	# pfil(9) packet filter hooks
+ options 	IPFILTER_LOG	# ipmon(8) log support
+ 
+ # Compatibility with 4.2BSD implementation of TCP/IP.  Not recommended.
+ #options 	TCP_COMPAT_42
+ 
+ # These options enable verbose messages for several subsystems.
+ # Warning, these may compile large string tables into the kernel!
+ options 	MIIVERBOSE	# verbose PHY autoconfig messages
+ options 	PCIVERBOSE	# verbose PCI device autoconfig messages
+ #options 	PCI_CONFIG_DUMP	# verbosely dump PCI config space
+ #options 	PCMCIAVERBOSE	# verbose PCMCIA configuration messages
+ options 	SCSIVERBOSE	# human readable SCSI error messages
+ options 	USBVERBOSE	# verbose USB device autoconfig messages
+ #options 	PNPBIOSVERBOSE	# verbose PnP BIOS messages
+ #options	PNPBIOSDEBUG	# more fullsome Pnp BIOS debugging messages
+ options 	NFS_BOOT_DHCP,NFS_BOOT_BOOTPARAM
+ 
+ #
+ # wscons options
+ #
+ # builtin terminal emulations
+ #options 	WSEMUL_SUN		# sun terminal emulation
+ options 	WSEMUL_VT100		# VT100 / VT220 emulation
+ # different kernel output - see dev/wscons/wsdisplayvar.h
+ options 	WS_KERNEL_FG=WSCOL_GREEN
+ #options 	WS_KERNEL_BG=WSCOL_BLACK
+ # compatibility to other console drivers
+ options 	WSDISPLAY_COMPAT_PCVT		# emulate some ioctls
+ options 	WSDISPLAY_COMPAT_SYSCONS	# emulate some ioctls
+ options 	WSDISPLAY_COMPAT_USL		# VT handling
+ options 	WSDISPLAY_COMPAT_RAWKBD		# can get raw scancodes
+ # see dev/pckbc/wskbdmap_mfii.c for implemented layouts
+ #options 	PCKBD_LAYOUT="(KB_DE | KB_NODEAD)"
+ # allocate a number of virtual screens at autoconfiguration time
+ #options 	WSDISPLAY_DEFAULTSCREENS=4
+ # use a large software cursor that doesn't blink
+ options 	PCDISPLAY_SOFTCURSOR
+ 
+ # Kernel root file system and dump configuration.
+ config		netbsd	root on ? type ?
+ #config		netbsd	root on sd0a type ffs
+ #config		netbsd	root on ? type nfs
+ 
+ #
+ # Device configuration
+ #
+ 
+ mainbus0 at root
+ 
+ apm0	at mainbus0			# Advanced power management
+ 
+ # Tuning for power management, see apm(4) for more details.
+ #options 	APM_NO_IDLE		# Don't call BIOS CPU idle function
+ #options 	APM_V10_ONLY		# Use only the APM 1.0 calls
+ #options 	APM_NO_POWEROFF		# Don't power off on halt(8)
+ #options 	APM_POWER_PRINT		# Print stats on the console
+ #options 	APM_DISABLE_INTERRUPTS=0 # Don't disable interrupts
+ 
+ 
+ # Basic Bus Support
+ 
+ # Plug-and-Play BIOS and attached devices
+ 
+ #pnpbios*	at mainbus?
+ 
+ # mainboard audio chips
+ #ess*		at pnpbios? index ?	# ESS AudioDrive
+ #sb*		at pnpbios? index ?	# NeoMagic 256AV in sb mode
+ #wss*		at pnpbios? index ?	# NeoMagic 256AV in wss mode
+ #ym*		at pnpbios? index ?	# OPL3-SA3
+ 
+ # com port
+ # If enabled, consider changing "com0", "com1", and "com2" under "ISA Serial
+ # Interfaces" to "com*", otherwise com2 will attach at pnpbios? and there
+ # will be no com0.  A side effect is pcmcia (and other) com? previously
+ # starting at com3 may attach as com1 or com2.
+ #com*		at pnpbios? index ?	# serial ports
+ 
+ # parallel port
+ # The above "com*" comments apply, cf. "lpt0" under "ISA parallel
+ # "printer interfaces".
+ #lpt*		at pnpbios? index ?	# parallel ports
+ 
+ #pckbc*		at pnpbios? index ?	# PC keyboard/mouse controller
+ #fdc*		at pnpbios? index ?	# floppy controller
+ 
+ # IDE controller on Toshiba Portege 3000 series (crippled PCI device)
+ #pciide* at pnpbios? index ?
+ 
+ # PCI bus support
+ pci*	at mainbus? bus ?
+ pci*	at pchb? bus ?
+ pci*	at ppb? bus ?
+ 
+ # Configure PCI using BIOS information
+ #options 	PCIBIOS			# PCI BIOS support
+ #options 	PCIBIOSVERBOSE		# PCI BIOS verbose info
+ #options 	PCIBIOS_ADDR_FIXUP	# fixup PCI I/O addresses
+ #options 	PCIBIOS_BUS_FIXUP	# fixup PCI bus numbering
+ #options 	PCIBIOS_INTR_FIXUP	# fixup PCI interrupt routing
+ #options 	PCIBIOS_IRQS_HINT=0x0a00 # PCI interrupts hint. IRQ 9 or 11
+ #options 	PCIBIOS_INTR_GUESS	# see pcibios(4)
+ #options 	PCIINTR_DEBUG		# super-verbose PCI interrupt fixup
+ 
+ # PCI bridges
+ pchb*	at pci? dev ? function ?	# PCI-Host bridges
+ pcib*	at pci? dev ? function ?	# PCI-ISA bridges
+ ppb*	at pci? dev ? function ?	# PCI-PCI bridges
+ # XXX 'puc's aren't really bridges, but there's no better place for them here
+ puc*	at pci? dev ? function ?	# PCI "universal" comm. cards
+ 
+ 
+ # ISA bus support
+ isa*	at mainbus?
+ #isa*	at pceb?
+ isa*	at pcib?
+ 
+ # PCMCIA bus support
+ #pcmcia*	at pcic? controller ? socket ?
+ #pcmcia*	at tcic? controller ? socket ?
+ 
+ # ISA PCMCIA controllers
+ #pcic0	at isa? port 0x3e0 iomem 0xd0000 iosiz 0x10000
+ #pcic1	at isa? port 0x3e2 iomem 0xe0000 iosiz 0x4000
+ #tcic0	at isa? port 0x240 iomem 0xd0000 iosiz 0x10000
+ 
+ # PCI PCMCIA controllers
+ #pcic0	at pci? dev? function ?
+ 
+ # ISA Plug-and-Play bus support
+ isapnp0	at isa?
+ 
+ # ISA Plug-and-Play PCMCIA controllers
+ #pcic*	at isapnp?
+ 
+ # CardBus bridge support
+ #cbb*		at pci? dev ? function ?
+ #cardslot*	at cbb?	
+ 
+ # CardBus bus support
+ #cardbus*	at cardslot?
+ #pcmcia* 	at cardslot?
+ 
+ # Coprocessor Support
+ 
+ # Math Coprocessor support
+ npx0	at isa? port 0xf0 irq 13	# x86 math coprocessor
+ 
+ 
+ # Console Devices
+ 
+ # ISA console
+ #pc0	at isa? port 0x60 irq 1		# pccons generic PC console driver
+ # Keyboard layout configuration for pccons
+ #options 	FRENCH_KBD
+ #options 	FINNISH_KBD
+ #options 	GERMAN_KBD
+ #options 	NORWEGIAN_KBD
+ # pccons-specific options:
+ #options 	XSERVER_DDB	# PF12 gets you into DDB when X is running
+ #options 	XSERVER		# X server support
+ 
+ 
+ # wscons
+ pckbc0		at isa?			# pc keyboard controller
+ pckbd*		at pckbc?		# PC keyboard
+ # "opms" should not be enabled together with "pms" or "pmsi"
+ pms*		at pckbc?		# PS/2 mouse for wsmouse
+ pmsi*		at pckbc?		# PS/2 "Intelli"mouse for wsmouse
+ #opms*		at pckbc?		# backwards compatible PS/2 mouse
+ vga0		at isa?
+ vga*		at pci? dev ? function ?
+ pcdisplay0	at isa?			# CGA, MDA, EGA, HGA
+ wsdisplay*	at vga? console ?
+ wsdisplay*	at pcdisplay? console ?
+ wskbd* 		at pckbd? console ?
+ wsmouse*	at pms? mux 0
+ wsmouse*	at pmsi? mux 0
+ 
+ pcppi0		at isa?
+ sysbeep0	at pcppi?
+ 
+ # Serial Devices
+ 
+ # PCI serial interfaces
+ #com*	at puc? port ?			# 16x50s on "universal" comm boards
+ #cy*	at pci? dev ? function ?	# Cyclades Cyclom-Y serial boards
+ #cz*	at pci? dev ? function ?	# Cyclades-Z multi-port serial boards
+ 
+ # ISA Plug-and-Play serial interfaces
+ com*	at isapnp?			# Modems and serial boards
+ 
+ # PCMCIA serial interfaces
+ #com*	at pcmcia? function ?		# Modems and serial cards
+ 
+ #pcmcom*	at pcmcia? function ?		# PCMCIA multi-port serial cards
+ #com*	at pcmcom? slave ?		# ...and the slave devices
+ 
+ # CardBus serial interfaces
+ #com*	at cardbus? function ?		# Modems and serial cards
+ 
+ # ISA serial interfaces
+ #options 	COM_HAYESP		# adds Hayes ESP serial board support
+ com0	at isa? port 0x3f8 irq 4	# Standard PC serial ports
+ com1	at isa? port 0x2f8 irq 3
+ com2	at isa? port 0x3e8 irq 5
+ #com3	at isa? port 0x2e8 irq 9
+ #ast0	at isa? port 0x1a0 irq 5	# AST 4-port serial cards
+ #com*	at ast? slave ?
+ #boca0	at isa? port 0x100 irq 5	# BOCA 8-port serial cards
+ #boca0	at isa? port 0x100 irq 5	# BOCA 16-port serial cards (BB2016)
+ #boca1	at isa? port 0x140 irq 5	# this line is also needed for BB2016
+ #com*	at boca? slave ?
+ #tcom0	at isa? port 0x100 irq 7	# TC-800 8-port serial cards
+ #com*	at tcom? slave ?
+ #rtfps0	at isa? port 0x1230 irq 10	# RT 4-port serial cards
+ #com*	at rtfps? slave ?
+ #cy0	at isa? iomem 0xd4000 irq 12	# Cyclades serial cards
+ #addcom0 at isa? port 0x108 irq 5	# Addonics FlexPort 8S
+ #com*	at addcom? slave ?
+ 
+ # Parallel Printer Interfaces
+ 
+ # PCI parallel printer interfaces
+ #lpt*	at puc? port ?			# || ports on "universal" comm boards
+ 
+ # ISA parallel printer interfaces
+ lpt0	at isa? port 0x378 irq 7	# standard PC parallel ports
+ #lpt1	at isa? port 0x278
+ #lpt2	at isa? port 0x3bc
+ 
+ # LM7[89] and compatible hardware monitors
+ #lm0	at isa?	port 0x290		# other common ports: 0x280, 0x310
+ 
+ # VIA VT82C686A hardware monitor
+ #viapm*	at pci? dev ? function ?
+ #viaenv* at viapm?
+ 
+ # SCSI Controllers and Devices
+ 
+ # PCI SCSI controllers
+ #adv*	at pci? dev ? function ?	# AdvanSys 1200[A,B], 9xx[U,UA] SCSI
+ #adw*	at pci? dev ? function ?	# AdvanSys 9x0UW[D], 3940U[2,3]W SCSI
+ #ahc*	at pci? dev ? function ?	# Adaptec [23]94x, aic78x0 SCSI
+ #bha*	at pci? dev ? function ?	# BusLogic 9xx SCSI
+ #dpt*	at pci? dev ? function ?	# DPT SmartCache/SmartRAID
+ #isp*	at pci? dev ? function ?	# Qlogic ISP [12]0x0 SCSI/FibreChannel
+ #ncr*	at pci? dev ? function ?	# NCR 53c8xx SCSI (old driver)
+ #siop*	at pci? dev ? function ?	# Symbios 53c8xx SCSI
+ #pcscp*	at pci? dev ? function ?	# AMD 53c974 PCscsi-PCI SCSI
+ 
+ 
+ # PCMCIA SCSI controllers
+ #aic*	at pcmcia? function ?		# Adaptec APA-1460 SCSI
+ #esp*	at pcmcia? function ?		# Qlogic ESP406/FAS408 SCSI
+ 
+ # ISA Plug-and-Play SCSI controllers
+ #aha*	at isapnp? 			# Adaptec AHA-154[02
+ #aic*	at isapnp?			# Adaptec AHA-1520B
+ 
+ # ISA SCSI controllers
+ #adv0	at isa? port ? irq ? drq ?	# AdvanSys APB-514[02]
+ #aha0	at isa? port 0x330 irq ? drq ?	# Adaptec 154[02] SCSI
+ #aha1	at isa? port 0x334 irq ? drq ?
+ #ahc0	at isa? port ? irq ?		# Adaptec 284x SCSI
+ #aic0	at isa? port 0x340 irq 11	# Adaptec 152[02] SCSI
+ #bha0	at isa? port 0x330 irq ? drq ?	# BusLogic [457]4X SCSI
+ #bha1	at isa? port 0x334 irq ? drq ?
+ # The "nca" and "dpt" probes might give false hits or hang your machine.
+ #dpt0	at isa? port 0x170 irq ? drq ?	# DPT SmartCache/SmartRAID
+ #nca0	at isa? port 0x360 irq 15	# Port-mapped NCR 53C80 contoller
+ #nca1	at isa? iomem 0xd8000 irq 5	# Memory-mapped controller (T128, etc.)
+ #sea0	at isa? iomem 0xc8000 irq 5	# Seagate/Future Domain SCSI
+ #uha0	at isa? port 0x330 irq ? drq ?	# UltraStor [13]4f SCSI
+ #uha1	at isa? port 0x340 irq ? drq ?
+ #wds0	at isa? port 0x350 irq 15 drq 6	# WD7000 and TMC-7000 controllers
+ #wds1	at isa? port 0x358 irq 11 drq 5
+ 
+ # CardBus SCSI cards
+ #ahc*	at cardbus? dev ? function ?	# Adaptec ADP-1480
+ 
+ # SCSI bus support
+ #scsibus* at adv?
+ #scsibus* at adw?
+ #scsibus* at aha?
+ #scsibus* at ahb?
+ #scsibus* at ahc?
+ #scsibus* at aic?
+ #scsibus* at bha?
+ #scsibus* at dpt?
+ #scsibus* at esp?
+ #scsibus* at isp?
+ #scsibus* at nca?
+ #scsibus* at ncr?
+ #scsibus* at pcscp?
+ #scsibus* at sea?
+ #scsibus* at siop?
+ #scsibus* at uha?
+ #scsibus* at wds?
+ 
+ # SCSI devices
+ sd*	at scsibus? target ? lun ?	# SCSI disk drives
+ st*	at scsibus? target ? lun ?	# SCSI tape drives
+ cd*	at scsibus? target ? lun ?	# SCSI CD-ROM drives
+ ch*	at scsibus? target ? lun ?	# SCSI autochangers
+ ses*	at scsibus? target ? lun ?	# SCSI Enclosure Services devices
+ ss*	at scsibus? target ? lun ?	# SCSI scanners
+ uk*	at scsibus? target ? lun ?	# SCSI unknown
+ 
+ # RAID controllers and devices
+ #cac*	at pci? dev ? function ?	# Compaq array controller
+ #ca*	at cac? unit ?			# Compaq array disk device
+ 
+ # IDE and related devices
+ # PCI IDE controllers - see pciide(4) for supported hardware.
+ # The 0x0001 flag force the driver to use DMA, even if the driver doesn't know
+ # how to set up DMA modes for this chip. This may work, or may cause
+ # a machine hang with some controllers.
+ pciide* at pci? dev ? function ? flags 0x0000
+ 
+ # ISA Plug-and-Play IDE controllers
+ wdc*	at isapnp? 
+ 
+ # PCMCIA IDE controllers
+ #wdc*	at pcmcia? function ?
+ 
+ # ISA ST506, ESDI, and IDE controllers
+ # Use flags 0x01 if you want to try to use 32bits data I/O (the driver will
+ # fall back to 16bits I/O if 32bits I/O are not functional).
+ # Some controllers pass the initial 32bit test, but will fail later.
+ wdc0	at isa? port 0x1f0 irq 14 flags 0x00
+ wdc1	at isa? port 0x170 irq 15 flags 0x00
+ 
+ # IDE drives
+ # Flags are used only with controllers that support DMA operations
+ # and mode settings (e.g. some pciide controllers)
+ # The lowest order four bits (rightmost digit) of the flags define the PIO
+ # mode to use, the next set of four bits the DMA mode and the third set the
+ # UltraDMA mode. For each set of four bits, the 3 lower bits define the mode
+ # to use, and the last bit must be 1 for this setting to be used.
+ # For DMA and UDMA, 0xf (1111) means 'disable'.
+ # 0x0fac means 'use PIO mode 4, DMA mode 2, disable UltraDMA'.
+ # (0xc=1100, 0xa=1010, 0xf=1111)
+ # 0x0000 means "use whatever the drive claims to support".
+ wd*	at wdc? channel ? drive ? flags 0x0000
+ wd*	at pciide? channel ? drive ? flags 0x0000
+ 
+ # ATAPI bus support
+ atapibus* at wdc? channel ?
+ atapibus* at pciide? channel ?
+ 
+ # ATAPI devices
+ # flags have the same meaning as for IDE drives.
+ cd*	at atapibus? drive ? flags 0x0000	# ATAPI CD-ROM drives
+ sd*	at atapibus? drive ? flags 0x0000	# ATAPI disk drives
+ uk*	at atapibus? drive ? flags 0x0000	# ATAPI unknown
+ 
+ 
+ # Miscellaneous mass storage devices
+ 
+ # ISA floppy
+ fdc0	at isa? port 0x3f0 irq 6 drq 2	# standard PC floppy controllers
+ #fdc1	at isa? port 0x370 irq ? drq ?
+ fd*	at fdc? drive ?			# the drives themselves
+ # some machines need you to do this instead of fd*
+ #fd0	at fdc0 drive 0
+ 
+ # ISA CD-ROM devices
+ #mcd0	at isa? port 0x300 irq 10	# Mitsumi CD-ROM drives
+ 
+ # ISA tape devices
+ # note: the wt driver conflicts unpleasantly with SMC boards at the
+ # same I/O address. The probe reprograms their EEPROMs. Don't
+ # uncomment it unless you are actually using it.
+ #wt0	at isa? port 0x308 irq 5 drq 1	# Archive and Wangtek QIC tape drives
+ 
+ 
+ # Network Interfaces
+ 
+ # PCI network interfaces
+ de*	at pci? dev ? function ?	# DEC 21x4x-based Ethernet
+ #en*	at pci? dev ? function ?	# ENI/Adaptec ATM
+ #ep*	at pci? dev ? function ?	# 3Com 3c59x
+ #ex*	at pci? dev ? function ?	# 3Com 90x[B]
+ #epic*	at pci? dev ? function ?	# SMC EPIC/100 Ethernet
+ #esh*	at pci? dev ? function ?	# Essential HIPPI card
+ #fpa*	at pci? dev ? function ?	# DEC DEFPA FDDI
+ #fxp*	at pci? dev ? function ?	# Intel EtherExpress PRO 10+/100B
+ #le*	at pci? dev ? function ?	# PCnet-PCI Ethernet
+ #lmc*	at pci? dev ? function ?	# Lan Media Corp SSI/HSSI/DS3
+ #ne*	at pci? dev ? function ?	# NE2000-compatible Ethernet
+ #ntwoc*	at pci? dev ? function ?	# Riscom/N2 PCI Sync Serial
+ #rtk*	at pci? dev ? function ?	# Realtek 8129/8139
+ #sip*	at pci? dev ? function ?	# SiS 900 Ethernet
+ #ti*	at pci? dev ? function ?	# Alteon ACEnic gigabit Ethernet
+ #tl*	at pci? dev ? function ?	# ThunderLAN-based Ethernet
+ tlp*	at pci? dev ? function ?	# DECchip 21x4x (and clones) Ethernet
+ #options 	TLP_MATCH_21040
+ #options 	TLP_MATCH_21041
+ #options 	TLP_MATCH_21140
+ #options 	TLP_MATCH_21142
+ #vr*	at pci? dev ? function ?	# VIA Rhine Fast Ethernet
+ 
+ 
+ # ISA Plug-and-Play network interfaces
+ #ep*	at isapnp?			# 3Com 3c509 Ethernet
+ #ne*	at isapnp?			# NE2000-compatible Ethernet
+ #tr*	at isapnp?			# IBM/3COM TROPIC Token-Ring
+ 
+ # PCMCIA network interfaces
+ #awi*	at pcmcia? function ?		# BayStack 650/660 (802.11FH/DS)
+ #cnw*	at pcmcia? function ?		# Xircom/Netwave AirSurfer
+ #ep*	at pcmcia? function ?		# 3Com 3c589 and 3c562 Ethernet
+ #mbe*	at pcmcia? function ?		# MB8696x based Ethernet
+ #ne*	at pcmcia? function ?		# NE2000-compatible Ethernet
+ #ray*	at pcmcia? function ?		# Raytheon Raylink (802.11)
+ #sm*	at pcmcia? function ?		# Megahertz Ethernet
+ #wi*	at pcmcia? function ?		# Lucent WaveLan IEEE (802.11)
+ #xi*	at pcmcia? function ?		# Xircom CreditCard Ethernet
+ 
+ #mhzc*	at pcmcia? function ?		# Megahertz Ethernet/Modem combo cards
+ #com*	at mhzc?
+ #sm*	at mhzc?
+ 
+ # ISA network interfaces
+ #ate0	at isa? port 0x2a0 irq ?		# AT1700
+ #cs0	at isa? port 0x300 iomem ? irq ? drq ?	# CS8900 Ethernet
+ #ec0	at isa? port 0x250 iomem 0xd8000 irq 9	# 3Com 3c503 Ethernet
+ #eg0	at isa? port 0x280 irq 9		# 3C505 ethernet cards
+ #el0	at isa? port 0x300 irq 9		# 3C501 ethernet cards
+ #ep*	at isa? port ? irq ?			# 3C509 ethernet cards
+ #ef0	at isa? port 0x360 iomem 0xd0000 irq 7	# 3C507
+ #ai0	at isa? port 0x360 iomem 0xd0000 irq 7	# StarLAN
+ #fmv0	at isa? port 0x2a0 irq ?		# FMV-180 series
+ #ix0	at isa? port 0x300 irq 10		# EtherExpress/16
+ #iy0	at isa? port 0x360 irq ?		# EtherExpress PRO 10 ISA
+ #lc0	at isa? port 0x320 iomem ? irq ?	# DEC EtherWORKS III (LEMAC)
+ ##depca0	at isa? port 0x300 iomem 0xc8000 iosiz 0x8000 irq 5	# DEPCA
+ ##le*	at depca?
+ #nele0	at isa? port 0x320 irq 9 drq 7		# NE2100
+ #le*	at nele?
+ ##ntwoc0	at isa? port 0x300 irq 5 iomem 0xc8000 flags 1	# Riscom/N2 sync serial
+ #bicc0	at isa? port 0x320 irq 10 drq 7		# BICC IsoLan
+ #le*	at bicc?
+ #ne0	at isa? port 0x280 irq 9		# NE[12]000 ethernet cards
+ #ne1	at isa? port 0x300 irq 10
+ #sm0	at isa? port 0x300 irq 10		# SMC91C9x Ethernet
+ #tr0	at isa? port 0xa20 iomem 0xd8000 irq ?  # IBM TROPIC based Token-Ring
+ #tr1	at isa? port 0xa24 iomem 0xd0000 irq ?  # IBM TROPIC based Token-Ring
+ #tr*	at isa? port ? irq ?			# 3COM TROPIC based Token-Ring
+ #we0	at isa? port 0x280 iomem 0xd0000 irq 9	# WD/SMC Ethernet
+ #we1	at isa? port 0x300 iomem 0xcc000 irq 10
+ 
+ # CardBus network cards
+ #ex*	at cardbus? dev ? function ?	# 3Com 3C575TX
+ #fxp*	at cardbus? dev ? function ?	# Intel i8255x
+ #rtk*	at cardbus? dev ? function ?	# Realtek 8129/8139
+ #tlp*	at cardbus? dev ? function ?	# DECchip 21143
+ 
+ # MII/PHY support
+ #dmphy*	at mii? phy ?			# Davicom DM9101 PHYs
+ #exphy*	at mii? phy ?			# 3Com internal PHYs
+ #icsphy*	at mii? phy ?			# Integrated Circuit Systems ICS1890
+ #inphy*	at mii? phy ?			# Intel 82555 PHYs
+ #iophy*	at mii? phy ?			# Intel 82553 PHYs
+ #lxtphy*	at mii? phy ?			# Level One LXT-970 PHYs
+ #nsphy*	at mii? phy ?			# NS83840 PHYs
+ #nsphyter* at mii? phy ?			# NS83843 PHYs
+ #qsphy*	at mii? phy ?			# Quality Semiconductor QS6612 PHYs
+ #sqphy*	at mii? phy ?			# Seeq 80220/80221/80223 PHYs
+ #tlphy*	at mii? phy ?			# ThunderLAN PHYs
+ #tqphy*	at mii? phy ?			# TDK Semiconductor PHYs
+ #ukphy*	at mii? phy ?			# generic unknown PHYs
+ 
+ # USB Controller and Devices
+ 
+ # PCI USB controllers
+ ohci*	at pci?	dev ? function ?	# Open Host Controller
+ uhci*	at pci?	dev ? function ?	# Universal Host Controller (Intel)
+ 
+ # CardBus USB controllers
+ #ohci*	at cardbus? dev ? function ?	# Open Host Controller
+ 
+ # USB bus support
+ usb*	at ohci?
+ usb*	at uhci?
+ 
+ # USB Hubs
+ uhub*	at usb?
+ uhub*	at uhub? port ? configuration ? interface ?
+ 
+ # USB Mice
+ ums*	at uhub? port ? configuration ? interface ?
+ wsmouse*	at ums? mux 0
+ 
+ # USB Keyboards
+ ukbd*	at uhub? port ? configuration ? interface ?
+ wskbd*	at ukbd? console ? mux 1
+ 
+ # USB Generic HID devices
+ uhid*	at uhub? port ? configuration ? interface ?
+ 
+ # USB Printer
+ ulpt*	at uhub? port ? configuration ? interface ?
+ 
+ # USB Modem
+ umodem*	at uhub? port ? configuration ?
+ ucom*	at umodem?
+ 
+ # USB Mass Storage
+ umass*	at uhub? port ? configuration ? interface ?
+ atapibus* at umass? channel ?
+ scsibus* at umass? channel ?
+ 
+ # USB audio
+ uaudio*	at uhub? port ? configuration ?
+ 
+ # USB Ethernet adapters
+ aue*	at uhub? port ?		# ADMtek AN986 Pegasus based adapters
+ cue*	at uhub? port ?		# CATC USB-EL1201A based adapters
+ kue*	at uhub? port ?		# Kawasaki LSI KL5KUSB101B based adapters
+ 
+ # Prolofic PL2301/PL2302 host-to-host adapter
+ upl*	at uhub? port ?
+ 
+ # Serial adapters
+ # FTDI FT8U100AX serial adapter
+ #uftdi*	at uhub? port ?
+ #ucom*	at uftdi? portno ?
+ 
+ # Diamond Multimedia Rio 500
+ urio*	at uhub? port ?
+ 
+ # USB Handspring Visor
+ uvisor*	at uhub? port ?
+ ucom*	at uvisor?
+ 
+ # USB Generic driver
+ ugen*	at uhub? port ?
+ 
+ # Audio Devices
+ 
+ # PCI audio devices
+ #auvia*	at pci? dev ? function ?	# VIA VT82C686A integrated AC'97 Audio
+ #clcs*	at pci? dev ? function ?	# Cirrus Logic CS4280
+ #cmpci*	at pci? dev ? function ?	# C-Media CMI8338/8738
+ #eap*	at pci? dev ? function ?	# Ensoniq AudioPCI
+ #eso*	at pci? dev ? function ?	# ESS Solo-1 PCI AudioDrive
+ #fms*	at pci? dev ? function ?	# Forte Media FM801
+ #sv*	at pci? dev ? function ?	# S3 SonicVibes
+ 
+ # ISA Plug-and-Play audio devices
+ #ess*	at isapnp?			# ESS Tech ES1887, ES1888, ES888 audio
+ #guspnp*	at isapnp?			# Gravis Ultra Sound PnP audio
+ #sb*	at isapnp?			# SoundBlaster-compatible audio
+ #wss*	at isapnp?			# Windows Sound System
+ #ym*	at isapnp?			# Yamaha OPL3-SA3 audio
+ 
+ # ISA audio devices
+ # the "aria" probe might give false hits
+ #aria0	at isa? port 0x290 irq 10 		# Aria
+ #ess0	at isa? port 0x220 irq 5 drq 1 drq2 5	# ESS 18XX
+ #gus0	at isa? port 0x220 irq 7 drq 1 drq2 6	# Gravis Ultra Sound
+ #pas0	at isa? port 0x220 irq 7 drq 1		# ProAudio Spectrum
+ #pss0	at isa? port 0x220 irq 7 drq 6  	# Personal Sound System
+ #sp0	at pss0 port 0x530 irq 10 drq 0		# 	sound port driver
+ sb0	at isa? port 0x220 irq 5 drq 1 drq2 5	# SoundBlaster
+ #wss0	at isa? port 0x530 irq 10 drq 0	drq2 1	# Windows Sound System
+ 
+ #cms0	at isa? port 0x220			# Creative Music System
+ 
+ # OPL[23] FM synthesizers
+ #opl0	at isa? port 0x388	# use only if not attached to sound card
+ #opl*	at eso?
+ #opl*	at ess?
+ #opl*	at fms?
+ opl*	at sb?
+ #opl*	at sv?
+ #opl*	at wss?
+ #opl*	at ym?
+ 
+ # Audio support
+ #audio*	at aria?
+ #audio*	at auvia?
+ #audio*	at clcs?
+ #audio*	at cmpci?
+ #audio*	at eap?
+ #audio*	at eso?
+ #audio*	at ess?
+ #audio*	at fms?
+ #audio*	at gus?
+ #audio*	at guspnp?
+ #audio*	at pas?
+ audio*	at sb?
+ #audio*	at sp?
+ #audio*	at sv?
+ audio*	at uaudio?
+ #audio*	at wss?
+ #audio*	at ym?
+ 
+ # MPU 401 UARTs
+ #mpu*	at isa? port 0x330 irq 9        # MPU401 or compatible card
+ #mpu*	at eso?
+ #mpu*	at fms?
+ mpu*	at sb?
+ #mpu*	at ym?
+ 
+ # MIDI support
+ #midi*	at clcs?		# Cirrus Logic CS4280 MIDI port
+ ##midi*	at cms?			# Creative Music System
+ #midi*	at eap?			# 137[01] MIDI port
+ #midi*	at mpu?			# MPU 401
+ #midi*	at opl?			# OPL FM synth
+ #midi*	at pcppi?		# MIDI interface to the PC speaker
+ midi*	at sb?			# SB1 MIDI port
+ 
+ # The spkr driver provides a simple tone interface to the built in speaker.
+ #spkr0	at pcppi?		# PC speaker
+ 
+ # TV cards
+ 
+ # Brooktree 848/849/878/879 based TV cards
+ #bktr* at pci? dev ? function ?
+ 
+ # Mice
+ 
+ # ISA busmice
+ #lms0	at isa? port 0x23c irq 5	# Logitech bus mouse
+ #lms1	at isa? port 0x238 irq 5
+ #mms0	at isa? port 0x23c irq 5	# Microsoft InPort mouse
+ #mms1	at isa? port 0x238 irq 5
+ #wsmouse*	at lms? mux 0
+ #wsmouse*	at mms? mux 0
+ # backwards compatible versions
+ #olms0	at isa? port 0x23c irq 5	# Logitech bus mouse
+ #olms1	at isa? port 0x238 irq 5
+ #omms0	at isa? port 0x23c irq 5	# Microsoft InPort mouse
+ #omms1	at isa? port 0x238 irq 5
+ #opms0	at pc? irq 12		# PS/2 auxiliary port mouse
+ 
+ 
+ # Joysticks
+ 
+ # ISA Plug-and-Play joysticks
+ #joy*	at isapnp?			# Game ports (usually on audio cards)
+ 
+ # PCI joysticks
+ #joy*	at pci?				# Game ports (usually on audio cards)
+ 
+ # ISA joysticks. Probe is a little strange; add only if you have one.
+ #joy0	at isa? port 0x201
+ 
+ 
+ # Miscellaneous Devices
+ 
+ # Planetconnect Satellite receiver driver.
+ #satlink0 at isa? port 0x300 drq 1
+ 
+ 
+ # Pull in optional local configuration
+ include	"arch/i386/conf/GENERIC.local"
+ 
+ 
+ # Pseudo-Devices
+ 
+ # disk/mass storage pseudo-devices
+ pseudo-device	ccd		4	# concatenated/striped disk devices
+ #pseudo-device	raid		4	# RAIDframe disk driver
+ #options 	RAID_AUTOCONFIG		# auto-configuration of RAID components
+ pseudo-device	md		1	# memory disk device (ramdisk)
+ pseudo-device	vnd		4	# disk-like interface to files
+ 
+ # network pseudo-devices
+ pseudo-device	bpfilter	8	# Berkeley packet filter
+ pseudo-device	ipfilter		# IP filter (firewall) and NAT
+ pseudo-device	loop			# network loopback
+ pseudo-device	ppp		2	# Point-to-Point Protocol
+ pseudo-device	sl		2	# Serial Line IP
+ pseudo-device	strip		2	# Starmode Radio IP (Metricom)
+ pseudo-device	tun		2	# network tunneling over tty
+ pseudo-device	gre		2	# generic L3 over IP tunnel
+ pseudo-device	ipip		2	# IP Encapsulation within IP (RFC 2003)
+ pseudo-device	gif		4	# IPv[46] over IPv[46] tunnel (RFC1933)
+ #pseudo-device	faith		1	# IPv[46] tcp relay translation i/f
+ #pseudo-device	stf		1	# 6to4 IPv6 over IPv4 encapsulation
+ 
+ # miscellaneous pseudo-devices
+ pseudo-device	pty		64	# pseudo-terminals
+ pseudo-device	tb		1	# tablet line discipline
+ pseudo-device	sequencer	1	# MIDI sequencer
+ # rnd works; RND_COM does not on port i386 yet.
+ pseudo-device	rnd			# /dev/random and in-kernel generator
+ #options 	RND_COM			# use "com" randomness as well (BROKEN)
+ 
+ # a pseudo device needed for Coda	# also needs CODA (above)
+ #pseudo-device	vcoda		4	# coda minicache <-> venus comm.
+ 
+ # mouse & keyboard multiplexor pseudo-devices
+ pseudo-device	wsmux		2
*** ./arch/i386/conf/GENERIC.orig	Sat Sep  2 12:14:17 2000
--- ./arch/i386/conf/GENERIC	Thu Sep 21 05:53:53 2000
***************
*** 1,11 ****
! #	$NetBSD: GENERIC,v 1.354.2.6 2000/08/10 23:10:28 soda Exp $
  #
  #	GENERIC -- everything that's currently supported
  #
  
  include "arch/i386/conf/std.i386"
  
! #ident 		"GENERIC-$Revision: 1.354.2.6 $"
  
  maxusers	32		# estimated number of users
  
--- 1,11 ----
! #	$NetBSD: GENERIC,v 1.354.2.8 2000/09/20 18:26:06 thorpej Exp $
  #
  #	GENERIC -- everything that's currently supported
  #
  
  include "arch/i386/conf/std.i386"
  
! #ident 		"GENERIC-$Revision: 1.354.2.8 $"
  
  maxusers	32		# estimated number of users
  
***************
*** 17,23 ****
  
  # CPU-related options.
  options 	MATH_EMULATE	# floating point emulation
! #options 	VM86		# virtual 8086 emulation
  options 	USER_LDT	# user-settable LDT; used by WINE
  # eliminate delay no-ops in I/O; recommended on all but very old machines
  #options 	DUMMY_NOPS
--- 17,23 ----
  
  # CPU-related options.
  options 	MATH_EMULATE	# floating point emulation
! options 	VM86		# virtual 8086 emulation
  options 	USER_LDT	# user-settable LDT; used by WINE
  # eliminate delay no-ops in I/O; recommended on all but very old machines
  #options 	DUMMY_NOPS
***************
*** 83,90 ****
  options 	COMPAT_LINUX	# binary compatibility with Linux
  options 	COMPAT_FREEBSD	# binary compatibility with FreeBSD
  #options 	COMPAT_PECOFF   # kernel support to run Win32 apps
- 
- options 	COMPAT_AOUT	# binary compat for NetBSD a.out binaries
  
  # File systems
  file-system 	FFS		# UFS
--- 83,88 ----
*** ./arch/i386/include/cpu.h.orig	Mon Jun  5 05:21:15 2000
--- ./arch/i386/include/cpu.h	Tue Dec 19 15:08:38 2000
***************
*** 146,151 ****
--- 146,152 ----
  extern int cpu_class;
  extern int cpu_feature;
  extern int cpu_id;
+ extern int cpu_is_vpc;
  extern char cpu_vendor[];
  extern int cpuid_level;
  extern struct cpu_nocpuid_nameclass i386_nocpuid_cpus[];
*** ./arch/i386/isa/npx.c.orig	Fri Jun 16 05:13:40 2000
--- ./arch/i386/isa/npx.c	Tue Dec 19 15:32:14 2000
***************
*** 201,206 ****
--- 201,211 ----
  				 */
  				rv = NPX_INTERRUPT;
  			} else {
+ #ifdef VPC_CPU
+ 				if (cpu_is_vpc == 3)
+ 					rv = NPX_EXCEPTION;
+ 				else
+ #endif
  				/*
  				 * Worse, even IRQ13 is broken.  Use emulator.
  				 */
*** ./arch/i386/pci/pci_machdep.c.orig	Fri Aug 11 05:48:02 2000
--- ./arch/i386/pci/pci_machdep.c	Tue Dec 19 15:32:39 2000
***************
*** 79,84 ****
--- 79,86 ----
   * as defined section 3.6.4.1, `Generating Configuration Cycles'.
   */
  
+ #include <opt_cputype.h>
+ 
  #include <sys/types.h>
  #include <sys/param.h>
  #include <sys/time.h>
***************
*** 204,209 ****
--- 206,215 ----
  {
  	pcitag_t tag;
  
+ #ifdef VPC_CPU
+ 	if (cpu_is_vpc == 3)
+ 		pci_mode = 1;
+ #endif
  #ifndef PCI_CONF_MODE
  	switch (pci_mode) {
  	case 1:
*** ./dev/ic/pckbc.c.orig	Fri Jun  9 05:14:49 2000
--- ./dev/ic/pckbc.c	Tue Dec 19 15:33:09 2000
***************
*** 47,52 ****
--- 47,53 ----
  #include <dev/ic/i8042reg.h>
  #include <dev/ic/pckbcvar.h>
  
+ #include <opt_cputype.h>	/* VPC_CPU hacks */
  #include "rnd.h"
  #include "locators.h"
  
***************
*** 363,369 ****
  		return;
  	res = pckbc_poll_data1(iot, ioh_d, ioh_c, PCKBC_KBD_SLOT, 0);
  
! 	if (res == 0 || res == 0xfa || res == 0x01) {
  #ifdef PCKBCDEBUG
  		if (res != 0)
  			printf("kbc: returned %x on aux slot test\n", res);
--- 364,374 ----
  		return;
  	res = pckbc_poll_data1(iot, ioh_d, ioh_c, PCKBC_KBD_SLOT, 0);
  
! 	if (res == 0 || res == 0xfa || res == 0x01
! #if VPC_CPU
! 	|| (res == 0xff && (cpu_is_vpc == 3))
! #endif
! 	    ) {
  #ifdef PCKBCDEBUG
  		if (res != 0)
  			printf("kbc: returned %x on aux slot test\n", res);
*** ./dev/ic/tulip.c.orig	Tue Dec 19 15:16:02 2000
--- ./dev/ic/tulip.c	Tue Dec 19 15:58:12 2000
***************
*** 234,240 ****
  		sc->sc_txth = tlp_10_100_txthresh_tab;
  		break;
  	}
- 	printf("tlp: chip %d\n", sc->sc_chip);
  
  	/*
  	 * Setup the filter setup function.
--- 234,239 ----
***************
*** 1213,1218 ****
--- 1212,1221 ----
  			}
  		}
  
+ #ifdef VPC_CPU
+ 		if (cpu_is_vpc)
+ 			status &= ~STATUS_TPS;
+ #endif
  		if (status & (STATUS_TPS|STATUS_RPS)) {
  			if (status & STATUS_TPS)
  				printf("%s: transmit process stopped\n",
***************
*** 1271,1277 ****
  	case TULIP_CHIP_DM9102A:
  		TULIP_WRITE(sc, CSR_INTEN, sc->sc_inten);
  		break;
- 
  	default:
  		/* Nothing. */
  	}
--- 1274,1279 ----
***************
*** 1850,1856 ****
  		 */
  		sc->sc_inten &= ~(STATUS_WINB_REI|STATUS_RWT);
  		break;
! 
  	default:
  		/* Nothing. */
  	}
--- 1852,1864 ----
  		 */
  		sc->sc_inten &= ~(STATUS_WINB_REI|STATUS_RWT);
  		break;
! #ifdef VPC_CPU
! 	case TULIP_CHIP_VPC:
! 		/* the emulated card sends this after every transmit
! 		 * completes! */
! 		sc->sc_inten &= ~(STATUS_TPS);
! 		break;
! #endif
  	default:
  		/* Nothing. */
  	}
*** ./dev/ic/tulipvar.h.orig	Wed Oct 18 05:29:10 2000
--- ./dev/ic/tulipvar.h	Tue Dec 19 15:34:50 2000
***************
*** 152,157 ****
--- 152,160 ----
  	TULIP_CHIP_AX88140   = 21,	/* ASIX AX88140 */
  	TULIP_CHIP_AX88141   = 22,	/* ASIX AX88141 */
  	TULIP_CHIP_X3201_3   = 23,	/* Xircom X3201-3 */
+ #ifdef VPC_CPU
+ 	TULIP_CHIP_VPC       = 24,	/* VirtualPC emulated DEC 21041 */
+ #endif
  } tulip_chip_t;
  
  #define	TULIP_CHIP_NAMES						\
***************
*** 180,185 ****
--- 183,189 ----
  	"ASIX AX88140",							\
  	"ASIX AX88141",							\
  	"Xircom X3201-3",						\
+ 	"Connectix VPC",						\
  }
  
  struct tulip_softc;
*** ./dev/pci/if_de.c.orig	Thu Mar 23 06:33:53 2000
--- ./dev/pci/if_de.c	Tue Dec 19 16:57:46 2000
***************
*** 195,200 ****
--- 195,204 ----
  static int tulip_mii_map_abilities(tulip_softc_t * const sc, unsigned abilities);
  static tulip_media_t tulip_mii_phy_readspecific(tulip_softc_t * const sc);
  static int tulip_srom_decode(tulip_softc_t * const sc);
+ #include <opt_cputype.h>
+ #ifdef VPC_CPU
+ static void tulip_initring(tulip_softc_t * const sc, tulip_ringinfo_t * const ri, tulip_desc_t *descs, int ndescs);
+ #endif
  #if defined(IFM_ETHER)
  static int tulip_ifmedia_change(struct ifnet * const ifp);
  static void tulip_ifmedia_status(struct ifnet * const ifp, struct ifmediareq *req);
***************
*** 3998,4003 ****
--- 4002,4012 ----
      only_once = 1;
  #endif
  
+ #ifdef VPC_CPU
+     if (cpu_is_vpc == 3)
+ 	TULIP_CSR_WRITE(sc, csr_intr, 0);
+ #endif
+ 
      while ((csr = TULIP_CSR_READ(sc, csr_status)) & sc->tulip_intrmask) {
  #if defined(__NetBSD__) && !defined(TULIP_USE_SOFTINTR)
          if (only_once == 1) {
***************
*** 4065,4070 ****
--- 4074,4089 ----
  		TULIP_CSR_WRITE(sc, csr_command, sc->tulip_cmdmode);
  	    }
  	}
+ #ifdef VPC_CPU
+ 	if (cpu_is_vpc) {
+             if (csr & TULIP_STS_TXINTR)
+                 tulip_tx_intr(sc);
+ 	    /* VirtualPC seems to spuriously set this bit. */
+ 	    if (csr & TULIP_STS_TXSTOPPED) {
+                 csr &= ~(TULIP_STS_TXSTOPPED | TULIP_STS_ABNRMLINTR);
+ 	    }
+ 	}
+ #endif
  	if (csr & TULIP_STS_ABNRMLINTR) {
  	    u_int32_t tmp = csr & sc->tulip_intrmask
  		& ~(TULIP_STS_NORMALINTR|TULIP_STS_ABNRMLINTR);
***************
*** 4091,4096 ****
--- 4110,4121 ----
  		tulip_ifstart(&sc->tulip_if);
  	}
      }
+ #ifdef VPC_CPU
+     if (cpu_is_vpc == 3) {
+         sc->tulip_intrmask |= TULIP_STS_ABNRMLINTR;
+         TULIP_CSR_WRITE(sc, csr_intr, sc->tulip_intrmask);
+     }
+ #endif
      if (sc->tulip_flags & TULIP_NEEDRESET) {
  	tulip_reset(sc);
  	tulip_init(sc);
***************
*** 4674,4682 ****
--- 4699,4718 ----
      sc->tulip_flags ^= TULIP_WANTSETUP|TULIP_DOINGSETUP;
      ri->ri_free--;
      nextout = ri->ri_nextout;
+ #ifdef VPC
+     if (cpu_is_vpc == 3) {
+         nextout->d_flag &= TULIP_DFLAG_ENDRING|TULIP_DFLAG_CHAIN;
+         nextout->d_flag |= TULIP_DFLAG_TxSETUPPKT;
+     } else {
+         nextout->d_flag &= TULIP_DFLAG_ENDRING|TULIP_DFLAG_CHAIN;
+         nextout->d_flag |= TULIP_DFLAG_TxFIRSTSEG|TULIP_DFLAG_TxLASTSEG
+ 	    |TULIP_DFLAG_TxSETUPPKT|TULIP_DFLAG_TxWANTINTR;
+     }
+ #else
      nextout->d_flag &= TULIP_DFLAG_ENDRING|TULIP_DFLAG_CHAIN;
      nextout->d_flag |= TULIP_DFLAG_TxFIRSTSEG|TULIP_DFLAG_TxLASTSEG
  	|TULIP_DFLAG_TxSETUPPKT|TULIP_DFLAG_TxWANTINTR;
+ #endif
      if (sc->tulip_flags & TULIP_WANTHASHPERFECT)
  	nextout->d_flag |= TULIP_DFLAG_TxHASHFILT;
      else if (sc->tulip_flags & TULIP_WANTHASHONLY)
***************
*** 4717,4726 ****
--- 4753,4785 ----
       */
      TULIP_TXDESC_PRESYNC(sc, nextout, sizeof(u_int32_t));
      TULIP_CSR_WRITE(sc, csr_txpoll, 1);
+ #ifdef VPC_CPU
+     if (cpu_is_vpc == 3) {
+ 	while (nextout->d_status & TULIP_DSTS_OWNER)
+ 	  ; /* nasty spin-wait */
+ 	TULIP_TXMAP_POSTSYNC(sc, sc->tulip_setupmap);
+ 	tulip_initring(sc, &sc->tulip_txinfo, sc->tulip_txdescs, TULIP_TXDESCS);
+ 
+ 	sc->tulip_flags &= ~TULIP_DOINGSETUP;
+ 	sc->tulip_flags &= ~TULIP_WANTTXSTART;
+ 	tulip_rx_intr(sc);
+ 	sc->tulip_cmdmode |= TULIP_CMD_RXRUN|TULIP_CMD_TXRUN;
+ 	sc->tulip_intrmask |= TULIP_STS_RXSTOPPED|TULIP_STS_TXINTR|TULIP_STS_RXINTR;
+ 	TULIP_CSR_WRITE(sc, csr_intr, sc->tulip_intrmask);
+ 	TULIP_CSR_WRITE(sc, csr_command, sc->tulip_cmdmode);
+ 	sc->tulip_if.if_flags &= ~IFF_OACTIVE;
+     } else {
+         if ((sc->tulip_intrmask & TULIP_STS_TXINTR) == 0) {
+ 	    sc->tulip_intrmask |= TULIP_STS_TXINTR;
+ 	    TULIP_CSR_WRITE(sc, csr_intr, sc->tulip_intrmask);
+         }
+     }
+ #else
      if ((sc->tulip_intrmask & TULIP_STS_TXINTR) == 0) {
  	sc->tulip_intrmask |= TULIP_STS_TXINTR;
  	TULIP_CSR_WRITE(sc, csr_intr, sc->tulip_intrmask);
      }
+ #endif
  }
  
  
***************
*** 5809,5818 ****
  				     PCI_MAPREG_TYPE_MEM |
  				     PCI_MAPREG_MEM_TYPE_32BIT,
  				     0, &memt, &memh, NULL, NULL) == 0);
! 	if (memh_valid) {
  	    sc->tulip_bustag = memt;
  	    sc->tulip_bushandle = memh;
! 	} else if (ioh_valid) {
  	    sc->tulip_bustag = iot;
  	    sc->tulip_bushandle = ioh;
  	} else {
--- 5868,5880 ----
  				     PCI_MAPREG_TYPE_MEM |
  				     PCI_MAPREG_MEM_TYPE_32BIT,
  				     0, &memt, &memh, NULL, NULL) == 0);
! #ifndef VPC_CPU
! 	if ((cpu_is_vpc == 3) && memh_valid) {
  	    sc->tulip_bustag = memt;
  	    sc->tulip_bushandle = memh;
! 	} else
! #endif
! 	if (ioh_valid) {
  	    sc->tulip_bustag = iot;
  	    sc->tulip_bushandle = ioh;
  	} else {
*** ./dev/pci/if_tlp_pci.c.orig	Tue Sep 19 13:03:55 2000
--- ./dev/pci/if_tlp_pci.c	Tue Dec 19 16:19:08 2000
***************
*** 364,370 ****
  		printf("\n");
  		panic("tlp_pci_attach: impossible");
  	}
! 	sc->sc_chip = tpp->tpp_chip;
  
  	/*
  	 * By default, Tulip registers are 8 bytes long (4 bytes
--- 364,378 ----
  		printf("\n");
  		panic("tlp_pci_attach: impossible");
  	}
! #ifdef VPC_CPU
! 	if (cpu_is_vpc) {
! 		sc->sc_chip = TULIP_CHIP_VPC;
! 		if (cpu_is_vpc == 3) {
! 			printf("\nYou must use de0 with Virtual PC 3.  Sorry.\n");
! 		}
! 	} else
! #endif
! 		sc->sc_chip = tpp->tpp_chip;
  
  	/*
  	 * By default, Tulip registers are 8 bytes long (4 bytes
***************
*** 649,655 ****
  		 */
  		tlp_pci_get_quirks(psc, enaddr, tlp_pci_21040_quirks);
  		break;
! 
  	case TULIP_CHIP_21041:
  		/* Check for a slaved ROM on a multi-port board. */
  		tlp_pci_check_slaved(psc, TULIP_PCI_SHAREDROM,
--- 657,665 ----
  		 */
  		tlp_pci_get_quirks(psc, enaddr, tlp_pci_21040_quirks);
  		break;
! #ifdef VPC_CPU
! 	case TULIP_CHIP_VPC:
! #endif
  	case TULIP_CHIP_21041:
  		/* Check for a slaved ROM on a multi-port board. */
  		tlp_pci_check_slaved(psc, TULIP_PCI_SHAREDROM,
*** ./dev/pci/pciide.c.orig	Tue Sep 19 23:35:12 2000
--- ./dev/pci/pciide.c	Thu Oct  5 05:40:37 2000
***************
*** 1,4 ****
! /*	$NetBSD: pciide.c,v 1.68.2.13 2000/08/22 02:19:32 enami Exp $	*/
  
  
  /*
--- 1,4 ----
! /*	$NetBSD: pciide.c,v 1.68.2.14 2000/10/04 17:07:44 bouyer Exp $	*/
  
  
  /*
***************
*** 1884,1889 ****
--- 1884,1890 ----
  {
  	struct pciide_channel *cp;
  	pcireg_t interface = PCI_INTERFACE(pa->pa_class);
+ 	int rev = PCI_REVISION(pa->pa_class);
  	int channel;
  	u_int32_t ideconf;
  	bus_size_t cmdsize, ctlsize;
***************
*** 1899,1905 ****
  	if (sc->sc_dma_ok) {
  		sc->sc_wdcdev.cap |= WDC_CAPABILITY_DMA | WDC_CAPABILITY_IRQACK;
  		sc->sc_wdcdev.irqack = pciide_irqack;
! 		if (sc->sc_pp->ide_product == PCI_PRODUCT_VIATECH_VT82C586A_IDE)
  			sc->sc_wdcdev.cap |= WDC_CAPABILITY_UDMA;
  	}
  	sc->sc_wdcdev.PIO_cap = 4;
--- 1900,1907 ----
  	if (sc->sc_dma_ok) {
  		sc->sc_wdcdev.cap |= WDC_CAPABILITY_DMA | WDC_CAPABILITY_IRQACK;
  		sc->sc_wdcdev.irqack = pciide_irqack;
! 		if (sc->sc_pp->ide_product == PCI_PRODUCT_VIATECH_VT82C586A_IDE
! 		    && rev >= 6)
  			sc->sc_wdcdev.cap |= WDC_CAPABILITY_UDMA;
  	}
  	sc->sc_wdcdev.PIO_cap = 4;
*** ./dev/scsipi/atapi_wdc.c.orig	Sat Aug  5 06:09:17 2000
--- ./dev/scsipi/atapi_wdc.c	Tue Dec 19 16:03:35 2000
***************
*** 193,198 ****
--- 193,203 ----
  		    chp->wdc->sc_dev.dv_xname, chp->channel, drive);
  		panic("wdc_atapi_get_params");
  	}
+ #ifdef VPC_CPU
+ 	/* Connectix CD seems to return AT_ERROR when all is well */
+ 	if (cpu_is_vpc == 3)
+ 		wdc_c.flags &= ~AT_ERROR;
+ #endif
  	if (wdc_c.flags & (AT_ERROR | AT_TIMEOU | AT_DF)) {
  		WDCDEBUG_PRINT(("wdc_atapi_get_params: ATAPI_SOFT_RESET "
  		    "failed for drive %s:%d:%d: error 0x%x\n",