Annotation of ntddk/src/scsi/qic117/appvoltd.c, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
                      4: All Rights Reserved
                      5: 
                      6: Module Name:
                      7: 
                      8:     appvoltd.c
                      9: 
                     10: Abstract:
                     11: 
                     12:     appends a volume entry to the qic-40 volume table
                     13: 
                     14: Revision History:
                     15: 
                     16: 
                     17: 
                     18: 
                     19: --*/
                     20: 
                     21: //
                     22: // include files
                     23: //
                     24: 
                     25: #include <ntddk.h>
                     26: #include <ntddtape.h>
                     27: #include "common.h"
                     28: #include "q117.h"
                     29: #include "protos.h"
                     30: 
                     31: 
                     32: STATUS
                     33: q117AppVolTD(
                     34:     IN OUT PVOLUME_TABLE_ENTRY TheVolumeTable,
                     35:     IN OUT PQ117_CONTEXT Context
                     36:     )
                     37: 
                     38: /*++
                     39: 
                     40: Routine Description:
                     41: 
                     42:     Appends the VolDir to the tape directory.
                     43: 
                     44: Arguments:
                     45: 
                     46:     TheVolumeTable - pointer to the volume directory to be added
                     47: 
                     48:     Context -
                     49: 
                     50: Return Value:
                     51: 
                     52:     NoErr, any driver error
                     53: 
                     54: --*/
                     55: 
                     56: {
                     57:     LONG ret,i;
                     58:     LONG tmpseqnum;
                     59:     PIO_REQUEST ioreq;
                     60:     VOLUME_TABLE_ENTRY scrvol;
                     61:     PSEGMENT_BUFFER bufferInfo;
                     62: 
                     63:     ret =0;
                     64: 
                     65:     //
                     66:     // Now compute the VolDir's checksum.
                     67:     //
                     68: 
                     69:     TheVolumeTable->Signature=VolumeTableSig;
                     70: 
                     71:     //
                     72:     // If we are updating a specific volume entry
                     73:     //
                     74: 
                     75:     if (Context->ActiveVolumeNumber) {
                     76: 
                     77:         //
                     78:         // must use temporary var because ReadVolumeEntry() updates
                     79:         // ActiveVolumeNumber
                     80:         //
                     81: 
                     82:         tmpseqnum = Context->ActiveVolumeNumber;
                     83:         ret = q117SelectTD(Context);
                     84: 
                     85:         if (ret) {
                     86: 
                     87:             return(ret);
                     88: 
                     89:         }
                     90: 
                     91:         for (i=0;i<tmpseqnum;++i) {
                     92: 
                     93:             ret = q117ReadVolumeEntry(&scrvol,Context);
                     94:             if (ret)  {
                     95: 
                     96:                 return(ret);
                     97: 
                     98:             }
                     99: 
                    100:         }
                    101: 
                    102:         //
                    103:         // add in this volume table
                    104:         //
                    105: 
                    106:         RtlMoveMemory(Context->CurrentOperation.SegmentPointer,TheVolumeTable,sizeof(*TheVolumeTable));
                    107:         Context->CurrentOperation.SegmentPointer=q117GetLastBuffer(Context);
                    108: 
                    109:     } else {
                    110: 
                    111:         if (!ret ) {
                    112: 
                    113:             Context->CurrentOperation.SegmentPointer=q117GetFreeBuffer(&bufferInfo,Context);
                    114:             RtlZeroMemory(
                    115:                Context->CurrentOperation.SegmentPointer,
                    116:                q117GoodDataBytes(Context->CurrentTape.VolumeSegment,Context));
                    117: 
                    118:             //
                    119:             // add in this volume table
                    120:             //
                    121: 
                    122:             RtlMoveMemory(Context->CurrentOperation.SegmentPointer,TheVolumeTable,sizeof(*TheVolumeTable));
                    123: 
                    124:         }
                    125:     }
                    126: 
                    127:     if (!ret) {
                    128: 
                    129:         //
                    130:         // write out volume directory block
                    131:         //
                    132: 
                    133:         if (!(ret = q117IssIOReq(
                    134:                         Context->CurrentOperation.SegmentPointer,
                    135:                         DWrite,
                    136:                         (LONG)Context->CurrentTape.VolumeSegment * BLOCKS_PER_SEGMENT,
                    137:                         bufferInfo,
                    138:                         Context))) {
                    139: 
                    140:             ioreq=q117Dequeue(WaitForItem, Context);
                    141:             ret = ioreq->Status;
                    142: 
                    143:         }
                    144:     }
                    145: 
                    146:     if (!ret) {
                    147: 
                    148:         ++Context->ActiveVolumeNumber;
                    149: 
                    150:     }
                    151: 
                    152:     return(ret);
                    153: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.