Changeset 71fa44c in mainline
- Timestamp:
- 2011-07-03T11:27:37Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9e34750
- Parents:
- 6430ac6
- Location:
- uspace
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmast/main.c
r6430ac6 r71fa44c 126 126 lun_count); 127 127 128 uint32_t nblocks, block_size; 129 130 rc = usbmast_read_capacity(dev, &nblocks, &block_size); 131 if (rc != EOK) { 132 usb_log_warning("Failed to read capacity, device `%s': %s.\n", 133 dev->ddf_dev->name, str_error(rc)); 134 return EOK; 135 } 136 137 usb_log_info("Read Capacity: nblocks=%" PRIu32 ", " 138 "block_size=%" PRIu32 "\n", nblocks, block_size); 139 128 140 return EOK; 129 141 } -
uspace/drv/bus/usb/usbmast/scsi_ms.c
r6430ac6 r71fa44c 1 1 /* 2 2 * Copyright (c) 2011 Vojtech Horky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 35 36 */ 36 37 #include <bitops.h> 38 #include <byteorder.h> 39 #include <inttypes.h> 37 40 #include <usb/dev/driver.h> 38 41 #include <usb/debug.h> 39 #include <usb/classes/classes.h>40 #include <usb/classes/massstor.h>41 42 #include <errno.h> 42 43 #include <str_error.h> 43 44 #include <str.h> 44 #include < ctype.h>45 #include <scsi/sbc.h> 45 46 #include <scsi/spc.h> 46 47 #include "cmds.h" … … 58 59 } 59 60 60 /** Perform SCSI I NQUIRYcommand on USB mass storage device.61 /** Perform SCSI Inquiry command on USB mass storage device. 61 62 * 62 63 * @param dev USB device. … … 68 69 scsi_std_inquiry_data_t inq_data; 69 70 size_t response_len; 70 scsi_cdb_inquiry_t inquiry = { 71 .op_code = SCSI_CMD_INQUIRY, 72 .evpd = 0, 73 .page_code = 0, 74 .alloc_len = host2uint16_t_be(sizeof(inq_data)), 75 .control = 0 76 }; 77 71 scsi_cdb_inquiry_t cdb; 78 72 int rc; 79 73 80 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &inquiry, 81 sizeof(inquiry), &inq_data, sizeof(inq_data), &response_len); 74 memset(&cdb, 0, sizeof(cdb)); 75 cdb.op_code = SCSI_CMD_INQUIRY; 76 cdb.alloc_len = host2uint16_t_be(sizeof(inq_data)); 77 78 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 79 sizeof(cdb), &inq_data, sizeof(inq_data), &response_len); 82 80 83 81 if (rc != EOK) { 84 usb_log_error(" Failed to probe device %s using%s: %s.\n",85 dev->ddf_dev->name, "SCSI:INQUIRY",str_error(rc));82 usb_log_error("Inquiry failed, device %s: %s.\n", 83 dev->ddf_dev->name, str_error(rc)); 86 84 return rc; 87 85 } 88 86 89 87 if (response_len < SCSI_STD_INQUIRY_DATA_MIN_SIZE) { 90 usb_log_error("The SCSI inquiry response is too short.\n"); 88 usb_log_error("SCSI Inquiry response too short (%zu).\n", 89 response_len); 91 90 return EIO; 92 91 } … … 116 115 } 117 116 117 /** Perform SCSI Read Capacity command on USB mass storage device. 118 * 119 * @param dev USB device. 120 * @param nblocks Output, number of blocks. 121 * @param block_size Output, block size in bytes. 122 * 123 * @return Error code. 124 */ 125 int usbmast_read_capacity(usb_device_t *dev, uint32_t *nblocks, 126 uint32_t *block_size) 127 { 128 scsi_cdb_read_capacity_10_t cdb; 129 scsi_read_capacity_10_data_t data; 130 size_t data_len; 131 int rc; 132 133 memset(&cdb, 0, sizeof(cdb)); 134 cdb.op_code = SCSI_CMD_READ_CAPACITY_10; 135 136 rc = usb_massstor_data_in(dev, 0xDEADBEEF, 0, (uint8_t *) &cdb, 137 sizeof(cdb), &data, sizeof(data), &data_len); 138 139 if (rc != EOK) { 140 usb_log_error("Read Capacity (10) failed, device %s: %s.\n", 141 dev->ddf_dev->name, str_error(rc)); 142 return rc; 143 } 144 145 if (data_len < sizeof(data)) { 146 usb_log_error("SCSI Read Capacity response too short (%zu).\n", 147 data_len); 148 return EIO; 149 } 150 151 *nblocks = uint32_t_be2host(data.last_lba) + 1; 152 *block_size = uint32_t_be2host(data.block_size); 153 154 return EOK; 155 } 156 118 157 /** 119 158 * @} -
uspace/drv/bus/usb/usbmast/scsi_ms.h
r6430ac6 r71fa44c 59 59 } usbmast_inquiry_data_t; 60 60 61 int usbmast_inquiry(usb_device_t *, usbmast_inquiry_data_t *); 62 const char *usbmast_scsi_dev_type_str(unsigned); 61 extern int usbmast_inquiry(usb_device_t *, usbmast_inquiry_data_t *); 62 extern int usbmast_read_capacity(usb_device_t *dev, uint32_t *, uint32_t *); 63 extern const char *usbmast_scsi_dev_type_str(unsigned); 63 64 64 65 #endif -
uspace/lib/scsi/include/scsi/sbc.h
r6430ac6 r71fa44c 113 113 /** Size of block in bytes */ 114 114 uint32_t block_size; 115 } scsi_read_capacity_10_data ;115 } scsi_read_capacity_10_data_t; 116 116 117 117 /** SCSI Write (12) command */
Note:
See TracChangeset
for help on using the changeset viewer.