Commit 48ad999d authored by Linus Torvalds's avatar Linus Torvalds

v2.4.7.2 -> v2.4.7.3

  - Ben Collins: 1394 updates
  - Matthew Dharm: USB storage update
  - Ion Badulescu: starfire driver update
  - VM aging cleanups
parent 80b4c191
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 8
EXTRAVERSION =-pre2
EXTRAVERSION =-pre3
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
......@@ -147,10 +147,6 @@ static void init_hosts(struct hpsb_host_template *tmpl)
int count;
struct hpsb_host *host;
/* PCI cards should register one host at a time */
if (tmpl->detect_hosts == NULL)
return;
count = tmpl->detect_hosts(tmpl);
for (host = tmpl->hosts; host != NULL; host = host->next) {
......@@ -254,8 +250,13 @@ static int remove_template(struct hpsb_host_template *tmpl)
int hpsb_register_lowlevel(struct hpsb_host_template *tmpl)
{
add_template(tmpl);
HPSB_DEBUG("Registered %s driver, initializing now", tmpl->name);
init_hosts(tmpl);
/* PCI cards should be smart and use the PCI detection layer, and
* not this one shot deal. detect_hosts() will be obsoleted soon. */
if (tmpl->detect_hosts != NULL) {
HPSB_DEBUG("Registered %s driver, initializing now", tmpl->name);
init_hosts(tmpl);
}
return 0;
}
......
......@@ -293,12 +293,13 @@ static void build_speed_map(struct hpsb_host *host, int nodecount)
void hpsb_selfid_received(struct hpsb_host *host, quadlet_t sid)
{
if (host->in_bus_reset) {
HPSB_DEBUG("Including SelfID 0x%x", sid);
#ifdef CONFIG_IEEE1394_VERBOSEDEBUG
HPSB_INFO("Including SelfID 0x%x", sid);
#endif
host->topology_map[host->selfid_count++] = sid;
} else {
/* FIXME - info on which host */
HPSB_NOTICE("Spurious SelfID packet (0x%08x) received from %s",
sid, host->template->name);
HPSB_NOTICE("Spurious SelfID packet (0x%08x) received from bus %d",
sid, (host->node_id & BUS_MASK) >> 6);
}
}
......
......@@ -76,5 +76,5 @@ EXPORT_SYMBOL(highlevel_remove_host);
EXPORT_SYMBOL(highlevel_host_reset);
EXPORT_SYMBOL(highlevel_add_one_host);
EXPORT_SYMBOL(hpsb_guid_get_handle);
EXPORT_SYMBOL(hpsb_get_host_by_ge);
EXPORT_SYMBOL(hpsb_get_host_by_ne);
EXPORT_SYMBOL(hpsb_guid_fill_packet);
This diff is collapsed.
......@@ -50,7 +50,7 @@ hpsb_guid_t hpsb_guid_get_handle(u64 guid);
* Note that the local GUID currently isn't collected, so this will always
* return NULL.
*/
struct hpsb_host *hpsb_get_host_by_ge(hpsb_guid_t handle);
struct hpsb_host *hpsb_get_host_by_ne(hpsb_guid_t handle);
/*
* This will fill in the given, pre-initialised hpsb_packet with the current
......
This diff is collapsed.
......@@ -58,6 +58,17 @@
#define PRINTD(level, card, fmt, args...) do {} while (0)
#endif
static struct pci_device_id pcilynx_pci_tbl[] __devinitdata = {
{
vendor: PCI_VENDOR_ID_TI,
device: PCI_DEVICE_ID_TI_PCILYNX,
subvendor: PCI_ANY_ID,
subdevice: PCI_ANY_ID,
},
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE(pci, pcilynx_pci_tbl);
static struct ti_lynx cards[MAX_PCILYNX_CARDS];
static int num_of_cards = 0;
......
......@@ -807,7 +807,7 @@ static int video1394_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct video_card *video = NULL;
struct ti_ohci *ohci= video->ohci;
struct ti_ohci *ohci;
unsigned long flags;
struct list_head *lh;
......@@ -818,6 +818,7 @@ static int video1394_ioctl(struct inode *inode, struct file *file,
p = list_entry(lh, struct video_card, list);
if (p->id == MINOR(inode->i_rdev)) {
video = p;
ohci = video->ohci;
break;
}
}
......@@ -1602,7 +1603,7 @@ static struct hpsb_highlevel_ops hl_ops = {
MODULE_AUTHOR("Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>");
MODULE_DESCRIPTION("driver for digital video on OHCI board");
MODULE_SUPPORTED_DEVICE("video1394");
MODULE_SUPPORTED_DEVICE(VIDEO1394_DRIVER_NAME);
static void __exit video1394_exit_module (void)
{
......
......@@ -87,8 +87,7 @@
LK1.3.3 (Ion Badulescu)
- Initialize the TxMode register properly
- Set the MII registers _after_ resetting it
- Don't dereference dev->priv after unregister_netdev() has freed it
- Don't dereference dev->priv after freeing it
TODO:
- implement tx_timeout() properly
......@@ -988,12 +987,12 @@ static void check_duplex(struct net_device *dev)
struct netdev_private *np = dev->priv;
u16 reg0;
mdio_write(dev, np->phys[0], MII_ADVERTISE, np->advertising);
mdio_write(dev, np->phys[0], MII_BMCR, BMCR_RESET);
udelay(500);
while (mdio_read(dev, np->phys[0], MII_BMCR) & BMCR_RESET);
reg0 = mdio_read(dev, np->phys[0], MII_BMCR);
mdio_write(dev, np->phys[0], MII_ADVERTISE, np->advertising);
if (np->autoneg) {
reg0 |= BMCR_ANENABLE | BMCR_ANRESTART;
......@@ -1940,12 +1939,12 @@ static void __devexit starfire_remove_one (struct pci_dev *pdev)
pci_free_consistent(pdev, PAGE_SIZE,
np->rx_ring, np->rx_ring_dma);
unregister_netdev(dev); /* Will also free np!! */
unregister_netdev(dev);
iounmap((char *)dev->base_addr);
pci_release_regions(pdev);
pci_set_drvdata(pdev, NULL);
kfree(dev);
kfree(dev); /* Will also free np!! */
}
......
......@@ -19,6 +19,9 @@ usb-storage-obj-$(CONFIG_USB_STORAGE_FREECOM) += freecom.o
usb-storage-obj-$(CONFIG_USB_STORAGE_SHUTTLE_SMARTMEDIA) += shuttle_sm.o
usb-storage-obj-$(CONFIG_USB_STORAGE_SHUTTLE_COMPACTFLASH) += shuttle_cf.o
usb-storage-obj-$(CONFIG_USB_STORAGE_DPCM) += dpcm.o
usb-storage-obj-$(CONFIG_USB_STORAGE_ISD200) += isd200.o
usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB) += datafab.o
usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT) += jumpshot.o
usb-storage-objs := scsiglue.o protocol.o transport.o usb.o \
initializers.o $(usb-storage-obj-y)
......
This diff is collapsed.
/* Driver for Datafab MDCFE-B USB Compact Flash reader
* Header File
*
* Current development and maintenance by:
* (c) 2000 Jimmie Mayfield (mayfield+datafab@sackheads.org)
*
* See datafab.c for more explanation
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _USB_DATAFAB_MDCFE_B_H
#define _USB_DATAFAB_MDCFE_B_H
#define min(a,b) (((a)<(b))?(a):(b)) // this is defined in tons of header files, i wish it had a standard single definition...
extern int datafab_transport(Scsi_Cmnd *srb, struct us_data *us);
struct datafab_info {
unsigned long sectors; // total sector count
unsigned long ssize; // sector size in bytes
char lun; // used for dual-slot readers
// the following aren't used yet
unsigned char sense_key;
unsigned long sense_asc; // additional sense code
unsigned long sense_ascq; // additional sense code qualifier
};
#endif
/* Driver for USB Mass Storage compliant devices
* Debugging Functions Source Code File
*
* $Id: debug.c,v 1.4 2000/09/04 02:12:47 groovyjava Exp $
* $Id: debug.c,v 1.5 2001/06/27 23:20:45 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -302,12 +302,10 @@ void usb_stor_show_sense(
case 0x1C00: what="defect list not found"; break;
case 0x2400: what="invalid field in CDB"; break;
case 0x2703: what="associated write protect"; break;
case 0x2800: what="not ready to ready transition (media change?)";
break;
case 0x2800: what="not ready to ready transition"; break;
case 0x2903: what="bus device reset function occurred"; break;
case 0x2904: what="device internal reset"; break;
case 0x2B00: what="copy can't execute since host can't disconnect";
break;
case 0x2B00: what="copy can't execute / host can't disconnect"; break;
case 0x2C00: what="command sequence error"; break;
case 0x2C03: what="current program area is not empty"; break;
case 0x2C04: what="current program area is empty"; break;
......
/* Driver for Microtech DPCM-USB CompactFlash/SmartMedia reader
*
* $Id: dpcm.c,v 1.3 2000/08/25 00:13:51 mdharm Exp $
* $Id: dpcm.c,v 1.4 2001/06/11 02:54:25 mdharm Exp $
*
* DPCM driver v0.1:
*
......
/* Driver for Freecom USB/IDE adaptor
*
* $Id: freecom.c,v 1.14 2000/11/13 22:27:57 mdharm Exp $
* $Id: freecom.c,v 1.15 2001/06/27 23:50:28 mdharm Exp $
*
* Freecom v0.1:
*
......
This diff is collapsed.
/* Header File for In-System Design, Inc. ISD200 ASIC
*
* First release
*
* Current development and maintenance by:
* (c) 2000 In-System Design, Inc. (support@in-system.com)
*
* See isd200.c for more information.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _USB_ISD200_H
#define _USB_ISD200_H
extern void isd200_ata_command(Scsi_Cmnd *srb, struct us_data *us);
extern int isd200_Initialization(struct us_data *us);
#endif
This diff is collapsed.
/* Driver for Lexar "Jumpshot" USB Compact Flash reader
* Header File
*
* Current development and maintenance by:
* (c) 2000 Jimmie Mayfield (mayfield+usb@sackheads.org)
*
* See jumpshot.c for more explanation
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _USB_JUMPSHOT_H
#define _USB_JUMPSHOT_H
#define min(a,b) (((a)<(b))?(a):(b)) // this is defined in tons of header files, i wish it had a standar single definition...
extern int jumpshot_transport(Scsi_Cmnd *srb, struct us_data *us);
struct jumpshot_info {
unsigned long sectors; // total sector count
unsigned long ssize; // sector size in bytes
// the following aren't used yet
unsigned char sense_key;
unsigned long sense_asc; // additional sense code
unsigned long sense_ascq; // additional sense code qualifier
};
#endif
/* Driver for USB Mass Storage compliant devices
*
* $Id: protocol.c,v 1.7 2000/11/13 22:28:33 mdharm Exp $
* $Id: protocol.c,v 1.10 2001/07/30 00:27:59 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -274,72 +274,68 @@ void usb_stor_ufi_command(Scsi_Cmnd *srb, struct us_data *us)
void usb_stor_transparent_scsi_command(Scsi_Cmnd *srb, struct us_data *us)
{
int old_cmnd = 0;
/* This code supports devices which do not support {READ|WRITE}_6
* Apparently, neither Windows or MacOS will use these commands,
* so some devices do not support them
*/
if (us->flags & US_FL_MODE_XLATE) {
US_DEBUGP("Invoking Mode Translation\n");
/* save the old command for later */
old_cmnd = srb->cmnd[0];
/* translate READ_6 to READ_10 */
if (srb->cmnd[0] == 0x08) {
/* get the control */
srb->cmnd[9] = us->srb->cmnd[5];
/* get the length */
srb->cmnd[8] = us->srb->cmnd[6];
switch (srb->cmnd[0]) {
/* change READ_6/WRITE_6 to READ_10/WRITE_10 */
case WRITE_6:
case READ_6:
srb->cmd_len = 12;
srb->cmnd[11] = 0;
srb->cmnd[10] = 0;
srb->cmnd[9] = 0;
srb->cmnd[8] = srb->cmnd[4];
srb->cmnd[7] = 0;
/* set the reserved area to 0 */
srb->cmnd[6] = 0;
/* get LBA */
srb->cmnd[5] = us->srb->cmnd[3];
srb->cmnd[4] = us->srb->cmnd[2];
srb->cmnd[3] = 0;
srb->cmnd[6] = 0;
srb->cmnd[5] = srb->cmnd[3];
srb->cmnd[4] = srb->cmnd[2];
srb->cmnd[3] = srb->cmnd[1] & 0x1F;
srb->cmnd[2] = 0;
/* LUN and other info in cmnd[1] can stay */
/* fix command code */
srb->cmnd[0] = 0x28;
US_DEBUGP("Changing READ_6 to READ_10\n");
US_DEBUG(usb_stor_show_command(srb));
}
/* translate WRITE_6 to WRITE_10 */
if (srb->cmnd[0] == 0x0A) {
/* get the control */
srb->cmnd[9] = us->srb->cmnd[5];
/* get the length */
srb->cmnd[8] = us->srb->cmnd[4];
srb->cmnd[1] = srb->cmnd[1] & 0xE0;
srb->cmnd[0] = srb->cmnd[0] | 0x20;
break;
/* convert MODE_SELECT data here */
case MODE_SENSE:
case MODE_SELECT:
srb->cmd_len = 12;
srb->cmnd[11] = 0;
srb->cmnd[10] = 0;
srb->cmnd[9] = 0;
srb->cmnd[8] = srb->cmnd[4];
srb->cmnd[7] = 0;
/* set the reserved area to 0 */
srb->cmnd[6] = 0;
/* get LBA */
srb->cmnd[5] = us->srb->cmnd[3];
srb->cmnd[4] = us->srb->cmnd[2];
srb->cmnd[6] = 0;
srb->cmnd[5] = 0;
srb->cmnd[4] = 0;
srb->cmnd[3] = 0;
srb->cmnd[2] = 0;
/* LUN and other info in cmnd[1] can stay */
/* fix command code */
srb->cmnd[0] = 0x2A;
US_DEBUGP("Changing WRITE_6 to WRITE_10\n");
US_DEBUG(usb_stor_show_command(us->srb));
}
srb->cmnd[2] = srb->cmnd[2];
srb->cmnd[1] = srb->cmnd[1];
srb->cmnd[0] = srb->cmnd[0] | 0x40;
break;
} /* switch (srb->cmnd[0]) */
} /* if (us->flags & US_FL_MODE_XLATE) */
/* convert MODE_SELECT data here */
if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SELECT))
usb_stor_scsiSense6to10(srb);
/* send the command to the transport layer */
usb_stor_invoke_transport(srb, us);
/* Fix the MODE_SENSE data if we translated the command */
if ((us->flags & US_FL_MODE_XLATE) && (old_cmnd == MODE_SENSE)
&& (status_byte(srb->result) == GOOD))
usb_stor_scsiSense10to6(srb);
/* fix the INQUIRY data if necessary */
fix_inquiry_data(srb);
}
......
/* Driver for USB Mass Storage compliant devices
* Protocol Functions Header File
*
* $Id: protocol.h,v 1.3 2000/08/25 00:13:51 mdharm Exp $
* $Id: protocol.h,v 1.4 2001/02/13 07:10:03 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -53,8 +53,9 @@
#define US_SC_UFI 0x04 /* Floppy */
#define US_SC_8070 0x05 /* Removable media */
#define US_SC_SCSI 0x06 /* Transparent */
#define US_SC_ISD200 0x07 /* ISD200 ATA */
#define US_SC_MIN US_SC_RBC
#define US_SC_MAX US_SC_SCSI
#define US_SC_MAX US_SC_ISD200
extern void usb_stor_ATAPI_command(Scsi_Cmnd*, struct us_data*);
extern void usb_stor_qic157_command(Scsi_Cmnd*, struct us_data*);
......
/* Driver for USB Mass Storage compliant devices
* SCSI layer glue code
*
* $Id: scsiglue.c,v 1.19 2000/11/13 22:28:55 mdharm Exp $
* $Id: scsiglue.c,v 1.21 2001/07/29 23:41:52 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -49,7 +49,7 @@
#include "debug.h"
#include "transport.h"
#include <linux/slab.h>
#include <linux/malloc.h>
/*
* kernel thread actions
......@@ -122,8 +122,9 @@ static int release(struct Scsi_Host *psh)
*/
US_DEBUGP("-- sending US_ACT_EXIT command to thread\n");
us->action = US_ACT_EXIT;
wake_up(&(us->wqh));
down(&(us->notify));
up(&(us->sema));
wait_for_completion(&(us->notify));
/* remove the pointer to the data structure we were using */
(struct us_data*)psh->hostdata[0] = NULL;
......@@ -160,7 +161,7 @@ static int queuecommand( Scsi_Cmnd *srb , void (*done)(Scsi_Cmnd *))
up(&(us->queue_exclusion));
/* wake up the process task */
wake_up(&(us->wqh));
up(&(us->sema));
return 0;
}
......@@ -194,7 +195,7 @@ static int command_abort( Scsi_Cmnd *srb )
usb_unlink_urb(us->current_urb);
/* wait for us to be done */
down(&(us->notify));
wait_for_completion(&(us->notify));
return SUCCESS;
}
......@@ -248,7 +249,7 @@ static int bus_reset( Scsi_Cmnd *srb )
for (i = 0; i < us->pusb_dev->actconfig->bNumInterfaces; i++) {
struct usb_interface *intf =
&us->pusb_dev->actconfig->interface[i];
const struct usb_device_id *id;
struct usb_device_id *id;
/* if this is an unclaimed interface, skip it */
if (!intf->driver) {
......@@ -331,7 +332,7 @@ static int proc_info (char *buffer, char **start, off_t offset, int length,
return -ESRCH;
}
/* print the controler name */
/* print the controller name */
SPRINTF(" Host scsi%d: usb-storage\n", hostno);
/* print product, vendor, and serial number strings */
......
This diff is collapsed.
/* Driver for SCM Microsystems USB-ATAPI cable
*
* $Id: shuttle_usbat.c,v 1.11 2000/11/13 22:29:36 mdharm Exp $
* $Id: shuttle_usbat.c,v 1.14 2001/03/28 01:02:06 groovyjava Exp $
*
* Current development and maintenance by:
* (c) 2000 Robert Baruch (autophile@dol.net)
* (c) 2000, 2001 Robert Baruch (autophile@starband.net)
*
* Many originally ATAPI devices were slightly modified to meet the USB
* market by using some kind of translation from ATAPI to USB on the host,
......@@ -18,8 +18,8 @@
* as well. This driver is only guaranteed to work with the ATAPI
* translation.
*
* The only peripheral that I know of (as of 8 Sep 2000) that uses this
* device is the Hewlett-Packard 8200e/8210e CD-Writer Plus.
* The only peripheral that I know of (as of 27 Mar 2001) that uses this
* device is the Hewlett-Packard 8200e/8210e/8230e CD-Writer Plus.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
......@@ -344,12 +344,14 @@ int usbat_wait_not_busy(struct us_data *us, int minutes) {
if (result!=USB_STOR_TRANSPORT_GOOD)
return result;
if (status&0x01) // check condition
if (status&0x01) { // check condition
result = usbat_read(us, USBAT_ATA, 0x10, &status);
return USB_STOR_TRANSPORT_FAILED;
}
if (status&0x20) // device fault
return USB_STOR_TRANSPORT_FAILED;
if ((status&0x80)!=0x80) { // not busy
if ((status&0x80)==0x00) { // not busy
US_DEBUGP("Waited not busy for %d steps\n", i);
return USB_STOR_TRANSPORT_GOOD;
}
......@@ -972,6 +974,9 @@ int hp8200e_transport(Scsi_Cmnd *srb, struct us_data *us)
data[i] = (i-7 >= srb->cmd_len) ? 0 : srb->cmnd[i-7];
}
result = usbat_read(us, USBAT_ATA, 0x17, &status);
US_DEBUGP("Status = %02X\n", status);
if (srb->cmnd[0] == TEST_UNIT_READY)
transferred = 0;
......
This diff is collapsed.
/* Driver for USB Mass Storage compliant devices
* Transport Functions Header File
*
* $Id: transport.h,v 1.13 2000/10/03 01:06:07 mdharm Exp $
* $Id: transport.h,v 1.15 2001/03/17 20:06:23 jrmayfield Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -64,6 +64,14 @@
#define US_PR_FREECOM 0xf1 /* Freecom */
#endif
#ifdef CONFIG_USB_STORAGE_DATAFAB
#define US_PR_DATAFAB 0xf2 /* Datafab chipsets */
#endif
#ifdef CONFIG_USB_STORAGE_JUMPSHOT
#define US_PR_JUMPSHOT 0xf3 /* Lexar Jumpshot */
#endif
/*
* Bulk only data structures
*/
......@@ -107,7 +115,7 @@ struct bulk_cs_wrap {
* us_bulk_transfer() return codes
*/
#define US_BULK_TRANSFER_GOOD 0 /* good transfer */
#define US_BULK_TRANSFER_SHORT 1 /* transferred less than expected */
#define US_BULK_TRANSFER_SHORT 1 /* transfered less than expected */
#define US_BULK_TRANSFER_FAILED 2 /* transfer died in the middle */
#define US_BULK_TRANSFER_ABORTED 3 /* transfer canceled */
......@@ -143,4 +151,6 @@ extern int usb_stor_bulk_msg(struct us_data*, void*, int, unsigned int,
unsigned int*);
extern int usb_stor_control_msg(struct us_data*, unsigned int, u8, u8,
u16, u16, void*, u16);
extern void usb_stor_transfer(Scsi_Cmnd*, struct us_data*);
extern int usb_stor_clear_halt(struct usb_device*, int );
#endif
This diff is collapsed.
This diff is collapsed.
/* Driver for USB Mass Storage compliant devices
* Main Header File
*
* $Id: usb.h,v 1.12 2000/12/05 03:33:49 mdharm Exp $
* $Id: usb.h,v 1.18 2001/07/30 00:27:59 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -47,6 +47,7 @@
#include <linux/usb.h>
#include <linux/blk.h>
#include <linux/smp_lock.h>
#include <linux/completion.h>
#include "scsi.h"
#include "hosts.h"
......@@ -94,11 +95,12 @@ struct us_unusual_dev {
/* Flag definitions */
#define US_FL_SINGLE_LUN 0x00000001 /* allow access to only LUN 0 */
#define US_FL_MODE_XLATE 0x00000002 /* translate _6 to _10 comands for
#define US_FL_MODE_XLATE 0x00000002 /* translate _6 to _10 commands for
Win/MacOS compatibility */
#define US_FL_START_STOP 0x00000004 /* ignore START_STOP commands */
#define US_FL_IGNORE_SER 0x00000010 /* Ignore the serial number given */
#define US_FL_SCM_MULT_TARG 0x00000020 /* supports multiple targets */
#define US_FL_FIX_INQUIRY 0x00000040 /* INQUIRY response needs fixing */
#define USB_STOR_STRING_LEN 32
......@@ -165,11 +167,11 @@ struct us_data {
struct semaphore current_urb_sem; /* to protect irq_urb */
struct urb *current_urb; /* non-int USB requests */
/* the waitqueue for sleeping the control thread */
wait_queue_head_t wqh; /* to sleep thread on */
/* the semaphore for sleeping the control thread */
struct semaphore sema; /* to sleep thread on */
/* mutual exclusion structures */
struct semaphore notify; /* thread begin/end */
struct completion notify; /* thread begin/end */
struct semaphore queue_exclusion; /* to protect data structs */
struct us_unusual_dev *unusual_dev; /* If unusual device */
void *extra; /* Any extra data */
......
......@@ -28,8 +28,6 @@ do { \
unsigned long flags; \
\
__save_flags(flags); \
if (!(flags & (1 << 9))) \
BUG(); \
barrier(); \
if (!--*ptr) \
__asm__ __volatile__ ( \
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment