diff options
Diffstat (limited to 'drivers/staging/keucr/scsiglue.c')
-rw-r--r-- | drivers/staging/keucr/scsiglue.c | 192 |
1 files changed, 112 insertions, 80 deletions
diff --git a/drivers/staging/keucr/scsiglue.c b/drivers/staging/keucr/scsiglue.c index da4f42af383..135f7f21dfd 100644 --- a/drivers/staging/keucr/scsiglue.c +++ b/drivers/staging/keucr/scsiglue.c @@ -1,3 +1,5 @@ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include <linux/slab.h> #include <linux/module.h> #include <linux/mutex.h> @@ -13,19 +15,23 @@ #include "transport.h" /* Host functions */ -//----- host_info() --------------------- -static const char* host_info(struct Scsi_Host *host) +/* + * host_info() + */ +static const char *host_info(struct Scsi_Host *host) { - //printk("scsiglue --- host_info\n"); + /* pr_info("scsiglue --- host_info\n"); */ return "SCSI emulation for USB Mass Storage devices"; } -//----- slave_alloc() --------------------- +/* + * slave_alloc() + */ static int slave_alloc(struct scsi_device *sdev) { struct us_data *us = host_to_us(sdev->host); - //printk("scsiglue --- slave_alloc\n"); + /* pr_info("scsiglue --- slave_alloc\n"); */ sdev->inquiry_len = 36; blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1)); @@ -36,14 +42,15 @@ static int slave_alloc(struct scsi_device *sdev) return 0; } -//----- slave_configure() --------------------- +/* + * slave_configure() + */ static int slave_configure(struct scsi_device *sdev) { struct us_data *us = host_to_us(sdev->host); - //printk("scsiglue --- slave_configure\n"); - if (us->fflags & (US_FL_MAX_SECTORS_64 | US_FL_MAX_SECTORS_MIN)) - { + /* pr_info("scsiglue --- slave_configure\n"); */ + if (us->fflags & (US_FL_MAX_SECTORS_64 | US_FL_MAX_SECTORS_MIN)) { unsigned int max_sectors = 64; if (us->fflags & US_FL_MAX_SECTORS_MIN) @@ -53,9 +60,9 @@ static int slave_configure(struct scsi_device *sdev) max_sectors); } - if (sdev->type == TYPE_DISK) - { - if (us->subclass != USB_SC_SCSI && us->subclass != USB_SC_CYP_ATACB) + if (sdev->type == TYPE_DISK) { + if (us->subclass != USB_SC_SCSI && + us->subclass != USB_SC_CYP_ATACB) sdev->use_10_for_ms = 1; sdev->use_192_bytes_for_3f = 1; if (us->fflags & US_FL_NO_WP_DETECT) @@ -70,13 +77,12 @@ static int slave_configure(struct scsi_device *sdev) sdev->retry_hwerror = 1; sdev->allow_restart = 1; sdev->last_sector_bug = 1; - } - else - { + } else { sdev->use_10_for_ms = 1; } - if ((us->protocol == USB_PR_CB || us->protocol == USB_PR_CBI) && sdev->scsi_level == SCSI_UNKNOWN) + if ((us->protocol == USB_PR_CB || us->protocol == USB_PR_CBI) && + sdev->scsi_level == SCSI_UNKNOWN) us->max_lun = 0; if (us->fflags & US_FL_NOT_LOCKABLE) @@ -86,24 +92,26 @@ static int slave_configure(struct scsi_device *sdev) } /* This is always called with scsi_lock(host) held */ -//----- queuecommand() --------------------- -static int queuecommand_lck(struct scsi_cmnd *srb, void (*done)(struct scsi_cmnd *)) +/* + * queuecommand() + */ +static int queuecommand_lck(struct scsi_cmnd *srb, + void (*done)(struct scsi_cmnd *)) { struct us_data *us = host_to_us(srb->device->host); - //printk("scsiglue --- queuecommand\n"); + /* pr_info("scsiglue --- queuecommand\n"); */ /* check for state-transition errors */ - if (us->srb != NULL) - { - printk("Error in %s: us->srb = %p\n", __FUNCTION__, us->srb); + if (us->srb != NULL) { + /* pr_info("Error in %s: us->srb = %p\n" + __FUNCTION__, us->srb); */ return SCSI_MLQUEUE_HOST_BUSY; } /* fail the command if we are disconnecting */ - if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) - { - printk("Fail command during disconnect\n"); + if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) { + pr_info("Fail command during disconnect\n"); srb->result = DID_NO_CONNECT << 16; done(srb); return 0; @@ -124,24 +132,24 @@ static DEF_SCSI_QCMD(queuecommand) ***********************************************************************/ /* Command timeout and abort */ -//----- command_abort() --------------------- +/* + * command_abort() + */ static int command_abort(struct scsi_cmnd *srb) { struct us_data *us = host_to_us(srb->device->host); - //printk("scsiglue --- command_abort\n"); + /* pr_info("scsiglue --- command_abort\n"); */ scsi_lock(us_to_host(us)); - if (us->srb != srb) - { + if (us->srb != srb) { scsi_unlock(us_to_host(us)); printk ("-- nothing to abort\n"); return FAILED; } set_bit(US_FLIDX_TIMED_OUT, &us->dflags); - if (!test_bit(US_FLIDX_RESETTING, &us->dflags)) - { + if (!test_bit(US_FLIDX_RESETTING, &us->dflags)) { set_bit(US_FLIDX_ABORTING, &us->dflags); usb_stor_stop_transport(us); } @@ -152,14 +160,18 @@ static int command_abort(struct scsi_cmnd *srb) return SUCCESS; } -/* This invokes the transport reset mechanism to reset the state of the device */ -//----- device_reset() --------------------- +/* This invokes the transport reset mechanism to reset the state of the + * device. + */ +/* + * device_reset() + */ static int device_reset(struct scsi_cmnd *srb) { struct us_data *us = host_to_us(srb->device->host); int result; - //printk("scsiglue --- device_reset\n"); + /* pr_info("scsiglue --- device_reset\n"); */ /* lock the device pointers and do the reset */ mutex_lock(&(us->dev_mutex)); @@ -169,38 +181,43 @@ static int device_reset(struct scsi_cmnd *srb) return result < 0 ? FAILED : SUCCESS; } -//----- bus_reset() --------------------- +/* + * bus_reset() + */ static int bus_reset(struct scsi_cmnd *srb) { struct us_data *us = host_to_us(srb->device->host); int result; - //printk("scsiglue --- bus_reset\n"); + /* pr_info("scsiglue --- bus_reset\n"); */ result = usb_stor_port_reset(us); return result < 0 ? FAILED : SUCCESS; } -//----- usb_stor_report_device_reset() --------------------- +/* + * usb_stor_report_device_reset() + */ void usb_stor_report_device_reset(struct us_data *us) { int i; struct Scsi_Host *host = us_to_host(us); - //printk("scsiglue --- usb_stor_report_device_reset\n"); + /* pr_info("scsiglue --- usb_stor_report_device_reset\n"); */ scsi_report_device_reset(host, 0, 0); - if (us->fflags & US_FL_SCM_MULT_TARG) - { + if (us->fflags & US_FL_SCM_MULT_TARG) { for (i = 1; i < host->max_id; ++i) scsi_report_device_reset(host, 0, i); } } -//----- usb_stor_report_bus_reset() --------------------- +/* + * usb_stor_report_bus_reset() + */ void usb_stor_report_bus_reset(struct us_data *us) { struct Scsi_Host *host = us_to_host(us); - //printk("scsiglue --- usb_stor_report_bus_reset\n"); + /* pr_info("scsiglue --- usb_stor_report_bus_reset\n"); */ scsi_lock(host); scsi_report_bus_reset(host, 0); scsi_unlock(host); @@ -215,14 +232,17 @@ void usb_stor_report_bus_reset(struct us_data *us) #define SPRINTF(args...) \ do { if (pos < buffer+length) pos += sprintf(pos, ## args); } while (0) -//----- proc_info() --------------------- -static int proc_info (struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int inout) +/* + * proc_info() + */ +static int proc_info(struct Scsi_Host *host, char *buffer, char **start, + off_t offset, int length, int inout) { struct us_data *us = host_to_us(host); char *pos = buffer; const char *string; - //printk("scsiglue --- proc_info\n"); + /* pr_info("scsiglue --- proc_info\n"); */ if (inout) return length; @@ -255,8 +275,7 @@ static int proc_info (struct Scsi_Host *host, char *buffer, char **start, off_t SPRINTF(" Transport: %s\n", us->transport_name); /* show the device flags */ - if (pos < buffer + length) - { + if (pos < buffer + length) { pos += sprintf(pos, " Quirks:"); #define US_FLAG(name, value) \ @@ -271,11 +290,11 @@ US_DO_ALL_FLAGS *start = buffer + offset; if ((pos - buffer) < offset) - return (0); + return 0; else if ((pos - buffer - offset) < length) - return (pos - buffer - offset); + return pos - buffer - offset; else - return (length); + return length; } /*********************************************************************** @@ -283,29 +302,35 @@ US_DO_ALL_FLAGS ***********************************************************************/ /* Output routine for the sysfs max_sectors file */ -//----- show_max_sectors() --------------------- -static ssize_t show_max_sectors(struct device *dev, struct device_attribute *attr, char *buf) +/* + * show_max_sectors() + */ +static ssize_t show_max_sectors(struct device *dev, + struct device_attribute *attr, char *buf) { struct scsi_device *sdev = to_scsi_device(dev); - //printk("scsiglue --- ssize_t show_max_sectors\n"); + /* pr_info("scsiglue --- ssize_t show_max_sectors\n"); */ return sprintf(buf, "%u\n", queue_max_sectors(sdev->request_queue)); } /* Input routine for the sysfs max_sectors file */ -//----- store_max_sectors() --------------------- -static ssize_t store_max_sectors(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +/* + * store_max_sectors() + */ +static ssize_t store_max_sectors(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) { struct scsi_device *sdev = to_scsi_device(dev); unsigned short ms; - //printk("scsiglue --- ssize_t store_max_sectors\n"); - if (sscanf(buf, "%hu", &ms) > 0 && ms <= SCSI_DEFAULT_MAX_SECTORS) - { + /* pr_info("scsiglue --- ssize_t store_max_sectors\n"); */ + if (sscanf(buf, "%hu", &ms) > 0 && ms <= SCSI_DEFAULT_MAX_SECTORS) { blk_queue_max_hw_sectors(sdev->request_queue, ms); return strlen(buf); } - return -EINVAL; + return -EINVAL; } static DEVICE_ATTR(max_sectors, S_IRUGO | S_IWUSR, show_max_sectors, store_max_sectors); @@ -313,7 +338,9 @@ static struct device_attribute *sysfs_device_attr_list[] = {&dev_attr_max_sector /* this defines our host template, with which we'll allocate hosts */ -//----- usb_stor_host_template() --------------------- +/* + * usb_stor_host_template() + */ struct scsi_host_template usb_stor_host_template = { /* basic userland interface stuff */ .name = "eucr-storage", @@ -376,42 +403,41 @@ unsigned char usb_stor_sense_invalidCDB[18] = { * Scatter-gather transfer buffer access routines ***********************************************************************/ -//----- usb_stor_access_xfer_buf() --------------------- +/* + * usb_stor_access_xfer_buf() + */ unsigned int usb_stor_access_xfer_buf(struct us_data *us, unsigned char *buffer, unsigned int buflen, struct scsi_cmnd *srb, struct scatterlist **sgptr, unsigned int *offset, enum xfer_buf_dir dir) { unsigned int cnt; - //printk("transport --- usb_stor_access_xfer_buf\n"); + /* pr_info("transport --- usb_stor_access_xfer_buf\n"); */ struct scatterlist *sg = *sgptr; if (!sg) sg = scsi_sglist(srb); cnt = 0; - while (cnt < buflen && sg) - { - struct page *page = sg_page(sg) + ((sg->offset + *offset) >> PAGE_SHIFT); + while (cnt < buflen && sg) { + struct page *page = sg_page(sg) + + ((sg->offset + *offset) >> PAGE_SHIFT); unsigned int poff = (sg->offset + *offset) & (PAGE_SIZE-1); unsigned int sglen = sg->length - *offset; - if (sglen > buflen - cnt) - { + if (sglen > buflen - cnt) { /* Transfer ends within this s-g entry */ sglen = buflen - cnt; *offset += sglen; - } - else - { + } else { /* Transfer continues to next s-g entry */ *offset = 0; sg = sg_next(sg); } - while (sglen > 0) - { - unsigned int plen = min(sglen, (unsigned int)PAGE_SIZE - poff); + while (sglen > 0) { + unsigned int plen = min(sglen, + (unsigned int)PAGE_SIZE - poff); unsigned char *ptr = kmap(page); if (dir == TO_XFER_BUF) @@ -433,18 +459,24 @@ unsigned int usb_stor_access_xfer_buf(struct us_data *us, unsigned char *buffer, return cnt; } -/* Store the contents of buffer into srb's transfer buffer and set the SCSI residue. */ -//----- usb_stor_set_xfer_buf() --------------------- -void usb_stor_set_xfer_buf(struct us_data *us, unsigned char *buffer, unsigned int buflen, struct scsi_cmnd *srb, - unsigned int dir) +/* + * Store the contents of buffer into srb's transfer + * buffer and set the SCSI residue. + */ +/* + * usb_stor_set_xfer_buf() + */ +void usb_stor_set_xfer_buf(struct us_data *us, unsigned char *buffer, + unsigned int buflen, struct scsi_cmnd *srb, unsigned int dir) { unsigned int offset = 0; struct scatterlist *sg = NULL; - //printk("transport --- usb_stor_set_xfer_buf\n"); - // TO_XFER_BUF = 0, FROM_XFER_BUF = 1 + /* pr_info("transport --- usb_stor_set_xfer_buf\n"); */ + /* TO_XFER_BUF = 0, FROM_XFER_BUF = 1 */ buflen = min(buflen, scsi_bufflen(srb)); - buflen = usb_stor_access_xfer_buf(us, buffer, buflen, srb, &sg, &offset, dir); + buflen = usb_stor_access_xfer_buf(us, buffer, buflen, srb, + &sg, &offset, dir); if (buflen < scsi_bufflen(srb)) scsi_set_resid(srb, scsi_bufflen(srb) - buflen); } |