diff -Nur sys.orig/arch/i386/conf/a sys.lilyvm/arch/i386/conf/a --- sys.orig/arch/i386/conf/a Thu Jan 1 09:00:00 1970 +++ sys.lilyvm/arch/i386/conf/a Sun May 22 12:36:23 2005 @@ -0,0 +1,1098 @@ +# $NetBSD: GENERIC,v 1.491.4.4 2003/01/28 06:28:20 jmc Exp $ +# +# GENERIC machine description file +# +# This machine description file is used to generate the default NetBSD +# kernel. The generic kernel does not include all options, subsystems +# and device drivers, but should be useful for most applications. +# +# The machine description file can be customised for your specific +# machine to reduce the kernel size and improve its performance. +# +# For further information on compiling NetBSD kernels, see the config(8) +# man page. +# +# For further information on hardware support for this architecture, see +# the intro(4) man page. For further information about kernel options +# for this architecture, see the options(4) man page. For an explanation +# of each device driver in this file see the section 4 man page for the +# device. + +include "arch/i386/conf/std.i386" + +options INCLUDE_CONFIG_FILE # embed config file in kernel binary + +#ident "GENERIC-$Revision: 1.2 $" + +maxusers 32 # estimated number of users + +# CPU support. At least one is REQUIRED. +options I386_CPU +options I486_CPU +options I586_CPU +options I686_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 + +options MTRR # memory-type range register syscall support +options PERFCTRS # performance-monitoring counters support + +# 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 + +options CONSDEVNAME="\"com\"",CONADDR=0x3f8,CONSPEED=57600 +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 SEMMNI=10 # number of semaphore identifiers +#options SEMMNS=60 # number of semaphores in system +#options SEMUME=10 # max number of undo entries per process +#options SEMMNU=30 # number of undo structures in system +options SYSVSHM # System V-like memory sharing +#options SHMMAXPGS=1024 # 1024 pages is the default + +options LKM # loadable kernel modules + +#options USERCONF # userconf(4) support +#options PIPE_SOCKETPAIR # smaller, but slower pipe(2) + +# Diagnostic/debugging support options +#options DIAGNOSTIC # expensive 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\"",KGDB_DEVADDR=0x2f8,KGDB_DEVRATE=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_15 # NetBSD 1.5, +#options COMPAT_43 # and 4.3BSD +#options COMPAT_386BSD_MBRPART # recognize old partition ID +#options TCP_COMPAT_42 # 4.2BSD TCP/IP bug compat. Not recommended. + +#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_MACH # binary compatibility with Mach binaries +#options EXEC_MACHO # exec MACH-O binaries +#options COMPAT_PECOFF # kernel support to run Win32 apps + +# 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 +#options IPFILTER_DEFAULT_BLOCK # block all packets by default +#options TCP_DEBUG # Record last TCP_NDEBUG packets with SO_DEBUG + +# These options enable verbose messages for several subsystems. +# Warning, these may compile large string tables into the kernel! +#options EISAVERBOSE # verbose EISA device autoconfig messages +#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 fulsome PnP BIOS debugging messages +#options I2OVERBOSE # verbose I2O driver messages +#options MCAVERBOSE # verbose MCA device autoconfig 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 +# modify the screen type of the console; defaults to "80x25" +#options VGA_CONSOLE_SCREENTYPE="\"80x24\"" + +# 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 +#pceb* at pci? dev ? function ? # PCI-EISA bridges +#pcib* at pci? dev ? function ? # PCI-ISA bridges +#pcmb* at pci? dev ? function ? # PCI-MCA 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 +# +#agp* at pchb? + +# EISA bus support +#eisa0 at mainbus? +#eisa0 at pceb? +# +# ISA bus support +isa0 at mainbus? +#isa0 at pceb? +#isa0 at pcib? + +# PCMCIA bus support +#pcmcia* at pcic? controller ? socket ? +#pcmcia* at tcic? controller ? socket ? +# +# MCA bus support +#mca0 at mainbus? +# +# ISA PCMCIA controllers +#pcic0 at isa? port 0x3e0 iomem 0xd0000 iosiz 0x10000 +#pcic1 at isa? port 0x3e2 iomem 0xe0000 iosiz 0x4000 +#pcic2 at isa? port 0x3e4 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 +#pms* at pckbc? # PS/2 mouse for wsmouse +#options PMS_DISABLE_POWERHOOK +#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 +# +#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? dev ? 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 ? +#moxa0 at isa? port 0x100 irq 5 # MOXA C168H serial card (experimental) +#com* at moxa? slave ? + +# MCA serial interfaces +#com* at mca? slot ? # 16x50s on comm boards +# +# 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 +# +# Hardware monitors + +# 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? + + +# I2O devices +#iop* at pci? dev ? function ? # I/O processor +#iopsp* at iop? tid ? # SCSI/FC-AL ports +#ld* at iop? tid ? # block devices +#dpti* at iop? tid 0 # DPT/Adaptec control interface +# + +# 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 +#iha* at pci? dev ? function ? # Initio INIC-940/950 SCSI +#isp* at pci? dev ? function ? # Qlogic ISP [12]0x0 SCSI/FibreChannel +#mly* at pci? dev ? function ? # Mylex AcceleRAID and eXtremeRAID +#pcscp* at pci? dev ? function ? # AMD 53c974 PCscsi-PCI SCSI +#siop* at pci? dev ? function ? # Symbios 53c8xx SCSI +##options SIOP_SYMLED # drive the act. LED in software +#trm* at pci? dev ? function ? # Tekram DC-395U/UW/F, DC-315/U SCSI +# +# EISA SCSI controllers +#ahb* at eisa? slot ? # Adaptec 174[02] SCSI +#ahc* at eisa? slot ? # Adaptec 274x, aic7770 SCSI +#bha* at eisa? slot ? # BusLogic 7xx SCSI +#dpt* at eisa? slot ? # DPT EATA SCSI +#uha* at eisa? slot ? # UltraStor 24f 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] SCSI +#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 controller +##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 +##adv* at cardbus? dev ? function ? # AdvanSys 1200[A,B], 9xx[U,UA] SCSI +##ahc* at cardbus? dev ? function ? # Adaptec ADP-1480 +# +# MCA SCSI cards +#aha* at mca? slot ? # Adaptec AHA-1640 +# +# 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 iha? +#scsibus* at iopsp? +#scsibus* at isp? +#scsibus* at mly? +##scsibus* at nca? +#scsibus* at pcscp? +#scsibus* at sea? +#scsibus* at siop? +#scsibus* at trm? +#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 +#aac* at pci? dev ? function ? # Adaptec AAC family +#cac* at eisa? slot ? # Compaq EISA array controllers +#cac* at pci? dev ? function ? # Compaq PCI array controllers +#icp* at pci? dev ? function ? # ICP-Vortex GDT & Intel RAID +#mlx* at pci? dev ? function ? # Mylex DAC960 & DEC SWXCR family +#mlx* at eisa? slot ? # Mylex DAC960 & DEC SWXCR family +#twe* at pci? dev ? function ? # 3ware Escalade RAID controllers +# +#ld* at aac? unit ? # logical disk devices +#ld* at cac? unit ? +#ld* at icp? unit ? +#ld* at twe? unit ? +#ld* at mlx? unit ? +# +#icpsp* at icp? unit ? # SCSI pass-through +#scsibus* at icpsp? +# +# 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 +#st* at atapibus? drive ? flags 0x0000 # ATAPI tape 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 + +# MCA ESDI devices +#edc* at mca? slot ? # IBM ESDI Disk Controllers +#ed* at edc? +# + +# Network Interfaces + +# PCI network interfaces +#an* at pci? dev ? function ? # Aironet PC4500/PC4800 (802.11) +#bge* at pci? dev ? function ? # Broadcom 570x gigabit Ethernet +#en* at pci? dev ? function ? # ENI/Adaptec ATM +#ep* at pci? dev ? function ? # 3Com 3c59x +#epic* at pci? dev ? function ? # SMC EPIC/100 Ethernet +#esh* at pci? dev ? function ? # Essential HIPPI card +#ex* at pci? dev ? function ? # 3Com 90x[BC] +#fpa* at pci? dev ? function ? # DEC DEFPA FDDI +#fxp* at pci? dev ? function ? # Intel EtherExpress PRO 10+/100B +#gsip* at pci? dev ? function ? # NS83820 Gigabit Ethernet +##hme* at pci? dev ? function ? # Sun Microelectronics STP2002-STQ +#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 +#pcn* at pci? dev ? function ? # AMD PCnet-PCI Ethernet +#rtk* at pci? dev ? function ? # Realtek 8129/8139 +#sf* at pci? dev ? function ? # Adaptec AIC-6915 Ethernet +#sip* at pci? dev ? function ? # SiS 900/DP83815 Ethernet +#ste* at pci? dev ? function ? # Sundance ST-201 Ethernet +#stge* at pci? dev ? function ? # Sundance/Tamarack TC9021 Gigabit +#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 +#vr* at pci? dev ? function ? # VIA Rhine Fast Ethernet +#wi* at pci? dev ? function ? # Intersil Prism Mini-PCI (802.11b) +#wm* at pci? dev ? function ? # Intel 82543/82544 gigabit +# +# EISA network interfaces +#ep* at eisa? slot ? # 3Com 3c579 Ethernet +#fea* at eisa? slot ? # DEC DEFEA FDDI +#tlp* at eisa? slot ? # DEC DE-425 Ethernet +# +# ISA Plug-and-Play network interfaces +#an* at isapnp? # Aironet 802.11 +#ep* at isapnp? # 3Com 3c509 Ethernet +#ne* at isapnp? # NE2000-compatible Ethernet +#tr* at isapnp? # IBM/3COM TROPIC Token-Ring +# +# PCMCIA network interfaces +#an* at pcmcia? function ? # Aironet PC4500/PC4800 (802.11) +#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 +## tr at pcmcia has problems with Cardbus bridges +##tr* at pcmcia? function ? # TROPIC based Token-Ring +#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 + +## MCA network cards +#elmc* at mca? slot ? # 3Com EtherLink/MC (3c523) +#ep* at mca? slot ? # 3Com EtherLink III (3c529) +#we* at mca? slot ? # WD/SMC Ethernet +#ate* at mca? slot ? # Allied Telesis AT1720 +#ne* at mca? slot ? # Novell NE/2 and clones +#tr* at mca? slot ? # IBM Token Ring adapter +#le* at mca? slot ? # SKNET Personal/MC2+ +# +## MII/PHY support +#acphy* at mii? phy ? # DAltima AC101 and AMD Am79c874 PHYs +#amhphy* at mii? phy ? # AMD 79c901 Ethernet PHYs +#bmtphy* at mii? phy ? # Broadcom BCM5201 and BCM5202 PHYs +#brgphy* at mii? phy ? # Broadcom BCM5400-family PHYs +#dmphy* at mii? phy ? # Davicom DM9101 PHYs +#exphy* at mii? phy ? # 3Com internal PHYs +#glxtphy* at mii? phy ? # Level One LXT-1000 PHYs +#gphyter* at mii? phy ? # NS83861 Gig-E PHY +#icsphy* at mii? phy ? # Integrated Circuit Systems ICS189x +#inphy* at mii? phy ? # Intel 82555 PHYs +#iophy* at mii? phy ? # Intel 82553 PHYs +#lxtphy* at mii? phy ? # Level One LXT-970 PHYs +##makphy* at mii? phy ? # Marvell Semiconductor 88E1000 PHYs +##nsphy* at mii? phy ? # NS83840 PHYs +##nsphyter* at mii? phy ? # NS83843 PHYs +##pnaphy* at mii? phy ? # generic HomePNA 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 +##urlphy* at mii? phy ? # Realtek RTL8150L internal PHYs +# + +# USB Controller and Devices + +# PCI USB controllers +# The EHCI is not ready for prime time. +#ehci* at pci? dev ? function ? # Enhanced Host Controller +#ohci* at pci? dev ? function ? # Open Host Controller +#uhci* at pci? dev ? function ? # Universal Host Controller (Intel) + +# CardBus USB controllers +#ehci* at cardbus? dev ? function ? # Enhanced Host Controller +#ohci* at cardbus? dev ? function ? # Open Host Controller + +# USB bus support +#usb* at ehci? +#usb* at ohci? +#usb* at uhci? + +# USB Hubs +#uhub* at usb? +#uhub* at uhub? port ? configuration ? interface ? + +# USB HID device +#uhidev* at uhub? port ? configuration ? interface ? + +## USB Mice +#ums* at uhidev? reportid ? +#wsmouse* at ums? mux 0 +# +## USB Keyboards +#ukbd* at uhidev? reportid ? +#wskbd* at ukbd? console ? mux 1 +# +# USB Generic HID devices +#uhid* at uhidev? reportid ? +# +## 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 ? +##wd* at umass? +# +## USB audio +#uaudio* at uhub? port ? configuration ? +# +## USB MIDI +#umidi* at uhub? port ? configuration ? +# +## USB IrDA +## USB-IrDA bridge spec +#uirda* at uhub? port ? configuration ? interface ? +#irframe* at uirda? + +## SigmaTel STIr4200 USB/IrDA Bridge +#ustir* at uhub? port ? +#irframe* at ustir? +# +## 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 +#url* at uhub? port ? # Realtek RTL8150L based adapters +# +## Prolific PL2301/PL2302 host-to-host adapter +#upl* at uhub? port ? +# +## Serial adapters +#uftdi* at uhub? port ? # FTDI FT8U100AX serial adapter +#ucom* at uftdi? portno ? +# +#umct* at uhub? port ? # MCT USB-RS232 serial adapter +#ucom* at umct? portno ? +# +#uplcom* at uhub? port ? # I/O DATA USB-RSAQ2 serial adapter +#ucom* at uplcom? portno ? +# +#uvscom* at uhub? port ? # SUNTAC Slipper U VS-10U serial adapter +#ucom* at uvscom? portno ? +# +## Diamond Multimedia Rio 500 +#urio* at uhub? port ? +# +## USB Handspring Visor +#uvisor* at uhub? port ? +#ucom* at uvisor? +# +## USB scanners +#uscanner* at uhub? port ? +# +## USB scanners that use SCSI emulation, e.g., HP5300 +#usscanner* at uhub? port ? +#scsibus* at usscanner? channel ? +# +## Y@P firmware loader +#uyap* at uhub? port ? +# +## D-Link DSB-R100 USB radio +#udsbr* at uhub? port ? +#radio* at udsbr? +# +## USB Generic driver +#ugen* at uhub? port ? +# +# +## IrDA and Consumer Ir devices +# +## Toshiba Oboe +#oboe* at pci? dev ? function ? +#irframe* at oboe? +# +# +## Audio Devices +# +## PCI audio devices +#auich* at pci? dev ? function ? # Intel ICH integrated AC'97 Audio +#autri* at pci? dev ? function ? # Trident 4DWAVE based AC'97 Audio +#auvia* at pci? dev ? function ? # VIA VT82C686A integrated AC'97 Audio +#clcs* at pci? dev ? function ? # Cirrus Logic CS4280 +#clct* at pci? dev ? function ? # Cirrus Logic CS4281 +#cmpci* at pci? dev ? function ? # C-Media CMI8338/8738 +#eap* at pci? dev ? function ? # Ensoniq AudioPCI +#emuxki* at pci? dev ? function ? # Creative SBLive! and PCI512 +#esa* at pci? dev ? function ? # ESS Allegro-1 / Maestro-3 PCI Audio +#esm* at pci? dev ? function ? # ESS Maestro-1/2/2e PCI Audio Accelerator +#eso* at pci? dev ? function ? # ESS Solo-1 PCI AudioDrive +#fms* at pci? dev ? function ? # Forte Media FM801 +#neo* at pci? dev ? function ? # NeoMagic 256 AC'97 Audio +#sv* at pci? dev ? function ? # S3 SonicVibes +#yds* at pci? dev ? function ? # Yamaha DS-1 PCI Audio +# +## 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 +# +## PCMCIA audio devices +##esl* at pcmcia? function ? # ESS 1688 AudioDrive +# +##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 cmpci? flags 1 +##opl* at esl? +#opl* at eso? +#opl* at ess? +#opl* at fms? +#opl* at sb? +#opl* at sv? +#opl* at wss? +#opl* at yds? +#opl* at ym? +# +## Audio support +##audio* at aria? +#audio* at auich? +#audio* at autri? +#audio* at auvia? +#audio* at clcs? +#audio* at clct? +#audio* at cmpci? +#audio* at eap? +#audio* at emuxki? +#audio* at esa? +##audio* at esl? +#audio* at esm? +#audio* at eso? +#audio* at ess? +#audio* at fms? +#audio* at gus? +#audio* at guspnp? +#audio* at neo? +#audio* at pas? +#audio* at sb? +##audio* at sp? +#audio* at sv? +#audio* at uaudio? +#audio* at wss? +#audio* at yds? +#audio* at ym? +# +## MPU 401 UARTs +##mpu* at isa? port 0x330 irq 9 # MPU401 or compatible card +#mpu* at cmpci? +#mpu* at eso? +#mpu* at fms? +#mpu* at sb? +#mpu* at yds? +#mpu* at ym? +# +## MIDI support +#midi* at autri? # Trident 4DWAVE MIDI port +#midi* at clcs? # Cirrus Logic CS4280 MIDI port +##midi* at clct? # Cirrus Logic CS4281 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 +#midi* at umidi? # USB MIDI +# +## The spkr driver provides a simple tone interface to the built in speaker. +##spkr0 at pcppi? # PC speaker +# +# +## FM-Radio devices +## ISA radio devices +##az0 at isa? port 0x350 # Aztech/PackardBell FM Radio Card +##az1 at isa? port 0x358 +##rt0 at isa? port 0x20c # AIMS Lab Radiotrack & compatible +##rt1 at isa? port 0x284 +##rt2 at isa? port 0x30c +##rt3 at isa? port 0x384 +##rtii0 at isa? port 0x20c # AIMS Lab Radiotrack II FM Radio Card +##rtii1 at isa? port 0x30c +##sf2r0 at isa? port 0x384 # SoundForte RadioLink SF16-FMR2 FM Radio Card +# +## PCI radio devices +##mr* at pci? dev ? function ? # Guillemot Maxi Radio FM 2000 Radio Card +# +## Radio support +##radio* at az? +##radio* at mr? +##radio* at rt? +##radio* at rtii? +##radio* at sf2r? +# +# +## TV cards +# +## Brooktree 848/849/878/879 based TV cards +#bktr* at pci? dev ? function ? +#radio* at bktr? +# +# +## 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 +# +# +## Joysticks +# +##joy* at pnpbios? index ? # Game port +# +## 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) +#joy* at eso? # ESS Solo-1 on-board joystick +# +## 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 +# +## Middle Digital, Inc. PCI-Weasel serial console board control +## devices (watchdog timer, etc.) +#weasel* at pci? +# +## 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 8 # RAIDframe disk driver +#options RAID_AUTOCONFIG # auto-configuration of RAID components +#Options to enable various other RAIDframe RAID types. +#options RF_INCLUDE_EVENODD=1 +#options RF_INCLUDE_RAID5_RS=1 +#options RF_INCLUDE_PARITYLOGGING=1 +#options RF_INCLUDE_CHAINDECLUSTER=1 +#options RF_INCLUDE_INTERDECLUSTER=1 +#options RF_INCLUDE_PARITY_DECLUSTERING=1 +#options RF_INCLUDE_PARITY_DECLUSTERING_DS=1 +pseudo-device md 3 # 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 pppoe # PPP over Ethernet (RFC 2516) +pseudo-device sl 2 # Serial Line IP +#pseudo-device strip 2 # Starmode Radio IP (Metricom) +#pseudo-device irframetty # IrDA frame line discipline +pseudo-device tun 2 # network tunneling over tty +#pseudo-device gre 2 # generic L3 over IP tunnel +#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 +#pseudo-device vlan # IEEE 802.1q encapsulation +#pseudo-device bridge # simple inter-network bridging + +# miscellaneous pseudo-devices +pseudo-device pty # 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) +pseudo-device clockctl # user control of clock subsystem + +# a pseudo device needed for Coda # also needs CODA (above) +#pseudo-device vcoda 4 # coda minicache <-> venus comm. + +# wscons pseudo-devices +#pseudo-device wsmux # mouse & keyboard multiplexor +#pseudo-device wsfont + + +# Enable the hooks used for initializing the root memory-disk. +options MEMORY_DISK_HOOKS +options MEMORY_DISK_IS_ROOT # force root on memory disk +options MEMORY_DISK_SERVER=0 # no userspace memory disk support +#options MINIROOTSIZE=4096 # size of memory disk, in blocks +#options MINIROOTSIZE=2880 # 1.44M, same as a floppy +#options MINIROOTSIZE=128 # 1.44M, same as a floppy +options MEMORY_DISK_ROOT_SIZE=128 +options MEMORY_DISK_IS_ROOT_IMAGE_FILE + + +pseudo-device vmn # network for vm +options KERNBASE=0xa0000000 diff -Nur sys.orig/arch/i386/i386/freebsd_sigcode.s sys.lilyvm/arch/i386/i386/freebsd_sigcode.s --- sys.orig/arch/i386/i386/freebsd_sigcode.s Wed Sep 26 18:58:39 2001 +++ sys.lilyvm/arch/i386/i386/freebsd_sigcode.s Sun May 22 12:36:33 2005 @@ -93,8 +93,8 @@ pushl %eax pushl %eax # junk to fake return address movl $FREEBSD_SYS_sigreturn,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $FREEBSD_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(freebsd_esigcode) _C_LABEL(freebsd_esigcode): diff -Nur sys.orig/arch/i386/i386/ibcs2_sigcode.s sys.lilyvm/arch/i386/i386/ibcs2_sigcode.s --- sys.orig/arch/i386/i386/ibcs2_sigcode.s Thu Mar 21 05:06:51 2002 +++ sys.lilyvm/arch/i386/i386/ibcs2_sigcode.s Sun May 22 12:36:33 2005 @@ -91,8 +91,8 @@ pushl %eax pushl %eax # junk to fake return address movl $IBCS2_SYS_sigreturn,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $IBCS2_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(ibcs2_esigcode) _C_LABEL(ibcs2_esigcode): diff -Nur sys.orig/arch/i386/i386/linux_sigcode.s sys.lilyvm/arch/i386/i386/linux_sigcode.s --- sys.orig/arch/i386/i386/linux_sigcode.s Wed Sep 26 18:58:39 2001 +++ sys.lilyvm/arch/i386/i386/linux_sigcode.s Sun May 22 12:36:33 2005 @@ -97,9 +97,9 @@ # copy at SIGF_SCP(%esp)) pushl %eax # junk to fake return address movl $LINUX_SYS_sigreturn,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $LINUX_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(linux_esigcode) _C_LABEL(linux_esigcode): @@ -110,8 +110,8 @@ # copy at SIGF_SCP(%esp)) pushl %eax # junk to fake return address movl $LINUX_SYS_rt_sigreturn,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $LINUX_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(linux_rt_esigcode) _C_LABEL(linux_rt_esigcode): diff -Nur sys.orig/arch/i386/i386/locore.s sys.lilyvm/arch/i386/i386/locore.s --- sys.orig/arch/i386/i386/locore.s Wed Apr 10 01:41:08 2002 +++ sys.lilyvm/arch/i386/i386/locore.s Sun May 22 12:36:33 2005 @@ -732,9 +732,9 @@ pushl %eax pushl %eax # junk to fake return address movl $SYS___sigreturn14,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(esigcode) _C_LABEL(esigcode): diff -Nur sys.orig/arch/i386/i386/mach_sigcode.s sys.lilyvm/arch/i386/i386/mach_sigcode.s --- sys.orig/arch/i386/i386/mach_sigcode.s Sun Oct 28 10:38:52 2001 +++ sys.lilyvm/arch/i386/i386/mach_sigcode.s Sun May 22 12:36:33 2005 @@ -160,9 +160,9 @@ pushl $1 # setcontext(p) == syscontext(1, p) pushl %eax # junk to fake return address movl $MACH_SYS_context,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $MACH_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails */ .globl _C_LABEL(mach_esigcode) _C_LABEL(mach_esigcode): diff -Nur sys.orig/arch/i386/i386/svr4_sigcode.s sys.lilyvm/arch/i386/i386/svr4_sigcode.s --- sys.orig/arch/i386/i386/svr4_sigcode.s Thu Nov 1 03:16:02 2001 +++ sys.lilyvm/arch/i386/i386/svr4_sigcode.s Sun May 22 12:36:33 2005 @@ -158,9 +158,9 @@ pushl $1 # setcontext(p) == syscontext(1, p) pushl %eax # junk to fake return address movl $SVR4_SYS_context,%eax - int $0x80 # enter kernel with args on stack + .byte 0xcd,0x80 # int $0x80 # enter kernel with args on stack movl $SVR4_SYS_exit,%eax - int $0x80 # exit if sigreturn fails + .byte 0xcd,0x80 # int $0x80 # exit if sigreturn fails .globl _C_LABEL(svr4_esigcode) _C_LABEL(svr4_esigcode): diff -Nur sys.orig/arch/i386/include/pmap.h sys.lilyvm/arch/i386/include/pmap.h --- sys.orig/arch/i386/include/pmap.h Mon Dec 24 08:08:41 2001 +++ sys.lilyvm/arch/i386/include/pmap.h Sun May 22 12:36:23 2005 @@ -151,7 +151,7 @@ #define PDSLOT_PTE ((KERNBASE/NBPD)-1) /* 767: for recursive PDP map */ #define PDSLOT_KERN (KERNBASE/NBPD) /* 768: start of kernel space */ -#define PDSLOT_APTE ((unsigned)1023) /* 1023: alternative recursive slot */ +#define PDSLOT_APTE ((unsigned)1023-256-3) /* 1023: alternative recursive slot */ /* * the following defines give the virtual addresses of various MMU diff -Nur sys.orig/conf/files sys.lilyvm/conf/files --- sys.orig/conf/files Fri Dec 13 08:48:37 2002 +++ sys.lilyvm/conf/files Sun May 22 12:36:24 2005 @@ -1337,3 +1337,6 @@ # Game adapter (joystick) device joy file dev/ic/joy.c joy needs-flag + +defpseudo vmn: ifnet +file net/if_vmn.c vmn diff -Nur sys.orig/dev/md.c sys.lilyvm/dev/md.c --- sys.orig/dev/md.c Mon Jan 14 04:28:07 2002 +++ sys.lilyvm/dev/md.c Sun May 22 12:36:24 2005 @@ -60,6 +60,8 @@ #include #include #include +#include +#include #include @@ -86,6 +88,7 @@ struct disk sc_dkdev; /* hook for generic disk handling */ struct md_conf sc_md; struct buf_queue sc_buflist; + int sc_flags; }; /* shorthand for fields in sc_md: */ #define sc_addr sc_md.md_addr @@ -252,6 +255,11 @@ if (sc->sc_type == MD_UNCONFIGURED) return ENXIO; + { + static void mdgetdisklabel(struct md_softc *sc); + mdgetdisklabel (sc); + } + return 0; } @@ -326,7 +334,11 @@ int unit; struct md_softc *sc; caddr_t addr; +#if defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) + u_int64_t off, xfer; +#else size_t off, xfer; +#endif unit = MD_UNIT(bp->b_dev); sc = ramdisk_devs[unit]; @@ -364,11 +376,27 @@ xfer = bp->b_resid; if (xfer > (sc->sc_size - off)) xfer = (sc->sc_size - off); +#if defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) + if (sc->sc_addr) { +#endif addr = sc->sc_addr + off; if (bp->b_flags & B_READ) memcpy(bp->b_data, addr, xfer); else memcpy(addr, bp->b_data, xfer); +#if defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) + } else { +#define lilyvm_call_int (*(int(**)(int,...))0xbfafefac) +#define lilyvm_call_longlong (*(long long(**)(int,...))0xbfafef9c) +#define lilyvm_call lilyvm_call_int +#define LILYVM_CALL_VMDISK_PREAD 5 +#define LILYVM_CALL_VMDISK_PWRITE 6 + if (bp->b_flags & B_READ) + lilyvm_call (LILYVM_CALL_VMDISK_PREAD, unit, bp->b_data, (int)xfer, off); + else + lilyvm_call (LILYVM_CALL_VMDISK_PWRITE, unit, bp->b_data, (int)xfer, off); + } +#endif bp->b_resid -= xfer; break; @@ -383,6 +411,89 @@ biodone(bp); } +/* + * Wait interruptibly for an exclusive lock. + * + * XXX Several drivers do this; it should be abstracted and made MP-safe. + */ +static int +mdlock(struct md_softc *sc) +{ + int error; + + while ((sc->sc_flags & MDF_LKHELD) != 0) { + sc->sc_flags |= MDF_LKWANTED; + if ((error = tsleep(sc, PRIBIO | PCATCH, "mdlck", 0)) != 0) + return (error); + } + sc->sc_flags |= MDF_LKHELD; + return (0); +} + +/* + * Unlock and wake up any waiters. + */ +static void +mdunlock(struct md_softc *sc) +{ + + sc->sc_flags &= ~MDF_LKHELD; + if ((sc->sc_flags & MDF_LKWANTED) != 0) { + sc->sc_flags &= ~MDF_LKWANTED; + wakeup(sc); + } +} + +/* + * Construct a ficticious label. + */ +static void +mdgetdefaultlabel(struct md_softc *sc, struct disklabel *lp) +{ + + memset(lp, 0, sizeof(struct disklabel)); + + lp->d_secsize = 512; + lp->d_ntracks = 1; + lp->d_nsectors = 1; + lp->d_ncylinders = 1; + lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors; + lp->d_type = DTYPE_LD; + strcpy(lp->d_typename, "unknown"); + strcpy(lp->d_packname, "fictitious"); + lp->d_secperunit = 1; + lp->d_rpm = 7200; + lp->d_interleave = 1; + lp->d_flags = 0; + + lp->d_partitions[RAW_PART].p_offset = 0; + lp->d_partitions[RAW_PART].p_size = + lp->d_secperunit * (lp->d_secsize / DEV_BSIZE); + lp->d_partitions[RAW_PART].p_fstype = FS_UNUSED; + lp->d_npartitions = RAW_PART + 1; + + lp->d_magic = DISKMAGIC; + lp->d_magic2 = DISKMAGIC; + lp->d_checksum = dkcksum(lp); +} + +/* + * Load the label information from the specified device. + */ +static void +mdgetdisklabel(struct md_softc *sc) +{ + const char *errstring; + + mdgetdefaultlabel(sc, sc->sc_dkdev.dk_label); + + /* Call the generic disklabel extraction routine. */ + errstring = readdisklabel(MAKEDISKDEV(0, sc->sc_dev.dv_unit, RAW_PART), + mdstrategy, sc->sc_dkdev.dk_label, sc->sc_dkdev.dk_cpulabel); + if (errstring != NULL) + printf("%s: %s\n", sc->sc_dev.dv_xname, errstring); +} + int mdioctl(dev, cmd, data, flag, proc) dev_t dev; @@ -394,10 +505,99 @@ int unit; struct md_softc *sc; struct md_conf *umd; + caddr_t addr = data; +#ifdef __HAVE_OLD_DISKLABEL + struct disklabel newlabel; +#endif + struct disklabel *lp; + int part, error; unit = MD_UNIT(dev); + part = DISKPART(dev); sc = ramdisk_devs[unit]; + switch (cmd) { + case DIOCGDINFO: + memcpy(addr, sc->sc_dkdev.dk_label, sizeof(struct disklabel)); + return (0); + +#ifdef __HAVE_OLD_DISKLABEL + case ODIOCGDINFO: + newlabel = *(sc->sc_dkdev.dk_label); + if (newlabel.d_npartitions > OLDMAXPARTITIONS) + return ENOTTY; + memcpy(addr, &newlabel, sizeof(struct olddisklabel)); + return (0); +#endif + + case DIOCGPART: + ((struct partinfo *)addr)->disklab = sc->sc_dkdev.dk_label; + ((struct partinfo *)addr)->part = + &sc->sc_dkdev.dk_label->d_partitions[part]; + return 0; + + case DIOCWDINFO: + case DIOCSDINFO: +#ifdef __HAVE_OLD_DISKLABEL + case ODIOCWDINFO: + case ODIOCSDINFO: + + if (cmd == ODIOCSDINFO || cmd == ODIOCWDINFO) { + memset(&newlabel, 0, sizeof newlabel); + memcpy(&newlabel, addr, sizeof (struct olddisklabel)); + lp = &newlabel; + } else +#endif + lp = (struct disklabel *)addr; + + if ((flag & FWRITE) == 0) + return (EBADF); + + if ((error = mdlock(sc)) != 0) + return (error); + sc->sc_flags |= MDF_LABELLING; + + error = setdisklabel(sc->sc_dkdev.dk_label, + lp, /*sc->sc_dkdev.dk_openmask : */0, + sc->sc_dkdev.dk_cpulabel); + if (error == 0 && (cmd == DIOCWDINFO +#ifdef __HAVE_OLD_DISKLABEL + || cmd == ODIOCWDINFO +#endif + )) + error = writedisklabel( + MAKEDISKDEV(major(dev), DISKUNIT(dev), RAW_PART), + mdstrategy, sc->sc_dkdev.dk_label, + sc->sc_dkdev.dk_cpulabel); + + sc->sc_flags &= ~MDF_LABELLING; + mdunlock(sc); + return error; + + case DIOCWLABEL: + if ((flag & FWRITE) == 0) + return (EBADF); + if (*(int *)addr) + sc->sc_flags |= MDF_WLABEL; + else + sc->sc_flags &= ~MDF_WLABEL; + return 0; + + case DIOCGDEFLABEL: + mdgetdefaultlabel(sc, (struct disklabel *)addr); + return 0; + +#ifdef __HAVE_OLD_DISKLABEL + case ODIOCGDEFLABEL: + mdgetdefaultlabel(sc, &newlabel); + if (newlabel.d_npartitions > OLDMAXPARTITIONS) + return ENOTTY; + memcpy(addr, &newlabel, sizeof (struct olddisklabel)); + return 0; +#endif + } + + /* If this is not the raw partition, punt! */ if (DISKPART(dev) != RAW_PART) return ENOTTY; @@ -450,6 +650,7 @@ sc->sc_addr = (caddr_t)addr; /* kernel space */ sc->sc_size = (size_t)size; sc->sc_type = MD_KMEM_ALLOCATED; + mdgetdisklabel (sc); return 0; } @@ -487,6 +688,7 @@ sc->sc_type = MD_UNCONFIGURED; sc->sc_addr = 0; sc->sc_size = 0; + mdgetdisklabel (sc); return (error); } diff -Nur sys.orig/dev/md.h sys.lilyvm/dev/md.h --- sys.orig/dev/md.h Tue Jul 3 02:17:25 2001 +++ sys.lilyvm/dev/md.h Sun May 22 12:36:24 2005 @@ -36,9 +36,21 @@ #include +#define MDF_ENABLED 0x01 /* device enabled */ +#define MDF_LKHELD 0x02 /* lock held */ +#define MDF_LKWANTED 0x04 /* lock wanted */ +#define MDF_WLABEL 0x08 /* label is writable */ +#define MDF_LABELLING 0x10 /* writing label */ +#define MDF_DRAIN 0x20 /* maxqueuecnt has changed; drain */ +#define MDF_DETACH 0x40 /* detach pending */ + struct md_conf { caddr_t md_addr; +#if defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) + u_int64_t md_size; +#else size_t md_size; +#endif int md_type; }; diff -Nur sys.orig/dev/md_root.c sys.lilyvm/dev/md_root.c --- sys.orig/dev/md_root.c Tue Apr 2 14:30:52 2002 +++ sys.lilyvm/dev/md_root.c Sun May 22 12:36:24 2005 @@ -84,6 +84,20 @@ { char pbuf[9]; +#if defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) +#define lilyvm_call_int (*(int(**)(int,...))0xbfafefac) +#define lilyvm_call_longlong (*(long long(**)(int,...))0xbfafef9c) +#define lilyvm_call lilyvm_call_int +#define LILYVM_CALL_VMDISK_NUM_DISKS 3 +#define LILYVM_CALL_VMDISK_GETSIZE 4 + if (unit < lilyvm_call (LILYVM_CALL_VMDISK_NUM_DISKS)) { + md->md_addr = (caddr_t)0; + md->md_size = lilyvm_call_longlong (LILYVM_CALL_VMDISK_GETSIZE, unit); + md->md_type = MD_KMEM_FIXED; + format_bytes(pbuf, sizeof(pbuf), md->md_size); + printf("md%d: using %s image file\n", unit, pbuf); + } else +#endif if (unit == 0) { /* Setup root ramdisk */ md->md_addr = (caddr_t)md_root_image; @@ -102,7 +116,9 @@ { if (unit == 0) { +#if !defined (MEMORY_DISK_IS_ROOT_IMAGE_FILE) /* The root ramdisk only works single-user. */ boothowto |= RB_SINGLE; +#endif } } diff -Nur sys.orig/net/if.h sys.lilyvm/net/if.h --- sys.orig/net/if.h Fri Nov 1 19:56:03 2002 +++ sys.lilyvm/net/if.h Sun May 22 12:36:24 2005 @@ -781,6 +781,12 @@ struct mbuf *, struct sockaddr *, struct rtentry *)); void lortrequest __P((int, struct rtentry *, struct rt_addrinfo *)); +int vmnioctl __P((struct ifnet *, u_long, caddr_t)); +void vmnattach __P((int)); +int vmnoutput __P((struct ifnet *, + struct mbuf *, struct sockaddr *, struct rtentry *)); +void vmnrtrequest __P((int, struct rtentry *, struct rt_addrinfo *)); + /* * These are exported because they're an easy way to tell if * an interface is going away without having to burn a flag. diff -Nur sys.orig/net/if_vmn.c sys.lilyvm/net/if_vmn.c --- sys.orig/net/if_vmn.c Thu Jan 1 09:00:00 1970 +++ sys.lilyvm/net/if_vmn.c Sun May 22 12:36:24 2005 @@ -0,0 +1,419 @@ +/* Copyright (C) 2003,2004,2005 Hideki EIRAKU */ + +/* $NetBSD: if_loop.c,v 1.40 2001/11/12 23:49:40 lukem Exp $ */ + +/* + * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Copyright (c) 1982, 1986, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)if_loop.c 8.2 (Berkeley) 1/9/95 + */ + +/* + * Loopback interface driver for protocol testing and timing. + */ + +#include + +#include "opt_inet.h" +#include "opt_atalk.h" +#include "opt_iso.h" +#include "opt_ns.h" + +#include "bpfilter.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#ifdef INET +#include +#include +#include +#include +#endif + +#ifdef NS +#include +#include +#endif + +#ifdef IPX +#include +#include +#endif + +#ifdef ISO +#include +#include +#endif + +#ifdef NETATALK +#include +#include +#endif + +#if NBPFILTER > 0 +#include +#endif + +#if POLLING +#else +#include +#include +#include +#include +#endif + +#define VMNMTU 1500 + +struct ifnet vmnif[1]; +struct callout input_callout; +void vmninput (void *dummy); +int vmninputintr (void *dummy); + +#define lilyvm_call_int (*(int(**)(int,...))0xbfafefac) +#define lilyvm_call_longlong (*(long long(**)(int,...))0xbfafef9c) +#define lilyvm_call lilyvm_call_int +#define LILYVM_CALL_VMN_WRITE 1 +#define LILYVM_CALL_VMN_READ 2 + +void +vmnattach(n) + int n; +{ + int i; + struct ifnet *ifp; + + for (i = 0; i < 1; i++) { + ifp = &vmnif[i]; + sprintf(ifp->if_xname, "vmn%d", i); + ifp->if_softc = NULL; + ifp->if_mtu = VMNMTU; + ifp->if_flags = IFF_MULTICAST; + ifp->if_ioctl = vmnioctl; + ifp->if_output = vmnoutput; + ifp->if_type = IFT_OTHER; + ifp->if_hdrlen = 0; + ifp->if_addrlen = 0; + ifp->if_dlt = DLT_NULL; + IFQ_SET_READY(&ifp->if_snd); + if_attach(ifp); + if_alloc_sadl(ifp); +#if NBPFILTER > 0 + bpfattach(ifp, DLT_NULL, sizeof(u_int)); +#endif + } + callout_init (&input_callout); +#if VMN_POLLING + callout_reset (&input_callout, 1, vmninput, NULL); +#else + isa_intr_establish (NULL, 1, IST_EDGE, IPL_HIGH, vmninputintr, 0); +#endif +} + +void +vmninput (void *dummy) +{ + int s, isr; + static uint len; + static struct mbuf *m = NULL; + struct ifqueue *ifq; + struct ifnet *ifp; + +loop: + if (m == NULL) { + len = 0; + MGETHDR (m, M_DONTWAIT, MT_DATA); + if (m) { + MCLGET(m, M_DONTWAIT); + if ((m->m_flags & M_EXT) == 0) { + m_freem (m); + m = NULL; + } + } + if (!m) printf ("vmninput: mbuf allocation failed\n"); + } + if (m) { + if (len == 0) { + len = lilyvm_call (LILYVM_CALL_VMN_READ, mtod (m, uint8_t *), MCLBYTES); + } + if (len > 0) { + ifq = &ipintrq; + ifp = &vmnif[0]; + isr = NETISR_IP; + s = splnet(); + if (IF_QFULL(ifq)) { + IF_DROP(ifq); + splx(s); + callout_reset (&input_callout, 1, vmninput, NULL); + } else { + m->m_pkthdr.len = m->m_len = len; + m->m_pkthdr.rcvif = ifp; + IF_ENQUEUE(ifq, m); + m = NULL; + schednetisr(isr); + ifp->if_ipackets++; + ifp->if_ibytes += len; + splx(s); + goto loop; + } + } + } +#if VMN_POLLING + callout_reset (&input_callout, 1, vmninput, NULL); +#endif +} + +int +vmninputintr (void *dummy) +{ + vmninput (dummy); + return -1; +} + +int +vmnoutput(ifp, m, dst, rt) + struct ifnet *ifp; + struct mbuf *m; + struct sockaddr *dst; + struct rtentry *rt; +{ + int isr; + struct ifqueue *ifq = 0; + + if ((m->m_flags & M_PKTHDR) == 0) + panic("vmnoutput: no header mbuf"); +#if NBPFILTER > 0 + if (ifp->if_bpf && (ifp->if_flags & IFF_LOOPBACK)) { + /* + * We need to prepend the address family as + * a four byte field. Cons up a dummy header + * to pacify bpf. This is safe because bpf + * will only read from the mbuf (i.e., it won't + * try to free it or keep a pointer to it). + */ + struct mbuf m0; + u_int32_t af = dst->sa_family; + + m0.m_next = m; + m0.m_len = 4; + m0.m_data = (char *)⁡ + + bpf_mtap(ifp->if_bpf, &m0); + } +#endif + m->m_pkthdr.rcvif = ifp; + + if (rt && rt->rt_flags & (RTF_REJECT|RTF_BLACKHOLE)) { + m_freem(m); + return (rt->rt_flags & RTF_BLACKHOLE ? 0 : + rt->rt_flags & RTF_HOST ? EHOSTUNREACH : ENETUNREACH); + } + +#ifndef PULLDOWN_TEST + /* + * KAME requires that the packet to be contiguous on the + * mbuf. We need to make that sure. + * this kind of code should be avoided. + * XXX other conditions to avoid running this part? + */ + if (m->m_len != m->m_pkthdr.len) { + struct mbuf *n = NULL; + int maxlen; + + MGETHDR(n, M_DONTWAIT, MT_HEADER); + maxlen = MHLEN; + if (n) + M_COPY_PKTHDR(n, m); + if (n && m->m_pkthdr.len > maxlen) { + MCLGET(n, M_DONTWAIT); + maxlen = MCLBYTES; + if ((n->m_flags & M_EXT) == 0) { + m_free(n); + n = NULL; + } + } + if (!n) { + printf("vmnoutput: mbuf allocation failed\n"); + m_freem(m); + return ENOBUFS; + } + + if (m->m_pkthdr.len <= maxlen) { + m_copydata(m, 0, m->m_pkthdr.len, mtod(n, caddr_t)); + n->m_len = m->m_pkthdr.len; + n->m_next = NULL; + m_freem(m); + } else { + m_copydata(m, 0, maxlen, mtod(n, caddr_t)); + m_adj(m, maxlen); + n->m_len = maxlen; + n->m_next = m; + m->m_flags &= ~M_PKTHDR; + } + m = n; + } +#endif + + ifp->if_opackets++; + ifp->if_obytes += m->m_pkthdr.len; + + switch (dst->sa_family) { + +#ifdef INET + case AF_INET: + ifq = &ipintrq; + isr = NETISR_IP; + break; +#endif + default: + printf("%s: can't handle af%d\n", ifp->if_xname, + dst->sa_family); + m_freem(m); + return (EAFNOSUPPORT); + } + + { + u_int8_t buf[VMNMTU]; + m_copydata(m, 0, m->m_pkthdr.len, buf); + lilyvm_call (LILYVM_CALL_VMN_WRITE, buf, m->m_pkthdr.len); + } + IF_DROP (ifq); + m_freem (m); + return (0); +} + +/* ARGSUSED */ +void +vmnrtrequest(cmd, rt, info) + int cmd; + struct rtentry *rt; + struct rt_addrinfo *info; +{ + if (rt && rt->rt_rmx.rmx_mtu > VMNMTU) + rt->rt_rmx.rmx_mtu = VMNMTU; + +} + +/* + * Process an ioctl request. + */ +/* ARGSUSED */ +int +vmnioctl(ifp, cmd, data) + struct ifnet *ifp; + u_long cmd; + caddr_t data; +{ + struct ifaddr *ifa; + struct ifreq *ifr; + int error = 0; + + switch (cmd) { + + case SIOCSIFADDR: + ifp->if_flags |= IFF_UP; + ifa = (struct ifaddr *)data; + if (ifa != 0 /*&& ifa->ifa_addr->sa_family == AF_ISO*/) + ifa->ifa_rtrequest = lortrequest; + /* + * Everything else is done at a higher level. + */ + break; + + case SIOCADDMULTI: + case SIOCDELMULTI: + ifr = (struct ifreq *)data; + if (ifr == 0) { + error = EAFNOSUPPORT; /* XXX */ + break; + } + switch (ifr->ifr_addr.sa_family) { + +#ifdef INET + case AF_INET: + break; +#endif + + default: + error = EAFNOSUPPORT; + break; + } + break; + + default: + error = EINVAL; + } + return (error); +}