Subject: Re: 2.1 Kernels do not boot
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Alex Pelts <alexp@broadcom.com>
List: port-cobalt
Date: 11/24/2005 12:13:24
Izumi,
The patched kernel that you provided worked! It boots just fine on my
Qube. Than you so much for that! Next I will try your patch. Is it
possible to include the patch in the main source?
So far I could successfuly create VmWare virtual machine, populate it
with NetBSD i386 and serve nfs root and dhcp out of it. Qube boots
nicely and it could serve as a recovery and install environment. Now I
just need to work out the details and package it nicely.
Thanks,
Alex
Izumi Tsutsui wrote:
> In article <43841337.2090302@broadcom.com>
> alexp@broadcom.com wrote:
>
>
>>>I'll try to build INSTALL-like kernel on 2.x and check how it goes
>>>on my RaQ2. If it works, I'll send a pullup request for netbsd-2 branch.
>>
>>Thanks for that.
>
>
> Okay, it looks there is a problem around console initialization.
> (consinit() called more than once?)
> Please try the attached patch (for netbsd-2) or this kernel:
> http://www.ceres.dti.ne.jp/~tsutsui/netbsd/netbsd-cobalt-INSTALL-2.1_STABLE.gz
>
>
>>>I see, maybe the way to go is to add kloader(4) support to
>>>cobalt kernels. It should be trivial though I have no idea
>>>how much work is needed for now.
>>
>>I will look in to that, I am curious about that too.
>
>
> Maybe src/sys/arch/hpcmips/hpcmips/kloader* files would be a good start.
>
>
>>I did use complete 2.1 userland that I downloaded from netbsd torrent. I
>>downloaded iso image and used that to install 2.1
>>The config crashes like this - when I try to run it with or without
>>parameters it dumps core with following message:
>>Bus error (core dumped)
>
>
> Hmm, does it always crash with the same error?
> What is the kernel version (uname -a)?
> What do ktrace(1)/kdump(1) say on the command?
> ---
> Izumi Tsutsui
>
>
> --- sys/arch/cobalt/cobalt/console.c.orig 2004-01-07 21:43:43.000000000 +0900
> +++ sys/arch/cobalt/cobalt/console.c 2005-11-23 15:16:47.000000000 +0900
> @@ -29,15 +29,9 @@
> __KERNEL_RCSID(0, "$NetBSD: console.c,v 1.7 2004/01/07 12:43:43 cdi Exp $");
>
> #include <sys/param.h>
> -#include <sys/user.h>
> -#include <sys/uio.h>
> #include <sys/systm.h>
> -#include <sys/kernel.h>
> #include <sys/device.h>
> #include <sys/conf.h>
> -#include <sys/proc.h>
> -#include <sys/tty.h>
> -#include <sys/termios.h>
>
> #include <machine/bus.h>
> #include <machine/nvram.h>
> @@ -45,71 +39,33 @@
>
> #include <dev/cons.h>
>
> -#include <dev/ic/comreg.h>
> -#include <dev/ic/comvar.h>
> +#include <cobalt/dev/com_mainbusvar.h>
>
> -#include "com.h"
> +#include "com_mainbus.h"
> #include "nullcons.h"
>
> -dev_type_cnprobe(comcnprobe);
> -dev_type_cninit(comcninit);
> -
> int console_present = 0; /* Do we have a console? */
>
> struct consdev constab[] = {
> -#if NCOM > 0
> - { comcnprobe, comcninit, },
> +#if NCOM_MAINBUS > 0
> + { com_mainbus_cnprobe, com_mainbus_cninit,
> + NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD },
> #endif
> #if NNULLCONS > 0
> - { nullcnprobe, nullcninit },
> + { nullcnprobe, nullcninit,
> + NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD },
> #endif
> - { 0 }
> + { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, CN_DEAD }
> };
>
> -#if NCOM > 0
> -#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
> -
> -void
> -comcnprobe(cn)
> - struct consdev *cn;
> -{
> - struct btinfo_flags *bi_flags;
> -
> - /*
> - * Linux code has a comment that serial console must be probed
> - * early, otherwise the value which allows to detect serial port
> - * could be overwritten. Okay, probe here and record the result
> - * for the future use.
> - *
> - * Note that if the kernel was booted with a boot loader,
> - * the latter *has* to provide a flag indicating whether console
> - * is present or not due to the reasons outlined above.
> - */
> - if ( (bi_flags = lookup_bootinfo(BTINFO_FLAGS)) == NULL) {
> - /* No boot information, probe console now */
> - console_present = *(volatile u_int32_t *)
> - MIPS_PHYS_TO_KSEG1(0x0020001c);
> - } else {
> - /* Get the value determined by the boot loader. */
> - console_present = bi_flags->bi_flags & BI_SERIAL_CONSOLE;
> - }
> -
> - cn->cn_pri = (console_present != 0) ? CN_NORMAL : CN_DEAD;
> -}
> -
> -void
> -comcninit(cn)
> - struct consdev *cn;
> -{
> -
> - comcnattach(0, 0x1c800000, 115200, COM_FREQ * 10, COM_TYPE_NORMAL,
> - CONMODE);
> -}
> -#endif
> -
> void
> consinit()
> {
> + static int initted;
> +
> + if (initted)
> + return;
> + initted = 1;
>
> cninit();
> }
> --- sys/arch/cobalt/conf/files.cobalt.orig 2003-10-18 03:20:10.000000000 +0900
> +++ sys/arch/cobalt/conf/files.cobalt 2005-11-23 15:16:43.000000000 +0900
> @@ -13,7 +13,7 @@
> file arch/cobalt/cobalt/cpu.c cpu
>
> attach com at mainbus with com_mainbus
> -file arch/cobalt/dev/com_mainbus.c com_mainbus
> +file arch/cobalt/dev/com_mainbus.c com_mainbus needs-flag
>
> device panel: hd44780
> attach panel at mainbus
> --- /dev/null 2005-11-23 15:04:16.000000000 +0900
> +++ sys/arch/cobalt/conf/INSTALL 2005-11-23 14:56:35.000000000 +0900
> @@ -0,0 +1,320 @@
> +# $NetBSD$
> +#
> +# INSTALL -- installation and rescue kernel.
> +#
> +# This kernel should be derived from GENERIC with most features
> +# commented out to shoehorn into Cobalt kernel size limitations.
> +#
> +
> +include "arch/cobalt/conf/std.cobalt"
> +
> +options INCLUDE_CONFIG_FILE # embed config file in kernel binary
> +
> +#ident "INSTALL-$Revision$"
> +
> +makeoptions COPTS="-Os -mmemcpy"
> +
> +maxusers 32
> +
> +# Standard system options
> +options KTRACE # system call tracing support
> +options SYSTRACE # system call vetting via systrace(1)
> +options SYSVMSG # System V message queues
> +options SYSVSEM # System V 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 shared memory
> +#options SHMMAXPGS=1024 # 1024 pages is the default
> +options P1003_1B_SEMAPHORE # p1003.1b semaphore support
> +#options LKM # loadable kernel modules
> +#options NTP # network time protocol
> +options USERCONF # userconf(4) support
> +#options PIPE_SOCKETPAIR # smaller, but slower pipe(2)
> +#options SYSCTL_INCLUDE_DESCR # Include sysctl descriptions in kernel
> +
> +# Enable experimental buffer queue strategy for better responsiveness under
> +# high disk I/O load. Use it with caution - it's not proven to be stable yet.
> +#options NEW_BUFQ_STRATEGY
> +
> +# Debugging options
> +#options DIAGNOSTIC # extra kernel sanity checking
> +#options DEBUG # extra kernel debugging support
> +#options KMEMSTATS # kernel memory statistics (vmstat -m)
> +options DDB # kernel dynamic debugger
> +#options DDB_HISTORY_SIZE=100 # enable history editing in DDB
> +#makeoptions DEBUG="-g" # compile full symbol table
> +
> +# Compatibility options
> +options COMPAT_43 # compatibility with 4.3BSD binaries
> +#options COMPAT_09 # NetBSD 0.9 binary compatibility
> +#options COMPAT_10 # NetBSD 1.0 binary compatibility
> +#options COMPAT_11 # NetBSD 1.1 binary compatibility
> +#options COMPAT_12 # NetBSD 1.2 binary compatibility
> +#options COMPAT_13 # NetBSD 1.3 binary compatibility
> +#options COMPAT_14 # NetBSD 1.4 binary compatibility
> +options COMPAT_16 # NetBSD 1.6 binary compatibility
> +#options EXEC_ECOFF # exec ECOFF binaries
> +#options COMPAT_ULTRIX # binary compatibility with Ultrix
> +#options TCP_COMPAT_42 # 4.2BSD TCP/IP bug compat. Not recommended.
> +
> +# File systems
> +file-system FFS # Berkeley Fast Filesystem
> +file-system EXT2FS # second extended file system (linux)
> +file-system NFS # Sun NFS-compatible filesystem client
> +#file-system KERNFS # kernel data-structure filesystem
> +#file-system NULLFS # NULL layered filesystem
> +#file-system OVERLAY # overlay file system
> +file-system MFS # memory-based filesystem
> +file-system FDESC # user file descriptor filesystem
> +#file-system UMAPFS # uid/gid remapping filesystem
> +#file-system LFS # Log-based filesystem (still experimental)
> +#file-system PORTAL # portal filesystem (still experimental)
> +#file-system PROCFS # /proc
> +#file-system CD9660 # ISO 9660 + Rock Ridge file system
> +#file-system UNION # union file system
> +#file-system MSDOSFS # MS-DOS FAT filesystem(s).
> +#file-system CODA # Coda File System; also needs vcoda (below)
> +
> +# File system options
> +#options NFSSERVER # Sun NFS-compatible filesystem server
> +#options QUOTA # FFS quotas
> +#options FFS_EI # FFS Endian Independant support
> +#options SOFTDEP # FFS soft updates support.
> +#options EXT2FS_SYSTEM_FLAGS # makes ext2fs file flags (append and
> + # immutable) behave as system flags.
> +
> +# Networking options
> +#options GATEWAY # IP packet forwarding
> +options INET # Internet protocols
> +#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 # packet forwarding of multicast packets
> +#options NS # Xerox NS networking
> +#options NSIP # Xerox NS tunneling over IP
> +#options ISO,TPIP # OSI networking
> +#options EON # OSI tunneling over IP
> +#options CCITT,LLC,HDLC # X.25
> +#options NETATALK # AppleTalk (over Ethernet) protocol
> +#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
> +
> +#options ALTQ # Manipulate network interfaces' output queues
> +#options ALTQ_BLUE # Stochastic Fair Blue
> +#options ALTQ_CBQ # Class-Based Queueing
> +#options ALTQ_CDNR # Diffserv Traffic Conditioner
> +#options ALTQ_FIFOQ # First-In First-Out Queue
> +#options ALTQ_FLOWVALVE # RED/flow-valve (red-penalty-box)
> +#options ALTQ_HFSC # Hierarchical Fair Service Curve
> +#options ALTQ_LOCALQ # Local queueing discipline
> +#options ALTQ_PRIQ # Priority Queueing
> +#options ALTQ_RED # Random Early Detection
> +#options ALTQ_RIO # RED with IN/OUT
> +#options ALTQ_WFQ # Weighted Fair Queueing
> +
> +# These options enable verbose messages for several subsystems.
> +# Warning, these may compile large string tables into the kernel!
> +#options PCIVERBOSE # verbose PCI device autoconfig messages
> +#options PCI_CONFIG_DUMP # verbosely dump PCI config space
> +#options SCSIVERBOSE # human readable SCSI error messages
> +#options MIIVERBOSE # verbose PHY autoconfig messages
> +
> +options NFS_BOOT_DHCP
> +
> +config netbsd root on ? type ?
> +
> +mainbus0 at root
> +
> +cpu0 at mainbus?
> +
> +com0 at mainbus? addr 0x1c800000 level 3
> +options COM16650
> +
> +panel0 at mainbus? addr 0x1f000000
> +
> +gt0 at mainbus? addr 0x14000000
> +
> +pci* at gt0
> +pchb* at pci? dev ? function ?
> +pcib* at pci? dev ? function ?
> +
> +# Cryptographic Devices
> +
> +# PCI cryptographic devices
> +#hifn* at pci? dev ? function ? # Hifn 7755/7811/795x
> +#ubsec* at pci? dev ? function ? # Broadcom 5501/5601/580x/582x
> +
> +# PCI serial/parallel interfaces
> +#puc* at pci? dev ? function ? # PCI "universal" comm. cards
> +#com* at puc? port ?
> +#lpt* at puc? port ?
> +#cy* at pci? dev ? function ? # Cyclades Cyclom-Y serial cards
> +
> +# PCI SCSI controllers
> +#adv* at pci? dev ? function ? # AdvanSys 1200[A,B], 9xx[U,UA]
> +#adw* at pci? dev ? function ? # AdvanSys 9xxUW 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/FC
> +#siop* at pci? dev ? function ? # NCR 53c8xx SCSI
> +#esiop* at pci? dev ? function ? # NCR 53c82s75xx SCSI and newer
> +#pcscp* at pci? dev ? function ? # AMD 53c974 PCscsi-PCI SCSI
> +
> +# SCSI bus support
> +#scsibus* at adv?
> +#scsibus* at adw?
> +#scsibus* at ahc?
> +#scsibus* at bha?
> +#scsibus* at dpt?
> +#scsibus* at isp?
> +#scsibus* at siop?
> +#scsibus* at esiop?
> +#scsibus* at pcscp?
> +
> +# 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
> +#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 # GENERIC pciide driver
> +acardide* at pci? dev ? function ? # Acard IDE controllers
> +aceride* at pci? dev ? function ? # Acer Lab IDE controllers
> +artsata* at pci? dev ? function ? # Intel i31244 SATA controller
> +cmdide* at pci? dev ? function ? # CMD tech IDE controllers
> +cypide* at pci? dev ? function ? # Cypress IDE controllers
> +hptide* at pci? dev ? function ? # Triones/HighPoint IDE controllers
> +optiide* at pci? dev ? function ? # Opti IDE controllers
> +#piixide* at pci? dev ? function ? # Intel IDE controllers
> +pdcide* at pci? dev ? function ? # Promise IDE controllers
> +pdcsata* at pci? dev ? function ? # Promise SATA150 controllers
> +satalink* at pci? dev ? function ? # SiI SATALink controllers
> +siside* at pci? dev ? function ? # SiS IDE controllers
> +slide* at pci? dev ? function ? # Symphony Labs IDE controllers
> +viaide* at pci? dev ? function ? # VIA/AMD/Nvidia IDE controllers
> +
> +# ATA bus
> +atabus* at ata?
> +
> +# 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 atabus? drive ? flags 0x0000
> +
> +# PCI network interfaces
> +#en* at pci? dev ? function ? # ENI/Adaptec ATM
> +#ep* at pci? dev ? function ? # 3Com 3c59x
> +#ex* at pci? dev ? function ? # 3Com 90x[BC]
> +#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 PRO10+/100B
> +#le* at pci? dev ? function ? # PCnet-PCI Ethernet
> +#ne* at pci? dev ? function ? # NE2000-compatible Ethernet
> +#ntwoc* at pci? dev ? function ? # Riscom/N2 PCI Sync Serial
> +#sip* at pci? dev ? function ? # SiS 900 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
> +#lmc* at pci? dev ? function ? # Lan Media Corp SSI/HSSI/DS3
> +#rtk* at pci? dev ? function ? # Realtek 8129/8139
> +
> +# MII/PHY support
> +#exphy* at mii? phy ? # 3Com internal PHYs
> +#icsphy* at mii? phy ? # ICS189x PHYs
> +#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
> +#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
> +
> +# PCI audio devices
> +#clcs* at pci? dev ? function ? # Cirrus Logic CS4280
> +#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
> +#sbl* at pci? dev ? function ? # SoundBlaster Live!
> +#sv* at pci? dev ? function ? # S3 SonicVibes
> +
> +# Pseudo-devices
> +
> +#pseudo-device crypto # opencrypto framework
> +
> +# Disk/mass storage pseudo-devices
> +#pseudo-device ccd 4 # concatenated disk devices
> +#pseudo-device cgd 4 # cryptographic disk devices
> +#pseudo-device raid 8 # RAIDframe disk driver
> +#options RAID_AUTOCONFIG # auto-configuration of RAID
> +# 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 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 pppoe # PPP over Ethernet (RFC 2516)
> +#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 gif 4 # RFC1933 tunnel
> +#pseudo-device faith 1 # IPv[46] tcp relay translation
> +#pseudo-device stf 1 # 6to4 IPv6 over IPv4 encapsulation
> +#pseudo-device vlan # IEEE 802.1q encapsulation
> +#pseudo-device bridge # simple inter-network bridging
> +#options BRIDGE_IPF # bridge uses IP/IPv6 pfil hooks too
> +
> +# Miscellaneous pseudo-devices
> +pseudo-device pty # pseudo-terminals
> +#pseudo-device tb 1 # tablet line discipline
> +#pseudo-device sequencer 1 # MIDI sequencer
> +pseudo-device rnd # /dev/random & kernel generator
> +#options RND_COM # use "com" randomness (BROKEN)
> +pseudo-device clockctl # user control of clock subsystem
> +pseudo-device nullcons # no-op console
> +
> +# A pseudo device needed for Coda # also needs CODA (above)
> +#pseudo-device vcoda 4 # coda minicache <-> venus comm.
> +#pseudo-device ksyms # /dev/ksyms
> --- sys/arch/cobalt/dev/com_mainbus.c.orig 2003-10-18 03:20:10.000000000 +0900
> +++ sys/arch/cobalt/dev/com_mainbus.c 2005-11-23 15:16:37.000000000 +0900
> @@ -30,27 +30,19 @@
>
> #include <sys/param.h>
> #include <sys/systm.h>
> -#include <sys/ioctl.h>
> -#include <sys/select.h>
> -#include <sys/tty.h>
> -#include <sys/proc.h>
> -#include <sys/user.h>
> -#include <sys/conf.h>
> -#include <sys/file.h>
> -#include <sys/uio.h>
> -#include <sys/kernel.h>
> -#include <sys/syslog.h>
> -#include <sys/types.h>
> #include <sys/device.h>
> +#include <sys/termios.h>
>
> #include <machine/autoconf.h>
> #include <machine/intr.h>
> #include <machine/bus.h>
> #include <machine/nvram.h>
> +#include <machine/bootinfo.h>
>
> #include <dev/ic/comreg.h>
> #include <dev/ic/comvar.h>
>
> +#include <cobalt/dev/com_mainbusvar.h>
>
> extern int console_present;
>
> @@ -59,6 +51,9 @@
> void *sc_ih;
> };
>
> +#define COM_MAINBUS_FREQ (COM_FREQ * 10)
> +#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
> +
> static int com_mainbus_probe(struct device *, struct cfdata *, void *);
> static void com_mainbus_attach(struct device *, struct device *, void *);
>
> @@ -66,35 +61,34 @@
> com_mainbus_probe, com_mainbus_attach, NULL, NULL);
>
> int
> -com_mainbus_probe(parent, match, aux)
> - struct device *parent;
> - struct cfdata *match;
> - void *aux;
> +com_mainbus_probe(struct device *parent, struct cfdata *match, void *aux)
> {
>
> - return (console_present != 0);
> + return console_present != 0;
> }
>
> -struct com_softc *com0; /* XXX */
> -
> void
> -com_mainbus_attach(parent, self, aux)
> - struct device *parent;
> - struct device *self;
> - void *aux;
> +com_mainbus_attach(struct device *parent, struct device *self, void *aux)
> {
> struct com_mainbus_softc *msc = (void *)self;
> struct com_softc *sc = &msc->sc_com;
> struct mainbus_attach_args *maa = aux;
>
> - sc->sc_ioh = maa->ma_ioh;
> sc->sc_iot = maa->ma_iot;
> sc->sc_iobase = maa->ma_addr;
>
> - sc->sc_frequency = COM_FREQ * 10;
> +#if 0 /* XXX */
> + if (!com_is_console(sc->sc_iot, sc->sc_iobase, &sc->sc_ioh) &&
> + bus_space_map(sc->sc_iot, sc->sc_iobase, COM_NPORTS, 0,
> + &sc->sc_ioh)) {
> + printf(": can't map i/o space\n");
> + return;
> + }
> +#else
> + sc->sc_ioh = maa->ma_ioh;
> +#endif
>
> - /* XXX console check */
> - /* XXX map */
> + sc->sc_frequency = COM_MAINBUS_FREQ;
>
> com_attach_subr(sc);
>
> @@ -102,3 +96,39 @@
>
> return;
> }
> +
> +void
> +com_mainbus_cnprobe(struct consdev *cn)
> +{
> + struct btinfo_flags *bi_flags;
> +
> + /*
> + * Linux code has a comment that serial console must be probed
> + * early, otherwise the value which allows to detect serial port
> + * could be overwritten. Okay, probe here and record the result
> + * for the future use.
> + *
> + * Note that if the kernel was booted with a boot loader,
> + * the latter *has* to provide a flag indicating whether console
> + * is present or not because the value might be overwritten by
> + * the loaded kernel.
> + */
> + if ((bi_flags = lookup_bootinfo(BTINFO_FLAGS)) == NULL) {
> + /* No boot information, probe console now */
> + console_present = *(volatile u_int32_t *)
> + MIPS_PHYS_TO_KSEG1(0x0020001c);
> + } else {
> + /* Get the value determined by the boot loader. */
> + console_present = bi_flags->bi_flags & BI_SERIAL_CONSOLE;
> + }
> +
> + cn->cn_pri = (console_present != 0) ? CN_NORMAL : CN_DEAD;
> +}
> +
> +void
> +com_mainbus_cninit(struct consdev *cn)
> +{
> +
> + comcnattach(0, 0x1c800000, 115200, COM_MAINBUS_FREQ, COM_TYPE_NORMAL,
> + CONMODE);
> +}
> --- /dev/null 2005-11-23 15:04:16.000000000 +0900
> +++ sys/arch/cobalt/dev/com_mainbusvar.h 2005-11-23 15:15:15.000000000 +0900
> @@ -0,0 +1,31 @@
> +/* $NetBSD$ */
> +
> +/*
> + * Copyright (c) 2000 Soren S. Jorvang. 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.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
> + */
> +
> +#include <dev/cons.h>
> +
> +dev_type_cnprobe(com_mainbus_cnprobe);
> +dev_type_cninit(com_mainbus_cninit);
>
>
>