summaryrefslogtreecommitdiff
path: root/sys/arch/pc532/dev/aic.c
blob: f0c3e022f38d0668ab1e5ecba38c4062fb53db46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*	$NetBSD: aic.c,v 1.4 1995/08/12 20:31:10 mycroft Exp $	*/

/* Written by Phil Nelson for the pc532.  Used source with the following
 * copyrights as a model.
 *
 *   aic.c: A Adaptec 6250 driver for the pc532.
 */
/*
 * (Mostly) Written by Julian Elischer (julian@tfs.com)
 * for TRW Financial Systems for use under the MACH(2.5) operating system.
 *
 * TRW Financial Systems, in accordance with their agreement with Carnegie
 * Mellon University, makes this software available to CMU to distribute
 * or use in any manner that they see fit as long as this message is kept with
 * the software. For this reason TFS also grants any other persons or
 * organisations permission to use or modify this software.
 *
 * TFS supplies this software to be publicly redistributed
 * on the understanding that TFS is not responsible for the correct
 * functioning of this software in any circumstances.
 */

/*
 * a FEW lines in this driver come from a MACH adaptec-disk driver
 * so the copyright below is included:
 *
 * Copyright 1990 by Open Software Foundation,
 * Grenoble, FRANCE
 *
 * 		All Rights Reserved
 *
 *   Permission to use, copy, modify, and distribute this software and
 * its documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appears in all copies and
 * that both the copyright notice and this permission notice appear in
 * supporting documentation, and that the name of OSF or Open Software
 * Foundation not be used in advertising or publicity pertaining to
 * distribution of the software without specific, written prior
 * permission.
 *
 *   OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */

#include "sys/types.h"
#include "sys/param.h"
#include "sys/systm.h"
#include "sys/errno.h"
#include "sys/ioctl.h"
#include "sys/buf.h"
#include "machine/stdarg.h"
#include "sys/proc.h"
#include "sys/user.h"
#include "sys/dkbad.h"
#include "sys/disklabel.h"
#include "scsi/scsi_all.h"
#include "scsi/scsiconf.h"

#include "device.h"

/* Some constants (may need to be changed!) */
#define AIC_NSEG		16

int aicprobe(struct pc532_device *);
int aicattach(struct pc532_device *);
int aic_scsi_cmd(struct scsi_xfer *);
void aicminphys(struct buf *);
long int aic_adapter_info(int);

struct scsidevs *
scsi_probe(int masunit, struct scsi_switch *sw, int physid, int type, int want);

struct	pc532_driver aicdriver = {
	aicprobe, aicattach, "aic",
};

struct scsi_switch dp_switch = {
	"aic",
	aic_scsi_cmd,
	aicminphys,
	0,
	0,
	aic_adapter_info,
	0, 0, 0
};

int aicprobe(struct pc532_device *dvp)
{
  return (0);	/* All pc532s should have one, but it is not working now. */
}


int aicattach(struct pc532_device *dvp)
{
	int r;

	r = scsi_attach(0, 7, &dp_switch,
		&dvp->pd_drive, &dvp->pd_unit, dvp->pd_flags);

	return(r);
}

void aicminphys(struct buf *bp)
{

	if(bp->b_bcount > ((AIC_NSEG - 1) * NBPG))
		bp->b_bcount = ((AIC_NSEG - 1) * NBPG);
	minphys(bp);
}

long int aic_adapter_info(int unit)
{
	return (1);    /* only 1 outstanding request. */
}


/* Do a scsi command. */

struct scsi_xfer *cur_xs;

int aic_scsi_cmd(struct scsi_xfer *xs)
{
printf ("aic_scsi_cmd: ... \n");
	cur_xs = xs;

	return (HAD_ERROR);
}

void aic_intr (struct intrframe frame)
{
}