- auxio cleanup and sbus support.

- make GENERIC64 include GENERIC and set the 3 optoins it needs.  suggested
  by hubert feyrer.
- add a comment that we maybe should use the `bpp' driver, not the lpt, on
  the ebus because the `bpp' driver does DMA already.
- ebus_attach_args got a member renamed
This commit is contained in:
mrg 2000-04-15 03:08:12 +00:00
parent e4ca29ac00
commit 2aba26f773
12 changed files with 193 additions and 611 deletions

View File

@ -1,8 +1,8 @@
# $NetBSD: GENERIC,v 1.29 2000/04/13 11:23:14 mrg Exp $
# $NetBSD: GENERIC,v 1.30 2000/04/15 03:08:12 mrg Exp $
include "arch/sparc64/conf/std.sparc64"
#ident "GENERIC-$Revision: 1.29 $"
#ident "GENERIC-$Revision: 1.30 $"
maxusers 32
@ -215,7 +215,8 @@ ebus* at pci? # ebus devices
#### Standard system devices -- all required for a given architecture
## Auxiliary system registers -- We use the OBP for power management
auxio0 at ebus? # auxio registers
auxio* at ebus? # auxio registers
auxio* at sbus? slot ? offset ? # auxio registers
# We also need:
bpp* at sbus? slot ? offset ? # parallel port
@ -305,7 +306,9 @@ uk* at atapibus? drive ? flags 0x0000 # ATAPI unknown
## Floppy controller and drive found on SPARCstations.
# need share with the sparc, and everyone else. needs to use auxio.
#fdc0 at sbus? slot ? offset ?
# actually, the ebus version has (will have) direct access to it's AUXIO
# register space (it is mapped in to fdthree not auxio).
#fdc0 at sbus? slot ? offset ? # SUNW,fdtwo
#fdc0 at ebus? # fdthree
#fd* at fdc0 # the drive itself

View File

@ -1,451 +1,9 @@
# $NetBSD: GENERIC64,v 1.12 2000/04/13 11:23:14 mrg Exp $
# $NetBSD: GENERIC64,v 1.13 2000/04/15 03:08:12 mrg Exp $
include "arch/sparc64/conf/std.sparc64"
include "arch/sparc64/conf/GENERIC"
#ident "GENERIC-$Revision: 1.12 $"
#ident "GENERIC64-$Revision: 1.13 $"
maxusers 32
## System kernel for a 64-bit configuration. See options(4) for more detail.
# Options for variants of the Sun SPARC architecure.
# We currently support three architecture types; at least one is required.
options SUN4U # sun4u - Ultra 140 and 170
options TRAPWIN
options __ELF__ # we use elf
options _LP64 # we're using a 64-bit compiler
## System options specific to the sparc machine type
## Use a faster console than the PROM's slow drawing routines. Not needed
## for headless (no framebuffer) machines.
# XXX broken on sparc64
#options RASTERCONSOLE # fast rasterop console
#options FONT_GALLANT12x22 # the console font
#options FONT_BOLD8x16 # a somewhat smaller font
#### System options that are the same for all ports
## Root device configuration: change the ?'s if you are going to use a
## nonstandard root partition (other than where the kernel is booted from)
## and/or nonstandard root type (not ffs or nfs). Normally this can be
## automagically determined at boot time.
config netbsd root on ? type ?
## UVM options.
#options UVM_PAGE_TRKOWN
#options UVMHIST
#options UVMHIST_PRINT # Loud!
## System call tracing (see ktrace(1)).
options KTRACE
## Collect statistics on kernel malloc's and free's. This does have a
## significant performance hit on slower machines, so it is intended for
## diagnostic use only.
#options KMEMSTATS
## System V compatible IPC subsystem. (msgctl(2), semctl(2), and shmctl(2))
options SYSVMSG # System V message queues
options SYSVSEM # System V semaphores
options SYSVSHM # System V shared memory
#options SHMMAXPGS=1024 # 1024 pages is the default
## Loadable kernel module support; still under development.
options LKM
## NFS boot options; default on sparc is the bootparam protocol
options NFS_BOOT_BOOTPARAM
#options NFS_BOOT_BOOTP
#options NFS_BOOT_DHCP
#### Debugging options
## The DDB in-kernel debugger runs at panic (unless DDB_ONPANIC=0), or at
## serial console break or keyboard reset, where the PROM would normally
## intercept. DDB_HISTORY_SIZE adds up/down arrow command history.
# we enable DDB in GENERIC for now.
options DDB # kernel dynamic debugger
options DDB_HISTORY_SIZE=100 # enable history editing in DDB
#options DDB_ONPANIC # see also sysctl(8): `ddb.onpanic'
## You may also use gdb, on another computer connected to this machine over
## a serial port. Both KGDBDEV and KGDBRATE should be specified; KGDBDEV is
## a dev_t encoded device number of the serial port to use.
## (0xc01 = ttya, 0xc02 = ttyb.)
#options KGDB # support for kernel gdb
#options KGDBDEV=0xc01 # kgdb device number (this sample is `ttyb')
#options KGDBRATE=38400 # baud rate
## Compile the kernel with debugging symbols (`netbsd.gdb' is the debug file),
## such that gdb(1) can be used on a kernel coredump.
#makeoptions DEBUG="-g"
## Adds code to the kernel that does internal consistency checks, and will
## cause the kernel to panic if corruption of internal data structures
## is detected.
#options DIAGNOSTIC # extra kernel sanity checking
## Enable (possibly expensive) debugging code that may also display messages
## on the system console
#options DEBUG
## Make SCSI error messages more verbose when explaining their meanings.
options SCSIVERBOSE
options PCIVERBOSE
#options PCI_CONFIG_DUMP # verbosely dump PCI config space
## `INSECURE' turns off the kernel security level (securelevel = 0 always).
## This allows writing to /dev/mem, loading kernel modules while multi-user,
## and other insecurities good only for development work. Do not use this
## option on a production machine.
#options INSECURE
## Allow non-root users to grab /dev/console with programs such as xconsole.
## `xconsole' therefore does not need setuid root with this option enabled.
#options UCONSOLE
## `FDSCRIPTS' allows non-readable but executable scripts by providing a
## pre-opened opaque file to the script interpreter. `SETUIDSCRIPTS',
## which implies FDSCRIPTS, allows scripts to be set-user-id using the same
## opaque file mechanism. Perl calls this "secure setuid scripts."
#options FDSCRIPTS
#options SETUIDSCRIPTS
## Options for compatibility with previous releases foreign system binaries.
## In the cases of COMPAT_SUNOS and COMPAT_SVR4, you may need to set up
## additional user-level utilities or system configuration files. See
## compat_sunos(8) and compat_svr4(8).
options COMPAT_43 # 4.3BSD system interfaces
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_NETBSD32 # NetBSD/sparc binary compatibility
options COMPAT_SUNOS # SunOS 4.x binary compatibility
options COMPAT_SVR4 # SunOS 5.x binary compatibility
#options COMPAT_AOUT # NetBSD/sparc compat support
options EXEC_AOUT # execve(2) support for a.out binaries
options EXEC_ELF32 # Exec module for SunOS 5.x binaries.
options EXEC_ELF64 # Exec module for sparc64 & SunOs 5.x binaries.
#options SYSCALL_DEBUG
## File systems. You probably need at least one of FFS or NFS.
file-system FFS # Berkeley Fast Filesystem
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 options.
options NFSSERVER # Sun NFS-compatible filesystem server
options QUOTA # FFS quotas
#options FFS_EI # FFS Endian Independent support
#options SOFTDEP # FFS soft updates support.
# Pull in config fragments for kernel crypto. This is required for
# options IPSEC etc. to work. If you want to run with IPSEC, uncomment
# one of these, based on whether you use crypto-us or crypto-intl, and
# adjust the prefixes as necessary.
#prefix ../crypto-us/sys
#cinclude "conf/files.crypto-us"
#prefix
#prefix ../crypto-intl/sys
#cinclude "conf/files.crypto-intl"
#prefix
## Network protocol support. In most environments, INET is required.
options INET # IP (Internet Protocol) v4
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 TCP_COMPAT_42 # 4.2BSD IP implementation compatibility
#options GATEWAY # packet forwarding ("router switch")
options MROUTING # packet forwarding of multicast packets
#options DIRECTED_BROADCAST # allow broadcasts through routers
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 packet switched protocol
options NETATALK # AppleTalk (over Ethernet) protocol
options NTP # Network Time Protocol in-kernel support
#options PPS_SYNC # Add serial line synchronization for NTP
options PFIL_HOOKS # Add pfil(9) hooks, intended for custom LKMs.
options IPFILTER_LOG # Add ipmon(8) logging for ipfilter device
options PPP_BSDCOMP # Add BSD compression to ppp device
options PPP_DEFLATE # Add deflate (libz) compression to ppp device
options PPP_FILTER # Add active filters for ppp (via bpf)
#### Main bus and CPU .. all systems.
mainbus0 at root
cpu0 at mainbus0
#### Bus types found on SPARC systems.
sbus0 at mainbus0 # Ultra 1
#upa0 at mainbus0 # Ultra 1E, Ultra 2, Ex0000
psycho* at mainbus0 # Darwin, Ultra5
pci* at psycho?
pci* at simba?
simba* at pci? dev ? function ? # `APB' support.
ebus* at pci? # ebus devices
#### Standard system devices -- all required for a given architecture
## Auxiliary system registers -- We use the OBP for power management
auxio0 at ebus? # auxio registers
# We also need:
bpp* at sbus? slot ? offset ? # parallel port
lpt* at ebus? # parallel port
## Mostek clock found on 4/300, sun4c, sun4m and sun4u systems.
## The Mostek clock NVRAM is the "eeprom" on sun4/300 systems.
clock* at sbus? slot ? offset ?
clock* at ebus?
## Timer chip found on 4/300, sun4c, sun4m and (some) sun4u systems.
timer* at mainbus0 # sun4c
#### Serial port configuration
## Zilog 8530 serial chips. Each has two-channels.
## zs0 is ttya and ttyb. zs1 is the keyboard and mouse.
zs0 at sbus? slot ? offset ?
zstty0 at zs0 channel 0 # ttya
zstty1 at zs0 channel 1 # ttyb
zs1 at sbus? slot ? offset ?
kbd0 at zs1 channel 0 # keyboard
ms0 at zs1 channel 1 # mouse
## PCI machines have serial ports:
## Siemens SAB82532 controller: ttya and ttyb (`su'; sab)
## Part of NS PC87332VLJ Super I/O controller: kbd/mouse (`se'; com)
## These are two SAB82532 controllers
#sab0 at ebus? # ttya/ttyb
#sabtty0 at sab0 channel 0 # ttya
#sabtty1 at sab0 channel 1 # ttyb
## Part of a PC87332VLJ?
#ucom0 at ebus? addr 0x3083f8 # `com' driver
#ucom1 at ebus? addr 0x3062f8 #
#ucom0 at ebus? # `com' driver
#ucom1 at ebus? #
#kbd0 at ucom0 channel 0 # keyboard
#ms0 at ucom1 channel 1 # mouse
#### Disk controllers and disks
## The following flags may be set for the NCR53c94 based esp driver:
## bits 0-7: disable disconnect/reselect for the corresponding target
## bits 8-15: disable synchronous negotiation for target [bit-8]
## sun4u on-board SCSI, and FSBE/S SBus SCSI cards, an NCR53c94 or
## equivalent behind an LSI Logic DMA controller
dma* at sbus? slot ? offset ? # SBus
esp* at dma? flags 0x0000 # SBus
scsibus* at esp?
## Qlogic ISP SBus SCSI Card
isp* at sbus? slot ? offset ?
scsibus* at isp?
## FAS support missing
#fas* at sbus? slot ? offset ?
#scsibus* at fas?
## GLM support missing
#sym* at pci? # 53C875 "glm" compatible
#scsibus* at sym?
## These entries find devices on all SCSI busses and assign
## unit numbers dynamically.
sd* at scsibus? target ? lun ? # SCSI disks
st* at scsibus? target ? lun ? # SCSI tapes
cd* at scsibus? target ? lun ? # SCSI CD-ROMs
ch* at scsibus? target ? lun ? # SCSI changer devices
ss* at scsibus? target ? lun ? # SCSI scanners
uk* at scsibus? target ? lun ? # unknown SCSI
# PCI IDE.
pciide* at pci ? dev ? function ? flags 0x0000
wd* at pciide? channel ? drive ? flags 0x0000
atapibus* at pciide? channel ?
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
## Floppy controller and drive found on SPARCstations.
# need share with the sparc, and everyone else. needs to use auxio.
#fdc0 at sbus? slot ? offset ?
#fdc0 at ebus? # fdthree
#fd* at fdc0 # the drive itself
## A disk-like interface to files. Can be used to create floppy, CD,
## miniroot images, etc.
pseudo-device vnd 4
## Concatenated and striped disks; with this, you can create a software-based
## disk array similar to a "RAID 0" setup. See ccd(4).
pseudo-device ccd 4
## RAIDframe disk driver: software RAID driver. See raid(4).
pseudo-device raid 4
#options RAID_AUTOCONFIG # auto-configuration of RAID components
## Memory disk device, used on boot floppies with compressed
## kernel-plus-root-disk images.
pseudo-device md 1
#### Network interfaces
## LANCE Ethernet - an AMD 7990 LANCE behind specialized DMA glue
## Three flavors of additional SBus ethernets are available. One attaches
## directly like the sun4c on-board, one uses the ledma device like the
## sun4m on-board, and one uses the lebuffer device.
ledma0 at sbus? slot ? offset ? # sun4m on-board
le0 at ledma0 # sun4m on-board
le* at sbus? slot ? offset ? # SBus
ledma* at sbus? slot ? offset ? # SBus
le* at ledma? # SBus
lebuffer0 at sbus? slot ? offset ? # SBus
le0 at lebuffer? # SBus
lebuffer* at sbus? slot ? offset ? # SBus
le* at lebuffer? # SBus
## Happy Meal Ethernet
hme* at sbus? slot ? offset ?
hme* at pci? # "hme" compatible
# MII/PHY support
# XXX: only nsphy "tested"
exphy* at mii? phy ? # 3Com internal PHYs
icsphy* at mii? phy ? # Integrated Circuit Systems ICS1890
inphy* at mii? phy ? # Intel 82555 PHYs
lxtphy* at mii? phy ? # Level One LXT-970 PHYs
nsphy* at mii? phy ? # NS83840 PHYs
qsphy* at mii? phy ? # Quality Semiconductor QS6612 PHYs
sqphy* at mii? phy ? # Seeq 80220/80221/80223 PHYs
tlphy* at mii? phy ? # ThunderLAN PHYs
ukphy* at mii? phy ? # generic unknown PHYs
## qec/be, qec/hme
qec* at sbus? slot ? offset ?
be* at qec?
qe* at qec?
## Loopback network interface; required
pseudo-device loop
## SLIP and CSLIP interfaces, for IP over a serial line.
pseudo-device sl 2
## PPP, the successor to SLIP. See pppd(8).
pseudo-device ppp 2
## Starmode Radio IP, a special hardware network device.
pseudo-device strip 1
## Network "tunnel" device, allowing protocol stacks to run in the userland.
## This is used by the third-party user-mode "ppp" program, and others.
pseudo-device tun 4
## Generic L3 over IP tunnel
#pseudo-device gre 2 # generic L3 over IP tunnel
## Berkeley Packet Filter, required to run RARPD. A generic C-language
## interface that allows selective examining of incoming packets.
pseudo-device bpfilter 8
## IP Filter, used in firewall and NAT applications. See ipnat(8) for
## one example of the use of the IP Filter.
pseudo-device ipfilter
## for IPv6
pseudo-device gif 4 # IPv[46] over IPv[46] tunnel (RFC1933)
#pseudo-device faith 1 # IPv[46] tcp relay translation i/f
#### Audio and video devices
## /dev/audio support (`audiocs' plus `audio')
##
audiocs* at sbus? slot ? offset ? # SUNW,CS4231
audio* at audiocs?
## Sun "bwtwo" black and white framebuffer, found on sun4, sun4c, and sun4m
## systems. If your sun4 system has a cgfour installed in the P4 slot,
## the P4 entries for "bwtwo" will attach to the overlay plane of the
## "cgfour".
#bwtwo0 at sbus? slot ? offset ? # sun4c and sun4m
#bwtwo* at sbus? slot ? offset ? #
## Sun "cgthree" Sbus color framebuffer
#cgthree0 at sbus? slot ? offset ?
#cgthree* at sbus? slot ? offset ?
## Sun "cgsix" accelerated color framebuffer.
cgsix0 at sbus? slot ? offset ?
cgsix* at sbus? slot ? offset ?
## Sun "tcx" accelerated color framebuffer.
#tcx0 at sbus? slot ? offset ?
#tcx* at sbus? slot ? offset ?
# Sun "cgfourteen" accelerated 24-bit framebuffer.
#cgfourteen0 at obio0 # sun4m
## Sun FFB not supported
#ffb* at upa?
#### Other device configuration
## Pseudo ttys, required for network logins and programs like screen.
## 32 is a good number for average systems; you may have as many as you
## like, though 256 is more or less the upper limit. Increasing this
## number still requires you to run /dev/MAKEDEV to create the files
## for the ptys.
pseudo-device pty 64 # pseudo-ttys (for network, etc.)
## Random device, used to implement /dev/random (a source of random noise),
## and generate randomness for some kernel formulae.
## THIS DEVICE IS EXPERIMENTAL; use at your own risk.
pseudo-device rnd

View File

@ -1,4 +1,4 @@
# $NetBSD: files.sparc64,v 1.26 2000/04/05 07:58:44 mrg Exp $
# $NetBSD: files.sparc64,v 1.27 2000/04/15 03:08:12 mrg Exp $
# @(#)files.sparc64 8.1 (Berkeley) 7/19/93
# sparc64-specific configuration info
@ -42,10 +42,6 @@ file arch/sparc64/dev/ebus_bus.c ebus
# network devices MII bus
include "dev/mii/files.mii"
#device auxreg
#attach auxreg at mainbus, sbus
#file arch/sparc64/sparc64/auxreg.c
device clock
attach clock at mainbus, sbus with clock_sbus
attach clock at ebus with clock_ebus
@ -82,12 +78,15 @@ file dev/ic/z8530sc.c zs
#file arch/sparc64/dev/ucom_ebus.c ucom
# XXX bogus; this is in dev/isa/files.isa. fix me please!
# XXX we should attach a `bpp'-style device here rather than
# `lpt' because the `bpp' driver supports DMA.
device lpt
file dev/ic/lpt.c lpt needs-flag
device auxio
attach auxio at ebus with auxio_ebus
file arch/sparc64/dev/auxio_ebus.c auxio_ebus
attach auxio at ebus with auxio_ebus
attach auxio at sbus with auxio_sbus
file arch/sparc64/dev/auxio.c auxio
attach lpt at ebus with lpt_ebus
file arch/sparc64/dev/lpt_ebus.c lpt_ebus

View File

@ -1,4 +1,4 @@
/* $NetBSD: auxio_ebus.c,v 1.4 2000/04/13 09:53:49 mrg Exp $ */
/* $NetBSD: auxio.c,v 1.1 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 2000 Matthew R. Green
@ -29,7 +29,7 @@
*/
/*
* AUXIO registers support on the Ebus2.
* AUXIO registers support on the sbus & ebus2.
*/
#include <sys/param.h>
@ -43,26 +43,27 @@
#include <sparc64/dev/ebusreg.h>
#include <sparc64/dev/ebusvar.h>
#include <sparc64/dev/sbusvar.h>
#include <sparc64/dev/auxioreg.h>
#include <sparc64/dev/auxiovar.h>
#define AUXIO_ROM_NAME "auxio"
/*
* ebus code.
*/
int auxio_ebus_match __P((struct device *, struct cfdata *, void *));
void auxio_ebus_attach __P((struct device *, struct device *, void *));
int auxio_sbus_match __P((struct device *, struct cfdata *, void *));
void auxio_sbus_attach __P((struct device *, struct device *, void *));
struct cfattach auxio_ebus_ca = {
sizeof(struct device), auxio_ebus_match, auxio_ebus_attach
sizeof(struct auxio_softc), auxio_ebus_match, auxio_ebus_attach
};
/*
* We export this structure so that anyone who wishes to fiddle the
* AUXIO registers can.
*
* XXX we need to better design the access here for when there are
* multiple Ebus2's in one system..
*/
struct auxio_registers auxio_registers;
struct cfattach auxio_sbus_ca = {
sizeof(struct auxio_softc), auxio_sbus_match, auxio_sbus_attach
};
int
auxio_ebus_match(parent, cf, aux)
@ -80,59 +81,83 @@ auxio_ebus_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
{
struct auxio_softc *sc = (struct auxio_softc *)self;
struct ebus_attach_args *ea = aux;
int i, first = 1;
/*
* for each of the registers found, if we know the matching
* AUXIO register, set it up.
*/
for (i = 0; i < ea->ea_nregs; i++) {
#define SHOWIT(s) do { \
if (first) { \
first = 0; \
printf(": found"); \
} \
printf(" %s", s); \
} while (0)
if (ea->ea_regs[i].lo == AUXIO_FD) {
SHOWIT("fd");
auxio_registers.auxio_fd.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_fd.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_AUDIO) {
SHOWIT("audio");
auxio_registers.auxio_audio.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_audio.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_POWER) {
SHOWIT("power");
auxio_registers.auxio_power.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_power.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_LED) {
SHOWIT("led");
auxio_registers.auxio_led.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_led.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_PCI) {
SHOWIT("pci");
auxio_registers.auxio_pci.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_pci.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_FREQ) {
SHOWIT("freq");
auxio_registers.auxio_freq.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_freq.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_SCSI) {
SHOWIT("scsi");
auxio_registers.auxio_scsi.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_scsi.hi = ea->ea_regs[i].hi;
} else if (ea->ea_regs[i].lo == AUXIO_TEMP) {
SHOWIT("temp");
auxio_registers.auxio_temp.lo = ea->ea_regs[i].lo;
auxio_registers.auxio_temp.hi = ea->ea_regs[i].hi;
} else {
printf(": unknown auxio register %x.%x",
ea->ea_regs[i].hi, ea->ea_regs[i].lo);
}
if (ea->ea_nregs < 1 || ea->ea_nvaddrs < 1) {
printf(": no registers??\n");
return;
}
if (ea->ea_nregs != 5 || ea->ea_nvaddrs != 5) {
printf(": not 5 (%d) registers, only setting led",
ea->ea_nregs);
sc->sc_flags = AUXIO_LEDONLY|AUXIO_EBUS;
} else {
sc->sc_flags = AUXIO_EBUS;
sc->sc_registers.auxio_pci = (u_int32_t *)(u_long)ea->ea_vaddrs[1];
sc->sc_registers.auxio_freq = (u_int32_t *)(u_long)ea->ea_vaddrs[2];
sc->sc_registers.auxio_scsi = (u_int32_t *)(u_long)ea->ea_vaddrs[3];
sc->sc_registers.auxio_temp = (u_int32_t *)(u_long)ea->ea_vaddrs[4];
}
sc->sc_registers.auxio_led = (u_int32_t *)(u_long)ea->ea_vaddrs[0];
if (!auxio_reg)
auxio_reg = (u_char *)(u_long)ea->ea_vaddrs[0];
printf("\n");
}
int
auxio_sbus_match(parent, cf, aux)
struct device *parent;
struct cfdata *cf;
void *aux;
{
struct sbus_attach_args *sa = aux;
return (strcmp(AUXIO_ROM_NAME, sa->sa_name) == 0);
}
void
auxio_sbus_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
{
struct auxio_softc *sc = (struct auxio_softc *)self;
struct sbus_attach_args *sa = aux;
if (sa->sa_nreg < 1 || sa->sa_npromvaddrs < 1) {
printf(": no registers??\n");
return;
}
if (sa->sa_nreg != 1 || sa->sa_npromvaddrs != 1) {
printf(": not 1 (%d/%d) registers??", sa->sa_nreg, sa->sa_npromvaddrs);
return;
}
/* sbus auxio only has one set of registers */
sc->sc_flags = AUXIO_LEDONLY|AUXIO_SBUS;
sc->sc_registers.auxio_led = (u_int32_t *)(u_long)sa->sa_promvaddr;
if (!auxio_reg)
auxio_reg = (u_char *)(u_long)sa->sa_promvaddr;
printf("\n");
}
/*
* old interface; used by fd driver for now
*/
unsigned int
auxregbisc(bis, bic)
int bis, bic;
{
register int v, s = splhigh();
v = *auxio_reg;
*auxio_reg = ((v | bis) & ~bic) | AUXIO_LED_MB1;
splx(s);
return v;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: auxioreg.h,v 1.2 2000/04/08 03:07:07 mrg Exp $ */
/* $NetBSD: auxioreg.h,v 1.3 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 2000 Matthew R. Green
@ -30,7 +30,9 @@
/*
* The AUXIO registers; their offset in the Ebus2 address space, plus the
* bits for each register.
* bits for each register. Note that the fdthree (FD), SUNW,CS4231 (AUDIO)
* and power (POWER) devices on the Ebus2 have their AUXIO regsiters mapped
* into their own "reg" properties, not the "auxio" device's "reg" properties.
*/
#define AUXIO_FD 0x00720000
#define AUXIO_FD_DENSENSE_INPUT 0x0
@ -45,6 +47,16 @@
#define AUXIO_LED 0x00726000
#define AUXIO_LED_LED 0x0
#define AUXIO_LED_MB1 0xf0 /* must be set on write */
/* XXX: these may be useless on Ebus2 auxio! find out! */
#define AUXIO_LED_FHD 0x20 /* floppy: high density (unreliable?)*/
#define AUXIO_LED_FDC 0x10 /* floppy: diskette was changed */
#define AUXIO_LED_FDS 0x08 /* floppy: drive select */
#define AUXIO_LED_FTC 0x04 /* floppy: drives Terminal Count pin */
#define AUXIO_LED_FEJ 0x02 /* floppy: eject disk */
#if 0
#define AUXIO_LED_LED 0x01 /* front panel LED */
#endif
#define AUXIO_PCI 0x00728000
#define AUXIO_PCI_SLOT0 0x0 /* two bits each */

View File

@ -1,4 +1,4 @@
/* $NetBSD: auxiovar.h,v 1.3 2000/04/13 09:53:49 mrg Exp $ */
/* $NetBSD: auxiovar.h,v 1.4 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 2000 Matthew R. Green
@ -28,20 +28,46 @@
* SUCH DAMAGE.
*/
struct auxio_phys {
u_int32_t hi;
u_int32_t lo;
};
/*
* on sun4u, auxio exists with one register (LED) on the sbus, and 5
* registers on the ebus2 (pci) (LED, PCIMODE, FREQUENCY, SCSI
* OSCILLATOR, and TEMP SENSE.
*
* clients of the auxio registers (eg, blinken lights, or the sbus
* floppy) should search in auxio_cd for their matching auxio register
* (to deal with multiple auxio's that may appear.)
*/
struct auxio_registers {
struct auxio_phys auxio_fd;
struct auxio_phys auxio_audio;
struct auxio_phys auxio_power;
struct auxio_phys auxio_led;
struct auxio_phys auxio_pci;
struct auxio_phys auxio_freq;
struct auxio_phys auxio_scsi;
struct auxio_phys auxio_temp;
#if 0 /* these do not exist on the Ebus2 */
volatile u_int32_t *auxio_fd;
volatile u_int32_t *auxio_audio;
volatile u_int32_t *auxio_power;
#endif
volatile u_int32_t *auxio_led;
volatile u_int32_t *auxio_pci;
volatile u_int32_t *auxio_freq;
volatile u_int32_t *auxio_scsi;
volatile u_int32_t *auxio_temp;
};
extern struct auxio_registers auxio_registers;
struct auxio_softc {
struct device sc_dev;
struct auxio_registers sc_registers;
int sc_flags;
#define AUXIO_LEDONLY 0x1
#define AUXIO_EBUS 0x2
#define AUXIO_SBUS 0x4
};
/*
* XXX: old interfaces. we set auxio_reg the first auxio we attach.
*/
#ifndef _LOCORE
/*
* Copy of AUXIO_REG for the benefit of assembler modules (eg. trap handlers)
* as AUXREG_VA depends on NBPG which is not a constant.
*/
volatile u_char *auxio_reg;
unsigned int auxregbisc __P((int, int));
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: cs4231_ebus.c,v 1.2 2000/04/05 14:23:45 mrg Exp $ */
/* $NetBSD: cs4231_ebus.c,v 1.3 2000/04/15 03:08:13 mrg Exp $ */
/*-
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@ -113,7 +113,7 @@ cs4231_attach_ebus(parent, self, aux)
* Map my registers in, if they aren't already in virtual
* address space.
*/
if (ea->ea_naddrs) {
if (ea->ea_nvaddrs) {
bh = (bus_space_handle_t)ea->ea_vaddrs[0];
} else {
if (ebus_bus_map(ea->ea_bustag, 0,

View File

@ -1,4 +1,4 @@
/* $NetBSD: ebus.c,v 1.6 2000/04/13 14:39:34 mrg Exp $ */
/* $NetBSD: ebus.c,v 1.7 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 1999, 2000 Matthew R. Green
@ -190,17 +190,17 @@ ebus_setup_attach_args(sc, node, ea)
if (rv)
return (rv);
rv = getprop(node, "address", sizeof(u_int32_t), &ea->ea_naddrs,
rv = getprop(node, "address", sizeof(u_int32_t), &ea->ea_nvaddrs,
(void **)&ea->ea_vaddrs);
if (rv != ENOENT) {
if (rv)
return (rv);
if (ea->ea_nregs != ea->ea_naddrs)
if (ea->ea_nregs != ea->ea_nvaddrs)
printf("ebus loses: device %s: %d regs and %d addrs\n",
ea->ea_name, ea->ea_nregs, ea->ea_naddrs);
ea->ea_name, ea->ea_nregs, ea->ea_nvaddrs);
} else
ea->ea_naddrs = 0;
ea->ea_nvaddrs = 0;
if (getprop(node, "interrupts", sizeof(u_int32_t), &ea->ea_nintrs,
(void **)&ea->ea_intrs))

View File

@ -1,4 +1,4 @@
/* $NetBSD: ebusvar.h,v 1.3 2000/04/08 04:33:10 mrg Exp $ */
/* $NetBSD: ebusvar.h,v 1.4 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 1999, 2000 Matthew R. Green
@ -48,7 +48,7 @@ struct ebus_attach_args {
u_int32_t *ea_intrs; /* interrupts */
int ea_nregs; /* number of them */
int ea_naddrs;
int ea_nvaddrs;
int ea_nintrs;
};

View File

@ -1,4 +1,4 @@
/* $NetBSD: fd.c,v 1.14 2000/04/07 16:58:56 thorpej Exp $ */
/* $NetBSD: fd.c,v 1.15 2000/04/15 03:08:13 mrg Exp $ */
/*-
* Copyright (c) 1993, 1994, 1995 Charles M. Hannum.
@ -69,7 +69,6 @@
#include <machine/autoconf.h>
#include <machine/conf.h>
#include <sparc64/sparc64/auxreg.h>
#include <sparc64/dev/fdreg.h>
#include <sparc64/dev/fdvar.h>
@ -270,6 +269,7 @@ static void fdconf __P((struct fdc_softc *));
#define FD_SET_SWINTR send_softint(-1, PIL_FDSOFT, fdc->sc_sih)
/* XXX sun4u */
#define OBP_FDNAME (CPU_ISSUN4M ? "SUNW,fdtwo" : "fd")
int
@ -470,14 +470,10 @@ fdmatch(parent, match, aux)
/* XXX - for now, punt on more than one drive */
return (0);
if (fdc->sc_flags & FDC_82077) {
/* select drive and turn on motor */
*fdc->sc_reg_dor = drive | FDO_FRST | FDO_MOEN(drive);
/* wait for motor to spin up */
delay(250000);
} else {
auxregbisc(AUXIO4C_FDS, 0);
}
/* select drive and turn on motor */
*fdc->sc_reg_dor = drive | FDO_FRST | FDO_MOEN(drive);
/* wait for motor to spin up */
delay(250000);
fdc->sc_nstat = 0;
out_fdc(fdc, NE7CMD_RECAL);
out_fdc(fdc, drive);
@ -511,13 +507,8 @@ fdmatch(parent, match, aux)
#endif
ok = (n == 2 && (fdc->sc_status[0] & 0xf8) == 0x20) ? 1 : 0;
/* turn off motor */
if (fdc->sc_flags & FDC_82077) {
/* deselect drive and turn motor off */
*fdc->sc_reg_dor = FDO_FRST | FDO_DS;
} else {
auxregbisc(0, AUXIO4C_FDS);
}
/* deselect drive and turn motor off */
*fdc->sc_reg_dor = FDO_FRST | FDO_DS;
return (ok);
}
@ -740,27 +731,14 @@ fd_set_motor(fdc)
u_char status;
int n;
if (fdc->sc_flags & FDC_82077) {
status = FDO_FRST | FDO_FDMAEN;
if ((fd = fdc->sc_drives.tqh_first) != NULL)
status |= fd->sc_drive;
status = FDO_FRST | FDO_FDMAEN;
if ((fd = fdc->sc_drives.tqh_first) != NULL)
status |= fd->sc_drive;
for (n = 0; n < 4; n++)
if ((fd = fdc->sc_fd[n]) && (fd->sc_flags & FD_MOTOR))
status |= FDO_MOEN(n);
*fdc->sc_reg_dor = status;
} else {
int on = 0;
for (n = 0; n < 4; n++)
if ((fd = fdc->sc_fd[n]) && (fd->sc_flags & FD_MOTOR))
on = 1;
if (on) {
auxregbisc(AUXIO4C_FDS, 0);
} else {
auxregbisc(0, AUXIO4C_FDS);
}
}
for (n = 0; n < 4; n++)
if ((fd = fdc->sc_fd[n]) && (fd->sc_flags & FD_MOTOR))
status |= FDO_MOEN(n);
*fdc->sc_reg_dor = status;
}
void
@ -954,17 +932,6 @@ fdcstatus(dv, n, s)
{
struct fdc_softc *fdc = (void *)dv->dv_parent;
char bits[64];
#if 0
/*
* A 82072 seems to return <invalid command> on
* gratuitous Sense Interrupt commands.
*/
if (n == 0 && (fdc->sc_flags & FDC_82077)) {
out_fdc(fdc, NE7CMD_SENSEI);
(void) fdcresult(fdc);
n = 2;
}
#endif
/* Just print last status */
n = fdc->sc_nstat;
@ -1918,19 +1885,11 @@ fd_do_eject(fd)
{
struct fdc_softc *fdc = (void *)fd->sc_dv.dv_parent;
if (CPU_ISSUN4C) {
auxregbisc(AUXIO4C_FDS, AUXIO4C_FEJ);
delay(10);
auxregbisc(AUXIO4C_FEJ, AUXIO4C_FDS);
return;
}
if (CPU_ISSUN4M && (fdc->sc_flags & FDC_82077)) {
int dor = FDO_FRST | FDO_FDMAEN | FDO_MOEN(0);
*fdc->sc_reg_dor = dor | FDO_EJ;
delay(10);
*fdc->sc_reg_dor = FDO_FRST | FDO_DS;
return;
}
int dor = FDO_FRST | FDO_FDMAEN | FDO_MOEN(0);
*fdc->sc_reg_dor = dor | FDO_EJ;
delay(10);
*fdc->sc_reg_dor = FDO_FRST | FDO_DS;
return;
}
#ifdef MEMORY_DISK_HOOKS

View File

@ -1,4 +1,4 @@
/* $NetBSD: lpt_ebus.c,v 1.4 2000/04/08 04:33:10 mrg Exp $ */
/* $NetBSD: lpt_ebus.c,v 1.5 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 1999, 2000 Matthew R. Green
@ -89,7 +89,7 @@ lpt_ebus_attach(parent, self, aux)
*
* Use the prom address if there.
*/
if (ea->ea_naddrs)
if (ea->ea_nvaddrs)
sc->sc_ioh = (bus_space_handle_t)ea->ea_vaddrs[0];
else if (ebus_bus_map(sc->sc_iot, 0,
EBUS_PADDR_FROM_REG(&ea->ea_regs[0]),

View File

@ -1,4 +1,4 @@
/* $NetBSD: bsd_fdintr.s,v 1.1.1.1 1998/06/20 04:58:52 eeh Exp $ */
/* $NetBSD: bsd_fdintr.s,v 1.2 2000/04/15 03:08:13 mrg Exp $ */
/*
* Copyright (c) 1995 Paul Kranenburg
@ -34,10 +34,10 @@
#ifndef FDC_C_HANDLER
#include "assym.h"
#include <sparc64/sparc64/intreg.h>
#include <sparc64/sparc64/auxreg.h>
#include <sparc64/sparc64/vaddrs.h>
#include <sparc64/dev/fdreg.h>
#include <sparc64/dev/fdvar.h>
#include <sparc64/dev/auxioreg.h>
#include <machine/asm.h>
/* XXX this goes in a header file -- currently, it's hidden in locore.s */
#define INTREG_ADDR 0xf8002000
@ -149,7 +149,7 @@ nextc:
sethi %hi(_C_LABEL(auxio_reg)), %l6
ld [%l6 + %lo(_C_LABEL(auxio_reg))], %l6
ldub [%l6], %l7
or %l7, AUXIO_MB1|AUXIO_FTC, %l7
or %l7, AUXIO_LED_MB1|AUXIO_LED_FTC, %l7
stb %l7, [%l6]
! we have some time to kill; anticipate on upcoming
@ -159,8 +159,8 @@ nextc:
st %l7, [R_fdc + FDC_NSTAT] ! fdc->sc_nstat = -1;
ldub [%l6], %l7
andn %l7, AUXIO_FTC, %l7
or %l7, AUXIO_MB1, %l7
andn %l7, AUXIO_LED_FTC, %l7
or %l7, AUXIO_LED_MB1, %l7
stb %l7, [%l6]
b resultphase1
nop