Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Nov 1996 22:06:21 +0100
From:      Poul-Henning Kamp <phk@critter.tfs.com>
To:        current@freebsd.org
Subject:   users of "ft" tapes, please test!
Message-ID:  <2845.849128781@critter.tfs.com>

next in thread | raw e-mail | index | archive | help

Unless somebody convinces me that this patch doesn't work, It will
be committed.  It shaves about 5K of the size of the ft.o object
file.

Please test this out and report back to me!

Poul-Henning

Index: sys/ftape.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/ftape.h,v
retrieving revision 1.3
diff -u -r1.3 ftape.h
--- ftape.h	1996/09/21 14:59:30	1.3
+++ ftape.h	1996/11/27 21:00:11
@@ -58,8 +58,8 @@
 typedef struct qic_geom {
 	int g_fmtno;			/* Format number */
 	int g_lenno;			/* Length number */
-	char g_fmtdesc[16];		/* Format text description */
-	char g_lendesc[16];		/* Length text description */
+	char *g_fmtdesc;		/* Format text description */
+	char *g_lendesc;		/* Length text description */
 	int g_trktape;			/* Number of tracks per tape */
 	int g_segtrk;			/* Number of segments per track */
 	int g_blktrk;			/* Number of blocks per track */
Index: i386/isa/ft.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/isa/ft.c,v
retrieving revision 1.27
diff -u -r1.27 ft.c
--- ft.c	1996/09/06 23:07:22	1.27
+++ ft.c	1996/11/27 20:52:48
@@ -274,7 +275,7 @@
 	int moving;		/* TRUE if tape is moving	  */
 	int rid[7];		/* read_id return values	  */
 
-} ft_data[NFT];
+} *ft_data[NFT];
 
 /***********************************************************************\
 * Throughout this file the following conventions will be used:		*
@@ -416,7 +417,8 @@
   char *manu;
 
   if (ftu >= NFT) return 0;
-  ft = &ft_data[ftu];
+  ft = ft_data[ftu] = malloc(sizeof *ft, M_DEVBUF, M_NOWAIT);
+  bzero(ft, sizeof *ft);
 
   /* Probe for tape */
   ft->attaching = 1;
@@ -536,7 +538,7 @@
  */
 static void
 async_cmd(ftu_t ftu) {
-	ft_p	ft = &ft_data[ftu];
+	ft_p	ft = ft_data[ftu];
 	fdcu_t	fdcu = ft->fdc->fdcu;
 	int cmd, i, st0, st3, pcn;
 	static int bitn, retval, retpos, nbits, newcn;
@@ -959,7 +961,7 @@
 static void
 async_req(ftu_t ftu, int from)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   SegReq *sp;
   static int over_async, lastreq;
   int cmd;
@@ -1088,7 +1090,7 @@
 static void
 async_read(ftu_t ftu, int from)
 {
-  ft_p ft = &ft_data[ftu];
+  ft_p ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
   int i, rddta[7];
   int where;
@@ -1209,7 +1211,7 @@
 static void
 async_write(ftu_t ftu, int from)
 {
-  ft_p ft = &ft_data[ftu];
+  ft_p ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
   int i, rddta[7];
   int where;
@@ -1334,7 +1336,7 @@
 ftintr(ftu_t ftu)
 {
   int st0, pcn, i;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
   int s = splbio();
 
@@ -1412,7 +1414,7 @@
 {
   int s;
   ftu_t ftu = (ftu_t)arg1;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   s = splbio();
   if (ft->active) {
@@ -1439,7 +1441,7 @@
 ftintr_wait(ftu_t ftu, int cmd, int ticks)
 {
   int retries, st0, pcn;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
 
   ft->cmd_wait = cmd;
@@ -1501,7 +1503,7 @@
 tape_recal(ftu_t ftu, int totape)
 {
   int s;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
 
   DPRT(("tape_recal start\n"));
@@ -1562,7 +1564,7 @@
   int newcn;
   int retries = 0;
   int s;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdcu_t fdcu = ft->fdc->fdcu;		/* fdc active unit */
 
   DPRT(("===> tape_cmd: %d\n",cmd));
@@ -1603,7 +1605,7 @@
 tape_status(ftu_t ftu)
 {
   int r, err, tries;
-  ft_p ft = &ft_data[ftu];
+  ft_p ft = ft_data[ftu];
   int max = (ft->attaching) ? 2 : 3;
 
   for (r = -1, tries = 0; r < 0 && tries < max; tries++)
@@ -1648,7 +1650,7 @@
 static void
 tape_start(ftu_t ftu, int motor)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdc_p	fdc = ft->fdc;
   int s, mbits;
   static int mbmotor[] = { FDO_MOEN0, FDO_MOEN1, FDO_MOEN2, FDO_MOEN3 };
@@ -1686,7 +1688,7 @@
 static void
 tape_end(ftu_t ftu)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdc_p	fdc = ft->fdc;
   int s;
 
@@ -1720,7 +1722,7 @@
 static void
 tape_inactive(ftu_t ftu)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   int s = splbio();
 
   if (ft->segh != NULL) {
@@ -1753,7 +1755,7 @@
   int r, i, tries;
   int cfg, qic80, ext;
   int sts, fmt, len;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   r = tape_status(ftu);
 
@@ -1847,7 +1849,7 @@
 set_fdcmode(dev_t dev, int newmode)
 {
   ftu_t ftu = FDUNIT(minor(dev));
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   fdc_p	fdc = ft->fdc;
   static int havebufs = 0;
   int i;
@@ -2043,8 +2045,8 @@
   /* check bounds */
   if (ftu >= NFT)
 	return(ENXIO);
-  fdc = ft_data[ftu].fdc;
-  if ((fdc == NULL) || (ft_data[ftu].type == NO_TYPE))
+  fdc = &ft_data[ftu]->fdc;
+  if ((fdc == NULL) || (ft_data[ftu]->type == NO_TYPE))
 	  return(ENXIO);
   /* check for controller already busy with tape */
   if (fdc->flags & FDC_TAPE_BUSY)
@@ -2065,7 +2067,7 @@
 ftclose(dev_t dev, int flags)
 {
   ftu_t ftu = FDUNIT(minor(dev));
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
 
   /* Wait for any remaining I/O activity to complete. */
@@ -2089,7 +2091,7 @@
   int s;
   long blk, bad, seg;
   unsigned char *cp, *cp2;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   if (!ft->active && ft->segh == NULL) {
 	r = tape_status(ftu);
@@ -2241,7 +2243,7 @@
 static int
 ftreq_rewind(ftu_t ftu)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   tape_cmd(ftu, QC_STOP);
@@ -2264,7 +2266,7 @@
 ftreq_trkpos(ftu_t ftu, int req)
 {
   int curtrk, r, cmd;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   tape_cmd(ftu, QC_STOP);
@@ -2296,7 +2298,7 @@
 ftreq_trkset(ftu_t ftu, int *trk)
 {
   int r;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   tape_cmd(ftu, QC_STOP);
@@ -2322,7 +2324,7 @@
 static int
 ftreq_lfwd(ftu_t ftu)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   tape_cmd(ftu, QC_STOP);
@@ -2339,7 +2341,7 @@
 static int
 ftreq_stop(ftu_t ftu)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   tape_cmd(ftu, QC_STOP);
@@ -2356,7 +2358,7 @@
 ftreq_setmode(ftu_t ftu, int cmd)
 {
   int r;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   tape_inactive(ftu);
   r = tape_status(ftu);
@@ -2387,7 +2389,7 @@
 static int
 ftreq_status(ftu_t ftu, int cmd, int *sts, struct proc *p)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   if (ft->active)
 	*sts = ft->laststs & ~QS_READY;
@@ -2404,7 +2406,7 @@
 ftreq_config(ftu_t ftu, int cmd, int *cfg, struct proc *p)
 {
   int r, tries;
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
 
   if (ft->active)
 	r = ft->lastcfg;
@@ -2467,7 +2469,7 @@
 static int
 ftreq_hdr(ftu_t ftu, int cmd, QIC_Segment *sp)
 {
-  ft_p	ft = &ft_data[ftu];
+  ft_p	ft = ft_data[ftu];
   QIC_Header *h = (QIC_Header *)ft->hdr->buff;
 
   if (sp == NULL || sp->sg_data == NULL) return(EINVAL);
--
Poul-Henning Kamp           | phk@FreeBSD.ORG       FreeBSD Core-team.
http://www.freebsd.org/~phk | phk@login.dknet.dk    Private mailbox.
whois: [PHK]                | phk@ref.tfs.com       TRW Financial Systems, Inc.
Future will arrive by its own means, progress not so.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2845.849128781>