Changes in uspace/drv/bus/usb/usbmast/scsi_ms.c [2aceec5:38c9505] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/scsi_ms.c
r2aceec5 r38c9505 46 46 #include <scsi/sbc.h> 47 47 #include <scsi/spc.h> 48 #include "cmd w.h"49 #include " bo_trans.h"48 #include "cmds.h" 49 #include "mast.h" 50 50 #include "scsi_ms.h" 51 #include "usbmast.h"52 51 53 52 /** Get string representation for SCSI peripheral device type. … … 63 62 /** Perform SCSI Inquiry command on USB mass storage device. 64 63 * 65 * @param mfun Mass storage function66 * @param inquiry_result Where to store parsed inquiry result 67 * @return Error code 68 */ 69 int usbmast_inquiry(usb mast_fun_t *mfun, usbmast_inquiry_data_t *inq_res)64 * @param dev USB device. 65 * @param inquiry_result Where to store parsed inquiry result. 66 * @return Error code. 67 */ 68 int usbmast_inquiry(usb_device_t *dev, usbmast_inquiry_data_t *inq_res) 70 69 { 71 70 scsi_std_inquiry_data_t inq_data; … … 78 77 cdb.alloc_len = host2uint16_t_be(sizeof(inq_data)); 79 78 80 rc = usb_massstor_data_in( mfun, 0xDEADBEEF, (uint8_t *) &cdb,79 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 81 80 sizeof(cdb), &inq_data, sizeof(inq_data), &response_len); 82 81 83 82 if (rc != EOK) { 84 83 usb_log_error("Inquiry failed, device %s: %s.\n", 85 mfun->mdev->ddf_dev->name, str_error(rc));84 dev->ddf_dev->name, str_error(rc)); 86 85 return rc; 87 86 } … … 119 118 /** Perform SCSI Request Sense command on USB mass storage device. 120 119 * 121 * @param mfun Mass storage function120 * @param dev USB device 122 121 * @param buf Destination buffer 123 122 * @param size Size of @a buf … … 125 124 * @return Error code. 126 125 */ 127 int usbmast_request_sense(usb mast_fun_t *mfun, void *buf, size_t size)126 int usbmast_request_sense(usb_device_t *dev, void *buf, size_t size) 128 127 { 129 128 scsi_cdb_request_sense_t cdb; … … 135 134 cdb.alloc_len = min(size, SCSI_SENSE_DATA_MAX_SIZE); 136 135 137 rc = usb_massstor_data_in( mfun, 0xDEADBEEF, (uint8_t *) &cdb,136 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 138 137 sizeof(cdb), buf, size, &data_len); 139 138 140 139 if (rc != EOK) { 141 140 usb_log_error("Request Sense failed, device %s: %s.\n", 142 mfun->mdev->ddf_dev->name, str_error(rc));141 dev->ddf_dev->name, str_error(rc)); 143 142 return rc; 144 143 } … … 155 154 /** Perform SCSI Read Capacity command on USB mass storage device. 156 155 * 157 * @param mfun Mass storage function158 * @param nblocks Output, number of blocks 159 * @param block_size Output, block size in bytes 160 * 161 * @return Error code. 162 */ 163 int usbmast_read_capacity(usb mast_fun_t *mfun, uint32_t *nblocks,156 * @param dev USB device. 157 * @param nblocks Output, number of blocks. 158 * @param block_size Output, block size in bytes. 159 * 160 * @return Error code. 161 */ 162 int usbmast_read_capacity(usb_device_t *dev, uint32_t *nblocks, 164 163 uint32_t *block_size) 165 164 { … … 172 171 cdb.op_code = SCSI_CMD_READ_CAPACITY_10; 173 172 174 rc = usb_massstor_data_in( mfun, 0xDEADBEEF, (uint8_t *) &cdb,173 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 175 174 sizeof(cdb), &data, sizeof(data), &data_len); 176 175 177 176 if (rc != EOK) { 178 177 usb_log_error("Read Capacity (10) failed, device %s: %s.\n", 179 mfun->mdev->ddf_dev->name, str_error(rc));178 dev->ddf_dev->name, str_error(rc)); 180 179 return rc; 181 180 } … … 195 194 /** Perform SCSI Read command on USB mass storage device. 196 195 * 197 * @param mfun Mass storage function 198 * @param ba Address of first block 199 * @param nblocks Number of blocks to read 200 * 201 * @return Error code 202 */ 203 int usbmast_read(usbmast_fun_t *mfun, uint64_t ba, size_t nblocks, void *buf) 196 * @param dev USB device. 197 * @param ba Address of first block. 198 * @param nblocks Number of blocks to read. 199 * @param bsize Block size. 200 * 201 * @return Error code. 202 */ 203 int usbmast_read(usb_device_t *dev, uint64_t ba, size_t nblocks, size_t bsize, 204 void *buf) 204 205 { 205 206 scsi_cdb_read_12_t cdb; … … 212 213 return ELIMIT; 213 214 214 if ((uint64_t)nblocks * mfun->block_size > UINT32_MAX)215 if ((uint64_t)nblocks * bsize > UINT32_MAX) 215 216 return ELIMIT; 216 217 … … 220 221 cdb.xfer_len = host2uint32_t_be(nblocks); 221 222 222 rc = usb_massstor_data_in( mfun, 0xDEADBEEF, (uint8_t *) &cdb,223 sizeof(cdb), buf, nblocks * mfun->block_size, &data_len);223 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 224 sizeof(cdb), buf, nblocks * bsize, &data_len); 224 225 225 226 if (rc != EOK) { 226 227 usb_log_error("Read (12) failed, device %s: %s.\n", 227 mfun->mdev->ddf_dev->name, str_error(rc));228 return rc; 229 } 230 231 if (data_len < nblocks * mfun->block_size) {228 dev->ddf_dev->name, str_error(rc)); 229 return rc; 230 } 231 232 if (data_len < nblocks * bsize) { 232 233 usb_log_error("SCSI Read response too short (%zu).\n", 233 234 data_len); … … 240 241 /** Perform SCSI Write command on USB mass storage device. 241 242 * 242 * @param mfun Mass storage function243 * @param dev USB device 243 244 * @param ba Address of first block 244 245 * @param nblocks Number of blocks to read 246 * @param bsize Block size 245 247 * @param data Data to write 246 248 * 247 249 * @return Error code 248 250 */ 249 int usbmast_write(usb mast_fun_t *mfun, uint64_t ba, size_t nblocks,251 int usbmast_write(usb_device_t *dev, uint64_t ba, size_t nblocks, size_t bsize, 250 252 const void *data) 251 253 { … … 254 256 int rc; 255 257 258 /* XXX Need softstate to store block size. */ 259 256 260 if (ba > UINT32_MAX) 257 261 return ELIMIT; 258 262 259 if ((uint64_t)nblocks * mfun->block_size > UINT32_MAX)263 if ((uint64_t)nblocks * bsize > UINT32_MAX) 260 264 return ELIMIT; 261 265 … … 265 269 cdb.xfer_len = host2uint32_t_be(nblocks); 266 270 267 rc = usb_massstor_data_out( mfun, 0xDEADBEEF, (uint8_t *) &cdb,268 sizeof(cdb), data, nblocks * mfun->block_size, &sent_len);271 rc = usb_massstor_data_out(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 272 sizeof(cdb), data, nblocks * bsize, &sent_len); 269 273 270 274 if (rc != EOK) { 271 275 usb_log_error("Write (12) failed, device %s: %s.\n", 272 mfun->mdev->ddf_dev->name, str_error(rc));273 return rc; 274 } 275 276 if (sent_len < nblocks * mfun->block_size) {276 dev->ddf_dev->name, str_error(rc)); 277 return rc; 278 } 279 280 if (sent_len < nblocks * bsize) { 277 281 usb_log_error("SCSI Write not all bytes transferred (%zu).\n", 278 282 sent_len);
Note:
See TracChangeset
for help on using the changeset viewer.