data_Mode Class Reference
[SCSI Library]

#include <data.h>

Inheritance diagram for data_Mode:

Inheritance graph
[legend]
Collaboration diagram for data_Mode:

Collaboration graph
[legend]

List of all members.


Detailed Description

Mode data class.

Author:
Matej Kenda

Definition at line 128 of file data.h.


Public Types

enum  Page_t {
  pg_DEVCFG = 0x10, pg_PART = 0x11,
  pg_ELEMADDR = 0x1D, pg_AITCFG = 0x31,
  pg_AIT_APPENDPART = 0x32, pg_COMPRESSION = 0x0F
}
enum  MediumType_t {
  mt_HP_RW = 0x00, mt_HP_WORM = 0x01,
  mt_HP_CD_EMUL = 0x80, mt_IBM_ULTRIUM_3_WORM = 0x3C,
  mt_IBM_ULTRIUM_4_WORM = 0x4C
}

Public Member Functions

 data_Mode (Page_t a_what)
virtual ~data_Mode ()
Page_t GetPage () const
const data_Mode_tGetModeStruct () const
UInt8_t GetPartCount () const
UInt32_t GetPartSize (UInt8_t a_partNo) const
UInt8_t GetCurPartNumber () const
UInt8_t GetDensityCode () const
bool IsMediumWORM () const
bool GetCompressionStatus () const
void SetCompressionStatus (bool a_compression)
void SetPage (Page_t a_page)
void SetPartitions (vector< UInt32_t > a_partSizes)
 Prepare a tape partitioning MODE page (pg_PART) and appending partition (pg_AIT_APPENDPART).
void SetAITMode (Mode_t a_aitMode)
 Set AIT tape mode.
void SetAITUnloadAtPBOT (bool a_status)
 Set ulpbot bit.

Private Attributes

 log_CLASSID_m
data_Mode_t m_mode

Member Enumeration Documentation

Enumerator:
pg_DEVCFG  For tape drive.
pg_PART  For tape drive.
pg_ELEMADDR  For exchanger.
pg_AITCFG  AIT tape drive configuration.
pg_AIT_APPENDPART  AIT: Append partition.
pg_COMPRESSION  Compression.

Definition at line 130 of file data.h.

00130                  {
00132         pg_DEVCFG           = 0x10,
00134         pg_PART             = 0x11,
00136         pg_ELEMADDR         = 0x1D,
00138         pg_AITCFG           = 0x31,
00140         pg_AIT_APPENDPART   = 0x32,
00142         pg_COMPRESSION      = 0x0F
00143     } Page_t;

Enumerator:
mt_HP_RW  Read/write medium.
mt_HP_WORM  WORM medium.
mt_HP_CD_EMUL  CD emulation mode.
mt_IBM_ULTRIUM_3_WORM  See SCSI reference for IBM TotalStorage LTO Ultrium Tape Drive.
mt_IBM_ULTRIUM_4_WORM 

Definition at line 145 of file data.h.

00145                  {
00147         mt_HP_RW               = 0x00,
00149         mt_HP_WORM             = 0x01,
00151         mt_HP_CD_EMUL          = 0x80,
00152 
00154         mt_IBM_ULTRIUM_3_WORM  = 0x3C,
00155         mt_IBM_ULTRIUM_4_WORM  = 0x4C
00156 
00157     } MediumType_t;


Constructor & Destructor Documentation

data_Mode::data_Mode ( Page_t  a_what  ) 

Definition at line 35 of file data_mode.cpp.

References data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, data_Mode_t::hdr, log_FUNC_m, m_mode, data_Mode_t::part, and SetPage().

00035                                   {
00036     log_FUNC_m(data_Mode);
00037     memset (&m_mode, 0, sizeof(m_mode));
00038 
00039     SetPage(a_what);
00040 
00041     m_mode.hdr.blkDescLen = sizeof(m_mode.part.blkDesc);
00042 }

Here is the call graph for this function:

data_Mode::~data_Mode (  )  [virtual]

Definition at line 44 of file data_mode.cpp.

00044                       {
00045     // Empty
00046 }


Member Function Documentation

data_Mode::Page_t data_Mode::GetPage (  )  const

Definition at line 54 of file data_mode.cpp.

References data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_Num2Str(), data_ModePartPage_t::code, data_Mode_t::hdr, ie_INVALID_ARG, m_mode, data_Mode_t::part, and data_ModePartitions_t::partPage.

Referenced by cdb_ModeSense::cdb_ModeSense(), cdb_ModeSelect::GetBufferSize(), GetCurPartNumber(), GetDensityCode(), and IsMediumWORM().

00054                                          {
00055     if (m_mode.hdr.blkDescLen != sizeof(m_mode.part.blkDesc)) {
00056         throw ivd_InternalError(
00057             ie_INVALID_ARG,
00058             "BUG: MODE Block Descriptor should be " +
00059               cmn_Num2Str(sizeof(m_mode.part.blkDesc)) +
00060             " but is " +
00061               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00062     }
00063     return (Page_t)(m_mode.part.partPage.code);
00064 }

Here is the call graph for this function:

Here is the caller graph for this function:

const data_Mode_t & data_Mode::GetModeStruct (  )  const

UInt8_t data_Mode::GetPartCount (  )  const

Definition at line 71 of file data_mode.cpp.

References data_ModePartPage_t::addPart, data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_Num2Str(), data_ModePartPage_t::code, data_Mode_t::hdr, ie_INVALID_ARG, log_FUNC_m, m_mode, data_ModePartPage_t::maxAddPart, data_Mode_t::part, data_ModePartitions_t::partPage, and pg_PART.

Referenced by Append(), Ci(), Fmt(), GetCapacityInfo(), ParseTapeMedium(), Pi(), and bea_TapeMedium::RefreshTapeInfo().

00071                                       {
00072 
00073     if (m_mode.hdr.blkDescLen != sizeof(m_mode.part.blkDesc)) {
00074         log_FUNC_m(GetPartCount);
00075         throw ivd_InternalError(
00076             ie_INVALID_ARG,
00077             "BUG: MODE Block Descriptor should be " +
00078               cmn_Num2Str(sizeof(m_mode.part.blkDesc)) +
00079             " but is " +
00080               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00081     }
00082 
00083     const data_ModePartPage_t &part = m_mode.part.partPage;
00084 
00085     if ((Page_t)part.code != pg_PART) {
00086         return 0;
00087     }
00088 
00089     if (part.maxAddPart == 0) {
00090         return 1;
00091     }
00092 
00093     return part.addPart + 1;
00094 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt32_t data_Mode::GetPartSize ( UInt8_t  a_partNo  )  const

Definition at line 170 of file data_mode.cpp.

References data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_IntPow(), cmn_Num2Str(), data_ModePartPage_t::code, dbg_NORM, data_Mode_t::hdr, ie_INVALID_ARG, log_DBG_m, log_FUNC_m, m_mode, ntoh(), data_Mode_t::part, data_ModePartitions_t::partPage, data_ModePartPage_t::partUnits, pg_PART, data_ModePartPage_t::psum, data_ModePartitions_t::size, and size.

Referenced by Append(), Fmt(), ParseTapeMedium(), Pi(), and bea_TapeMedium::RefreshTapeInfo().

00170                                                       {
00171     log_FUNC_m(GetPartSize);
00172 
00173     if (m_mode.hdr.blkDescLen != sizeof(m_mode.part.blkDesc)) {
00174         throw ivd_InternalError(
00175             ie_INVALID_ARG,
00176             "BUG: MODE Block Descriptor should be " +
00177               cmn_Num2Str(sizeof(m_mode.part.blkDesc)) +
00178             " but is " +
00179               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00180     }
00181 
00182     const data_ModePartitions_t &part = m_mode.part;
00183 
00184     if ((Page_t)part.partPage.code != pg_PART) {
00185         return 0;
00186     }
00187 
00188     UInt64_t    m;
00189     scsi_Wrapper16 size(part.size[a_partNo]);
00190 
00191     UInt64_t    ps = UInt64_t(ntoh(size));
00192 
00193     switch (part.partPage.psum) {
00194         case 0:
00195             m = 1;
00196             log_DBG_m(dbg_NORM, "Size in bytes: " << ps);
00197             break;
00198         case 1:
00199             m = 1024;
00200             log_DBG_m(dbg_NORM, "Size in kiB: " << ps);
00201             break;
00202         case 2:
00203             m = (1024 * 1024);
00204             log_DBG_m(dbg_NORM, "Size in MiB: " << ps);
00205             break;
00206         case 3:
00207             m = cmn_IntPow(UInt32_t(10), UInt32_t(part.partPage.partUnits));
00208             log_DBG_m(dbg_NORM,
00209                 "Size in 10^" << UInt32_t(part.partPage.partUnits) <<
00210                 ": " << ps);
00211             break;
00212         default: m = 0;
00213             m = 0;
00214             log_DBG_m(dbg_NORM, "Unknown size unit!!");
00215             break;
00216     }
00217 
00218     // Convert to MB.
00219     return ( (m * ps) / (1024 * 1024) );
00220 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt8_t data_Mode::GetCurPartNumber (  )  const

Definition at line 134 of file data_mode.cpp.

References data_ModeDevCfgPage_t::activePart, data_ModeDevConfig_t::cfgPage, data_Mode_t::devcfg, GetPage(), ie_INVALID_ARG, ivd_Error, log_FUNC_m, m_mode, and pg_DEVCFG.

Referenced by Pn(), and bea_TapeMedium::ReadCurrentVolume().

00134                                           {
00135     if (GetPage() != pg_DEVCFG) {
00136         log_FUNC_m(GetCurPartNumber);
00137         throw ivd_Error(
00138             ie_INVALID_ARG,
00139             "Expected page DEVINFO, but not found.");
00140     }
00141     return (m_mode.devcfg.cfgPage.activePart);
00142 }

Here is the call graph for this function:

Here is the caller graph for this function:

UInt8_t data_Mode::GetDensityCode (  )  const

Definition at line 144 of file data_mode.cpp.

References data_ModeDevConfig_t::blkDesc, data_ModeGenBlkDesc_t::densityCode, data_Mode_t::devcfg, GetPage(), ie_INVALID_ARG, ivd_Error, log_FUNC_m, m_mode, and pg_DEVCFG.

Referenced by bea_TapeMedium::RefreshTapeInfo().

00144                                         {
00145     if (GetPage() != pg_DEVCFG) {
00146         log_FUNC_m(GetDensityCode);
00147         throw ivd_Error(
00148             ie_INVALID_ARG,
00149             "Expected page DEVINFO, but not found.");
00150     }
00151     return (m_mode.devcfg.blkDesc.densityCode);
00152 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool data_Mode::IsMediumWORM (  )  const

Definition at line 154 of file data_mode.cpp.

References GetPage(), data_Mode_t::hdr, ie_INVALID_ARG, ivd_Error, log_FUNC_m, m_mode, data_ModeHdr_t::medType, mt_HP_WORM, mt_IBM_ULTRIUM_3_WORM, mt_IBM_ULTRIUM_4_WORM, and pg_DEVCFG.

Referenced by bea_TapeMedium::DetectLTOWORM(), and Mamisworm().

00154                                    {
00155     if (GetPage() != pg_DEVCFG) {
00156         log_FUNC_m(IsMediumWorm);
00157         throw ivd_Error(ie_INVALID_ARG,
00158             "Expected page DEVINFO, but not found.");
00159     }
00160 
00161     if (   (m_mode.hdr.medType == mt_HP_WORM) 
00162         || (m_mode.hdr.medType == mt_IBM_ULTRIUM_3_WORM)
00163         || (m_mode.hdr.medType == mt_IBM_ULTRIUM_4_WORM)    ) {
00164         return true;
00165     }
00166 
00167     return false;
00168 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool data_Mode::GetCompressionStatus (  )  const

Definition at line 96 of file data_mode.cpp.

References data_ModeCompress_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_Num2Str(), data_Mode_t::compress, data_ModeCompress_t::compressPage, data_ModeCompressPage_t::dce, data_Mode_t::hdr, ie_INVALID_ARG, log_FUNC_m, and m_mode.

Referenced by Compression(), and bea_TapeMedium::RefreshCompressionState().

00096                                            {
00097     if (m_mode.hdr.blkDescLen != sizeof(m_mode.compress.blkDesc)) {
00098         log_FUNC_m(GetCompressionStatus);
00099         throw ivd_InternalError(
00100             ie_INVALID_ARG,
00101             "BUG: MODE Block Descriptor should be " +
00102             cmn_Num2Str(sizeof(m_mode.compress.blkDesc)) +
00103             " but is " +
00104               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00105     }
00106     if (m_mode.compress.compressPage.dce) {
00107         return true;
00108     }
00109     else {
00110         return false;
00111     }
00112 }

Here is the call graph for this function:

Here is the caller graph for this function:

void data_Mode::SetCompressionStatus ( bool  a_compression  ) 

Definition at line 114 of file data_mode.cpp.

References data_ModeCompress_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_Num2Str(), data_Mode_t::compress, data_ModeCompress_t::compressPage, data_ModeCompressPage_t::dce, data_Mode_t::hdr, ie_INVALID_ARG, log_FUNC_m, m_mode, and data_ModeHdr_t::modeLen.

Referenced by Compression(), and bea_TapeMedium::RefreshCompressionState().

00114                                                              { //compress true <=> ON , false <=> OFF
00115     log_FUNC_m(SetCompressionStatus);
00116     if (m_mode.hdr.blkDescLen != sizeof(m_mode.compress.blkDesc)) {
00117         throw ivd_InternalError(
00118             ie_INVALID_ARG,
00119             "BUG: MODE Block Descriptor should be " +
00120               cmn_Num2Str(sizeof(m_mode.compress.blkDesc)) +
00121             " but is " +
00122               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00123     }
00124     if (a_compression) {
00125         m_mode.compress.compressPage.dce = 1;
00126     }
00127     else {
00128         m_mode.compress.compressPage.dce = 0;
00129     }
00130     // needs to be set to 0, but log select sets it to 0x1B
00131     m_mode.hdr.modeLen = 0;
00132 }

Here is the call graph for this function:

Here is the caller graph for this function:

void data_Mode::SetPage ( data_Mode::Page_t  a_page  ) 

Definition at line 48 of file data_mode.cpp.

References data_ModePartPage_t::code, m_mode, data_Mode_t::part, and data_ModePartitions_t::partPage.

Referenced by Append(), bea_TapeMedium::AppendVolume(), and data_Mode().

00048                                               {
00049     // First part of the union overlaps. It does not matter,
00050     // whether we use part or ait to set values.
00051     m_mode.part.partPage.code = static_cast<UInt8_t>(a_page);
00052 }

Here is the caller graph for this function:

void data_Mode::SetPartitions ( vector< UInt32_t a_partSizes  ) 

Prepare a tape partitioning MODE page (pg_PART) and appending partition (pg_AIT_APPENDPART).

Values passed are in MB.

Definition at line 228 of file data_mode.cpp.

References data_ModePartPage_t::addp, data_ModePartPage_t::addPart, data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, data_ModePartPage_t::clear, cmn_Num2Str(), data_ModePartPage_t::code, dbg_LOW, dbg_NORM, data_ModePartPage_t::fdp, data_ModePartPage_t::fmtRec, data_Mode_t::hdr, hton(), data_ModePartPage_t::idp, ie_INVALID_ARG, ivd_Error, log_DBG_m, log_FUNC_m, log_WRN_m, m_mode, data_ModePartPage_t::maxAddPart, data_ModeHdr_t::medType, data_ModeHdr_t::modeLen, data_ModePartPage_t::pageLen, data_Mode_t::part, data_ModePartitions_t::partPage, data_ModePartPage_t::partUnits, pg_AIT_APPENDPART, pg_PART, data_ModePartPage_t::pofm, data_ModePartPage_t::psum, data_ModePartPage_t::sdp, size, and data_ModePartitions_t::size.

Referenced by Append(), bea_TapeMedium::AppendVolume(), Fmt(), and bea_TapeMedium::Format().

00228                                                            {
00229     log_FUNC_m(SetPartitions);
00230 
00231     if (m_mode.hdr.blkDescLen != sizeof(m_mode.part.blkDesc)) {
00232         throw ivd_InternalError(
00233             ie_INVALID_ARG,
00234             "BUG: MODE Block Descriptor should be " +
00235               cmn_Num2Str(sizeof(m_mode.part.blkDesc)) +
00236             " but is " +
00237               cmn_Num2Str(m_mode.hdr.blkDescLen) );
00238     }
00239 
00240     data_ModePartitions_t &part = m_mode.part;
00241 
00242     if (static_cast<Page_t>(part.partPage.code) == pg_AIT_APPENDPART) {
00243         if (a_partSizes.size() != 1) {
00244             throw ivd_Error(
00245                 ie_INVALID_ARG,
00246                 "Page pg_AIT_APPENDPART expects exactly one partition size.");
00247         }
00248     }
00249     else if ((Page_t)part.partPage.code != pg_PART) {
00250         log_WRN_m(
00251             "Mode page is " << static_cast<int>(part.partPage.code) <<
00252             ". Expected " << static_cast<int>(pg_PART) );
00253         part.partPage.code = pg_PART;
00254     }
00255 
00256     // ******************************************************************
00257     // Check for the unit that must be used to format this medium
00258     // AIT default units: MB
00259     // If any of the partitions exceeds 2^16-1 then a bigger unit must
00260     // be used.
00261     UInt16_t delimiter(1);
00262     UInt8_t  unit(0);
00263     static const UInt32_t mbLimit(0xFFFF);
00264 
00265     // Find the maximum values for the delimiter and unit
00266     for (UInt32_t i = 0; i < a_partSizes.size() ; i++) {
00267         if (a_partSizes[i] > mbLimit) {
00268             UInt16_t d = a_partSizes[i]/mbLimit;
00269             UInt16_t u(0);
00270 
00271             if (d < 10) { d = 10, u = 7; }
00272             else if(d < 100) { d = 100, u = 8; }
00273             else { d = 1000, u = 9; }
00274 
00275             if (d > delimiter) {
00276                 delimiter = d, unit = u;
00277             }
00278         }
00279     };
00280 
00281     log_DBG_m(dbg_LOW,
00282         "Size delimiter: " << delimiter <<
00283         ", unit: " << int(unit) );
00284 
00285     if (delimiter > 1) {
00286         part.partPage.psum = 3;
00287     }
00288     else {
00289         part.partPage.psum = 2;
00290     };
00291     part.partPage.partUnits = unit;
00292     // ******************************************************************
00293 
00294     if (a_partSizes.size() <= 1) {
00295         log_DBG_m(dbg_NORM, "Number of additional partitions: 0" );
00296         part.partPage.addPart = 0;
00297         scsi_Wrapper16 sizeW(part.size[0]);
00298         sizeW = 0;
00299     }
00300     else {
00301         part.partPage.addPart = a_partSizes.size() - 1;
00302         log_DBG_m(dbg_NORM,
00303             "Number of additional partitions: " <<
00304             (int)(part.partPage.addPart));
00305     }
00306 
00307     if (   a_partSizes.size() > 1
00308         || static_cast<Page_t>(part.partPage.code) == pg_AIT_APPENDPART) {
00309 
00310         for (UInt32_t i = 0; i < a_partSizes.size() ; i++) {
00311             // Convert the sizes as determined above
00312             UInt16_t size = a_partSizes[i]/delimiter;
00313             UInt16_t netSize (hton(size));
00314 
00315             scsi_Wrapper16 sizeW(part.size[i]);
00316             sizeW = netSize;
00317 
00318             log_DBG_m(dbg_NORM, (i+1) << ". volume: " << size);
00319         }
00320     }
00321 
00322     // These two bytes are reserved (and must be 0) for MODE SELECT.
00323     m_mode.hdr.modeLen = 0;
00324     m_mode.hdr.medType = 0;
00325 
00326     if ( static_cast<Page_t>(part.partPage.code) == pg_AIT_APPENDPART ) {
00327         // Reset reserved fields for appending partition
00328         part.partPage.maxAddPart    = 0;
00329         part.partPage.addp          = 0;
00330         part.partPage.clear         = 0;
00331         part.partPage.pofm          = 0;
00332         part.partPage.idp           = 0;
00333         part.partPage.sdp           = 0;
00334         part.partPage.fdp           = 0;
00335         part.partPage.fmtRec        = 0;
00336     }
00337     else {
00338         part.partPage.idp     = 1;
00339     }
00340 
00341     // pageLen means the amount of data that follows pageLen field.
00342     // Therefore the "- 2".
00343     part.partPage.pageLen =
00344         sizeof(part.partPage) - 2 +
00345         (part.partPage.addPart+1) * sizeof(UInt16_t);
00346 }

Here is the call graph for this function:

Here is the caller graph for this function:

void data_Mode::SetAITMode ( Mode_t  a_aitMode  ) 

Set AIT tape mode.

Definition at line 351 of file data_mode.cpp.

References data_ModeAITConfigPage_t::abs, data_ModeAITConfigPage_t::ait, data_Mode_t::ait, data_ModeAIT_t::aitPage, data_ModePartitions_t::blkDesc, data_ModeHdr_t::blkDescLen, cmn_Num2Str(), data_ModeAITConfigPage_t::code, data_ModeAITConfigPage_t::device, data_Mode_t::hdr, ie_INVALID_ARG, log_FUNC_m, log_WRN_m, m_mode, data_ModeHdr_t::medType, mode_DDS, data_ModeHdr_t::modeLen, data_Mode_t::part, pg_AITCFG, data_ModeAITConfigPage_t::span, data_ModeAITConfigPage_t::sysLogAlive, and data_ModeAITConfigPage_t::ulpbot.

Referenced by Fmt(), and bea_TapeMedium::Format().

00351                                            {
00352     log_FUNC_m(SetAITMode);
00353 
00354     if (m_mode.hdr.blkDescLen != sizeof(m_mode.part.blkDesc)) {
00355         throw ivd_InternalError(
00356             ie_INVALID_ARG,
00357             "BUG: MODE Block Descriptor should be " +
00358             cmn_Num2Str(sizeof(m_mode.part.blkDesc)) +
00359             " but is " +
00360             cmn_Num2Str(m_mode.hdr.blkDescLen) );
00361     }
00362 
00363     data_ModeAITConfigPage_t &ait = m_mode.ait.aitPage;
00364 
00365     if ((Page_t)ait.code != pg_AITCFG) {
00366         log_WRN_m(
00367             "Mode page is " << ait.code <<
00368             ". Expected " << pg_AITCFG);
00369         ait.code = pg_AITCFG;
00370     }
00371 
00372     // These two bytes are reserved (and must be 0) for MODE SELECT.
00373     m_mode.hdr.modeLen          = 0;
00374     m_mode.hdr.medType          = 0;
00375 
00376     if (a_aitMode == mode_DDS) {
00377         // AIT in DDS mode: AIT must be 0, DEVICE 0 and ULPBOT 1
00378         ait.ait            = 0;
00379         ait.device         = 0; // Do not create optional device area
00380         ait.ulpbot         = 1; // Load/unload must be performed at 
00381                                 // the device area located at PBOT,
00382                                 // even if there is an Optional Device Area.
00383     }
00384     else {
00385         //AIT in AIT mode: AIT must be 1, DEVICE 1 and ULPBOT 0
00386         ait.ait            = 1;
00387         ait.device         = 1; // Create optional device area
00388         ait.ulpbot         = 0; // Load/unload is performed at the Optional Device Area,
00389                                 // except for partition 0, not in the beginning of tape
00390     }
00391 
00392     ait.abs            = 1; 
00393     ait.sysLogAlive    = 3; // BIN: 11
00394     ait.span           = 0x0a;
00395 }

Here is the call graph for this function:

Here is the caller graph for this function:

void data_Mode::SetAITUnloadAtPBOT ( bool  a_status  ) 

Set ulpbot bit.

Definition at line 400 of file data_mode.cpp.

References data_Mode_t::ait, data_ModeAIT_t::aitPage, log_FUNC_m, m_mode, and data_ModeAITConfigPage_t::ulpbot.

Referenced by bea_TapeMedium::Format().

00400                                                  {
00401     log_FUNC_m(SetAITUnloadAtPBOT);
00402     m_mode.ait.aitPage.ulpbot = a_status;
00403 }

Here is the caller graph for this function:


Member Data Documentation

Reimplemented from scsi_Data.

Definition at line 180 of file data.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:07:03 2012 for OPENARCHIVE by  doxygen 1.5.6