diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-09-21 18:29:36 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.localdomain> | 2007-10-12 14:49:26 -0400 |
commit | d3849d512fb0ca1e369e3efcaec910a949f55f62 (patch) | |
tree | 52b79dd6cd4fe8835ad46b35083edf803c5180b5 /drivers/scsi/ibmvscsi/iseries_vscsi.c | |
parent | 5307b1e8b050f309901acc9c6121061206a70ba5 (diff) |
[SCSI] Fix ibmvscsi client for multiplatform iSeries+pSeries kernel
If you build a multiplatform kernel for iSeries and pSeries, with
ibmvscsic support, the resulting client doesn't work on iSeries.
This fixes that, using the appropriate low-level operations
for the machine detected at runtime.
[jejb: fixed up rejections around the srp transport patch]
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Acked by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/ibmvscsi/iseries_vscsi.c')
-rw-r--r-- | drivers/scsi/ibmvscsi/iseries_vscsi.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/drivers/scsi/ibmvscsi/iseries_vscsi.c b/drivers/scsi/ibmvscsi/iseries_vscsi.c index 6aeb5f003c3c..0775fdee5fa8 100644 --- a/drivers/scsi/ibmvscsi/iseries_vscsi.c +++ b/drivers/scsi/ibmvscsi/iseries_vscsi.c | |||
@@ -53,7 +53,7 @@ struct srp_lp_event { | |||
53 | /** | 53 | /** |
54 | * standard interface for handling logical partition events. | 54 | * standard interface for handling logical partition events. |
55 | */ | 55 | */ |
56 | static void ibmvscsi_handle_event(struct HvLpEvent *lpevt) | 56 | static void iseriesvscsi_handle_event(struct HvLpEvent *lpevt) |
57 | { | 57 | { |
58 | struct srp_lp_event *evt = (struct srp_lp_event *)lpevt; | 58 | struct srp_lp_event *evt = (struct srp_lp_event *)lpevt; |
59 | 59 | ||
@@ -74,9 +74,9 @@ static void ibmvscsi_handle_event(struct HvLpEvent *lpevt) | |||
74 | /* ------------------------------------------------------------ | 74 | /* ------------------------------------------------------------ |
75 | * Routines for driver initialization | 75 | * Routines for driver initialization |
76 | */ | 76 | */ |
77 | int ibmvscsi_init_crq_queue(struct crq_queue *queue, | 77 | static int iseriesvscsi_init_crq_queue(struct crq_queue *queue, |
78 | struct ibmvscsi_host_data *hostdata, | 78 | struct ibmvscsi_host_data *hostdata, |
79 | int max_requests) | 79 | int max_requests) |
80 | { | 80 | { |
81 | int rc; | 81 | int rc; |
82 | 82 | ||
@@ -88,7 +88,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
88 | goto viopath_open_failed; | 88 | goto viopath_open_failed; |
89 | } | 89 | } |
90 | 90 | ||
91 | rc = vio_setHandler(viomajorsubtype_scsi, ibmvscsi_handle_event); | 91 | rc = vio_setHandler(viomajorsubtype_scsi, iseriesvscsi_handle_event); |
92 | if (rc < 0) { | 92 | if (rc < 0) { |
93 | printk("vio_setHandler failed with rc %d in open_event_path\n", | 93 | printk("vio_setHandler failed with rc %d in open_event_path\n", |
94 | rc); | 94 | rc); |
@@ -102,9 +102,9 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
102 | return -1; | 102 | return -1; |
103 | } | 103 | } |
104 | 104 | ||
105 | void ibmvscsi_release_crq_queue(struct crq_queue *queue, | 105 | static void iseriesvscsi_release_crq_queue(struct crq_queue *queue, |
106 | struct ibmvscsi_host_data *hostdata, | 106 | struct ibmvscsi_host_data *hostdata, |
107 | int max_requests) | 107 | int max_requests) |
108 | { | 108 | { |
109 | vio_clearHandler(viomajorsubtype_scsi); | 109 | vio_clearHandler(viomajorsubtype_scsi); |
110 | viopath_close(viopath_hostLp, viomajorsubtype_scsi, max_requests); | 110 | viopath_close(viopath_hostLp, viomajorsubtype_scsi, max_requests); |
@@ -117,8 +117,8 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue, | |||
117 | * | 117 | * |
118 | * no-op for iSeries | 118 | * no-op for iSeries |
119 | */ | 119 | */ |
120 | int ibmvscsi_reset_crq_queue(struct crq_queue *queue, | 120 | static int iseriesvscsi_reset_crq_queue(struct crq_queue *queue, |
121 | struct ibmvscsi_host_data *hostdata) | 121 | struct ibmvscsi_host_data *hostdata) |
122 | { | 122 | { |
123 | return 0; | 123 | return 0; |
124 | } | 124 | } |
@@ -130,19 +130,20 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue, | |||
130 | * | 130 | * |
131 | * no-op for iSeries | 131 | * no-op for iSeries |
132 | */ | 132 | */ |
133 | int ibmvscsi_reenable_crq_queue(struct crq_queue *queue, | 133 | static int iseriesvscsi_reenable_crq_queue(struct crq_queue *queue, |
134 | struct ibmvscsi_host_data *hostdata) | 134 | struct ibmvscsi_host_data *hostdata) |
135 | { | 135 | { |
136 | return 0; | 136 | return 0; |
137 | } | 137 | } |
138 | 138 | ||
139 | /** | 139 | /** |
140 | * ibmvscsi_send_crq: - Send a CRQ | 140 | * iseriesvscsi_send_crq: - Send a CRQ |
141 | * @hostdata: the adapter | 141 | * @hostdata: the adapter |
142 | * @word1: the first 64 bits of the data | 142 | * @word1: the first 64 bits of the data |
143 | * @word2: the second 64 bits of the data | 143 | * @word2: the second 64 bits of the data |
144 | */ | 144 | */ |
145 | int ibmvscsi_send_crq(struct ibmvscsi_host_data *hostdata, u64 word1, u64 word2) | 145 | static int iseriesvscsi_send_crq(struct ibmvscsi_host_data *hostdata, |
146 | u64 word1, u64 word2) | ||
146 | { | 147 | { |
147 | single_host_data = hostdata; | 148 | single_host_data = hostdata; |
148 | return HvCallEvent_signalLpEventFast(viopath_hostLp, | 149 | return HvCallEvent_signalLpEventFast(viopath_hostLp, |
@@ -156,3 +157,11 @@ int ibmvscsi_send_crq(struct ibmvscsi_host_data *hostdata, u64 word1, u64 word2) | |||
156 | VIOVERSION << 16, word1, word2, 0, | 157 | VIOVERSION << 16, word1, word2, 0, |
157 | 0); | 158 | 0); |
158 | } | 159 | } |
160 | |||
161 | struct ibmvscsi_ops iseriesvscsi_ops = { | ||
162 | .init_crq_queue = iseriesvscsi_init_crq_queue, | ||
163 | .release_crq_queue = iseriesvscsi_release_crq_queue, | ||
164 | .reset_crq_queue = iseriesvscsi_reset_crq_queue, | ||
165 | .reenable_crq_queue = iseriesvscsi_reenable_crq_queue, | ||
166 | .send_crq = iseriesvscsi_send_crq, | ||
167 | }; | ||