]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
staging: dgap: Remove userland source code files
authorMark Hounschell <markh@compro.net>
Wed, 19 Feb 2014 18:11:58 +0000 (13:11 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Feb 2014 00:44:19 +0000 (16:44 -0800)
This patch removes userland source code files downld.c and dgap_downld.h

Signed-off-by: Mark Hounschell <markh@compro.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dgap/dgap_downld.h [deleted file]
drivers/staging/dgap/downld.c [deleted file]

diff --git a/drivers/staging/dgap/dgap_downld.h b/drivers/staging/dgap/dgap_downld.h
deleted file mode 100644 (file)
index 7ea6531..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2003 Digi International (www.digi.com)
- *      Scott H Kilau <Scott_Kilau at digi dot com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- *     NOTE: THIS IS A SHARED HEADER. DO NOT CHANGE CODING STYLE!!!
- *
- */
-
-/*
-** downld.h
-**  - describes the interface between the user level download process
-**    and the concentrator download driver.
-*/
-
-#ifndef _DGAP_DOWNLD_H_
-#define _DGAP_DOWNLD_H_
-
-
-struct fepimg {
-    int type;                          /* board type */
-    int        len;                            /* length of image */
-    char fepimage[1];                  /* beginning of image */
-};
-
-struct downldio {
-    unsigned int req_type;             /* FEP or concentrator */
-    unsigned int bdid;                 /* opaque board identifier */
-    union {
-       struct downld_t dl;             /* download structure */
-       struct fepimg   fi;             /* fep/bios image structure */
-    } image;
-};
-
-#define DIGI_DLREQ_GET (('d'<<8) | 220)
-#define DIGI_DLREQ_SET (('d'<<8) | 221)
-
-#define DIGI_DL_NUKE    (('d'<<8) | 222) /* Not really a dl request, but
-                                         dangerous enuff to not put in
-                                         digi.h */
-/* Packed bits of intarg for DIGI_DL_NUKE */
-#define DIGI_NUKE_RESET_ALL     (1 << 31)
-#define DIGI_NUKE_INHIBIT_POLLER (1 << 30)
-#define DIGI_NUKE_BRD_NUMB        0x0f
-
-
-
-#define        DLREQ_BIOS      0
-#define        DLREQ_FEP       1
-#define        DLREQ_CONC      2
-#define        DLREQ_CONFIG    3
-#define DLREQ_DEVCREATE 4
-
-#endif
diff --git a/drivers/staging/dgap/downld.c b/drivers/staging/dgap/downld.c
deleted file mode 100644 (file)
index 67200b5..0000000
+++ /dev/null
@@ -1,797 +0,0 @@
-/*
- * Copyright 2003 Digi International (www.digi.com)
- *     Scott H Kilau <Scott_Kilau at digi dot com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-/*
-** downld.c
-**
-**  This is the daemon that sends the fep, bios, and concentrator images
-**  from user space to the driver.
-** BUGS:
-**  If the file changes in the middle of the download, you probably
-**     will get what you deserve.
-**
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-
-#include "dgap_types.h"
-#include "digi.h"
-#include "dgap_fep5.h"
-
-#include "dgap_downld.h"
-
-#include <string.h>
-#include <malloc.h>
-#include <stddef.h>
-#include <unistd.h>
-
-char           *pgm;
-void           myperror();
-
-/*
-**  This structure is used to keep track of the different images available
-**  to give to the driver.  It is arranged so that the things that are
-**  constants or that have defaults are first inthe strucutre to simplify
-**  the table of initializers.
-*/
-struct image_info {
-       short   type;           /* bios, fep, conc */
-       short   family;         /* boards this applies to */
-       short   subtype;        /* subtype */
-       int     len;            /* size of image */
-       char    *image;         /* ioctl struct + image */
-       char    *name;
-       char    *fname;         /* filename of binary (i.e. "asfep.bin") */
-       char    *pathname;      /* pathname to this binary ("/etc/dgap/xrfep.bin"); */
-       time_t  mtime;          /* Last modification time */
-};
-
-#define IBIOS  0
-#define        IFEP    1
-#define        ICONC   2
-#define ICONFIG        3
-#define        IBAD    4
-
-#define DEFAULT_LOC "/lib/firmware/dgap/"
-
-struct image_info      *image_list;
-int                    nimages, count;
-
-struct image_info images[] = {
-{IBIOS, T_EPC,      SUBTYPE, 0, NULL, "EPC/X", "fxbios.bin", DEFAULT_LOC "fxbios.bin", 0 },
-{IFEP,  T_EPC,      SUBTYPE, 0, NULL, "EPC/X", "fxfep.bin", DEFAULT_LOC "fxfep.bin", 0 },
-{ICONC, T_EPC,      SUBTYPE, 0, NULL, "EPC/X", "fxcon.bin", DEFAULT_LOC "fxcon.bin", 0 },
-
-{IBIOS, T_CX,       SUBTYPE, 0, NULL, "C/X",   "cxbios.bin", DEFAULT_LOC "cxbios.bin", 0 },
-{IFEP,  T_CX,       SUBTYPE, 0, NULL, "C/X",   "cxhost.bin", DEFAULT_LOC "cxhost.bin", 0 },
-
-{IBIOS, T_CX,       T_PCIBUS, 0, NULL, "C/X PCI", "cxpbios.bin", DEFAULT_LOC "cxpbios.bin", 0 },
-{IFEP,  T_CX,       T_PCIBUS, 0, NULL, "C/X PCI", "cxpfep.bin", DEFAULT_LOC "cxpfep.bin", 0 },
-
-{ICONC, T_CX,       SUBTYPE, 0, NULL, "C/X",   "cxcon.bin", DEFAULT_LOC "cxcon.bin", 0 },
-{ICONC, T_CX,       SUBTYPE, 0, NULL, "C/X",   "ibmcxcon.bin", DEFAULT_LOC "ibmcxcon.bin", 0 },
-{ICONC, T_CX,       SUBTYPE, 0, NULL, "C/X",   "ibmencon.bin", DEFAULT_LOC "ibmencon.bin", 0 },
-
-{IBIOS, FAMILY,   T_PCXR, 0, NULL, "PCXR",     "xrbios.bin", DEFAULT_LOC "xrbios.bin", 0 },
-{IFEP,  FAMILY,   T_PCXR, 0,  NULL,  "PCXR",   "xrfep.bin", DEFAULT_LOC "xrfep.bin", 0  },
-
-{IBIOS, T_PCLITE,   SUBTYPE, 0, NULL, "X/em",  "sxbios.bin", DEFAULT_LOC "sxbios.bin", 0 },
-{IFEP,  T_PCLITE,   SUBTYPE, 0,  NULL,  "X/em",        "sxfep.bin", DEFAULT_LOC "sxfep.bin", 0  },
-
-{IBIOS, T_EPC,      T_PCIBUS, 0, NULL, "PCI",  "pcibios.bin", DEFAULT_LOC "pcibios.bin", 0 },
-{IFEP,  T_EPC,      T_PCIBUS, 0, NULL, "PCI",  "pcifep.bin", DEFAULT_LOC "pcifep.bin", 0 },
-{ICONFIG, 0,       0, 0, NULL,         NULL,   "dgap.conf",    "/etc/dgap.conf", 0 },
-
-/* IBAD/NULL entry indicating end-of-table */
-
-{IBAD,  0,     0, 0,  NULL,  NULL, NULL, NULL, 0 }
-
-} ;
-
-int    errorprint = 1;
-int    nodldprint = 1;
-int    debugflag;
-int    fd;
-
-struct downld_t *ip;   /* Image pointer in current image  */
-struct downld_t *dp;   /* conc. download */
-
-
-/*
- * The same for either the FEP or the BIOS.
- *  Append the downldio header, issue the ioctl, then free
- *  the buffer.  Not horribly CPU efficient, but quite RAM efficient.
- */
-
-void squirt(int req_type, int bdid, struct image_info *ii)
-{
-       struct downldio *dliop;
-       int size_buf;
-       int sfd;
-       struct stat sb;
-
-       /*
-        * If this binary comes from a file, stat it to see how
-        * large it is. Yes, we intentionally do this each
-        * time for the binary may change between loads.
-        */
-
-       if (ii->pathname) {
-               sfd = open(ii->pathname, O_RDONLY);
-
-               if (sfd < 0 ) {
-                       myperror(ii->pathname);
-                       goto squirt_end;
-               }
-
-               if (fstat(sfd, &sb) == -1 ) {
-                       myperror(ii->pathname);
-                       goto squirt_end;
-               }
-
-               ii->len = sb.st_size;
-       }
-
-       size_buf = ii->len + sizeof(struct downldio);
-
-       /*
-        * This buffer will be freed at the end of this function.  It is
-        * not resilient and should be around only long enough for the d/l
-        * to happen.
-        */
-       dliop = (struct downldio *) malloc(size_buf);
-
-       if (dliop == NULL) {
-               fprintf(stderr,"%s: can't get %d bytes of memory; aborting\n",
-                       pgm, size_buf);
-               exit (1);
-       }
-
-       /* Now, stick the image in fepimage.  This can come from either
-        *  the compiled-in image or from the filesystem.
-        */
-       if (ii->pathname)
-               read(sfd, dliop->image.fi.fepimage, ii->len);
-       else
-               memcpy(dliop ->image.fi.fepimage, ii->image, ii->len);
-
-       dliop->req_type = req_type;
-       dliop->bdid = bdid;
-
-       dliop->image.fi.len = ii->len;
-
-       if (debugflag)
-               printf("sending %d bytes of %s %s from %s\n",
-                       ii->len,
-                       (ii->type == IFEP) ? "FEP" : (ii->type == IBIOS) ? "BIOS" : "CONFIG",
-                       ii->name ? ii->name : "",
-                       (ii->pathname) ? ii->pathname : "internal image" );
-
-       if (ioctl(fd, DIGI_DLREQ_SET, (char *) dliop) == -1) {
-               if(errorprint) {
-                       fprintf(stderr,
-                               "%s: warning - download ioctl failed\n",pgm);
-                       errorprint = 0;
-               }
-               sleep(2);
-       }
-
-squirt_end:
-
-       if (ii->pathname) {
-               close(sfd);
-       }
-       free(dliop);
-}
-
-
-/*
- *  See if we need to reload the download image in core
- *
- */
-void consider_file_rescan(struct image_info *ii)
-{
-       int sfd;
-       int len;
-       struct stat     sb;
-
-       /* This operation only makes sense when we're working from a file */
-
-       if (ii->pathname) {
-
-               sfd = open (ii->pathname, O_RDONLY) ;
-               if (sfd < 0 ) {
-                       myperror(ii->pathname);
-                       exit(1) ;
-               }
-
-               if( fstat(sfd,&sb) == -1 ) {
-                       myperror(ii->pathname);
-                       exit(1);
-               }
-
-               /* If the file hasn't changed since we last did this,
-                * and we have not done a free() on the image, bail
-                */
-               if (ii->image && (sb.st_mtime == ii->mtime))
-                       goto end_rescan;
-
-               ii->len = len = sb.st_size;
-
-               /* Record the timestamp of the file */
-               ii->mtime = sb.st_mtime;
-
-               /* image should be NULL unless there is an image malloced
-                * in already.  Before we malloc again, make sure we don't
-                * have a memory leak.
-                */
-               if ( ii->image ) {
-                       free( ii->image );
-                       /* ii->image = NULL; */ /* not necessary */
-               }
-
-               /* This image will be kept only long enough for the
-                * download to happen.  After sending the last block,
-                * it will be freed
-                */
-               ii->image = malloc(len) ;
-
-               if (ii->image == NULL) {
-                       fprintf(stderr,
-                               "%s: can't get %d bytes of memory; aborting\n",
-                                pgm, len);
-                       exit (1);
-               }
-
-               if (read(sfd, ii->image, len) < len) {
-                       fprintf(stderr,"%s: read error on %s; aborting\n",
-                               pgm, ii->pathname);
-                       exit (1);
-               }
-
-end_rescan:
-               close(sfd);
-
-       }
-}
-
-/*
- * Scan for images to match the driver requests
- */
-
-struct image_info * find_conc_image()
-{
-       int x;
-       struct image_info *i = NULL;
-
-       for ( x = 0; x < nimages; x++ ) {
-               i=&image_list[x];
-
-               if(i->type != ICONC)
-                       continue;
-
-               consider_file_rescan(i) ;
-
-               ip = (struct downld_t *) image_list[x].image;
-               if (ip == NULL) continue;
-
-               /*
-                * When I removed Clusterport, I kept only the code that I
-                * was SURE wasn't ClusterPort.  We may not need the next two
-                * lines of code.
-                */
-               if ((dp->dl_type != 'P' ) && ( ip->dl_srev == dp->dl_srev ))
-                       return i;
-       }
-       return NULL;
-}
-
-
-int main(int argc, char **argv)
-{
-       struct downldio dlio;
-       int             offset, bsize;
-       int             x;
-       char            *down, *image, *fname;
-       struct image_info *ii;
-
-       pgm = argv[0];
-       dp = &dlio.image.dl;            /* conc. download */
-
-       while((argc > 2) && !strcmp(argv[1],"-d")) {
-               debugflag++ ;
-               argc-- ;
-               argv++ ;
-       }
-
-       if(argc < 2) {
-               fprintf(stderr,
-                       "usage: %s download-device [image-file] ...\n",
-                       pgm);
-               exit(1);
-       }
-
-
-
-       /*
-        * Daemonize, unless debugging is turned on.
-        */
-       if (debugflag == 0) {
-               switch (fork())
-               {
-               case 0:
-                       break;
-
-               case -1:
-                       return 1;
-
-               default:
-                       return 0;
-               }
-
-               setsid();
-
-               /*
-                * The child no longer needs "stdin", "stdout", or "stderr",
-                * and should not block processes waiting for them to close.
-                */
-               fclose(stdin);
-               fclose(stdout);
-               fclose(stderr);
-
-       }
-
-       while (1) {
-               if( (fd = open(argv[1], O_RDWR)) == -1 ) {
-                       sleep(1);
-               }
-               else
-                       break;
-       }
-
-       /*
-       ** create a list of images to search through when trying to match
-       ** requests from the driver.  Put images from the command line in
-       ** the list before built in images so that the command line images
-       ** can override the built in ones.
-       */
-
-       /* allocate space for the list */
-
-       nimages = argc - 2;
-
-       /* count the number of default list entries */
-
-       for (count = 0; images[count].type != IBAD; ++count) ;
-
-       nimages += count;
-
-       /* Really should just remove the variable "image_list".... robertl */
-       image_list = images;
-
-       /* get the images from the command line */
-       for(x = 2; x < argc; x++) {
-               int xx;
-
-               /*
-                * strip off any leading path information for
-                * determining file type
-                */
-               if( (fname = strrchr(argv[x],'/')) == NULL)
-                       fname = argv[x];
-               else
-                       fname++;        /* skip the slash */
-
-               for (xx = 0; xx < count; xx++) {
-                       if (strcmp(fname, images[xx].fname) == 0 ) {
-                               images[xx].pathname = argv[x];
-
-                               /* image should be NULL until */
-                               /* space is malloced */
-                               images[xx].image = NULL;
-                       }
-               }
-       }
-
-        sleep(3);
-
-       /*
-       ** Endless loop: get a request from the fep, and service that request.
-       */
-       for(;;) {
-               /* get the request */
-               if (debugflag)
-                       printf("b4 get ioctl...");
-
-               if (ioctl(fd,DIGI_DLREQ_GET, &dlio) == -1 ) {
-                       if (errorprint) {
-                               fprintf(stderr,
-                                       "%s: warning - download ioctl failed\n",
-                                       pgm);
-                               errorprint = 0;
-                       }
-                       sleep(2);
-               } else {
-                       if (debugflag)
-                               printf("dlio.req_type is %d bd %d\n",
-                                       dlio.req_type,dlio.bdid);
-
-                       switch(dlio.req_type) {
-                       case DLREQ_BIOS:
-                               /*
-                               ** find the bios image for this type
-                               */
-                               for ( x = 0; x < nimages; x++ ) {
-                                       if(image_list[x].type != IBIOS)
-                                               continue;
-
-                                       if ((dlio.image.fi.type & FAMILY) ==
-                                               image_list[x].family) {
-
-                                               if ( image_list[x].family == T_CX   ) {
-                                                       if ((dlio.image.fi.type & BUSTYPE)
-                                                               == T_PCIBUS ) {
-                                                               if ( image_list[x].subtype
-                                                                       == T_PCIBUS )
-                                                                       break;
-                                                       }
-                                                       else {
-                                                               break;
-                                                       }
-                                               }
-                                               else if ( image_list[x].family == T_EPC ) {
-                                               /* If subtype of image is T_PCIBUS, it is */
-                                               /* a PCI EPC image, so the board must */
-                                               /* have bus type T_PCIBUS to match */
-                                                       if ((dlio.image.fi.type & BUSTYPE)
-                                                               == T_PCIBUS ) {
-                                                               if ( image_list[x].subtype
-                                                                       == T_PCIBUS )
-                                                                       break;
-                                                       }
-                                                       else {
-                                                       /* NON PCI EPC doesn't use PCI image */
-                                                               if ( image_list[x].subtype
-                                                                       != T_PCIBUS )
-                                                                       break;
-                                                       }
-                                               }
-                                               else
-                                                       break;
-                                       }
-                                       else if ((dlio.image.fi.type & SUBTYPE) == image_list[x].subtype) {
-                                               /* PCXR board will break out of the loop here */
-                                               if ( image_list[x].subtype == T_PCXR   ) {
-                                                                       break;
-                                               }
-                                       }
-                               }
-
-                               if ( x >= nimages) {
-                                       /*
-                                       ** no valid images exist
-                                       */
-                                       if(nodldprint) {
-                                               fprintf(stderr,
-                                               "%s: cannot find correct BIOS image\n",
-                                                       pgm);
-                                               nodldprint = 0;
-                                       }
-                                       dlio.image.fi.type = -1;
-                                       if (ioctl(fd, DIGI_DLREQ_SET, &dlio) == -1) {
-                                               if (errorprint) {
-                                                       fprintf(stderr,
-                                                       "%s: warning - download ioctl failed\n",
-                                                       pgm);
-                                                       errorprint = 0;
-                                               }
-                                               sleep(2);
-                                       }
-                                       break;
-                               }
-                               squirt(dlio.req_type, dlio.bdid, &image_list[x]);
-                               break ;
-
-                       case DLREQ_FEP:
-                               /*
-                               ** find the fep image for this type
-                               */
-                               for ( x = 0; x < nimages; x++ ) {
-                                       if(image_list[x].type != IFEP)
-                                               continue;
-                                       if( (dlio.image.fi.type & FAMILY) ==
-                                               image_list[x].family ) {
-                                               if ( image_list[x].family == T_CX   ) {
-                                                       /* C/X PCI board */
-                                                       if ((dlio.image.fi.type & BUSTYPE)
-                                                               == T_PCIBUS ) {
-                                                               if ( image_list[x].subtype
-                                                                       == T_PCIBUS )
-                                                                       break;
-                                                       }
-                                                       else {
-                                                       /* Regular CX */
-                                                               break;
-                                                       }
-                                               }
-                                               else if ( image_list[x].family == T_EPC   )  {
-                                               /* If subtype of image is T_PCIBUS, it is */
-                                               /* a PCI EPC image, so the board must */
-                                               /* have bus type T_PCIBUS to match */
-                                                       if ((dlio.image.fi.type & BUSTYPE)
-                                                               == T_PCIBUS ) {
-                                                               if ( image_list[x].subtype
-                                                                       == T_PCIBUS )
-                                                                       break;
-                                                       }
-                                                       else {
-                                                       /* NON PCI EPC doesn't use PCI image */
-                                                               if ( image_list[x].subtype
-                                                                       != T_PCIBUS )
-                                                                       break;
-                                                       }
-                                               }
-                                               else
-                                                       break;
-                                       }
-                                       else if ((dlio.image.fi.type & SUBTYPE) == image_list[x].subtype) {
-                                               /* PCXR board will break out of the loop here */
-                                               if ( image_list[x].subtype == T_PCXR   ) {
-                                                                       break;
-                                               }
-                                       }
-                               }
-
-                               if ( x >= nimages) {
-                                       /*
-                                       ** no valid images exist
-                                       */
-                                       if(nodldprint) {
-                                               fprintf(stderr,
-                                               "%s: cannot find correct FEP image\n",
-                                                       pgm);
-                                               nodldprint = 0;
-                                       }
-                                       dlio.image.fi.type=-1;
-                                       if( ioctl(fd,DIGI_DLREQ_SET,&dlio) == -1 ) {
-                                               if(errorprint) {
-                                                       fprintf(stderr,
-                                               "%s: warning - download ioctl failed\n",
-                                                               pgm);
-                                                       errorprint=0;
-                                               }
-                                               sleep(2);
-                                       }
-                                       break;
-                               }
-                               squirt(dlio.req_type, dlio.bdid, &image_list[x]);
-                               break;
-
-                       case DLREQ_DEVCREATE:
-                               {
-                                       char string[1024];
-#if 0
-                                       sprintf(string, "%s /proc/dgap/%d/mknod", DEFSHELL, dlio.bdid);
-#endif
-                                       sprintf(string, "%s /usr/sbin/dgap_updatedevs %d", DEFSHELL, dlio.bdid);
-                                       system(string);
-
-                                       if (debugflag)
-                                               printf("Created Devices.\n");
-                                       if (ioctl(fd, DIGI_DLREQ_SET, &dlio) == -1 ) {
-                                               if(errorprint) {
-                                                       fprintf(stderr, "%s: warning - DEVCREATE ioctl failed\n",pgm);
-                                                       errorprint = 0;
-                                               }
-                                               sleep(2);
-                                       }
-                                       if (debugflag)
-                                               printf("After ioctl set - Created Device.\n");
-                               }
-
-                               break;
-
-                       case DLREQ_CONFIG:
-                               for ( x = 0; x < nimages; x++ ) {
-                                       if(image_list[x].type != ICONFIG)
-                                               continue;
-                                       else
-                                               break;
-                               }
-
-                               if ( x >= nimages) {
-                                       /*
-                                       ** no valid images exist
-                                       */
-                                       if(nodldprint) {
-                                               fprintf(stderr,
-                                               "%s: cannot find correct CONFIG image\n",
-                                                       pgm);
-                                               nodldprint = 0;
-                                       }
-                                       dlio.image.fi.type=-1;
-                                       if (ioctl(fd, DIGI_DLREQ_SET, &dlio) == -1 ) {
-                                               if(errorprint) {
-                                                       fprintf(stderr,
-                                               "%s: warning - download ioctl failed\n",
-                                                               pgm);
-                                                       errorprint=0;
-                                               }
-                                               sleep(2);
-                                       }
-                                       break;
-                               }
-
-                               squirt(dlio.req_type, dlio.bdid, &image_list[x]);
-                               break;
-
-                       case DLREQ_CONC:
-                               /*
-                               ** find the image needed for this download
-                               */
-                               if ( dp->dl_seq == 0 ) {
-                                       /*
-                                       ** find image for hardware rev range
-                                       */
-                                       for ( x = 0; x < nimages; x++ ) {
-                                               ii=&image_list[x];
-
-                                               if(image_list[x].type != ICONC)
-                                                       continue;
-
-                                               consider_file_rescan(ii) ;
-
-                                               ip = (struct downld_t *) image_list[x].image;
-                                               if (ip == NULL) continue;
-
-                                               /*
-                                                * When I removed Clusterport, I kept only the
-                                                * code that I was SURE wasn't ClusterPort.
-                                                * We may not need the next four lines of code.
-                                                */
-
-                                               if ((dp->dl_type != 'P' ) &&
-                                                (ip->dl_lrev <= dp->dl_lrev ) &&
-                                                ( dp->dl_lrev <= ip->dl_hrev))
-                                                       break;
-                                       }
-
-                                       if ( x >= nimages ) {
-                                               /*
-                                               ** No valid images exist
-                                               */
-                                               if(nodldprint) {
-                                                       fprintf(stderr,
-                                               "%s: cannot find correct download image %d\n",
-                                                               pgm, dp->dl_lrev);
-                                                       nodldprint=0;
-                                               }
-                                               continue;
-                                       }
-
-                               } else {
-                                       /*
-                                       ** find image version required
-                                       */
-                                       if ((ii = find_conc_image()) == NULL ) {
-                                               /*
-                                               ** No valid images exist
-                                               */
-                                               fprintf(stderr,
-                                               "%s: can't find rest of download image??\n",
-                                                       pgm);
-                                               continue;
-                                       }
-                               }
-
-                               /*
-                               ** download block of image
-                               */
-
-                               offset = 1024 * dp->dl_seq;
-
-                               /*
-                               ** test if block requested within image
-                               */
-                               if ( offset < ii->len ) {
-
-                                       /*
-                                       ** if it is, determine block size, set segment,
-                                       ** set size, set pointers, and copy block
-                                       */
-                                       if (( bsize = ii->len - offset ) > 1024 )
-                                               bsize = 1024;
-
-                                       /*
-                                       ** copy image version info to download area
-                                       */
-                                       dp->dl_srev = ip->dl_srev;
-                                       dp->dl_lrev = ip->dl_lrev;
-                                       dp->dl_hrev = ip->dl_hrev;
-
-                                       dp->dl_seg = (64 * dp->dl_seq) + ip->dl_seg;
-                                       dp->dl_size = bsize;
-
-                                       down = (char *)&dp->dl_data[0];
-                                       image = (char *)((char *)ip + offset);
-
-                                       memcpy(down, image, bsize);
-                               }
-                               else {
-                                       /*
-                                       ** Image has been downloaded, set segment and
-                                       ** size to indicate no more blocks
-                                       */
-                                       dp->dl_seg = ip->dl_seg;
-                                       dp->dl_size = 0;
-
-                                       /* Now, we can release the concentrator */
-                                       /* image from memory if we're running  */
-                                       /* from filesystem images */
-
-                                       if (ii->pathname)
-                                               if (ii->image) {
-                                                       free(ii->image);
-                                                       ii->image = NULL;
-                                               }
-                               }
-
-                               if (debugflag)
-                                               printf(
-                                               "sending conc dl section %d to %s from %s\n",
-                                                       dp->dl_seq, ii->name,
-                                               ii->pathname ? ii->pathname : "Internal Image");
-
-                               if (ioctl(fd, DIGI_DLREQ_SET, &dlio) == -1 ) {
-                                       if (errorprint) {
-                                               fprintf(stderr,
-                                               "%s: warning - download ioctl failed\n",
-                                                       pgm);
-                                               errorprint=0;
-                                       }
-                                       sleep(2);
-                               }
-                               break;
-                       } /* switch */
-               }
-               if (debugflag > 1) {
-                       printf("pausing: "); fflush(stdout);
-                       fflush(stdin);
-                       while(getchar() != '\n');
-                               printf("continuing\n");
-               }
-       }
-}
-
-/*
-** myperror()
-**
-**  Same as normal perror(), but places the program name at the beginning
-**  of the message.
-*/
-void myperror(char *s)
-{
-       fprintf(stderr,"%s: %s: %s.\n",pgm, s, strerror(errno));
-}