1 package org.jscsi.target.scsi.modeSense;
2
3
4 import java.util.HashMap;
5 import java.util.Map;
6
7
8
9
10
11
12
13
14
15 public enum ModePageCode {
16 APPLICATION_TAG_MODE_PAGE(0x0a, 0x02), BACKGROUND_CONTROL_MODE_PAGE(0x1c, 0x01), CACHING_MODE_PAGE(0x08, 0x00), CONTROL_EXTENSION_MODE_PAGE(0x0a, 0x01), CONTROL_MODE_PAGE(0x0a, 0x00), DISCONNECT_RECONNECT_MODE_PAGE(0x02, 0x00), ENCLOSURE_SERVICES_MANAGEMENT_MODE_PAGE(0x14, 0x00),
17
18
19
20
21
22
23
24
25
26
27 INFORMATIONAL_EXCEPTIONS_CONTROL_MODE_PAGE(0x1c, 0x00), LOGICAL_BLOCK_PROVISIONING_MODE_PAGE(0x1c, 0x02), POWER_CONDITION_MODE_PAGE(0x1a, 0x00), PROTOCOL_SPECIFIC_LUN_MODE_PAGE(0x18, 0x00), PROTOCOL_SPECIFIC_PORT_MODE_PAGE(0x19, 0x00), READ_WRITE_ERROR_RECOVERY_MODE_PAGE(0x01, 0x00), RETURN_ALL_MODE_PAGES_AND_SUBPAGES(0x3f, 0xff), RETURN_ALL_MODE_PAGES_ONLY(0x3f, 0x00), VERIFY_ERROR_RECOVERY_MODE_PAGE(0x07, 0x00), XOR_CONTROL_MODE_PAGE(0x10, 0x00),
28
29 APPLICATION_TAG_MODE_PAGE_SUBPAGES(0x0a, 0xff), BACKGROUND_CONTROL_MODE_PAGE_SUBPAGES(0x1c, 0xff), CACHING_MODE_PAGE_SUBPAGES(0x08, 0xff), CONTROL_EXTENSION_MODE_PAGE_SUBPAGES(0x0a, 0xff), CONTROL_MODE_PAGE_SUBPAGES(0x0a, 0xff), DISCONNECT_RECONNECT_MODE_PAGE_SUBPAGES(0x02, 0xff), ENCLOSURE_SERVICES_MANAGEMENT_MODE_PAGE_SUBPAGES(0x14, 0xff),
30
31
32
33
34
35
36
37
38
39
40 INFORMATIONAL_EXCEPTIONS_CONTROL_MODE_PAGE_SUBPAGES(0x1c, 0xff), LOGICAL_BLOCK_PROVISIONING_MODE_PAGE_SUBPAGES(0x1c, 0xff), POWER_CONDITION_MODE_PAGE_SUBPAGES(0x1a, 0xff), PROTOCOL_SPECIFIC_LUN_MODE_PAGE_SUBPAGES(0x18, 0xff), PROTOCOL_SPECIFIC_PORT_MODE_PAGE_SUBPAGES(0x19, 0xff), READ_WRITE_ERROR_RECOVERY_MODE_PAGE_SUBPAGES(0x01, 0xff), VERIFY_ERROR_RECOVERY_MODE_PAGE_SUBPAGES(0x07, 0xff), XOR_CONTROL_MODE_PAGE_SUBPAGES(0x10, 0xff);
41
42
43
44
45
46
47 private static Map<Integer , ModePageCode> map = new HashMap<Integer , ModePageCode>();
48 static {
49 final ModePageCode[] modePages = values();
50 for (ModePageCode mp : modePages)
51 map.put(joinCodes(mp.pageCode, mp.subpageCode),
52 mp);
53 }
54
55
56
57
58
59
60
61
62
63 public static ModePageCode getModePage (final int pageCode, final int subpageCode) {
64 return map.get(joinCodes(pageCode, subpageCode));
65 }
66
67
68
69
70 private final int pageCode;
71
72
73
74
75 private final int subpageCode;
76
77
78
79
80
81
82
83 private ModePageCode (final int pageCode, final int subpageCode) {
84 this.pageCode = pageCode;
85 this.subpageCode = subpageCode;
86 }
87
88
89
90
91
92
93
94
95 private static int joinCodes (final int pageCode, final int subpageCode) {
96 return (pageCode << 8) | subpageCode;
97 }
98 }