CDisk Class Reference

#include <Disk.h>

Inheritance diagram for CDisk:

Inheritance graph
[legend]
Collaboration diagram for CDisk:

Collaboration graph
[legend]

Detailed Description

Abstract base class for disks (connects to a CDiskController).

Definition at line 92 of file Disk.h.


Public Member Functions

 CDisk (CConfigurator *cfg, CSystem *sys, CDiskController *c, int idebus, int idedev)
 Constructor.
virtual ~CDisk (void)
 Destructor.
virtual int SaveState (FILE *f)
 Save state to a Virtual Machine State file.
virtual int RestoreState (FILE *f)
 Restore state from a Virtual Machine State file.
virtual void scsi_select_me (int bus)
 Called when this device is selected.
virtual size_t scsi_expected_xfer_me (int bus)
 Return the number of bytes expected or available.
virtual void * scsi_xfer_ptr_me (int bus, size_t bytes)
 Return a pointer where the initiator can read or write data.
virtual void scsi_xfer_done_me (int bus)
 Process data written or read.
void set_atapi_mode ()
int do_scsi_command ()
 Handle a SCSI command.
int do_scsi_message ()
 Handle a (series of) SCSI message(s).
void do_scsi_error (int errcode)
virtual bool seek_byte (off_t_large byte)=0
virtual size_t read_bytes (void *dest, size_t bytes)=0
virtual size_t write_bytes (void *src, size_t bytes)=0
bool seek_block (off_t_large lba)
size_t read_blocks (void *dest, size_t blocks)
size_t write_blocks (void *src, size_t blocks)
size_t get_block_size ()
void set_block_size (size_t bs)
void determine_layout ()
off_t_large get_lba_size ()
off_t_large get_byte_size ()
off_t_large get_chs_size ()
off_t_large get_cylinders ()
long get_heads ()
long get_sectors ()
char * get_serial ()
char * get_model ()
char * get_rev ()
bool ro ()
bool rw ()
bool cdrom ()
void calc_cylinders ()
 the number of cylinders to report.

Protected Attributes

CConfiguratormyCfg
CDiskControllermyCtrl
int myBus
int myDev
char * serial_number
char * model_number
char * revision_number
bool read_only
bool is_cdrom
off_t_large byte_size
off_t_large cylinders
long heads
long sectors
bool atapi_mode
struct CDisk::SDisk_state state

Data Structures

struct  SDisk_state
 The state structure contains all elements that need to be saved to the statefile. More...

Constructor & Destructor Documentation

CDisk::CDisk ( CConfigurator cfg,
CSystem sys,
CDiskController c,
int  idebus,
int  idedev 
)

CDisk::~CDisk ( void   )  [virtual]

Destructor.

Definition at line 168 of file Disk.cpp.

References CSystemComponent::devid_string.


Member Function Documentation

int CDisk::SaveState ( FILE *  f  )  [virtual]

Save state to a Virtual Machine State file.

Implements CSystemComponent.

Definition at line 220 of file Disk.cpp.

References CSystemComponent::devid_string, disk_magic1, disk_magic2, and state.

int CDisk::RestoreState ( FILE *  f  )  [virtual]

Restore state from a Virtual Machine State file.

Implements CSystemComponent.

Definition at line 235 of file Disk.cpp.

References determine_layout(), CSystemComponent::devid_string, disk_magic1, disk_magic2, and state.

void CDisk::scsi_select_me ( int  bus  )  [virtual]

size_t CDisk::scsi_expected_xfer_me ( int  bus  )  [virtual]

void * CDisk::scsi_xfer_ptr_me ( int  bus,
size_t  bytes 
) [virtual]

void CDisk::scsi_xfer_done_me ( int  bus  )  [virtual]

void CDisk::set_atapi_mode (  )  [inline]

Definition at line 106 of file Disk.h.

References atapi_mode.

Referenced by CAliM1543C_ide::register_disk().

int CDisk::do_scsi_command (  ) 

Handle a SCSI command.

Called when a SCSI command has been received. We parse the command, and set up the state for the data in or data out phases.

If a data out phase is required, we return the value 2 to indicate this. In that case, do_scsi_command will be called again once the data out has been received from the initiator.

Definition at line 715 of file Disk.cpp.

References CDisk::SDisk_state::SDisk_scsi::SDisk_msgi::available, CDisk::SDisk_state::SDisk_scsi::SDisk_stat::available, CDisk::SDisk_state::SDisk_scsi::SDisk_dati::available, CDisk::SDisk_state::SDisk_scsi::SDisk_sense::available, cdrom(), CDisk::SDisk_state::SDisk_scsi::cmd, CDisk::SDisk_state::SDisk_scsi::SDisk_msgi::data, CDisk::SDisk_state::SDisk_scsi::SDisk_stat::data, CDisk::SDisk_state::SDisk_scsi::SDisk_dato::data, CDisk::SDisk_state::SDisk_scsi::SDisk_dati::data, CDisk::SDisk_state::SDisk_scsi::SDisk_sense::data, CDisk::SDisk_state::SDisk_scsi::SDisk_cmd::data, CDisk::SDisk_state::SDisk_scsi::dati, DATI_BUFSZ, CDisk::SDisk_state::SDisk_scsi::dato, DATO_BUFSZ, CSystemComponent::devid_string, do_scsi_error(), CDisk::SDisk_state::SDisk_scsi::SDisk_dato::expected, FAILURE_1, FAILURE_2, get_block_size(), get_cylinders(), get_heads(), get_lba_size(), get_sectors(), lba2msf(), CDisk::SDisk_state::SDisk_scsi::locked, CDisk::SDisk_state::SDisk_scsi::lun_selected, CDisk::SDisk_state::SDisk_scsi::msgi, CDisk::SDisk_state::SDisk_scsi::SDisk_msgi::read, CDisk::SDisk_state::SDisk_scsi::SDisk_stat::read, CDisk::SDisk_state::SDisk_scsi::SDisk_dati::read, read_blocks(), CDisk::SDisk_state::scsi, SCSI_ILL_CMD, CSCSIDevice::scsi_initiator_id, SCSI_LBA_RANGE, SCSI_OK, SCSI_TOO_BIG, SCSIBLOCKCMD_READ_CAPACITY, SCSICDROM_READ_TOC, SCSICDRRW_BLANK, SCSICDRRW_CLOSE_TRACK, SCSICDRRW_FORMAT, SCSICDRRW_READ_BUFFER_CAP, SCSICDRRW_READ_DISC_INFO, SCSICDRRW_READ_MASTER_CUE, SCSICDRRW_READ_TRACK_INFO, SCSICDRRW_REPAIR_TRACK, SCSICDRRW_RESERVE_TRACK, SCSICDRRW_SEND_CUE_SHEET, SCSICDRRW_SEND_OPC_INFO, SCSICMD_INQUIRY, SCSICMD_MODE_SELECT, SCSICMD_MODE_SENSE, SCSICMD_MODE_SENSE_10, SCSICMD_PREVENT_ALLOW_REMOVE, SCSICMD_READ, SCSICMD_READ_10, SCSICMD_READ_12, SCSICMD_READ_CD, SCSICMD_READ_LONG, SCSICMD_REQUEST_SENSE, SCSICMD_SYNCHRONIZE_CACHE, SCSICMD_TEST_UNIT_READY, SCSICMD_WRITE, SCSICMD_WRITE_10, SCSIMP_CACHING, SCSIMP_CDROM_CAP, SCSIMP_FLEX_PARAMS, SCSIMP_FORMAT_PARAMS, SCSIMP_READ_WRITE_ERRREC, SCSIMP_RIGID_GEOMETRY, SCSIMP_VENDOR, seek_block(), CDisk::SDisk_state::SDisk_scsi::sense, serial_number, set_block_size(), CDisk::SDisk_state::SDisk_scsi::stat, state, write_blocks(), CDisk::SDisk_state::SDisk_scsi::SDisk_dato::written, and CDisk::SDisk_state::SDisk_scsi::SDisk_cmd::written.

Referenced by scsi_xfer_done_me().

int CDisk::do_scsi_message (  ) 

void CDisk::do_scsi_error ( int  errcode  ) 

virtual bool CDisk::seek_byte ( off_t_large  byte  )  [pure virtual]

Implemented in CDiskDevice, CDiskFile, and CDiskRam.

Referenced by seek_block().

virtual size_t CDisk::read_bytes ( void *  dest,
size_t  bytes 
) [pure virtual]

Implemented in CDiskDevice, CDiskFile, and CDiskRam.

Referenced by read_blocks().

virtual size_t CDisk::write_bytes ( void *  src,
size_t  bytes 
) [pure virtual]

Implemented in CDiskDevice, CDiskFile, and CDiskRam.

Referenced by write_blocks().

bool CDisk::seek_block ( off_t_large  lba  )  [inline]

Definition at line 116 of file Disk.h.

References CDisk::SDisk_state::block_size, seek_byte(), and state.

Referenced by do_scsi_command().

size_t CDisk::read_blocks ( void *  dest,
size_t  blocks 
) [inline]

Definition at line 120 of file Disk.h.

References CDisk::SDisk_state::block_size, read_bytes(), and state.

Referenced by do_scsi_command().

size_t CDisk::write_blocks ( void *  src,
size_t  blocks 
) [inline]

Definition at line 124 of file Disk.h.

References CDisk::SDisk_state::block_size, state, and write_bytes().

Referenced by do_scsi_command().

size_t CDisk::get_block_size (  )  [inline]

Definition at line 129 of file Disk.h.

References CDisk::SDisk_state::block_size, and state.

Referenced by do_scsi_command().

void CDisk::set_block_size ( size_t  bs  )  [inline]

Definition at line 130 of file Disk.h.

References CDisk::SDisk_state::block_size, determine_layout(), and state.

Referenced by do_scsi_command().

void CDisk::determine_layout (  ) 

off_t_large CDisk::get_lba_size (  )  [inline]

Definition at line 138 of file Disk.h.

References CDisk::SDisk_state::block_size, byte_size, and state.

Referenced by determine_layout(), and do_scsi_command().

off_t_large CDisk::get_byte_size (  )  [inline]

Definition at line 139 of file Disk.h.

References byte_size.

off_t_large CDisk::get_chs_size (  )  [inline]

Definition at line 140 of file Disk.h.

References cylinders, heads, and sectors.

off_t_large CDisk::get_cylinders (  )  [inline]

Definition at line 141 of file Disk.h.

References cylinders.

Referenced by do_scsi_command().

long CDisk::get_heads (  )  [inline]

Definition at line 142 of file Disk.h.

References heads.

Referenced by do_scsi_command().

long CDisk::get_sectors (  )  [inline]

Definition at line 143 of file Disk.h.

References sectors.

Referenced by do_scsi_command().

char* CDisk::get_serial (  )  [inline]

Definition at line 145 of file Disk.h.

References serial_number.

char* CDisk::get_model (  )  [inline]

Definition at line 146 of file Disk.h.

References model_number.

char* CDisk::get_rev (  )  [inline]

Definition at line 147 of file Disk.h.

References revision_number.

bool CDisk::ro (  )  [inline]

Definition at line 149 of file Disk.h.

References read_only.

bool CDisk::rw (  )  [inline]

Definition at line 150 of file Disk.h.

References read_only.

bool CDisk::cdrom (  )  [inline]

Definition at line 151 of file Disk.h.

References is_cdrom.

Referenced by do_scsi_command(), and CAliM1543C_ide::register_disk().

void CDisk::calc_cylinders (  ) 

the number of cylinders to report.

Definition at line 176 of file Disk.cpp.

References CDisk::SDisk_state::block_size, byte_size, cylinders, heads, off_t_large, sectors, and state.


Field Documentation

Reimplemented from CSystemComponent.

Definition at line 155 of file Disk.h.

Referenced by CDisk(), CDiskDevice::CDiskDevice(), CDiskFile::CDiskFile(), and CDiskRam::CDiskRam().

Definition at line 156 of file Disk.h.

Referenced by CDisk().

int CDisk::myBus [protected]

Definition at line 157 of file Disk.h.

Referenced by CDisk().

int CDisk::myDev [protected]

Definition at line 158 of file Disk.h.

Referenced by CDisk().

char* CDisk::serial_number [protected]

Definition at line 160 of file Disk.h.

Referenced by CDisk(), do_scsi_command(), and get_serial().

char* CDisk::model_number [protected]

char* CDisk::revision_number [protected]

Definition at line 162 of file Disk.h.

Referenced by CDisk(), and get_rev().

bool CDisk::read_only [protected]

bool CDisk::is_cdrom [protected]

Definition at line 165 of file Disk.h.

Referenced by CDisk(), and cdrom().

off_t_large CDisk::byte_size [protected]

off_t_large CDisk::cylinders [protected]

long CDisk::heads [protected]

long CDisk::sectors [protected]

bool CDisk::atapi_mode [protected]

Definition at line 172 of file Disk.h.

Referenced by CDisk(), scsi_select_me(), scsi_xfer_done_me(), and set_atapi_mode().

struct CDisk::SDisk_state CDisk::state [protected]


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

SourceForge.net Logo
Project space on SourceForge.net