summaryrefslogtreecommitdiffstats
path: root/sys/scsi/st.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1995-11-29 10:49:16 +0000
committerjulian <julian@FreeBSD.org>1995-11-29 10:49:16 +0000
commitf2f63c6ece7d25485976323df6d684743fe14bb6 (patch)
tree5ed2d747156a38098db0e540f833114bc9dd1b51 /sys/scsi/st.c
parentbe48321f04abe146ffbc5091fe940b107f46c175 (diff)
downloadFreeBSD-src-f2f63c6ece7d25485976323df6d684743fe14bb6.zip
FreeBSD-src-f2f63c6ece7d25485976323df6d684743fe14bb6.tar.gz
OK, that's it..
That's EVERY SINGLE driver that has an entry in conf.c.. my next trick will be to define cdevsw[] and bdevsw[] as empty arrays and remove all those DAMNED defines as well.. Each of these drivers has a SYSINIT linker set entry that comes in very early.. and asks teh driver to add it's own entry to the two devsw[] tables. some slight reworking of the commits from yesterday (added the SYSINIT stuff and some usually wrong but token DEVFS entries to all these devices. BTW does anyone know where the 'ata' entries in conf.c actually reside? seems we don't actually have a 'ataopen() etc... If you want to add a new device in conf.c please make sure I know so I can keep it up to date too.. as before, this is all dependent on #if defined(JREMOD) (and #ifdef DEVFS in parts)
Diffstat (limited to 'sys/scsi/st.c')
-rw-r--r--sys/scsi/st.c62
1 files changed, 55 insertions, 7 deletions
diff --git a/sys/scsi/st.c b/sys/scsi/st.c
index c872545..6c7db23 100644
--- a/sys/scsi/st.c
+++ b/sys/scsi/st.c
@@ -12,7 +12,7 @@
* on the understanding that TFS is not responsible for the correct
* functioning of this software in any circumstances.
*
- * $Id: st.c,v 1.43 1995/11/19 22:22:32 dyson Exp $
+ * $Id: st.c,v 1.44 1995/11/20 12:42:34 phk Exp $
*/
/*
@@ -46,7 +46,16 @@
#include <scsi/scsiconf.h>
#include <sys/devconf.h>
-u_int32 ststrats, stqueues;
+#ifdef JREMOD
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#ifdef DEVFS
+#include <sys/devfsext.h>
+#endif /*DEVFS*/
+#define CDEV_MAJOR 14
+#define BDEV_MAJOR 5
+#endif /*JREMOD */
+
/* Defines for device specific stuff */
#define PAGE_0_SENSE_DATA_SIZE 12
@@ -595,7 +604,7 @@ errval
st_close(dev_t dev, int flag, int fmt, struct proc *p,
struct scsi_link *sc_link)
{
- unsigned char unit, mode;
+ u_int32 unit, mode;
struct scsi_data *st;
unit = STUNIT(dev);
@@ -897,12 +906,11 @@ done:
void
st_strategy(struct buf *bp, struct scsi_link *sc_link)
{
- unsigned char unit; /* XXX Everywhere else unit is "u_int32". Please int? */
+ u_int32 unit;
u_int32 opri;
struct scsi_data *st;
int len;
- ststrats++;
unit = STUNIT((bp->b_dev));
st = sc_link->sd;
/*
@@ -1110,7 +1118,6 @@ ststart(unit, flags)
100000,
bp,
flags) == SUCCESSFULLY_QUEUED) {
- stqueues++;
} else {
badnews:
printf("st%ld: oops not queued\n", unit);
@@ -1130,7 +1137,7 @@ st_ioctl(dev_t dev, int cmd, caddr_t arg, int flag,
struct proc *p, struct scsi_link *sc_link)
{
errval errcode = 0;
- unsigned char unit;
+ u_int32 unit;
u_int32 number, flags, dsty;
struct scsi_data *st;
u_int32 hold_blksiz;
@@ -2070,3 +2077,44 @@ bad: free(buf, M_TEMP);
free(buf, M_TEMP);
return 0;
}
+
+#ifdef JREMOD
+struct bdevsw st_bdevsw =
+ { stopen, stclose, ststrategy, stioctl, /*5*/
+ nxdump, zerosize, 0 };
+
+struct cdevsw st_cdevsw =
+ { stopen, stclose, rawread, rawwrite, /*14*/
+ stioctl, nostop, nullreset, nodevtotty,/* st */
+ seltrue, nommap, ststrategy };
+
+static st_devsw_installed = 0;
+
+static void st_drvinit(void *unused)
+{
+ dev_t dev;
+ dev_t dev_chr;
+
+ if( ! st_devsw_installed ) {
+ dev = makedev(CDEV_MAJOR,0);
+ cdevsw_add(&dev,&st_cdevsw,NULL);
+ dev_chr = dev;
+ dev = makedev(BDEV_MAJOR,0);
+ bdevsw_add(&dev,&st_bdevsw,NULL);
+ st_devsw_installed = 1;
+#ifdef DEVFS
+ {
+ int x;
+/* default for a simple device with no probe routine (usually delete this) */
+ x=devfs_add_devsw(
+/* path name devsw minor type uid gid perm*/
+ "/", "rst", major(dev_chr), 0, DV_CHR, 0, 0, 0600);
+ }
+ }
+#endif
+}
+
+SYSINIT(stdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,st_drvinit,NULL)
+
+#endif /* JREMOD */
+
OpenPOWER on IntegriCloud