diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-07 20:31:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-07 20:31:27 -0400 |
commit | 0481990b758628e12f4b0a9e15094e70cefc7cd1 (patch) | |
tree | 67a4b4b7acc6a688b87ef2a2d3ec0e296e6e480c /include | |
parent | db400b3c4ee89d384d9163836a55577abdae772d (diff) | |
parent | 17fa53da1239b8712c5cebbd72a74c713b6c2db9 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-for-linus-2.6
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/attribute_container.h | 12 | ||||
-rw-r--r-- | include/linux/bio.h | 6 | ||||
-rw-r--r-- | include/linux/blkdev.h | 10 | ||||
-rw-r--r-- | include/linux/raid_class.h | 59 | ||||
-rw-r--r-- | include/linux/transport_class.h | 11 | ||||
-rw-r--r-- | include/scsi/scsi_cmnd.h | 8 | ||||
-rw-r--r-- | include/scsi/scsi_dbg.h | 2 | ||||
-rw-r--r-- | include/scsi/scsi_device.h | 22 | ||||
-rw-r--r-- | include/scsi/scsi_eh.h | 11 | ||||
-rw-r--r-- | include/scsi/scsi_host.h | 26 | ||||
-rw-r--r-- | include/scsi/scsi_request.h | 16 | ||||
-rw-r--r-- | include/scsi/scsi_transport_spi.h | 6 |
12 files changed, 145 insertions, 44 deletions
diff --git a/include/linux/attribute_container.h b/include/linux/attribute_container.h index af1010b6dab7..93bfb0beb62a 100644 --- a/include/linux/attribute_container.h +++ b/include/linux/attribute_container.h | |||
@@ -11,10 +11,12 @@ | |||
11 | 11 | ||
12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
13 | #include <linux/list.h> | 13 | #include <linux/list.h> |
14 | #include <linux/klist.h> | ||
15 | #include <linux/spinlock.h> | ||
14 | 16 | ||
15 | struct attribute_container { | 17 | struct attribute_container { |
16 | struct list_head node; | 18 | struct list_head node; |
17 | struct list_head containers; | 19 | struct klist containers; |
18 | struct class *class; | 20 | struct class *class; |
19 | struct class_device_attribute **attrs; | 21 | struct class_device_attribute **attrs; |
20 | int (*match)(struct attribute_container *, struct device *); | 22 | int (*match)(struct attribute_container *, struct device *); |
@@ -62,12 +64,8 @@ int attribute_container_add_class_device_adapter(struct attribute_container *con | |||
62 | struct class_device *classdev); | 64 | struct class_device *classdev); |
63 | void attribute_container_remove_attrs(struct class_device *classdev); | 65 | void attribute_container_remove_attrs(struct class_device *classdev); |
64 | void attribute_container_class_device_del(struct class_device *classdev); | 66 | void attribute_container_class_device_del(struct class_device *classdev); |
65 | 67 | struct attribute_container *attribute_container_classdev_to_container(struct class_device *); | |
66 | 68 | struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *); | |
67 | |||
68 | |||
69 | |||
70 | |||
71 | struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev); | 69 | struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev); |
72 | 70 | ||
73 | #endif | 71 | #endif |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 69e047989f1c..cdaf03a14a51 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -295,7 +295,13 @@ extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int); | |||
295 | extern int bio_get_nr_vecs(struct block_device *); | 295 | extern int bio_get_nr_vecs(struct block_device *); |
296 | extern struct bio *bio_map_user(struct request_queue *, struct block_device *, | 296 | extern struct bio *bio_map_user(struct request_queue *, struct block_device *, |
297 | unsigned long, unsigned int, int); | 297 | unsigned long, unsigned int, int); |
298 | struct sg_iovec; | ||
299 | extern struct bio *bio_map_user_iov(struct request_queue *, | ||
300 | struct block_device *, | ||
301 | struct sg_iovec *, int, int); | ||
298 | extern void bio_unmap_user(struct bio *); | 302 | extern void bio_unmap_user(struct bio *); |
303 | extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int, | ||
304 | unsigned int); | ||
299 | extern void bio_set_pages_dirty(struct bio *bio); | 305 | extern void bio_set_pages_dirty(struct bio *bio); |
300 | extern void bio_check_pages_dirty(struct bio *bio); | 306 | extern void bio_check_pages_dirty(struct bio *bio); |
301 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); | 307 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 19bd8e7e11bf..aefa26fbae8a 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -563,10 +563,12 @@ extern void blk_sync_queue(struct request_queue *q); | |||
563 | extern void __blk_stop_queue(request_queue_t *q); | 563 | extern void __blk_stop_queue(request_queue_t *q); |
564 | extern void blk_run_queue(request_queue_t *); | 564 | extern void blk_run_queue(request_queue_t *); |
565 | extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); | 565 | extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *); |
566 | extern struct request *blk_rq_map_user(request_queue_t *, int, void __user *, unsigned int); | 566 | extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int); |
567 | extern int blk_rq_unmap_user(struct request *, struct bio *, unsigned int); | 567 | extern int blk_rq_unmap_user(struct bio *, unsigned int); |
568 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, struct request *); | 568 | extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, unsigned int); |
569 | 569 | extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int); | |
570 | extern int blk_execute_rq(request_queue_t *, struct gendisk *, | ||
571 | struct request *, int); | ||
570 | static inline request_queue_t *bdev_get_queue(struct block_device *bdev) | 572 | static inline request_queue_t *bdev_get_queue(struct block_device *bdev) |
571 | { | 573 | { |
572 | return bdev->bd_disk->queue; | 574 | return bdev->bd_disk->queue; |
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h new file mode 100644 index 000000000000..a71123c28272 --- /dev/null +++ b/include/linux/raid_class.h | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | */ | ||
3 | #include <linux/transport_class.h> | ||
4 | |||
5 | struct raid_template { | ||
6 | struct transport_container raid_attrs; | ||
7 | }; | ||
8 | |||
9 | struct raid_function_template { | ||
10 | void *cookie; | ||
11 | int (*is_raid)(struct device *); | ||
12 | void (*get_resync)(struct device *); | ||
13 | void (*get_state)(struct device *); | ||
14 | }; | ||
15 | |||
16 | enum raid_state { | ||
17 | RAID_ACTIVE = 1, | ||
18 | RAID_DEGRADED, | ||
19 | RAID_RESYNCING, | ||
20 | RAID_OFFLINE, | ||
21 | }; | ||
22 | |||
23 | struct raid_data { | ||
24 | struct list_head component_list; | ||
25 | int component_count; | ||
26 | int level; | ||
27 | enum raid_state state; | ||
28 | int resync; | ||
29 | }; | ||
30 | |||
31 | #define DEFINE_RAID_ATTRIBUTE(type, attr) \ | ||
32 | static inline void \ | ||
33 | raid_set_##attr(struct raid_template *r, struct device *dev, type value) { \ | ||
34 | struct class_device *cdev = \ | ||
35 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ | ||
36 | struct raid_data *rd; \ | ||
37 | BUG_ON(!cdev); \ | ||
38 | rd = class_get_devdata(cdev); \ | ||
39 | rd->attr = value; \ | ||
40 | } \ | ||
41 | static inline type \ | ||
42 | raid_get_##attr(struct raid_template *r, struct device *dev) { \ | ||
43 | struct class_device *cdev = \ | ||
44 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ | ||
45 | struct raid_data *rd; \ | ||
46 | BUG_ON(!cdev); \ | ||
47 | rd = class_get_devdata(cdev); \ | ||
48 | return rd->attr; \ | ||
49 | } | ||
50 | |||
51 | DEFINE_RAID_ATTRIBUTE(int, level) | ||
52 | DEFINE_RAID_ATTRIBUTE(int, resync) | ||
53 | DEFINE_RAID_ATTRIBUTE(enum raid_state, state) | ||
54 | |||
55 | struct raid_template *raid_class_attach(struct raid_function_template *); | ||
56 | void raid_class_release(struct raid_template *); | ||
57 | |||
58 | void raid_component_add(struct raid_template *, struct device *, | ||
59 | struct device *); | ||
diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h index 87d98d1faefb..1d6cc22e5f42 100644 --- a/include/linux/transport_class.h +++ b/include/linux/transport_class.h | |||
@@ -12,11 +12,16 @@ | |||
12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
13 | #include <linux/attribute_container.h> | 13 | #include <linux/attribute_container.h> |
14 | 14 | ||
15 | struct transport_container; | ||
16 | |||
15 | struct transport_class { | 17 | struct transport_class { |
16 | struct class class; | 18 | struct class class; |
17 | int (*setup)(struct device *); | 19 | int (*setup)(struct transport_container *, struct device *, |
18 | int (*configure)(struct device *); | 20 | struct class_device *); |
19 | int (*remove)(struct device *); | 21 | int (*configure)(struct transport_container *, struct device *, |
22 | struct class_device *); | ||
23 | int (*remove)(struct transport_container *, struct device *, | ||
24 | struct class_device *); | ||
20 | }; | 25 | }; |
21 | 26 | ||
22 | #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg) \ | 27 | #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg) \ |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 9957f16dcc5d..bed4b7c9be99 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
@@ -51,12 +51,16 @@ struct scsi_cmnd { | |||
51 | * printk's to use ->pid, so that we can kill this field. | 51 | * printk's to use ->pid, so that we can kill this field. |
52 | */ | 52 | */ |
53 | unsigned long serial_number; | 53 | unsigned long serial_number; |
54 | /* | ||
55 | * This is set to jiffies as it was when the command was first | ||
56 | * allocated. It is used to time how long the command has | ||
57 | * been outstanding | ||
58 | */ | ||
59 | unsigned long jiffies_at_alloc; | ||
54 | 60 | ||
55 | int retries; | 61 | int retries; |
56 | int allowed; | 62 | int allowed; |
57 | int timeout_per_command; | 63 | int timeout_per_command; |
58 | int timeout_total; | ||
59 | int timeout; | ||
60 | 64 | ||
61 | unsigned char cmd_len; | 65 | unsigned char cmd_len; |
62 | unsigned char old_cmd_len; | 66 | unsigned char old_cmd_len; |
diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h index 12e90934a7a8..b090a11d7e1c 100644 --- a/include/scsi/scsi_dbg.h +++ b/include/scsi/scsi_dbg.h | |||
@@ -3,8 +3,10 @@ | |||
3 | 3 | ||
4 | struct scsi_cmnd; | 4 | struct scsi_cmnd; |
5 | struct scsi_request; | 5 | struct scsi_request; |
6 | struct scsi_sense_hdr; | ||
6 | 7 | ||
7 | extern void scsi_print_command(struct scsi_cmnd *); | 8 | extern void scsi_print_command(struct scsi_cmnd *); |
9 | extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *); | ||
8 | extern void __scsi_print_command(unsigned char *); | 10 | extern void __scsi_print_command(unsigned char *); |
9 | extern void scsi_print_sense(const char *, struct scsi_cmnd *); | 11 | extern void scsi_print_sense(const char *, struct scsi_cmnd *); |
10 | extern void scsi_print_req_sense(const char *, struct scsi_request *); | 12 | extern void scsi_print_req_sense(const char *, struct scsi_request *); |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 835af8ecbb7c..da63722c0123 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -8,8 +8,17 @@ | |||
8 | 8 | ||
9 | struct request_queue; | 9 | struct request_queue; |
10 | struct scsi_cmnd; | 10 | struct scsi_cmnd; |
11 | struct scsi_mode_data; | ||
12 | struct scsi_lun; | 11 | struct scsi_lun; |
12 | struct scsi_sense_hdr; | ||
13 | |||
14 | struct scsi_mode_data { | ||
15 | __u32 length; | ||
16 | __u16 block_descriptor_length; | ||
17 | __u8 medium_type; | ||
18 | __u8 device_specific; | ||
19 | __u8 header_length; | ||
20 | __u8 longlba:1; | ||
21 | }; | ||
13 | 22 | ||
14 | /* | 23 | /* |
15 | * sdev state: If you alter this, you also need to alter scsi_sysfs.c | 24 | * 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); | |||
228 | 237 | ||
229 | extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage, | 238 | extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage, |
230 | unsigned char *buffer, int len, int timeout, | 239 | unsigned char *buffer, int len, int timeout, |
231 | int retries, struct scsi_mode_data *data); | 240 | int retries, struct scsi_mode_data *data, |
241 | struct scsi_sense_hdr *); | ||
232 | extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout, | 242 | extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout, |
233 | int retries); | 243 | int retries); |
234 | extern int scsi_device_set_state(struct scsi_device *sdev, | 244 | extern int scsi_device_set_state(struct scsi_device *sdev, |
@@ -247,6 +257,14 @@ extern void int_to_scsilun(unsigned int, struct scsi_lun *); | |||
247 | extern const char *scsi_device_state_name(enum scsi_device_state); | 257 | extern const char *scsi_device_state_name(enum scsi_device_state); |
248 | extern int scsi_is_sdev_device(const struct device *); | 258 | extern int scsi_is_sdev_device(const struct device *); |
249 | extern int scsi_is_target_device(const struct device *); | 259 | extern int scsi_is_target_device(const struct device *); |
260 | extern int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, | ||
261 | int data_direction, void *buffer, unsigned bufflen, | ||
262 | unsigned char *sense, int timeout, int retries, | ||
263 | int flag); | ||
264 | extern int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd, | ||
265 | int data_direction, void *buffer, unsigned bufflen, | ||
266 | struct scsi_sense_hdr *, int timeout, int retries); | ||
267 | |||
250 | static inline int scsi_device_online(struct scsi_device *sdev) | 268 | static inline int scsi_device_online(struct scsi_device *sdev) |
251 | { | 269 | { |
252 | return sdev->sdev_state != SDEV_OFFLINE; | 270 | return sdev->sdev_state != SDEV_OFFLINE; |
diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h index 80557f879e3e..fabd879c2f2e 100644 --- a/include/scsi/scsi_eh.h +++ b/include/scsi/scsi_eh.h | |||
@@ -26,10 +26,15 @@ struct scsi_sense_hdr { /* See SPC-3 section 4.5 */ | |||
26 | u8 additional_length; /* always 0 for fixed sense format */ | 26 | u8 additional_length; /* always 0 for fixed sense format */ |
27 | }; | 27 | }; |
28 | 28 | ||
29 | static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr) | ||
30 | { | ||
31 | if (!sshdr) | ||
32 | return 0; | ||
33 | |||
34 | return (sshdr->response_code & 0x70) == 0x70; | ||
35 | } | ||
36 | |||
29 | 37 | ||
30 | extern void scsi_add_timer(struct scsi_cmnd *, int, | ||
31 | void (*)(struct scsi_cmnd *)); | ||
32 | extern int scsi_delete_timer(struct scsi_cmnd *); | ||
33 | extern void scsi_report_bus_reset(struct Scsi_Host *, int); | 38 | extern void scsi_report_bus_reset(struct Scsi_Host *, int); |
34 | extern void scsi_report_device_reset(struct Scsi_Host *, int, int); | 39 | extern void scsi_report_device_reset(struct Scsi_Host *, int, int); |
35 | extern int scsi_block_when_processing_errors(struct scsi_device *); | 40 | extern int scsi_block_when_processing_errors(struct scsi_device *); |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 81d5234f6771..916144be208b 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
@@ -429,12 +429,15 @@ struct scsi_host_template { | |||
429 | }; | 429 | }; |
430 | 430 | ||
431 | /* | 431 | /* |
432 | * shost states | 432 | * shost state: If you alter this, you also need to alter scsi_sysfs.c |
433 | * (for the ascii descriptions) and the state model enforcer: | ||
434 | * scsi_host_set_state() | ||
433 | */ | 435 | */ |
434 | enum { | 436 | enum scsi_host_state { |
435 | SHOST_ADD, | 437 | SHOST_CREATED = 1, |
436 | SHOST_DEL, | 438 | SHOST_RUNNING, |
437 | SHOST_CANCEL, | 439 | SHOST_CANCEL, |
440 | SHOST_DEL, | ||
438 | SHOST_RECOVERY, | 441 | SHOST_RECOVERY, |
439 | }; | 442 | }; |
440 | 443 | ||
@@ -464,12 +467,10 @@ struct Scsi_Host { | |||
464 | struct task_struct * ehandler; /* Error recovery thread. */ | 467 | struct task_struct * ehandler; /* Error recovery thread. */ |
465 | struct semaphore * eh_wait; /* The error recovery thread waits | 468 | struct semaphore * eh_wait; /* The error recovery thread waits |
466 | on this. */ | 469 | on this. */ |
467 | struct completion * eh_notify; /* wait for eh to begin or end */ | ||
468 | struct semaphore * eh_action; /* Wait for specific actions on the | 470 | struct semaphore * eh_action; /* Wait for specific actions on the |
469 | host. */ | 471 | host. */ |
470 | unsigned int eh_active:1; /* Indicates the eh thread is awake and active if | 472 | unsigned int eh_active:1; /* Indicates the eh thread is awake and active if |
471 | this is true. */ | 473 | this is true. */ |
472 | unsigned int eh_kill:1; /* set when killing the eh thread */ | ||
473 | wait_queue_head_t host_wait; | 474 | wait_queue_head_t host_wait; |
474 | struct scsi_host_template *hostt; | 475 | struct scsi_host_template *hostt; |
475 | struct scsi_transport_template *transportt; | 476 | struct scsi_transport_template *transportt; |
@@ -575,7 +576,7 @@ struct Scsi_Host { | |||
575 | unsigned int irq; | 576 | unsigned int irq; |
576 | 577 | ||
577 | 578 | ||
578 | unsigned long shost_state; | 579 | enum scsi_host_state shost_state; |
579 | 580 | ||
580 | /* ldm bits */ | 581 | /* ldm bits */ |
581 | struct device shost_gendev; | 582 | struct device shost_gendev; |
@@ -633,6 +634,7 @@ extern void scsi_remove_host(struct Scsi_Host *); | |||
633 | extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *); | 634 | extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *); |
634 | extern void scsi_host_put(struct Scsi_Host *t); | 635 | extern void scsi_host_put(struct Scsi_Host *t); |
635 | extern struct Scsi_Host *scsi_host_lookup(unsigned short); | 636 | extern struct Scsi_Host *scsi_host_lookup(unsigned short); |
637 | extern const char *scsi_host_state_name(enum scsi_host_state); | ||
636 | 638 | ||
637 | extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *); | 639 | extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *); |
638 | 640 | ||
@@ -646,6 +648,15 @@ static inline struct device *scsi_get_device(struct Scsi_Host *shost) | |||
646 | return shost->shost_gendev.parent; | 648 | return shost->shost_gendev.parent; |
647 | } | 649 | } |
648 | 650 | ||
651 | /** | ||
652 | * scsi_host_scan_allowed - Is scanning of this host allowed | ||
653 | * @shost: Pointer to Scsi_Host. | ||
654 | **/ | ||
655 | static inline int scsi_host_scan_allowed(struct Scsi_Host *shost) | ||
656 | { | ||
657 | return shost->shost_state == SHOST_RUNNING; | ||
658 | } | ||
659 | |||
649 | extern void scsi_unblock_requests(struct Scsi_Host *); | 660 | extern void scsi_unblock_requests(struct Scsi_Host *); |
650 | extern void scsi_block_requests(struct Scsi_Host *); | 661 | extern void scsi_block_requests(struct Scsi_Host *); |
651 | 662 | ||
@@ -663,5 +674,6 @@ extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *); | |||
663 | /* legacy interfaces */ | 674 | /* legacy interfaces */ |
664 | extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int); | 675 | extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int); |
665 | extern void scsi_unregister(struct Scsi_Host *); | 676 | extern void scsi_unregister(struct Scsi_Host *); |
677 | extern int scsi_host_set_state(struct Scsi_Host *, enum scsi_host_state); | ||
666 | 678 | ||
667 | #endif /* _SCSI_SCSI_HOST_H */ | 679 | #endif /* _SCSI_SCSI_HOST_H */ |
diff --git a/include/scsi/scsi_request.h b/include/scsi/scsi_request.h index 98719407d554..6a140020d7cb 100644 --- a/include/scsi/scsi_request.h +++ b/include/scsi/scsi_request.h | |||
@@ -54,20 +54,4 @@ extern void scsi_do_req(struct scsi_request *, const void *cmnd, | |||
54 | void *buffer, unsigned bufflen, | 54 | void *buffer, unsigned bufflen, |
55 | void (*done) (struct scsi_cmnd *), | 55 | void (*done) (struct scsi_cmnd *), |
56 | int timeout, int retries); | 56 | int timeout, int retries); |
57 | |||
58 | struct scsi_mode_data { | ||
59 | __u32 length; | ||
60 | __u16 block_descriptor_length; | ||
61 | __u8 medium_type; | ||
62 | __u8 device_specific; | ||
63 | __u8 header_length; | ||
64 | __u8 longlba:1; | ||
65 | }; | ||
66 | |||
67 | extern int __scsi_mode_sense(struct scsi_request *SRpnt, int dbd, | ||
68 | int modepage, unsigned char *buffer, int len, | ||
69 | int timeout, int retries, | ||
70 | struct scsi_mode_data *data); | ||
71 | |||
72 | |||
73 | #endif /* _SCSI_SCSI_REQUEST_H */ | 57 | #endif /* _SCSI_SCSI_REQUEST_H */ |
diff --git a/include/scsi/scsi_transport_spi.h b/include/scsi/scsi_transport_spi.h index a30d6cd4c0e8..6bdc4afb2483 100644 --- a/include/scsi/scsi_transport_spi.h +++ b/include/scsi/scsi_transport_spi.h | |||
@@ -39,6 +39,7 @@ struct spi_transport_attrs { | |||
39 | unsigned int rd_strm:1; /* Read streaming enabled */ | 39 | unsigned int rd_strm:1; /* Read streaming enabled */ |
40 | unsigned int rti:1; /* Retain Training Information */ | 40 | unsigned int rti:1; /* Retain Training Information */ |
41 | unsigned int pcomp_en:1;/* Precompensation enabled */ | 41 | unsigned int pcomp_en:1;/* Precompensation enabled */ |
42 | unsigned int hold_mcs:1;/* Hold Margin Control Settings */ | ||
42 | unsigned int initial_dv:1; /* DV done to this target yet */ | 43 | unsigned int initial_dv:1; /* DV done to this target yet */ |
43 | unsigned long flags; /* flags field for drivers to use */ | 44 | unsigned long flags; /* flags field for drivers to use */ |
44 | /* Device Properties fields */ | 45 | /* Device Properties fields */ |
@@ -78,6 +79,7 @@ struct spi_host_attrs { | |||
78 | #define spi_rd_strm(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rd_strm) | 79 | #define spi_rd_strm(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rd_strm) |
79 | #define spi_rti(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rti) | 80 | #define spi_rti(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rti) |
80 | #define spi_pcomp_en(x) (((struct spi_transport_attrs *)&(x)->starget_data)->pcomp_en) | 81 | #define spi_pcomp_en(x) (((struct spi_transport_attrs *)&(x)->starget_data)->pcomp_en) |
82 | #define spi_hold_mcs(x) (((struct spi_transport_attrs *)&(x)->starget_data)->hold_mcs) | ||
81 | #define spi_initial_dv(x) (((struct spi_transport_attrs *)&(x)->starget_data)->initial_dv) | 83 | #define spi_initial_dv(x) (((struct spi_transport_attrs *)&(x)->starget_data)->initial_dv) |
82 | 84 | ||
83 | #define spi_support_sync(x) (((struct spi_transport_attrs *)&(x)->starget_data)->support_sync) | 85 | #define spi_support_sync(x) (((struct spi_transport_attrs *)&(x)->starget_data)->support_sync) |
@@ -114,8 +116,11 @@ struct spi_function_template { | |||
114 | void (*set_rti)(struct scsi_target *, int); | 116 | void (*set_rti)(struct scsi_target *, int); |
115 | void (*get_pcomp_en)(struct scsi_target *); | 117 | void (*get_pcomp_en)(struct scsi_target *); |
116 | void (*set_pcomp_en)(struct scsi_target *, int); | 118 | void (*set_pcomp_en)(struct scsi_target *, int); |
119 | void (*get_hold_mcs)(struct scsi_target *); | ||
120 | void (*set_hold_mcs)(struct scsi_target *, int); | ||
117 | void (*get_signalling)(struct Scsi_Host *); | 121 | void (*get_signalling)(struct Scsi_Host *); |
118 | void (*set_signalling)(struct Scsi_Host *, enum spi_signal_type); | 122 | void (*set_signalling)(struct Scsi_Host *, enum spi_signal_type); |
123 | int (*deny_binding)(struct scsi_target *); | ||
119 | /* The driver sets these to tell the transport class it | 124 | /* The driver sets these to tell the transport class it |
120 | * wants the attributes displayed in sysfs. If the show_ flag | 125 | * wants the attributes displayed in sysfs. If the show_ flag |
121 | * is not set, the attribute will be private to the transport | 126 | * is not set, the attribute will be private to the transport |
@@ -130,6 +135,7 @@ struct spi_function_template { | |||
130 | unsigned long show_rd_strm:1; | 135 | unsigned long show_rd_strm:1; |
131 | unsigned long show_rti:1; | 136 | unsigned long show_rti:1; |
132 | unsigned long show_pcomp_en:1; | 137 | unsigned long show_pcomp_en:1; |
138 | unsigned long show_hold_mcs:1; | ||
133 | }; | 139 | }; |
134 | 140 | ||
135 | struct scsi_transport_template *spi_attach_transport(struct spi_function_template *); | 141 | struct scsi_transport_template *spi_attach_transport(struct spi_function_template *); |