mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Added skeleton for FreeBSD device handling.
This commit is contained in:
@@ -72,6 +72,10 @@
|
|||||||
<Compile Include="Device\AtaCommands\Smart.cs" />
|
<Compile Include="Device\AtaCommands\Smart.cs" />
|
||||||
<Compile Include="Device\AtaCommands\Cfa.cs" />
|
<Compile Include="Device\AtaCommands\Cfa.cs" />
|
||||||
<Compile Include="Device\AtaCommands\MCPT.cs" />
|
<Compile Include="Device\AtaCommands\MCPT.cs" />
|
||||||
|
<Compile Include="FreeBSD\Command.cs" />
|
||||||
|
<Compile Include="FreeBSD\Enums.cs" />
|
||||||
|
<Compile Include="FreeBSD\Extern.cs" />
|
||||||
|
<Compile Include="FreeBSD\Structs.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -80,6 +84,7 @@
|
|||||||
<Folder Include="Device\" />
|
<Folder Include="Device\" />
|
||||||
<Folder Include="Device\ScsiCommands\" />
|
<Folder Include="Device\ScsiCommands\" />
|
||||||
<Folder Include="Device\AtaCommands\" />
|
<Folder Include="Device\AtaCommands\" />
|
||||||
|
<Folder Include="FreeBSD\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<MonoDevelop>
|
<MonoDevelop>
|
||||||
|
|||||||
49
DiscImageChef.Devices/FreeBSD/Command.cs
Normal file
49
DiscImageChef.Devices/FreeBSD/Command.cs
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Command.cs
|
||||||
|
// Version : 1.0
|
||||||
|
// Author(s) : Natalia Portillo
|
||||||
|
//
|
||||||
|
// Component : Component
|
||||||
|
//
|
||||||
|
// Revision : $Revision$
|
||||||
|
// Last change by : $Author$
|
||||||
|
// Date : $Date$
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Contains a high level representation of the FreeBSD syscalls used to directly
|
||||||
|
// interface devices
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2011-2015 Claunia.com
|
||||||
|
// ****************************************************************************/
|
||||||
|
// //$Id$
|
||||||
|
using System;
|
||||||
|
namespace DiscImageChef.Devices.FreeBSD
|
||||||
|
{
|
||||||
|
public class Command
|
||||||
|
{
|
||||||
|
public Command()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
261
DiscImageChef.Devices/FreeBSD/Enums.cs
Normal file
261
DiscImageChef.Devices/FreeBSD/Enums.cs
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
// /// <summary>**************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Enums.cs
|
||||||
|
// Version : 1.0
|
||||||
|
// Author(s) : Natalia Portillo
|
||||||
|
//
|
||||||
|
// Component : Linux direct device access
|
||||||
|
//
|
||||||
|
// Revision : $Revision$
|
||||||
|
// Last change by : $Author$
|
||||||
|
// Date : $Date$
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Contains enumerations necessary for directly interfacing devices under FreeBSD
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2011-2015 Claunia.com
|
||||||
|
// ***************************************************************************</summary>
|
||||||
|
// //$Id$
|
||||||
|
using System;
|
||||||
|
namespace DiscImageChef.Devices.FreeBSD
|
||||||
|
{
|
||||||
|
[Flags]
|
||||||
|
enum FileFlags : int
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// O_RDONLY
|
||||||
|
///</summary>
|
||||||
|
ReadOnly = 0x00000000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_WRONLY
|
||||||
|
///</summary>
|
||||||
|
WriteOnly = 0x00000001,
|
||||||
|
/// <summary>
|
||||||
|
/// O_RDWR
|
||||||
|
///</summary>
|
||||||
|
ReadWrite = 0x00000002,
|
||||||
|
/// <summary>
|
||||||
|
/// O_NONBLOCK
|
||||||
|
///</summary>
|
||||||
|
NonBlocking = 0x00000004,
|
||||||
|
/// <summary>
|
||||||
|
/// O_APPEND
|
||||||
|
///</summary>
|
||||||
|
Append = 0x00000008,
|
||||||
|
/// <summary>
|
||||||
|
/// O_SHLOCK
|
||||||
|
///</summary>
|
||||||
|
SharedLock = 0x00000010,
|
||||||
|
/// <summary>
|
||||||
|
/// O_EXLOCK
|
||||||
|
///</summary>
|
||||||
|
ExclusiveLock = 0x00000020,
|
||||||
|
/// <summary>
|
||||||
|
/// O_ASYNC
|
||||||
|
///</summary>
|
||||||
|
Async = 0x00000040,
|
||||||
|
/// <summary>
|
||||||
|
/// O_FSYNC
|
||||||
|
///</summary>
|
||||||
|
SyncWrites = 0x00000080,
|
||||||
|
/// <summary>
|
||||||
|
/// O_NOFOLLOW
|
||||||
|
///</summary>
|
||||||
|
NoFollowSymlink = 0x00000100,
|
||||||
|
/// <summary>
|
||||||
|
/// O_CREAT
|
||||||
|
///</summary>
|
||||||
|
OpenOrCreate = 0x00000200,
|
||||||
|
/// <summary>
|
||||||
|
/// O_TRUNC
|
||||||
|
///</summary>
|
||||||
|
Truncate = 0x00000400,
|
||||||
|
/// <summary>
|
||||||
|
/// O_EXCL
|
||||||
|
///</summary>
|
||||||
|
CreateNew = 0x00000800,
|
||||||
|
/// <summary>
|
||||||
|
/// O_NOCTTY
|
||||||
|
///</summary>
|
||||||
|
NoControlTTY = 0x00008000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_DIRECT
|
||||||
|
///</summary>
|
||||||
|
Direct = 0x00010000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_DIRECTORY
|
||||||
|
///</summary>
|
||||||
|
Directory = 0x00020000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_EXEC
|
||||||
|
///</summary>
|
||||||
|
Execute = 0x00040000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_TTY_INIT
|
||||||
|
///</summary>
|
||||||
|
InitializeTTY = 0x00080000,
|
||||||
|
/// <summary>
|
||||||
|
/// O_CLOEXEC
|
||||||
|
///</summary>
|
||||||
|
CloseOnExec = 0x00100000
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
enum CamAtaIoFlags : byte
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 48-bit command
|
||||||
|
///</summary>
|
||||||
|
ExtendedCommand = 0x01,
|
||||||
|
/// <summary>
|
||||||
|
/// FPDMA command
|
||||||
|
///</summary>
|
||||||
|
FPDMA = 0x02,
|
||||||
|
/// <summary>
|
||||||
|
/// Control, not a command
|
||||||
|
///</summary>
|
||||||
|
Control = 0x04,
|
||||||
|
/// <summary>
|
||||||
|
/// Needs result
|
||||||
|
///</summary>
|
||||||
|
NeedResult = 0x08,
|
||||||
|
/// <summary>
|
||||||
|
/// DMA command
|
||||||
|
///</summary>
|
||||||
|
DMA = 0x10
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>XPT Opcodes for xpt_action</summary>
|
||||||
|
[Flags]
|
||||||
|
enum xpt_opcode
|
||||||
|
{
|
||||||
|
// Function code flags are bits greater than 0xff
|
||||||
|
|
||||||
|
/// <summary>Non-immediate function code</summary>
|
||||||
|
XPT_FC_QUEUED = 0x100,
|
||||||
|
XPT_FC_USER_CCB = 0x200,
|
||||||
|
/// <summary>Only for the transport layer device</summary>
|
||||||
|
XPT_FC_XPT_ONLY = 0x400,
|
||||||
|
/// <summary>Passes through the device queues</summary>
|
||||||
|
XPT_FC_DEV_QUEUED = 0x800 | XPT_FC_QUEUED,
|
||||||
|
|
||||||
|
// Common function commands: 0x00->0x0F
|
||||||
|
|
||||||
|
/// <summary>Execute Nothing</summary>
|
||||||
|
XPT_NOOP = 0x00,
|
||||||
|
/// <summary>Execute the requested I/O operation</summary>
|
||||||
|
XPT_SCSI_IO = 0x01 | XPT_FC_DEV_QUEUED,
|
||||||
|
/// <summary>Get type information for specified device</summary>
|
||||||
|
XPT_GDEV_TYPE = 0x02,
|
||||||
|
/// <summary>Get a list of peripheral devices</summary>
|
||||||
|
XPT_GDEVLIST = 0x03,
|
||||||
|
/// <summary>Path routing inquiry</summary>
|
||||||
|
XPT_PATH_INQ = 0x04,
|
||||||
|
/// <summary>Release a frozen device queue</summary>
|
||||||
|
XPT_REL_SIMQ = 0x05,
|
||||||
|
/// <summary>Set Asynchronous Callback Parameters</summary>
|
||||||
|
XPT_SASYNC_CB = 0x06,
|
||||||
|
/// <summary>Set device type information</summary>
|
||||||
|
XPT_SDEV_TYPE = 0x07,
|
||||||
|
/// <summary>(Re)Scan the SCSI Bus</summary>
|
||||||
|
XPT_SCAN_BUS = 0x08 | XPT_FC_QUEUED | XPT_FC_USER_CCB
|
||||||
|
| XPT_FC_XPT_ONLY,
|
||||||
|
/// <summary>Get EDT entries matching the given pattern</summary>
|
||||||
|
XPT_DEV_MATCH = 0x09 | XPT_FC_XPT_ONLY,
|
||||||
|
/// <summary>Turn on debugging for a bus, target or lun</summary>
|
||||||
|
XPT_DEBUG = 0x0a,
|
||||||
|
/// <summary>Path statistics (error counts, etc.)</summary>
|
||||||
|
XPT_PATH_STATS = 0x0b,
|
||||||
|
/// <summary>Device statistics (error counts, etc.)</summary>
|
||||||
|
XPT_GDEV_STATS = 0x0c,
|
||||||
|
/// <summary>Get/Set Device advanced information</summary>
|
||||||
|
XPT_DEV_ADVINFO = 0x0e,
|
||||||
|
/// <summary>Asynchronous event</summary>
|
||||||
|
XPT_ASYNC = 0x0f | XPT_FC_QUEUED | XPT_FC_USER_CCB
|
||||||
|
| XPT_FC_XPT_ONLY,
|
||||||
|
|
||||||
|
/// <summary>SCSI Control Functions: 0x10->0x1F</summary>
|
||||||
|
|
||||||
|
/// <summary>Abort the specified CCB</summary>
|
||||||
|
XPT_ABORT = 0x10,
|
||||||
|
/// <summary>Reset the specified SCSI bus</summary>
|
||||||
|
XPT_RESET_BUS = 0x11 | XPT_FC_XPT_ONLY,
|
||||||
|
/// <summary>Bus Device Reset the specified SCSI device</summary>
|
||||||
|
XPT_RESET_DEV = 0x12 | XPT_FC_DEV_QUEUED,
|
||||||
|
/// <summary>Terminate the I/O process</summary>
|
||||||
|
XPT_TERM_IO = 0x13,
|
||||||
|
/// <summary>Scan Logical Unit</summary>
|
||||||
|
XPT_SCAN_LUN = 0x14 | XPT_FC_QUEUED | XPT_FC_USER_CCB
|
||||||
|
| XPT_FC_XPT_ONLY,
|
||||||
|
/// <summary>Get default/user transfer settings for the target</summary>
|
||||||
|
XPT_GET_TRAN_SETTINGS = 0x15,
|
||||||
|
/// <summary>Set transfer rate/width negotiation settings</summary>
|
||||||
|
XPT_SET_TRAN_SETTINGS = 0x16,
|
||||||
|
/// <summary>Calculate the geometry parameters for a device give the sector size and volume size.</summary>
|
||||||
|
XPT_CALC_GEOMETRY = 0x17,
|
||||||
|
/// <summary>Execute the requested ATA I/O operation</summary>
|
||||||
|
XPT_ATA_IO = 0x18 | XPT_FC_DEV_QUEUED,
|
||||||
|
|
||||||
|
/// <summary>Compat only</summary>
|
||||||
|
XPT_GET_SIM_KNOB_OLD = 0x18,
|
||||||
|
|
||||||
|
/// <summary>Set SIM specific knob values.</summary>
|
||||||
|
XPT_SET_SIM_KNOB = 0x19,
|
||||||
|
/// <summary>Get SIM specific knob values.</summary>
|
||||||
|
XPT_GET_SIM_KNOB = 0x1a,
|
||||||
|
/// <summary>Serial Management Protocol</summary>
|
||||||
|
XPT_SMP_IO = 0x1b | XPT_FC_DEV_QUEUED,
|
||||||
|
/// <summary>Scan Target</summary>
|
||||||
|
XPT_SCAN_TGT = 0x1E | XPT_FC_QUEUED | XPT_FC_USER_CCB
|
||||||
|
| XPT_FC_XPT_ONLY,
|
||||||
|
|
||||||
|
// HBA engine commands 0x20->0x2F
|
||||||
|
|
||||||
|
/// <summary>HBA engine feature inquiry</summary>
|
||||||
|
XPT_ENG_INQ = 0x20 | XPT_FC_XPT_ONLY,
|
||||||
|
/// <summary>HBA execute engine request</summary>
|
||||||
|
XPT_ENG_EXEC = 0x21 | XPT_FC_DEV_QUEUED,
|
||||||
|
|
||||||
|
// Target mode commands: 0x30->0x3F
|
||||||
|
|
||||||
|
/// <summary>Enable LUN as a target</summary>
|
||||||
|
XPT_EN_LUN = 0x30,
|
||||||
|
/// <summary>Execute target I/O request</summary>
|
||||||
|
XPT_TARGET_IO = 0x31 | XPT_FC_DEV_QUEUED,
|
||||||
|
/// <summary>Accept Host Target Mode CDB</summary>
|
||||||
|
XPT_ACCEPT_TARGET_IO = 0x32 | XPT_FC_QUEUED | XPT_FC_USER_CCB,
|
||||||
|
/// <summary>Continue Host Target I/O Connection</summary>
|
||||||
|
XPT_CONT_TARGET_IO = 0x33 | XPT_FC_DEV_QUEUED,
|
||||||
|
/// <summary>Notify Host Target driver of event (obsolete)</summary>
|
||||||
|
XPT_IMMED_NOTIFY = 0x34 | XPT_FC_QUEUED | XPT_FC_USER_CCB,
|
||||||
|
/// <summary>Acknowledgement of event (obsolete)</summary>
|
||||||
|
XPT_NOTIFY_ACK = 0x35,
|
||||||
|
/// <summary>Notify Host Target driver of event</summary>
|
||||||
|
XPT_IMMEDIATE_NOTIFY = 0x36 | XPT_FC_QUEUED | XPT_FC_USER_CCB,
|
||||||
|
/// <summary>Acknowledgement of event</summary>
|
||||||
|
XPT_NOTIFY_ACKNOWLEDGE = 0x37 | XPT_FC_QUEUED | XPT_FC_USER_CCB,
|
||||||
|
|
||||||
|
/// <summary>Vendor Unique codes: 0x80->0x8F</summary>
|
||||||
|
XPT_VUNIQUE = 0x80
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
73
DiscImageChef.Devices/FreeBSD/Extern.cs
Normal file
73
DiscImageChef.Devices/FreeBSD/Extern.cs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Extern.cs
|
||||||
|
// Version : 1.0
|
||||||
|
// Author(s) : Natalia Portillo
|
||||||
|
//
|
||||||
|
// Component : Component
|
||||||
|
//
|
||||||
|
// Revision : $Revision$
|
||||||
|
// Last change by : $Author$
|
||||||
|
// Date : $Date$
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Contains the P/Invoke definitions of FreeBSD syscalls used to directly interface devices
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2011-2015 Claunia.com
|
||||||
|
// ****************************************************************************/
|
||||||
|
// //$Id$
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace DiscImageChef.Devices.FreeBSD
|
||||||
|
{
|
||||||
|
static class Extern
|
||||||
|
{
|
||||||
|
[DllImport("libc", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern int open(
|
||||||
|
string pathname,
|
||||||
|
[MarshalAs(UnmanagedType.U4)]
|
||||||
|
FileFlags flags);
|
||||||
|
|
||||||
|
[DllImport("libc")]
|
||||||
|
internal static extern int close(int fd);
|
||||||
|
|
||||||
|
[DllImport("libcam", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern IntPtr cam_open_device(
|
||||||
|
string path,
|
||||||
|
[MarshalAs(UnmanagedType.U4)]
|
||||||
|
FileFlags flags);
|
||||||
|
|
||||||
|
[DllImport("libcam", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern void cam_close_device(IntPtr dev);
|
||||||
|
|
||||||
|
[DllImport("libcam", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern IntPtr cam_getccb(IntPtr dev);
|
||||||
|
|
||||||
|
[DllImport("libcam", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern void cam_freeccb(IntPtr ccb);
|
||||||
|
|
||||||
|
[DllImport("libcam", CharSet = CharSet.Ansi, SetLastError = true)]
|
||||||
|
internal static extern int cam_send_ccb(IntPtr dev, IntPtr ccb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
226
DiscImageChef.Devices/FreeBSD/Structs.cs
Normal file
226
DiscImageChef.Devices/FreeBSD/Structs.cs
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
// /***************************************************************************
|
||||||
|
// The Disc Image Chef
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Filename : Structs.cs
|
||||||
|
// Version : 1.0
|
||||||
|
// Author(s) : Natalia Portillo
|
||||||
|
//
|
||||||
|
// Component : Component
|
||||||
|
//
|
||||||
|
// Revision : $Revision$
|
||||||
|
// Last change by : $Author$
|
||||||
|
// Date : $Date$
|
||||||
|
//
|
||||||
|
// --[ Description ] ----------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Contains structures necessary for directly interfacing devices under FreeBSD
|
||||||
|
//
|
||||||
|
// --[ License ] --------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2011-2015 Claunia.com
|
||||||
|
// ****************************************************************************/
|
||||||
|
// //$Id$
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace DiscImageChef.Devices.FreeBSD
|
||||||
|
{
|
||||||
|
struct ata_cmd
|
||||||
|
{
|
||||||
|
public CamAtaIoFlags flags;
|
||||||
|
public byte command;
|
||||||
|
public byte features;
|
||||||
|
public byte lba_low;
|
||||||
|
public byte lba_mid;
|
||||||
|
public byte lba_high;
|
||||||
|
public byte device;
|
||||||
|
public byte lba_low_exp;
|
||||||
|
public byte lba_mid_exp;
|
||||||
|
public byte lba_high_exp;
|
||||||
|
public byte features_exp;
|
||||||
|
public byte sector_count;
|
||||||
|
public byte sector_count_exp;
|
||||||
|
public byte control;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ata_res
|
||||||
|
{
|
||||||
|
public CamAtaIoFlags flags;
|
||||||
|
public byte status;
|
||||||
|
public byte error;
|
||||||
|
public byte lba_low;
|
||||||
|
public byte lba_mid;
|
||||||
|
public byte lba_high;
|
||||||
|
public byte device;
|
||||||
|
public byte lba_low_exp;
|
||||||
|
public byte lba_mid_exp;
|
||||||
|
public byte lba_high_exp;
|
||||||
|
public byte sector_count;
|
||||||
|
public byte sector_count_exp;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct cam_pinfo
|
||||||
|
{
|
||||||
|
public UInt32 priority;
|
||||||
|
public UInt32 generation;
|
||||||
|
public int index;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct camq_entry
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// LIST_ENTRY(ccb_hdr)=le->*le_next
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr le_next;
|
||||||
|
/// <summary>
|
||||||
|
/// LIST_ENTRY(ccb_hdr)=le->**le_prev
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr le_prev;
|
||||||
|
/// <summary>
|
||||||
|
/// SLIST_ENTRY(ccb_hdr)=sle->*sle_next
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr sle_next;
|
||||||
|
/// <summary>
|
||||||
|
/// TAILQ_ENTRY(ccb_hdr)=tqe->*tqe_next
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr tqe_next;
|
||||||
|
/// <summary>
|
||||||
|
/// TAILQ_ENTRY(ccb_hdr)=tqe->**tqe_prev
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr tqe_prev;
|
||||||
|
/// <summary>
|
||||||
|
/// STAILQ_ENTRY(ccb_hdr)=stqe->*stqe_next
|
||||||
|
/// </summary>
|
||||||
|
public IntPtr stqe_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct timeval
|
||||||
|
{
|
||||||
|
public Int64 tv_sec;
|
||||||
|
/// <summary>long</summary>
|
||||||
|
public IntPtr tv_usec;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ccb_qos_area
|
||||||
|
{
|
||||||
|
public timeval etime;
|
||||||
|
public UIntPtr sim_data;
|
||||||
|
public UIntPtr periph_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ccb_hdr
|
||||||
|
{
|
||||||
|
public cam_pinfo pinfo;
|
||||||
|
public camq_entry xpt_links;
|
||||||
|
public camq_entry sim_links;
|
||||||
|
public camq_entry periph_links;
|
||||||
|
public UInt32 retry_count;
|
||||||
|
public IntPtr cbfcnp;
|
||||||
|
public xpt_opcode func_code;
|
||||||
|
public UInt32 status;
|
||||||
|
public IntPtr path;
|
||||||
|
public uint path_id;
|
||||||
|
public uint target_id;
|
||||||
|
public UInt64 target_lun;
|
||||||
|
public UInt32 flags;
|
||||||
|
public UInt32 xflags;
|
||||||
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
|
||||||
|
public IntPtr[] periph_priv;
|
||||||
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
|
||||||
|
public IntPtr[] sim_priv;
|
||||||
|
public ccb_qos_area qos;
|
||||||
|
public UInt32 timeout;
|
||||||
|
public timeval softtimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct scsi_sense_data
|
||||||
|
{
|
||||||
|
public byte error_code;
|
||||||
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 251)]
|
||||||
|
public byte[] sense_buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// SCSI I/O Request CCB used for the XPT_SCSI_IO and XPT_CONT_TARGET_IO function codes.
|
||||||
|
/// </summary>
|
||||||
|
struct cdb_scsiio
|
||||||
|
{
|
||||||
|
public ccb_hdr ccb_h;
|
||||||
|
/// <summary>Ptr for next CCB for action</summary>
|
||||||
|
public IntPtr next_ccb;
|
||||||
|
/// <summary>Ptr to mapping info</summary>
|
||||||
|
public IntPtr req_map;
|
||||||
|
/// <summary>Ptr to the data buf/SG list</summary>
|
||||||
|
public IntPtr data_ptr;
|
||||||
|
/// <summary>Data transfer length</summary>
|
||||||
|
public UInt32 dxfer_len;
|
||||||
|
/// <summary>Autosense storage</summary>
|
||||||
|
public scsi_sense_data sense_data;
|
||||||
|
/// <summary>Number of bytes to autosense</summary>
|
||||||
|
public byte sense_len;
|
||||||
|
/// <summary>Number of bytes for the CDB</summary>
|
||||||
|
public byte cdb_len;
|
||||||
|
/// <summary>Number of SG list entries</summary>
|
||||||
|
public UInt16 sglist_cnt;
|
||||||
|
/// <summary>Returned SCSI status</summary>
|
||||||
|
public byte scsi_status;
|
||||||
|
/// <summary>Autosense resid length: 2's comp</summary>
|
||||||
|
public sbyte sense_resid;
|
||||||
|
/// <summary>Transfer residual length: 2's comp</summary>
|
||||||
|
public Int32 resid;
|
||||||
|
/// <summary>Union for CDB bytes/pointer</summary>
|
||||||
|
public IntPtr cdb_io;
|
||||||
|
/// <summary>Pointer to the message buffer</summary>
|
||||||
|
public IntPtr msg_ptr;
|
||||||
|
/// <summary>Number of bytes for the Message</summary>
|
||||||
|
public UInt16 msg_len;
|
||||||
|
/// <summary>What to do for tag queueing. The tag action should be either the define below (to send a non-tagged transaction) or one of the defined scsi tag messages from scsi_message.h.</summary>
|
||||||
|
public byte tag_action;
|
||||||
|
/// <summary>tag id from initator (target mode)</summary>
|
||||||
|
public UInt32 tag_id;
|
||||||
|
/// <summary>initiator id of who selected</summary>
|
||||||
|
public UInt32 init_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ATA I/O Request CCB used for the XPT_ATA_IO function code.
|
||||||
|
/// </summary>
|
||||||
|
struct ccb_ataio
|
||||||
|
{
|
||||||
|
public ccb_hdr ccb_h;
|
||||||
|
/// <summary>Ptr for next CCB for action</summary>
|
||||||
|
public IntPtr next_ccb;
|
||||||
|
/// <summary>ATA command register set</summary>
|
||||||
|
public ata_cmd cmd;
|
||||||
|
/// <summary>ATA result register set</summary>
|
||||||
|
public ata_res res;
|
||||||
|
/// <summary>Ptr to the data buf/SG list</summary>
|
||||||
|
public IntPtr data_ptr;
|
||||||
|
/// <summary>Data transfer length</summary>
|
||||||
|
public UInt32 dxfer_len;
|
||||||
|
/// <summary>Transfer residual length: 2's comp</summary>
|
||||||
|
public Int32 resid;
|
||||||
|
/// <summary>What to do for tag queueing. The tag action should be either the define below (to send a non-tagged transaction) or one of the defined scsi tag messages from scsi_message.h.</summary>
|
||||||
|
public byte tag_action;
|
||||||
|
/// <summary>tag id from initator (target mode)</summary>
|
||||||
|
public UInt32 tag_id;
|
||||||
|
/// <summary>initiator id of who selected</summary>
|
||||||
|
public UInt32 init_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -102,9 +102,9 @@ Global
|
|||||||
$1.Text = @/***************************************************************************\nThe Disc Image Chef\n----------------------------------------------------------------------------\n \nFilename : ${FileName}\nVersion : 1.0\nAuthor(s) : ${AuthorName}\n \nComponent : Component\n\nRevision : $Revision$\nLast change by : $Author$\nDate : $Date$\n \n--[ Description ] ----------------------------------------------------------\n \nDescription\n \n--[ License ] --------------------------------------------------------------\n \n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as\n published by the Free Software Foundation, either version 3 of the\n License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n----------------------------------------------------------------------------\nCopyright (C) 2011-2015 Claunia.com\n****************************************************************************/\n//$Id$
|
$1.Text = @/***************************************************************************\nThe Disc Image Chef\n----------------------------------------------------------------------------\n \nFilename : ${FileName}\nVersion : 1.0\nAuthor(s) : ${AuthorName}\n \nComponent : Component\n\nRevision : $Revision$\nLast change by : $Author$\nDate : $Date$\n \n--[ Description ] ----------------------------------------------------------\n \nDescription\n \n--[ License ] --------------------------------------------------------------\n \n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as\n published by the Free Software Foundation, either version 3 of the\n License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n----------------------------------------------------------------------------\nCopyright (C) 2011-2015 Claunia.com\n****************************************************************************/\n//$Id$
|
||||||
$1.IncludeInNewFiles = True
|
$1.IncludeInNewFiles = True
|
||||||
$0.TextStylePolicy = $2
|
$0.TextStylePolicy = $2
|
||||||
$2.inheritsSet = null
|
$2.inheritsSet = VisualStudio
|
||||||
$2.inheritsScope = text/plain
|
$2.inheritsScope = text/plain
|
||||||
$2.scope = application/config+xml
|
$2.scope = text/x-csharp
|
||||||
$2.FileWidth = 120
|
$2.FileWidth = 120
|
||||||
$0.CSharpFormattingPolicy = $3
|
$0.CSharpFormattingPolicy = $3
|
||||||
$3.SpacingAfterMethodDeclarationName = False
|
$3.SpacingAfterMethodDeclarationName = False
|
||||||
@@ -130,6 +130,7 @@ Global
|
|||||||
$3.NewLineForClausesInQuery = True
|
$3.NewLineForClausesInQuery = True
|
||||||
$3.IndentBlock = False
|
$3.IndentBlock = False
|
||||||
$3.IndentSwitchCaseSection = False
|
$3.IndentSwitchCaseSection = False
|
||||||
|
$3.SpaceAfterControlFlowStatementKeyword = False
|
||||||
$0.DotNetNamingPolicy = $4
|
$0.DotNetNamingPolicy = $4
|
||||||
$4.DirectoryNamespaceAssociation = Hierarchical
|
$4.DirectoryNamespaceAssociation = Hierarchical
|
||||||
$4.ResourceNamePolicy = MSBuild
|
$4.ResourceNamePolicy = MSBuild
|
||||||
|
|||||||
@@ -83,8 +83,8 @@
|
|||||||
<MessageStyle LastFilePostfix=":
 " IncludeDirectoryPaths="True" />
|
<MessageStyle LastFilePostfix=":
 " IncludeDirectoryPaths="True" />
|
||||||
</ChangeLogPolicy>
|
</ChangeLogPolicy>
|
||||||
<DotNetNamingPolicy DirectoryNamespaceAssociation="PrefixedHierarchical" ResourceNamePolicy="MSBuild" />
|
<DotNetNamingPolicy DirectoryNamespaceAssociation="PrefixedHierarchical" ResourceNamePolicy="MSBuild" />
|
||||||
<TextStylePolicy inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/x-csharp" />
|
<TextStylePolicy FileWidth="120" inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/x-csharp" />
|
||||||
<CSharpFormattingPolicy NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" SpacingAfterMethodDeclarationName="False" SpaceAfterMethodCallName="False" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
|
<CSharpFormattingPolicy IndentSwitchSection="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" SpacingAfterMethodDeclarationName="False" SpaceAfterMethodCallName="False" SpaceBeforeOpenSquareBracket="False" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
|
||||||
<TextStylePolicy inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" />
|
<TextStylePolicy inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/plain" />
|
||||||
<NameConventionPolicy>
|
<NameConventionPolicy>
|
||||||
<Rules>
|
<Rules>
|
||||||
|
|||||||
Reference in New Issue
Block a user