diff options
author | Boaz Harrosh <bharrosh@panasas.com> | 2009-01-25 10:09:40 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-03-12 13:58:08 -0400 |
commit | c6572c983726fe3f3bb5f07e9afe3a9b8e402d1b (patch) | |
tree | e5d1b19779db4d94dded752c2f8a940d9843ff5b /include/scsi/osd_initiator.h | |
parent | ae30c994a4bb70510fdcb9e7223805bb2a8bc9ee (diff) |
[SCSI] libosd: OSD version 2 Support
Add support for OSD2 at run time. It is now possible to run with
both OSDv1 and OSDv2 targets at the same time. The actual detection
should be preformed by the security manager, as the version is encoded
in the capability structure.
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Reviewed-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'include/scsi/osd_initiator.h')
-rw-r--r-- | include/scsi/osd_initiator.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h index e84dc7aa5e34..8482777416d8 100644 --- a/include/scsi/osd_initiator.h +++ b/include/scsi/osd_initiator.h | |||
@@ -21,6 +21,23 @@ | |||
21 | 21 | ||
22 | /* Note: "NI" in comments below means "Not Implemented yet" */ | 22 | /* Note: "NI" in comments below means "Not Implemented yet" */ |
23 | 23 | ||
24 | /* Configure of code: | ||
25 | * #undef if you *don't* want OSD v1 support in runtime. | ||
26 | * If #defined the initiator will dynamically configure to encode OSD v1 | ||
27 | * CDB's if the target is detected to be OSD v1 only. | ||
28 | * OSD v2 only commands, options, and attributes will be ignored if target | ||
29 | * is v1 only. | ||
30 | * If #defined will result in bigger/slower code (OK Slower maybe not) | ||
31 | * Q: Should this be CONFIG_SCSI_OSD_VER1_SUPPORT and set from Kconfig? | ||
32 | */ | ||
33 | #define OSD_VER1_SUPPORT y | ||
34 | |||
35 | enum osd_std_version { | ||
36 | OSD_VER_NONE = 0, | ||
37 | OSD_VER1 = 1, | ||
38 | OSD_VER2 = 2, | ||
39 | }; | ||
40 | |||
24 | /* | 41 | /* |
25 | * Object-based Storage Device. | 42 | * Object-based Storage Device. |
26 | * This object represents an OSD device. | 43 | * This object represents an OSD device. |
@@ -31,6 +48,10 @@ | |||
31 | struct osd_dev { | 48 | struct osd_dev { |
32 | struct scsi_device *scsi_device; | 49 | struct scsi_device *scsi_device; |
33 | unsigned def_timeout; | 50 | unsigned def_timeout; |
51 | |||
52 | #ifdef OSD_VER1_SUPPORT | ||
53 | enum osd_std_version version; | ||
54 | #endif | ||
34 | }; | 55 | }; |
35 | 56 | ||
36 | /* Retrieve/return osd_dev(s) for use by Kernel clients */ | 57 | /* Retrieve/return osd_dev(s) for use by Kernel clients */ |
@@ -46,6 +67,14 @@ void osduld_unregister_test(unsigned ioctl); | |||
46 | void osd_dev_init(struct osd_dev *od, struct scsi_device *scsi_device); | 67 | void osd_dev_init(struct osd_dev *od, struct scsi_device *scsi_device); |
47 | void osd_dev_fini(struct osd_dev *od); | 68 | void osd_dev_fini(struct osd_dev *od); |
48 | 69 | ||
70 | /* we might want to use function vector in the future */ | ||
71 | static inline void osd_dev_set_ver(struct osd_dev *od, enum osd_std_version v) | ||
72 | { | ||
73 | #ifdef OSD_VER1_SUPPORT | ||
74 | od->version = v; | ||
75 | #endif | ||
76 | } | ||
77 | |||
49 | struct osd_request; | 78 | struct osd_request; |
50 | typedef void (osd_req_done_fn)(struct osd_request *or, void *private); | 79 | typedef void (osd_req_done_fn)(struct osd_request *or, void *private); |
51 | 80 | ||
@@ -82,6 +111,16 @@ struct osd_request { | |||
82 | int async_error; | 111 | int async_error; |
83 | }; | 112 | }; |
84 | 113 | ||
114 | /* OSD Version control */ | ||
115 | static inline bool osd_req_is_ver1(struct osd_request *or) | ||
116 | { | ||
117 | #ifdef OSD_VER1_SUPPORT | ||
118 | return or->osd_dev->version == OSD_VER1; | ||
119 | #else | ||
120 | return false; | ||
121 | #endif | ||
122 | } | ||
123 | |||
85 | /* | 124 | /* |
86 | * How to use the osd library: | 125 | * How to use the osd library: |
87 | * | 126 | * |