1#ifndef _SCSI_DISK_H
2#define _SCSI_DISK_H
3
4
5
6
7
8
9#define SD_MAJORS 16
10
11
12
13
14
15#define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26)
16
17
18
19
20#define SD_TIMEOUT (30 * HZ)
21#define SD_MOD_TIMEOUT (75 * HZ)
22
23
24
25
26#define SD_MAX_RETRIES 5
27#define SD_PASSTHROUGH_RETRIES 1
28
29
30
31
32#define SD_BUF_SIZE 512
33
34
35
36
37
38#define SD_LAST_BUGGY_SECTORS 8
39
40enum {
41 SD_EXT_CDB_SIZE = 32,
42 SD_MEMPOOL_SIZE = 2,
43};
44
45struct scsi_disk {
46 struct scsi_driver *driver;
47 struct scsi_device *device;
48 struct device dev;
49 struct gendisk *disk;
50 unsigned int openers;
51 sector_t capacity;
52 u32 index;
53 unsigned short hw_sector_size;
54 u8 media_present;
55 u8 write_prot;
56 u8 protection_type;
57 unsigned previous_state : 1;
58 unsigned ATO : 1;
59 unsigned WCE : 1;
60 unsigned RCD : 1;
61 unsigned DPOFUA : 1;
62 unsigned first_scan : 1;
63};
64#define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
65
66static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
67{
68 return container_of(disk->private_data, struct scsi_disk, driver);
69}
70
71#define sd_printk(prefix, sdsk, fmt, a...) \
72 (sdsk)->disk ? \
73 sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \
74 (sdsk)->disk->disk_name, ##a) : \
75 sdev_printk(prefix, (sdsk)->device, fmt, ##a)
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91enum sd_dif_target_protection_types {
92 SD_DIF_TYPE0_PROTECTION = 0x0,
93 SD_DIF_TYPE1_PROTECTION = 0x1,
94 SD_DIF_TYPE2_PROTECTION = 0x2,
95 SD_DIF_TYPE3_PROTECTION = 0x3,
96};
97
98
99
100
101struct sd_dif_tuple {
102 __be16 guard_tag;
103 __be16 app_tag;
104 __be32 ref_tag;
105};
106
107#ifdef CONFIG_BLK_DEV_INTEGRITY
108
109extern void sd_dif_config_host(struct scsi_disk *);
110extern int sd_dif_prepare(struct request *rq, sector_t, unsigned int);
111extern void sd_dif_complete(struct scsi_cmnd *, unsigned int);
112
113#else
114
115static inline void sd_dif_config_host(struct scsi_disk *disk)
116{
117}
118static inline int sd_dif_prepare(struct request *rq, sector_t s, unsigned int a)
119{
120 return 0;
121}
122static inline void sd_dif_complete(struct scsi_cmnd *cmd, unsigned int a)
123{
124}
125
126#endif
127
128#endif
129