Line data Source code
1 : #ifndef _SCSI_DISK_H
2 : #define _SCSI_DISK_H
3 :
4 : /*
5 : * More than enough for everybody ;) The huge number of majors
6 : * is a leftover from 16bit dev_t days, we don't really need that
7 : * much numberspace.
8 : */
9 : #define SD_MAJORS 16
10 :
11 : /*
12 : * This is limited by the naming scheme enforced in sd_probe,
13 : * add another character to it if you really need more disks.
14 : */
15 : #define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26)
16 :
17 : /*
18 : * Time out in seconds for disks and Magneto-opticals (which are slower).
19 : */
20 : #define SD_TIMEOUT (30 * HZ)
21 : #define SD_MOD_TIMEOUT (75 * HZ)
22 :
23 : /*
24 : * Number of allowed retries
25 : */
26 : #define SD_MAX_RETRIES 5
27 : #define SD_PASSTHROUGH_RETRIES 1
28 :
29 : /*
30 : * Size of the initial data buffer for mode and read capacity data
31 : */
32 : #define SD_BUF_SIZE 512
33 :
34 : /*
35 : * Number of sectors at the end of the device to avoid multi-sector
36 : * accesses to in the case of last_sector_bug
37 : */
38 : #define SD_LAST_BUGGY_SECTORS 8
39 :
40 : enum {
41 : SD_EXT_CDB_SIZE = 32, /* Extended CDB size */
42 : SD_MEMPOOL_SIZE = 2, /* CDB pool size */
43 : };
44 :
45 : struct scsi_disk {
46 : struct scsi_driver *driver; /* always &sd_template */
47 : struct scsi_device *device;
48 : struct device dev;
49 : struct gendisk *disk;
50 : unsigned int openers; /* protected by BKL for now, yuck */
51 : sector_t capacity; /* size in 512-byte sectors */
52 : u32 index;
53 : unsigned short hw_sector_size;
54 : u8 media_present;
55 : u8 write_prot;
56 : u8 protection_type;/* Data Integrity Field */
57 : unsigned previous_state : 1;
58 : unsigned ATO : 1; /* state of disk ATO bit */
59 : unsigned WCE : 1; /* state of disk WCE bit */
60 : unsigned RCD : 1; /* state of disk RCD bit, unused */
61 : unsigned DPOFUA : 1; /* state of disk DPOFUA bit */
62 : unsigned first_scan : 1;
63 : unsigned thin_provisioning : 1;
64 : unsigned unmap : 1;
65 : };
66 : #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
67 :
68 : static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
69 : {
70 0 : return container_of(disk->private_data, struct scsi_disk, driver);
71 : }
72 :
73 : #define sd_printk(prefix, sdsk, fmt, a...) \
74 : (sdsk)->disk ? \
75 : sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \
76 : (sdsk)->disk->disk_name, ##a) : \
77 : sdev_printk(prefix, (sdsk)->device, fmt, ##a)
78 :
79 : /*
80 : * A DIF-capable target device can be formatted with different
81 : * protection schemes. Currently 0 through 3 are defined:
82 : *
83 : * Type 0 is regular (unprotected) I/O
84 : *
85 : * Type 1 defines the contents of the guard and reference tags
86 : *
87 : * Type 2 defines the contents of the guard and reference tags and
88 : * uses 32-byte commands to seed the latter
89 : *
90 : * Type 3 defines the contents of the guard tag only
91 : */
92 :
93 : enum sd_dif_target_protection_types {
94 : SD_DIF_TYPE0_PROTECTION = 0x0,
95 : SD_DIF_TYPE1_PROTECTION = 0x1,
96 : SD_DIF_TYPE2_PROTECTION = 0x2,
97 : SD_DIF_TYPE3_PROTECTION = 0x3,
98 : };
99 :
100 : /*
101 : * Data Integrity Field tuple.
102 : */
103 : struct sd_dif_tuple {
104 : __be16 guard_tag; /* Checksum */
105 : __be16 app_tag; /* Opaque storage */
106 : __be32 ref_tag; /* Target LBA or indirect LBA */
107 : };
108 :
109 : #ifdef CONFIG_BLK_DEV_INTEGRITY
110 :
111 : extern void sd_dif_config_host(struct scsi_disk *);
112 : extern int sd_dif_prepare(struct request *rq, sector_t, unsigned int);
113 : extern void sd_dif_complete(struct scsi_cmnd *, unsigned int);
114 :
115 : #else /* CONFIG_BLK_DEV_INTEGRITY */
116 :
117 : static inline void sd_dif_config_host(struct scsi_disk *disk)
118 : {
119 : }
120 : static inline int sd_dif_prepare(struct request *rq, sector_t s, unsigned int a)
121 : {
122 : return 0;
123 : }
124 : static inline void sd_dif_complete(struct scsi_cmnd *cmd, unsigned int a)
125 : {
126 : }
127 :
128 : #endif /* CONFIG_BLK_DEV_INTEGRITY */
129 :
130 : #endif /* _SCSI_DISK_H */
|