1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#ifndef __MTIP32XX_H__
22#define __MTIP32XX_H__
23
24#include <linux/spinlock.h>
25#include <linux/rwsem.h>
26#include <linux/ata.h>
27#include <linux/interrupt.h>
28#include <linux/genhd.h>
29
30
31#define PCI_SUBSYSTEM_DEVICEID 0x2E
32
33
34#define PCIE_CONFIG_EXT_DEVICE_CONTROL_OFFSET 0x48
35
36
37#define MTIP_SEC_ERASE_MODE 0x2
38
39
40#define MTIP_MAX_RETRIES 2
41
42
43#define MTIP_NCQ_CMD_TIMEOUT_MS 15000
44#define MTIP_IOCTL_CMD_TIMEOUT_MS 5000
45#define MTIP_INT_CMD_TIMEOUT_MS 5000
46#define MTIP_QUIESCE_IO_TIMEOUT_MS (MTIP_NCQ_CMD_TIMEOUT_MS * \
47 (MTIP_MAX_RETRIES + 1))
48
49
50#define MTIP_TIMEOUT_CHECK_PERIOD 500
51
52
53#define MTIP_FTL_REBUILD_OFFSET 142
54#define MTIP_FTL_REBUILD_MAGIC 0xED51
55#define MTIP_FTL_REBUILD_TIMEOUT_MS 2400000
56
57
58#define MTIP_MAX_UNALIGNED_SLOTS 2
59
60
61#define MTIP_TAG_BIT(tag) (tag & 0x1F)
62
63
64
65
66
67
68#define MTIP_TAG_INDEX(tag) (tag >> 5)
69
70
71
72
73
74#define MTIP_MAX_SG 504
75
76
77
78
79
80#define MTIP_MAX_SLOT_GROUPS 8
81
82
83#define MTIP_TAG_INTERNAL 0
84
85
86#define PCI_VENDOR_ID_MICRON 0x1344
87#define P320H_DEVICE_ID 0x5150
88#define P320M_DEVICE_ID 0x5151
89#define P320S_DEVICE_ID 0x5152
90#define P325M_DEVICE_ID 0x5153
91#define P420H_DEVICE_ID 0x5160
92#define P420M_DEVICE_ID 0x5161
93#define P425M_DEVICE_ID 0x5163
94
95
96#define MTIP_DRV_NAME "mtip32xx"
97#define MTIP_DRV_VERSION "1.3.1"
98
99
100#define MTIP_MAX_MINORS 16
101
102
103#define MTIP_MAX_COMMAND_SLOTS (MTIP_MAX_SLOT_GROUPS * 32)
104
105
106
107
108
109
110
111
112
113#define U32_PER_LONG (sizeof(long) / sizeof(u32))
114#define SLOTBITS_IN_LONGS ((MTIP_MAX_SLOT_GROUPS + \
115 (U32_PER_LONG-1))/U32_PER_LONG)
116
117
118#define MTIP_ABAR 5
119
120#ifdef DEBUG
121 #define dbg_printk(format, arg...) \
122 printk(pr_fmt(format), ##arg);
123#else
124 #define dbg_printk(format, arg...)
125#endif
126
127#define MTIP_DFS_MAX_BUF_SIZE 1024
128
129#define __force_bit2int (unsigned int __force)
130
131enum {
132
133 MTIP_PF_IC_ACTIVE_BIT = 0,
134 MTIP_PF_EH_ACTIVE_BIT = 1,
135 MTIP_PF_SE_ACTIVE_BIT = 2,
136 MTIP_PF_DM_ACTIVE_BIT = 3,
137 MTIP_PF_TO_ACTIVE_BIT = 9,
138 MTIP_PF_PAUSE_IO = ((1 << MTIP_PF_IC_ACTIVE_BIT) |
139 (1 << MTIP_PF_EH_ACTIVE_BIT) |
140 (1 << MTIP_PF_SE_ACTIVE_BIT) |
141 (1 << MTIP_PF_DM_ACTIVE_BIT) |
142 (1 << MTIP_PF_TO_ACTIVE_BIT)),
143 MTIP_PF_HOST_CAP_64 = 10,
144
145 MTIP_PF_SVC_THD_ACTIVE_BIT = 4,
146 MTIP_PF_ISSUE_CMDS_BIT = 5,
147 MTIP_PF_REBUILD_BIT = 6,
148 MTIP_PF_SVC_THD_STOP_BIT = 8,
149
150 MTIP_PF_SVC_THD_WORK = ((1 << MTIP_PF_EH_ACTIVE_BIT) |
151 (1 << MTIP_PF_ISSUE_CMDS_BIT) |
152 (1 << MTIP_PF_REBUILD_BIT) |
153 (1 << MTIP_PF_SVC_THD_STOP_BIT) |
154 (1 << MTIP_PF_TO_ACTIVE_BIT)),
155
156
157 MTIP_DDF_SEC_LOCK_BIT = 0,
158 MTIP_DDF_REMOVE_PENDING_BIT = 1,
159 MTIP_DDF_OVER_TEMP_BIT = 2,
160 MTIP_DDF_WRITE_PROTECT_BIT = 3,
161 MTIP_DDF_CLEANUP_BIT = 5,
162 MTIP_DDF_RESUME_BIT = 6,
163 MTIP_DDF_INIT_DONE_BIT = 7,
164 MTIP_DDF_REBUILD_FAILED_BIT = 8,
165 MTIP_DDF_REMOVAL_BIT = 9,
166
167 MTIP_DDF_STOP_IO = ((1 << MTIP_DDF_REMOVE_PENDING_BIT) |
168 (1 << MTIP_DDF_SEC_LOCK_BIT) |
169 (1 << MTIP_DDF_OVER_TEMP_BIT) |
170 (1 << MTIP_DDF_WRITE_PROTECT_BIT) |
171 (1 << MTIP_DDF_REBUILD_FAILED_BIT)),
172
173};
174
175struct smart_attr {
176 u8 attr_id;
177 u16 flags;
178 u8 cur;
179 u8 worst;
180 u32 data;
181 u8 res[3];
182} __packed;
183
184struct mtip_work {
185 struct work_struct work;
186 void *port;
187 int cpu_binding;
188 u32 completed;
189} ____cacheline_aligned_in_smp;
190
191#define DEFINE_HANDLER(group) \
192 void mtip_workq_sdbf##group(struct work_struct *work) \
193 { \
194 struct mtip_work *w = (struct mtip_work *) work; \
195 mtip_workq_sdbfx(w->port, group, w->completed); \
196 }
197
198#define MTIP_TRIM_TIMEOUT_MS 240000
199#define MTIP_MAX_TRIM_ENTRIES 8
200#define MTIP_MAX_TRIM_ENTRY_LEN 0xfff8
201
202struct mtip_trim_entry {
203 u32 lba;
204 u16 rsvd;
205 u16 range;
206} __packed;
207
208struct mtip_trim {
209
210 struct mtip_trim_entry entry[MTIP_MAX_TRIM_ENTRIES];
211} __packed;
212
213
214struct host_to_dev_fis {
215
216
217
218
219
220
221
222
223
224
225
226 unsigned char type;
227 unsigned char opts;
228 unsigned char command;
229 unsigned char features;
230
231 union {
232 unsigned char lba_low;
233 unsigned char sector;
234 };
235 union {
236 unsigned char lba_mid;
237 unsigned char cyl_low;
238 };
239 union {
240 unsigned char lba_hi;
241 unsigned char cyl_hi;
242 };
243 union {
244 unsigned char device;
245 unsigned char head;
246 };
247
248 union {
249 unsigned char lba_low_ex;
250 unsigned char sector_ex;
251 };
252 union {
253 unsigned char lba_mid_ex;
254 unsigned char cyl_low_ex;
255 };
256 union {
257 unsigned char lba_hi_ex;
258 unsigned char cyl_hi_ex;
259 };
260 unsigned char features_ex;
261
262 unsigned char sect_count;
263 unsigned char sect_cnt_ex;
264 unsigned char res2;
265 unsigned char control;
266
267 unsigned int res3;
268};
269
270
271struct mtip_cmd_hdr {
272
273
274
275
276
277
278
279
280
281 unsigned int opts;
282
283 union {
284 unsigned int byte_count;
285 unsigned int status;
286 };
287
288
289
290
291 unsigned int ctba;
292
293
294
295
296 unsigned int ctbau;
297
298 unsigned int res[4];
299};
300
301
302struct mtip_cmd_sg {
303
304
305
306
307
308 unsigned int dba;
309
310
311
312
313 unsigned int dba_upper;
314
315 unsigned int reserved;
316
317
318
319
320
321
322 unsigned int info;
323};
324struct mtip_port;
325
326
327struct mtip_cmd {
328
329 struct mtip_cmd_hdr *command_header;
330
331 dma_addr_t command_header_dma;
332
333 void *command;
334
335 dma_addr_t command_dma;
336
337 int scatter_ents;
338
339 int unaligned;
340
341 struct scatterlist sg[MTIP_MAX_SG];
342
343 int retries;
344
345 int direction;
346 blk_status_t status;
347};
348
349
350struct mtip_port {
351
352 struct driver_data *dd;
353
354
355
356
357 unsigned long identify_valid;
358
359 void __iomem *mmio;
360
361 void __iomem *s_active[MTIP_MAX_SLOT_GROUPS];
362
363 void __iomem *completed[MTIP_MAX_SLOT_GROUPS];
364
365 void __iomem *cmd_issue[MTIP_MAX_SLOT_GROUPS];
366
367
368
369
370 void *command_list;
371
372
373
374
375 dma_addr_t command_list_dma;
376
377
378
379
380 void *rxfis;
381
382
383
384
385 dma_addr_t rxfis_dma;
386
387
388
389 void *block1;
390
391
392
393 dma_addr_t block1_dma;
394
395
396
397
398 u16 *identify;
399
400
401
402
403 dma_addr_t identify_dma;
404
405
406
407
408 u16 *sector_buffer;
409
410
411
412
413 dma_addr_t sector_buffer_dma;
414
415 u16 *log_buf;
416 dma_addr_t log_buf_dma;
417
418 u8 *smart_buf;
419 dma_addr_t smart_buf_dma;
420
421
422
423
424
425 unsigned long cmds_to_issue[SLOTBITS_IN_LONGS];
426
427 wait_queue_head_t svc_wait;
428
429
430
431
432 unsigned long flags;
433
434
435
436 unsigned long ic_pause_timer;
437
438
439 struct semaphore cmd_slot_unal;
440
441
442 spinlock_t cmd_issue_lock[MTIP_MAX_SLOT_GROUPS];
443};
444
445
446
447
448
449
450struct driver_data {
451 void __iomem *mmio;
452
453 int major;
454
455 int instance;
456
457 struct gendisk *disk;
458
459 struct pci_dev *pdev;
460
461 struct request_queue *queue;
462
463 struct blk_mq_tag_set tags;
464
465 struct mtip_port *port;
466
467 unsigned product_type;
468
469 unsigned slot_groups;
470
471 unsigned long index;
472
473 unsigned long dd_flag;
474
475 struct task_struct *mtip_svc_handler;
476
477 struct dentry *dfs_node;
478
479 bool trim_supp;
480
481 bool sr;
482
483 int numa_node;
484
485 char workq_name[32];
486
487 struct workqueue_struct *isr_workq;
488
489 atomic_t irq_workers_active;
490
491 struct mtip_work work[MTIP_MAX_SLOT_GROUPS];
492
493 int isr_binding;
494
495 struct block_device *bdev;
496
497 struct list_head online_list;
498
499 struct list_head remove_list;
500
501 int unal_qdepth;
502};
503
504#endif
505