diff options
Diffstat (limited to 'drivers/ieee1394')
-rw-r--r-- | drivers/ieee1394/sbp2.c | 131 | ||||
-rw-r--r-- | drivers/ieee1394/sbp2.h | 4 |
2 files changed, 3 insertions, 132 deletions
diff --git a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c index 00c7b958361a..aa941025072e 100644 --- a/drivers/ieee1394/sbp2.c +++ b/drivers/ieee1394/sbp2.c | |||
@@ -1070,7 +1070,7 @@ static int sbp2_handle_physdma_read(struct hpsb_host *host, int nodeid, quadlet_ | |||
1070 | static __inline__ int sbp2_command_conversion_device_type(u8 device_type) | 1070 | static __inline__ int sbp2_command_conversion_device_type(u8 device_type) |
1071 | { | 1071 | { |
1072 | return (((device_type == TYPE_DISK) || | 1072 | return (((device_type == TYPE_DISK) || |
1073 | (device_type == TYPE_SDAD) || | 1073 | (device_type == TYPE_RBC) || |
1074 | (device_type == TYPE_ROM)) ? 1:0); | 1074 | (device_type == TYPE_ROM)) ? 1:0); |
1075 | } | 1075 | } |
1076 | 1076 | ||
@@ -2111,102 +2111,6 @@ static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, | |||
2111 | */ | 2111 | */ |
2112 | static void sbp2_check_sbp2_command(struct scsi_id_instance_data *scsi_id, unchar *cmd) | 2112 | static void sbp2_check_sbp2_command(struct scsi_id_instance_data *scsi_id, unchar *cmd) |
2113 | { | 2113 | { |
2114 | unchar new_cmd[16]; | ||
2115 | u8 device_type = SBP2_DEVICE_TYPE (scsi_id->sbp2_device_type_and_lun); | ||
2116 | |||
2117 | SBP2_DEBUG("sbp2_check_sbp2_command"); | ||
2118 | |||
2119 | switch (*cmd) { | ||
2120 | |||
2121 | case READ_6: | ||
2122 | |||
2123 | if (sbp2_command_conversion_device_type(device_type)) { | ||
2124 | |||
2125 | SBP2_DEBUG("Convert READ_6 to READ_10"); | ||
2126 | |||
2127 | /* | ||
2128 | * Need to turn read_6 into read_10 | ||
2129 | */ | ||
2130 | new_cmd[0] = 0x28; | ||
2131 | new_cmd[1] = (cmd[1] & 0xe0); | ||
2132 | new_cmd[2] = 0x0; | ||
2133 | new_cmd[3] = (cmd[1] & 0x1f); | ||
2134 | new_cmd[4] = cmd[2]; | ||
2135 | new_cmd[5] = cmd[3]; | ||
2136 | new_cmd[6] = 0x0; | ||
2137 | new_cmd[7] = 0x0; | ||
2138 | new_cmd[8] = cmd[4]; | ||
2139 | new_cmd[9] = cmd[5]; | ||
2140 | |||
2141 | memcpy(cmd, new_cmd, 10); | ||
2142 | |||
2143 | } | ||
2144 | |||
2145 | break; | ||
2146 | |||
2147 | case WRITE_6: | ||
2148 | |||
2149 | if (sbp2_command_conversion_device_type(device_type)) { | ||
2150 | |||
2151 | SBP2_DEBUG("Convert WRITE_6 to WRITE_10"); | ||
2152 | |||
2153 | /* | ||
2154 | * Need to turn write_6 into write_10 | ||
2155 | */ | ||
2156 | new_cmd[0] = 0x2a; | ||
2157 | new_cmd[1] = (cmd[1] & 0xe0); | ||
2158 | new_cmd[2] = 0x0; | ||
2159 | new_cmd[3] = (cmd[1] & 0x1f); | ||
2160 | new_cmd[4] = cmd[2]; | ||
2161 | new_cmd[5] = cmd[3]; | ||
2162 | new_cmd[6] = 0x0; | ||
2163 | new_cmd[7] = 0x0; | ||
2164 | new_cmd[8] = cmd[4]; | ||
2165 | new_cmd[9] = cmd[5]; | ||
2166 | |||
2167 | memcpy(cmd, new_cmd, 10); | ||
2168 | |||
2169 | } | ||
2170 | |||
2171 | break; | ||
2172 | |||
2173 | case MODE_SENSE: | ||
2174 | |||
2175 | if (sbp2_command_conversion_device_type(device_type)) { | ||
2176 | |||
2177 | SBP2_DEBUG("Convert MODE_SENSE_6 to MODE_SENSE_10"); | ||
2178 | |||
2179 | /* | ||
2180 | * Need to turn mode_sense_6 into mode_sense_10 | ||
2181 | */ | ||
2182 | new_cmd[0] = 0x5a; | ||
2183 | new_cmd[1] = cmd[1]; | ||
2184 | new_cmd[2] = cmd[2]; | ||
2185 | new_cmd[3] = 0x0; | ||
2186 | new_cmd[4] = 0x0; | ||
2187 | new_cmd[5] = 0x0; | ||
2188 | new_cmd[6] = 0x0; | ||
2189 | new_cmd[7] = 0x0; | ||
2190 | new_cmd[8] = cmd[4]; | ||
2191 | new_cmd[9] = cmd[5]; | ||
2192 | |||
2193 | memcpy(cmd, new_cmd, 10); | ||
2194 | |||
2195 | } | ||
2196 | |||
2197 | break; | ||
2198 | |||
2199 | case MODE_SELECT: | ||
2200 | |||
2201 | /* | ||
2202 | * TODO. Probably need to change mode select to 10 byte version | ||
2203 | */ | ||
2204 | |||
2205 | default: | ||
2206 | break; | ||
2207 | } | ||
2208 | |||
2209 | return; | ||
2210 | } | 2114 | } |
2211 | 2115 | ||
2212 | /* | 2116 | /* |
@@ -2247,7 +2151,6 @@ static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, | |||
2247 | struct scsi_cmnd *SCpnt) | 2151 | struct scsi_cmnd *SCpnt) |
2248 | { | 2152 | { |
2249 | u8 *scsi_buf = SCpnt->request_buffer; | 2153 | u8 *scsi_buf = SCpnt->request_buffer; |
2250 | u8 device_type = SBP2_DEVICE_TYPE (scsi_id->sbp2_device_type_and_lun); | ||
2251 | 2154 | ||
2252 | SBP2_DEBUG("sbp2_check_sbp2_response"); | 2155 | SBP2_DEBUG("sbp2_check_sbp2_response"); |
2253 | 2156 | ||
@@ -2272,14 +2175,6 @@ static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, | |||
2272 | } | 2175 | } |
2273 | 2176 | ||
2274 | /* | 2177 | /* |
2275 | * Check for Simple Direct Access Device and change it to TYPE_DISK | ||
2276 | */ | ||
2277 | if ((scsi_buf[0] & 0x1f) == TYPE_SDAD) { | ||
2278 | SBP2_DEBUG("Changing TYPE_SDAD to TYPE_DISK"); | ||
2279 | scsi_buf[0] &= 0xe0; | ||
2280 | } | ||
2281 | |||
2282 | /* | ||
2283 | * Fix ansi revision and response data format | 2178 | * Fix ansi revision and response data format |
2284 | */ | 2179 | */ |
2285 | scsi_buf[2] |= 2; | 2180 | scsi_buf[2] |= 2; |
@@ -2287,27 +2182,6 @@ static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, | |||
2287 | 2182 | ||
2288 | break; | 2183 | break; |
2289 | 2184 | ||
2290 | case MODE_SENSE: | ||
2291 | |||
2292 | if (sbp2_command_conversion_device_type(device_type)) { | ||
2293 | |||
2294 | SBP2_DEBUG("Modify mode sense response (10 byte version)"); | ||
2295 | |||
2296 | scsi_buf[0] = scsi_buf[1]; /* Mode data length */ | ||
2297 | scsi_buf[1] = scsi_buf[2]; /* Medium type */ | ||
2298 | scsi_buf[2] = scsi_buf[3]; /* Device specific parameter */ | ||
2299 | scsi_buf[3] = scsi_buf[7]; /* Block descriptor length */ | ||
2300 | memcpy(scsi_buf + 4, scsi_buf + 8, scsi_buf[0]); | ||
2301 | } | ||
2302 | |||
2303 | break; | ||
2304 | |||
2305 | case MODE_SELECT: | ||
2306 | |||
2307 | /* | ||
2308 | * TODO. Probably need to change mode select to 10 byte version | ||
2309 | */ | ||
2310 | |||
2311 | default: | 2185 | default: |
2312 | break; | 2186 | break; |
2313 | } | 2187 | } |
@@ -2690,7 +2564,8 @@ static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id, | |||
2690 | static int sbp2scsi_slave_configure (struct scsi_device *sdev) | 2564 | static int sbp2scsi_slave_configure (struct scsi_device *sdev) |
2691 | { | 2565 | { |
2692 | blk_queue_dma_alignment(sdev->request_queue, (512 - 1)); | 2566 | blk_queue_dma_alignment(sdev->request_queue, (512 - 1)); |
2693 | 2567 | sdev->use_10_for_rw = 1; | |
2568 | sdev->use_10_for_ms = 1; | ||
2694 | return 0; | 2569 | return 0; |
2695 | } | 2570 | } |
2696 | 2571 | ||
diff --git a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h index a84b039a05b9..cd425be74841 100644 --- a/drivers/ieee1394/sbp2.h +++ b/drivers/ieee1394/sbp2.h | |||
@@ -266,10 +266,6 @@ struct sbp2_status_block { | |||
266 | #define SBP2_MAX_UDS_PER_NODE 16 /* Maximum scsi devices per node */ | 266 | #define SBP2_MAX_UDS_PER_NODE 16 /* Maximum scsi devices per node */ |
267 | #define SBP2_MAX_SECTORS 255 /* Max sectors supported */ | 267 | #define SBP2_MAX_SECTORS 255 /* Max sectors supported */ |
268 | 268 | ||
269 | #ifndef TYPE_SDAD | ||
270 | #define TYPE_SDAD 0x0e /* simplified direct access device */ | ||
271 | #endif | ||
272 | |||
273 | /* | 269 | /* |
274 | * SCSI direction table... | 270 | * SCSI direction table... |
275 | * (now used as a back-up in case the direction passed down from above is "unknown") | 271 | * (now used as a back-up in case the direction passed down from above is "unknown") |