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