1/* 2 * Copyright (c) 1998-2014 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#ifndef _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_ 25#define _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_ 26 27#include <IOKit/storage/IOStorageControllerCharacteristics.h> 28 29/* 30 * Protocol Characteristics - Characteristics defined for protocols. 31 */ 32 33/*! 34@defined kIOPropertyProtocolCharacteristicsKey 35@discussion This key is used to define Protocol Characteristics for a particular 36protocol and it has an associated dictionary which lists the 37protocol characteristics. 38 39Requirement: Mandatory 40 41Example: 42<pre> 43@textblock 44<dict> 45 <key>Protocol Characteristics</key> 46 <dict> 47 <key>Physical Interconnect</key> 48 <string>ATAPI</string> 49 <key>Physical Interconnect Location</key> 50 <string>Internal</string> 51 </dict> 52</dict> 53@/textblock 54</pre> 55*/ 56#define kIOPropertyProtocolCharacteristicsKey "Protocol Characteristics" 57 58 59/*! 60@defined kIOPropertySCSIInitiatorIdentifierKey 61@discussion An identifier that will uniquely identify this SCSI Initiator for the 62SCSI Domain. 63 64Requirement: Mandatory for SCSI Parallel Interface, SAS, 65and Fibre Channel Interface. 66 67Example: 68<pre> 69@textblock 70<dict> 71 <key>Protocol Characteristics</key> 72 <dict> 73 <key>Physical Interconnect</key> 74 <string>SCSI Parallel Interface</string> 75 <key>Physical Interconnect Location</key> 76 <string>Internal</string> 77 <key>SCSI Initiator Identifier</key> 78 <integer>7</integer> 79 </dict> 80</dict> 81@/textblock 82</pre> 83*/ 84#define kIOPropertySCSIInitiatorIdentifierKey "SCSI Initiator Identifier" 85 86 87/*! 88@defined kIOPropertySCSIDomainIdentifierKey 89@discussion An identifier that will uniquely identify this SCSI Domain for the 90Physical Interconnect type. This identifier is only guaranteed to be unique for 91any given Physical Interconnect and is not guaranteed to be the same across 92restarts or shutdowns. 93 94Requirement: Mandatory for SCSI Parallel Interface and Fibre Channel Interface. 95 96Example: 97<pre> 98@textblock 99<dict> 100 <key>Protocol Characteristics</key> 101 <dict> 102 <key>Physical Interconnect</key> 103 <string>SCSI Parallel Interface</string> 104 <key>Physical Interconnect Location</key> 105 <string>Internal</string> 106 <key>SCSI Domain Identifier</key> 107 <integer>0</integer> 108 </dict> 109</dict> 110@/textblock 111</pre> 112*/ 113#define kIOPropertySCSIDomainIdentifierKey "SCSI Domain Identifier" 114 115 116/*! 117@defined kIOPropertySCSITargetIdentifierKey 118@discussion This is the SCSI Target Identifier for a given SCSI Target Device. 119 120Requirement: Mandatory for SCSI Parallel Interface and Fibre Channel Interface. 121 122Example: 123<pre> 124@textblock 125<dict> 126 <key>Protocol Characteristics</key> 127 <dict> 128 <key>Physical Interconnect</key> 129 <string>SCSI Parallel Interface</string> 130 <key>Physical Interconnect Location</key> 131 <string>Internal</string> 132 <key>SCSI Target Identifier</key> 133 <integer>3</integer> 134 </dict> 135</dict> 136@/textblock 137</pre> 138*/ 139#define kIOPropertySCSITargetIdentifierKey "SCSI Target Identifier" 140 141 142/*! 143@defined kIOPropertySCSILogicalUnitNumberKey 144@discussion This key is the SCSI Logical Unit Number for the device server 145controlled by the driver. 146 147Requirement: Mandatory for SCSI Parallel Interface, SAS, and Fibre Channel Interface. 148 149Example: 150<pre> 151@textblock 152<dict> 153 <key>Protocol Characteristics</key> 154 <dict> 155 <key>Physical Interconnect</key> 156 <string>SCSI Parallel Interface</string> 157 <key>Physical Interconnect Location</key> 158 <string>Internal</string> 159 <key>SCSI Logical Unit Number</key> 160 <integer>2</integer> 161 </dict> 162</dict> 163@/textblock 164</pre> 165*/ 166#define kIOPropertySCSILogicalUnitNumberKey "SCSI Logical Unit Number" 167 168 169/*! 170@defined kIOPropertyPhysicalInterconnectTypeKey 171@discussion This key is used to define the Physical Interconnect to which 172a device is attached. 173 174Requirement: Mandatory. 175 176Example: 177<pre> 178@textblock 179<dict> 180 <key>Protocol Characteristics</key> 181 <dict> 182 <key>Physical Interconnect</key> 183 <string>SCSI Parallel Interface</string> 184 <key>Physical Interconnect Location</key> 185 <string>Internal</string> 186 </dict> 187</dict> 188@/textblock 189</pre> 190*/ 191#define kIOPropertyPhysicalInterconnectTypeKey "Physical Interconnect" 192 193 194/*! 195@defined kIOPropertyPhysicalInterconnectLocationKey 196@discussion This key is used to define the Physical Interconnect 197Location. 198 199Requirement: Mandatory. 200 201Example: 202<pre> 203@textblock 204<dict> 205 <key>Protocol Characteristics</key> 206 <dict> 207 <key>Physical Interconnect</key> 208 <string>SCSI Parallel Interface</string> 209 <key>Physical Interconnect Location</key> 210 <string>Internal</string> 211 </dict> 212</dict> 213@/textblock 214</pre> 215*/ 216#define kIOPropertyPhysicalInterconnectLocationKey "Physical Interconnect Location" 217 218 219/*! 220@defined kIOPropertySCSIProtocolMultiInitKey 221@discussion This protocol characteristics key is used to inform the system 222that the protocol supports having multiple devices that act as initiators. 223 224Requirement: Optional. 225 226Example: 227<pre> 228@textblock 229<dict> 230 <key>Protocol Characteristics</key> 231 <dict> 232 <key>Physical Interconnect</key> 233 <string>Fibre Channel Interface</string> 234 <key>Physical Interconnect Location</key> 235 <string>External</string> 236 <key>Multiple Initiators</key> 237 <string>True</string> 238 </dict> 239</dict> 240@/textblock 241</pre> 242*/ 243#define kIOPropertySCSIProtocolMultiInitKey "Multiple Initiators" 244 245 246/* 247 * Values - Values for the characteristics defined above. 248 */ 249 250 251/*! 252@defined kIOPropertyInternalKey 253@discussion This key defines the value of Internal for the key 254kIOPropertyPhysicalInterconnectLocationKey. If the device is 255connected to an internal bus, this key should be set. 256 257Example: 258<pre> 259@textblock 260<dict> 261 <key>Protocol Characteristics</key> 262 <dict> 263 <key>Physical Interconnect</key> 264 <string>ATA</string> 265 <key>Physical Interconnect Location</key> 266 <string>Internal</string> 267 </dict> 268</dict> 269@/textblock 270</pre> 271*/ 272#define kIOPropertyInternalKey "Internal" 273 274 275/*! 276@defined kIOPropertyExternalKey 277@discussion This key defines the value of External for the key 278kIOPropertyPhysicalInterconnectLocationKey. If the device is 279connected to an external bus, this key should be set. 280 281Example: 282<pre> 283@textblock 284<dict> 285 <key>Protocol Characteristics</key> 286 <dict> 287 <key>Physical Interconnect</key> 288 <string>Fibre Channel Interface</string> 289 <key>Physical Interconnect Location</key> 290 <string>External</string> 291 </dict> 292</dict> 293@/textblock 294</pre> 295*/ 296#define kIOPropertyExternalKey "External" 297 298 299/*! 300@defined kIOPropertyInternalExternalKey 301@discussion This key defines the value of Internal/External for the key 302kIOPropertyPhysicalInterconnectLocationKey. If the device is connected 303to a bus and it is indeterminate whether it is internal or external, 304this key should be set. 305 306Example: 307<pre> 308@textblock 309<dict> 310 <key>Protocol Characteristics</key> 311 <dict> 312 <key>Physical Interconnect</key> 313 <string>SCSI Parallel Interface</string> 314 <key>Physical Interconnect Location</key> 315 <string>Internal/External</string> 316 </dict> 317</dict> 318@/textblock 319</pre> 320*/ 321#define kIOPropertyInternalExternalKey "Internal/External" 322 323 324/*! 325@defined kIOPropertyInterconnectFileKey 326@discussion This key defines the value of File for the key 327kIOPropertyPhysicalInterconnectLocationKey. If the device is a file 328that is being represented as a storage device, this key should be set. 329 330NOTE: This key should only be used when the Physical Interconnect is set to 331Virtual Interface. 332 333Example: 334<pre> 335@textblock 336<dict> 337 <key>Protocol Characteristics</key> 338 <dict> 339 <key>Physical Interconnect</key> 340 <string>Virtual Interface</string> 341 <key>Physical Interconnect Location</key> 342 <string>File</string> 343 </dict> 344</dict> 345@/textblock 346</pre> 347*/ 348#define kIOPropertyInterconnectFileKey "File" 349 350 351/*! 352@defined kIOPropertyInterconnectRAMKey 353@discussion This key defines the value of RAM for the key 354kIOPropertyPhysicalInterconnectLocationKey. If the device is system memory 355that is being represented as a storage device, this key should be set. 356 357NOTE: This key should only be used when the Physical Interconnect is set to 358Virtual Interface. 359 360Example: 361<pre> 362@textblock 363<dict> 364 <key>Protocol Characteristics</key> 365 <dict> 366 <key>Physical Interconnect</key> 367 <string>Virtual Interface</string> 368 <key>Physical Interconnect Location</key> 369 <string>RAM</string> 370 </dict> 371</dict> 372@/textblock 373</pre> 374*/ 375#define kIOPropertyInterconnectRAMKey "RAM" 376 377 378/*! 379@defined kIOPropertyPhysicalInterconnectTypeATA 380@discussion This key defines the value of ATA for the key 381kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 382to an ATA bus, this key should be set. 383 384Example: 385<pre> 386@textblock 387<dict> 388 <key>Protocol Characteristics</key> 389 <dict> 390 <key>Physical Interconnect</key> 391 <string>ATA</string> 392 <key>Physical Interconnect Location</key> 393 <string>Internal</string> 394 </dict> 395</dict> 396@/textblock 397</pre> 398*/ 399#define kIOPropertyPhysicalInterconnectTypeATA "ATA" 400 401 402/*! 403@defined kIOPropertyPhysicalInterconnectTypeSerialATA 404@discussion This key defines the value of SATA for the key 405kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 406to a SATA bus, this key should be set. 407 408Example: 409<pre> 410@textblock 411<dict> 412 <key>Protocol Characteristics</key> 413 <dict> 414 <key>Physical Interconnect</key> 415 <string>SATA</string> 416 <key>Physical Interconnect Location</key> 417 <string>Internal</string> 418 </dict> 419</dict> 420@/textblock 421</pre> 422*/ 423#define kIOPropertyPhysicalInterconnectTypeSerialATA "SATA" 424 425 426/*! 427@defined kIOPropertyPhysicalInterconnectTypeSerialAttachedSCSI 428@discussion This key defines the value of SAS for the key 429kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 430to a SAS bus, this key should be set. 431 432Example: 433<pre> 434@textblock 435<dict> 436 <key>Protocol Characteristics</key> 437 <dict> 438 <key>Physical Interconnect</key> 439 <string>SAS</string> 440 <key>Physical Interconnect Location</key> 441 <string>External</string> 442 </dict> 443</dict> 444@/textblock 445</pre> 446*/ 447#define kIOPropertyPhysicalInterconnectTypeSerialAttachedSCSI "SAS" 448 449 450/*! 451@defined kIOPropertyPhysicalInterconnectTypeATAPI 452@discussion This key defines the value of ATAPI for the key 453kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 454to an ATA bus and follows the ATAPI command specification, this key 455should be set. 456 457Example: 458<pre> 459@textblock 460<dict> 461 <key>Protocol Characteristics</key> 462 <dict> 463 <key>Physical Interconnect</key> 464 <string>ATAPI</string> 465 <key>Physical Interconnect Location</key> 466 <string>Internal</string> 467 </dict> 468</dict> 469@/textblock 470</pre> 471*/ 472#define kIOPropertyPhysicalInterconnectTypeATAPI "ATAPI" 473 474 475/*! 476@defined kIOPropertyPhysicalInterconnectTypeUSB 477@discussion This key defines the value of USB for the key 478kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 479to a USB port, this key should be set. 480 481Example: 482<pre> 483@textblock 484<dict> 485 <key>Protocol Characteristics</key> 486 <dict> 487 <key>Physical Interconnect</key> 488 <string>USB</string> 489 <key>Physical Interconnect Location</key> 490 <string>External</string> 491 </dict> 492</dict> 493@/textblock 494</pre> 495*/ 496#define kIOPropertyPhysicalInterconnectTypeUSB "USB" 497 498 499/*! 500@defined kIOPropertyPhysicalInterconnectTypeFireWire 501@discussion This key defines the value of USB for the key 502kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 503to a FireWire port, this key should be set. 504 505Example: 506<pre> 507@textblock 508<dict> 509 <key>Protocol Characteristics</key> 510 <dict> 511 <key>Physical Interconnect</key> 512 <string>FireWire</string> 513 <key>Physical Interconnect Location</key> 514 <string>External</string> 515 </dict> 516</dict> 517@/textblock 518</pre> 519*/ 520#define kIOPropertyPhysicalInterconnectTypeFireWire "FireWire" 521 522 523/*! 524 @defined kIOPropertyPhysicalInterconnectTypeSecureDigital 525 @discussion This key defines the value of Secure Digital for the key 526 kIOPropertyPhysicalInterconnectTypeSecureDigital. If the device is 527 connected to a Secure Digital port and follows the Secure Digital 528 specification, this key should be set. 529 530 Example: 531 <pre> 532 @textblock 533 <dict> 534 <key>Protocol Characteristics</key> 535 <dict> 536 <key>Physical Interconnect</key> 537 <string>Secure Digital</string> 538 <key>Physical Interconnect Location</key> 539 <string>Internal</string> 540 </dict> 541 </dict> 542 @/textblock 543 </pre> 544 */ 545#define kIOPropertyPhysicalInterconnectTypeSecureDigital "Secure Digital" 546 547 548/*! 549@defined kIOPropertyPhysicalInterconnectTypeSCSIParallel 550@discussion This key defines the value of SCSI Parallel Interface for the key 551kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 552to a SCSI Parallel port, this key should be set. 553 554Example: 555<pre> 556@textblock 557<dict> 558 <key>Protocol Characteristics</key> 559 <dict> 560 <key>Physical Interconnect</key> 561 <string>SCSI Parallel Interface</string> 562 <key>Physical Interconnect Location</key> 563 <string>External</string> 564 </dict> 565</dict> 566@/textblock 567</pre> 568*/ 569#define kIOPropertyPhysicalInterconnectTypeSCSIParallel "SCSI Parallel Interface" 570 571 572/*! 573@defined kIOPropertyPhysicalInterconnectTypeFibreChannel 574@discussion This key defines the value of Fibre Channel Interface for the key 575kIOPropertyPhysicalInterconnectTypeKey. If the device is connected 576to a Fibre Channel port, this key should be set. 577 578Example: 579<pre> 580@textblock 581<dict> 582 <key>Protocol Characteristics</key> 583 <dict> 584 <key>Physical Interconnect</key> 585 <string>Fibre Channel Interface</string> 586 <key>Physical Interconnect Location</key> 587 <string>External</string> 588 </dict> 589</dict> 590@/textblock 591</pre> 592*/ 593#define kIOPropertyPhysicalInterconnectTypeFibreChannel "Fibre Channel Interface" 594 595 596/*! 597@defined kIOPropertyPhysicalInterconnectTypeVirtual 598@discussion This key defines the value of Virtual Interface for the key 599kIOPropertyPhysicalInterconnectTypeVirtual. If the device is being made to look 600like a storage device, but is not such in actuality, such as a File or RAM, this 601key should be set. 602 603Example: 604<pre> 605@textblock 606<dict> 607 <key>Protocol Characteristics</key> 608 <dict> 609 <key>Physical Interconnect</key> 610 <string>Virtual Interface</string> 611 <key>Physical Interconnect Location</key> 612 <string>File</string> 613 </dict> 614</dict> 615@/textblock 616</pre> 617*/ 618#define kIOPropertyPhysicalInterconnectTypeVirtual "Virtual Interface" 619 620 621/*! 622@defined kIOPropertyPhysicalInterconnectTypePCI 623@discussion This key defines the value of PCI for the key 624kIOPropertyPhysicalInterconnectTypePCI. If the device is connected 625via PCI, this key should be set. 626 627Example: 628<pre> 629@textblock 630<dict> 631 <key>Protocol Characteristics</key> 632 <dict> 633 <key>Physical Interconnect</key> 634 <string>PCI</string> 635 <key>Physical Interconnect Location</key> 636 <string>Internal</string> 637 </dict> 638</dict> 639@/textblock 640</pre> 641*/ 642#define kIOPropertyPhysicalInterconnectTypePCI "PCI" 643 644 645#endif /* _IOKIT_IO_STORAGE_PROTOCOL_CHARACTERISTICS_H_ */ 646