SUMMARY: cam_data entry for Exabyte 8205

From: <BENNETT_at_MPGARS.DESY.DE>
Date: Thu, 11 Jul 1996 17:24:59 +0100

My original questions:

> Does anyone have an Exabyte 8205 entry for cam_data.c that they could
> share with us? (I will post in a summary...)
>
> Alternatively, I did find a couple of postings of Eugene Chu's cam_data
> entry for the Exabyte 8505 while looking (unsuccessfully) in the archives
> for an 8205 entry -- does anyone know if the 8505 entry can also be used
> for an 8205?

Thanks to the following for their responses:

 -- Woody Lee (woody_at_gergu3.tamu.edu), who pointed me to the following
    ftp address of a cam_data.c "from DEC support" containing entries
    for both the Exabyte 8205 and 8505 (along with some other stuff not
    in the distribution version of cam_data.c on my DU 3.0 system):

    ftp://gergu3.tamu.edu/pub/OSF1/cam_data.c.exabyte

 -- Eugene Chu (chu_at_musp0.Jpl.Nasa.Gov), who sent me a copy of his
    cam_data.c entries (also in the archives) for the Exabyte 8500,
    8500C and 8505 with the tip that it should be easy to modify the
    latter for an 8205.

The 8505 entries in these two sources turn out to be quite similar,
except that cam_data.c.exabyte entries (8505 and 8205) include mode-
select codes. (See Chu's comments about mode-select codes for Exabyte
drives not working with the CAM drivers from older DU versions in the
archived versions of his Exabyte entries; they apparently do work with
newer DU versions, as I was able to use the 8205 entry from the file
cam_data.c.exabyte on my DU 3.0 system.)

So I decided to try the Exabyte 8205 entry from cam_data.c.exabyte first;
it did not work to simply replace the DU 3.0 distribution version of
/sys/data/cam_data.c with cam_data.c.exabyte (suitably renamed): doconfig
failed while trying to compile cam_data.c, because it couldn't find two
include files. I assume (but don't know) that this was because the file
cam_data.c.exabyte was not intended for a DU 3.0 system.

In any case, those include files are not needed for the Exabyte 8205 entry,
as I was able to extract the 8205 declarations from cam_data.c.exabyte and
insert them into the DU 3.0 distribution version of cam_data.c and then
build a new kernel with the modified version. I have appended the 8205
declarations with notes about where they should go after my signature.

With the new kernel, the Exabyte 8205 drive now responds as follows:

     rmtXl -- compression disabled
     rmtXm -- compression enabled
     rmtXh -- compression enabled
     rmtXa -- I/O error (ILLEGAL REQUEST)

The response for rmtXa is "correct", in the sense that the cam_data.c
entry for the 8205 specifies the density code that would enable high
density on an 8500 or 8505 drive; since the 8205 can't do that, it
quite reasonably responds with an ILLEGAL REQ code... It would likely
be trivial to change the density code for rmtXa to a legal value for
the 8205 if this behavior bothers you, but I haven't actually tried.

As expected (or at least "as you might hope"), the drive ignores the
density code (i.e., whether the user has enabled compression or not)
when reading data from a tape and when appending data to a tape that
already has something on it; in both cases, the data already on the
tape determine whether compression is used or not.

BTW, a comparison of the 8205 and 8505 cam_data entries and the rmtXa
behavior just described provides the answer to my second question:
the density codes for the 8205 and 8505 are the same, at least for the
low-density operations, but if you send an 8205 a command to enable
high-density operation, it returns an error.

----------------------------------------------------------------------------
Dr. William Bennett within Germany International
MPG AG Ribosomenstruktur Tel: (040) 8998 2833 +49 40 8998 2833
c/o DESY FAX: (040) 89 13 14 +49 40 89 13 14
Notkestr. 85
D-22603 Hamburg Internet: bennett_at_mpgars.desy.de
Germany
----------------------------------------------------------------------------
Summary of modifications to /sys/data/cam_data.c for an Exabyte 8205:

1) Find the DENSITY_TBL section:

  /*
   * The density structures for the known devices. You can
   * added your own at the bottom
   */
  DENSITY_TBL
  [snip]
  };
  /* End density structures.. Please extend the table
   * for your own tape drives.. The table is designed
   * to allow for flexibility and customer selections
   */

Change the "};" at the end to "}," (may be a comment to save), then insert
the following after the "}," :

exabyte8205_dens = {
    {
    { /* Minor 00 or rmtXl */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_54000_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 01 or rmtXh */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        0x90, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 02 or rmtXm */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        0x90, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 03 or rmtXa */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_45434_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 04 */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_45434_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 05 */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_45434_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 06 */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_45434_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    },
    { /* Minor 07 */
    /* Flags */
    DENS_VALID | DENS_BUF_VALID ,
    /* Density code Compression code Speed setting */
        SEQ_45434_BPI, NULL, NULL,
    /* Buffered setting Blocking */
        1, NULL
    }
    }

2) Find the SEQ_MODE_DATA6 section:

  /*
   * tzk08 page 0 SCSI 1
   */
  SEQ_MODE_DATA6
  [snip]
  };

Again change the terminating "};" to a "}," and insert the following
after the "},":

exabyte8205_page10 = { /* Exabyte 8205 */

        { /* Parameter List header */
        /* Reserved Reserved speed(3-0) */
        NULL, NULL, NULL,
        /* Buf_mode(6-4) wp(8) blk_desc_len */
        0x01, NULL, sizeof(SEQ_MODE_DESC)
        },
        { /* Block descriptor */
        /* Density num_blks2 num_blks1 */
        0x00, NULL, NULL,
        /* num_blks0 reserved blk_len2 */
        NULL, NULL, NULL,
        /* blk_len1 blk_len0 */
        NULL, NULL
        },
        {
        /* Device Configuration Page */
        /* byte0 byte1 byte2 */
        0x10, 0x0D, 0x07,
        /* byte3 byte4 byte5 */
        0x00, 0x80, 0x80,
        /* byte6 byte7 byte8 */
        0x00, 0x00, 0x00,
        /* byte9 byte10 byte11 */
        0x00, 0x00, 0x00,
        /* byte12 byte13 byte14 */
        0x00, 0x00, 0x00
        }
},

exabyte8205_page20 = { /* Exabyte 8205 */

        { /* Parameter List header */
        /* Reserved Reserved speed(3-0) */
        NULL, NULL, NULL,
        /* Buf_mode(6-4) wp(8) blk_desc_len */
        0x01, NULL, sizeof(SEQ_MODE_DESC)
        },
        { /* Block descriptor */
        /* Density num_blks2 num_blks1 */
        0x00, NULL, NULL,
        /* num_blks0 reserved blk_len2 */
        NULL, NULL, NULL,
        /* blk_len1 blk_len0 */
        NULL, NULL
        },
        {
        /* Exabyte Vendor Unique Parameters Page 1 */
        /* byte0 byte1 byte2 */
        0x20, 0x04, 0x0e,
        /* byte3 byte4 byte5 */
        0x01, 0x80, 0x07
        }
},


exabyte8205_page21 = { /* Exabyte 8205 */

        { /* Parameter List header */
        /* Reserved Reserved speed(3-0) */
        NULL, NULL, NULL,
        /* Buf_mode(6-4) wp(8) blk_desc_len */
        0x01, NULL, sizeof(SEQ_MODE_DESC)
        },
        { /* Block descriptor */
        /* Density num_blks2 num_blks1 */
        0x00, NULL, NULL,
        /* num_blks0 reserved blk_len2 */
        NULL, NULL, NULL,
        /* blk_len1 blk_len0 */
        NULL, NULL
        },
        {
        /* Exabyte Vendor Unique Parameters Page 2 */
        /* byte0 byte1 byte2 */
        0x21, 0x04, 0x00,
        /* byte3 byte4 byte5 */
        0x00, 0x00, 0x00
        }
};

3) Find the MODESEL_TBL section:

  MODESEL_TBL
  tzk08_mod = {
  [snip]
  };

Again change the terminating "};" to a "}," and insert the following
after the "},":

exabyte8205_mod = { /* Exabyte 8205 */
        {
        { /* MODE PAGE ENTRY 1 -- Device Configuration Page */
        /* Page number The data pointer */
        0x10, (u_char *)&exabyte8205_page10,
        /* Data len - This page plus Parameter List Header plus */
        /* Block descriptor */
           0x1b,
        /* SCSI2?? */
           0x2
        },
        { /* MODE PAGE ENTRY 2 -- Vendor Unique Page 1 */
        /* Page number The data pointer */
        0x20, (u_char *)&exabyte8205_page20,
        /* Data len - This page plus Parameter List Header plus */
        /* Block descriptor */
           0x12,
        /* SCSI2?? */
           0x2
        },
        { /* MODE PAGE ENTRY 3 -- Vendor Unique Page 2 */
        /* Page number The data pointer */
        0x21, (u_char *)&exabyte8205_page21,
        /* Data len - This page plus Parameter List Header plus */
        /* Block descriptor */
           0x12,
        /* SCSI2?? */
           0x2
        },
        { /* MODE PAGE ENTRY 4 */
        /* Page number The data pointer */
        NULL, (u_char *)NULL,
        /* Data len SCSI2?? */
        NULL, NULL
        },
        { /* MODE PAGE ENTRY 5 */
        /* Page number The data pointer */
        NULL, (u_char *)NULL,
        /* Data len SCSI2?? */
        NULL, NULL
        },
        { /* MODE PAGE ENTRY 6 */
        /* Page number The data pointer */
        NULL, (u_char *)NULL,
        /* Data len SCSI2?? */
        NULL, NULL
        },
        { /* MODE PAGE ENTRY 7 */
        /* Page number The data pointer */
        NULL, (u_char *)NULL,
        /* Data len SCSI2?? */
        NULL, NULL
        },
        { /* MODE PAGE ENTRY 8 */
        /* Page number The data pointer */
        NULL, (u_char *)NULL,
        /* Data len SCSI2?? */
        NULL, NULL
        }
        }
};

4) Finally find the DEV_DESC section; the descriptors for
   TAPES are near the end and will probably (at least as of DU 3.0)
   already includ the EXB-8200 and EXB-8500 (aka TKZ09):

  /*
   * CAM SCSI device descriptor information table.
   */
                          /* DO NOT CHANGE MAX_DEVICE_DESC */
  DEV_DESC cam_devdesc_tab[MAX_DEVICE_DESC] = {
  [snip]
  { 0 }
  
  };

Somewhere before the "{ 0 }" (e.g., between the 8200 and 8500 entries),
insert the following immediately after a "},":

/* EXABYTE EXB-8205 */
{ "EXABYTE EXB-8205", 16, "EXB-8205",
  (ALL_DTYPE_SEQUENTIAL << DTYPE_SHFT) | SZ_8MM_CLASS,
  (struct pt_info *)ccmn_null_sizes, SZ_NO_BLK, (1024 * 240),
  &exabyte8205_dens, &exabyte8205_mod, SZ_NO_FLAGS,
  NO_OPT_CMDS, 240, SZ_NO_QUE, DD_REQSNS_VAL | DD_INQ_VAL,
  36, 29
},

------------------- End of Exabyte 8205 entry --------------------------
Received on Thu Jul 11 1996 - 18:39:27 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:46 NZDT