Merge /spare/repo/linux-2.6/
This commit is contained in:
@@ -51,12 +51,16 @@ struct scsi_cmnd {
|
||||
* printk's to use ->pid, so that we can kill this field.
|
||||
*/
|
||||
unsigned long serial_number;
|
||||
/*
|
||||
* This is set to jiffies as it was when the command was first
|
||||
* allocated. It is used to time how long the command has
|
||||
* been outstanding
|
||||
*/
|
||||
unsigned long jiffies_at_alloc;
|
||||
|
||||
int retries;
|
||||
int allowed;
|
||||
int timeout_per_command;
|
||||
int timeout_total;
|
||||
int timeout;
|
||||
|
||||
unsigned char cmd_len;
|
||||
unsigned char old_cmd_len;
|
||||
|
@@ -3,8 +3,10 @@
|
||||
|
||||
struct scsi_cmnd;
|
||||
struct scsi_request;
|
||||
struct scsi_sense_hdr;
|
||||
|
||||
extern void scsi_print_command(struct scsi_cmnd *);
|
||||
extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *);
|
||||
extern void __scsi_print_command(unsigned char *);
|
||||
extern void scsi_print_sense(const char *, struct scsi_cmnd *);
|
||||
extern void scsi_print_req_sense(const char *, struct scsi_request *);
|
||||
|
@@ -8,8 +8,17 @@
|
||||
|
||||
struct request_queue;
|
||||
struct scsi_cmnd;
|
||||
struct scsi_mode_data;
|
||||
struct scsi_lun;
|
||||
struct scsi_sense_hdr;
|
||||
|
||||
struct scsi_mode_data {
|
||||
__u32 length;
|
||||
__u16 block_descriptor_length;
|
||||
__u8 medium_type;
|
||||
__u8 device_specific;
|
||||
__u8 header_length;
|
||||
__u8 longlba:1;
|
||||
};
|
||||
|
||||
/*
|
||||
* sdev state: If you alter this, you also need to alter scsi_sysfs.c
|
||||
@@ -228,7 +237,8 @@ extern int scsi_set_medium_removal(struct scsi_device *, char);
|
||||
|
||||
extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
|
||||
unsigned char *buffer, int len, int timeout,
|
||||
int retries, struct scsi_mode_data *data);
|
||||
int retries, struct scsi_mode_data *data,
|
||||
struct scsi_sense_hdr *);
|
||||
extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
|
||||
int retries);
|
||||
extern int scsi_device_set_state(struct scsi_device *sdev,
|
||||
@@ -247,6 +257,14 @@ extern void int_to_scsilun(unsigned int, struct scsi_lun *);
|
||||
extern const char *scsi_device_state_name(enum scsi_device_state);
|
||||
extern int scsi_is_sdev_device(const struct device *);
|
||||
extern int scsi_is_target_device(const struct device *);
|
||||
extern int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int data_direction, void *buffer, unsigned bufflen,
|
||||
unsigned char *sense, int timeout, int retries,
|
||||
int flag);
|
||||
extern int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int data_direction, void *buffer, unsigned bufflen,
|
||||
struct scsi_sense_hdr *, int timeout, int retries);
|
||||
|
||||
static inline int scsi_device_online(struct scsi_device *sdev)
|
||||
{
|
||||
return sdev->sdev_state != SDEV_OFFLINE;
|
||||
|
@@ -26,10 +26,15 @@ struct scsi_sense_hdr { /* See SPC-3 section 4.5 */
|
||||
u8 additional_length; /* always 0 for fixed sense format */
|
||||
};
|
||||
|
||||
static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr)
|
||||
{
|
||||
if (!sshdr)
|
||||
return 0;
|
||||
|
||||
return (sshdr->response_code & 0x70) == 0x70;
|
||||
}
|
||||
|
||||
|
||||
extern void scsi_add_timer(struct scsi_cmnd *, int,
|
||||
void (*)(struct scsi_cmnd *));
|
||||
extern int scsi_delete_timer(struct scsi_cmnd *);
|
||||
extern void scsi_report_bus_reset(struct Scsi_Host *, int);
|
||||
extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
|
||||
extern int scsi_block_when_processing_errors(struct scsi_device *);
|
||||
|
@@ -429,12 +429,15 @@ struct scsi_host_template {
|
||||
};
|
||||
|
||||
/*
|
||||
* shost states
|
||||
* shost state: If you alter this, you also need to alter scsi_sysfs.c
|
||||
* (for the ascii descriptions) and the state model enforcer:
|
||||
* scsi_host_set_state()
|
||||
*/
|
||||
enum {
|
||||
SHOST_ADD,
|
||||
SHOST_DEL,
|
||||
enum scsi_host_state {
|
||||
SHOST_CREATED = 1,
|
||||
SHOST_RUNNING,
|
||||
SHOST_CANCEL,
|
||||
SHOST_DEL,
|
||||
SHOST_RECOVERY,
|
||||
};
|
||||
|
||||
@@ -464,12 +467,10 @@ struct Scsi_Host {
|
||||
struct task_struct * ehandler; /* Error recovery thread. */
|
||||
struct semaphore * eh_wait; /* The error recovery thread waits
|
||||
on this. */
|
||||
struct completion * eh_notify; /* wait for eh to begin or end */
|
||||
struct semaphore * eh_action; /* Wait for specific actions on the
|
||||
host. */
|
||||
unsigned int eh_active:1; /* Indicates the eh thread is awake and active if
|
||||
this is true. */
|
||||
unsigned int eh_kill:1; /* set when killing the eh thread */
|
||||
wait_queue_head_t host_wait;
|
||||
struct scsi_host_template *hostt;
|
||||
struct scsi_transport_template *transportt;
|
||||
@@ -575,7 +576,7 @@ struct Scsi_Host {
|
||||
unsigned int irq;
|
||||
|
||||
|
||||
unsigned long shost_state;
|
||||
enum scsi_host_state shost_state;
|
||||
|
||||
/* ldm bits */
|
||||
struct device shost_gendev;
|
||||
@@ -633,6 +634,7 @@ extern void scsi_remove_host(struct Scsi_Host *);
|
||||
extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *);
|
||||
extern void scsi_host_put(struct Scsi_Host *t);
|
||||
extern struct Scsi_Host *scsi_host_lookup(unsigned short);
|
||||
extern const char *scsi_host_state_name(enum scsi_host_state);
|
||||
|
||||
extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *);
|
||||
|
||||
@@ -646,6 +648,15 @@ static inline struct device *scsi_get_device(struct Scsi_Host *shost)
|
||||
return shost->shost_gendev.parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* scsi_host_scan_allowed - Is scanning of this host allowed
|
||||
* @shost: Pointer to Scsi_Host.
|
||||
**/
|
||||
static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
|
||||
{
|
||||
return shost->shost_state == SHOST_RUNNING;
|
||||
}
|
||||
|
||||
extern void scsi_unblock_requests(struct Scsi_Host *);
|
||||
extern void scsi_block_requests(struct Scsi_Host *);
|
||||
|
||||
@@ -663,5 +674,6 @@ extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *);
|
||||
/* legacy interfaces */
|
||||
extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int);
|
||||
extern void scsi_unregister(struct Scsi_Host *);
|
||||
extern int scsi_host_set_state(struct Scsi_Host *, enum scsi_host_state);
|
||||
|
||||
#endif /* _SCSI_SCSI_HOST_H */
|
||||
|
@@ -54,20 +54,4 @@ extern void scsi_do_req(struct scsi_request *, const void *cmnd,
|
||||
void *buffer, unsigned bufflen,
|
||||
void (*done) (struct scsi_cmnd *),
|
||||
int timeout, int retries);
|
||||
|
||||
struct scsi_mode_data {
|
||||
__u32 length;
|
||||
__u16 block_descriptor_length;
|
||||
__u8 medium_type;
|
||||
__u8 device_specific;
|
||||
__u8 header_length;
|
||||
__u8 longlba:1;
|
||||
};
|
||||
|
||||
extern int __scsi_mode_sense(struct scsi_request *SRpnt, int dbd,
|
||||
int modepage, unsigned char *buffer, int len,
|
||||
int timeout, int retries,
|
||||
struct scsi_mode_data *data);
|
||||
|
||||
|
||||
#endif /* _SCSI_SCSI_REQUEST_H */
|
||||
|
@@ -39,6 +39,7 @@ struct spi_transport_attrs {
|
||||
unsigned int rd_strm:1; /* Read streaming enabled */
|
||||
unsigned int rti:1; /* Retain Training Information */
|
||||
unsigned int pcomp_en:1;/* Precompensation enabled */
|
||||
unsigned int hold_mcs:1;/* Hold Margin Control Settings */
|
||||
unsigned int initial_dv:1; /* DV done to this target yet */
|
||||
unsigned long flags; /* flags field for drivers to use */
|
||||
/* Device Properties fields */
|
||||
@@ -78,6 +79,7 @@ struct spi_host_attrs {
|
||||
#define spi_rd_strm(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rd_strm)
|
||||
#define spi_rti(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rti)
|
||||
#define spi_pcomp_en(x) (((struct spi_transport_attrs *)&(x)->starget_data)->pcomp_en)
|
||||
#define spi_hold_mcs(x) (((struct spi_transport_attrs *)&(x)->starget_data)->hold_mcs)
|
||||
#define spi_initial_dv(x) (((struct spi_transport_attrs *)&(x)->starget_data)->initial_dv)
|
||||
|
||||
#define spi_support_sync(x) (((struct spi_transport_attrs *)&(x)->starget_data)->support_sync)
|
||||
@@ -114,8 +116,11 @@ struct spi_function_template {
|
||||
void (*set_rti)(struct scsi_target *, int);
|
||||
void (*get_pcomp_en)(struct scsi_target *);
|
||||
void (*set_pcomp_en)(struct scsi_target *, int);
|
||||
void (*get_hold_mcs)(struct scsi_target *);
|
||||
void (*set_hold_mcs)(struct scsi_target *, int);
|
||||
void (*get_signalling)(struct Scsi_Host *);
|
||||
void (*set_signalling)(struct Scsi_Host *, enum spi_signal_type);
|
||||
int (*deny_binding)(struct scsi_target *);
|
||||
/* The driver sets these to tell the transport class it
|
||||
* wants the attributes displayed in sysfs. If the show_ flag
|
||||
* is not set, the attribute will be private to the transport
|
||||
@@ -130,6 +135,7 @@ struct spi_function_template {
|
||||
unsigned long show_rd_strm:1;
|
||||
unsigned long show_rti:1;
|
||||
unsigned long show_pcomp_en:1;
|
||||
unsigned long show_hold_mcs:1;
|
||||
};
|
||||
|
||||
struct scsi_transport_template *spi_attach_transport(struct spi_function_template *);
|
||||
|
Reference in New Issue
Block a user