Remove support for running in SimOS. The support has rotted over
time and there's no indication that it will improve anytime soon. By removing support for SimOS it is possible to build LINT on Alpha, which is considered more important at the moment. Not objected to on: alpha@
This commit is contained in:
parent
957a6263b6
commit
907cf80fbf
@ -31,8 +31,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/termios.h>
|
||||
|
@ -90,7 +90,6 @@
|
||||
|
||||
#include "opt_compat.h"
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_simos.h"
|
||||
#include "opt_msgbuf.h"
|
||||
#include "opt_maxmem.h"
|
||||
|
||||
@ -477,27 +476,13 @@ alpha_init(pfn, ptb, bim, bip, biv)
|
||||
nobootinfo:
|
||||
bootinfo.ssym = (u_long)&_end;
|
||||
bootinfo.esym = (u_long)&_end;
|
||||
#ifdef SIMOS
|
||||
{
|
||||
char* p = (char*)bootinfo.ssym + 8;
|
||||
if (p[EI_MAG0] == ELFMAG0
|
||||
&& p[EI_MAG1] == ELFMAG1
|
||||
&& p[EI_MAG2] == ELFMAG2
|
||||
&& p[EI_MAG3] == ELFMAG3) {
|
||||
bootinfo.ssym = (u_long) p;
|
||||
bootinfo.esym = (u_long)p + *(u_long*)(p - 8);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
bootinfo.hwrpb_phys = ((struct rpb *)HWRPB_ADDR)->rpb_phys;
|
||||
bootinfo.hwrpb_size = ((struct rpb *)HWRPB_ADDR)->rpb_size;
|
||||
init_prom_interface((struct rpb *)HWRPB_ADDR);
|
||||
prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo.boot_flags,
|
||||
sizeof bootinfo.boot_flags);
|
||||
#ifndef SIMOS
|
||||
prom_getenv(PROM_E_BOOTED_FILE, bootinfo.booted_kernel,
|
||||
sizeof bootinfo.booted_kernel);
|
||||
#endif
|
||||
prom_getenv(PROM_E_BOOTED_DEV, bootinfo.booted_dev,
|
||||
sizeof bootinfo.booted_dev);
|
||||
}
|
||||
@ -634,12 +619,6 @@ alpha_init(pfn, ptb, bim, bip, biv)
|
||||
|
||||
kernstartpfn = atop(ALPHA_K0SEG_TO_PHYS(kernstart));
|
||||
kernendpfn = atop(ALPHA_K0SEG_TO_PHYS(kernend));
|
||||
#ifdef SIMOS
|
||||
/*
|
||||
* SimOS console puts the bootstrap stack after kernel
|
||||
*/
|
||||
kernendpfn += 4;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Find out how much memory is available, by looking at
|
||||
@ -1092,7 +1071,6 @@ bzero(void *buf, size_t len)
|
||||
void
|
||||
DELAY(int n)
|
||||
{
|
||||
#ifndef SIMOS
|
||||
unsigned long pcc0, pcc1, curcycle, cycles;
|
||||
int usec;
|
||||
|
||||
@ -1129,7 +1107,6 @@ DELAY(int n)
|
||||
}
|
||||
pcc0 = pcc1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -27,8 +27,6 @@
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
|
||||
/* __KERNEL_RCSID(0, "$NetBSD: prom.c,v 1.22 1998/02/27 04:03:00 thorpej Exp $"); */
|
||||
@ -99,18 +97,12 @@ static int alpha_console;
|
||||
void
|
||||
init_bootstrap_console()
|
||||
{
|
||||
#ifndef SIMOS
|
||||
char buf[4];
|
||||
#endif
|
||||
|
||||
init_prom_interface(hwrpb);
|
||||
|
||||
#ifdef SIMOS
|
||||
alpha_console = 0;
|
||||
#else
|
||||
prom_getenv(PROM_E_TTY_DEV, buf, 4);
|
||||
alpha_console = buf[0] - '0';
|
||||
#endif
|
||||
promcnattach(alpha_console);
|
||||
}
|
||||
|
||||
@ -194,20 +186,6 @@ enter_prom()
|
||||
s = intr_disable();
|
||||
|
||||
if (!prom_mapped) {
|
||||
#ifdef SIMOS
|
||||
/*
|
||||
* SimOS console uses floating point.
|
||||
*/
|
||||
if (curthread != PCPU_GET(fpcurthread)) {
|
||||
alpha_pal_wrfen(1);
|
||||
if (PCPU_GET(fpcurthread)) {
|
||||
savefpstate(&PCPU_GET(fpcurthread)->td_pcb->pcb_fp);
|
||||
PCPU_GET(fpcurthread)->td_pcb->pcb_hw.apcb_flags &= ~ALPHA_PCB_FLAGS_FEN;
|
||||
}
|
||||
PCPU_SET(fpcurthread, curthread);
|
||||
restorefpstate(&PCPU_GET(fpcurthread)->td_pcb->pcb_fp);
|
||||
}
|
||||
#endif
|
||||
if (!pmap_uses_prom_console())
|
||||
panic("enter_prom");
|
||||
lev1map = rom_lev1map(); /* XXX */
|
||||
|
@ -31,7 +31,6 @@
|
||||
/* #include "opt_fix_unaligned_vax_fp.h" */
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_ktrace.h"
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
@ -380,11 +379,7 @@ trap(a0, a1, a2, entry, framep)
|
||||
* might have set a breakpoint.
|
||||
*/
|
||||
if (a0 == ALPHA_IF_CODE_BUGCHK ||
|
||||
a0 == ALPHA_IF_CODE_BPT
|
||||
#ifdef SIMOS
|
||||
|| a0 == ALPHA_IF_CODE_GENTRAP
|
||||
#endif
|
||||
) {
|
||||
a0 == ALPHA_IF_CODE_BPT) {
|
||||
if (kdb_trap(a0, a1, a2, entry, framep))
|
||||
goto out;
|
||||
}
|
||||
|
@ -253,7 +253,3 @@ device cardbus
|
||||
|
||||
#####################################################################
|
||||
# SIMULATOR OPTIONS
|
||||
|
||||
# Include support for running under the SIMOS simulator.
|
||||
device simos
|
||||
options SIMOS
|
||||
|
@ -36,7 +36,6 @@
|
||||
*/
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <vm/vm.h>
|
||||
@ -55,11 +54,7 @@ extern db_regs_t ddb_regs; /* register state */
|
||||
|
||||
#define PC_REGS(regs) ((db_addr_t)(regs)->tf_regs[FRAME_PC])
|
||||
|
||||
#ifdef SIMOS
|
||||
#define BKPT_INST 0x000000aa /* gentrap instruction */
|
||||
#else
|
||||
#define BKPT_INST 0x00000080 /* breakpoint instruction */
|
||||
#endif
|
||||
#define BKPT_SIZE (4) /* size of breakpoint inst */
|
||||
#define BKPT_SET(inst) (BKPT_INST)
|
||||
|
||||
@ -67,13 +62,8 @@ extern db_regs_t ddb_regs; /* register state */
|
||||
(ddb_regs.tf_regs[FRAME_PC] -= BKPT_SIZE);
|
||||
|
||||
#define SOFTWARE_SSTEP 1 /* no hardware support */
|
||||
#ifdef SIMOS
|
||||
#define IS_BREAKPOINT_TRAP(type, code) ((type) == ALPHA_KENTRY_IF && \
|
||||
(code) == ALPHA_IF_CODE_GENTRAP)
|
||||
#else
|
||||
#define IS_BREAKPOINT_TRAP(type, code) ((type) == ALPHA_KENTRY_IF && \
|
||||
(code) == ALPHA_IF_CODE_BPT)
|
||||
#endif
|
||||
#define IS_WATCHPOINT_TRAP(type, code) 0
|
||||
|
||||
/*
|
||||
|
@ -58,8 +58,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/kernel.h>
|
||||
@ -123,11 +121,7 @@ struct dwlpx_softc {
|
||||
static driver_intr_t dwlpx_intr;
|
||||
|
||||
static u_int32_t imaskcache[DWLPX_NIONODE][DWLPX_NHOSE][NHPC];
|
||||
#ifdef SIMOS
|
||||
extern void simos_intr(int);
|
||||
#else
|
||||
static void dwlpx_eintr(unsigned long);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Direct-mapped window: 2G at 2G
|
||||
@ -745,16 +739,6 @@ dwlpx_dma_init(struct dwlpx_softc *sc)
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifdef SIMOS
|
||||
static void
|
||||
dwlpx_intr(void *arg)
|
||||
{
|
||||
|
||||
simos_intr(0);
|
||||
}
|
||||
|
||||
#else /* !SIMOS */
|
||||
|
||||
static void
|
||||
dwlpx_intr(void *arg)
|
||||
{
|
||||
@ -842,7 +826,6 @@ dwlpx_eintr(unsigned long vec)
|
||||
REGVAL(PCIA_ERR(i) + sc->sysbase) = hpcs[i].err;
|
||||
}
|
||||
}
|
||||
#endif /* SIMOS */
|
||||
|
||||
static device_method_t dwlpx_methods[] = {
|
||||
/* Device interface */
|
||||
|
@ -36,8 +36,6 @@
|
||||
* found on AlphaServer 8200 and 8400 systems.
|
||||
*/
|
||||
|
||||
#include "opt_simos.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/kernel.h>
|
||||
@ -130,19 +128,9 @@ tlsb_probe(device_t dev)
|
||||
/*
|
||||
* Check for invalid address.
|
||||
*/
|
||||
#ifdef SIMOS
|
||||
if (node != 0 && node != 8) {
|
||||
continue;
|
||||
} else if (node == 0) {
|
||||
tldev = TLDEV_DTYPE_SCPU4;
|
||||
} else {
|
||||
tldev = TLDEV_DTYPE_KFTIA;
|
||||
}
|
||||
#else
|
||||
if (badaddr(TLSB_NODE_REG_ADDR(node, TLDEV), sizeof(u_int32_t)))
|
||||
continue;
|
||||
tldev = TLSB_GET_NODEREG(node, TLDEV);
|
||||
#endif
|
||||
if (tldev == 0) {
|
||||
/* Nothing at this node. */
|
||||
continue;
|
||||
|
@ -1505,7 +1505,6 @@ pci/if_xl.c optional xl
|
||||
pci/intpm.c optional intpm
|
||||
pci/meteor.c count meteor pci nowerror
|
||||
pci/ncr.c optional ncr
|
||||
pci/simos.c optional simos nowerror
|
||||
pci/viapm.c optional viapm
|
||||
pci/xrpu.c optional xrpu
|
||||
posix4/ksched.c optional _kposix_priority_scheduling
|
||||
|
@ -529,9 +529,6 @@ COM_MULTIPORT opt_sio.h
|
||||
BREAK_TO_DEBUGGER opt_comconsole.h
|
||||
ALT_BREAK_TO_DEBUGGER opt_comconsole.h
|
||||
|
||||
# Include tweaks for running under the SimOS machine simulator.
|
||||
SIMOS opt_simos.h
|
||||
|
||||
# options for bus/device framework
|
||||
BUS_DEBUG opt_bus.h
|
||||
|
||||
|
@ -7,8 +7,8 @@ MAINTAINER= gallatin@FreeBSD.org
|
||||
KMOD= osf1
|
||||
SRCS= osf1_ioctl.c osf1_misc.c osf1_signal.c osf1_sysent.c \
|
||||
osf1_mount.c imgact_osf1.c osf1_sysvec.c opt_compat.h \
|
||||
opt_simos.h opt_ddb.h opt_mac.h opt_nfs.h device_if.h \
|
||||
bus_if.h vnode_if.h
|
||||
opt_ddb.h opt_mac.h opt_nfs.h device_if.h bus_if.h \
|
||||
vnode_if.h
|
||||
|
||||
#CFLAGS+= -g
|
||||
|
||||
|
357
sys/pci/simos.c
357
sys/pci/simos.c
@ -1,357 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Doug Rabson
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifdef COMPILING_LINT
|
||||
#warning "The simos driver is broken and is not compiled with LINT"
|
||||
#else
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/bio.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/proc.h>
|
||||
|
||||
#include <cam/cam.h>
|
||||
#include <cam/cam_ccb.h>
|
||||
#include <cam/cam_sim.h>
|
||||
#include <cam/cam_xpt_sim.h>
|
||||
#include <cam/cam_debug.h>
|
||||
|
||||
#include <cam/scsi/scsi_all.h>
|
||||
#include <cam/scsi/scsi_message.h>
|
||||
|
||||
#include <machine/clock.h>
|
||||
#include <vm/vm.h>
|
||||
#include <vm/vm_param.h>
|
||||
#include <vm/pmap.h>
|
||||
#include <sys/kernel.h>
|
||||
|
||||
#include <pci/simos.h>
|
||||
|
||||
#include <pci/pcireg.h>
|
||||
#include <pci/pcivar.h>
|
||||
|
||||
#ifndef COMPAT_OLDPCI
|
||||
#error "The simos device requires the old pci compatibility shims"
|
||||
#endif
|
||||
|
||||
#include <machine/alpha_cpu.h>
|
||||
|
||||
struct simos_softc {
|
||||
int sc_unit;
|
||||
SimOS_SCSI* sc_regs;
|
||||
|
||||
/*
|
||||
* SimOS only supports one pending command.
|
||||
*/
|
||||
struct cam_sim *sc_sim;
|
||||
struct cam_path *sc_path;
|
||||
struct ccb_scsiio *sc_pending;
|
||||
};
|
||||
|
||||
struct simos_softc* simosp[10];
|
||||
|
||||
static u_long simos_unit;
|
||||
|
||||
static const char *simos_probe(pcici_t tag, pcidi_t type);
|
||||
static void simos_attach(pcici_t config_d, int unit);
|
||||
static void simos_action(struct cam_sim *sim, union ccb *ccb);
|
||||
static void simos_poll(struct cam_sim *sim);
|
||||
|
||||
struct pci_device simos_driver = {
|
||||
"simos",
|
||||
simos_probe,
|
||||
simos_attach,
|
||||
&simos_unit,
|
||||
NULL
|
||||
};
|
||||
COMPAT_PCI_DRIVER (simos, simos_driver);
|
||||
|
||||
static const char *
|
||||
simos_probe(pcici_t tag, pcidi_t type)
|
||||
{
|
||||
switch (type) {
|
||||
case 0x1291|(0x1291<<16):
|
||||
return "SimOS SCSI";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
simos_attach(pcici_t config_id, int unit)
|
||||
{
|
||||
struct simos_softc* sc;
|
||||
struct cam_devq *devq;
|
||||
|
||||
sc = malloc(sizeof(struct simos_softc), M_DEVBUF, M_WAITOK | M_ZERO);
|
||||
simosp[unit] = sc;
|
||||
|
||||
sc->sc_unit = unit;
|
||||
sc->sc_regs = (SimOS_SCSI*) SIMOS_SCSI_ADDR;
|
||||
sc->sc_pending = 0;
|
||||
|
||||
devq = cam_simq_alloc(/*maxopenings*/1);
|
||||
if (devq == NULL)
|
||||
return;
|
||||
|
||||
sc->sc_sim = cam_sim_alloc(simos_action, simos_poll, "simos", sc, unit,
|
||||
/*untagged*/1, /*tagged*/0, devq);
|
||||
if (sc->sc_sim == NULL) {
|
||||
cam_simq_free(devq);
|
||||
return;
|
||||
}
|
||||
|
||||
if (xpt_bus_register(sc->sc_sim, /*bus*/0) != CAM_SUCCESS) {
|
||||
cam_sim_free(sc->sc_sim, /*free_devq*/TRUE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (xpt_create_path(&sc->sc_path, /*periph*/NULL,
|
||||
cam_sim_path(sc->sc_sim), CAM_TARGET_WILDCARD,
|
||||
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
|
||||
xpt_bus_deregister(cam_sim_path(sc->sc_sim));
|
||||
cam_sim_free(sc->sc_sim, /*free_devq*/TRUE);
|
||||
return;
|
||||
}
|
||||
|
||||
alpha_register_pci_scsi(config_id->bus, config_id->slot, sc->sc_sim);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
simos_start(struct simos_softc* sc, struct ccb_scsiio *csio)
|
||||
{
|
||||
struct scsi_generic *cmd;
|
||||
int cmdlen;
|
||||
caddr_t data;
|
||||
int datalen;
|
||||
int s;
|
||||
u_int8_t* p;
|
||||
int i, count, target;
|
||||
vm_offset_t va;
|
||||
vm_size_t size;
|
||||
|
||||
cmd = (struct scsi_generic *) &csio->cdb_io.cdb_bytes;
|
||||
cmdlen = csio->cdb_len;
|
||||
data = csio->data_ptr;
|
||||
datalen = csio->dxfer_len;
|
||||
|
||||
/*
|
||||
* Simos doesn't understand some commands
|
||||
*/
|
||||
if (cmd->opcode == START_STOP || cmd->opcode == PREVENT_ALLOW
|
||||
|| cmd->opcode == SYNCHRONIZE_CACHE) {
|
||||
csio->ccb_h.status = CAM_REQ_CMP;
|
||||
xpt_done((union ccb *) csio);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sc->sc_pending) {
|
||||
/*
|
||||
* Don't think this can happen.
|
||||
*/
|
||||
printf("simos_start: can't start command while one is pending\n");
|
||||
csio->ccb_h.status = CAM_BUSY;
|
||||
xpt_done((union ccb *) csio);
|
||||
return;
|
||||
}
|
||||
|
||||
s = splcam();
|
||||
|
||||
csio->ccb_h.status |= CAM_SIM_QUEUED;
|
||||
sc->sc_pending = csio;
|
||||
|
||||
target = csio->ccb_h.target_id;
|
||||
|
||||
/*
|
||||
* Copy the command into SimOS' buffer
|
||||
*/
|
||||
p = (u_int8_t*) cmd;
|
||||
count = cmdlen;
|
||||
for (i = 0; i < count; i++)
|
||||
sc->sc_regs->cmd[i] = *p++;
|
||||
sc->sc_regs->length = count;
|
||||
sc->sc_regs->target = target;
|
||||
sc->sc_regs->lun = csio->ccb_h.target_lun;
|
||||
|
||||
/*
|
||||
* Setup the segment descriptors.
|
||||
*/
|
||||
va = (vm_offset_t) data;
|
||||
size = datalen;
|
||||
i = 0;
|
||||
while (size > 0) {
|
||||
vm_size_t len = PAGE_SIZE - (va & PAGE_MASK);
|
||||
if (len > size)
|
||||
len = size;
|
||||
sc->sc_regs->sgMap[i].pAddr = vtophys(va);
|
||||
sc->sc_regs->sgMap[i].len = len;
|
||||
size -= len;
|
||||
va += len;
|
||||
i++;
|
||||
}
|
||||
sc->sc_regs->sgLen = i;
|
||||
|
||||
/*
|
||||
* Start the i/o.
|
||||
*/
|
||||
alpha_wmb();
|
||||
sc->sc_regs->startIO = 1;
|
||||
alpha_wmb();
|
||||
|
||||
splx(s);
|
||||
}
|
||||
|
||||
static void
|
||||
simos_done(struct simos_softc* sc)
|
||||
{
|
||||
struct ccb_scsiio* csio = sc->sc_pending;
|
||||
int s, done;
|
||||
|
||||
/*
|
||||
* Spurious interrupt caused by my bogus interrupt broadcasting.
|
||||
*/
|
||||
if (!csio)
|
||||
return;
|
||||
|
||||
sc->sc_pending = 0;
|
||||
|
||||
done = sc->sc_regs->done[csio->ccb_h.target_id];
|
||||
if (!done)
|
||||
return;
|
||||
|
||||
s = splcam();
|
||||
|
||||
if (done >> 16)
|
||||
/* Error detected */
|
||||
csio->ccb_h.status = CAM_CMD_TIMEOUT;
|
||||
else
|
||||
csio->ccb_h.status = CAM_REQ_CMP;
|
||||
|
||||
/*
|
||||
* Ack the interrupt to clear it.
|
||||
*/
|
||||
sc->sc_regs->done[csio->ccb_h.target_id] = 1;
|
||||
alpha_wmb();
|
||||
|
||||
xpt_done((union ccb *) csio);
|
||||
|
||||
splx(s);
|
||||
}
|
||||
|
||||
static void
|
||||
simos_action(struct cam_sim *sim, union ccb *ccb)
|
||||
{
|
||||
struct simos_softc* sc = (struct simos_softc *)sim->softc;
|
||||
|
||||
switch (ccb->ccb_h.func_code) {
|
||||
case XPT_SCSI_IO:
|
||||
{
|
||||
struct ccb_scsiio *csio;
|
||||
|
||||
csio = &ccb->csio;
|
||||
simos_start(sc, csio);
|
||||
break;
|
||||
}
|
||||
|
||||
case XPT_CALC_GEOMETRY:
|
||||
{
|
||||
struct ccb_calc_geometry *ccg;
|
||||
u_int32_t size_mb;
|
||||
u_int32_t secs_per_cylinder;
|
||||
|
||||
ccg = &ccb->ccg;
|
||||
size_mb = ccg->volume_size
|
||||
/ ((1024L * 1024L) / ccg->block_size);
|
||||
|
||||
ccg->heads = 64;
|
||||
ccg->secs_per_track = 32;
|
||||
|
||||
secs_per_cylinder = ccg->heads * ccg->secs_per_track;
|
||||
ccg->cylinders = ccg->volume_size / secs_per_cylinder;
|
||||
|
||||
ccb->ccb_h.status = CAM_REQ_CMP;
|
||||
xpt_done(ccb);
|
||||
break;
|
||||
}
|
||||
|
||||
case XPT_RESET_BUS:
|
||||
{
|
||||
ccb->ccb_h.status = CAM_REQ_CMP;
|
||||
xpt_done(ccb);
|
||||
break;
|
||||
}
|
||||
|
||||
case XPT_PATH_INQ:
|
||||
{
|
||||
struct ccb_pathinq *cpi = &ccb->cpi;
|
||||
|
||||
cpi->version_num = 1; /* XXX??? */
|
||||
cpi->max_target = 2;
|
||||
cpi->max_lun = 0;
|
||||
cpi->initiator_id = 7;
|
||||
cpi->bus_id = sim->bus_id;
|
||||
cpi->base_transfer_speed = 3300;
|
||||
strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);
|
||||
strncpy(cpi->hba_vid, "SimOS", HBA_IDLEN);
|
||||
strncpy(cpi->dev_name, sim->sim_name, DEV_IDLEN);
|
||||
cpi->unit_number = sim->unit_number;
|
||||
|
||||
cpi->ccb_h.status = CAM_REQ_CMP;
|
||||
xpt_done(ccb);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
ccb->ccb_h.status = CAM_REQ_INVALID;
|
||||
xpt_done(ccb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
simos_poll(struct cam_sim *sim)
|
||||
{
|
||||
simos_done(cam_sim_softc(sim));
|
||||
}
|
||||
|
||||
void
|
||||
simos_intr(int unit)
|
||||
{
|
||||
/* XXX bogus */
|
||||
struct simos_softc* sc = simosp[unit];
|
||||
|
||||
simos_done(sc);
|
||||
}
|
||||
|
||||
|
||||
#endif /* !COMPILING_LINT */
|
@ -1,74 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Doug Rabson
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 1998 by the Board of Trustees
|
||||
* of Leland Stanford Junior University.
|
||||
* Copyright (C) 1998 Digital Equipment Corporation
|
||||
*
|
||||
* This file is part of the SimOS distribution.
|
||||
* See LICENSE file for terms of the license.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef _SIMOS_SCSI_H
|
||||
#define _SIMOS_SCSI_H
|
||||
|
||||
#define SIMOS_SCSI_ADDR 0xfffffcc500000000
|
||||
#define SIMOS_SCSI_ADDR_32 0xffffffffa5000000
|
||||
#define SIMOS_SCSI_MAXDMA_LEN 128
|
||||
#define SIMOS_SCSI_MAXTARG 16
|
||||
#define SIMOS_SCSI_MAXLUN 16
|
||||
|
||||
#define SIMOS_SCSI_REGS ((struct SimOS_SCSI *)SIMOS_SCSI_ADDR)
|
||||
#define SIMOS_SCSI_REGS_32 ((struct SimOS_SCSI *)SIMOS_SCSI_ADDR_32)
|
||||
|
||||
typedef unsigned long SCSIReg;
|
||||
|
||||
|
||||
typedef struct SimOS_SCSI {
|
||||
SCSIReg startIO; /* write-only */
|
||||
SCSIReg done[SIMOS_SCSI_MAXTARG]; /* read-write (write=ack) */
|
||||
|
||||
SCSIReg target; /* data fields */
|
||||
SCSIReg lun;
|
||||
SCSIReg cmd[12];
|
||||
SCSIReg length;
|
||||
SCSIReg sgLen;
|
||||
struct {
|
||||
SCSIReg pAddr;
|
||||
SCSIReg len;
|
||||
} sgMap[SIMOS_SCSI_MAXDMA_LEN];
|
||||
|
||||
|
||||
} SimOS_SCSI;
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user