├── .clang-format ├── .clang-tidy ├── .gitattributes ├── .gitignore ├── BUILDING.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── Make ├── UEFI │ ├── copy_files.sh │ ├── opensea-operations.dec │ ├── opensea-operations.dsc │ └── opensea-operations.inf ├── VS.2013 │ └── opensea-operations │ │ ├── opensea-operations-DLL │ │ ├── opensea-operations-DLL.vcxproj │ │ └── opensea-operations-DLL.vcxproj.filters │ │ ├── opensea-operations.sln │ │ └── opensea-operations │ │ ├── opensea-operations.vcxproj │ │ └── opensea-operations.vcxproj.filters ├── VS.2015 │ └── opensea-operations │ │ ├── opensea-operations-DLL │ │ ├── opensea-operations-DLL.vcxproj │ │ └── opensea-operations-DLL.vcxproj.filters │ │ ├── opensea-operations.sln │ │ └── opensea-operations │ │ ├── opensea-operations.vcxproj │ │ └── opensea-operations.vcxproj.filters ├── VS.2017 │ └── opensea-operations │ │ ├── opensea-operations-DLL │ │ ├── opensea-operations-DLL.vcxproj │ │ └── opensea-operations-DLL.vcxproj.filters │ │ ├── opensea-operations.sln │ │ └── opensea-operations │ │ ├── opensea-operations.vcxproj │ │ └── opensea-operations.vcxproj.filters ├── VS.2019 │ └── opensea-operations │ │ ├── opensea-operations-DLL │ │ ├── opensea-operations-DLL.vcxproj │ │ └── opensea-operations-DLL.vcxproj.filters │ │ ├── opensea-operations.sln │ │ └── opensea-operations │ │ ├── opensea-operations.vcxproj │ │ └── opensea-operations.vcxproj.filters ├── VS.2022 │ └── opensea-operations │ │ ├── opensea-operations-DLL │ │ ├── opensea-operations-DLL.vcxproj │ │ └── opensea-operations-DLL.vcxproj.filters │ │ ├── opensea-operations.sln │ │ └── opensea-operations │ │ ├── opensea-operations.vcxproj │ │ └── opensea-operations.vcxproj.filters ├── gcc │ └── Makefile ├── gccWin │ └── Makefile.gccWin ├── prj │ ├── opensea-operations.vpj │ └── opensea-operations.vpw └── vmware │ └── Makefile ├── README.md ├── SECURITY.md ├── commit_template.txt ├── include ├── ata_Security.h ├── ata_device_config_overlay.h ├── buffer_test.h ├── cdl.h ├── defect.h ├── depopulate.h ├── device_statistics.h ├── drive_info.h ├── dst.h ├── farm_log.h ├── firmware_download.h ├── format.h ├── generic_tests.h ├── host_erase.h ├── logs.h ├── nvme_operations.h ├── opensea_operation_version.h ├── operations.h ├── operations_Common.h ├── partition_info.h ├── power_control.h ├── reservations.h ├── sanitize.h ├── sas_phy.h ├── sata_phy.h ├── seagate_operations.h ├── sector_repair.h ├── set_max_lba.h ├── smart.h ├── trim_unmap.h ├── writesame.h └── zoned_operations.h ├── meson.build ├── opensea-operations-doxygen-generator ├── src ├── ata_Security.c ├── ata_device_config_overlay.c ├── buffer_test.c ├── cdl.c ├── defect.c ├── depopulate.c ├── device_statistics.c ├── drive_info.c ├── dst.c ├── farm_log.c ├── firmware_download.c ├── format.c ├── generic_tests.c ├── host_erase.c ├── logs.c ├── nvme_operations.c ├── operations.c ├── partition_info.c ├── power_control.c ├── reservations.c ├── sanitize.c ├── sas_phy.c ├── sata_phy.c ├── seagate_operations.c ├── sector_repair.c ├── set_max_lba.c ├── smart.c ├── trim_unmap.c ├── writesame.c └── zoned_operations.c └── update-version.sh /.clang-format: -------------------------------------------------------------------------------- 1 | # Use the Microsoft coding style 2 | # This is the style our code already mostly followed-TJE 3 | BasedOnStyle: Microsoft 4 | 5 | # Additional Customizations 6 | PointerAlignment: Left 7 | AlignConsecutiveAssignments: true 8 | AlignConsecutiveDeclarations: true 9 | AlignTrailingComments: true 10 | AlignAfterOpenBracket: true 11 | BinPackParameters: false 12 | AllowAllParametersOfDeclarationOnNextLine: false 13 | AlignConsecutiveMacros: 'AcrossEmptyLines' 14 | BraceWrapping: 15 | AfterControlStatement: true 16 | AllowShortBlocksOnASingleLine: Never 17 | AllowShortIfStatementsOnASingleLine: Never 18 | IndentPPDirectives: AfterHash 19 | BreakBeforeBraces: Allman 20 | -------------------------------------------------------------------------------- /.clang-tidy: -------------------------------------------------------------------------------- 1 | Checks: 2 | '-*, 3 | modernize-*, 4 | cert-*, 5 | bugprone-*, 6 | -bugprone-easily-swappable-parameters, 7 | clang-analyzer-*, 8 | -clang-analyzer-deadcode.DeadStores, 9 | misc-*, 10 | -misc-no-recursion, 11 | -misc-unused-parameters, 12 | readability-non-const-parameter, 13 | readability-inconsistent-declaration-parameter-name, 14 | readability-redundant-control-flow, 15 | readability-duplicate-include, 16 | readability-avoid-const-params-in-decls, 17 | readability-function-cognitive-complexity' 18 | 19 | # Other available checks: 20 | # clang-analyzer-*, performance-*, readability-*, misc-* 21 | 22 | # Disabled checks: 23 | # - bugprone-easily-swappable-parameters: 24 | # Warns a LOT. Sometimes on functions meant to look like standardized C11 annex k functions. 25 | # While overall useful, it's too noisy right now and may complicate API usability. 26 | # - clang-analyzer-deadcode.DeadStores: 27 | # Generates many warnings. Cleanup is needed, but focus on more pressing issues first. 28 | # - misc-no-recursion: 29 | # Recursion is useful in our code, so this check is not applicable. 30 | # - misc-unused-parameters: 31 | # Too many false positives. 32 | # - readability-*: 33 | # Currently generates too many warnings. Manually adding rules until we can address these issues later. 34 | 35 | WarningsAsErrors: '' 36 | HeaderFilterRegex: '.*' 37 | AnalyzeTemporaryDtors: false 38 | FormatStyle: 'file' -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MPL-2.0 2 | #this file specifies some rules on specific files for line endings and more. 3 | #it also has a section on which files should NOT be part of an export (git archive) command. 4 | 5 | #List of files to NOT export: 6 | .git export-ignore 7 | .github export-ignore 8 | .cirrus.yml export-ignore 9 | .whitesource export-ignore 10 | .vscode export-ignore 11 | .travis.yml export-ignore 12 | 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MPL-2.0 2 | ## Ignore Visual Studio temporary files, build results, and 3 | ## files generated by popular Visual Studio add-ons. 4 | ## 5 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 6 | 7 | # User-specific files 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015/2017 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # Visual Studio 2017 auto generated files 34 | Generated\ Files/ 35 | 36 | # MSTest test Results 37 | [Tt]est[Rr]esult*/ 38 | [Bb]uild[Ll]og.* 39 | 40 | # NUNIT 41 | *.VisualState.xml 42 | TestResult.xml 43 | 44 | # Build Results of an ATL Project 45 | [Dd]ebugPS/ 46 | [Rr]eleasePS/ 47 | dlldata.c 48 | 49 | # Benchmark Results 50 | BenchmarkDotNet.Artifacts/ 51 | 52 | # .NET Core 53 | project.lock.json 54 | project.fragment.lock.json 55 | artifacts/ 56 | **/Properties/launchSettings.json 57 | 58 | # StyleCop 59 | StyleCopReport.xml 60 | 61 | # Files built by Visual Studio 62 | *_i.c 63 | *_p.c 64 | *_i.h 65 | *.ilk 66 | *.meta 67 | *.obj 68 | *.pch 69 | *.pdb 70 | *.pgc 71 | *.pgd 72 | *.rsp 73 | *.sbr 74 | *.tlb 75 | *.tli 76 | *.tlh 77 | *.tmp 78 | *.tmp_proj 79 | *.log 80 | *.vspscc 81 | *.vssscc 82 | .builds 83 | *.pidb 84 | *.svclog 85 | *.scc 86 | 87 | # Chutzpah Test files 88 | _Chutzpah* 89 | 90 | # Visual C++ cache files 91 | ipch/ 92 | *.aps 93 | *.ncb 94 | *.opendb 95 | *.opensdf 96 | *.sdf 97 | *.cachefile 98 | *.VC.db 99 | *.VC.VC.opendb 100 | 101 | # Visual Studio profiler 102 | *.psess 103 | *.vsp 104 | *.vspx 105 | *.sap 106 | 107 | # Visual Studio Trace Files 108 | *.e2e 109 | 110 | # TFS 2012 Local Workspace 111 | $tf/ 112 | 113 | # Guidance Automation Toolkit 114 | *.gpState 115 | 116 | # ReSharper is a .NET coding add-in 117 | _ReSharper*/ 118 | *.[Rr]e[Ss]harper 119 | *.DotSettings.user 120 | 121 | # JustCode is a .NET coding add-in 122 | .JustCode 123 | 124 | # TeamCity is a build add-in 125 | _TeamCity* 126 | 127 | # DotCover is a Code Coverage Tool 128 | *.dotCover 129 | 130 | # AxoCover is a Code Coverage Tool 131 | .axoCover/* 132 | !.axoCover/settings.json 133 | 134 | # Visual Studio code coverage results 135 | *.coverage 136 | *.coveragexml 137 | 138 | # NCrunch 139 | _NCrunch_* 140 | .*crunch*.local.xml 141 | nCrunchTemp_* 142 | 143 | # MightyMoose 144 | *.mm.* 145 | AutoTest.Net/ 146 | 147 | # Web workbench (sass) 148 | .sass-cache/ 149 | 150 | # Installshield output folder 151 | [Ee]xpress/ 152 | 153 | # DocProject is a documentation generator add-in 154 | DocProject/buildhelp/ 155 | DocProject/Help/*.HxT 156 | DocProject/Help/*.HxC 157 | DocProject/Help/*.hhc 158 | DocProject/Help/*.hhk 159 | DocProject/Help/*.hhp 160 | DocProject/Help/Html2 161 | DocProject/Help/html 162 | 163 | # Click-Once directory 164 | publish/ 165 | 166 | # Publish Web Output 167 | *.[Pp]ublish.xml 168 | *.azurePubxml 169 | # Note: Comment the next line if you want to checkin your web deploy settings, 170 | # but database connection strings (with potential passwords) will be unencrypted 171 | *.pubxml 172 | *.publishproj 173 | 174 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 175 | # checkin your Azure Web App publish settings, but sensitive information contained 176 | # in these scripts will be unencrypted 177 | PublishScripts/ 178 | 179 | # NuGet Packages 180 | *.nupkg 181 | # The packages folder can be ignored because of Package Restore 182 | **/[Pp]ackages/* 183 | # except build/, which is used as an MSBuild target. 184 | !**/[Pp]ackages/build/ 185 | # Uncomment if necessary however generally it will be regenerated when needed 186 | #!**/[Pp]ackages/repositories.config 187 | # NuGet v3's project.json files produces more ignorable files 188 | *.nuget.props 189 | *.nuget.targets 190 | 191 | # Microsoft Azure Build Output 192 | csx/ 193 | *.build.csdef 194 | 195 | # Microsoft Azure Emulator 196 | ecf/ 197 | rcf/ 198 | 199 | # Windows Store app package directories and files 200 | AppPackages/ 201 | BundleArtifacts/ 202 | Package.StoreAssociation.xml 203 | _pkginfo.txt 204 | *.appx 205 | 206 | # Visual Studio cache files 207 | # files ending in .cache can be ignored 208 | *.[Cc]ache 209 | # but keep track of directories ending in .cache 210 | !*.[Cc]ache/ 211 | 212 | # Others 213 | ClientBin/ 214 | ~$* 215 | *~ 216 | *.dbmdl 217 | *.dbproj.schemaview 218 | *.jfm 219 | *.pfx 220 | *.publishsettings 221 | orleans.codegen.cs 222 | 223 | # Since there are multiple workflows, uncomment next line to ignore bower_components 224 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 225 | #bower_components/ 226 | 227 | # RIA/Silverlight projects 228 | Generated_Code/ 229 | 230 | # Backup & report files from converting an old project file 231 | # to a newer Visual Studio version. Backup files are not needed, 232 | # because we have git ;-) 233 | _UpgradeReport_Files/ 234 | Backup*/ 235 | UpgradeLog*.XML 236 | UpgradeLog*.htm 237 | 238 | # SQL Server files 239 | *.mdf 240 | *.ldf 241 | *.ndf 242 | 243 | # Business Intelligence projects 244 | *.rdl.data 245 | *.bim.layout 246 | *.bim_*.settings 247 | 248 | # Microsoft Fakes 249 | FakesAssemblies/ 250 | 251 | # GhostDoc plugin setting file 252 | *.GhostDoc.xml 253 | 254 | # Node.js Tools for Visual Studio 255 | .ntvs_analysis.dat 256 | node_modules/ 257 | 258 | # TypeScript v1 declaration files 259 | typings/ 260 | 261 | # Visual Studio 6 build log 262 | *.plg 263 | 264 | # Visual Studio 6 workspace options file 265 | *.opt 266 | 267 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 268 | *.vbw 269 | 270 | # Visual Studio LightSwitch build output 271 | **/*.HTMLClient/GeneratedArtifacts 272 | **/*.DesktopClient/GeneratedArtifacts 273 | **/*.DesktopClient/ModelManifest.xml 274 | **/*.Server/GeneratedArtifacts 275 | **/*.Server/ModelManifest.xml 276 | _Pvt_Extensions 277 | 278 | # Paket dependency manager 279 | .paket/paket.exe 280 | paket-files/ 281 | 282 | # FAKE - F# Make 283 | .fake/ 284 | 285 | # JetBrains Rider 286 | .idea/ 287 | *.sln.iml 288 | 289 | # CodeRush 290 | .cr/ 291 | 292 | # Python Tools for Visual Studio (PTVS) 293 | __pycache__/ 294 | *.pyc 295 | 296 | # Cake - Uncomment if you are using it 297 | # tools/** 298 | # !tools/packages.config 299 | 300 | # Tabs Studio 301 | *.tss 302 | 303 | # Telerik's JustMock configuration file 304 | *.jmconfig 305 | 306 | # BizTalk build output 307 | *.btp.cs 308 | *.btm.cs 309 | *.odx.cs 310 | *.xsd.cs 311 | 312 | # OpenCover UI analysis results 313 | OpenCover/ 314 | 315 | # Azure Stream Analytics local run output 316 | ASALocalRun/ 317 | 318 | # Prerequisites 319 | *.d 320 | 321 | # Object files 322 | *.o 323 | *.ko 324 | *.obj 325 | *.elf 326 | 327 | # Linker output 328 | *.ilk 329 | *.map 330 | *.exp 331 | 332 | # Precompiled Headers 333 | *.gch 334 | *.pch 335 | 336 | # Libraries 337 | *.lib 338 | *.a 339 | *.la 340 | *.lo 341 | 342 | # Shared objects (inc. Windows DLLs) 343 | *.dll 344 | *.so 345 | *.so.* 346 | *.dylib 347 | 348 | # Executables 349 | *.exe 350 | *.out 351 | *.app 352 | *.i*86 353 | *.x86_64 354 | *.hex 355 | 356 | # Debug files 357 | *.dSYM/ 358 | *.su 359 | *.idb 360 | *.pdb 361 | 362 | # Kernel Module Compile Results 363 | *.mod* 364 | *.cmd 365 | .tmp_versions/ 366 | modules.order 367 | Module.symvers 368 | Mkfile.old 369 | dkms.conf -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | # Building opensea-transport 2 | 3 | Building opensea-transport is similar to the other opensea-libraries and similar to the build process for openSeaChest or the opensea-api. 4 | 5 | Please review the [BUILDING.md](https://github.com/Seagate/openSeaChest/blob/develop/BUILDING.md) from the openSeaChest project for more information. 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributor Covenant Code of Conduct 3 | 4 | ## Our Pledge 5 | 6 | We as members, contributors, and leaders pledge to make participation in our 7 | community a harassment-free experience for everyone, regardless of age, body 8 | size, visible or invisible disability, ethnicity, sex characteristics, gender 9 | identity and expression, level of experience, education, socio-economic status, 10 | nationality, personal appearance, race, religion, or sexual identity 11 | and orientation. 12 | 13 | We pledge to act and interact in ways that contribute to an open, welcoming, 14 | diverse, inclusive, and healthy community. 15 | 16 | ## Our Standards 17 | 18 | Examples of behavior that contributes to a positive environment for our 19 | community include: 20 | 21 | * Demonstrating empathy and kindness toward other people 22 | * Being respectful of differing opinions, viewpoints, and experiences 23 | * Giving and gracefully accepting constructive feedback 24 | * Accepting responsibility and apologizing to those affected by our mistakes, 25 | and learning from the experience 26 | * Focusing on what is best not just for us as individuals, but for the 27 | overall community 28 | 29 | Examples of unacceptable behavior include: 30 | 31 | * The use of sexualized language or imagery, and sexual attention or 32 | advances of any kind 33 | * Trolling, insulting or derogatory comments, and personal or political attacks 34 | * Public or private harassment 35 | * Publishing others' private information, such as a physical or email 36 | address, without their explicit permission 37 | * Other conduct which could reasonably be considered inappropriate in a 38 | professional setting 39 | 40 | ## Enforcement Responsibilities 41 | 42 | Community leaders are responsible for clarifying and enforcing our standards of 43 | acceptable behavior and will take appropriate and fair corrective action in 44 | response to any behavior that they deem inappropriate, threatening, offensive, 45 | or harmful. 46 | 47 | Community leaders have the right and responsibility to remove, edit, or reject 48 | comments, commits, code, wiki edits, issues, and other contributions that are 49 | not aligned to this Code of Conduct, and will communicate reasons for moderation 50 | decisions when appropriate. 51 | 52 | ## Scope 53 | 54 | This Code of Conduct applies within all community spaces, and also applies when 55 | an individual is officially representing the community in public spaces. 56 | Examples of representing our community include using an official e-mail address, 57 | posting via an official social media account, or acting as an appointed 58 | representative at an online or offline event. 59 | 60 | ## Enforcement 61 | 62 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 63 | reported to the community leaders responsible for enforcement at 64 | [opensource@seagate.com](mailto:opensource@seagate.com). 65 | All complaints will be reviewed and investigated promptly and fairly. 66 | 67 | All community leaders are obligated to respect the privacy and security of the 68 | reporter of any incident. 69 | 70 | ## Enforcement Guidelines 71 | 72 | Community leaders will follow these Community Impact Guidelines in determining 73 | the consequences for any action they deem in violation of this Code of Conduct: 74 | 75 | ### 1. Correction 76 | 77 | **Community Impact**: Use of inappropriate language or other behavior deemed 78 | unprofessional or unwelcome in the community. 79 | 80 | **Consequence**: A private, written warning from community leaders, providing 81 | clarity around the nature of the violation and an explanation of why the 82 | behavior was inappropriate. A public apology may be requested. 83 | 84 | ### 2. Warning 85 | 86 | **Community Impact**: A violation through a single incident or series 87 | of actions. 88 | 89 | **Consequence**: A warning with consequences for continued behavior. No 90 | interaction with the people involved, including unsolicited interaction with 91 | those enforcing the Code of Conduct, for a specified period of time. This 92 | includes avoiding interactions in community spaces as well as external channels 93 | like social media. Violating these terms may lead to a temporary or 94 | permanent ban. 95 | 96 | ### 3. Temporary Ban 97 | 98 | **Community Impact**: A serious violation of community standards, including 99 | sustained inappropriate behavior. 100 | 101 | **Consequence**: A temporary ban from any sort of interaction or public 102 | communication with the community for a specified period of time. No public or 103 | private interaction with the people involved, including unsolicited interaction 104 | with those enforcing the Code of Conduct, is allowed during this period. 105 | Violating these terms may lead to a permanent ban. 106 | 107 | ### 4. Permanent Ban 108 | 109 | **Community Impact**: Demonstrating a pattern of violation of community 110 | standards, including sustained inappropriate behavior, harassment of an 111 | individual, or aggression toward or disparagement of classes of individuals. 112 | 113 | **Consequence**: A permanent ban from any sort of public interaction within 114 | the community. 115 | 116 | ## Attribution 117 | 118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 119 | version 2.0, available at 120 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 121 | 122 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 123 | enforcement ladder](https://github.com/mozilla/diversity). 124 | 125 | [homepage]: https://www.contributor-covenant.org 126 | 127 | For answers to common questions about this code of conduct, see the FAQ at 128 | https://www.contributor-covenant.org/faq. Translations are available at 129 | https://www.contributor-covenant.org/translations. 130 | -------------------------------------------------------------------------------- /Make/UEFI/copy_files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # SPDX-License-Identifier: MPL-2.0 3 | function usage { 4 | echo "This script will copy all files required to build opensea-operations to the edk2/UDK path specified." 5 | echo "How to use: copy_files.sh " 6 | } 7 | 8 | #check that we were given the correct number of parameters 9 | if [ "$#" -lt 1 ]; then 10 | usage 11 | fi 12 | scriptDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 13 | openseaOperationsBaseDir=$(dirname "$(dirname "$scriptDir")") 14 | 15 | #check that the directory exists 16 | if [ -d "$1" ]; then 17 | mkdir -p "$1/opensea-libs/opensea-operations" 18 | opensealibsDir="$1/opensea-libs" 19 | openseaoperationsDir="$opensealibsDir/opensea-operations" 20 | #start by copying the files to build the lib 21 | cp -r "$openseaOperationsBaseDir/include" "$openseaoperationsDir" 22 | cp -r "$openseaOperationsBaseDir/src" "$openseaoperationsDir" 23 | #copy UEFI makefiles 24 | cp -r "$openseaOperationsBaseDir/Make/UEFI/opensea-operations"* "$openseaoperationsDir" 25 | else 26 | echo "Cannot find specified path: $1" 27 | fi 28 | -------------------------------------------------------------------------------- /Make/UEFI/opensea-operations.dec: -------------------------------------------------------------------------------- 1 | ## @file 2 | # Declarations for the opensea-operations library 3 | ## 4 | # SPDX-License-Identifier: MPL-2.0 5 | 6 | [Defines] 7 | DEC_SPECIFICATION = 0x00010005 8 | PACKAGE_NAME = opensea-operationslib 9 | PACKAGE_GUID = cd3322e1-eef9-4c3a-877f-c4955df3c435 10 | PACKAGE_VERSION = 0.01 11 | 12 | 13 | [Includes] 14 | include 15 | 16 | [Guids] 17 | gopensea-operationsLibTokenSpaceGuid = { 0x75c382f5, 0x4ed4, 0x4d3d, { 0xb2, 0x65, 0xeb, 0xb0, 0x5c, 0x11, 0xd9, 0x72 }} 18 | 19 | 20 | [Protocols] 21 | gEfiSocketProtocolGuid = { 0x58e6ed63, 0x1694, 0x440b, { 0x93, 0x88, 0xe9, 0x8f, 0xed, 0x6b, 0x65, 0xaf } } 22 | gEfiSocketServiceBindingProtocolGuid = { 0x8aaedb2a, 0xa6bb, 0x47c6, { 0x94, 0xce, 0x1b, 0x80, 0x96, 0x42, 0x3f, 0x2a } } 23 | -------------------------------------------------------------------------------- /Make/UEFI/opensea-operations.dsc: -------------------------------------------------------------------------------- 1 | ## @file 2 | # opensea-operations development file for EDKII 3 | # This package contains applications which depend upon Standard Libraries 4 | # from the StdLib package. 5 | # 6 | # See the comments in the [LibraryClasses.IA32] and [BuildOptions] sections 7 | # for important information about configuring this package for your 8 | # environment. 9 | # 10 | ## 11 | # SPDX-License-Identifier: MPL-2.0 12 | 13 | [Defines] 14 | PLATFORM_NAME = opensea-operationslib 15 | PLATFORM_GUID = e3c064c9-d0c6-4519-97e9-0d751ad70aa5 16 | PLATFORM_VERSION = 0.01 17 | DSC_SPECIFICATION = 0x00010006 18 | OUTPUT_DIRECTORY = Build/opensea-operationslib 19 | SUPPORTED_ARCHITECTURES = IA32|X64|ARM|AARCH64 20 | BUILD_TARGETS = DEBUG|RELEASE|NOOPT 21 | SKUID_IDENTIFIER = DEFAULT 22 | 23 | # 24 | # Debug output control 25 | # 26 | DEFINE DEBUG_ENABLE_OUTPUT = FALSE # Set to TRUE to enable debug output 27 | DEFINE DEBUG_PRINT_ERROR_LEVEL = 0x80000040 # Flags to control amount of debug output 28 | DEFINE DEBUG_PROPERTY_MASK = 0 29 | 30 | [PcdsFeatureFlag] 31 | 32 | [PcdsFixedAtBuild] 33 | gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|$(DEBUG_PROPERTY_MASK) 34 | gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|$(DEBUG_PRINT_ERROR_LEVEL) 35 | 36 | [PcdsFixedAtBuild.IPF] 37 | 38 | [LibraryClasses] 39 | # 40 | # Entry Point Libraries 41 | # 42 | UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf 43 | ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf 44 | UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf 45 | # 46 | # Common Libraries 47 | # 48 | BaseLib|MdePkg/Library/BaseLib/BaseLib.inf 49 | BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf 50 | UefiLib|MdePkg/Library/UefiLib/UefiLib.inf 51 | PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf 52 | PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf 53 | MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf 54 | UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf 55 | UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf 56 | !if $(DEBUG_ENABLE_OUTPUT) 57 | DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf 58 | DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf 59 | !else ## DEBUG_ENABLE_OUTPUT 60 | DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf 61 | !endif ## DEBUG_ENABLE_OUTPUT 62 | 63 | DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf 64 | PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf 65 | IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf 66 | PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf 67 | PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf 68 | SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf 69 | UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf 70 | HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf 71 | UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf 72 | PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf 73 | HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf 74 | FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf 75 | SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf 76 | 77 | ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf 78 | 79 | CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf 80 | 81 | opensea-commonlib|opensea-libs/opensea-common/opensea-common.inf 82 | opensea-transportlib|opensea-libs/opensea-transport/opensea-transport.inf 83 | 84 | ################################################################################################### 85 | # 86 | # Components Section - list of the modules and components that will be processed by compilation 87 | # tools and the EDK II tools to generate PE32/PE32+/Coff image files. 88 | # 89 | # Note: The EDK II DSC file is not used to specify how compiled binary images get placed 90 | # into firmware volume images. This section is just a list of modules to compile from 91 | # source into UEFI-compliant binaries. 92 | # It is the FDF file that contains information on combining binary files into firmware 93 | # volume images, whose concept is beyond UEFI and is described in PI specification. 94 | # Binary modules do not need to be listed in this section, as they should be 95 | # specified in the FDF file. For example: Shell binary (Shell_Full.efi), FAT binary (Fat.efi), 96 | # Logo (Logo.bmp), and etc. 97 | # There may also be modules listed in this section that are not required in the FDF file, 98 | # When a module listed here is excluded from FDF file, then UEFI-compliant binary will be 99 | # generated for it, but the binary will not be put into any firmware volume. 100 | # 101 | ################################################################################################### 102 | 103 | [Components] 104 | 105 | #### 106 | opensea-libs/opensea-operations/opensea-operations.inf 107 | 108 | # AppPkg/Applications/OrderedCollectionTest/OrderedCollectionTest.inf { 109 | # 110 | # OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf 111 | # DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf 112 | # DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf 113 | # 114 | # gEfiMdePkgTokenSpaceGuid.PcdValidateOrderedCollection|TRUE 115 | # 116 | # gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F 117 | # gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80400040 118 | # } 119 | 120 | ############################################################################## 121 | # 122 | # Specify whether we are running in an emulation environment, or not. 123 | # Define EMULATE if we are, else keep the DEFINE commented out. 124 | # 125 | # DEFINE EMULATE = 1 126 | 127 | 128 | ############################################################################## 129 | # 130 | # Include Boilerplate text required for building with the Standard Libraries. 131 | # 132 | ############################################################################## 133 | !include StdLib/StdLib.inc 134 | -------------------------------------------------------------------------------- /Make/UEFI/opensea-operations.inf: -------------------------------------------------------------------------------- 1 | ## @file 2 | # opensea-operations lib 3 | # 4 | # 5 | ## 6 | # SPDX-License-Identifier: MPL-2.0 7 | 8 | [Defines] 9 | INF_VERSION = 0x00010005 10 | BASE_NAME = opensea-operations 11 | FILE_GUID = 8f0b6124-fe23-4f59-be45-7002ee496dbc 12 | MODULE_TYPE = UEFI_APPLICATION 13 | VERSION_STRING = 1.0 14 | LIBRARY_CLASS = opensea-operations 15 | 16 | # 17 | # VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 IPF 18 | # 19 | 20 | [Sources] 21 | include/ata_Security.h 22 | include/buffer_test.h 23 | include/defect.h 24 | include/depopulate.h 25 | include/device_statistics.h 26 | include/drive_info.h 27 | include/dst.h 28 | include/firmware_download.h 29 | include/format.h 30 | include/generic_tests.h 31 | include/host_erase.h 32 | include/logs.h 33 | include/nvme_operations.h 34 | include/opensea_operation_version.h 35 | include/operations.h 36 | include/operations_Common.h 37 | include/power_control.h 38 | include/sanitize.h 39 | include/sas_phy.h 40 | include/seagate_operations.h 41 | include/sector_repair.h 42 | include/set_max_lba.h 43 | include/smart.h 44 | include/trim_unmap.h 45 | include/writesame.h 46 | include/zoned_operations.h 47 | include/reservations.h 48 | include/partition_info.h 49 | include/farm_log.h 50 | include/ata_device_config_overlay.h 51 | include/sata_phy.h 52 | src/ata_Security.c 53 | src/buffer_test.c 54 | src/defect.c 55 | src/depopulate.c 56 | src/device_statistics.c 57 | src/drive_info.c 58 | src/dst.c 59 | src/firmware_download.c 60 | src/format.c 61 | src/generic_tests.c 62 | src/host_erase.c 63 | src/logs.c 64 | src/nvme_operations.c 65 | src/operations.c 66 | src/power_control.c 67 | src/sanitize.c 68 | src/sas_phy.c 69 | src/seagate_operations.c 70 | src/sector_repair.c 71 | src/set_max_lba.c 72 | src/smart.c 73 | src/trim_unmap.c 74 | src/writesame.c 75 | src/zoned_operations.c 76 | src/reservations.c 77 | src/farm_log.c 78 | src/partition_info.c 79 | src/ata_device_config_overlay.c 80 | src/sata_phy.c 81 | 82 | [Packages] 83 | StdLib/StdLib.dec 84 | StdLibPrivateInternalFiles/DoNotUse.dec 85 | MdePkg/MdePkg.dec 86 | ShellPkg/ShellPkg.dec 87 | opensea-libs/opensea-common/opensea-common.dec 88 | opensea-libs/opensea-transport/opensea-transport.dec 89 | 90 | [LibraryClasses] 91 | LibC 92 | LibCType 93 | LibMath 94 | LibTime 95 | ShellCEntryLib 96 | UefiLib 97 | BaseLib 98 | BaseMemoryLib 99 | MemoryAllocationLib 100 | LibStdLib 101 | LibStdio 102 | LibString 103 | DevConsole 104 | opensea-commonlib 105 | opensea-transportlib 106 | 107 | -------------------------------------------------------------------------------- /Make/VS.2013/opensea-operations/opensea-operations-DLL/opensea-operations-DLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | 104 | 105 | Source Files 106 | 107 | 108 | Source Files 109 | 110 | 111 | Source Files 112 | 113 | 114 | Source Files 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | -------------------------------------------------------------------------------- /Make/VS.2013/opensea-operations/opensea-operations.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.40629.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-Lib", "opensea-operations\opensea-operations.vcxproj", "{A0771494-8717-48AB-A0E5-49191252FF2C}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-DLL", "opensea-operations-DLL\opensea-operations-DLL.vcxproj", "{D73F51F3-3C0C-4E82-A0C2-10823534A5D8}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | Static-Debug|Win32 = Static-Debug|Win32 17 | Static-Debug|x64 = Static-Debug|x64 18 | Static-Release|Win32 = Static-Release|Win32 19 | Static-Release|x64 = Static-Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.Build.0 = Debug|Win32 24 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.ActiveCfg = Debug|x64 25 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.Build.0 = Debug|x64 26 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.ActiveCfg = Release|Win32 27 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.Build.0 = Release|Win32 28 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.ActiveCfg = Release|x64 29 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.Build.0 = Release|x64 30 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 31 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 32 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 33 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.Build.0 = Static-Debug|x64 34 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 35 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.Build.0 = Static-Release|Win32 36 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.ActiveCfg = Static-Release|x64 37 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.Build.0 = Static-Release|x64 38 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.ActiveCfg = Debug|Win32 39 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.Build.0 = Debug|Win32 40 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.ActiveCfg = Debug|x64 41 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.Build.0 = Debug|x64 42 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.ActiveCfg = Release|Win32 43 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.Build.0 = Release|Win32 44 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.ActiveCfg = Release|x64 45 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.Build.0 = Release|x64 46 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 47 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 48 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 49 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.Build.0 = Static-Debug|x64 50 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 51 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.Build.0 = Static-Release|Win32 52 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.ActiveCfg = Static-Release|x64 53 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.Build.0 = Static-Release|x64 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | EndGlobal 59 | -------------------------------------------------------------------------------- /Make/VS.2013/opensea-operations/opensea-operations/opensea-operations.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | 104 | 105 | Source Files 106 | 107 | 108 | Source Files 109 | 110 | 111 | Source Files 112 | 113 | 114 | Source Files 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | -------------------------------------------------------------------------------- /Make/VS.2015/opensea-operations/opensea-operations-DLL/opensea-operations-DLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2015/opensea-operations/opensea-operations.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.31101.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-Lib", "opensea-operations\opensea-operations.vcxproj", "{A0771494-8717-48AB-A0E5-49191252FF2C}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-DLL", "opensea-operations-DLL\opensea-operations-DLL.vcxproj", "{D73F51F3-3C0C-4E82-A0C2-10823534A5D8}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | Static-Debug|Win32 = Static-Debug|Win32 17 | Static-Debug|x64 = Static-Debug|x64 18 | Static-Release|Win32 = Static-Release|Win32 19 | Static-Release|x64 = Static-Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.Build.0 = Debug|Win32 24 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.ActiveCfg = Debug|x64 25 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.Build.0 = Debug|x64 26 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.ActiveCfg = Release|Win32 27 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.Build.0 = Release|Win32 28 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.ActiveCfg = Release|x64 29 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.Build.0 = Release|x64 30 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 31 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 32 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 33 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.Build.0 = Static-Debug|x64 34 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 35 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.Build.0 = Static-Release|Win32 36 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.ActiveCfg = Static-Release|x64 37 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.Build.0 = Static-Release|x64 38 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.ActiveCfg = Debug|Win32 39 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.Build.0 = Debug|Win32 40 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.ActiveCfg = Debug|x64 41 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.Build.0 = Debug|x64 42 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.ActiveCfg = Release|Win32 43 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.Build.0 = Release|Win32 44 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.ActiveCfg = Release|x64 45 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.Build.0 = Release|x64 46 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 47 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 48 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 49 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.Build.0 = Static-Debug|x64 50 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 51 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.Build.0 = Static-Release|Win32 52 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.ActiveCfg = Static-Release|x64 53 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.Build.0 = Static-Release|x64 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | EndGlobal 59 | -------------------------------------------------------------------------------- /Make/VS.2015/opensea-operations/opensea-operations/opensea-operations.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2017/opensea-operations/opensea-operations-DLL/opensea-operations-DLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2017/opensea-operations/opensea-operations.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26730.8 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-Lib", "opensea-operations\opensea-operations.vcxproj", "{A0771494-8717-48AB-A0E5-49191252FF2C}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-DLL", "opensea-operations-DLL\opensea-operations-DLL.vcxproj", "{D73F51F3-3C0C-4E82-A0C2-10823534A5D8}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | Static-Debug|Win32 = Static-Debug|Win32 17 | Static-Debug|x64 = Static-Debug|x64 18 | Static-Release|Win32 = Static-Release|Win32 19 | Static-Release|x64 = Static-Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.Build.0 = Debug|Win32 24 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.ActiveCfg = Debug|x64 25 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.Build.0 = Debug|x64 26 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.ActiveCfg = Release|Win32 27 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.Build.0 = Release|Win32 28 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.ActiveCfg = Release|x64 29 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.Build.0 = Release|x64 30 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 31 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 32 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 33 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.Build.0 = Static-Debug|x64 34 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 35 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.Build.0 = Static-Release|Win32 36 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.ActiveCfg = Static-Release|x64 37 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.Build.0 = Static-Release|x64 38 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.ActiveCfg = Debug|Win32 39 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.Build.0 = Debug|Win32 40 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.ActiveCfg = Debug|x64 41 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.Build.0 = Debug|x64 42 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.ActiveCfg = Release|Win32 43 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.Build.0 = Release|Win32 44 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.ActiveCfg = Release|x64 45 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.Build.0 = Release|x64 46 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 47 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 48 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 49 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.Build.0 = Static-Debug|x64 50 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 51 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.Build.0 = Static-Release|Win32 52 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.ActiveCfg = Static-Release|x64 53 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.Build.0 = Static-Release|x64 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | GlobalSection(ExtensibilityGlobals) = postSolution 59 | SolutionGuid = {CE1413FB-8AAA-4648-B1F8-7B05EB59817B} 60 | EndGlobalSection 61 | EndGlobal 62 | -------------------------------------------------------------------------------- /Make/VS.2017/opensea-operations/opensea-operations/opensea-operations.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2019/opensea-operations/opensea-operations-DLL/opensea-operations-DLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2019/opensea-operations/opensea-operations.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26730.8 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-Lib", "opensea-operations\opensea-operations.vcxproj", "{A0771494-8717-48AB-A0E5-49191252FF2C}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-DLL", "opensea-operations-DLL\opensea-operations-DLL.vcxproj", "{D73F51F3-3C0C-4E82-A0C2-10823534A5D8}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | Static-Debug|Win32 = Static-Debug|Win32 17 | Static-Debug|x64 = Static-Debug|x64 18 | Static-Release|Win32 = Static-Release|Win32 19 | Static-Release|x64 = Static-Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.Build.0 = Debug|Win32 24 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.ActiveCfg = Debug|x64 25 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.Build.0 = Debug|x64 26 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.ActiveCfg = Release|Win32 27 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.Build.0 = Release|Win32 28 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.ActiveCfg = Release|x64 29 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.Build.0 = Release|x64 30 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 31 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 32 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 33 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.Build.0 = Static-Debug|x64 34 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 35 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.Build.0 = Static-Release|Win32 36 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.ActiveCfg = Static-Release|x64 37 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.Build.0 = Static-Release|x64 38 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.ActiveCfg = Debug|Win32 39 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.Build.0 = Debug|Win32 40 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.ActiveCfg = Debug|x64 41 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.Build.0 = Debug|x64 42 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.ActiveCfg = Release|Win32 43 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.Build.0 = Release|Win32 44 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.ActiveCfg = Release|x64 45 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.Build.0 = Release|x64 46 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 47 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 48 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 49 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.Build.0 = Static-Debug|x64 50 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 51 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.Build.0 = Static-Release|Win32 52 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.ActiveCfg = Static-Release|x64 53 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.Build.0 = Static-Release|x64 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | GlobalSection(ExtensibilityGlobals) = postSolution 59 | SolutionGuid = {CE1413FB-8AAA-4648-B1F8-7B05EB59817B} 60 | EndGlobalSection 61 | EndGlobal 62 | -------------------------------------------------------------------------------- /Make/VS.2019/opensea-operations/opensea-operations/opensea-operations.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2022/opensea-operations/opensea-operations-DLL/opensea-operations-DLL.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/VS.2022/opensea-operations/opensea-operations.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26730.8 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-Lib", "opensea-operations\opensea-operations.vcxproj", "{A0771494-8717-48AB-A0E5-49191252FF2C}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opensea-operations-DLL", "opensea-operations-DLL\opensea-operations-DLL.vcxproj", "{D73F51F3-3C0C-4E82-A0C2-10823534A5D8}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Win32 = Debug|Win32 13 | Debug|x64 = Debug|x64 14 | Release|Win32 = Release|Win32 15 | Release|x64 = Release|x64 16 | Static-Debug|Win32 = Static-Debug|Win32 17 | Static-Debug|x64 = Static-Debug|x64 18 | Static-Release|Win32 = Static-Release|Win32 19 | Static-Release|x64 = Static-Release|x64 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.ActiveCfg = Debug|Win32 23 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|Win32.Build.0 = Debug|Win32 24 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.ActiveCfg = Debug|x64 25 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Debug|x64.Build.0 = Debug|x64 26 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.ActiveCfg = Release|Win32 27 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|Win32.Build.0 = Release|Win32 28 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.ActiveCfg = Release|x64 29 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Release|x64.Build.0 = Release|x64 30 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 31 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 32 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 33 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Debug|x64.Build.0 = Static-Debug|x64 34 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 35 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|Win32.Build.0 = Static-Release|Win32 36 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.ActiveCfg = Static-Release|x64 37 | {A0771494-8717-48AB-A0E5-49191252FF2C}.Static-Release|x64.Build.0 = Static-Release|x64 38 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.ActiveCfg = Debug|Win32 39 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|Win32.Build.0 = Debug|Win32 40 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.ActiveCfg = Debug|x64 41 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Debug|x64.Build.0 = Debug|x64 42 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.ActiveCfg = Release|Win32 43 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|Win32.Build.0 = Release|Win32 44 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.ActiveCfg = Release|x64 45 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Release|x64.Build.0 = Release|x64 46 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.ActiveCfg = Static-Debug|Win32 47 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|Win32.Build.0 = Static-Debug|Win32 48 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.ActiveCfg = Static-Debug|x64 49 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Debug|x64.Build.0 = Static-Debug|x64 50 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.ActiveCfg = Static-Release|Win32 51 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|Win32.Build.0 = Static-Release|Win32 52 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.ActiveCfg = Static-Release|x64 53 | {D73F51F3-3C0C-4E82-A0C2-10823534A5D8}.Static-Release|x64.Build.0 = Static-Release|x64 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | GlobalSection(ExtensibilityGlobals) = postSolution 59 | SolutionGuid = {CE1413FB-8AAA-4648-B1F8-7B05EB59817B} 60 | EndGlobalSection 61 | EndGlobal 62 | -------------------------------------------------------------------------------- /Make/VS.2022/opensea-operations/opensea-operations/opensea-operations.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | Header Files 20 | 21 | 22 | Header Files 23 | 24 | 25 | Header Files 26 | 27 | 28 | Header Files 29 | 30 | 31 | Header Files 32 | 33 | 34 | Header Files 35 | 36 | 37 | Header Files 38 | 39 | 40 | Header Files 41 | 42 | 43 | Header Files 44 | 45 | 46 | Header Files 47 | 48 | 49 | Header Files 50 | 51 | 52 | Header Files 53 | 54 | 55 | Header Files 56 | 57 | 58 | Header Files 59 | 60 | 61 | Header Files 62 | 63 | 64 | Header Files 65 | 66 | 67 | Header Files 68 | 69 | 70 | Header Files 71 | 72 | 73 | Header Files 74 | 75 | 76 | Header Files 77 | 78 | 79 | Header Files 80 | 81 | 82 | Header Files 83 | 84 | 85 | Header Files 86 | 87 | 88 | Header Files 89 | 90 | 91 | Header Files 92 | 93 | 94 | Header Files 95 | 96 | 97 | Header Files 98 | 99 | 100 | Header Files 101 | 102 | 103 | Header Files 104 | 105 | 106 | Header Files 107 | 108 | 109 | Header Files 110 | 111 | 112 | Header Files 113 | 114 | 115 | 116 | 117 | Source Files 118 | 119 | 120 | Source Files 121 | 122 | 123 | Source Files 124 | 125 | 126 | Source Files 127 | 128 | 129 | Source Files 130 | 131 | 132 | Source Files 133 | 134 | 135 | Source Files 136 | 137 | 138 | Source Files 139 | 140 | 141 | Source Files 142 | 143 | 144 | Source Files 145 | 146 | 147 | Source Files 148 | 149 | 150 | Source Files 151 | 152 | 153 | Source Files 154 | 155 | 156 | Source Files 157 | 158 | 159 | Source Files 160 | 161 | 162 | Source Files 163 | 164 | 165 | Source Files 166 | 167 | 168 | Source Files 169 | 170 | 171 | Source Files 172 | 173 | 174 | Source Files 175 | 176 | 177 | Source Files 178 | 179 | 180 | Source Files 181 | 182 | 183 | Source Files 184 | 185 | 186 | Source Files 187 | 188 | 189 | Source Files 190 | 191 | 192 | Source Files 193 | 194 | 195 | Source Files 196 | 197 | 198 | Source Files 199 | 200 | 201 | Source Files 202 | 203 | 204 | Source Files 205 | 206 | 207 | -------------------------------------------------------------------------------- /Make/gcc/Makefile: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MPL-2.0 2 | # 3 | # Do NOT modify or remove this copyright and license 4 | # 5 | # Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | # 7 | # This software is subject to the terms of the Mozilla Public 8 | # License, v. 2.0. If a copy of the MPL was not distributed with this 9 | # file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | # 11 | # ****************************************************************************************** 12 | 13 | # Hand Written Makefile (Edit with caution) -Muhammad 14 | # 15 | 16 | NAME=opensea-operations 17 | FILE_OUTPUT_DIR=lib 18 | #Change the Major version when major interface changes are made. E.g. tDevice changes 19 | MAJOR=9 20 | #Change the Minor version when new features are added. 21 | MINOR=1 22 | #Change the patch version when only bug fixes are made. 23 | PATCH=0 24 | VERSION=$(MAJOR).$(MINOR).$(PATCH) 25 | SRC_DIR=../../src/ 26 | INC_DIR=-I../../include -I../../../opensea-transport/include -I../../../opensea-transport/include/vendor -I../../../opensea-common/include 27 | CC ?= gcc 28 | AR ?= ar 29 | #override CFLAGS = -Wall -c -fPIC -I. 30 | CFLAGS ?= -Wall -Wextra 31 | CFLAGS += -c -fPIC -I. 32 | 33 | #NOTE -Wsign-conversion can be useful but warns way too much by default. Only enable it if debugging specific problems 34 | COMPILER_VERSION := $(shell $(CC) --version) 35 | ifneq (,$(findstring clang,$(COMPILER_VERSION))) 36 | #setup clang specific warnings/flags (centos 7's old version supports -Wno-unknown-warning-option so enabling all of them) 37 | CFLAGS += -Wno-unknown-warning-option -Wcast-align=strict -Wvla -Wfloat-equal -Wnull-dereference -Wunused-const-variable \ 38 | -Wduplicated-cond -Wjump-misses-init -Wstringop-overflow -Wlogical-op -Wshift-overflow=2 -Wdouble-promotion -Wformat-security \ 39 | -Wold-style-definition -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes 40 | else 41 | ifneq (,$(findstring GCC,$(COMPILER_VERSION))) 42 | #setup gcc specific warnings/flags 43 | GCC_VERSION_STRING = $(shell $(CC) -dumpversion) 44 | GCC_VER = $(subst ., ,$(GCC_VERSION_STRING)) 45 | GCC_MAJOR = $(word 1,$(GCC_VER)) 46 | GCC_MINOR = $(word 2,$(GCC_VER)) 47 | GCC_SUBMINOR = $(word 3,$(GCC_VER)) 48 | ifeq ($(GCC_MINOR),) 49 | GCC_MINOR = 0 50 | endif 51 | ifeq ($(GCC_SUBMINOR),) 52 | GCC_SUBMINOR = 0 53 | endif 54 | #version 8.5 and higher 55 | ifeq ($(shell test $(GCC_MAJOR) -gt 7; echo $$?),0) 56 | ifeq ($(shell test $(GCC_MINOR) -gt 4; echo $$?),0) 57 | CFLAGS += -Wcast-align=strict 58 | else 59 | CFLAGS += -Wcast-align 60 | endif 61 | else 62 | CFLAGS += -Wcast-align 63 | endif 64 | #version 7.5 and higher 65 | ifeq ($(shell test $(GCC_MAJOR) -gt 6; echo $$?),0) 66 | ifeq ($(shell test $(GCC_MINOR) -gt 4; echo $$?),0) 67 | CFLAGS += -Wshadow=compatible-local -Wstringop-overflow 68 | else 69 | CFLAGS += 70 | endif 71 | else 72 | CFLAGS += 73 | endif 74 | #version 6.5 and higher 75 | ifeq ($(shell test $(GCC_MAJOR) -gt 5; echo $$?),0) 76 | ifeq ($(shell test $(GCC_MINOR) -gt 4; echo $$?),0) 77 | CFLAGS += -Wnull-dereference -Wunused-const-variable -Wduplicated-cond -Wshift-overflow=2 78 | else 79 | CFLAGS += 80 | endif 81 | else 82 | CFLAGS += 83 | endif 84 | #version 5.5 and higher 85 | ifeq ($(shell test $(GCC_MAJOR) -gt 4; echo $$?),0) 86 | ifeq ($(shell test $(GCC_MINOR) -gt 4; echo $$?),0) 87 | CFLAGS += -Wlogical-not-parentheses 88 | endif 89 | else 90 | #GCC less that v 5.x.x needs to set gnu99 standard 91 | #as of 5.x.x, gnu11 is default 92 | CFLAGS += -std=gnu99 93 | endif 94 | 95 | CFLAGS += -Wvla -Wfloat-equal -Wjump-misses-init -Wlogical-op -Wdouble-promotion -Wformat-security \ 96 | -Wold-style-definition -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes 97 | else 98 | CFLAGS += -std=gnu99 99 | CFLAGS += -Wvla -Wfloat-equal -Wjump-misses-init -Wlogical-op -Wdouble-promotion -Wformat-security \ 100 | -Wold-style-definition -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes 101 | endif 102 | endif 103 | UNAME := $(shell uname -s) 104 | #removed this linker option for now: -Wl,-Map,output.map 105 | #This was incompatible with AIX's linker and seems more related to debugging a memory problem. 106 | LFLAGS ?= -Wall ../../../opensea-common/Make/gcc/$(FILE_OUTPUT_DIR)/libopensea-common.a ../../../opensea-transport/Make/gcc/$(FILE_OUTPUT_DIR)/libopensea-transport.a -lm 107 | #AIX wants all linker libraries for the .so. Need libodm and libcfg in addition to the above to resolve all symbols 108 | ifeq ($(UNAME),AIX) 109 | LFLAGS += -lodm -lcfg 110 | endif 111 | LIB_SRC_FILES = \ 112 | $(SRC_DIR)ata_Security.c \ 113 | $(SRC_DIR)dst.c \ 114 | $(SRC_DIR)firmware_download.c \ 115 | $(SRC_DIR)host_erase.c \ 116 | $(SRC_DIR)logs.c \ 117 | $(SRC_DIR)farm_log.c \ 118 | $(SRC_DIR)operations.c \ 119 | $(SRC_DIR)power_control.c \ 120 | $(SRC_DIR)sanitize.c \ 121 | $(SRC_DIR)seagate_operations.c \ 122 | $(SRC_DIR)set_max_lba.c \ 123 | $(SRC_DIR)smart.c \ 124 | $(SRC_DIR)writesame.c \ 125 | $(SRC_DIR)generic_tests.c \ 126 | $(SRC_DIR)sector_repair.c \ 127 | $(SRC_DIR)trim_unmap.c\ 128 | $(SRC_DIR)drive_info.c\ 129 | $(SRC_DIR)format.c\ 130 | $(SRC_DIR)device_statistics.c\ 131 | $(SRC_DIR)cdl.c\ 132 | $(SRC_DIR)sas_phy.c\ 133 | $(SRC_DIR)depopulate.c\ 134 | $(SRC_DIR)zoned_operations.c\ 135 | $(SRC_DIR)buffer_test.c\ 136 | $(SRC_DIR)defect.c\ 137 | $(SRC_DIR)nvme_operations.c\ 138 | $(SRC_DIR)reservations.c\ 139 | $(SRC_DIR)partition_info.c\ 140 | $(SRC_DIR)ata_device_config_overlay.c\ 141 | $(SRC_DIR)sata_phy.c 142 | 143 | UNAME := $(shell uname) 144 | 145 | PROJECT_DEFINES += #-D_DEBUG 146 | 147 | #All of the source files have associated object files 148 | LIB_OBJ_FILES = $(LIB_SRC_FILES:.c=.o) 149 | LIBS = lib$(NAME).a 150 | 151 | #DEPFILES = $(LIB_SRC_FILES:.c=.d) 152 | 153 | #-include $(DEPFILES) 154 | 155 | .PHONY: all 156 | 157 | all: clean mkoutputdir $(LIBS) 158 | 159 | opensea-libs: 160 | $(MAKE) -C ../../../opensea-common/Make/gcc 161 | $(MAKE) -C ../../../opensea-transport/Make/gcc 162 | 163 | %.o: %.c 164 | $(CC) $(CFLAGS) $(PROJECT_DEFINES) $(INC_DIR) $< -o $@ 165 | 166 | $(LIBS): $(LIB_OBJ_FILES) opensea-libs 167 | rm -f $(FILE_OUTPUT_DIR)/$@ 168 | $(AR) cq $(FILE_OUTPUT_DIR)/$@ $(LIB_OBJ_FILES) 169 | $(CC) -shared $(LIB_OBJ_FILES) $(LFLAGS) -o $(FILE_OUTPUT_DIR)/lib$(NAME).so.$(VERSION) 170 | cd $(FILE_OUTPUT_DIR) && ln -sf lib$(NAME).so.$(VERSION) lib$(NAME).so 171 | 172 | clean: 173 | rm -f $(FILE_OUTPUT_DIR)/lib$(NAME).a $(FILE_OUTPUT_DIR)/lib$(NAME).so.$(VERSION) lib$(NAME).so *.o ../../src/*.o 174 | rm -rf $(FILE_OUTPUT_DIR) 175 | 176 | mkoutputdir: 177 | mkdir -p $(FILE_OUTPUT_DIR) 178 | 179 | -------------------------------------------------------------------------------- /Make/gccWin/Makefile.gccWin: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MPL-2.0 2 | # 3 | # Do NOT modify or remove this copyright and license 4 | # 5 | # Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | # 7 | # This software is subject to the terms of the Mozilla Public 8 | # License, v. 2.0. If a copy of the MPL was not distributed with this 9 | # file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | # 11 | # ****************************************************************************************** 12 | 13 | # Hand Written Makefile (Edit with caution) -Muhammad 14 | # Windows, MSYS2 64-bit, MinGW 64-bit, gcc environment version - Billy 15 | 16 | NAME = opensea-operations 17 | #Change the Major version when major interface changes are made. E.g. tDevice changes 18 | MAJOR = 9 19 | #Change the Minor version when new features are added. 20 | MINOR = 1 21 | #Change the patch version when only bug fixes are made. 22 | PATCH = 0 23 | VERSION = $(MAJOR).$(MINOR).$(PATCH) 24 | SRC_DIR = ../../src/ 25 | INC_DIR = -I../../include -I../../../opensea-transport/include -I../../../opensea-transport/include/vendor -I../../../opensea-common/include 26 | 27 | MYUNAME := $(shell uname -s) 28 | ifneq (,$(findstring Linux,$(MYUNAME))) 29 | UNAME = MINGW64 30 | else ifneq (,$(findstring MINGW64,$(MYUNAME))) 31 | UNAME = MINGW64 32 | endif 33 | 34 | ifneq (,$(findstring Linux,$(MYUNAME))) 35 | CC = x86_64-w64-mingw32-gcc 36 | AR = x86_64-w64-mingw32-ar 37 | else 38 | CC = gcc 39 | AR = ar 40 | endif 41 | 42 | #turning off format warnings because they are EVERYWHERE but only in minGW which is due to backwards compatibility warnings. 43 | #I tried using __USE_MINGW_ANSI_STDIO, but this didn't solve the problem either. - TJE 44 | #https://sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/thread/20120411101049.GA4263%40glandium.org/#msg29128250 45 | CFLAGS ?= -Wall -Wextra -Wno-format 46 | CFLAGS += -c -fPIC -I. -std=gnu99 47 | 48 | LDFLAGS = -Wall 49 | LDLIBS = \ 50 | ../../../opensea-transport/Make/gccWin/$(FILE_OUTPUT_DIR)/libopensea-transport.a \ 51 | ../../../opensea-common/Make/gccWin/$(FILE_OUTPUT_DIR)/libopensea-common.a 52 | 53 | ifneq (,$(findstring MINGW64,$(UNAME))) 54 | #BR note: pragma comment(lib,"Version.lib") is not supported by gcc, use the below supply the version.lib functions 55 | LDFLAGS += -L/msys64/mingw64/x86_64-w64-mingw32/lib 56 | LDLIBS += -lversion 57 | LDLIBS += -lcfgmgr32 58 | endif 59 | 60 | LIB_SRC_FILES = \ 61 | $(SRC_DIR)ata_Security.c \ 62 | $(SRC_DIR)buffer_test.c\ 63 | $(SRC_DIR)defect.c\ 64 | $(SRC_DIR)depopulate.c\ 65 | $(SRC_DIR)device_statistics.c\ 66 | $(SRC_DIR)drive_info.c\ 67 | $(SRC_DIR)dst.c \ 68 | $(SRC_DIR)firmware_download.c \ 69 | $(SRC_DIR)format.c\ 70 | $(SRC_DIR)generic_tests.c \ 71 | $(SRC_DIR)host_erase.c \ 72 | $(SRC_DIR)logs.c \ 73 | $(SRC_DIR)operations.c \ 74 | $(SRC_DIR)power_control.c \ 75 | $(SRC_DIR)sanitize.c \ 76 | $(SRC_DIR)sas_phy.c\ 77 | $(SRC_DIR)seagate_operations.c \ 78 | $(SRC_DIR)sector_repair.c \ 79 | $(SRC_DIR)set_max_lba.c \ 80 | $(SRC_DIR)smart.c \ 81 | $(SRC_DIR)trim_unmap.c\ 82 | $(SRC_DIR)writesame.c \ 83 | $(SRC_DIR)zoned_operations.c\ 84 | $(SRC_DIR)nvme_operations.c\ 85 | $(SRC_DIR)reservations.c\ 86 | $(SRC_DIR)farm_log.c\ 87 | $(SRC_DIR)partition_info.c\ 88 | $(SRC_DIR)ata_device_config_overlay.c\ 89 | $(SRC_DIR)sata_phy.c 90 | 91 | PROJECT_DEFINES += -DSTATIC_OPENSEA_OPERATIONS -DSTATIC_OPENSEA_TRANSPORT 92 | PROJECT_DEFINES += -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE 93 | 94 | ifneq (,$(findstring MINGW64,$(UNAME))) 95 | #BR note: trying different stuff during debugging 96 | #BR note: -D_WIN32_WINNT=0x0601 fixes unknown Windows version in winioctl.h 97 | # PROJECT_DEFINES += -D_WIN32_WINNT=0x0601 98 | endif 99 | 100 | #All of the source files have associated object files 101 | LIB_OBJ_FILES = $(LIB_SRC_FILES:.c=.o) 102 | LIBS = lib$(NAME).a 103 | #DEPFILES = $(LIB_SRC_FILES:.c=.d) 104 | 105 | #-include $(DEPFILES) 106 | 107 | FILE_OUTPUT_DIR = lib 108 | 109 | .PHONY: all 110 | all: clean mkoutputdir $(LIBS) 111 | 112 | opensea-libs: 113 | # $(MAKE) -C ../../../opensea-common/Make/gccWin -f Makefile.gccWin 114 | # $(MAKE) -C ../../../opensea-transport/Make/gccWin -f Makefile.gccWin 115 | 116 | %.o: %.c 117 | $(CC) $(CFLAGS) $(PROJECT_DEFINES) $(INC_DIR) $< -o $@ 118 | 119 | $(LIBS): $(LIB_OBJ_FILES) opensea-libs 120 | rm -f $(FILE_OUTPUT_DIR)/$@ 121 | $(AR) cq $(FILE_OUTPUT_DIR)/$@ $(LIB_OBJ_FILES) 122 | 123 | $(CC) -shared $(LIB_OBJ_FILES) $(LDFLAGS) $(LDLIBS) -o $(FILE_OUTPUT_DIR)/lib$(NAME).so.$(VERSION) 124 | 125 | clean: 126 | rm -f $(FILE_OUTPUT_DIR)/lib$(NAME).a $(FILE_OUTPUT_DIR)/lib$(NAME).so.$(VERSION) lib$(NAME).so *.o $(SRC_DIR)*.o 127 | rm -rf $(FILE_OUTPUT_DIR) 128 | 129 | mkoutputdir: 130 | mkdir -p $(FILE_OUTPUT_DIR) 131 | -------------------------------------------------------------------------------- /Make/prj/opensea-operations.vpj: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | 18 | 19 | 20 | 26 | 27 | 28 | 34 | 35 | 36 | 41 | 42 | 43 | 48 | 49 | 50 | 51 | 52 | 53 | 56 | 59 | 62 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 77 | 78 | 79 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 148 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /Make/prj/opensea-operations.vpw: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # opensea-operations 2 | 3 | ## Cross platform library for storage device operations across various interfaces and device types. 4 | 5 | ### Copyright (c) 2014-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | 7 | Welcome to opensea-operations, part of the openSeaChest open source project! 8 | You can find the openSeaChest project [here](https://github.com/Seagate/openSeaChest). 9 | 10 | ### The opensea libraries 11 | 12 | **opensea-common** - Operating System common operations, not specific to 13 | storage standards. Contains functions and defines that 14 | are useful to all other libraries. 15 | 16 | **opensea-transport** - Contains standard ATA/SCSI/NVMe functions based on open 17 | standards for these command sets. This layer also 18 | supports different transporting these commands through 19 | operating systems to the storage devices. Code depends on 20 | opensea-common. 21 | 22 | **opensea-operations** - Contains common use cases for operations to be performed 23 | on a storage device. This layer encapsulates the nuances 24 | of each command set (ATA/SCSI) and operating systems 25 | (Linux/Windows etc.) Depends on opensea-common and 26 | opensea-transport. 27 | 28 | ### Source 29 | 30 | Source code for opensea-operations is available in this repo at [https://github.com/Seagate/opensea-operations](https://github.com/Seagate/opensea-operations). 31 | 32 | ### Building 33 | 34 | See [BUILDING.md](BUILDING.md) for information on how to build the openSeaChest tools on Windows, Linux, FreeBSD, and Solaris/Illumos. 35 | 36 | ### Contributions & Issues 37 | 38 | See [CONTRIBUTING.md](CONTRIBUTING.md) for more information on contributions that will be accepted. 39 | This document also describes how to create an issue, generate a pull request, and licenses that will be accepted. 40 | 41 | ### Security policy 42 | 43 | See [SECURITY.md](SECURITY.md) for information on Seagate's security policy for details on how to report security vulnerabilities. 44 | 45 | ### Names, Logos, and Brands 46 | 47 | All product names, logos, and brands are property of their respective owners. 48 | All company, product and service names mentioned in the source code are for 49 | clarification purposes only. Use of these names, logos, and brands does not 50 | imply endorsement. 51 | 52 | ### Support and Open Source Statement 53 | 54 | Support from Seagate Technology for open source projects is different than traditional Technical Support. If possible, please use the **Issues tab** in the individual software projects so that others may benefit from the questions and answers. Include the output of --version information in the message. See the user guide section 'General Usage Hints' for information about saving output to a log file. 55 | 56 | If you need to contact us through email, please choose one of these 57 | two email addresses: 58 | 59 | - opensource@seagate.com for general questions and bug reports 60 | - opensea-build@seagate.com for specific questions about programming and building the software 61 | 62 | Seagate offers technical support for drive installation. If you have any questions related to Seagate products and technologies, feel free to submit your request on our web site. See the web site for a list of world-wide telephone numbers. 63 | 64 | - [http://www.seagate.com/support-home/](http://www.seagate.com/support-home/) 65 | - Contact Us: 66 | [http://www.seagate.com/contacts/](http://www.seagate.com/contacts/) 67 | 68 | This software uses open source packages obtained with permission from the 69 | relevant parties. For a complete list of open source components, sources and 70 | licenses, please see our Linux USB Boot Maker Utility FAQ for additional 71 | information. 72 | 73 | The newest online version of the openSeaChest Utilities documentation, open 74 | source usage and acknowledgement licenses, and our Linux USB Boot Maker FAQ can 75 | be found at: [https://github.com/Seagate/openSeaChest](https://github.com/Seagate/openSeaChest). 76 | 77 | Copyright (c) 2014-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 78 | 79 | ### License 80 | 81 | BINARIES and SOURCE CODE files of the openSeaChest open source project have 82 | been made available to you under the Mozilla Public License 2.0 (MPL). Mozilla 83 | is the custodian of the Mozilla Public License ("MPL"), an open source/free 84 | software license. 85 | 86 | The license can be views at [https://www.mozilla.org/en-US/MPL/](https://www.mozilla.org/en-US/MPL/) or [LICENSE.md](LICENSE.md) 87 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # openSeaChest Security Policy 2 | 3 | We take security seriously. If you find any security vulnerabilities in any of the source code, please report it to us as described below. 4 | 5 | ## Reporting Security Issues 6 | 7 | :warning: **Please do not publicly report any security vulnerabilities via GitHub issues.** 8 | 9 | If you have questions or general concerns, please email us at [opensea-build@seagate.com](mailto: opensea-build@seagate.com). 10 | 11 | To report an actual vulnerability, please use the form available at "[Seagate Responsible Vulnerability Disclosure Policy](https://www.seagate.com/legal-privacy/responsible-vulnerability-disclosure-policy/)" 12 | 13 | ### Reporting Format 14 | 15 | To make your reporting meaningful and help us understand the nature and scope of the issue, please include as much information as possible. 16 | 17 | ### Preferred Languages 18 | 19 | We prefer all communications to be in English. 20 | -------------------------------------------------------------------------------- /commit_template.txt: -------------------------------------------------------------------------------- 1 | category: short description < 72 characters 2 | 3 | Long description of commit goes here. 4 | 5 | [ issue # if any ] 6 | 7 | Signed-off-by: Your Name -------------------------------------------------------------------------------- /include/buffer_test.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file buffer_test.h 14 | // \brief This file defines the function calls for performing buffer/cabling tests 15 | 16 | #pragma once 17 | 18 | #include "operations_Common.h" 19 | 20 | #if defined(__cplusplus) 21 | extern "C" 22 | { 23 | #endif 24 | 25 | #define ALL_0_TEST_COUNT 10 26 | #define ALL_F_TEST_COUNT 10 27 | #define ALL_5_TEST_COUNT 10 28 | #define ALL_A_TEST_COUNT 10 29 | #define ZERO_F_5_A_TEST_COUNT 10 30 | #define WALKING_1_TEST_COUNT 5 31 | #define WALKING_0_TEST_COUNT 5 32 | #define RANDOM_TEST_COUNT 10 33 | 34 | typedef struct s_patternTestResults 35 | { 36 | uint64_t totalTimeNS; 37 | uint32_t totalCommandsSent; // read and write commands 38 | uint32_t totalCommandTimeouts; // how many take longer than the timeout set for the drive 39 | uint32_t totalCommandCRCErrors; // how many commands return a CRC error 40 | uint32_t totalBufferComparisons; // how many write-read buffer, then compare the two have been done in the test; 41 | uint32_t totalBufferMiscompares; // how many times did the buffer miscompare. 42 | } patternTestResults, *ptrPatternTestResults; 43 | 44 | typedef struct s_cableTestResults 45 | { 46 | uint64_t totalTestTimeNS; 47 | patternTestResults zerosTest[ALL_0_TEST_COUNT]; // all zeros tested 48 | patternTestResults fTest[ALL_F_TEST_COUNT]; // all F's tested 49 | patternTestResults fivesTest[ALL_5_TEST_COUNT]; // all 5's tested 50 | patternTestResults aTest[ALL_A_TEST_COUNT]; // all A's tested 51 | patternTestResults zeroF5ATest[ZERO_F_5_A_TEST_COUNT]; // pattern of 00FF55AA tested 52 | patternTestResults walking1sTest[WALKING_1_TEST_COUNT]; 53 | patternTestResults walking0sTest[WALKING_0_TEST_COUNT]; 54 | patternTestResults randomTest[RANDOM_TEST_COUNT]; 55 | } cableTestResults, *ptrCableTestResults; 56 | 57 | //----------------------------------------------------------------------------- 58 | // 59 | // perform_Cable_Test(tDevice *device, ptrCableTestResults testResults) 60 | // 61 | //! \brief Description: Perform a cable/buffer test using read/write buffer commands to check for mismatches and 62 | //! other bus errors 63 | // 64 | // Entry: 65 | //! \param[in] device = file descriptor 66 | //! \param[in] testResults = pointer to structure that holds results 67 | //! 68 | // Exit: 69 | //! \return SUCCESS = pass, FAILURE = fail 70 | // 71 | //----------------------------------------------------------------------------- 72 | M_NONNULL_PARAM_LIST(1, 2) 73 | M_PARAM_RO(1) M_PARAM_WO(2) eReturnValues perform_Cable_Test(tDevice* device, ptrCableTestResults testResults); 74 | 75 | //----------------------------------------------------------------------------- 76 | // 77 | // print_Cable_Test_Results(cableTestResults testResults) 78 | // 79 | //! \brief Description: Print the cable/buffer test results after running a test. 80 | // 81 | // Entry: 82 | //! \param[in] testResults = structure that holds results from a cable/buffer test 83 | //! 84 | // Exit: 85 | // 86 | //----------------------------------------------------------------------------- 87 | void print_Cable_Test_Results(cableTestResults testResults); 88 | 89 | #if defined(__cplusplus) 90 | } 91 | #endif 92 | -------------------------------------------------------------------------------- /include/cdl.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file cdl.h 14 | // \brief This file defines the functions related to displaying and changing CDL settings 15 | 16 | #pragma once 17 | 18 | #include "operations_Common.h" 19 | 20 | #if defined(__cplusplus) 21 | extern "C" 22 | { 23 | #endif 24 | 25 | #define MAX_CDL_READ_DESCRIPTOR 7 26 | #define MAX_CDL_WRITE_DESCRIPTOR 7 27 | #define MAX_CDL_T2A_DESCRIPTOR 7 28 | #define MAX_CDL_T2B_DESCRIPTOR 7 29 | #define SUPPORTED_POLICY_STRING_LENGTH 80 30 | 31 | #define COMBINE_CDL_FEATURE_VERSIONS_(x, y, z) #x "." #y "." #z 32 | #define COMBINE_CDL_FEATURE_VERSIONS(x, y, z) COMBINE_CDL_FEATURE_VERSIONS_(x, y, z) 33 | #define CDL_FEATURE_MAJOR_VERSION 2 34 | #define CDL_FEATURE_MINOR_VERSION 0 35 | #define CDL_FEATURE_PATCH_VERSION 0 36 | #define CDL_FEATURE_VERSION \ 37 | COMBINE_CDL_FEATURE_VERSIONS(CDL_FEATURE_MAJOR_VERSION, CDL_FEATURE_MINOR_VERSION, CDL_FEATURE_PATCH_VERSION) 38 | 39 | //! \enum eCDLFeatureSet 40 | //! \brief Enum representing CDL Feature enable or disable state. 41 | //! 42 | //! This enum defines the different state (enable/disable) of CDL Feature. 43 | M_DECLARE_ENUM(eCDLFeatureSet, 44 | /*!< CDL Feature Unknown state. */ 45 | CDL_FEATURE_UNKNOWN = -1, 46 | /*!< CDL Feature Disable. */ 47 | CDL_FEATURE_DISABLE = 0, 48 | /*!< CDL Feature Enable. */ 49 | CDL_FEATURE_ENABLE = 1); 50 | 51 | //! \enum eCDLSettingsOutMode 52 | //! \brief Enum representing output mode for CDL Settings. 53 | //! 54 | //! This enum defines the different mode of output for CDL Settings. 55 | M_DECLARE_ENUM(eCDLSettingsOutMode, 56 | /*!< CDL Settings Output Raw. */ 57 | CDL_SETTINGS_OUTPUT_RAW = 0, 58 | /*!< CDL Settings Output JSON. */ 59 | CDL_SETTINGS_OUTPUT_JSON = 1); 60 | 61 | //! \enum eCDLPolicyType 62 | //! \brief Enum representing CDL Policy. 63 | //! 64 | //! This enum defines the different CDL Policies. 65 | M_DECLARE_ENUM( 66 | eCDLPolicyType, 67 | /*!< CDL Policy Inactive Time. */ 68 | CDL_POLICY_TYPE_INACTIVE_TIME = 0, 69 | /*!< CDL Policy Active Time. */ 70 | CDL_POLICY_TYPE_ACTIVE_TIME = 1, 71 | /*!< CDL Policy Total Time. */ 72 | CDL_POLICY_TYPE_TOTAL_TIME = 2, 73 | /*!< CDL Policy Command Duration Guideline. This is represetation of Total Time policy for SCSI drives*/ 74 | CDL_POLICY_TYPE_COMMAND_DURATION_GUIDELINE = 3); 75 | 76 | //! \enum eCDLTimeFieldUnitType 77 | //! \brief Enum representing units for time fields. 78 | //! 79 | //! This enum defines the different of units for CDL Time fields. 80 | M_DECLARE_ENUM(eCDLTimeFieldUnitType, 81 | /*!< CDL Time Field Unit in microseconds. */ 82 | CDL_TIME_FIELD_UNIT_TYPE_MICROSECONDS = 0, 83 | /*!< CDL Time Field Unit in milliseconds. */ 84 | CDL_TIME_FIELD_UNIT_TYPE_MILLISECONDS = 1, 85 | /*!< CDL Time Field Unit in seconds. */ 86 | CDL_TIME_FIELD_UNIT_TYPE_SECONDS = 2, 87 | /*!< CDL Time Field Unit in 500 nanoseconds. */ 88 | CDL_TIME_FIELD_UNIT_TYPE_500_NANOSECONDS = 3, 89 | /*!< CDL Time Field Unit in 10 milliseconds. */ 90 | CDL_TIME_FIELD_UNIT_TYPE_10_MILLISECONDS = 4, 91 | /*!< CDL Time Field Unit in 500 milliseconds. */ 92 | CDL_TIME_FIELD_UNIT_TYPE_500_MILLISECONDS = 5, 93 | /*!< CDL Time Field No Unit. */ 94 | CDL_TIME_FIELD_UNIT_TYPE_NO_VALUE = 6, 95 | /*!< CDL Time Field Reserved Unit. */ 96 | CDL_TIME_FIELD_UNIT_TYPE_RESERVED = 7); 97 | 98 | typedef struct _tCDLDescriptor 99 | { 100 | eCDLTimeFieldUnitType timeFieldUnitType; 101 | uint8_t inactiveTimePolicy; 102 | uint8_t activeTimePolicy; 103 | union 104 | { 105 | uint8_t totalTimePolicy; 106 | uint8_t CommandDurationGuidelinePolicy; 107 | }; 108 | uint32_t activeTime; 109 | uint32_t inactiveTime; 110 | union 111 | { 112 | uint32_t totalTime; 113 | uint32_t commandDurationGuideline; 114 | }; 115 | } tCDLDescriptor; 116 | 117 | typedef struct _tATACDLSettings 118 | { 119 | bool isCommandDurationGuidelineSupported; 120 | uint32_t minimumTimeLimit; 121 | uint32_t maximumTimeLimit; 122 | uint8_t performanceVsCommandCompletion; 123 | uint16_t inactiveTimePolicySupportedDescriptor; 124 | uint16_t activeTimePolicySupportedDescriptor; 125 | uint16_t totalTimePolicySupportedDescriptor; 126 | tCDLDescriptor cdlReadDescriptor[MAX_CDL_READ_DESCRIPTOR]; 127 | tCDLDescriptor cdlWriteDescriptor[MAX_CDL_WRITE_DESCRIPTOR]; 128 | } tATACDLSettings; 129 | 130 | typedef struct _tSCSICDLSettings 131 | { 132 | uint8_t performanceVsCommandDurationGuidelines; 133 | tCDLDescriptor cdlT2ADescriptor[MAX_CDL_T2A_DESCRIPTOR]; 134 | tCDLDescriptor cdlT2BDescriptor[MAX_CDL_T2B_DESCRIPTOR]; 135 | } tSCSICDLSettings; 136 | 137 | typedef struct _tCDLSettings 138 | { 139 | bool isSupported; 140 | bool isEnabled; 141 | union 142 | { 143 | tATACDLSettings ataCDLSettings; 144 | tSCSICDLSettings scsiCDLSettings; 145 | }; 146 | } tCDLSettings; 147 | 148 | M_NONNULL_PARAM_LIST(1) 149 | M_PARAM_RO(1) 150 | OPENSEA_OPERATIONS_API eReturnValues enable_Disable_CDL_Feature(tDevice* device, eCDLFeatureSet countField); 151 | 152 | M_NONNULL_PARAM_LIST(1, 2) 153 | M_PARAM_RO(1) 154 | M_PARAM_WO(2) 155 | OPENSEA_OPERATIONS_API eReturnValues get_CDL_Settings(tDevice* device, tCDLSettings* cdlSettings); 156 | 157 | M_NONNULL_PARAM_LIST(1, 2) 158 | M_PARAM_RO(1) 159 | M_PARAM_RO(2) 160 | OPENSEA_OPERATIONS_API eReturnValues print_CDL_Settings(tDevice* device, tCDLSettings* cdlSettings); 161 | 162 | M_NONNULL_PARAM_LIST(1, 2) 163 | M_PARAM_RO(1) 164 | M_PARAM_RO(2) 165 | OPENSEA_OPERATIONS_API eReturnValues config_CDL_Settings(tDevice* device, tCDLSettings* cdlSettings); 166 | 167 | M_NONNULL_PARAM_LIST(1, 2) 168 | M_PARAM_RO(1) 169 | M_PARAM_RO(2) 170 | OPENSEA_OPERATIONS_API eReturnValues is_Valid_Config_CDL_Settings(tDevice* device, tCDLSettings* cdlSettings); 171 | 172 | M_NONNULL_PARAM_LIST(1) 173 | M_PARAM_RO(1) 174 | OPENSEA_OPERATIONS_API bool is_Total_Time_Policy_Type_Supported(tCDLSettings* cdlSettings); 175 | 176 | M_NONNULL_PARAM_LIST(1) 177 | M_PARAM_RO(1) 178 | OPENSEA_OPERATIONS_API bool is_Performance_Versus_Command_Completion_Supported(tCDLSettings* cdlSettings); 179 | 180 | M_NONNULL_PARAM_LIST(4) 181 | M_PARAM_RW(4) 182 | OPENSEA_OPERATIONS_API void get_Supported_Policy_String(eDriveType driveType, 183 | eCDLPolicyType policyType, 184 | uint16_t policySupportedDescriptor, 185 | char* policyString); 186 | 187 | OPENSEA_OPERATIONS_API uint32_t convert_CDL_TimeField_To_Microseconds(eCDLTimeFieldUnitType unitType, 188 | uint32_t value); 189 | #if defined(__cplusplus) 190 | } 191 | #endif 192 | -------------------------------------------------------------------------------- /include/host_erase.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file host_erase.h 14 | // \brief This file defines the function for performing a host based erase functions (host issues a series of write 15 | // commands) 16 | 17 | #pragma once 18 | 19 | #include "operations_Common.h" 20 | 21 | #if defined(__cplusplus) 22 | extern "C" 23 | { 24 | #endif 25 | 26 | //----------------------------------------------------------------------------- 27 | // 28 | // erase_Range( tDevice * device ) 29 | // 30 | //! \brief Erase a range of LBAs on a drive. 31 | // 32 | // Entry: 33 | //! \param device - file descriptor 34 | //! \param eraseRangeStart - the LBA to start the erase at 35 | //! \param eraseRangeEnd - the end LBA. If this is set to MAX64, this will be corrected to the MaxLba of the drive 36 | //! \param pattern - pointer to a buffer with a pattern to use. 37 | //! \param patternLength - length of the buffer pointed to by the pattern parameter. This must be at least 1 38 | //! logical sector in size \param[in] hideLBACounter = set to true to hide the LBA counter being printed to stdout 39 | //! 40 | // Exit: 41 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 42 | // 43 | //----------------------------------------------------------------------------- 44 | M_NONNULL_PARAM_LIST(1) 45 | M_PARAM_RO(1) 46 | M_NONNULL_IF_NONZERO_PARAM(4, 5) 47 | M_PARAM_RO_SIZE(4, 5) 48 | OPENSEA_OPERATIONS_API eReturnValues erase_Range(tDevice* device, 49 | uint64_t eraseRangeStart, 50 | uint64_t eraseRangeEnd, 51 | uint8_t* pattern, 52 | uint32_t patternLength, 53 | bool hideLBACounter); 54 | 55 | //----------------------------------------------------------------------------- 56 | // 57 | // erase_Time( tDevice * device ) 58 | // 59 | //! \brief Erase a LBAs from a starting LBA for a time in seconds. 60 | // 61 | // Entry: 62 | //! \param device - file descriptor 63 | //! \param eraseStartLBA - the LBA to start the erase at 64 | //! \param eraseTime - a time in seconds to erase for 65 | //! \param pattern - pointer to a buffer with a pattern to use. 66 | //! \param patternLength - length of the buffer pointed to by the pattern parameter. This must be at least 1 67 | //! logical sector in size \param[in] hideLBACounter = set to true to hide the LBA counter being printed to stdout 68 | //! 69 | // Exit: 70 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 71 | // 72 | //----------------------------------------------------------------------------- 73 | M_NONNULL_PARAM_LIST(1) 74 | M_PARAM_RO(1) 75 | M_NONNULL_IF_NONZERO_PARAM(4, 5) 76 | M_PARAM_RO_SIZE(4, 5) 77 | OPENSEA_OPERATIONS_API eReturnValues erase_Time(tDevice* device, 78 | uint64_t eraseStartLBA, 79 | uint64_t eraseTime, 80 | uint8_t* pattern, 81 | uint32_t patternLength, 82 | bool hideLBACounter); 83 | 84 | //----------------------------------------------------------------------------- 85 | // 86 | // erase_Boot_Sectors( tDevice * device ) 87 | // 88 | //! \brief Erase the boot sector(s). This will overwrite LBA 0 for 32KiB/64KiB and maxlba - 32Kib or 64 Kib 89 | // 90 | // Entry: 91 | //! \param device - file descriptor 92 | //! 93 | // Exit: 94 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 95 | // 96 | //----------------------------------------------------------------------------- 97 | M_NONNULL_PARAM_LIST(1) M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues erase_Boot_Sectors(tDevice* device); 98 | 99 | #if defined(__cplusplus) 100 | } 101 | #endif 102 | -------------------------------------------------------------------------------- /include/nvme_operations.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | #pragma once 14 | 15 | #include "nvme_helper.h" 16 | #include "operations_Common.h" 17 | 18 | #if defined(__cplusplus) 19 | extern "C" 20 | { 21 | #endif 22 | 23 | //----------------------------------------------------------------------------- 24 | // 25 | // nvme_Print_ERROR_Log_Page 26 | // 27 | //! \brief Description: Function to send Get Error Information Log Page NVMe command to a device 28 | // 29 | // Entry: 30 | //! \param[in] device = pointer to tDevice structure 31 | //! \param[in] numOfErrToPrint = set to 0 to print all, otherwise set a reasonable value (e.g. 32) 32 | //! [NVMe Identify data shows how many entries are present] 33 | //! 34 | // Exit: 35 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 36 | // 37 | //----------------------------------------------------------------------------- 38 | M_NONNULL_PARAM_LIST(1) 39 | M_PARAM_RO(1) 40 | OPENSEA_OPERATIONS_API eReturnValues nvme_Print_ERROR_Log_Page(tDevice* device, uint64_t numOfErrToPrint); 41 | 42 | //----------------------------------------------------------------------------- 43 | // 44 | // nvme_Print_FWSLOTS_Log_Page 45 | // 46 | //! \brief Description: Function to print Firmware Slots Log Page NVMe command to a device 47 | // 48 | // Entry: 49 | //! \param[in] device = pointer to tDevice structure 50 | //! 51 | // Exit: 52 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 53 | // 54 | //----------------------------------------------------------------------------- 55 | M_NONNULL_PARAM_LIST(1) 56 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues nvme_Print_FWSLOTS_Log_Page(tDevice* device); 57 | 58 | //----------------------------------------------------------------------------- 59 | // 60 | // nvme_Print_CmdSptEfft_Log_Page 61 | // 62 | //! \brief Description: Function to print Commands Supported and Effects Log Page NVMe command to a device 63 | // 64 | // Entry: 65 | //! \param[in] device = pointer to tDevice structure 66 | //! 67 | // Exit: 68 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 69 | // 70 | //----------------------------------------------------------------------------- 71 | M_NONNULL_PARAM_LIST(1) 72 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues nvme_Print_CmdSptEfft_Log_Page(tDevice* device); 73 | 74 | OPENSEA_OPERATIONS_API void show_effects_log_human(uint32_t effect); 75 | 76 | //----------------------------------------------------------------------------- 77 | // 78 | // nvme_Print_DevSelfTest_Log_Page 79 | // 80 | //! \brief Description: Function to print Device Self-test Log Page NVMe command to a device 81 | // 82 | // Entry: 83 | //! \param[in] device = pointer to tDevice structure 84 | //! 85 | // Exit: 86 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 87 | // 88 | //----------------------------------------------------------------------------- 89 | M_NONNULL_PARAM_LIST(1) 90 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues nvme_Print_DevSelfTest_Log_Page(tDevice* device); 91 | 92 | //----------------------------------------------------------------------------- 93 | // 94 | // nvme_Print_Feature_Identifiers_Help 95 | // 96 | //! \brief Description: Function to print Help info for Feature Identifiers 97 | // 98 | // Entry: 99 | //! 100 | // Exit: 101 | // 102 | //----------------------------------------------------------------------------- 103 | OPENSEA_OPERATIONS_API void nvme_Print_Feature_Identifiers_Help(void); 104 | 105 | //----------------------------------------------------------------------------- 106 | // 107 | // nvme_Print_Feature_Identifiers_Help 108 | // 109 | //! \brief Description: Function to print ALL the Feature Identifiers 110 | // 111 | // Entry: 112 | //! \param[in] device = pointer to tDevice structure 113 | //! \param[in] selectType eNvmeFeaturesSelectValue, i.e. current, default, saved etc. 114 | //! \param[in] listOnlySupportedFeatures = !!NOT USED!! list only supported features. 115 | //! 116 | // Exit: 117 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 118 | // 119 | //----------------------------------------------------------------------------- 120 | M_NONNULL_PARAM_LIST(1) 121 | M_PARAM_RO(1) 122 | OPENSEA_OPERATIONS_API eReturnValues nvme_Print_All_Feature_Identifiers(tDevice* device, 123 | eNvmeFeaturesSelectValue selectType, 124 | bool listOnlySupportedFeatures); 125 | 126 | //----------------------------------------------------------------------------- 127 | // 128 | // nvme_Print_Feature_Details 129 | // 130 | //! \brief Description: Function to print ALL the Feature Identifiers 131 | // 132 | // Entry: 133 | //! \param[in] device = pointer to tDevice structure 134 | //! \param[in] featureID Feature Identifier 135 | //! \param[in] selectType eNvmeFeaturesSelectValue, i.e. current, default, saved etc. 136 | //! 137 | // Exit: 138 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 139 | // 140 | //----------------------------------------------------------------------------- 141 | M_NONNULL_PARAM_LIST(1) 142 | M_PARAM_RO(1) 143 | OPENSEA_OPERATIONS_API eReturnValues nvme_Print_Feature_Details(tDevice* device, 144 | uint8_t featureID, 145 | eNvmeFeaturesSelectValue selectType); 146 | 147 | // \fn print_Nvme_Ctrl_Regs(tDevice * device) 148 | // \brief Prints the controller registers. 149 | // \param[in] device struture 150 | // \return SUCCESS - pass, !SUCCESS fail or something went wrong 151 | M_NONNULL_PARAM_LIST(1) M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues print_Nvme_Ctrl_Regs(tDevice* device); 152 | 153 | //----------------------------------------------------------------------------- 154 | // 155 | // nvme_Get_Log_Size 156 | // 157 | //! \brief Description: Function to get the size for GetLog Page command by a utility. 158 | //! NOTE: Some variable length logs will not return a size at this time. Vendor unique logs 159 | //! are not supported i nthis function 160 | // 161 | // Entry: 162 | //! \param[in] device = pointer to the device structure. This is needed in order to calculate some log sizes that 163 | //! are not fixed \param[in] logPageId = Log Page Identifier. \param[out] logSize = size of the Log to return 164 | //! 165 | // Exit: 166 | //! \return SUCCESS = pass, !SUCCESS = something when wrong 167 | // 168 | //----------------------------------------------------------------------------- 169 | M_NONNULL_PARAM_LIST(1, 3) 170 | M_PARAM_RO(1) 171 | M_PARAM_WO(3) 172 | OPENSEA_OPERATIONS_API eReturnValues nvme_Get_Log_Size(tDevice* device, uint8_t logPageId, uint64_t* logSize); 173 | 174 | #if defined(__cplusplus) 175 | } 176 | #endif 177 | -------------------------------------------------------------------------------- /include/opensea_operation_version.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file opensea_operation_version.h 14 | // \brief Defines the versioning information for opensea-transport API 15 | 16 | #pragma once 17 | 18 | #if defined(__cplusplus) 19 | extern "C" 20 | { 21 | #endif 22 | 23 | #define COMBINE_OPERATION_VERSIONS_(x, y, z) #x "." #y "." #z 24 | #define COMBINE_OPERATION_VERSIONS(x, y, z) COMBINE_OPERATION_VERSIONS_(x, y, z) 25 | 26 | #define OPENSEA_OPERATION_MAJOR_VERSION 9 27 | #define OPENSEA_OPERATION_MINOR_VERSION 1 28 | #define OPENSEA_OPERATION_PATCH_VERSION 0 29 | 30 | #define OPENSEA_OPERATION_VERSION \ 31 | COMBINE_OPERATION_VERSIONS(OPENSEA_OPERATION_MAJOR_VERSION, OPENSEA_OPERATION_MINOR_VERSION, \ 32 | OPENSEA_OPERATION_PATCH_VERSION) 33 | 34 | #if defined(__cplusplus) 35 | } // extern "C" 36 | #endif 37 | -------------------------------------------------------------------------------- /include/operations_Common.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file operations_Common.h 14 | // \brief This file defines common things for the opensea-operations Library. 15 | 16 | #pragma once 17 | 18 | #include "code_attributes.h" 19 | 20 | #include "ata_helper.h" 21 | #include "ata_helper_func.h" 22 | #include "cmds.h" 23 | #include "common_public.h" 24 | #include "nvme_helper.h" 25 | #include "nvme_helper_func.h" 26 | #include "scsi_helper.h" 27 | #include "scsi_helper_func.h" 28 | 29 | #if defined(__cplusplus) 30 | # define __STDC_FORMAT_MACROS // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp) 31 | extern "C" 32 | { 33 | #endif 34 | 35 | // This is a bunch of stuff for creating opensea-transport as a dynamic library (DLL in Windows or shared object in 36 | // linux) 37 | #if defined(OPENSEA_OPERATIONS_API) 38 | # undef(OPENSEA_OPERATIONS_API) 39 | #endif 40 | 41 | #if defined(EXPORT_OPENSEA_OPERATIONS) && defined(STATIC_OPENSEA_OPERATIONS) 42 | # error "The preprocessor definitions EXPORT_OPENSEA_OPERATIONS and STATIC_OPENSEA_OPERATIONS cannot be combined!" 43 | #elif defined(EXPORT_OPENSEA_OPERATIONS) 44 | # if defined(_DEBUG) && !defined(OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT) 45 | # pragma message("Compiling opensea-operations as exporting DLL!") 46 | # define OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT 47 | # endif 48 | # define OPENSEA_OPERATIONS_API DLL_EXPORT 49 | #elif defined(IMPORT_OPENSEA_OPERATIONS) 50 | # if defined(_DEBUG) && !defined(OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT) 51 | # pragma message("Compiling opensea-operations as importing DLL!") 52 | # define OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT 53 | # endif 54 | # define OPENSEA_OPERATIONS_API DLL_IMPORT 55 | #else 56 | # if defined(_DEBUG) && !defined(OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT) 57 | # pragma message("Compiling opensea-operations as a static library!") 58 | # define OPENSEA_OPERATIONS_COMPILATION_MESSAGE_OUTPUT 59 | # endif 60 | # define OPENSEA_OPERATIONS_API 61 | #endif 62 | 63 | #if defined(__cplusplus) 64 | } 65 | #endif 66 | -------------------------------------------------------------------------------- /include/sas_phy.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file sas_phy.h 14 | // \brief This file holds options to do things on a SAS phy. 15 | 16 | #pragma once 17 | 18 | #if defined(__cplusplus) 19 | extern "C" 20 | { 21 | #endif 22 | 23 | #include "precision_timer.h" 24 | 25 | #include "operations_Common.h" 26 | #include "scsi_helper.h" 27 | #include "scsi_helper_func.h" 28 | 29 | // checks if it is SAS protocol and Diagnostic page 3F is supported 30 | M_NONNULL_PARAM_LIST(1) 31 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API bool is_SAS_Phy_Diagnostic_Page_Supported(tDevice* device); 32 | 33 | typedef enum eSASPhyTestPatternEnum 34 | { 35 | SAS_PHY_PATTERN_RESERVED = 0x00, 36 | SAS_PHY_PATTERN_JTPAT = 0x01, 37 | SAS_PHY_PATTERN_CJTPAT = 0x02, 38 | SAS_PHY_PATTERN_PRBS9 = 0x03, 39 | SAS_PHY_PATTERN_PRRBS15 = 0x04, 40 | // 05 - 0F are reserved 41 | SAS_PHY_PATTERN_TRAIN = 0x10, 42 | SAS_PHY_PATTERN_TRAIN_DONE = 0x11, 43 | SAS_PHY_PATTERN_IDLE = 0x12, 44 | SAS_PHY_PATTERN_SCRAMBLED_0 = 0x13, 45 | // 14 - 3F are reserved 46 | SAS_PHY_PATTERN_TWO_DWORDS = 0x40, 47 | // 41 - EF are reserved 48 | // F0 - FF : Vendor Specific 49 | SAS_PHY_PATTERN_BEGIN_VENDOR_UNIQUE = 0xF0, 50 | } eSASPhyTestPattern; 51 | 52 | typedef enum eSASPhyTestFunctionEnum 53 | { 54 | SAS_PHY_FUNC_STOP = 0x00, 55 | SAS_PHY_FUNC_TRANSMIT_PATTERN = 0x01, 56 | // 02 - EF are reserved 57 | // D0 - FF are vendor specific 58 | } eSASPhyTestFunction; 59 | 60 | typedef enum eSASPhyTestFunctionSSCEnum 61 | { 62 | SAS_PHY_SSC_NO_SPREADING = 0x00, 63 | SAS_PHY_SSC_CENTER_SPREADING = 0x01, 64 | SAS_PHY_SSC_DOWN_SPREADING = 0x02, 65 | SAS_PHY_SSC_RESERVED = 0x03 66 | } eSASPhyTestFunctionSSC; 67 | 68 | typedef enum eSASPhyPhysicalLinkRateEnum 69 | { 70 | SAS_PHY_LINK_RATE_1_5G = 0x08, 71 | SAS_PHY_LINK_RATE_3G = 0x09, 72 | SAS_PHY_LINK_RATE_6G = 0x0A, 73 | SAS_PHY_LINK_RATE_12G = 0x0B, 74 | SAS_PHY_LINK_RATE_22_5G = 0x0C 75 | } eSASPhyPhysicalLinkRate; 76 | 77 | typedef enum eSASPhyDwordControlEnum 78 | { 79 | SAS_PHY_DWORD_CONTROL_DATA_CHARACTER_NO_SCRAMBLING = 0x00, 80 | SAS_PHY_DWORD_CONTROL_5TH_BYTE_CONTROL_CHARACTER_NO_SCRAMBLING = 0x08, 81 | SAS_PHY_DWORD_CONTROL_1ST_BYTE_CONTROL_CHARACTER_NO_SCRAMBLING = 0x80, 82 | SAS_PHY_DWORD_CONTROL_1ST_AND_5TH_BYTE_CONTROL_CHARACTER_NO_SCRAMBLING = 0x88, 83 | // all others are reserved 84 | } eSASPhyDwordControl; 85 | 86 | #define PHY_TEST_PATTERN_DWORD_D10_2 UINT64_C(0x4A4A4A4A4A4A4A4A) 87 | #define PHY_TEST_PATTERN_DWORD_D21_5 UINT64_C(0xB5B5B5B5B5B5B5B5) 88 | #define PHY_TEST_PATTERN_DWORD_D24_3 UINT64_C(0x7878787878787878) 89 | #define PHY_TEST_PATTERN_DWORD_D25_6_AND_D6_1 UINT64_C(0xD926D926D926D926) 90 | #define PHY_TEST_PATTERN_DWORD_D30_3 UINT64_C(0x7E7E7E7E7E7E7E7E) 91 | #define PHY_TEST_PATTERN_DWORD_ALIGN_0 UINT64_C(0xBC4A4A7BBC4A4A7B) 92 | #define PHY_TEST_PATTERN_DWORD_ALIGN_1 UINT64_C(0xBC070707BC070707) 93 | #define PHY_TEST_PATTERN_DWORD_PAIR_ALIGN_0 UINT64_C(0xBC4A4A7B4A787E7E) 94 | 95 | // Takes all the inputs to start a test pattern 96 | M_NONNULL_PARAM_LIST(1) 97 | M_PARAM_RO(1) 98 | OPENSEA_OPERATIONS_API eReturnValues start_SAS_Test_Pattern(tDevice* device, 99 | uint8_t phyIdentifier, 100 | eSASPhyTestPattern pattern, 101 | bool sataTestFunction, 102 | eSASPhyTestFunctionSSC testFunctionSSC, 103 | eSASPhyPhysicalLinkRate linkRate, 104 | eSASPhyDwordControl dwordControl, 105 | uint64_t phyTestPatternDwords); 106 | 107 | // will stop a test pattern on a specified phy 108 | M_NONNULL_PARAM_LIST(1) 109 | M_PARAM_RO(1) 110 | OPENSEA_OPERATIONS_API eReturnValues stop_SAS_Test_Pattern(tDevice* device, 111 | uint8_t phyIdentifier, 112 | eSASPhyPhysicalLinkRate linkRate); 113 | 114 | #if defined(__cplusplus) 115 | } 116 | #endif 117 | -------------------------------------------------------------------------------- /include/sata_phy.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2024-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | 13 | // \file sata_phy.h 14 | // \brief functions to help with configuring or reading info about the SATA PHY 15 | 16 | #pragma once 17 | #if defined(__cplusplus) 18 | extern "C" 19 | { 20 | #endif //__cplusplus 21 | 22 | #include "common_types.h" 23 | #include "operations_Common.h" 24 | 25 | typedef enum eSATA_Phy_Event_IDEnum 26 | { 27 | SATA_PHY_EVENT_NONE = 0x000, 28 | SATA_PHY_EVENT_COMMAND_ICRC = 0x001, 29 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_DATA_FIS = 0x002, 30 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_D2H_DATA_FIS = 0x003, 31 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_H2D_DATA_FIS = 0x004, 32 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_NON_DATA_FIS = 0x005, 33 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_D2H_NON_DATA_FIS = 0x006, 34 | SATA_PHY_EVENT_R_ERR_RESPONSE_FOR_H2D_NON_DATA_FIS = 0x007, 35 | SATA_PHY_EVENT_D2H_NON_DATA_FIS_RETRIES = 0x008, 36 | SATA_PHY_EVENT_TRANSITIONS_FROM_PHYRDY_2_PHYRDYN = 0x009, 37 | SATA_PHY_EVENT_H2D_FISES_SENT_DUE_TO_COMRESET = 0x00A, 38 | SATA_PHY_EVENT_CRC_ERRORS_WITHIN_H2D_FIS = 0x00B, 39 | SATA_PHY_EVENT_NON_CRC_ERRORS_WITHIN_H2D_FIS = 0x00D, 40 | SATA_PHY_EVENT_R_ERR_RESPONSE_H2D_DATA_FIS_CRC = 0x00F, 41 | SATA_PHY_EVENT_R_ERR_RESPONSE_H2D_DATA_FIS_NONCRC = 0x010, 42 | SATA_PHY_EVENT_R_ERR_RESPONSE_H2D_NONDATA_FIS_CRC = 0x012, 43 | SATA_PHY_EVENT_R_ERR_RESPONSE_H2D_NONDATA_FIS_NONCRC = 0x013, 44 | SATA_PHY_EVENT_PM_H2D_NONDATA_FIS_R_ERR_END_STAT_COLLISION = 0xC00, 45 | SATA_PHY_EVENT_PM_SIGNATURE_REGISTER_D2H_FISES = 0xC01, 46 | SATA_PHY_EVENT_PM_CORRUPT_CRC_PROPAGATION_D2H_FISES = 0xC02, 47 | } eSATA_Phy_Event_ID; 48 | 49 | #define VENDOR_SPECIFIC_PHY_EVENT_ID_CHECK BIT15 50 | 51 | typedef struct s_phyEventCounter 52 | { 53 | bool vendorUnique; // true if the counter is a vendor unique definition 54 | uint16_t eventID; // NOTE: This is ONLY the ID. Bits 11:0. The others are removed 55 | uint16_t rawID; // the raw ID value including vendor unique bit and lenth bits. 56 | uint64_t counterMaxValue; // use this to check if a counter has hit the maximum value it can hold or not. 57 | uint64_t counterValue; 58 | } phyEventCounter; 59 | 60 | // This should be enought to read standard and vendor counters, but can be adjusted if needed. 61 | #define MAX_PHY_EVENT_COUNTERS UINT8_C(32) 62 | 63 | typedef struct s_sataPhyEventCounters 64 | { 65 | bool valid; // must be true for any other data to have meaning in this structure. 66 | bool validChecksumReceived; // if this is false, then the following data may be corrupt, but some of it may be 67 | // valid. 68 | uint8_t numberOfCounters; // number of counters in the following array 69 | phyEventCounter counters[MAX_PHY_EVENT_COUNTERS]; 70 | } sataPhyEventCounters, *ptrSATAPhyEventCounters; 71 | 72 | M_NONNULL_PARAM_LIST(1, 2) 73 | M_PARAM_RO(1) 74 | M_PARAM_WO(2) 75 | OPENSEA_OPERATIONS_API eReturnValues get_SATA_Phy_Event_Counters(tDevice* device, ptrSATAPhyEventCounters counters); 76 | 77 | M_NONNULL_PARAM_LIST(1) 78 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API void print_SATA_Phy_Event_Counters(ptrSATAPhyEventCounters counters); 79 | 80 | M_NONNULL_PARAM_LIST(1) 81 | M_PARAM_RO(1) 82 | OPENSEA_OPERATIONS_API 83 | eReturnValues reinitialize_SATA_Phy_Event_Counters(tDevice* device, 84 | ptrSATAPhyEventCounters counters /* optional */); 85 | 86 | #if defined(__cplusplus) 87 | } 88 | #endif //__cplusplus 89 | -------------------------------------------------------------------------------- /include/sector_repair.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file sector_repair.h 14 | // \brief This file defines the functions related to sector repair. This file also contians functions for creating 15 | // uncorrectables on the drive since these functions are useful for testing repairs 16 | 17 | #pragma once 18 | 19 | #include "operations_Common.h" 20 | 21 | #if defined(__cplusplus) 22 | extern "C" 23 | { 24 | #endif 25 | 26 | typedef enum eRepairStatusEnum 27 | { 28 | NOT_REPAIRED, 29 | REPAIR_FAILED, 30 | REPAIRED, 31 | REPAIR_NOT_REQUIRED, 32 | UNABLE_TO_REPAIR_ACCESS_DENIED, // This can happen if the OS blocks our commands to the LBA we are trying to 33 | // repair. Saw this happen on Win10, when a secondary drive with a Win10 34 | // installation on it had errors, we could not repair them. - TJE 35 | } eRepairStatus; 36 | 37 | typedef struct s_errorLBA 38 | { 39 | uint64_t errorAddress; 40 | eRepairStatus repairStatus; 41 | } errorLBA, *ptrErrorLBA; 42 | 43 | typedef const errorLBA* constPtrErrorLBA; 44 | 45 | static M_INLINE void safe_free_error_lba(errorLBA** errlba) 46 | { 47 | safe_free_core(M_REINTERPRET_CAST(void**, errlba)); 48 | } 49 | 50 | //----------------------------------------------------------------------------- 51 | // 52 | // repair_LBA() 53 | // 54 | //! \brief Description: This function takes an LBA, then aligns it to the beginning of a physical block, then 55 | //! issues a write to the full physical block to repair the whole physical block. By doing this, reallocations are 56 | //! minimized. 57 | // 58 | // Entry: 59 | //! \param[in] device = file descriptor 60 | //! \param[in] LBA = the LBA to repair 61 | //! \param[in] forcePassthroughCommand = boolean value to force sending a SAT passthrough command to repair the 62 | //! LBA instead of a SCSI command. This value is ignored on non-ATA devices. \param[in] 63 | //! automaticWriteReallocationEnabled = when set to true, will perform write reallocation. If set to false, 64 | //! reassign blocks command will be used (ATA translation will be run on ATA drives). Ignored when 65 | //! forcePassthroughCommand is set \param[in] automaticReadReallocationEnabled = when set to true, will attempt 66 | //! read reallocation before attempting write reallocation or using the reassign blocks command. Ignored when 67 | //! forcePassthroughCommand is set 68 | //! 69 | // Exit: 70 | //! \return SUCCESS on successful completion, FAILURE = fail 71 | // 72 | //----------------------------------------------------------------------------- 73 | M_NONNULL_PARAM_LIST(1, 2) 74 | M_PARAM_RO(1) 75 | M_PARAM_RW(2) 76 | OPENSEA_OPERATIONS_API eReturnValues repair_LBA(tDevice* device, 77 | ptrErrorLBA LBA, 78 | bool forcePassthroughCommand, 79 | bool automaticWriteReallocationEnabled, 80 | bool automaticReadReallocationEnabled); 81 | 82 | //----------------------------------------------------------------------------- 83 | // 84 | // print_LBA_Error_List() 85 | // 86 | //! \brief Description: This function takes a list of LBAs with errors and their current repair status and prints 87 | //! it to the screen. 88 | // 89 | // Entry: 90 | //! \param[in] LBAs = pointer to the list of LBAs in the ERROR LBA struct type to read and print to the screen 91 | //! \param[in] numberOfErrors = this is the number of items in the list to print (list length) 92 | //! 93 | // Exit: 94 | // 95 | //----------------------------------------------------------------------------- 96 | M_NONNULL_PARAM_LIST(1) 97 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API void print_LBA_Error_List(constPtrErrorLBA LBAs, uint16_t numberOfErrors); 98 | 99 | M_NONNULL_PARAM_LIST(1, 2, 3) 100 | M_PARAM_RO(1) 101 | M_PARAM_WO(2) 102 | M_PARAM_WO(3) 103 | OPENSEA_OPERATIONS_API eReturnValues get_Automatic_Reallocation_Support(tDevice* device, 104 | bool* automaticWriteReallocationEnabled, 105 | bool* automaticReadReallocationEnabled); 106 | 107 | // Use this call to determine if you've already logged an error in the list so that you don't log it again 108 | M_NONNULL_PARAM_LIST(1) 109 | M_PARAM_RO(1) 110 | OPENSEA_OPERATIONS_API 111 | bool is_LBA_Already_In_The_List(ptrErrorLBA LBAList, uint32_t numberOfLBAsInTheList, uint64_t lba); 112 | 113 | // Use this call to sort the list of Error LBAs. This will also remove any duplicates it finds and adjust the value 114 | // of numberOfLBAsInTheList 115 | M_NONNULL_PARAM_LIST(1, 2) 116 | M_PARAM_RW(1) 117 | M_PARAM_RW(2) OPENSEA_OPERATIONS_API void sort_Error_LBA_List(ptrErrorLBA LBAList, uint32_t* numberOfLBAsInTheList); 118 | 119 | M_NONNULL_PARAM_LIST(1) 120 | M_PARAM_RO(1) 121 | OPENSEA_OPERATIONS_API uint32_t find_LBA_Entry_In_List(ptrErrorLBA LBAList, 122 | uint32_t numberOfLBAsInTheList, 123 | uint64_t lba); // returns UINT32_MAX if not found 124 | 125 | #if defined(__cplusplus) 126 | } 127 | #endif 128 | -------------------------------------------------------------------------------- /include/trim_unmap.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file host_erase.h 14 | // \brief This file defines the function for performing a host based erase functions (host issues a series of write 15 | // commands) 16 | 17 | #pragma once 18 | 19 | #include "operations_Common.h" 20 | 21 | #if defined(__cplusplus) 22 | extern "C" 23 | { 24 | #endif 25 | 26 | //----------------------------------------------------------------------------- 27 | // 28 | // is_Trim_Or_Unmap_Supported( tDevice * device ) 29 | // 30 | //! \brief Get whether a device supports TRIM (ATA) or UNMAP (SCSI) commands. Can also tell you how many 31 | //! descriptors can be specified in the command. 32 | // 33 | // Entry: 34 | //! \param device - file descriptor 35 | //! \param maxTrimOrUnmapBlockDescriptors - pointer to a uint16_t to hold the number of decriptors that can be 36 | //! sent. This can be M_NULLPTR. On ATA, this will be a value divisible by 64 since 64 descriptors can be placed 37 | //! inside each TRIM command. \param maxLBACount - this is only for SAS since SAS can specify the maximum number 38 | //! of LBA's to unmap in a single command. If maxTrimOrUnmapBlockDescriptors is non-M_NULLPTR, this MUST be 39 | //! non-M_NULLPTR as well or neither value will be filled in 40 | //! 41 | // Exit: 42 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 43 | // 44 | //----------------------------------------------------------------------------- 45 | M_NONNULL_PARAM_LIST(1, 2, 3) 46 | M_PARAM_RO(1) 47 | M_PARAM_WO(2) 48 | M_PARAM_WO(3) 49 | OPENSEA_OPERATIONS_API bool is_Trim_Or_Unmap_Supported(tDevice* device, 50 | uint32_t* maxTrimOrUnmapBlockDescriptors, 51 | uint32_t* maxLBACount); 52 | 53 | //----------------------------------------------------------------------------- 54 | // 55 | // trim_unmap_range( tDevice * device ) 56 | // 57 | //! \brief TRIM or UNMAP a range of LBAs from a starting LBA until the end of the range. This will auto detect ATA 58 | //! vs SCSI to send the appropriate command 59 | // 60 | // Entry: 61 | //! \param device - file descriptor 62 | //! \param startLBA - the LBA to start the unmap/trim at 63 | //! \param range - the range of LBAs to trim/unmap from the starting LBA 64 | //! 65 | // Exit: 66 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 67 | // 68 | //----------------------------------------------------------------------------- 69 | M_NONNULL_PARAM_LIST(1) 70 | M_PARAM_RO(1) 71 | OPENSEA_OPERATIONS_API eReturnValues trim_Unmap_Range(tDevice* device, uint64_t startLBA, uint64_t range); 72 | 73 | //----------------------------------------------------------------------------- 74 | // 75 | // scsi_Unmap_Range( tDevice * device ) 76 | // 77 | //! \brief UNMAP a range of LBAs from a starting LBA until the end of the range. This will send the SCSI unmap 78 | //! command, possibly multiple times depending on the range. A SAT driver or interface may translate this to an ATA 79 | //! TRIM command, but that is beyond this library 80 | // 81 | // Entry: 82 | //! \param device - file descriptor 83 | //! \param startLBA - the LBA to start the unmap/trim at 84 | //! \param range - the range of LBAs to trim/unmap from the starting LBA 85 | //! 86 | // Exit: 87 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 88 | // 89 | //----------------------------------------------------------------------------- 90 | M_NONNULL_PARAM_LIST(1) 91 | M_PARAM_RO(1) 92 | OPENSEA_OPERATIONS_API eReturnValues scsi_Unmap_Range(tDevice* device, uint64_t startLBA, uint64_t range); 93 | 94 | //----------------------------------------------------------------------------- 95 | // 96 | // ata_Trim_Range( tDevice * device ) 97 | // 98 | //! \brief TRIM a range of LBAs from a starting LBA until the end of the range. This will send the ATA data set 99 | //! management command with the TRIM bit set, possibly multiple times depending on the range. 100 | // 101 | // Entry: 102 | //! \param device - file descriptor 103 | //! \param startLBA - the LBA to start the unmap/trim at 104 | //! \param range - the range of LBAs to trim/unmap from the starting LBA 105 | //! 106 | // Exit: 107 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 108 | // 109 | //----------------------------------------------------------------------------- 110 | M_NONNULL_PARAM_LIST(1) 111 | M_PARAM_RO(1) 112 | OPENSEA_OPERATIONS_API eReturnValues ata_Trim_Range(tDevice* device, uint64_t startLBA, uint64_t range); 113 | 114 | //----------------------------------------------------------------------------- 115 | // 116 | // nvme_Deallocate_Range( tDevice * device ) 117 | // 118 | //! \brief Deallocate a range of LBAs from a starting LBA until the end of the range. This will send the NVMe data 119 | //! set management command with the deallocate bit set. Currently, this will only issue a single command. NOTE: 120 | //! Lower level OS's might have limitations on this command. 121 | // 122 | // Entry: 123 | //! \param device - file descriptor 124 | //! \param startLBA - the LBA to start the unmap/trim at 125 | //! \param range - the range of LBAs to trim/unmap from the starting LBA 126 | //! 127 | // Exit: 128 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 129 | // 130 | //----------------------------------------------------------------------------- 131 | M_NONNULL_PARAM_LIST(1) 132 | M_PARAM_RO(1) 133 | OPENSEA_OPERATIONS_API eReturnValues nvme_Deallocate_Range(tDevice* device, uint64_t startLBA, uint64_t range); 134 | 135 | #if defined(__cplusplus) 136 | } 137 | #endif 138 | -------------------------------------------------------------------------------- /include/writesame.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file writesame.h 14 | // \brief This file defines the functions related to the writesame command on a drive 15 | 16 | #pragma once 17 | 18 | #include "operations_Common.h" 19 | 20 | #if defined(__cplusplus) 21 | extern "C" 22 | { 23 | #endif 24 | 25 | //----------------------------------------------------------------------------- 26 | // 27 | // is_Write_Same_Supported 28 | // 29 | //! \brief This function checks if the device supports write same. On SCSI, it returns the max number of logical 30 | //! blocks per command, which is reported in an inquiry page. On ATA, this will return MaxLBA - startLBA and whether 31 | //! SCT write same is supported or not 32 | // 33 | // Entry: 34 | //! \param[in] device = file descriptor 35 | //! \param[in] startingLBA = The LBA that you want to start write same at 36 | //! \param[in] requesedNumberOfLogicalBlocks = the number of logical blocks you want to erase starting at startLBA 37 | //! (also known as the range) \param[out] maxNumberOfLogicalBlocksPerCommand = this is the range the device 38 | //! supports in a single write same command (0 means that there is no limit) 39 | //! 40 | // Exit: 41 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 42 | // 43 | //----------------------------------------------------------------------------- 44 | M_NONNULL_PARAM_LIST(1) 45 | M_PARAM_RO(1) 46 | M_PARAM_WO(4) 47 | OPENSEA_OPERATIONS_API bool is_Write_Same_Supported(tDevice* device, 48 | uint64_t startingLBA, 49 | uint64_t requesedNumberOfLogicalBlocks, 50 | uint64_t* maxNumberOfLogicalBlocksPerCommand); 51 | 52 | //----------------------------------------------------------------------------- 53 | // 54 | // get_Writesame_Progress 55 | // 56 | //! \brief This function will get the write same progress for you. This only works on ATA drives (and it is 57 | //! calculated progress, not drive reported) since SCSI does not report and progress on write same 58 | // 59 | // Entry: 60 | //! \param[in] device = file descriptor 61 | //! \param[out] progress = pointer to a double that will hold the calculated progress percentage 62 | //! \param[out] writeSameInProgress = pointer to a bool telling whether a write same is in progress or not 63 | //! \param[in] startingLBA = This is the LBA that the write same was started at (used to calculate progress) 64 | //! \param[in] range = this is the range that the write same is being run on (used to calculate progress) 65 | //! 66 | // Exit: 67 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 68 | // 69 | //----------------------------------------------------------------------------- 70 | M_NONNULL_PARAM_LIST(1, 2, 3) 71 | M_PARAM_RO(1) 72 | M_PARAM_WO(2) 73 | M_PARAM_WO(3) 74 | OPENSEA_OPERATIONS_API eReturnValues get_Writesame_Progress(tDevice* device, 75 | double* progress, 76 | bool* writeSameInProgress, 77 | uint64_t startingLBA, 78 | uint64_t range); 79 | 80 | //----------------------------------------------------------------------------- 81 | // 82 | // writesame 83 | // 84 | //! \brief This function will get start a write same, and on ATA drives, it can also poll for progress 85 | // 86 | // Entry: 87 | //! \param[in] device = file descriptor 88 | //! \param[in] startingLba = This is the LBA that the write same will be started at 89 | //! \param[in] numberOfLogicalBlocks = this is the range that the write same is being run on 90 | //! \param[in] pollForProgress = boolean flag specifying whether or not to poll for progress 91 | //! \param[in] pattern = pointer to buffer to use for pattern. Should be 1 logical sector in size. May be 92 | //! M_NULLPTR to use default zero pattern \param[in] patternLength = lenght of the pattern memory 93 | //! 94 | // Exit: 95 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 96 | // 97 | //----------------------------------------------------------------------------- 98 | M_NONNULL_PARAM_LIST(1) 99 | M_PARAM_RO(1) 100 | M_NONNULL_IF_NONZERO_PARAM(5, 6) 101 | M_PARAM_RO_SIZE(5, 6) 102 | OPENSEA_OPERATIONS_API eReturnValues writesame(tDevice* device, 103 | uint64_t startingLba, 104 | uint64_t numberOfLogicalBlocks, 105 | bool pollForProgress, 106 | uint8_t* pattern, 107 | uint32_t patternLength); 108 | 109 | //----------------------------------------------------------------------------- 110 | // 111 | // show_Write_Same_Current_LBA 112 | // 113 | //! \brief This function will show the current LBA being processed by write same (cannot calculate percentage 114 | //! without start and range) 115 | // 116 | // Entry: 117 | //! \param[in] device = file descriptor 118 | //! 119 | // Exit: 120 | //! \return SUCCESS = good, !SUCCESS something went wrong see error codes 121 | // 122 | //----------------------------------------------------------------------------- 123 | M_NONNULL_PARAM_LIST(1) 124 | M_PARAM_RO(1) OPENSEA_OPERATIONS_API eReturnValues show_Write_Same_Current_LBA(tDevice* device); 125 | 126 | #if defined(__cplusplus) 127 | } 128 | #endif 129 | -------------------------------------------------------------------------------- /include/zoned_operations.h: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file zoned_operations.h 14 | // \brief This file defines various zoned device operations. 15 | 16 | #pragma once 17 | 18 | #include "common_public.h" 19 | #include "common_types.h" 20 | #include "memory_safety.h" 21 | #include "operations_Common.h" 22 | #include "type_conversion.h" 23 | 24 | #if defined(__cplusplus) 25 | extern "C" 26 | { 27 | #endif 28 | 29 | M_NONNULL_PARAM_LIST(1, 4) 30 | M_PARAM_RO(1) 31 | M_PARAM_WO(4) 32 | OPENSEA_OPERATIONS_API eReturnValues get_Number_Of_Zones(tDevice* device, 33 | eZoneReportingOptions reportingOptions, 34 | uint64_t startingLBA, 35 | uint32_t* numberOfMatchingZones); 36 | 37 | typedef enum eZoneTypeEnum 38 | { 39 | ZONE_TYPE_RESERVED = 0, 40 | ZONE_TYPE_CONVENTIONAL = 1, 41 | ZONE_TYPE_SEQUENTIAL_WRITE_REQUIRED = 2, 42 | ZONE_TYPE_SEQUENTIAL_WRITE_PREFERRED = 3, 43 | ZONE_TYPE_SEQUENTIAL_OR_BEFORE_REQUIRED = 4, 44 | ZONE_TYPE_GAP = 5, 45 | } eZoneType; 46 | 47 | typedef enum eZoneConditionEnum 48 | { 49 | ZONE_CONDITION_NOT_WRITE_POINTER = 0, 50 | ZONE_CONDITION_EMPTY = 1, 51 | ZONE_CONDITION_IMLICITLY_OPENED = 2, 52 | ZONE_CONDITION_EXPLICITYLE_OPENED = 3, 53 | ZONE_CONDITION_CLOSED = 4, 54 | ZONE_CONDITION_INACTIVE = 5, 55 | ZONE_CONDITION_READ_ONLY = 0xD, 56 | ZONE_CONDITION_FULL = 0xE, 57 | ZONE_CONDITION_OFFLINE = 0xF 58 | } eZoneCondition; 59 | 60 | typedef struct s_zoneDescriptor 61 | { 62 | bool descriptorValid; 63 | eZoneType zoneType; 64 | eZoneCondition zoneCondition; 65 | bool predictedUnRecErrBit; 66 | bool nonseqBit; 67 | bool resetBit; 68 | uint64_t zoneLength; 69 | uint64_t zoneStartingLBA; 70 | uint64_t writePointerLBA; 71 | } zoneDescriptor, *ptrZoneDescriptor; 72 | 73 | static M_INLINE void safe_free_zone_descriptor(zoneDescriptor** zd) 74 | { 75 | safe_free_core(M_REINTERPRET_CAST(void**, zd)); 76 | } 77 | 78 | M_NONNULL_PARAM_LIST(1, 5) 79 | M_PARAM_RO(1) 80 | M_PARAM_WO(5) 81 | OPENSEA_OPERATIONS_API eReturnValues get_Zone_Descriptors(tDevice* device, 82 | eZoneReportingOptions reportingOptions, 83 | uint64_t startingLBA, 84 | uint32_t numberOfZoneDescriptors, 85 | ptrZoneDescriptor zoneDescriptors); 86 | 87 | // eZoneReportingOptions reportingOptions is used to print the header saying which zones we are showing (all, some, 88 | // etc) 89 | M_NONNULL_PARAM_LIST(3) 90 | M_PARAM_RO(3) 91 | OPENSEA_OPERATIONS_API void print_Zone_Descriptors(eZoneReportingOptions reportingOptions, 92 | uint32_t numberOfZoneDescriptors, 93 | ptrZoneDescriptor zoneDescriptors); 94 | 95 | #if defined(__cplusplus) 96 | } 97 | #endif 98 | -------------------------------------------------------------------------------- /src/sas_phy.c: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MPL-2.0 2 | // 3 | // Do NOT modify or remove this copyright and license 4 | // 5 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 6 | // 7 | // This software is subject to the terms of the Mozilla Public 8 | // License, v. 2.0. If a copy of the MPL was not distributed with this 9 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 10 | // 11 | // ****************************************************************************************** 12 | // 13 | // \file sas_phy.c 14 | // \brief This file holds options to do things on a SAS phy. 15 | 16 | #include "bit_manip.h" 17 | #include "code_attributes.h" 18 | #include "common_types.h" 19 | #include "error_translation.h" 20 | #include "io_utils.h" 21 | #include "math_utils.h" 22 | #include "memory_safety.h" 23 | #include "precision_timer.h" 24 | #include "string_utils.h" 25 | #include "type_conversion.h" 26 | 27 | #include "sas_phy.h" 28 | 29 | bool is_SAS_Phy_Diagnostic_Page_Supported(tDevice* device) 30 | { 31 | DECLARE_ZERO_INIT_ARRAY(uint8_t, supportedDiagnosticPages, 50); 32 | if (SUCCESS == scsi_Send_Diagnostic(device, 0, 1, 0, 0, 0, 50, supportedDiagnosticPages, 50, 15) && 33 | SUCCESS == scsi_Receive_Diagnostic_Results(device, true, 0x00, 50, supportedDiagnosticPages, 15)) 34 | { 35 | // check that page 3F is supported. 36 | uint16_t pageLength = M_BytesTo2ByteValue(supportedDiagnosticPages[2], supportedDiagnosticPages[3]); 37 | for (uint32_t iter = UINT32_C(4); iter < C_CAST(uint32_t, pageLength + UINT16_C(4)) && iter < UINT16_C(50); 38 | ++iter) 39 | { 40 | switch (supportedDiagnosticPages[iter]) 41 | { 42 | case DIAG_PAGE_PROTOCOL_SPECIFIC: 43 | return true; 44 | default: 45 | break; 46 | } 47 | } 48 | } 49 | return false; 50 | } 51 | 52 | static eReturnValues build_SAS_SSP_Diagnostic_Page(uint8_t diagPage[32], 53 | uint8_t phyIdentifier, 54 | eSASPhyTestFunction testFunction, 55 | eSASPhyTestPattern pattern, 56 | bool sataTestFunction, 57 | eSASPhyTestFunctionSSC testFunctionSSC, 58 | eSASPhyPhysicalLinkRate linkRate, 59 | eSASPhyDwordControl dwordControl, 60 | uint64_t phyTestPatternDwords) 61 | { 62 | eReturnValues ret = SUCCESS; 63 | if (diagPage == M_NULLPTR) 64 | { 65 | return BAD_PARAMETER; 66 | } 67 | diagPage[0] = DIAG_PAGE_PROTOCOL_SPECIFIC; 68 | diagPage[1] = 0x06; // protocol identifier = 6 for SAS 69 | diagPage[2] = 0x00; 70 | diagPage[3] = 0x1C; // see SPL 71 | diagPage[4] = phyIdentifier; 72 | diagPage[5] = C_CAST(uint8_t, testFunction); 73 | diagPage[6] = C_CAST(uint8_t, pattern); 74 | // link rate 75 | diagPage[7] = C_CAST(uint8_t, linkRate); 76 | // phy test function ssc 77 | diagPage[7] |= C_CAST(uint8_t, testFunctionSSC << 4); 78 | // phy test function SATA 79 | if (sataTestFunction) 80 | { 81 | diagPage[7] |= BIT6; 82 | } 83 | diagPage[8] = RESERVED; 84 | diagPage[9] = RESERVED; 85 | diagPage[10] = RESERVED; 86 | diagPage[11] = C_CAST(uint8_t, dwordControl); 87 | diagPage[12] = M_Byte7(phyTestPatternDwords); 88 | diagPage[13] = M_Byte6(phyTestPatternDwords); 89 | diagPage[14] = M_Byte5(phyTestPatternDwords); 90 | diagPage[15] = M_Byte4(phyTestPatternDwords); 91 | diagPage[16] = M_Byte3(phyTestPatternDwords); 92 | diagPage[17] = M_Byte2(phyTestPatternDwords); 93 | diagPage[18] = M_Byte1(phyTestPatternDwords); 94 | diagPage[19] = M_Byte0(phyTestPatternDwords); 95 | diagPage[20] = RESERVED; 96 | diagPage[21] = RESERVED; 97 | diagPage[22] = RESERVED; 98 | diagPage[23] = RESERVED; 99 | diagPage[24] = RESERVED; 100 | diagPage[25] = RESERVED; 101 | diagPage[26] = RESERVED; 102 | diagPage[27] = RESERVED; 103 | diagPage[28] = RESERVED; 104 | diagPage[29] = RESERVED; 105 | diagPage[30] = RESERVED; 106 | diagPage[31] = RESERVED; 107 | return ret; 108 | } 109 | 110 | eReturnValues start_SAS_Test_Pattern(tDevice* device, 111 | uint8_t phyIdentifier, 112 | eSASPhyTestPattern pattern, 113 | bool sataTestFunction, 114 | eSASPhyTestFunctionSSC testFunctionSSC, 115 | eSASPhyPhysicalLinkRate linkRate, 116 | eSASPhyDwordControl dwordControl, 117 | uint64_t phyTestPatternDwords) 118 | { 119 | eReturnValues ret = SUCCESS; 120 | DECLARE_ZERO_INIT_ARRAY(uint8_t, sasDiagPage, 32); 121 | ret = 122 | build_SAS_SSP_Diagnostic_Page(sasDiagPage, phyIdentifier, SAS_PHY_FUNC_TRANSMIT_PATTERN, pattern, 123 | sataTestFunction, testFunctionSSC, linkRate, dwordControl, phyTestPatternDwords); 124 | if (ret == SUCCESS) 125 | { 126 | ret = scsi_Send_Diagnostic(device, 0, 1, 0, 0, 0, 32, sasDiagPage, 32, 15); 127 | } 128 | return ret; 129 | } 130 | 131 | eReturnValues stop_SAS_Test_Pattern(tDevice* device, uint8_t phyIdentifier, eSASPhyPhysicalLinkRate linkRate) 132 | { 133 | eReturnValues ret = SUCCESS; 134 | DECLARE_ZERO_INIT_ARRAY(uint8_t, sasDiagPage, 32); 135 | ret = build_SAS_SSP_Diagnostic_Page( 136 | sasDiagPage, phyIdentifier, SAS_PHY_FUNC_STOP, 0, false, 0, linkRate, 0, 137 | 0); // I'm assuming the stop command doesn't need to specify anything else that matches the running test. - TJE 138 | if (ret == SUCCESS) 139 | { 140 | ret = scsi_Send_Diagnostic(device, 0, 1, 0, 0, 0, 32, sasDiagPage, 32, 15); 141 | } 142 | return ret; 143 | } 144 | -------------------------------------------------------------------------------- /update-version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | : ' 3 | // 4 | // Do NOT modify or remove this copyright and license 5 | // 6 | // Copyright (c) 2012-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved 7 | // 8 | // This software is subject to the terms of the Mozilla Public 9 | // License, v. 2.0. If a copy of the MPL was not distributed with this 10 | // file, You can obtain one at http://mozilla.org/MPL/2.0/. 11 | // 12 | // ****************************************************************************************** 13 | // 14 | // \file update-version.h 15 | // \brief Update the version number & check in code. 16 | // 17 | ' 18 | VERSION_FILE=include/opensea_operation_version.h 19 | BASE=`awk '$2 == "OPENSEA_OPERATION_PATCH_VERSION" {print $1 " " $2}' "$VERSION_FILE"` 20 | CURRENT_VERSION=`awk '$2 == "OPENSEA_OPERATION_PATCH_VERSION" {print $3}' "$VERSION_FILE"` 21 | NEXT_VER=$((CURRENT_VERSION + 1)) 22 | echo $BASE $CURRENT_VERSION 23 | echo $BASE $NEXT_VER 24 | sed -i "/._PATCH_VERSION\s*/s/$CURRENT_VERSION/$NEXT_VER/" "$VERSION_FILE" 25 | 26 | MAKE_FILE=Make/gcc/Makefile 27 | sed -i "/PATCH=*/s/$CURRENT_VERSION/$NEXT_VER/" "$MAKE_FILE" 28 | --------------------------------------------------------------------------------