mirror of
https://github.com/akuker/RASCSI.git
synced 2024-06-09 11:29:31 +00:00
5622694701
* Initial RTC skeleton * Added device info * Added TEST UNIT READY * Fixed command dispatcher * First untested naive implementation * Comment update * Code cleanup * More code cleanup * Updated date/time encoding * Updated versioning * Use standard RaSCSI INQUIRY version for SCRT device * Manpage update * Added shortcut for SCRT type * Added support for rtc "filename" * RTC supports LUNs > 0 * Fixed LUN count * Renaming * Renaming * Manpage update * Initial naive implementation * SCRA is removable * Updated command list * Added controller field * Shut down works, bus free phase is not yet entered * Clear caches on shutdown * Expose BusFree() * Moved code * Logging update * Moved code * Moved code * Added comment * Logging update * Code cleanup * Service device is not removable anymore (was only needed for testing) * Manpage update * Added comment * Comment update * Version update * Renaming * Comment update * Comment update * Renaming * Fixed typo * Added convenience method * Property handling optimization * Code cleanup * Code cleanup * Code cleanup, introduced base class * Added TODO * More code cleanup * Removed unnecessary assignments * Moved code * Removed forward declaration * Added base class * INclude cleanup * Moved scsi_command enum * Fixed warnings * Addressing circular dependencies * Removed duplicate enum * include file cleanup * Include cleanup * Reduced dependencies to Disk class (replaced by Device), fixed TODO * Include cleanup * PrimaryDevice implements ReportLuns * Inheritance update * Removed duplicate code * Moved code to base class * Cleanup * Removed duplicate field * Updated command dispatchign * Comment update * Moved code * Updated method visibilities * Moved MODE SENSE/MODE SELECT base code
91 lines
2.2 KiB
C++
91 lines
2.2 KiB
C++
//---------------------------------------------------------------------------
|
||
//
|
||
// SCSI Target Emulator RaSCSI (*^..^*)
|
||
// for Raspberry Pi
|
||
//
|
||
// Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp)
|
||
// Copyright (C) 2014-2020 GIMONS
|
||
// Copyright (C) akuker
|
||
//
|
||
// Licensed under the BSD 3-Clause License.
|
||
// See LICENSE file in the project root folder.
|
||
//
|
||
// [ SCSI device controller ]
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
#pragma once
|
||
|
||
#include "controllers/sasidev_ctrl.h"
|
||
#include <map>
|
||
|
||
//===========================================================================
|
||
//
|
||
// SCSI Device (Interits SASI device)
|
||
//
|
||
//===========================================================================
|
||
class SCSIDEV : public SASIDEV
|
||
{
|
||
public:
|
||
|
||
enum rascsi_shutdown_mode {
|
||
NONE,
|
||
RASCSI,
|
||
PI
|
||
};
|
||
|
||
// Internal data definition
|
||
typedef struct {
|
||
// Synchronous transfer
|
||
BOOL syncenable; // Synchronous transfer possible
|
||
int syncperiod; // Synchronous transfer period
|
||
int syncoffset; // Synchronous transfer offset
|
||
int syncack; // Number of synchronous transfer ACKs
|
||
|
||
// ATN message
|
||
bool atnmsg;
|
||
int msc;
|
||
BYTE msb[256];
|
||
} scsi_t;
|
||
|
||
// Basic Functions
|
||
SCSIDEV();
|
||
~SCSIDEV();
|
||
|
||
void Reset() override;
|
||
|
||
// External API
|
||
BUS::phase_t Process() override;
|
||
|
||
// Other
|
||
bool IsSASI() const override { return false; }
|
||
bool IsSCSI() const override { return true; }
|
||
|
||
void Error(ERROR_CODES::sense_key sense_key = ERROR_CODES::sense_key::NO_SENSE,
|
||
ERROR_CODES::asc asc = ERROR_CODES::asc::NO_ADDITIONAL_SENSE_INFORMATION) override; // Common error handling
|
||
|
||
void ShutDown(rascsi_shutdown_mode shutdown_mode) { this->shutdown_mode = shutdown_mode; }
|
||
|
||
private:
|
||
|
||
// Phase
|
||
void BusFree() override; // Bus free phase
|
||
void Selection() override; // Selection phase
|
||
void Execute() override; // Execution phase
|
||
void MsgOut(); // Message out phase
|
||
|
||
// commands
|
||
void CmdGetEventStatusNotification();
|
||
void CmdModeSelect10();
|
||
void CmdModeSense10();
|
||
|
||
// Data transfer
|
||
void Send() override;
|
||
void Receive() override;
|
||
bool XferMsg(DWORD msg);
|
||
|
||
scsi_t scsi; // Internal data
|
||
|
||
rascsi_shutdown_mode shutdown_mode;
|
||
};
|
||
|