mirror of
https://github.com/akuker/RASCSI.git
synced 2025-01-11 09:29:53 +00:00
Maintain list of supported block sizes
This commit is contained in:
parent
2d364f16d8
commit
bf5289d30e
@ -15,6 +15,7 @@
|
||||
#include "scsi_host_bridge.h"
|
||||
#include "scsi_daynaport.h"
|
||||
#include "device_factory.h"
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace rascsi_interface;
|
||||
@ -44,8 +45,13 @@ Device *DeviceFactory::CreateDevice(PbDeviceType& type, const string& filename,
|
||||
}
|
||||
}
|
||||
|
||||
Device *device = NULL;
|
||||
vector<int> sector_sizes;
|
||||
sector_sizes.push_back(512);
|
||||
sector_sizes.push_back(1024);
|
||||
sector_sizes.push_back(2048);
|
||||
sector_sizes.push_back(4096);
|
||||
|
||||
Device *device = NULL;
|
||||
switch (type) {
|
||||
case SAHD:
|
||||
device = new SASIHD();
|
||||
@ -58,7 +64,7 @@ Device *DeviceFactory::CreateDevice(PbDeviceType& type, const string& filename,
|
||||
} else {
|
||||
device = new SCSIHD();
|
||||
device->SetProtectable(true);
|
||||
((Disk *)device)->SetSectorSizeConfigurable(true);
|
||||
((Disk *)device)->SetSectorSizes(sector_sizes);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -67,7 +73,8 @@ Device *DeviceFactory::CreateDevice(PbDeviceType& type, const string& filename,
|
||||
device = new SCSIHD(true);
|
||||
device->SetProtectable(true);
|
||||
device->SetLockable(true);
|
||||
((Disk *)device)->SetSectorSizeConfigurable(true);
|
||||
device->SetProtectable(true);
|
||||
((Disk *)device)->SetSectorSizes(sector_sizes);
|
||||
break;
|
||||
|
||||
case SCMO:
|
||||
|
@ -424,7 +424,6 @@ void Disk::ReadDefectData10(SASIDEV *controller)
|
||||
Disk::Disk(const std::string id) : Device(id), PrimaryDevice(), BlockDevice()
|
||||
{
|
||||
// Work initialization
|
||||
sector_size_configurable = false;
|
||||
configured_sector_size = 0;
|
||||
disk.size = 0;
|
||||
disk.blocks = 0;
|
||||
@ -1765,12 +1764,12 @@ void Disk::SetSectorSize(int size)
|
||||
|
||||
bool Disk::IsSectorSizeConfigurable() const
|
||||
{
|
||||
return sector_size_configurable;
|
||||
return !sector_sizes.empty();
|
||||
}
|
||||
|
||||
void Disk::SetSectorSizeConfigurable(bool sector_size_configurable)
|
||||
void Disk::SetSectorSizes(const vector<int>& sector_sizes)
|
||||
{
|
||||
this->sector_size_configurable = sector_size_configurable;
|
||||
this->sector_sizes = sector_sizes;
|
||||
}
|
||||
|
||||
int Disk::GetConfiguredSectorSize() const
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "file_support.h"
|
||||
#include "filepath.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
class Disk : public Device, public PrimaryDevice, public BlockDevice
|
||||
@ -35,7 +36,7 @@ class Disk : public Device, public PrimaryDevice, public BlockDevice
|
||||
private:
|
||||
enum access_mode { RW6, RW10, RW16 };
|
||||
|
||||
bool sector_size_configurable;
|
||||
vector<int> sector_sizes;
|
||||
int configured_sector_size;
|
||||
|
||||
SASIDEV::ctrl_t *ctrl;
|
||||
@ -125,7 +126,8 @@ public:
|
||||
int GetSectorSize() const;
|
||||
void SetSectorSize(int);
|
||||
bool IsSectorSizeConfigurable() const;
|
||||
void SetSectorSizeConfigurable(bool);
|
||||
vector<int> GetSectorSizes() const;
|
||||
void SetSectorSizes(const vector<int>&);
|
||||
int GetConfiguredSectorSize() const;
|
||||
void SetConfiguredSectorSize(int);
|
||||
uint32_t GetBlockCount() const;
|
||||
|
@ -552,20 +552,26 @@ void GetDeviceTypeFeatures(PbServerInfo& serverInfo)
|
||||
features->set_supports_file(true);
|
||||
|
||||
types_features = serverInfo.add_types_features();
|
||||
types_features->add_block_sizes(512);
|
||||
types_features->add_block_sizes(1024);
|
||||
types_features->add_block_sizes(2048);
|
||||
types_features->add_block_sizes(4096);
|
||||
features = types_features->add_features();
|
||||
types_features->set_type(SCHD);
|
||||
features->set_protectable(true);
|
||||
features->set_supports_file(true);
|
||||
features->set_supports_block_size(true);
|
||||
|
||||
types_features = serverInfo.add_types_features();
|
||||
types_features->add_block_sizes(512);
|
||||
types_features->add_block_sizes(1024);
|
||||
types_features->add_block_sizes(2048);
|
||||
types_features->add_block_sizes(4096);
|
||||
features = types_features->add_features();
|
||||
types_features->set_type(SCRM);
|
||||
features->set_protectable(true);
|
||||
features->set_removable(true);
|
||||
features->set_lockable(true);
|
||||
features->set_supports_file(true);
|
||||
features->set_supports_block_size(true);
|
||||
|
||||
types_features = serverInfo.add_types_features();
|
||||
features = types_features->add_features();
|
||||
|
@ -61,8 +61,6 @@ message PbDeviceFeatures {
|
||||
bool lockable = 4;
|
||||
// Device supports image file
|
||||
bool supports_file = 5;
|
||||
// Device supports configurable block size
|
||||
bool supports_block_size = 6;
|
||||
}
|
||||
|
||||
// The status of a device
|
||||
@ -79,6 +77,8 @@ message PbDeviceStatus {
|
||||
message PbDeviceTypeFeatures {
|
||||
PbDeviceType type = 1;
|
||||
repeated PbDeviceFeatures features = 2;
|
||||
// List of supported block sizes
|
||||
repeated uint32 block_sizes = 6;
|
||||
}
|
||||
|
||||
// The image file data
|
||||
|
@ -236,15 +236,23 @@ void CommandServerInfo(const string& hostname, int port)
|
||||
if (features.supports_file()) {
|
||||
cout << " Image file support";
|
||||
}
|
||||
if (features.supports_block_size()) {
|
||||
cout << " Block size configurable";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
else {
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
if (type_features.block_sizes_size()) {
|
||||
cout << " Supported block sizes: ";
|
||||
for (int j = 0; j < type_features.block_sizes_size(); j++) {
|
||||
if (j) {
|
||||
cout << ", ";
|
||||
}
|
||||
cout << type_features.block_sizes(j);
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
}
|
||||
|
||||
cout << "Available devices:" << endl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user