Merge tag 'driver-core-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / scsi / myrb.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Linux Driver for Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers
4  *
5  * Copyright 2017 Hannes Reinecke, SUSE Linux GmbH <hare@suse.com>
6  *
7  * Based on the original DAC960 driver,
8  * Copyright 1998-2001 by Leonard N. Zubkoff <lnz@dandelion.com>
9  * Portions Copyright 2002 by Mylex (An IBM Business Unit)
10  *
11  */
12
13 #include <linux/module.h>
14 #include <linux/types.h>
15 #include <linux/delay.h>
16 #include <linux/interrupt.h>
17 #include <linux/pci.h>
18 #include <linux/raid_class.h>
19 #include <asm/unaligned.h>
20 #include <scsi/scsi.h>
21 #include <scsi/scsi_host.h>
22 #include <scsi/scsi_device.h>
23 #include <scsi/scsi_cmnd.h>
24 #include <scsi/scsi_tcq.h>
25 #include "myrb.h"
26
27 static struct raid_template *myrb_raid_template;
28
29 static void myrb_monitor(struct work_struct *work);
30 static inline void myrb_translate_devstate(void *DeviceState);
31
32 static inline int myrb_logical_channel(struct Scsi_Host *shost)
33 {
34         return shost->max_channel - 1;
35 }
36
37 static struct myrb_devstate_name_entry {
38         enum myrb_devstate state;
39         const char *name;
40 } myrb_devstate_name_list[] = {
41         { MYRB_DEVICE_DEAD, "Dead" },
42         { MYRB_DEVICE_WO, "WriteOnly" },
43         { MYRB_DEVICE_ONLINE, "Online" },
44         { MYRB_DEVICE_CRITICAL, "Critical" },
45         { MYRB_DEVICE_STANDBY, "Standby" },
46         { MYRB_DEVICE_OFFLINE, "Offline" },
47 };
48
49 static const char *myrb_devstate_name(enum myrb_devstate state)
50 {
51         struct myrb_devstate_name_entry *entry = myrb_devstate_name_list;
52         int i;
53
54         for (i = 0; i < ARRAY_SIZE(myrb_devstate_name_list); i++) {
55                 if (entry[i].state == state)
56                         return entry[i].name;
57         }
58         return "Unknown";
59 }
60
61 static struct myrb_raidlevel_name_entry {
62         enum myrb_raidlevel level;
63         const char *name;
64 } myrb_raidlevel_name_list[] = {
65         { MYRB_RAID_LEVEL0, "RAID0" },
66         { MYRB_RAID_LEVEL1, "RAID1" },
67         { MYRB_RAID_LEVEL3, "RAID3" },
68         { MYRB_RAID_LEVEL5, "RAID5" },
69         { MYRB_RAID_LEVEL6, "RAID6" },
70         { MYRB_RAID_JBOD, "JBOD" },
71 };
72
73 static const char *myrb_raidlevel_name(enum myrb_raidlevel level)
74 {
75         struct myrb_raidlevel_name_entry *entry = myrb_raidlevel_name_list;
76         int i;
77
78         for (i = 0; i < ARRAY_SIZE(myrb_raidlevel_name_list); i++) {
79                 if (entry[i].level == level)
80                         return entry[i].name;
81         }
82         return NULL;
83 }
84
85 /*
86  * myrb_create_mempools - allocates auxiliary data structures
87  *
88  * Return: true on success, false otherwise.
89  */
90 static bool myrb_create_mempools(struct pci_dev *pdev, struct myrb_hba *cb)
91 {
92         size_t elem_size, elem_align;
93
94         elem_align = sizeof(struct myrb_sge);
95         elem_size = cb->host->sg_tablesize * elem_align;
96         cb->sg_pool = dma_pool_create("myrb_sg", &pdev->dev,
97                                       elem_size, elem_align, 0);
98         if (cb->sg_pool == NULL) {
99                 shost_printk(KERN_ERR, cb->host,
100                              "Failed to allocate SG pool\n");
101                 return false;
102         }
103
104         cb->dcdb_pool = dma_pool_create("myrb_dcdb", &pdev->dev,
105                                        sizeof(struct myrb_dcdb),
106                                        sizeof(unsigned int), 0);
107         if (!cb->dcdb_pool) {
108                 dma_pool_destroy(cb->sg_pool);
109                 cb->sg_pool = NULL;
110                 shost_printk(KERN_ERR, cb->host,
111                              "Failed to allocate DCDB pool\n");
112                 return false;
113         }
114
115         snprintf(cb->work_q_name, sizeof(cb->work_q_name),
116                  "myrb_wq_%d", cb->host->host_no);
117         cb->work_q = create_singlethread_workqueue(cb->work_q_name);
118         if (!cb->work_q) {
119                 dma_pool_destroy(cb->dcdb_pool);
120                 cb->dcdb_pool = NULL;
121                 dma_pool_destroy(cb->sg_pool);
122                 cb->sg_pool = NULL;
123                 shost_printk(KERN_ERR, cb->host,
124                              "Failed to create workqueue\n");
125                 return false;
126         }
127
128         /*
129          * Initialize the Monitoring Timer.
130          */
131         INIT_DELAYED_WORK(&cb->monitor_work, myrb_monitor);
132         queue_delayed_work(cb->work_q, &cb->monitor_work, 1);
133
134         return true;
135 }
136
137 /*
138  * myrb_destroy_mempools - tears down the memory pools for the controller
139  */
140 static void myrb_destroy_mempools(struct myrb_hba *cb)
141 {
142         cancel_delayed_work_sync(&cb->monitor_work);
143         destroy_workqueue(cb->work_q);
144
145         dma_pool_destroy(cb->sg_pool);
146         dma_pool_destroy(cb->dcdb_pool);
147 }
148
149 /*
150  * myrb_reset_cmd - reset command block
151  */
152 static inline void myrb_reset_cmd(struct myrb_cmdblk *cmd_blk)
153 {
154         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
155
156         memset(mbox, 0, sizeof(union myrb_cmd_mbox));
157         cmd_blk->status = 0;
158 }
159
160 /*
161  * myrb_qcmd - queues command block for execution
162  */
163 static void myrb_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk)
164 {
165         void __iomem *base = cb->io_base;
166         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
167         union myrb_cmd_mbox *next_mbox = cb->next_cmd_mbox;
168
169         cb->write_cmd_mbox(next_mbox, mbox);
170         if (cb->prev_cmd_mbox1->words[0] == 0 ||
171             cb->prev_cmd_mbox2->words[0] == 0)
172                 cb->get_cmd_mbox(base);
173         cb->prev_cmd_mbox2 = cb->prev_cmd_mbox1;
174         cb->prev_cmd_mbox1 = next_mbox;
175         if (++next_mbox > cb->last_cmd_mbox)
176                 next_mbox = cb->first_cmd_mbox;
177         cb->next_cmd_mbox = next_mbox;
178 }
179
180 /*
181  * myrb_exec_cmd - executes command block and waits for completion.
182  *
183  * Return: command status
184  */
185 static unsigned short myrb_exec_cmd(struct myrb_hba *cb,
186                 struct myrb_cmdblk *cmd_blk)
187 {
188         DECLARE_COMPLETION_ONSTACK(cmpl);
189         unsigned long flags;
190
191         cmd_blk->completion = &cmpl;
192
193         spin_lock_irqsave(&cb->queue_lock, flags);
194         cb->qcmd(cb, cmd_blk);
195         spin_unlock_irqrestore(&cb->queue_lock, flags);
196
197         wait_for_completion(&cmpl);
198         return cmd_blk->status;
199 }
200
201 /*
202  * myrb_exec_type3 - executes a type 3 command and waits for completion.
203  *
204  * Return: command status
205  */
206 static unsigned short myrb_exec_type3(struct myrb_hba *cb,
207                 enum myrb_cmd_opcode op, dma_addr_t addr)
208 {
209         struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk;
210         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
211         unsigned short status;
212
213         mutex_lock(&cb->dcmd_mutex);
214         myrb_reset_cmd(cmd_blk);
215         mbox->type3.id = MYRB_DCMD_TAG;
216         mbox->type3.opcode = op;
217         mbox->type3.addr = addr;
218         status = myrb_exec_cmd(cb, cmd_blk);
219         mutex_unlock(&cb->dcmd_mutex);
220         return status;
221 }
222
223 /*
224  * myrb_exec_type3D - executes a type 3D command and waits for completion.
225  *
226  * Return: command status
227  */
228 static unsigned short myrb_exec_type3D(struct myrb_hba *cb,
229                 enum myrb_cmd_opcode op, struct scsi_device *sdev,
230                 struct myrb_pdev_state *pdev_info)
231 {
232         struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk;
233         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
234         unsigned short status;
235         dma_addr_t pdev_info_addr;
236
237         pdev_info_addr = dma_map_single(&cb->pdev->dev, pdev_info,
238                                         sizeof(struct myrb_pdev_state),
239                                         DMA_FROM_DEVICE);
240         if (dma_mapping_error(&cb->pdev->dev, pdev_info_addr))
241                 return MYRB_STATUS_SUBSYS_FAILED;
242
243         mutex_lock(&cb->dcmd_mutex);
244         myrb_reset_cmd(cmd_blk);
245         mbox->type3D.id = MYRB_DCMD_TAG;
246         mbox->type3D.opcode = op;
247         mbox->type3D.channel = sdev->channel;
248         mbox->type3D.target = sdev->id;
249         mbox->type3D.addr = pdev_info_addr;
250         status = myrb_exec_cmd(cb, cmd_blk);
251         mutex_unlock(&cb->dcmd_mutex);
252         dma_unmap_single(&cb->pdev->dev, pdev_info_addr,
253                          sizeof(struct myrb_pdev_state), DMA_FROM_DEVICE);
254         if (status == MYRB_STATUS_SUCCESS &&
255             mbox->type3D.opcode == MYRB_CMD_GET_DEVICE_STATE_OLD)
256                 myrb_translate_devstate(pdev_info);
257
258         return status;
259 }
260
261 static char *myrb_event_msg[] = {
262         "killed because write recovery failed",
263         "killed because of SCSI bus reset failure",
264         "killed because of double check condition",
265         "killed because it was removed",
266         "killed because of gross error on SCSI chip",
267         "killed because of bad tag returned from drive",
268         "killed because of timeout on SCSI command",
269         "killed because of reset SCSI command issued from system",
270         "killed because busy or parity error count exceeded limit",
271         "killed because of 'kill drive' command from system",
272         "killed because of selection timeout",
273         "killed due to SCSI phase sequence error",
274         "killed due to unknown status",
275 };
276
277 /**
278  * myrb_get_event - get event log from HBA
279  * @cb: pointer to the hba structure
280  * @event: number of the event
281  *
282  * Execute a type 3E command and logs the event message
283  */
284 static void myrb_get_event(struct myrb_hba *cb, unsigned int event)
285 {
286         struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk;
287         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
288         struct myrb_log_entry *ev_buf;
289         dma_addr_t ev_addr;
290         unsigned short status;
291
292         ev_buf = dma_alloc_coherent(&cb->pdev->dev,
293                                     sizeof(struct myrb_log_entry),
294                                     &ev_addr, GFP_KERNEL);
295         if (!ev_buf)
296                 return;
297
298         myrb_reset_cmd(cmd_blk);
299         mbox->type3E.id = MYRB_MCMD_TAG;
300         mbox->type3E.opcode = MYRB_CMD_EVENT_LOG_OPERATION;
301         mbox->type3E.optype = DAC960_V1_GetEventLogEntry;
302         mbox->type3E.opqual = 1;
303         mbox->type3E.ev_seq = event;
304         mbox->type3E.addr = ev_addr;
305         status = myrb_exec_cmd(cb, cmd_blk);
306         if (status != MYRB_STATUS_SUCCESS)
307                 shost_printk(KERN_INFO, cb->host,
308                              "Failed to get event log %d, status %04x\n",
309                              event, status);
310
311         else if (ev_buf->seq_num == event) {
312                 struct scsi_sense_hdr sshdr;
313
314                 memset(&sshdr, 0, sizeof(sshdr));
315                 scsi_normalize_sense(ev_buf->sense, 32, &sshdr);
316
317                 if (sshdr.sense_key == VENDOR_SPECIFIC &&
318                     sshdr.asc == 0x80 &&
319                     sshdr.ascq < ARRAY_SIZE(myrb_event_msg))
320                         shost_printk(KERN_CRIT, cb->host,
321                                      "Physical drive %d:%d: %s\n",
322                                      ev_buf->channel, ev_buf->target,
323                                      myrb_event_msg[sshdr.ascq]);
324                 else
325                         shost_printk(KERN_CRIT, cb->host,
326                                      "Physical drive %d:%d: Sense: %X/%02X/%02X\n",
327                                      ev_buf->channel, ev_buf->target,
328                                      sshdr.sense_key, sshdr.asc, sshdr.ascq);
329         }
330
331         dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_log_entry),
332                           ev_buf, ev_addr);
333 }
334
335 /*
336  * myrb_get_errtable - retrieves the error table from the controller
337  *
338  * Executes a type 3 command and logs the error table from the controller.
339  */
340 static void myrb_get_errtable(struct myrb_hba *cb)
341 {
342         struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk;
343         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
344         unsigned short status;
345         struct myrb_error_entry old_table[MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS];
346
347         memcpy(&old_table, cb->err_table, sizeof(old_table));
348
349         myrb_reset_cmd(cmd_blk);
350         mbox->type3.id = MYRB_MCMD_TAG;
351         mbox->type3.opcode = MYRB_CMD_GET_ERROR_TABLE;
352         mbox->type3.addr = cb->err_table_addr;
353         status = myrb_exec_cmd(cb, cmd_blk);
354         if (status == MYRB_STATUS_SUCCESS) {
355                 struct myrb_error_entry *table = cb->err_table;
356                 struct myrb_error_entry *new, *old;
357                 size_t err_table_offset;
358                 struct scsi_device *sdev;
359
360                 shost_for_each_device(sdev, cb->host) {
361                         if (sdev->channel >= myrb_logical_channel(cb->host))
362                                 continue;
363                         err_table_offset = sdev->channel * MYRB_MAX_TARGETS
364                                 + sdev->id;
365                         new = table + err_table_offset;
366                         old = &old_table[err_table_offset];
367                         if (new->parity_err == old->parity_err &&
368                             new->soft_err == old->soft_err &&
369                             new->hard_err == old->hard_err &&
370                             new->misc_err == old->misc_err)
371                                 continue;
372                         sdev_printk(KERN_CRIT, sdev,
373                                     "Errors: Parity = %d, Soft = %d, Hard = %d, Misc = %d\n",
374                                     new->parity_err, new->soft_err,
375                                     new->hard_err, new->misc_err);
376                 }
377         }
378 }
379
380 /*
381  * myrb_get_ldev_info - retrieves the logical device table from the controller
382  *
383  * Executes a type 3 command and updates the logical device table.
384  *
385  * Return: command status
386  */
387 static unsigned short myrb_get_ldev_info(struct myrb_hba *cb)
388 {
389         unsigned short status;
390         int ldev_num, ldev_cnt = cb->enquiry->ldev_count;
391         struct Scsi_Host *shost = cb->host;
392
393         status = myrb_exec_type3(cb, MYRB_CMD_GET_LDEV_INFO,
394                                  cb->ldev_info_addr);
395         if (status != MYRB_STATUS_SUCCESS)
396                 return status;
397
398         for (ldev_num = 0; ldev_num < ldev_cnt; ldev_num++) {
399                 struct myrb_ldev_info *old = NULL;
400                 struct myrb_ldev_info *new = cb->ldev_info_buf + ldev_num;
401                 struct scsi_device *sdev;
402
403                 sdev = scsi_device_lookup(shost, myrb_logical_channel(shost),
404                                           ldev_num, 0);
405                 if (!sdev) {
406                         if (new->state == MYRB_DEVICE_OFFLINE)
407                                 continue;
408                         shost_printk(KERN_INFO, shost,
409                                      "Adding Logical Drive %d in state %s\n",
410                                      ldev_num, myrb_devstate_name(new->state));
411                         scsi_add_device(shost, myrb_logical_channel(shost),
412                                         ldev_num, 0);
413                         continue;
414                 }
415                 old = sdev->hostdata;
416                 if (new->state != old->state)
417                         shost_printk(KERN_INFO, shost,
418                                      "Logical Drive %d is now %s\n",
419                                      ldev_num, myrb_devstate_name(new->state));
420                 if (new->wb_enabled != old->wb_enabled)
421                         sdev_printk(KERN_INFO, sdev,
422                                     "Logical Drive is now WRITE %s\n",
423                                     (new->wb_enabled ? "BACK" : "THRU"));
424                 memcpy(old, new, sizeof(*new));
425                 scsi_device_put(sdev);
426         }
427         return status;
428 }
429
430 /*
431  * myrb_get_rbld_progress - get rebuild progress information
432  *
433  * Executes a type 3 command and returns the rebuild progress
434  * information.
435  *
436  * Return: command status
437  */
438 static unsigned short myrb_get_rbld_progress(struct myrb_hba *cb,
439                 struct myrb_rbld_progress *rbld)
440 {
441         struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk;
442         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
443         struct myrb_rbld_progress *rbld_buf;
444         dma_addr_t rbld_addr;
445         unsigned short status;
446
447         rbld_buf = dma_alloc_coherent(&cb->pdev->dev,
448                                       sizeof(struct myrb_rbld_progress),
449                                       &rbld_addr, GFP_KERNEL);
450         if (!rbld_buf)
451                 return MYRB_STATUS_RBLD_NOT_CHECKED;
452
453         myrb_reset_cmd(cmd_blk);
454         mbox->type3.id = MYRB_MCMD_TAG;
455         mbox->type3.opcode = MYRB_CMD_GET_REBUILD_PROGRESS;
456         mbox->type3.addr = rbld_addr;
457         status = myrb_exec_cmd(cb, cmd_blk);
458         if (rbld)
459                 memcpy(rbld, rbld_buf, sizeof(struct myrb_rbld_progress));
460         dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_rbld_progress),
461                           rbld_buf, rbld_addr);
462         return status;
463 }
464
465 /*
466  * myrb_update_rbld_progress - updates the rebuild status
467  *
468  * Updates the rebuild status for the attached logical devices.
469  */
470 static void myrb_update_rbld_progress(struct myrb_hba *cb)
471 {
472         struct myrb_rbld_progress rbld_buf;
473         unsigned short status;
474
475         status = myrb_get_rbld_progress(cb, &rbld_buf);
476         if (status == MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS &&
477             cb->last_rbld_status == MYRB_STATUS_SUCCESS)
478                 status = MYRB_STATUS_RBLD_SUCCESS;
479         if (status != MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS) {
480                 unsigned int blocks_done =
481                         rbld_buf.ldev_size - rbld_buf.blocks_left;
482                 struct scsi_device *sdev;
483
484                 sdev = scsi_device_lookup(cb->host,
485                                           myrb_logical_channel(cb->host),
486                                           rbld_buf.ldev_num, 0);
487                 if (!sdev)
488                         return;
489
490                 switch (status) {
491                 case MYRB_STATUS_SUCCESS:
492                         sdev_printk(KERN_INFO, sdev,
493                                     "Rebuild in Progress, %d%% completed\n",
494                                     (100 * (blocks_done >> 7))
495                                     / (rbld_buf.ldev_size >> 7));
496                         break;
497                 case MYRB_STATUS_RBLD_FAILED_LDEV_FAILURE:
498                         sdev_printk(KERN_INFO, sdev,
499                                     "Rebuild Failed due to Logical Drive Failure\n");
500                         break;
501                 case MYRB_STATUS_RBLD_FAILED_BADBLOCKS:
502                         sdev_printk(KERN_INFO, sdev,
503                                     "Rebuild Failed due to Bad Blocks on Other Drives\n");
504                         break;
505                 case MYRB_STATUS_RBLD_FAILED_NEW_DRIVE_FAILED:
506                         sdev_printk(KERN_INFO, sdev,
507                                     "Rebuild Failed due to Failure of Drive Being Rebuilt\n");
508                         break;
509                 case MYRB_STATUS_RBLD_SUCCESS:
510                         sdev_printk(KERN_INFO, sdev,
511                                     "Rebuild Completed Successfully\n");
512                         break;
513                 case MYRB_STATUS_RBLD_SUCCESS_TERMINATED:
514                         sdev_printk(KERN_INFO, sdev,
515                                      "Rebuild Successfully Terminated\n");
516                         break;
517                 default:
518                         break;
519                 }
520                 scsi_device_put(sdev);
521         }
522         cb->last_rbld_status = status;
523 }
524
525 /*
526  * myrb_get_cc_progress - retrieve the rebuild status
527  *
528  * Execute a type 3 Command and fetch the rebuild / consistency check
529  * status.
530  */
531 static void myrb_get_cc_progress(struct myrb_hba *cb)
532 {
533         struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk;
534         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
535         struct myrb_rbld_progress *rbld_buf;
536         dma_addr_t rbld_addr;
537         unsigned short status;
538
539         rbld_buf = dma_alloc_coherent(&cb->pdev->dev,
540                                       sizeof(struct myrb_rbld_progress),
541                                       &rbld_addr, GFP_KERNEL);
542         if (!rbld_buf) {
543                 cb->need_cc_status = true;
544                 return;
545         }
546         myrb_reset_cmd(cmd_blk);
547         mbox->type3.id = MYRB_MCMD_TAG;
548         mbox->type3.opcode = MYRB_CMD_REBUILD_STAT;
549         mbox->type3.addr = rbld_addr;
550         status = myrb_exec_cmd(cb, cmd_blk);
551         if (status == MYRB_STATUS_SUCCESS) {
552                 unsigned int ldev_num = rbld_buf->ldev_num;
553                 unsigned int ldev_size = rbld_buf->ldev_size;
554                 unsigned int blocks_done =
555                         ldev_size - rbld_buf->blocks_left;
556                 struct scsi_device *sdev;
557
558                 sdev = scsi_device_lookup(cb->host,
559                                           myrb_logical_channel(cb->host),
560                                           ldev_num, 0);
561                 if (sdev) {
562                         sdev_printk(KERN_INFO, sdev,
563                                     "Consistency Check in Progress: %d%% completed\n",
564                                     (100 * (blocks_done >> 7))
565                                     / (ldev_size >> 7));
566                         scsi_device_put(sdev);
567                 }
568         }
569         dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_rbld_progress),
570                           rbld_buf, rbld_addr);
571 }
572
573 /*
574  * myrb_bgi_control - updates background initialisation status
575  *
576  * Executes a type 3B command and updates the background initialisation status
577  */
578 static void myrb_bgi_control(struct myrb_hba *cb)
579 {
580         struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk;
581         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
582         struct myrb_bgi_status *bgi, *last_bgi;
583         dma_addr_t bgi_addr;
584         struct scsi_device *sdev = NULL;
585         unsigned short status;
586
587         bgi = dma_alloc_coherent(&cb->pdev->dev, sizeof(struct myrb_bgi_status),
588                                  &bgi_addr, GFP_KERNEL);
589         if (!bgi) {
590                 shost_printk(KERN_ERR, cb->host,
591                              "Failed to allocate bgi memory\n");
592                 return;
593         }
594         myrb_reset_cmd(cmd_blk);
595         mbox->type3B.id = MYRB_DCMD_TAG;
596         mbox->type3B.opcode = MYRB_CMD_BGI_CONTROL;
597         mbox->type3B.optype = 0x20;
598         mbox->type3B.addr = bgi_addr;
599         status = myrb_exec_cmd(cb, cmd_blk);
600         last_bgi = &cb->bgi_status;
601         sdev = scsi_device_lookup(cb->host,
602                                   myrb_logical_channel(cb->host),
603                                   bgi->ldev_num, 0);
604         switch (status) {
605         case MYRB_STATUS_SUCCESS:
606                 switch (bgi->status) {
607                 case MYRB_BGI_INVALID:
608                         break;
609                 case MYRB_BGI_STARTED:
610                         if (!sdev)
611                                 break;
612                         sdev_printk(KERN_INFO, sdev,
613                                     "Background Initialization Started\n");
614                         break;
615                 case MYRB_BGI_INPROGRESS:
616                         if (!sdev)
617                                 break;
618                         if (bgi->blocks_done == last_bgi->blocks_done &&
619                             bgi->ldev_num == last_bgi->ldev_num)
620                                 break;
621                         sdev_printk(KERN_INFO, sdev,
622                                  "Background Initialization in Progress: %d%% completed\n",
623                                  (100 * (bgi->blocks_done >> 7))
624                                  / (bgi->ldev_size >> 7));
625                         break;
626                 case MYRB_BGI_SUSPENDED:
627                         if (!sdev)
628                                 break;
629                         sdev_printk(KERN_INFO, sdev,
630                                     "Background Initialization Suspended\n");
631                         break;
632                 case MYRB_BGI_CANCELLED:
633                         if (!sdev)
634                                 break;
635                         sdev_printk(KERN_INFO, sdev,
636                                     "Background Initialization Cancelled\n");
637                         break;
638                 }
639                 memcpy(&cb->bgi_status, bgi, sizeof(struct myrb_bgi_status));
640                 break;
641         case MYRB_STATUS_BGI_SUCCESS:
642                 if (sdev && cb->bgi_status.status == MYRB_BGI_INPROGRESS)
643                         sdev_printk(KERN_INFO, sdev,
644                                     "Background Initialization Completed Successfully\n");
645                 cb->bgi_status.status = MYRB_BGI_INVALID;
646                 break;
647         case MYRB_STATUS_BGI_ABORTED:
648                 if (sdev && cb->bgi_status.status == MYRB_BGI_INPROGRESS)
649                         sdev_printk(KERN_INFO, sdev,
650                                     "Background Initialization Aborted\n");
651                 fallthrough;
652         case MYRB_STATUS_NO_BGI_INPROGRESS:
653                 cb->bgi_status.status = MYRB_BGI_INVALID;
654                 break;
655         }
656         if (sdev)
657                 scsi_device_put(sdev);
658         dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_bgi_status),
659                           bgi, bgi_addr);
660 }
661
662 /*
663  * myrb_hba_enquiry - updates the controller status
664  *
665  * Executes a DAC_V1_Enquiry command and updates the controller status.
666  *
667  * Return: command status
668  */
669 static unsigned short myrb_hba_enquiry(struct myrb_hba *cb)
670 {
671         struct myrb_enquiry old, *new;
672         unsigned short status;
673
674         memcpy(&old, cb->enquiry, sizeof(struct myrb_enquiry));
675
676         status = myrb_exec_type3(cb, MYRB_CMD_ENQUIRY, cb->enquiry_addr);
677         if (status != MYRB_STATUS_SUCCESS)
678                 return status;
679
680         new = cb->enquiry;
681         if (new->ldev_count > old.ldev_count) {
682                 int ldev_num = old.ldev_count - 1;
683
684                 while (++ldev_num < new->ldev_count)
685                         shost_printk(KERN_CRIT, cb->host,
686                                      "Logical Drive %d Now Exists\n",
687                                      ldev_num);
688         }
689         if (new->ldev_count < old.ldev_count) {
690                 int ldev_num = new->ldev_count - 1;
691
692                 while (++ldev_num < old.ldev_count)
693                         shost_printk(KERN_CRIT, cb->host,
694                                      "Logical Drive %d No Longer Exists\n",
695                                      ldev_num);
696         }
697         if (new->status.deferred != old.status.deferred)
698                 shost_printk(KERN_CRIT, cb->host,
699                              "Deferred Write Error Flag is now %s\n",
700                              (new->status.deferred ? "TRUE" : "FALSE"));
701         if (new->ev_seq != old.ev_seq) {
702                 cb->new_ev_seq = new->ev_seq;
703                 cb->need_err_info = true;
704                 shost_printk(KERN_INFO, cb->host,
705                              "Event log %d/%d (%d/%d) available\n",
706                              cb->old_ev_seq, cb->new_ev_seq,
707                              old.ev_seq, new->ev_seq);
708         }
709         if ((new->ldev_critical > 0 &&
710              new->ldev_critical != old.ldev_critical) ||
711             (new->ldev_offline > 0 &&
712              new->ldev_offline != old.ldev_offline) ||
713             (new->ldev_count != old.ldev_count)) {
714                 shost_printk(KERN_INFO, cb->host,
715                              "Logical drive count changed (%d/%d/%d)\n",
716                              new->ldev_critical,
717                              new->ldev_offline,
718                              new->ldev_count);
719                 cb->need_ldev_info = true;
720         }
721         if (new->pdev_dead > 0 ||
722             new->pdev_dead != old.pdev_dead ||
723             time_after_eq(jiffies, cb->secondary_monitor_time
724                           + MYRB_SECONDARY_MONITOR_INTERVAL)) {
725                 cb->need_bgi_status = cb->bgi_status_supported;
726                 cb->secondary_monitor_time = jiffies;
727         }
728         if (new->rbld == MYRB_STDBY_RBLD_IN_PROGRESS ||
729             new->rbld == MYRB_BG_RBLD_IN_PROGRESS ||
730             old.rbld == MYRB_STDBY_RBLD_IN_PROGRESS ||
731             old.rbld == MYRB_BG_RBLD_IN_PROGRESS) {
732                 cb->need_rbld = true;
733                 cb->rbld_first = (new->ldev_critical < old.ldev_critical);
734         }
735         if (old.rbld == MYRB_BG_CHECK_IN_PROGRESS)
736                 switch (new->rbld) {
737                 case MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS:
738                         shost_printk(KERN_INFO, cb->host,
739                                      "Consistency Check Completed Successfully\n");
740                         break;
741                 case MYRB_STDBY_RBLD_IN_PROGRESS:
742                 case MYRB_BG_RBLD_IN_PROGRESS:
743                         break;
744                 case MYRB_BG_CHECK_IN_PROGRESS:
745                         cb->need_cc_status = true;
746                         break;
747                 case MYRB_STDBY_RBLD_COMPLETED_WITH_ERROR:
748                         shost_printk(KERN_INFO, cb->host,
749                                      "Consistency Check Completed with Error\n");
750                         break;
751                 case MYRB_BG_RBLD_OR_CHECK_FAILED_DRIVE_FAILED:
752                         shost_printk(KERN_INFO, cb->host,
753                                      "Consistency Check Failed - Physical Device Failed\n");
754                         break;
755                 case MYRB_BG_RBLD_OR_CHECK_FAILED_LDEV_FAILED:
756                         shost_printk(KERN_INFO, cb->host,
757                                      "Consistency Check Failed - Logical Drive Failed\n");
758                         break;
759                 case MYRB_BG_RBLD_OR_CHECK_FAILED_OTHER:
760                         shost_printk(KERN_INFO, cb->host,
761                                      "Consistency Check Failed - Other Causes\n");
762                         break;
763                 case MYRB_BG_RBLD_OR_CHECK_SUCCESS_TERMINATED:
764                         shost_printk(KERN_INFO, cb->host,
765                                      "Consistency Check Successfully Terminated\n");
766                         break;
767                 }
768         else if (new->rbld == MYRB_BG_CHECK_IN_PROGRESS)
769                 cb->need_cc_status = true;
770
771         return MYRB_STATUS_SUCCESS;
772 }
773
774 /*
775  * myrb_set_pdev_state - sets the device state for a physical device
776  *
777  * Return: command status
778  */
779 static unsigned short myrb_set_pdev_state(struct myrb_hba *cb,
780                 struct scsi_device *sdev, enum myrb_devstate state)
781 {
782         struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk;
783         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
784         unsigned short status;
785
786         mutex_lock(&cb->dcmd_mutex);
787         mbox->type3D.opcode = MYRB_CMD_START_DEVICE;
788         mbox->type3D.id = MYRB_DCMD_TAG;
789         mbox->type3D.channel = sdev->channel;
790         mbox->type3D.target = sdev->id;
791         mbox->type3D.state = state & 0x1F;
792         status = myrb_exec_cmd(cb, cmd_blk);
793         mutex_unlock(&cb->dcmd_mutex);
794
795         return status;
796 }
797
798 /*
799  * myrb_enable_mmio - enables the Memory Mailbox Interface
800  *
801  * PD and P controller types have no memory mailbox, but still need the
802  * other dma mapped memory.
803  *
804  * Return: true on success, false otherwise.
805  */
806 static bool myrb_enable_mmio(struct myrb_hba *cb, mbox_mmio_init_t mmio_init_fn)
807 {
808         void __iomem *base = cb->io_base;
809         struct pci_dev *pdev = cb->pdev;
810         size_t err_table_size;
811         size_t ldev_info_size;
812         union myrb_cmd_mbox *cmd_mbox_mem;
813         struct myrb_stat_mbox *stat_mbox_mem;
814         union myrb_cmd_mbox mbox;
815         unsigned short status;
816
817         memset(&mbox, 0, sizeof(union myrb_cmd_mbox));
818
819         if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
820                 dev_err(&pdev->dev, "DMA mask out of range\n");
821                 return false;
822         }
823
824         cb->enquiry = dma_alloc_coherent(&pdev->dev,
825                                          sizeof(struct myrb_enquiry),
826                                          &cb->enquiry_addr, GFP_KERNEL);
827         if (!cb->enquiry)
828                 return false;
829
830         err_table_size = sizeof(struct myrb_error_entry) *
831                 MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS;
832         cb->err_table = dma_alloc_coherent(&pdev->dev, err_table_size,
833                                            &cb->err_table_addr, GFP_KERNEL);
834         if (!cb->err_table)
835                 return false;
836
837         ldev_info_size = sizeof(struct myrb_ldev_info) * MYRB_MAX_LDEVS;
838         cb->ldev_info_buf = dma_alloc_coherent(&pdev->dev, ldev_info_size,
839                                                &cb->ldev_info_addr, GFP_KERNEL);
840         if (!cb->ldev_info_buf)
841                 return false;
842
843         /*
844          * Skip mailbox initialisation for PD and P Controllers
845          */
846         if (!mmio_init_fn)
847                 return true;
848
849         /* These are the base addresses for the command memory mailbox array */
850         cb->cmd_mbox_size =  MYRB_CMD_MBOX_COUNT * sizeof(union myrb_cmd_mbox);
851         cb->first_cmd_mbox = dma_alloc_coherent(&pdev->dev,
852                                                 cb->cmd_mbox_size,
853                                                 &cb->cmd_mbox_addr,
854                                                 GFP_KERNEL);
855         if (!cb->first_cmd_mbox)
856                 return false;
857
858         cmd_mbox_mem = cb->first_cmd_mbox;
859         cmd_mbox_mem += MYRB_CMD_MBOX_COUNT - 1;
860         cb->last_cmd_mbox = cmd_mbox_mem;
861         cb->next_cmd_mbox = cb->first_cmd_mbox;
862         cb->prev_cmd_mbox1 = cb->last_cmd_mbox;
863         cb->prev_cmd_mbox2 = cb->last_cmd_mbox - 1;
864
865         /* These are the base addresses for the status memory mailbox array */
866         cb->stat_mbox_size = MYRB_STAT_MBOX_COUNT *
867             sizeof(struct myrb_stat_mbox);
868         cb->first_stat_mbox = dma_alloc_coherent(&pdev->dev,
869                                                  cb->stat_mbox_size,
870                                                  &cb->stat_mbox_addr,
871                                                  GFP_KERNEL);
872         if (!cb->first_stat_mbox)
873                 return false;
874
875         stat_mbox_mem = cb->first_stat_mbox;
876         stat_mbox_mem += MYRB_STAT_MBOX_COUNT - 1;
877         cb->last_stat_mbox = stat_mbox_mem;
878         cb->next_stat_mbox = cb->first_stat_mbox;
879
880         /* Enable the Memory Mailbox Interface. */
881         cb->dual_mode_interface = true;
882         mbox.typeX.opcode = 0x2B;
883         mbox.typeX.id = 0;
884         mbox.typeX.opcode2 = 0x14;
885         mbox.typeX.cmd_mbox_addr = cb->cmd_mbox_addr;
886         mbox.typeX.stat_mbox_addr = cb->stat_mbox_addr;
887
888         status = mmio_init_fn(pdev, base, &mbox);
889         if (status != MYRB_STATUS_SUCCESS) {
890                 cb->dual_mode_interface = false;
891                 mbox.typeX.opcode2 = 0x10;
892                 status = mmio_init_fn(pdev, base, &mbox);
893                 if (status != MYRB_STATUS_SUCCESS) {
894                         dev_err(&pdev->dev,
895                                 "Failed to enable mailbox, statux %02X\n",
896                                 status);
897                         return false;
898                 }
899         }
900         return true;
901 }
902
903 /*
904  * myrb_get_hba_config - reads the configuration information
905  *
906  * Reads the configuration information from the controller and
907  * initializes the controller structure.
908  *
909  * Return: 0 on success, errno otherwise
910  */
911 static int myrb_get_hba_config(struct myrb_hba *cb)
912 {
913         struct myrb_enquiry2 *enquiry2;
914         dma_addr_t enquiry2_addr;
915         struct myrb_config2 *config2;
916         dma_addr_t config2_addr;
917         struct Scsi_Host *shost = cb->host;
918         struct pci_dev *pdev = cb->pdev;
919         int pchan_max = 0, pchan_cur = 0;
920         unsigned short status;
921         int ret = -ENODEV, memsize = 0;
922
923         enquiry2 = dma_alloc_coherent(&pdev->dev, sizeof(struct myrb_enquiry2),
924                                       &enquiry2_addr, GFP_KERNEL);
925         if (!enquiry2) {
926                 shost_printk(KERN_ERR, cb->host,
927                              "Failed to allocate V1 enquiry2 memory\n");
928                 return -ENOMEM;
929         }
930         config2 = dma_alloc_coherent(&pdev->dev, sizeof(struct myrb_config2),
931                                      &config2_addr, GFP_KERNEL);
932         if (!config2) {
933                 shost_printk(KERN_ERR, cb->host,
934                              "Failed to allocate V1 config2 memory\n");
935                 dma_free_coherent(&pdev->dev, sizeof(struct myrb_enquiry2),
936                                   enquiry2, enquiry2_addr);
937                 return -ENOMEM;
938         }
939         mutex_lock(&cb->dma_mutex);
940         status = myrb_hba_enquiry(cb);
941         mutex_unlock(&cb->dma_mutex);
942         if (status != MYRB_STATUS_SUCCESS) {
943                 shost_printk(KERN_WARNING, cb->host,
944                              "Failed it issue V1 Enquiry\n");
945                 goto out_free;
946         }
947
948         status = myrb_exec_type3(cb, MYRB_CMD_ENQUIRY2, enquiry2_addr);
949         if (status != MYRB_STATUS_SUCCESS) {
950                 shost_printk(KERN_WARNING, cb->host,
951                              "Failed to issue V1 Enquiry2\n");
952                 goto out_free;
953         }
954
955         status = myrb_exec_type3(cb, MYRB_CMD_READ_CONFIG2, config2_addr);
956         if (status != MYRB_STATUS_SUCCESS) {
957                 shost_printk(KERN_WARNING, cb->host,
958                              "Failed to issue ReadConfig2\n");
959                 goto out_free;
960         }
961
962         status = myrb_get_ldev_info(cb);
963         if (status != MYRB_STATUS_SUCCESS) {
964                 shost_printk(KERN_WARNING, cb->host,
965                              "Failed to get logical drive information\n");
966                 goto out_free;
967         }
968
969         /*
970          * Initialize the Controller Model Name and Full Model Name fields.
971          */
972         switch (enquiry2->hw.sub_model) {
973         case DAC960_V1_P_PD_PU:
974                 if (enquiry2->scsi_cap.bus_speed == MYRB_SCSI_SPEED_ULTRA)
975                         strcpy(cb->model_name, "DAC960PU");
976                 else
977                         strcpy(cb->model_name, "DAC960PD");
978                 break;
979         case DAC960_V1_PL:
980                 strcpy(cb->model_name, "DAC960PL");
981                 break;
982         case DAC960_V1_PG:
983                 strcpy(cb->model_name, "DAC960PG");
984                 break;
985         case DAC960_V1_PJ:
986                 strcpy(cb->model_name, "DAC960PJ");
987                 break;
988         case DAC960_V1_PR:
989                 strcpy(cb->model_name, "DAC960PR");
990                 break;
991         case DAC960_V1_PT:
992                 strcpy(cb->model_name, "DAC960PT");
993                 break;
994         case DAC960_V1_PTL0:
995                 strcpy(cb->model_name, "DAC960PTL0");
996                 break;
997         case DAC960_V1_PRL:
998                 strcpy(cb->model_name, "DAC960PRL");
999                 break;
1000         case DAC960_V1_PTL1:
1001                 strcpy(cb->model_name, "DAC960PTL1");
1002                 break;
1003         case DAC960_V1_1164P:
1004                 strcpy(cb->model_name, "eXtremeRAID 1100");
1005                 break;
1006         default:
1007                 shost_printk(KERN_WARNING, cb->host,
1008                              "Unknown Model %X\n",
1009                              enquiry2->hw.sub_model);
1010                 goto out;
1011         }
1012         /*
1013          * Initialize the Controller Firmware Version field and verify that it
1014          * is a supported firmware version.
1015          * The supported firmware versions are:
1016          *
1017          * DAC1164P                 5.06 and above
1018          * DAC960PTL/PRL/PJ/PG      4.06 and above
1019          * DAC960PU/PD/PL           3.51 and above
1020          * DAC960PU/PD/PL/P         2.73 and above
1021          */
1022 #if defined(CONFIG_ALPHA)
1023         /*
1024          * DEC Alpha machines were often equipped with DAC960 cards that were
1025          * OEMed from Mylex, and had their own custom firmware. Version 2.70,
1026          * the last custom FW revision to be released by DEC for these older
1027          * controllers, appears to work quite well with this driver.
1028          *
1029          * Cards tested successfully were several versions each of the PD and
1030          * PU, called by DEC the KZPSC and KZPAC, respectively, and having
1031          * the Manufacturer Numbers (from Mylex), usually on a sticker on the
1032          * back of the board, of:
1033          *
1034          * KZPSC:  D040347 (1-channel) or D040348 (2-channel)
1035          *         or D040349 (3-channel)
1036          * KZPAC:  D040395 (1-channel) or D040396 (2-channel)
1037          *         or D040397 (3-channel)
1038          */
1039 # define FIRMWARE_27X   "2.70"
1040 #else
1041 # define FIRMWARE_27X   "2.73"
1042 #endif
1043
1044         if (enquiry2->fw.major_version == 0) {
1045                 enquiry2->fw.major_version = cb->enquiry->fw_major_version;
1046                 enquiry2->fw.minor_version = cb->enquiry->fw_minor_version;
1047                 enquiry2->fw.firmware_type = '0';
1048                 enquiry2->fw.turn_id = 0;
1049         }
1050         snprintf(cb->fw_version, sizeof(cb->fw_version),
1051                 "%u.%02u-%c-%02u",
1052                 enquiry2->fw.major_version,
1053                 enquiry2->fw.minor_version,
1054                 enquiry2->fw.firmware_type,
1055                 enquiry2->fw.turn_id);
1056         if (!((enquiry2->fw.major_version == 5 &&
1057                enquiry2->fw.minor_version >= 6) ||
1058               (enquiry2->fw.major_version == 4 &&
1059                enquiry2->fw.minor_version >= 6) ||
1060               (enquiry2->fw.major_version == 3 &&
1061                enquiry2->fw.minor_version >= 51) ||
1062               (enquiry2->fw.major_version == 2 &&
1063                strcmp(cb->fw_version, FIRMWARE_27X) >= 0))) {
1064                 shost_printk(KERN_WARNING, cb->host,
1065                         "Firmware Version '%s' unsupported\n",
1066                         cb->fw_version);
1067                 goto out;
1068         }
1069         /*
1070          * Initialize the Channels, Targets, Memory Size, and SAF-TE
1071          * Enclosure Management Enabled fields.
1072          */
1073         switch (enquiry2->hw.model) {
1074         case MYRB_5_CHANNEL_BOARD:
1075                 pchan_max = 5;
1076                 break;
1077         case MYRB_3_CHANNEL_BOARD:
1078         case MYRB_3_CHANNEL_ASIC_DAC:
1079                 pchan_max = 3;
1080                 break;
1081         case MYRB_2_CHANNEL_BOARD:
1082                 pchan_max = 2;
1083                 break;
1084         default:
1085                 pchan_max = enquiry2->cfg_chan;
1086                 break;
1087         }
1088         pchan_cur = enquiry2->cur_chan;
1089         if (enquiry2->scsi_cap.bus_width == MYRB_WIDTH_WIDE_32BIT)
1090                 cb->bus_width = 32;
1091         else if (enquiry2->scsi_cap.bus_width == MYRB_WIDTH_WIDE_16BIT)
1092                 cb->bus_width = 16;
1093         else
1094                 cb->bus_width = 8;
1095         cb->ldev_block_size = enquiry2->ldev_block_size;
1096         shost->max_channel = pchan_cur;
1097         shost->max_id = enquiry2->max_targets;
1098         memsize = enquiry2->mem_size >> 20;
1099         cb->safte_enabled = (enquiry2->fault_mgmt == MYRB_FAULT_SAFTE);
1100         /*
1101          * Initialize the Controller Queue Depth, Driver Queue Depth,
1102          * Logical Drive Count, Maximum Blocks per Command, Controller
1103          * Scatter/Gather Limit, and Driver Scatter/Gather Limit.
1104          * The Driver Queue Depth must be at most one less than the
1105          * Controller Queue Depth to allow for an automatic drive
1106          * rebuild operation.
1107          */
1108         shost->can_queue = cb->enquiry->max_tcq;
1109         if (shost->can_queue < 3)
1110                 shost->can_queue = enquiry2->max_cmds;
1111         if (shost->can_queue < 3)
1112                 /* Play safe and disable TCQ */
1113                 shost->can_queue = 1;
1114
1115         if (shost->can_queue > MYRB_CMD_MBOX_COUNT - 2)
1116                 shost->can_queue = MYRB_CMD_MBOX_COUNT - 2;
1117         shost->max_sectors = enquiry2->max_sectors;
1118         shost->sg_tablesize = enquiry2->max_sge;
1119         if (shost->sg_tablesize > MYRB_SCATTER_GATHER_LIMIT)
1120                 shost->sg_tablesize = MYRB_SCATTER_GATHER_LIMIT;
1121         /*
1122          * Initialize the Stripe Size, Segment Size, and Geometry Translation.
1123          */
1124         cb->stripe_size = config2->blocks_per_stripe * config2->block_factor
1125                 >> (10 - MYRB_BLKSIZE_BITS);
1126         cb->segment_size = config2->blocks_per_cacheline * config2->block_factor
1127                 >> (10 - MYRB_BLKSIZE_BITS);
1128         /* Assume 255/63 translation */
1129         cb->ldev_geom_heads = 255;
1130         cb->ldev_geom_sectors = 63;
1131         if (config2->drive_geometry) {
1132                 cb->ldev_geom_heads = 128;
1133                 cb->ldev_geom_sectors = 32;
1134         }
1135
1136         /*
1137          * Initialize the Background Initialization Status.
1138          */
1139         if ((cb->fw_version[0] == '4' &&
1140              strcmp(cb->fw_version, "4.08") >= 0) ||
1141             (cb->fw_version[0] == '5' &&
1142              strcmp(cb->fw_version, "5.08") >= 0)) {
1143                 cb->bgi_status_supported = true;
1144                 myrb_bgi_control(cb);
1145         }
1146         cb->last_rbld_status = MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS;
1147         ret = 0;
1148
1149 out:
1150         shost_printk(KERN_INFO, cb->host,
1151                 "Configuring %s PCI RAID Controller\n", cb->model_name);
1152         shost_printk(KERN_INFO, cb->host,
1153                 "  Firmware Version: %s, Memory Size: %dMB\n",
1154                 cb->fw_version, memsize);
1155         if (cb->io_addr == 0)
1156                 shost_printk(KERN_INFO, cb->host,
1157                         "  I/O Address: n/a, PCI Address: 0x%lX, IRQ Channel: %d\n",
1158                         (unsigned long)cb->pci_addr, cb->irq);
1159         else
1160                 shost_printk(KERN_INFO, cb->host,
1161                         "  I/O Address: 0x%lX, PCI Address: 0x%lX, IRQ Channel: %d\n",
1162                         (unsigned long)cb->io_addr, (unsigned long)cb->pci_addr,
1163                         cb->irq);
1164         shost_printk(KERN_INFO, cb->host,
1165                 "  Controller Queue Depth: %d, Maximum Blocks per Command: %d\n",
1166                 cb->host->can_queue, cb->host->max_sectors);
1167         shost_printk(KERN_INFO, cb->host,
1168                      "  Driver Queue Depth: %d, Scatter/Gather Limit: %d of %d Segments\n",
1169                      cb->host->can_queue, cb->host->sg_tablesize,
1170                      MYRB_SCATTER_GATHER_LIMIT);
1171         shost_printk(KERN_INFO, cb->host,
1172                      "  Stripe Size: %dKB, Segment Size: %dKB, BIOS Geometry: %d/%d%s\n",
1173                      cb->stripe_size, cb->segment_size,
1174                      cb->ldev_geom_heads, cb->ldev_geom_sectors,
1175                      cb->safte_enabled ?
1176                      "  SAF-TE Enclosure Management Enabled" : "");
1177         shost_printk(KERN_INFO, cb->host,
1178                      "  Physical: %d/%d channels %d/%d/%d devices\n",
1179                      pchan_cur, pchan_max, 0, cb->enquiry->pdev_dead,
1180                      cb->host->max_id);
1181
1182         shost_printk(KERN_INFO, cb->host,
1183                      "  Logical: 1/1 channels, %d/%d disks\n",
1184                      cb->enquiry->ldev_count, MYRB_MAX_LDEVS);
1185
1186 out_free:
1187         dma_free_coherent(&pdev->dev, sizeof(struct myrb_enquiry2),
1188                           enquiry2, enquiry2_addr);
1189         dma_free_coherent(&pdev->dev, sizeof(struct myrb_config2),
1190                           config2, config2_addr);
1191
1192         return ret;
1193 }
1194
1195 /*
1196  * myrb_unmap - unmaps controller structures
1197  */
1198 static void myrb_unmap(struct myrb_hba *cb)
1199 {
1200         if (cb->ldev_info_buf) {
1201                 size_t ldev_info_size = sizeof(struct myrb_ldev_info) *
1202                         MYRB_MAX_LDEVS;
1203                 dma_free_coherent(&cb->pdev->dev, ldev_info_size,
1204                                   cb->ldev_info_buf, cb->ldev_info_addr);
1205                 cb->ldev_info_buf = NULL;
1206         }
1207         if (cb->err_table) {
1208                 size_t err_table_size = sizeof(struct myrb_error_entry) *
1209                         MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS;
1210                 dma_free_coherent(&cb->pdev->dev, err_table_size,
1211                                   cb->err_table, cb->err_table_addr);
1212                 cb->err_table = NULL;
1213         }
1214         if (cb->enquiry) {
1215                 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_enquiry),
1216                                   cb->enquiry, cb->enquiry_addr);
1217                 cb->enquiry = NULL;
1218         }
1219         if (cb->first_stat_mbox) {
1220                 dma_free_coherent(&cb->pdev->dev, cb->stat_mbox_size,
1221                                   cb->first_stat_mbox, cb->stat_mbox_addr);
1222                 cb->first_stat_mbox = NULL;
1223         }
1224         if (cb->first_cmd_mbox) {
1225                 dma_free_coherent(&cb->pdev->dev, cb->cmd_mbox_size,
1226                                   cb->first_cmd_mbox, cb->cmd_mbox_addr);
1227                 cb->first_cmd_mbox = NULL;
1228         }
1229 }
1230
1231 /*
1232  * myrb_cleanup - cleanup controller structures
1233  */
1234 static void myrb_cleanup(struct myrb_hba *cb)
1235 {
1236         struct pci_dev *pdev = cb->pdev;
1237
1238         /* Free the memory mailbox, status, and related structures */
1239         myrb_unmap(cb);
1240
1241         if (cb->mmio_base) {
1242                 cb->disable_intr(cb->io_base);
1243                 iounmap(cb->mmio_base);
1244         }
1245         if (cb->irq)
1246                 free_irq(cb->irq, cb);
1247         if (cb->io_addr)
1248                 release_region(cb->io_addr, 0x80);
1249         pci_set_drvdata(pdev, NULL);
1250         pci_disable_device(pdev);
1251         scsi_host_put(cb->host);
1252 }
1253
1254 static int myrb_host_reset(struct scsi_cmnd *scmd)
1255 {
1256         struct Scsi_Host *shost = scmd->device->host;
1257         struct myrb_hba *cb = shost_priv(shost);
1258
1259         cb->reset(cb->io_base);
1260         return SUCCESS;
1261 }
1262
1263 static int myrb_pthru_queuecommand(struct Scsi_Host *shost,
1264                 struct scsi_cmnd *scmd)
1265 {
1266         struct myrb_hba *cb = shost_priv(shost);
1267         struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd);
1268         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
1269         struct myrb_dcdb *dcdb;
1270         dma_addr_t dcdb_addr;
1271         struct scsi_device *sdev = scmd->device;
1272         struct scatterlist *sgl;
1273         unsigned long flags;
1274         int nsge;
1275
1276         myrb_reset_cmd(cmd_blk);
1277         dcdb = dma_pool_alloc(cb->dcdb_pool, GFP_ATOMIC, &dcdb_addr);
1278         if (!dcdb)
1279                 return SCSI_MLQUEUE_HOST_BUSY;
1280         nsge = scsi_dma_map(scmd);
1281         if (nsge > 1) {
1282                 dma_pool_free(cb->dcdb_pool, dcdb, dcdb_addr);
1283                 scmd->result = (DID_ERROR << 16);
1284                 scmd->scsi_done(scmd);
1285                 return 0;
1286         }
1287
1288         mbox->type3.opcode = MYRB_CMD_DCDB;
1289         mbox->type3.id = scmd->request->tag + 3;
1290         mbox->type3.addr = dcdb_addr;
1291         dcdb->channel = sdev->channel;
1292         dcdb->target = sdev->id;
1293         switch (scmd->sc_data_direction) {
1294         case DMA_NONE:
1295                 dcdb->data_xfer = MYRB_DCDB_XFER_NONE;
1296                 break;
1297         case DMA_TO_DEVICE:
1298                 dcdb->data_xfer = MYRB_DCDB_XFER_SYSTEM_TO_DEVICE;
1299                 break;
1300         case DMA_FROM_DEVICE:
1301                 dcdb->data_xfer = MYRB_DCDB_XFER_DEVICE_TO_SYSTEM;
1302                 break;
1303         default:
1304                 dcdb->data_xfer = MYRB_DCDB_XFER_ILLEGAL;
1305                 break;
1306         }
1307         dcdb->early_status = false;
1308         if (scmd->request->timeout <= 10)
1309                 dcdb->timeout = MYRB_DCDB_TMO_10_SECS;
1310         else if (scmd->request->timeout <= 60)
1311                 dcdb->timeout = MYRB_DCDB_TMO_60_SECS;
1312         else if (scmd->request->timeout <= 600)
1313                 dcdb->timeout = MYRB_DCDB_TMO_10_MINS;
1314         else
1315                 dcdb->timeout = MYRB_DCDB_TMO_24_HRS;
1316         dcdb->no_autosense = false;
1317         dcdb->allow_disconnect = true;
1318         sgl = scsi_sglist(scmd);
1319         dcdb->dma_addr = sg_dma_address(sgl);
1320         if (sg_dma_len(sgl) > USHRT_MAX) {
1321                 dcdb->xfer_len_lo = sg_dma_len(sgl) & 0xffff;
1322                 dcdb->xfer_len_hi4 = sg_dma_len(sgl) >> 16;
1323         } else {
1324                 dcdb->xfer_len_lo = sg_dma_len(sgl);
1325                 dcdb->xfer_len_hi4 = 0;
1326         }
1327         dcdb->cdb_len = scmd->cmd_len;
1328         dcdb->sense_len = sizeof(dcdb->sense);
1329         memcpy(&dcdb->cdb, scmd->cmnd, scmd->cmd_len);
1330
1331         spin_lock_irqsave(&cb->queue_lock, flags);
1332         cb->qcmd(cb, cmd_blk);
1333         spin_unlock_irqrestore(&cb->queue_lock, flags);
1334         return 0;
1335 }
1336
1337 static void myrb_inquiry(struct myrb_hba *cb,
1338                 struct scsi_cmnd *scmd)
1339 {
1340         unsigned char inq[36] = {
1341                 0x00, 0x00, 0x03, 0x02, 0x20, 0x00, 0x01, 0x00,
1342                 0x4d, 0x59, 0x4c, 0x45, 0x58, 0x20, 0x20, 0x20,
1343                 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
1344                 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
1345                 0x20, 0x20, 0x20, 0x20,
1346         };
1347
1348         if (cb->bus_width > 16)
1349                 inq[7] |= 1 << 6;
1350         if (cb->bus_width > 8)
1351                 inq[7] |= 1 << 5;
1352         memcpy(&inq[16], cb->model_name, 16);
1353         memcpy(&inq[32], cb->fw_version, 1);
1354         memcpy(&inq[33], &cb->fw_version[2], 2);
1355         memcpy(&inq[35], &cb->fw_version[7], 1);
1356
1357         scsi_sg_copy_from_buffer(scmd, (void *)inq, 36);
1358 }
1359
1360 static void
1361 myrb_mode_sense(struct myrb_hba *cb, struct scsi_cmnd *scmd,
1362                 struct myrb_ldev_info *ldev_info)
1363 {
1364         unsigned char modes[32], *mode_pg;
1365         bool dbd;
1366         size_t mode_len;
1367
1368         dbd = (scmd->cmnd[1] & 0x08) == 0x08;
1369         if (dbd) {
1370                 mode_len = 24;
1371                 mode_pg = &modes[4];
1372         } else {
1373                 mode_len = 32;
1374                 mode_pg = &modes[12];
1375         }
1376         memset(modes, 0, sizeof(modes));
1377         modes[0] = mode_len - 1;
1378         if (!dbd) {
1379                 unsigned char *block_desc = &modes[4];
1380
1381                 modes[3] = 8;
1382                 put_unaligned_be32(ldev_info->size, &block_desc[0]);
1383                 put_unaligned_be32(cb->ldev_block_size, &block_desc[5]);
1384         }
1385         mode_pg[0] = 0x08;
1386         mode_pg[1] = 0x12;
1387         if (ldev_info->wb_enabled)
1388                 mode_pg[2] |= 0x04;
1389         if (cb->segment_size) {
1390                 mode_pg[2] |= 0x08;
1391                 put_unaligned_be16(cb->segment_size, &mode_pg[14]);
1392         }
1393
1394         scsi_sg_copy_from_buffer(scmd, modes, mode_len);
1395 }
1396
1397 static void myrb_request_sense(struct myrb_hba *cb,
1398                 struct scsi_cmnd *scmd)
1399 {
1400         scsi_build_sense(scmd, 0, NO_SENSE, 0, 0);
1401         scsi_sg_copy_from_buffer(scmd, scmd->sense_buffer,
1402                                  SCSI_SENSE_BUFFERSIZE);
1403 }
1404
1405 static void myrb_read_capacity(struct myrb_hba *cb, struct scsi_cmnd *scmd,
1406                 struct myrb_ldev_info *ldev_info)
1407 {
1408         unsigned char data[8];
1409
1410         dev_dbg(&scmd->device->sdev_gendev,
1411                 "Capacity %u, blocksize %u\n",
1412                 ldev_info->size, cb->ldev_block_size);
1413         put_unaligned_be32(ldev_info->size - 1, &data[0]);
1414         put_unaligned_be32(cb->ldev_block_size, &data[4]);
1415         scsi_sg_copy_from_buffer(scmd, data, 8);
1416 }
1417
1418 static int myrb_ldev_queuecommand(struct Scsi_Host *shost,
1419                 struct scsi_cmnd *scmd)
1420 {
1421         struct myrb_hba *cb = shost_priv(shost);
1422         struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd);
1423         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
1424         struct myrb_ldev_info *ldev_info;
1425         struct scsi_device *sdev = scmd->device;
1426         struct scatterlist *sgl;
1427         unsigned long flags;
1428         u64 lba;
1429         u32 block_cnt;
1430         int nsge;
1431
1432         ldev_info = sdev->hostdata;
1433         if (ldev_info->state != MYRB_DEVICE_ONLINE &&
1434             ldev_info->state != MYRB_DEVICE_WO) {
1435                 dev_dbg(&shost->shost_gendev, "ldev %u in state %x, skip\n",
1436                         sdev->id, ldev_info ? ldev_info->state : 0xff);
1437                 scmd->result = (DID_BAD_TARGET << 16);
1438                 scmd->scsi_done(scmd);
1439                 return 0;
1440         }
1441         switch (scmd->cmnd[0]) {
1442         case TEST_UNIT_READY:
1443                 scmd->result = (DID_OK << 16);
1444                 scmd->scsi_done(scmd);
1445                 return 0;
1446         case INQUIRY:
1447                 if (scmd->cmnd[1] & 1) {
1448                         /* Illegal request, invalid field in CDB */
1449                         scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0);
1450                 } else {
1451                         myrb_inquiry(cb, scmd);
1452                         scmd->result = (DID_OK << 16);
1453                 }
1454                 scmd->scsi_done(scmd);
1455                 return 0;
1456         case SYNCHRONIZE_CACHE:
1457                 scmd->result = (DID_OK << 16);
1458                 scmd->scsi_done(scmd);
1459                 return 0;
1460         case MODE_SENSE:
1461                 if ((scmd->cmnd[2] & 0x3F) != 0x3F &&
1462                     (scmd->cmnd[2] & 0x3F) != 0x08) {
1463                         /* Illegal request, invalid field in CDB */
1464                         scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0);
1465                 } else {
1466                         myrb_mode_sense(cb, scmd, ldev_info);
1467                         scmd->result = (DID_OK << 16);
1468                 }
1469                 scmd->scsi_done(scmd);
1470                 return 0;
1471         case READ_CAPACITY:
1472                 if ((scmd->cmnd[1] & 1) ||
1473                     (scmd->cmnd[8] & 1)) {
1474                         /* Illegal request, invalid field in CDB */
1475                         scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0);
1476                         scmd->scsi_done(scmd);
1477                         return 0;
1478                 }
1479                 lba = get_unaligned_be32(&scmd->cmnd[2]);
1480                 if (lba) {
1481                         /* Illegal request, invalid field in CDB */
1482                         scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0);
1483                         scmd->scsi_done(scmd);
1484                         return 0;
1485                 }
1486                 myrb_read_capacity(cb, scmd, ldev_info);
1487                 scmd->scsi_done(scmd);
1488                 return 0;
1489         case REQUEST_SENSE:
1490                 myrb_request_sense(cb, scmd);
1491                 scmd->result = (DID_OK << 16);
1492                 return 0;
1493         case SEND_DIAGNOSTIC:
1494                 if (scmd->cmnd[1] != 0x04) {
1495                         /* Illegal request, invalid field in CDB */
1496                         scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0);
1497                 } else {
1498                         /* Assume good status */
1499                         scmd->result = (DID_OK << 16);
1500                 }
1501                 scmd->scsi_done(scmd);
1502                 return 0;
1503         case READ_6:
1504                 if (ldev_info->state == MYRB_DEVICE_WO) {
1505                         /* Data protect, attempt to read invalid data */
1506                         scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06);
1507                         scmd->scsi_done(scmd);
1508                         return 0;
1509                 }
1510                 fallthrough;
1511         case WRITE_6:
1512                 lba = (((scmd->cmnd[1] & 0x1F) << 16) |
1513                        (scmd->cmnd[2] << 8) |
1514                        scmd->cmnd[3]);
1515                 block_cnt = scmd->cmnd[4];
1516                 break;
1517         case READ_10:
1518                 if (ldev_info->state == MYRB_DEVICE_WO) {
1519                         /* Data protect, attempt to read invalid data */
1520                         scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06);
1521                         scmd->scsi_done(scmd);
1522                         return 0;
1523                 }
1524                 fallthrough;
1525         case WRITE_10:
1526         case VERIFY:            /* 0x2F */
1527         case WRITE_VERIFY:      /* 0x2E */
1528                 lba = get_unaligned_be32(&scmd->cmnd[2]);
1529                 block_cnt = get_unaligned_be16(&scmd->cmnd[7]);
1530                 break;
1531         case READ_12:
1532                 if (ldev_info->state == MYRB_DEVICE_WO) {
1533                         /* Data protect, attempt to read invalid data */
1534                         scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06);
1535                         scmd->scsi_done(scmd);
1536                         return 0;
1537                 }
1538                 fallthrough;
1539         case WRITE_12:
1540         case VERIFY_12: /* 0xAF */
1541         case WRITE_VERIFY_12:   /* 0xAE */
1542                 lba = get_unaligned_be32(&scmd->cmnd[2]);
1543                 block_cnt = get_unaligned_be32(&scmd->cmnd[6]);
1544                 break;
1545         default:
1546                 /* Illegal request, invalid opcode */
1547                 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x20, 0);
1548                 scmd->scsi_done(scmd);
1549                 return 0;
1550         }
1551
1552         myrb_reset_cmd(cmd_blk);
1553         mbox->type5.id = scmd->request->tag + 3;
1554         if (scmd->sc_data_direction == DMA_NONE)
1555                 goto submit;
1556         nsge = scsi_dma_map(scmd);
1557         if (nsge == 1) {
1558                 sgl = scsi_sglist(scmd);
1559                 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
1560                         mbox->type5.opcode = MYRB_CMD_READ;
1561                 else
1562                         mbox->type5.opcode = MYRB_CMD_WRITE;
1563
1564                 mbox->type5.ld.xfer_len = block_cnt;
1565                 mbox->type5.ld.ldev_num = sdev->id;
1566                 mbox->type5.lba = lba;
1567                 mbox->type5.addr = (u32)sg_dma_address(sgl);
1568         } else {
1569                 struct myrb_sge *hw_sgl;
1570                 dma_addr_t hw_sgl_addr;
1571                 int i;
1572
1573                 hw_sgl = dma_pool_alloc(cb->sg_pool, GFP_ATOMIC, &hw_sgl_addr);
1574                 if (!hw_sgl)
1575                         return SCSI_MLQUEUE_HOST_BUSY;
1576
1577                 cmd_blk->sgl = hw_sgl;
1578                 cmd_blk->sgl_addr = hw_sgl_addr;
1579
1580                 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
1581                         mbox->type5.opcode = MYRB_CMD_READ_SG;
1582                 else
1583                         mbox->type5.opcode = MYRB_CMD_WRITE_SG;
1584
1585                 mbox->type5.ld.xfer_len = block_cnt;
1586                 mbox->type5.ld.ldev_num = sdev->id;
1587                 mbox->type5.lba = lba;
1588                 mbox->type5.addr = hw_sgl_addr;
1589                 mbox->type5.sg_count = nsge;
1590
1591                 scsi_for_each_sg(scmd, sgl, nsge, i) {
1592                         hw_sgl->sge_addr = (u32)sg_dma_address(sgl);
1593                         hw_sgl->sge_count = (u32)sg_dma_len(sgl);
1594                         hw_sgl++;
1595                 }
1596         }
1597 submit:
1598         spin_lock_irqsave(&cb->queue_lock, flags);
1599         cb->qcmd(cb, cmd_blk);
1600         spin_unlock_irqrestore(&cb->queue_lock, flags);
1601
1602         return 0;
1603 }
1604
1605 static int myrb_queuecommand(struct Scsi_Host *shost,
1606                 struct scsi_cmnd *scmd)
1607 {
1608         struct scsi_device *sdev = scmd->device;
1609
1610         if (sdev->channel > myrb_logical_channel(shost)) {
1611                 scmd->result = (DID_BAD_TARGET << 16);
1612                 scmd->scsi_done(scmd);
1613                 return 0;
1614         }
1615         if (sdev->channel == myrb_logical_channel(shost))
1616                 return myrb_ldev_queuecommand(shost, scmd);
1617
1618         return myrb_pthru_queuecommand(shost, scmd);
1619 }
1620
1621 static int myrb_ldev_slave_alloc(struct scsi_device *sdev)
1622 {
1623         struct myrb_hba *cb = shost_priv(sdev->host);
1624         struct myrb_ldev_info *ldev_info;
1625         unsigned short ldev_num = sdev->id;
1626         enum raid_level level;
1627
1628         ldev_info = cb->ldev_info_buf + ldev_num;
1629         if (!ldev_info)
1630                 return -ENXIO;
1631
1632         sdev->hostdata = kzalloc(sizeof(*ldev_info), GFP_KERNEL);
1633         if (!sdev->hostdata)
1634                 return -ENOMEM;
1635         dev_dbg(&sdev->sdev_gendev,
1636                 "slave alloc ldev %d state %x\n",
1637                 ldev_num, ldev_info->state);
1638         memcpy(sdev->hostdata, ldev_info,
1639                sizeof(*ldev_info));
1640         switch (ldev_info->raid_level) {
1641         case MYRB_RAID_LEVEL0:
1642                 level = RAID_LEVEL_LINEAR;
1643                 break;
1644         case MYRB_RAID_LEVEL1:
1645                 level = RAID_LEVEL_1;
1646                 break;
1647         case MYRB_RAID_LEVEL3:
1648                 level = RAID_LEVEL_3;
1649                 break;
1650         case MYRB_RAID_LEVEL5:
1651                 level = RAID_LEVEL_5;
1652                 break;
1653         case MYRB_RAID_LEVEL6:
1654                 level = RAID_LEVEL_6;
1655                 break;
1656         case MYRB_RAID_JBOD:
1657                 level = RAID_LEVEL_JBOD;
1658                 break;
1659         default:
1660                 level = RAID_LEVEL_UNKNOWN;
1661                 break;
1662         }
1663         raid_set_level(myrb_raid_template, &sdev->sdev_gendev, level);
1664         return 0;
1665 }
1666
1667 static int myrb_pdev_slave_alloc(struct scsi_device *sdev)
1668 {
1669         struct myrb_hba *cb = shost_priv(sdev->host);
1670         struct myrb_pdev_state *pdev_info;
1671         unsigned short status;
1672
1673         if (sdev->id > MYRB_MAX_TARGETS)
1674                 return -ENXIO;
1675
1676         pdev_info = kzalloc(sizeof(*pdev_info), GFP_KERNEL|GFP_DMA);
1677         if (!pdev_info)
1678                 return -ENOMEM;
1679
1680         status = myrb_exec_type3D(cb, MYRB_CMD_GET_DEVICE_STATE,
1681                                   sdev, pdev_info);
1682         if (status != MYRB_STATUS_SUCCESS) {
1683                 dev_dbg(&sdev->sdev_gendev,
1684                         "Failed to get device state, status %x\n",
1685                         status);
1686                 kfree(pdev_info);
1687                 return -ENXIO;
1688         }
1689         if (!pdev_info->present) {
1690                 dev_dbg(&sdev->sdev_gendev,
1691                         "device not present, skip\n");
1692                 kfree(pdev_info);
1693                 return -ENXIO;
1694         }
1695         dev_dbg(&sdev->sdev_gendev,
1696                 "slave alloc pdev %d:%d state %x\n",
1697                 sdev->channel, sdev->id, pdev_info->state);
1698         sdev->hostdata = pdev_info;
1699
1700         return 0;
1701 }
1702
1703 static int myrb_slave_alloc(struct scsi_device *sdev)
1704 {
1705         if (sdev->channel > myrb_logical_channel(sdev->host))
1706                 return -ENXIO;
1707
1708         if (sdev->lun > 0)
1709                 return -ENXIO;
1710
1711         if (sdev->channel == myrb_logical_channel(sdev->host))
1712                 return myrb_ldev_slave_alloc(sdev);
1713
1714         return myrb_pdev_slave_alloc(sdev);
1715 }
1716
1717 static int myrb_slave_configure(struct scsi_device *sdev)
1718 {
1719         struct myrb_ldev_info *ldev_info;
1720
1721         if (sdev->channel > myrb_logical_channel(sdev->host))
1722                 return -ENXIO;
1723
1724         if (sdev->channel < myrb_logical_channel(sdev->host)) {
1725                 sdev->no_uld_attach = 1;
1726                 return 0;
1727         }
1728         if (sdev->lun != 0)
1729                 return -ENXIO;
1730
1731         ldev_info = sdev->hostdata;
1732         if (!ldev_info)
1733                 return -ENXIO;
1734         if (ldev_info->state != MYRB_DEVICE_ONLINE)
1735                 sdev_printk(KERN_INFO, sdev,
1736                             "Logical drive is %s\n",
1737                             myrb_devstate_name(ldev_info->state));
1738
1739         sdev->tagged_supported = 1;
1740         return 0;
1741 }
1742
1743 static void myrb_slave_destroy(struct scsi_device *sdev)
1744 {
1745         kfree(sdev->hostdata);
1746 }
1747
1748 static int myrb_biosparam(struct scsi_device *sdev, struct block_device *bdev,
1749                 sector_t capacity, int geom[])
1750 {
1751         struct myrb_hba *cb = shost_priv(sdev->host);
1752
1753         geom[0] = cb->ldev_geom_heads;
1754         geom[1] = cb->ldev_geom_sectors;
1755         geom[2] = sector_div(capacity, geom[0] * geom[1]);
1756
1757         return 0;
1758 }
1759
1760 static ssize_t raid_state_show(struct device *dev,
1761                 struct device_attribute *attr, char *buf)
1762 {
1763         struct scsi_device *sdev = to_scsi_device(dev);
1764         struct myrb_hba *cb = shost_priv(sdev->host);
1765         int ret;
1766
1767         if (!sdev->hostdata)
1768                 return snprintf(buf, 16, "Unknown\n");
1769
1770         if (sdev->channel == myrb_logical_channel(sdev->host)) {
1771                 struct myrb_ldev_info *ldev_info = sdev->hostdata;
1772                 const char *name;
1773
1774                 name = myrb_devstate_name(ldev_info->state);
1775                 if (name)
1776                         ret = snprintf(buf, 32, "%s\n", name);
1777                 else
1778                         ret = snprintf(buf, 32, "Invalid (%02X)\n",
1779                                        ldev_info->state);
1780         } else {
1781                 struct myrb_pdev_state *pdev_info = sdev->hostdata;
1782                 unsigned short status;
1783                 const char *name;
1784
1785                 status = myrb_exec_type3D(cb, MYRB_CMD_GET_DEVICE_STATE,
1786                                           sdev, pdev_info);
1787                 if (status != MYRB_STATUS_SUCCESS)
1788                         sdev_printk(KERN_INFO, sdev,
1789                                     "Failed to get device state, status %x\n",
1790                                     status);
1791
1792                 if (!pdev_info->present)
1793                         name = "Removed";
1794                 else
1795                         name = myrb_devstate_name(pdev_info->state);
1796                 if (name)
1797                         ret = snprintf(buf, 32, "%s\n", name);
1798                 else
1799                         ret = snprintf(buf, 32, "Invalid (%02X)\n",
1800                                        pdev_info->state);
1801         }
1802         return ret;
1803 }
1804
1805 static ssize_t raid_state_store(struct device *dev,
1806                 struct device_attribute *attr, const char *buf, size_t count)
1807 {
1808         struct scsi_device *sdev = to_scsi_device(dev);
1809         struct myrb_hba *cb = shost_priv(sdev->host);
1810         struct myrb_pdev_state *pdev_info;
1811         enum myrb_devstate new_state;
1812         unsigned short status;
1813
1814         if (!strncmp(buf, "kill", 4) ||
1815             !strncmp(buf, "offline", 7))
1816                 new_state = MYRB_DEVICE_DEAD;
1817         else if (!strncmp(buf, "online", 6))
1818                 new_state = MYRB_DEVICE_ONLINE;
1819         else if (!strncmp(buf, "standby", 7))
1820                 new_state = MYRB_DEVICE_STANDBY;
1821         else
1822                 return -EINVAL;
1823
1824         pdev_info = sdev->hostdata;
1825         if (!pdev_info) {
1826                 sdev_printk(KERN_INFO, sdev,
1827                             "Failed - no physical device information\n");
1828                 return -ENXIO;
1829         }
1830         if (!pdev_info->present) {
1831                 sdev_printk(KERN_INFO, sdev,
1832                             "Failed - device not present\n");
1833                 return -ENXIO;
1834         }
1835
1836         if (pdev_info->state == new_state)
1837                 return count;
1838
1839         status = myrb_set_pdev_state(cb, sdev, new_state);
1840         switch (status) {
1841         case MYRB_STATUS_SUCCESS:
1842                 break;
1843         case MYRB_STATUS_START_DEVICE_FAILED:
1844                 sdev_printk(KERN_INFO, sdev,
1845                              "Failed - Unable to Start Device\n");
1846                 count = -EAGAIN;
1847                 break;
1848         case MYRB_STATUS_NO_DEVICE:
1849                 sdev_printk(KERN_INFO, sdev,
1850                             "Failed - No Device at Address\n");
1851                 count = -ENODEV;
1852                 break;
1853         case MYRB_STATUS_INVALID_CHANNEL_OR_TARGET:
1854                 sdev_printk(KERN_INFO, sdev,
1855                          "Failed - Invalid Channel or Target or Modifier\n");
1856                 count = -EINVAL;
1857                 break;
1858         case MYRB_STATUS_CHANNEL_BUSY:
1859                 sdev_printk(KERN_INFO, sdev,
1860                          "Failed - Channel Busy\n");
1861                 count = -EBUSY;
1862                 break;
1863         default:
1864                 sdev_printk(KERN_INFO, sdev,
1865                          "Failed - Unexpected Status %04X\n", status);
1866                 count = -EIO;
1867                 break;
1868         }
1869         return count;
1870 }
1871 static DEVICE_ATTR_RW(raid_state);
1872
1873 static ssize_t raid_level_show(struct device *dev,
1874                 struct device_attribute *attr, char *buf)
1875 {
1876         struct scsi_device *sdev = to_scsi_device(dev);
1877
1878         if (sdev->channel == myrb_logical_channel(sdev->host)) {
1879                 struct myrb_ldev_info *ldev_info = sdev->hostdata;
1880                 const char *name;
1881
1882                 if (!ldev_info)
1883                         return -ENXIO;
1884
1885                 name = myrb_raidlevel_name(ldev_info->raid_level);
1886                 if (!name)
1887                         return snprintf(buf, 32, "Invalid (%02X)\n",
1888                                         ldev_info->state);
1889                 return snprintf(buf, 32, "%s\n", name);
1890         }
1891         return snprintf(buf, 32, "Physical Drive\n");
1892 }
1893 static DEVICE_ATTR_RO(raid_level);
1894
1895 static ssize_t rebuild_show(struct device *dev,
1896                 struct device_attribute *attr, char *buf)
1897 {
1898         struct scsi_device *sdev = to_scsi_device(dev);
1899         struct myrb_hba *cb = shost_priv(sdev->host);
1900         struct myrb_rbld_progress rbld_buf;
1901         unsigned char status;
1902
1903         if (sdev->channel < myrb_logical_channel(sdev->host))
1904                 return snprintf(buf, 32, "physical device - not rebuilding\n");
1905
1906         status = myrb_get_rbld_progress(cb, &rbld_buf);
1907
1908         if (rbld_buf.ldev_num != sdev->id ||
1909             status != MYRB_STATUS_SUCCESS)
1910                 return snprintf(buf, 32, "not rebuilding\n");
1911
1912         return snprintf(buf, 32, "rebuilding block %u of %u\n",
1913                         rbld_buf.ldev_size - rbld_buf.blocks_left,
1914                         rbld_buf.ldev_size);
1915 }
1916
1917 static ssize_t rebuild_store(struct device *dev,
1918                 struct device_attribute *attr, const char *buf, size_t count)
1919 {
1920         struct scsi_device *sdev = to_scsi_device(dev);
1921         struct myrb_hba *cb = shost_priv(sdev->host);
1922         struct myrb_cmdblk *cmd_blk;
1923         union myrb_cmd_mbox *mbox;
1924         unsigned short status;
1925         int rc, start;
1926         const char *msg;
1927
1928         rc = kstrtoint(buf, 0, &start);
1929         if (rc)
1930                 return rc;
1931
1932         if (sdev->channel >= myrb_logical_channel(sdev->host))
1933                 return -ENXIO;
1934
1935         status = myrb_get_rbld_progress(cb, NULL);
1936         if (start) {
1937                 if (status == MYRB_STATUS_SUCCESS) {
1938                         sdev_printk(KERN_INFO, sdev,
1939                                     "Rebuild Not Initiated; already in progress\n");
1940                         return -EALREADY;
1941                 }
1942                 mutex_lock(&cb->dcmd_mutex);
1943                 cmd_blk = &cb->dcmd_blk;
1944                 myrb_reset_cmd(cmd_blk);
1945                 mbox = &cmd_blk->mbox;
1946                 mbox->type3D.opcode = MYRB_CMD_REBUILD_ASYNC;
1947                 mbox->type3D.id = MYRB_DCMD_TAG;
1948                 mbox->type3D.channel = sdev->channel;
1949                 mbox->type3D.target = sdev->id;
1950                 status = myrb_exec_cmd(cb, cmd_blk);
1951                 mutex_unlock(&cb->dcmd_mutex);
1952         } else {
1953                 struct pci_dev *pdev = cb->pdev;
1954                 unsigned char *rate;
1955                 dma_addr_t rate_addr;
1956
1957                 if (status != MYRB_STATUS_SUCCESS) {
1958                         sdev_printk(KERN_INFO, sdev,
1959                                     "Rebuild Not Cancelled; not in progress\n");
1960                         return 0;
1961                 }
1962
1963                 rate = dma_alloc_coherent(&pdev->dev, sizeof(char),
1964                                           &rate_addr, GFP_KERNEL);
1965                 if (rate == NULL) {
1966                         sdev_printk(KERN_INFO, sdev,
1967                                     "Cancellation of Rebuild Failed - Out of Memory\n");
1968                         return -ENOMEM;
1969                 }
1970                 mutex_lock(&cb->dcmd_mutex);
1971                 cmd_blk = &cb->dcmd_blk;
1972                 myrb_reset_cmd(cmd_blk);
1973                 mbox = &cmd_blk->mbox;
1974                 mbox->type3R.opcode = MYRB_CMD_REBUILD_CONTROL;
1975                 mbox->type3R.id = MYRB_DCMD_TAG;
1976                 mbox->type3R.rbld_rate = 0xFF;
1977                 mbox->type3R.addr = rate_addr;
1978                 status = myrb_exec_cmd(cb, cmd_blk);
1979                 dma_free_coherent(&pdev->dev, sizeof(char), rate, rate_addr);
1980                 mutex_unlock(&cb->dcmd_mutex);
1981         }
1982         if (status == MYRB_STATUS_SUCCESS) {
1983                 sdev_printk(KERN_INFO, sdev, "Rebuild %s\n",
1984                             start ? "Initiated" : "Cancelled");
1985                 return count;
1986         }
1987         if (!start) {
1988                 sdev_printk(KERN_INFO, sdev,
1989                             "Rebuild Not Cancelled, status 0x%x\n",
1990                             status);
1991                 return -EIO;
1992         }
1993
1994         switch (status) {
1995         case MYRB_STATUS_ATTEMPT_TO_RBLD_ONLINE_DRIVE:
1996                 msg = "Attempt to Rebuild Online or Unresponsive Drive";
1997                 break;
1998         case MYRB_STATUS_RBLD_NEW_DISK_FAILED:
1999                 msg = "New Disk Failed During Rebuild";
2000                 break;
2001         case MYRB_STATUS_INVALID_ADDRESS:
2002                 msg = "Invalid Device Address";
2003                 break;
2004         case MYRB_STATUS_RBLD_OR_CHECK_INPROGRESS:
2005                 msg = "Already in Progress";
2006                 break;
2007         default:
2008                 msg = NULL;
2009                 break;
2010         }
2011         if (msg)
2012                 sdev_printk(KERN_INFO, sdev,
2013                             "Rebuild Failed - %s\n", msg);
2014         else
2015                 sdev_printk(KERN_INFO, sdev,
2016                             "Rebuild Failed, status 0x%x\n", status);
2017
2018         return -EIO;
2019 }
2020 static DEVICE_ATTR_RW(rebuild);
2021
2022 static ssize_t consistency_check_store(struct device *dev,
2023                 struct device_attribute *attr, const char *buf, size_t count)
2024 {
2025         struct scsi_device *sdev = to_scsi_device(dev);
2026         struct myrb_hba *cb = shost_priv(sdev->host);
2027         struct myrb_rbld_progress rbld_buf;
2028         struct myrb_cmdblk *cmd_blk;
2029         union myrb_cmd_mbox *mbox;
2030         unsigned short ldev_num = 0xFFFF;
2031         unsigned short status;
2032         int rc, start;
2033         const char *msg;
2034
2035         rc = kstrtoint(buf, 0, &start);
2036         if (rc)
2037                 return rc;
2038
2039         if (sdev->channel < myrb_logical_channel(sdev->host))
2040                 return -ENXIO;
2041
2042         status = myrb_get_rbld_progress(cb, &rbld_buf);
2043         if (start) {
2044                 if (status == MYRB_STATUS_SUCCESS) {
2045                         sdev_printk(KERN_INFO, sdev,
2046                                     "Check Consistency Not Initiated; already in progress\n");
2047                         return -EALREADY;
2048                 }
2049                 mutex_lock(&cb->dcmd_mutex);
2050                 cmd_blk = &cb->dcmd_blk;
2051                 myrb_reset_cmd(cmd_blk);
2052                 mbox = &cmd_blk->mbox;
2053                 mbox->type3C.opcode = MYRB_CMD_CHECK_CONSISTENCY_ASYNC;
2054                 mbox->type3C.id = MYRB_DCMD_TAG;
2055                 mbox->type3C.ldev_num = sdev->id;
2056                 mbox->type3C.auto_restore = true;
2057
2058                 status = myrb_exec_cmd(cb, cmd_blk);
2059                 mutex_unlock(&cb->dcmd_mutex);
2060         } else {
2061                 struct pci_dev *pdev = cb->pdev;
2062                 unsigned char *rate;
2063                 dma_addr_t rate_addr;
2064
2065                 if (ldev_num != sdev->id) {
2066                         sdev_printk(KERN_INFO, sdev,
2067                                     "Check Consistency Not Cancelled; not in progress\n");
2068                         return 0;
2069                 }
2070                 rate = dma_alloc_coherent(&pdev->dev, sizeof(char),
2071                                           &rate_addr, GFP_KERNEL);
2072                 if (rate == NULL) {
2073                         sdev_printk(KERN_INFO, sdev,
2074                                     "Cancellation of Check Consistency Failed - Out of Memory\n");
2075                         return -ENOMEM;
2076                 }
2077                 mutex_lock(&cb->dcmd_mutex);
2078                 cmd_blk = &cb->dcmd_blk;
2079                 myrb_reset_cmd(cmd_blk);
2080                 mbox = &cmd_blk->mbox;
2081                 mbox->type3R.opcode = MYRB_CMD_REBUILD_CONTROL;
2082                 mbox->type3R.id = MYRB_DCMD_TAG;
2083                 mbox->type3R.rbld_rate = 0xFF;
2084                 mbox->type3R.addr = rate_addr;
2085                 status = myrb_exec_cmd(cb, cmd_blk);
2086                 dma_free_coherent(&pdev->dev, sizeof(char), rate, rate_addr);
2087                 mutex_unlock(&cb->dcmd_mutex);
2088         }
2089         if (status == MYRB_STATUS_SUCCESS) {
2090                 sdev_printk(KERN_INFO, sdev, "Check Consistency %s\n",
2091                             start ? "Initiated" : "Cancelled");
2092                 return count;
2093         }
2094         if (!start) {
2095                 sdev_printk(KERN_INFO, sdev,
2096                             "Check Consistency Not Cancelled, status 0x%x\n",
2097                             status);
2098                 return -EIO;
2099         }
2100
2101         switch (status) {
2102         case MYRB_STATUS_ATTEMPT_TO_RBLD_ONLINE_DRIVE:
2103                 msg = "Dependent Physical Device is DEAD";
2104                 break;
2105         case MYRB_STATUS_RBLD_NEW_DISK_FAILED:
2106                 msg = "New Disk Failed During Rebuild";
2107                 break;
2108         case MYRB_STATUS_INVALID_ADDRESS:
2109                 msg = "Invalid or Nonredundant Logical Drive";
2110                 break;
2111         case MYRB_STATUS_RBLD_OR_CHECK_INPROGRESS:
2112                 msg = "Already in Progress";
2113                 break;
2114         default:
2115                 msg = NULL;
2116                 break;
2117         }
2118         if (msg)
2119                 sdev_printk(KERN_INFO, sdev,
2120                             "Check Consistency Failed - %s\n", msg);
2121         else
2122                 sdev_printk(KERN_INFO, sdev,
2123                             "Check Consistency Failed, status 0x%x\n", status);
2124
2125         return -EIO;
2126 }
2127
2128 static ssize_t consistency_check_show(struct device *dev,
2129                 struct device_attribute *attr, char *buf)
2130 {
2131         return rebuild_show(dev, attr, buf);
2132 }
2133 static DEVICE_ATTR_RW(consistency_check);
2134
2135 static ssize_t ctlr_num_show(struct device *dev,
2136                 struct device_attribute *attr, char *buf)
2137 {
2138         struct Scsi_Host *shost = class_to_shost(dev);
2139         struct myrb_hba *cb = shost_priv(shost);
2140
2141         return snprintf(buf, 20, "%u\n", cb->ctlr_num);
2142 }
2143 static DEVICE_ATTR_RO(ctlr_num);
2144
2145 static ssize_t firmware_show(struct device *dev,
2146                 struct device_attribute *attr, char *buf)
2147 {
2148         struct Scsi_Host *shost = class_to_shost(dev);
2149         struct myrb_hba *cb = shost_priv(shost);
2150
2151         return snprintf(buf, 16, "%s\n", cb->fw_version);
2152 }
2153 static DEVICE_ATTR_RO(firmware);
2154
2155 static ssize_t model_show(struct device *dev,
2156                 struct device_attribute *attr, char *buf)
2157 {
2158         struct Scsi_Host *shost = class_to_shost(dev);
2159         struct myrb_hba *cb = shost_priv(shost);
2160
2161         return snprintf(buf, 16, "%s\n", cb->model_name);
2162 }
2163 static DEVICE_ATTR_RO(model);
2164
2165 static ssize_t flush_cache_store(struct device *dev,
2166                 struct device_attribute *attr, const char *buf, size_t count)
2167 {
2168         struct Scsi_Host *shost = class_to_shost(dev);
2169         struct myrb_hba *cb = shost_priv(shost);
2170         unsigned short status;
2171
2172         status = myrb_exec_type3(cb, MYRB_CMD_FLUSH, 0);
2173         if (status == MYRB_STATUS_SUCCESS) {
2174                 shost_printk(KERN_INFO, shost,
2175                              "Cache Flush Completed\n");
2176                 return count;
2177         }
2178         shost_printk(KERN_INFO, shost,
2179                      "Cache Flush Failed, status %x\n", status);
2180         return -EIO;
2181 }
2182 static DEVICE_ATTR_WO(flush_cache);
2183
2184 static struct device_attribute *myrb_sdev_attrs[] = {
2185         &dev_attr_rebuild,
2186         &dev_attr_consistency_check,
2187         &dev_attr_raid_state,
2188         &dev_attr_raid_level,
2189         NULL,
2190 };
2191
2192 static struct device_attribute *myrb_shost_attrs[] = {
2193         &dev_attr_ctlr_num,
2194         &dev_attr_model,
2195         &dev_attr_firmware,
2196         &dev_attr_flush_cache,
2197         NULL,
2198 };
2199
2200 static struct scsi_host_template myrb_template = {
2201         .module                 = THIS_MODULE,
2202         .name                   = "DAC960",
2203         .proc_name              = "myrb",
2204         .queuecommand           = myrb_queuecommand,
2205         .eh_host_reset_handler  = myrb_host_reset,
2206         .slave_alloc            = myrb_slave_alloc,
2207         .slave_configure        = myrb_slave_configure,
2208         .slave_destroy          = myrb_slave_destroy,
2209         .bios_param             = myrb_biosparam,
2210         .cmd_size               = sizeof(struct myrb_cmdblk),
2211         .shost_attrs            = myrb_shost_attrs,
2212         .sdev_attrs             = myrb_sdev_attrs,
2213         .this_id                = -1,
2214 };
2215
2216 /**
2217  * myrb_is_raid - return boolean indicating device is raid volume
2218  * @dev: the device struct object
2219  */
2220 static int myrb_is_raid(struct device *dev)
2221 {
2222         struct scsi_device *sdev = to_scsi_device(dev);
2223
2224         return sdev->channel == myrb_logical_channel(sdev->host);
2225 }
2226
2227 /**
2228  * myrb_get_resync - get raid volume resync percent complete
2229  * @dev: the device struct object
2230  */
2231 static void myrb_get_resync(struct device *dev)
2232 {
2233         struct scsi_device *sdev = to_scsi_device(dev);
2234         struct myrb_hba *cb = shost_priv(sdev->host);
2235         struct myrb_rbld_progress rbld_buf;
2236         unsigned int percent_complete = 0;
2237         unsigned short status;
2238         unsigned int ldev_size = 0, remaining = 0;
2239
2240         if (sdev->channel < myrb_logical_channel(sdev->host))
2241                 return;
2242         status = myrb_get_rbld_progress(cb, &rbld_buf);
2243         if (status == MYRB_STATUS_SUCCESS) {
2244                 if (rbld_buf.ldev_num == sdev->id) {
2245                         ldev_size = rbld_buf.ldev_size;
2246                         remaining = rbld_buf.blocks_left;
2247                 }
2248         }
2249         if (remaining && ldev_size)
2250                 percent_complete = (ldev_size - remaining) * 100 / ldev_size;
2251         raid_set_resync(myrb_raid_template, dev, percent_complete);
2252 }
2253
2254 /**
2255  * myrb_get_state - get raid volume status
2256  * @dev: the device struct object
2257  */
2258 static void myrb_get_state(struct device *dev)
2259 {
2260         struct scsi_device *sdev = to_scsi_device(dev);
2261         struct myrb_hba *cb = shost_priv(sdev->host);
2262         struct myrb_ldev_info *ldev_info = sdev->hostdata;
2263         enum raid_state state = RAID_STATE_UNKNOWN;
2264         unsigned short status;
2265
2266         if (sdev->channel < myrb_logical_channel(sdev->host) || !ldev_info)
2267                 state = RAID_STATE_UNKNOWN;
2268         else {
2269                 status = myrb_get_rbld_progress(cb, NULL);
2270                 if (status == MYRB_STATUS_SUCCESS)
2271                         state = RAID_STATE_RESYNCING;
2272                 else {
2273                         switch (ldev_info->state) {
2274                         case MYRB_DEVICE_ONLINE:
2275                                 state = RAID_STATE_ACTIVE;
2276                                 break;
2277                         case MYRB_DEVICE_WO:
2278                         case MYRB_DEVICE_CRITICAL:
2279                                 state = RAID_STATE_DEGRADED;
2280                                 break;
2281                         default:
2282                                 state = RAID_STATE_OFFLINE;
2283                         }
2284                 }
2285         }
2286         raid_set_state(myrb_raid_template, dev, state);
2287 }
2288
2289 static struct raid_function_template myrb_raid_functions = {
2290         .cookie         = &myrb_template,
2291         .is_raid        = myrb_is_raid,
2292         .get_resync     = myrb_get_resync,
2293         .get_state      = myrb_get_state,
2294 };
2295
2296 static void myrb_handle_scsi(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk,
2297                 struct scsi_cmnd *scmd)
2298 {
2299         unsigned short status;
2300
2301         if (!cmd_blk)
2302                 return;
2303
2304         scsi_dma_unmap(scmd);
2305
2306         if (cmd_blk->dcdb) {
2307                 memcpy(scmd->sense_buffer, &cmd_blk->dcdb->sense, 64);
2308                 dma_pool_free(cb->dcdb_pool, cmd_blk->dcdb,
2309                               cmd_blk->dcdb_addr);
2310                 cmd_blk->dcdb = NULL;
2311         }
2312         if (cmd_blk->sgl) {
2313                 dma_pool_free(cb->sg_pool, cmd_blk->sgl, cmd_blk->sgl_addr);
2314                 cmd_blk->sgl = NULL;
2315                 cmd_blk->sgl_addr = 0;
2316         }
2317         status = cmd_blk->status;
2318         switch (status) {
2319         case MYRB_STATUS_SUCCESS:
2320         case MYRB_STATUS_DEVICE_BUSY:
2321                 scmd->result = (DID_OK << 16) | status;
2322                 break;
2323         case MYRB_STATUS_BAD_DATA:
2324                 dev_dbg(&scmd->device->sdev_gendev,
2325                         "Bad Data Encountered\n");
2326                 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
2327                         /* Unrecovered read error */
2328                         scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x11, 0);
2329                 else
2330                         /* Write error */
2331                         scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x0C, 0);
2332                 break;
2333         case MYRB_STATUS_IRRECOVERABLE_DATA_ERROR:
2334                 scmd_printk(KERN_ERR, scmd, "Irrecoverable Data Error\n");
2335                 if (scmd->sc_data_direction == DMA_FROM_DEVICE)
2336                         /* Unrecovered read error, auto-reallocation failed */
2337                         scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x11, 0x04);
2338                 else
2339                         /* Write error, auto-reallocation failed */
2340                         scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x0C, 0x02);
2341                 break;
2342         case MYRB_STATUS_LDRV_NONEXISTENT_OR_OFFLINE:
2343                 dev_dbg(&scmd->device->sdev_gendev,
2344                             "Logical Drive Nonexistent or Offline");
2345                 scmd->result = (DID_BAD_TARGET << 16);
2346                 break;
2347         case MYRB_STATUS_ACCESS_BEYOND_END_OF_LDRV:
2348                 dev_dbg(&scmd->device->sdev_gendev,
2349                             "Attempt to Access Beyond End of Logical Drive");
2350                 /* Logical block address out of range */
2351                 scsi_build_sense(scmd, 0, NOT_READY, 0x21, 0);
2352                 break;
2353         case MYRB_STATUS_DEVICE_NONRESPONSIVE:
2354                 dev_dbg(&scmd->device->sdev_gendev, "Device nonresponsive\n");
2355                 scmd->result = (DID_BAD_TARGET << 16);
2356                 break;
2357         default:
2358                 scmd_printk(KERN_ERR, scmd,
2359                             "Unexpected Error Status %04X", status);
2360                 scmd->result = (DID_ERROR << 16);
2361                 break;
2362         }
2363         scmd->scsi_done(scmd);
2364 }
2365
2366 static void myrb_handle_cmdblk(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk)
2367 {
2368         if (!cmd_blk)
2369                 return;
2370
2371         if (cmd_blk->completion) {
2372                 complete(cmd_blk->completion);
2373                 cmd_blk->completion = NULL;
2374         }
2375 }
2376
2377 static void myrb_monitor(struct work_struct *work)
2378 {
2379         struct myrb_hba *cb = container_of(work,
2380                         struct myrb_hba, monitor_work.work);
2381         struct Scsi_Host *shost = cb->host;
2382         unsigned long interval = MYRB_PRIMARY_MONITOR_INTERVAL;
2383
2384         dev_dbg(&shost->shost_gendev, "monitor tick\n");
2385
2386         if (cb->new_ev_seq > cb->old_ev_seq) {
2387                 int event = cb->old_ev_seq;
2388
2389                 dev_dbg(&shost->shost_gendev,
2390                         "get event log no %d/%d\n",
2391                         cb->new_ev_seq, event);
2392                 myrb_get_event(cb, event);
2393                 cb->old_ev_seq = event + 1;
2394                 interval = 10;
2395         } else if (cb->need_err_info) {
2396                 cb->need_err_info = false;
2397                 dev_dbg(&shost->shost_gendev, "get error table\n");
2398                 myrb_get_errtable(cb);
2399                 interval = 10;
2400         } else if (cb->need_rbld && cb->rbld_first) {
2401                 cb->need_rbld = false;
2402                 dev_dbg(&shost->shost_gendev,
2403                         "get rebuild progress\n");
2404                 myrb_update_rbld_progress(cb);
2405                 interval = 10;
2406         } else if (cb->need_ldev_info) {
2407                 cb->need_ldev_info = false;
2408                 dev_dbg(&shost->shost_gendev,
2409                         "get logical drive info\n");
2410                 myrb_get_ldev_info(cb);
2411                 interval = 10;
2412         } else if (cb->need_rbld) {
2413                 cb->need_rbld = false;
2414                 dev_dbg(&shost->shost_gendev,
2415                         "get rebuild progress\n");
2416                 myrb_update_rbld_progress(cb);
2417                 interval = 10;
2418         } else if (cb->need_cc_status) {
2419                 cb->need_cc_status = false;
2420                 dev_dbg(&shost->shost_gendev,
2421                         "get consistency check progress\n");
2422                 myrb_get_cc_progress(cb);
2423                 interval = 10;
2424         } else if (cb->need_bgi_status) {
2425                 cb->need_bgi_status = false;
2426                 dev_dbg(&shost->shost_gendev, "get background init status\n");
2427                 myrb_bgi_control(cb);
2428                 interval = 10;
2429         } else {
2430                 dev_dbg(&shost->shost_gendev, "new enquiry\n");
2431                 mutex_lock(&cb->dma_mutex);
2432                 myrb_hba_enquiry(cb);
2433                 mutex_unlock(&cb->dma_mutex);
2434                 if ((cb->new_ev_seq - cb->old_ev_seq > 0) ||
2435                     cb->need_err_info || cb->need_rbld ||
2436                     cb->need_ldev_info || cb->need_cc_status ||
2437                     cb->need_bgi_status) {
2438                         dev_dbg(&shost->shost_gendev,
2439                                 "reschedule monitor\n");
2440                         interval = 0;
2441                 }
2442         }
2443         if (interval > 1)
2444                 cb->primary_monitor_time = jiffies;
2445         queue_delayed_work(cb->work_q, &cb->monitor_work, interval);
2446 }
2447
2448 /*
2449  * myrb_err_status - reports controller BIOS messages
2450  *
2451  * Controller BIOS messages are passed through the Error Status Register
2452  * when the driver performs the BIOS handshaking.
2453  *
2454  * Return: true for fatal errors and false otherwise.
2455  */
2456 static bool myrb_err_status(struct myrb_hba *cb, unsigned char error,
2457                 unsigned char parm0, unsigned char parm1)
2458 {
2459         struct pci_dev *pdev = cb->pdev;
2460
2461         switch (error) {
2462         case 0x00:
2463                 dev_info(&pdev->dev,
2464                          "Physical Device %d:%d Not Responding\n",
2465                          parm1, parm0);
2466                 break;
2467         case 0x08:
2468                 dev_notice(&pdev->dev, "Spinning Up Drives\n");
2469                 break;
2470         case 0x30:
2471                 dev_notice(&pdev->dev, "Configuration Checksum Error\n");
2472                 break;
2473         case 0x60:
2474                 dev_notice(&pdev->dev, "Mirror Race Recovery Failed\n");
2475                 break;
2476         case 0x70:
2477                 dev_notice(&pdev->dev, "Mirror Race Recovery In Progress\n");
2478                 break;
2479         case 0x90:
2480                 dev_notice(&pdev->dev, "Physical Device %d:%d COD Mismatch\n",
2481                            parm1, parm0);
2482                 break;
2483         case 0xA0:
2484                 dev_notice(&pdev->dev, "Logical Drive Installation Aborted\n");
2485                 break;
2486         case 0xB0:
2487                 dev_notice(&pdev->dev, "Mirror Race On A Critical Logical Drive\n");
2488                 break;
2489         case 0xD0:
2490                 dev_notice(&pdev->dev, "New Controller Configuration Found\n");
2491                 break;
2492         case 0xF0:
2493                 dev_err(&pdev->dev, "Fatal Memory Parity Error\n");
2494                 return true;
2495         default:
2496                 dev_err(&pdev->dev, "Unknown Initialization Error %02X\n",
2497                         error);
2498                 return true;
2499         }
2500         return false;
2501 }
2502
2503 /*
2504  * Hardware-specific functions
2505  */
2506
2507 /*
2508  * DAC960 LA Series Controllers
2509  */
2510
2511 static inline void DAC960_LA_hw_mbox_new_cmd(void __iomem *base)
2512 {
2513         writeb(DAC960_LA_IDB_HWMBOX_NEW_CMD, base + DAC960_LA_IDB_OFFSET);
2514 }
2515
2516 static inline void DAC960_LA_ack_hw_mbox_status(void __iomem *base)
2517 {
2518         writeb(DAC960_LA_IDB_HWMBOX_ACK_STS, base + DAC960_LA_IDB_OFFSET);
2519 }
2520
2521 static inline void DAC960_LA_reset_ctrl(void __iomem *base)
2522 {
2523         writeb(DAC960_LA_IDB_CTRL_RESET, base + DAC960_LA_IDB_OFFSET);
2524 }
2525
2526 static inline void DAC960_LA_mem_mbox_new_cmd(void __iomem *base)
2527 {
2528         writeb(DAC960_LA_IDB_MMBOX_NEW_CMD, base + DAC960_LA_IDB_OFFSET);
2529 }
2530
2531 static inline bool DAC960_LA_hw_mbox_is_full(void __iomem *base)
2532 {
2533         unsigned char idb = readb(base + DAC960_LA_IDB_OFFSET);
2534
2535         return !(idb & DAC960_LA_IDB_HWMBOX_EMPTY);
2536 }
2537
2538 static inline bool DAC960_LA_init_in_progress(void __iomem *base)
2539 {
2540         unsigned char idb = readb(base + DAC960_LA_IDB_OFFSET);
2541
2542         return !(idb & DAC960_LA_IDB_INIT_DONE);
2543 }
2544
2545 static inline void DAC960_LA_ack_hw_mbox_intr(void __iomem *base)
2546 {
2547         writeb(DAC960_LA_ODB_HWMBOX_ACK_IRQ, base + DAC960_LA_ODB_OFFSET);
2548 }
2549
2550 static inline void DAC960_LA_ack_intr(void __iomem *base)
2551 {
2552         writeb(DAC960_LA_ODB_HWMBOX_ACK_IRQ | DAC960_LA_ODB_MMBOX_ACK_IRQ,
2553                base + DAC960_LA_ODB_OFFSET);
2554 }
2555
2556 static inline bool DAC960_LA_hw_mbox_status_available(void __iomem *base)
2557 {
2558         unsigned char odb = readb(base + DAC960_LA_ODB_OFFSET);
2559
2560         return odb & DAC960_LA_ODB_HWMBOX_STS_AVAIL;
2561 }
2562
2563 static inline void DAC960_LA_enable_intr(void __iomem *base)
2564 {
2565         unsigned char odb = 0xFF;
2566
2567         odb &= ~DAC960_LA_IRQMASK_DISABLE_IRQ;
2568         writeb(odb, base + DAC960_LA_IRQMASK_OFFSET);
2569 }
2570
2571 static inline void DAC960_LA_disable_intr(void __iomem *base)
2572 {
2573         unsigned char odb = 0xFF;
2574
2575         odb |= DAC960_LA_IRQMASK_DISABLE_IRQ;
2576         writeb(odb, base + DAC960_LA_IRQMASK_OFFSET);
2577 }
2578
2579 static inline void DAC960_LA_write_cmd_mbox(union myrb_cmd_mbox *mem_mbox,
2580                 union myrb_cmd_mbox *mbox)
2581 {
2582         mem_mbox->words[1] = mbox->words[1];
2583         mem_mbox->words[2] = mbox->words[2];
2584         mem_mbox->words[3] = mbox->words[3];
2585         /* Memory barrier to prevent reordering */
2586         wmb();
2587         mem_mbox->words[0] = mbox->words[0];
2588         /* Memory barrier to force PCI access */
2589         mb();
2590 }
2591
2592 static inline void DAC960_LA_write_hw_mbox(void __iomem *base,
2593                 union myrb_cmd_mbox *mbox)
2594 {
2595         writel(mbox->words[0], base + DAC960_LA_CMDOP_OFFSET);
2596         writel(mbox->words[1], base + DAC960_LA_MBOX4_OFFSET);
2597         writel(mbox->words[2], base + DAC960_LA_MBOX8_OFFSET);
2598         writeb(mbox->bytes[12], base + DAC960_LA_MBOX12_OFFSET);
2599 }
2600
2601 static inline unsigned short DAC960_LA_read_status(void __iomem *base)
2602 {
2603         return readw(base + DAC960_LA_STS_OFFSET);
2604 }
2605
2606 static inline bool
2607 DAC960_LA_read_error_status(void __iomem *base, unsigned char *error,
2608                 unsigned char *param0, unsigned char *param1)
2609 {
2610         unsigned char errsts = readb(base + DAC960_LA_ERRSTS_OFFSET);
2611
2612         if (!(errsts & DAC960_LA_ERRSTS_PENDING))
2613                 return false;
2614         errsts &= ~DAC960_LA_ERRSTS_PENDING;
2615
2616         *error = errsts;
2617         *param0 = readb(base + DAC960_LA_CMDOP_OFFSET);
2618         *param1 = readb(base + DAC960_LA_CMDID_OFFSET);
2619         writeb(0xFF, base + DAC960_LA_ERRSTS_OFFSET);
2620         return true;
2621 }
2622
2623 static inline unsigned short
2624 DAC960_LA_mbox_init(struct pci_dev *pdev, void __iomem *base,
2625                 union myrb_cmd_mbox *mbox)
2626 {
2627         unsigned short status;
2628         int timeout = 0;
2629
2630         while (timeout < MYRB_MAILBOX_TIMEOUT) {
2631                 if (!DAC960_LA_hw_mbox_is_full(base))
2632                         break;
2633                 udelay(10);
2634                 timeout++;
2635         }
2636         if (DAC960_LA_hw_mbox_is_full(base)) {
2637                 dev_err(&pdev->dev,
2638                         "Timeout waiting for empty mailbox\n");
2639                 return MYRB_STATUS_SUBSYS_TIMEOUT;
2640         }
2641         DAC960_LA_write_hw_mbox(base, mbox);
2642         DAC960_LA_hw_mbox_new_cmd(base);
2643         timeout = 0;
2644         while (timeout < MYRB_MAILBOX_TIMEOUT) {
2645                 if (DAC960_LA_hw_mbox_status_available(base))
2646                         break;
2647                 udelay(10);
2648                 timeout++;
2649         }
2650         if (!DAC960_LA_hw_mbox_status_available(base)) {
2651                 dev_err(&pdev->dev, "Timeout waiting for mailbox status\n");
2652                 return MYRB_STATUS_SUBSYS_TIMEOUT;
2653         }
2654         status = DAC960_LA_read_status(base);
2655         DAC960_LA_ack_hw_mbox_intr(base);
2656         DAC960_LA_ack_hw_mbox_status(base);
2657
2658         return status;
2659 }
2660
2661 static int DAC960_LA_hw_init(struct pci_dev *pdev,
2662                 struct myrb_hba *cb, void __iomem *base)
2663 {
2664         int timeout = 0;
2665         unsigned char error, parm0, parm1;
2666
2667         DAC960_LA_disable_intr(base);
2668         DAC960_LA_ack_hw_mbox_status(base);
2669         udelay(1000);
2670         while (DAC960_LA_init_in_progress(base) &&
2671                timeout < MYRB_MAILBOX_TIMEOUT) {
2672                 if (DAC960_LA_read_error_status(base, &error,
2673                                               &parm0, &parm1) &&
2674                     myrb_err_status(cb, error, parm0, parm1))
2675                         return -ENODEV;
2676                 udelay(10);
2677                 timeout++;
2678         }
2679         if (timeout == MYRB_MAILBOX_TIMEOUT) {
2680                 dev_err(&pdev->dev,
2681                         "Timeout waiting for Controller Initialisation\n");
2682                 return -ETIMEDOUT;
2683         }
2684         if (!myrb_enable_mmio(cb, DAC960_LA_mbox_init)) {
2685                 dev_err(&pdev->dev,
2686                         "Unable to Enable Memory Mailbox Interface\n");
2687                 DAC960_LA_reset_ctrl(base);
2688                 return -ENODEV;
2689         }
2690         DAC960_LA_enable_intr(base);
2691         cb->qcmd = myrb_qcmd;
2692         cb->write_cmd_mbox = DAC960_LA_write_cmd_mbox;
2693         if (cb->dual_mode_interface)
2694                 cb->get_cmd_mbox = DAC960_LA_mem_mbox_new_cmd;
2695         else
2696                 cb->get_cmd_mbox = DAC960_LA_hw_mbox_new_cmd;
2697         cb->disable_intr = DAC960_LA_disable_intr;
2698         cb->reset = DAC960_LA_reset_ctrl;
2699
2700         return 0;
2701 }
2702
2703 static irqreturn_t DAC960_LA_intr_handler(int irq, void *arg)
2704 {
2705         struct myrb_hba *cb = arg;
2706         void __iomem *base = cb->io_base;
2707         struct myrb_stat_mbox *next_stat_mbox;
2708         unsigned long flags;
2709
2710         spin_lock_irqsave(&cb->queue_lock, flags);
2711         DAC960_LA_ack_intr(base);
2712         next_stat_mbox = cb->next_stat_mbox;
2713         while (next_stat_mbox->valid) {
2714                 unsigned char id = next_stat_mbox->id;
2715                 struct scsi_cmnd *scmd = NULL;
2716                 struct myrb_cmdblk *cmd_blk = NULL;
2717
2718                 if (id == MYRB_DCMD_TAG)
2719                         cmd_blk = &cb->dcmd_blk;
2720                 else if (id == MYRB_MCMD_TAG)
2721                         cmd_blk = &cb->mcmd_blk;
2722                 else {
2723                         scmd = scsi_host_find_tag(cb->host, id - 3);
2724                         if (scmd)
2725                                 cmd_blk = scsi_cmd_priv(scmd);
2726                 }
2727                 if (cmd_blk)
2728                         cmd_blk->status = next_stat_mbox->status;
2729                 else
2730                         dev_err(&cb->pdev->dev,
2731                                 "Unhandled command completion %d\n", id);
2732
2733                 memset(next_stat_mbox, 0, sizeof(struct myrb_stat_mbox));
2734                 if (++next_stat_mbox > cb->last_stat_mbox)
2735                         next_stat_mbox = cb->first_stat_mbox;
2736
2737                 if (cmd_blk) {
2738                         if (id < 3)
2739                                 myrb_handle_cmdblk(cb, cmd_blk);
2740                         else
2741                                 myrb_handle_scsi(cb, cmd_blk, scmd);
2742                 }
2743         }
2744         cb->next_stat_mbox = next_stat_mbox;
2745         spin_unlock_irqrestore(&cb->queue_lock, flags);
2746         return IRQ_HANDLED;
2747 }
2748
2749 static struct myrb_privdata DAC960_LA_privdata = {
2750         .hw_init =      DAC960_LA_hw_init,
2751         .irq_handler =  DAC960_LA_intr_handler,
2752         .mmio_size =    DAC960_LA_mmio_size,
2753 };
2754
2755 /*
2756  * DAC960 PG Series Controllers
2757  */
2758 static inline void DAC960_PG_hw_mbox_new_cmd(void __iomem *base)
2759 {
2760         writel(DAC960_PG_IDB_HWMBOX_NEW_CMD, base + DAC960_PG_IDB_OFFSET);
2761 }
2762
2763 static inline void DAC960_PG_ack_hw_mbox_status(void __iomem *base)
2764 {
2765         writel(DAC960_PG_IDB_HWMBOX_ACK_STS, base + DAC960_PG_IDB_OFFSET);
2766 }
2767
2768 static inline void DAC960_PG_reset_ctrl(void __iomem *base)
2769 {
2770         writel(DAC960_PG_IDB_CTRL_RESET, base + DAC960_PG_IDB_OFFSET);
2771 }
2772
2773 static inline void DAC960_PG_mem_mbox_new_cmd(void __iomem *base)
2774 {
2775         writel(DAC960_PG_IDB_MMBOX_NEW_CMD, base + DAC960_PG_IDB_OFFSET);
2776 }
2777
2778 static inline bool DAC960_PG_hw_mbox_is_full(void __iomem *base)
2779 {
2780         unsigned char idb = readl(base + DAC960_PG_IDB_OFFSET);
2781
2782         return idb & DAC960_PG_IDB_HWMBOX_FULL;
2783 }
2784
2785 static inline bool DAC960_PG_init_in_progress(void __iomem *base)
2786 {
2787         unsigned char idb = readl(base + DAC960_PG_IDB_OFFSET);
2788
2789         return idb & DAC960_PG_IDB_INIT_IN_PROGRESS;
2790 }
2791
2792 static inline void DAC960_PG_ack_hw_mbox_intr(void __iomem *base)
2793 {
2794         writel(DAC960_PG_ODB_HWMBOX_ACK_IRQ, base + DAC960_PG_ODB_OFFSET);
2795 }
2796
2797 static inline void DAC960_PG_ack_intr(void __iomem *base)
2798 {
2799         writel(DAC960_PG_ODB_HWMBOX_ACK_IRQ | DAC960_PG_ODB_MMBOX_ACK_IRQ,
2800                base + DAC960_PG_ODB_OFFSET);
2801 }
2802
2803 static inline bool DAC960_PG_hw_mbox_status_available(void __iomem *base)
2804 {
2805         unsigned char odb = readl(base + DAC960_PG_ODB_OFFSET);
2806
2807         return odb & DAC960_PG_ODB_HWMBOX_STS_AVAIL;
2808 }
2809
2810 static inline void DAC960_PG_enable_intr(void __iomem *base)
2811 {
2812         unsigned int imask = (unsigned int)-1;
2813
2814         imask &= ~DAC960_PG_IRQMASK_DISABLE_IRQ;
2815         writel(imask, base + DAC960_PG_IRQMASK_OFFSET);
2816 }
2817
2818 static inline void DAC960_PG_disable_intr(void __iomem *base)
2819 {
2820         unsigned int imask = (unsigned int)-1;
2821
2822         writel(imask, base + DAC960_PG_IRQMASK_OFFSET);
2823 }
2824
2825 static inline void DAC960_PG_write_cmd_mbox(union myrb_cmd_mbox *mem_mbox,
2826                 union myrb_cmd_mbox *mbox)
2827 {
2828         mem_mbox->words[1] = mbox->words[1];
2829         mem_mbox->words[2] = mbox->words[2];
2830         mem_mbox->words[3] = mbox->words[3];
2831         /* Memory barrier to prevent reordering */
2832         wmb();
2833         mem_mbox->words[0] = mbox->words[0];
2834         /* Memory barrier to force PCI access */
2835         mb();
2836 }
2837
2838 static inline void DAC960_PG_write_hw_mbox(void __iomem *base,
2839                 union myrb_cmd_mbox *mbox)
2840 {
2841         writel(mbox->words[0], base + DAC960_PG_CMDOP_OFFSET);
2842         writel(mbox->words[1], base + DAC960_PG_MBOX4_OFFSET);
2843         writel(mbox->words[2], base + DAC960_PG_MBOX8_OFFSET);
2844         writeb(mbox->bytes[12], base + DAC960_PG_MBOX12_OFFSET);
2845 }
2846
2847 static inline unsigned short
2848 DAC960_PG_read_status(void __iomem *base)
2849 {
2850         return readw(base + DAC960_PG_STS_OFFSET);
2851 }
2852
2853 static inline bool
2854 DAC960_PG_read_error_status(void __iomem *base, unsigned char *error,
2855                 unsigned char *param0, unsigned char *param1)
2856 {
2857         unsigned char errsts = readb(base + DAC960_PG_ERRSTS_OFFSET);
2858
2859         if (!(errsts & DAC960_PG_ERRSTS_PENDING))
2860                 return false;
2861         errsts &= ~DAC960_PG_ERRSTS_PENDING;
2862         *error = errsts;
2863         *param0 = readb(base + DAC960_PG_CMDOP_OFFSET);
2864         *param1 = readb(base + DAC960_PG_CMDID_OFFSET);
2865         writeb(0, base + DAC960_PG_ERRSTS_OFFSET);
2866         return true;
2867 }
2868
2869 static inline unsigned short
2870 DAC960_PG_mbox_init(struct pci_dev *pdev, void __iomem *base,
2871                 union myrb_cmd_mbox *mbox)
2872 {
2873         unsigned short status;
2874         int timeout = 0;
2875
2876         while (timeout < MYRB_MAILBOX_TIMEOUT) {
2877                 if (!DAC960_PG_hw_mbox_is_full(base))
2878                         break;
2879                 udelay(10);
2880                 timeout++;
2881         }
2882         if (DAC960_PG_hw_mbox_is_full(base)) {
2883                 dev_err(&pdev->dev,
2884                         "Timeout waiting for empty mailbox\n");
2885                 return MYRB_STATUS_SUBSYS_TIMEOUT;
2886         }
2887         DAC960_PG_write_hw_mbox(base, mbox);
2888         DAC960_PG_hw_mbox_new_cmd(base);
2889
2890         timeout = 0;
2891         while (timeout < MYRB_MAILBOX_TIMEOUT) {
2892                 if (DAC960_PG_hw_mbox_status_available(base))
2893                         break;
2894                 udelay(10);
2895                 timeout++;
2896         }
2897         if (!DAC960_PG_hw_mbox_status_available(base)) {
2898                 dev_err(&pdev->dev,
2899                         "Timeout waiting for mailbox status\n");
2900                 return MYRB_STATUS_SUBSYS_TIMEOUT;
2901         }
2902         status = DAC960_PG_read_status(base);
2903         DAC960_PG_ack_hw_mbox_intr(base);
2904         DAC960_PG_ack_hw_mbox_status(base);
2905
2906         return status;
2907 }
2908
2909 static int DAC960_PG_hw_init(struct pci_dev *pdev,
2910                 struct myrb_hba *cb, void __iomem *base)
2911 {
2912         int timeout = 0;
2913         unsigned char error, parm0, parm1;
2914
2915         DAC960_PG_disable_intr(base);
2916         DAC960_PG_ack_hw_mbox_status(base);
2917         udelay(1000);
2918         while (DAC960_PG_init_in_progress(base) &&
2919                timeout < MYRB_MAILBOX_TIMEOUT) {
2920                 if (DAC960_PG_read_error_status(base, &error,
2921                                                 &parm0, &parm1) &&
2922                     myrb_err_status(cb, error, parm0, parm1))
2923                         return -EIO;
2924                 udelay(10);
2925                 timeout++;
2926         }
2927         if (timeout == MYRB_MAILBOX_TIMEOUT) {
2928                 dev_err(&pdev->dev,
2929                         "Timeout waiting for Controller Initialisation\n");
2930                 return -ETIMEDOUT;
2931         }
2932         if (!myrb_enable_mmio(cb, DAC960_PG_mbox_init)) {
2933                 dev_err(&pdev->dev,
2934                         "Unable to Enable Memory Mailbox Interface\n");
2935                 DAC960_PG_reset_ctrl(base);
2936                 return -ENODEV;
2937         }
2938         DAC960_PG_enable_intr(base);
2939         cb->qcmd = myrb_qcmd;
2940         cb->write_cmd_mbox = DAC960_PG_write_cmd_mbox;
2941         if (cb->dual_mode_interface)
2942                 cb->get_cmd_mbox = DAC960_PG_mem_mbox_new_cmd;
2943         else
2944                 cb->get_cmd_mbox = DAC960_PG_hw_mbox_new_cmd;
2945         cb->disable_intr = DAC960_PG_disable_intr;
2946         cb->reset = DAC960_PG_reset_ctrl;
2947
2948         return 0;
2949 }
2950
2951 static irqreturn_t DAC960_PG_intr_handler(int irq, void *arg)
2952 {
2953         struct myrb_hba *cb = arg;
2954         void __iomem *base = cb->io_base;
2955         struct myrb_stat_mbox *next_stat_mbox;
2956         unsigned long flags;
2957
2958         spin_lock_irqsave(&cb->queue_lock, flags);
2959         DAC960_PG_ack_intr(base);
2960         next_stat_mbox = cb->next_stat_mbox;
2961         while (next_stat_mbox->valid) {
2962                 unsigned char id = next_stat_mbox->id;
2963                 struct scsi_cmnd *scmd = NULL;
2964                 struct myrb_cmdblk *cmd_blk = NULL;
2965
2966                 if (id == MYRB_DCMD_TAG)
2967                         cmd_blk = &cb->dcmd_blk;
2968                 else if (id == MYRB_MCMD_TAG)
2969                         cmd_blk = &cb->mcmd_blk;
2970                 else {
2971                         scmd = scsi_host_find_tag(cb->host, id - 3);
2972                         if (scmd)
2973                                 cmd_blk = scsi_cmd_priv(scmd);
2974                 }
2975                 if (cmd_blk)
2976                         cmd_blk->status = next_stat_mbox->status;
2977                 else
2978                         dev_err(&cb->pdev->dev,
2979                                 "Unhandled command completion %d\n", id);
2980
2981                 memset(next_stat_mbox, 0, sizeof(struct myrb_stat_mbox));
2982                 if (++next_stat_mbox > cb->last_stat_mbox)
2983                         next_stat_mbox = cb->first_stat_mbox;
2984
2985                 if (id < 3)
2986                         myrb_handle_cmdblk(cb, cmd_blk);
2987                 else
2988                         myrb_handle_scsi(cb, cmd_blk, scmd);
2989         }
2990         cb->next_stat_mbox = next_stat_mbox;
2991         spin_unlock_irqrestore(&cb->queue_lock, flags);
2992         return IRQ_HANDLED;
2993 }
2994
2995 static struct myrb_privdata DAC960_PG_privdata = {
2996         .hw_init =      DAC960_PG_hw_init,
2997         .irq_handler =  DAC960_PG_intr_handler,
2998         .mmio_size =    DAC960_PG_mmio_size,
2999 };
3000
3001
3002 /*
3003  * DAC960 PD Series Controllers
3004  */
3005
3006 static inline void DAC960_PD_hw_mbox_new_cmd(void __iomem *base)
3007 {
3008         writeb(DAC960_PD_IDB_HWMBOX_NEW_CMD, base + DAC960_PD_IDB_OFFSET);
3009 }
3010
3011 static inline void DAC960_PD_ack_hw_mbox_status(void __iomem *base)
3012 {
3013         writeb(DAC960_PD_IDB_HWMBOX_ACK_STS, base + DAC960_PD_IDB_OFFSET);
3014 }
3015
3016 static inline void DAC960_PD_reset_ctrl(void __iomem *base)
3017 {
3018         writeb(DAC960_PD_IDB_CTRL_RESET, base + DAC960_PD_IDB_OFFSET);
3019 }
3020
3021 static inline bool DAC960_PD_hw_mbox_is_full(void __iomem *base)
3022 {
3023         unsigned char idb = readb(base + DAC960_PD_IDB_OFFSET);
3024
3025         return idb & DAC960_PD_IDB_HWMBOX_FULL;
3026 }
3027
3028 static inline bool DAC960_PD_init_in_progress(void __iomem *base)
3029 {
3030         unsigned char idb = readb(base + DAC960_PD_IDB_OFFSET);
3031
3032         return idb & DAC960_PD_IDB_INIT_IN_PROGRESS;
3033 }
3034
3035 static inline void DAC960_PD_ack_intr(void __iomem *base)
3036 {
3037         writeb(DAC960_PD_ODB_HWMBOX_ACK_IRQ, base + DAC960_PD_ODB_OFFSET);
3038 }
3039
3040 static inline bool DAC960_PD_hw_mbox_status_available(void __iomem *base)
3041 {
3042         unsigned char odb = readb(base + DAC960_PD_ODB_OFFSET);
3043
3044         return odb & DAC960_PD_ODB_HWMBOX_STS_AVAIL;
3045 }
3046
3047 static inline void DAC960_PD_enable_intr(void __iomem *base)
3048 {
3049         writeb(DAC960_PD_IRQMASK_ENABLE_IRQ, base + DAC960_PD_IRQEN_OFFSET);
3050 }
3051
3052 static inline void DAC960_PD_disable_intr(void __iomem *base)
3053 {
3054         writeb(0, base + DAC960_PD_IRQEN_OFFSET);
3055 }
3056
3057 static inline void DAC960_PD_write_cmd_mbox(void __iomem *base,
3058                 union myrb_cmd_mbox *mbox)
3059 {
3060         writel(mbox->words[0], base + DAC960_PD_CMDOP_OFFSET);
3061         writel(mbox->words[1], base + DAC960_PD_MBOX4_OFFSET);
3062         writel(mbox->words[2], base + DAC960_PD_MBOX8_OFFSET);
3063         writeb(mbox->bytes[12], base + DAC960_PD_MBOX12_OFFSET);
3064 }
3065
3066 static inline unsigned char
3067 DAC960_PD_read_status_cmd_ident(void __iomem *base)
3068 {
3069         return readb(base + DAC960_PD_STSID_OFFSET);
3070 }
3071
3072 static inline unsigned short
3073 DAC960_PD_read_status(void __iomem *base)
3074 {
3075         return readw(base + DAC960_PD_STS_OFFSET);
3076 }
3077
3078 static inline bool
3079 DAC960_PD_read_error_status(void __iomem *base, unsigned char *error,
3080                 unsigned char *param0, unsigned char *param1)
3081 {
3082         unsigned char errsts = readb(base + DAC960_PD_ERRSTS_OFFSET);
3083
3084         if (!(errsts & DAC960_PD_ERRSTS_PENDING))
3085                 return false;
3086         errsts &= ~DAC960_PD_ERRSTS_PENDING;
3087         *error = errsts;
3088         *param0 = readb(base + DAC960_PD_CMDOP_OFFSET);
3089         *param1 = readb(base + DAC960_PD_CMDID_OFFSET);
3090         writeb(0, base + DAC960_PD_ERRSTS_OFFSET);
3091         return true;
3092 }
3093
3094 static void DAC960_PD_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk)
3095 {
3096         void __iomem *base = cb->io_base;
3097         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
3098
3099         while (DAC960_PD_hw_mbox_is_full(base))
3100                 udelay(1);
3101         DAC960_PD_write_cmd_mbox(base, mbox);
3102         DAC960_PD_hw_mbox_new_cmd(base);
3103 }
3104
3105 static int DAC960_PD_hw_init(struct pci_dev *pdev,
3106                 struct myrb_hba *cb, void __iomem *base)
3107 {
3108         int timeout = 0;
3109         unsigned char error, parm0, parm1;
3110
3111         if (!request_region(cb->io_addr, 0x80, "myrb")) {
3112                 dev_err(&pdev->dev, "IO port 0x%lx busy\n",
3113                         (unsigned long)cb->io_addr);
3114                 return -EBUSY;
3115         }
3116         DAC960_PD_disable_intr(base);
3117         DAC960_PD_ack_hw_mbox_status(base);
3118         udelay(1000);
3119         while (DAC960_PD_init_in_progress(base) &&
3120                timeout < MYRB_MAILBOX_TIMEOUT) {
3121                 if (DAC960_PD_read_error_status(base, &error,
3122                                               &parm0, &parm1) &&
3123                     myrb_err_status(cb, error, parm0, parm1))
3124                         return -EIO;
3125                 udelay(10);
3126                 timeout++;
3127         }
3128         if (timeout == MYRB_MAILBOX_TIMEOUT) {
3129                 dev_err(&pdev->dev,
3130                         "Timeout waiting for Controller Initialisation\n");
3131                 return -ETIMEDOUT;
3132         }
3133         if (!myrb_enable_mmio(cb, NULL)) {
3134                 dev_err(&pdev->dev,
3135                         "Unable to Enable Memory Mailbox Interface\n");
3136                 DAC960_PD_reset_ctrl(base);
3137                 return -ENODEV;
3138         }
3139         DAC960_PD_enable_intr(base);
3140         cb->qcmd = DAC960_PD_qcmd;
3141         cb->disable_intr = DAC960_PD_disable_intr;
3142         cb->reset = DAC960_PD_reset_ctrl;
3143
3144         return 0;
3145 }
3146
3147 static irqreturn_t DAC960_PD_intr_handler(int irq, void *arg)
3148 {
3149         struct myrb_hba *cb = arg;
3150         void __iomem *base = cb->io_base;
3151         unsigned long flags;
3152
3153         spin_lock_irqsave(&cb->queue_lock, flags);
3154         while (DAC960_PD_hw_mbox_status_available(base)) {
3155                 unsigned char id = DAC960_PD_read_status_cmd_ident(base);
3156                 struct scsi_cmnd *scmd = NULL;
3157                 struct myrb_cmdblk *cmd_blk = NULL;
3158
3159                 if (id == MYRB_DCMD_TAG)
3160                         cmd_blk = &cb->dcmd_blk;
3161                 else if (id == MYRB_MCMD_TAG)
3162                         cmd_blk = &cb->mcmd_blk;
3163                 else {
3164                         scmd = scsi_host_find_tag(cb->host, id - 3);
3165                         if (scmd)
3166                                 cmd_blk = scsi_cmd_priv(scmd);
3167                 }
3168                 if (cmd_blk)
3169                         cmd_blk->status = DAC960_PD_read_status(base);
3170                 else
3171                         dev_err(&cb->pdev->dev,
3172                                 "Unhandled command completion %d\n", id);
3173
3174                 DAC960_PD_ack_intr(base);
3175                 DAC960_PD_ack_hw_mbox_status(base);
3176
3177                 if (id < 3)
3178                         myrb_handle_cmdblk(cb, cmd_blk);
3179                 else
3180                         myrb_handle_scsi(cb, cmd_blk, scmd);
3181         }
3182         spin_unlock_irqrestore(&cb->queue_lock, flags);
3183         return IRQ_HANDLED;
3184 }
3185
3186 static struct myrb_privdata DAC960_PD_privdata = {
3187         .hw_init =      DAC960_PD_hw_init,
3188         .irq_handler =  DAC960_PD_intr_handler,
3189         .mmio_size =    DAC960_PD_mmio_size,
3190 };
3191
3192
3193 /*
3194  * DAC960 P Series Controllers
3195  *
3196  * Similar to the DAC960 PD Series Controllers, but some commands have
3197  * to be translated.
3198  */
3199
3200 static inline void myrb_translate_enquiry(void *enq)
3201 {
3202         memcpy(enq + 132, enq + 36, 64);
3203         memset(enq + 36, 0, 96);
3204 }
3205
3206 static inline void myrb_translate_devstate(void *state)
3207 {
3208         memcpy(state + 2, state + 3, 1);
3209         memmove(state + 4, state + 5, 2);
3210         memmove(state + 6, state + 8, 4);
3211 }
3212
3213 static inline void myrb_translate_to_rw_command(struct myrb_cmdblk *cmd_blk)
3214 {
3215         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
3216         int ldev_num = mbox->type5.ld.ldev_num;
3217
3218         mbox->bytes[3] &= 0x7;
3219         mbox->bytes[3] |= mbox->bytes[7] << 6;
3220         mbox->bytes[7] = ldev_num;
3221 }
3222
3223 static inline void myrb_translate_from_rw_command(struct myrb_cmdblk *cmd_blk)
3224 {
3225         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
3226         int ldev_num = mbox->bytes[7];
3227
3228         mbox->bytes[7] = mbox->bytes[3] >> 6;
3229         mbox->bytes[3] &= 0x7;
3230         mbox->bytes[3] |= ldev_num << 3;
3231 }
3232
3233 static void DAC960_P_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk)
3234 {
3235         void __iomem *base = cb->io_base;
3236         union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
3237
3238         switch (mbox->common.opcode) {
3239         case MYRB_CMD_ENQUIRY:
3240                 mbox->common.opcode = MYRB_CMD_ENQUIRY_OLD;
3241                 break;
3242         case MYRB_CMD_GET_DEVICE_STATE:
3243                 mbox->common.opcode = MYRB_CMD_GET_DEVICE_STATE_OLD;
3244                 break;
3245         case MYRB_CMD_READ:
3246                 mbox->common.opcode = MYRB_CMD_READ_OLD;
3247                 myrb_translate_to_rw_command(cmd_blk);
3248                 break;
3249         case MYRB_CMD_WRITE:
3250                 mbox->common.opcode = MYRB_CMD_WRITE_OLD;
3251                 myrb_translate_to_rw_command(cmd_blk);
3252                 break;
3253         case MYRB_CMD_READ_SG:
3254                 mbox->common.opcode = MYRB_CMD_READ_SG_OLD;
3255                 myrb_translate_to_rw_command(cmd_blk);
3256                 break;
3257         case MYRB_CMD_WRITE_SG:
3258                 mbox->common.opcode = MYRB_CMD_WRITE_SG_OLD;
3259                 myrb_translate_to_rw_command(cmd_blk);
3260                 break;
3261         default:
3262                 break;
3263         }
3264         while (DAC960_PD_hw_mbox_is_full(base))
3265                 udelay(1);
3266         DAC960_PD_write_cmd_mbox(base, mbox);
3267         DAC960_PD_hw_mbox_new_cmd(base);
3268 }
3269
3270
3271 static int DAC960_P_hw_init(struct pci_dev *pdev,
3272                 struct myrb_hba *cb, void __iomem *base)
3273 {
3274         int timeout = 0;
3275         unsigned char error, parm0, parm1;
3276
3277         if (!request_region(cb->io_addr, 0x80, "myrb")) {
3278                 dev_err(&pdev->dev, "IO port 0x%lx busy\n",
3279                         (unsigned long)cb->io_addr);
3280                 return -EBUSY;
3281         }
3282         DAC960_PD_disable_intr(base);
3283         DAC960_PD_ack_hw_mbox_status(base);
3284         udelay(1000);
3285         while (DAC960_PD_init_in_progress(base) &&
3286                timeout < MYRB_MAILBOX_TIMEOUT) {
3287                 if (DAC960_PD_read_error_status(base, &error,
3288                                                 &parm0, &parm1) &&
3289                     myrb_err_status(cb, error, parm0, parm1))
3290                         return -EAGAIN;
3291                 udelay(10);
3292                 timeout++;
3293         }
3294         if (timeout == MYRB_MAILBOX_TIMEOUT) {
3295                 dev_err(&pdev->dev,
3296                         "Timeout waiting for Controller Initialisation\n");
3297                 return -ETIMEDOUT;
3298         }
3299         if (!myrb_enable_mmio(cb, NULL)) {
3300                 dev_err(&pdev->dev,
3301                         "Unable to allocate DMA mapped memory\n");
3302                 DAC960_PD_reset_ctrl(base);
3303                 return -ETIMEDOUT;
3304         }
3305         DAC960_PD_enable_intr(base);
3306         cb->qcmd = DAC960_P_qcmd;
3307         cb->disable_intr = DAC960_PD_disable_intr;
3308         cb->reset = DAC960_PD_reset_ctrl;
3309
3310         return 0;
3311 }
3312
3313 static irqreturn_t DAC960_P_intr_handler(int irq, void *arg)
3314 {
3315         struct myrb_hba *cb = arg;
3316         void __iomem *base = cb->io_base;
3317         unsigned long flags;
3318
3319         spin_lock_irqsave(&cb->queue_lock, flags);
3320         while (DAC960_PD_hw_mbox_status_available(base)) {
3321                 unsigned char id = DAC960_PD_read_status_cmd_ident(base);
3322                 struct scsi_cmnd *scmd = NULL;
3323                 struct myrb_cmdblk *cmd_blk = NULL;
3324                 union myrb_cmd_mbox *mbox;
3325                 enum myrb_cmd_opcode op;
3326
3327
3328                 if (id == MYRB_DCMD_TAG)
3329                         cmd_blk = &cb->dcmd_blk;
3330                 else if (id == MYRB_MCMD_TAG)
3331                         cmd_blk = &cb->mcmd_blk;
3332                 else {
3333                         scmd = scsi_host_find_tag(cb->host, id - 3);
3334                         if (scmd)
3335                                 cmd_blk = scsi_cmd_priv(scmd);
3336                 }
3337                 if (cmd_blk)
3338                         cmd_blk->status = DAC960_PD_read_status(base);
3339                 else
3340                         dev_err(&cb->pdev->dev,
3341                                 "Unhandled command completion %d\n", id);
3342
3343                 DAC960_PD_ack_intr(base);
3344                 DAC960_PD_ack_hw_mbox_status(base);
3345
3346                 if (!cmd_blk)
3347                         continue;
3348
3349                 mbox = &cmd_blk->mbox;
3350                 op = mbox->common.opcode;
3351                 switch (op) {
3352                 case MYRB_CMD_ENQUIRY_OLD:
3353                         mbox->common.opcode = MYRB_CMD_ENQUIRY;
3354                         myrb_translate_enquiry(cb->enquiry);
3355                         break;
3356                 case MYRB_CMD_READ_OLD:
3357                         mbox->common.opcode = MYRB_CMD_READ;
3358                         myrb_translate_from_rw_command(cmd_blk);
3359                         break;
3360                 case MYRB_CMD_WRITE_OLD:
3361                         mbox->common.opcode = MYRB_CMD_WRITE;
3362                         myrb_translate_from_rw_command(cmd_blk);
3363                         break;
3364                 case MYRB_CMD_READ_SG_OLD:
3365                         mbox->common.opcode = MYRB_CMD_READ_SG;
3366                         myrb_translate_from_rw_command(cmd_blk);
3367                         break;
3368                 case MYRB_CMD_WRITE_SG_OLD:
3369                         mbox->common.opcode = MYRB_CMD_WRITE_SG;
3370                         myrb_translate_from_rw_command(cmd_blk);
3371                         break;
3372                 default:
3373                         break;
3374                 }
3375                 if (id < 3)
3376                         myrb_handle_cmdblk(cb, cmd_blk);
3377                 else
3378                         myrb_handle_scsi(cb, cmd_blk, scmd);
3379         }
3380         spin_unlock_irqrestore(&cb->queue_lock, flags);
3381         return IRQ_HANDLED;
3382 }
3383
3384 static struct myrb_privdata DAC960_P_privdata = {
3385         .hw_init =      DAC960_P_hw_init,
3386         .irq_handler =  DAC960_P_intr_handler,
3387         .mmio_size =    DAC960_PD_mmio_size,
3388 };
3389
3390 static struct myrb_hba *myrb_detect(struct pci_dev *pdev,
3391                 const struct pci_device_id *entry)
3392 {
3393         struct myrb_privdata *privdata =
3394                 (struct myrb_privdata *)entry->driver_data;
3395         irq_handler_t irq_handler = privdata->irq_handler;
3396         unsigned int mmio_size = privdata->mmio_size;
3397         struct Scsi_Host *shost;
3398         struct myrb_hba *cb = NULL;
3399
3400         shost = scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba));
3401         if (!shost) {
3402                 dev_err(&pdev->dev, "Unable to allocate Controller\n");
3403                 return NULL;
3404         }
3405         shost->max_cmd_len = 12;
3406         shost->max_lun = 256;
3407         cb = shost_priv(shost);
3408         mutex_init(&cb->dcmd_mutex);
3409         mutex_init(&cb->dma_mutex);
3410         cb->pdev = pdev;
3411
3412         if (pci_enable_device(pdev))
3413                 goto failure;
3414
3415         if (privdata->hw_init == DAC960_PD_hw_init ||
3416             privdata->hw_init == DAC960_P_hw_init) {
3417                 cb->io_addr = pci_resource_start(pdev, 0);
3418                 cb->pci_addr = pci_resource_start(pdev, 1);
3419         } else
3420                 cb->pci_addr = pci_resource_start(pdev, 0);
3421
3422         pci_set_drvdata(pdev, cb);
3423         spin_lock_init(&cb->queue_lock);
3424         if (mmio_size < PAGE_SIZE)
3425                 mmio_size = PAGE_SIZE;
3426         cb->mmio_base = ioremap(cb->pci_addr & PAGE_MASK, mmio_size);
3427         if (cb->mmio_base == NULL) {
3428                 dev_err(&pdev->dev,
3429                         "Unable to map Controller Register Window\n");
3430                 goto failure;
3431         }
3432
3433         cb->io_base = cb->mmio_base + (cb->pci_addr & ~PAGE_MASK);
3434         if (privdata->hw_init(pdev, cb, cb->io_base))
3435                 goto failure;
3436
3437         if (request_irq(pdev->irq, irq_handler, IRQF_SHARED, "myrb", cb) < 0) {
3438                 dev_err(&pdev->dev,
3439                         "Unable to acquire IRQ Channel %d\n", pdev->irq);
3440                 goto failure;
3441         }
3442         cb->irq = pdev->irq;
3443         return cb;
3444
3445 failure:
3446         dev_err(&pdev->dev,
3447                 "Failed to initialize Controller\n");
3448         myrb_cleanup(cb);
3449         return NULL;
3450 }
3451
3452 static int myrb_probe(struct pci_dev *dev, const struct pci_device_id *entry)
3453 {
3454         struct myrb_hba *cb;
3455         int ret;
3456
3457         cb = myrb_detect(dev, entry);
3458         if (!cb)
3459                 return -ENODEV;
3460
3461         ret = myrb_get_hba_config(cb);
3462         if (ret < 0) {
3463                 myrb_cleanup(cb);
3464                 return ret;
3465         }
3466
3467         if (!myrb_create_mempools(dev, cb)) {
3468                 ret = -ENOMEM;
3469                 goto failed;
3470         }
3471
3472         ret = scsi_add_host(cb->host, &dev->dev);
3473         if (ret) {
3474                 dev_err(&dev->dev, "scsi_add_host failed with %d\n", ret);
3475                 myrb_destroy_mempools(cb);
3476                 goto failed;
3477         }
3478         scsi_scan_host(cb->host);
3479         return 0;
3480 failed:
3481         myrb_cleanup(cb);
3482         return ret;
3483 }
3484
3485
3486 static void myrb_remove(struct pci_dev *pdev)
3487 {
3488         struct myrb_hba *cb = pci_get_drvdata(pdev);
3489
3490         shost_printk(KERN_NOTICE, cb->host, "Flushing Cache...");
3491         myrb_exec_type3(cb, MYRB_CMD_FLUSH, 0);
3492         myrb_cleanup(cb);
3493         myrb_destroy_mempools(cb);
3494 }
3495
3496
3497 static const struct pci_device_id myrb_id_table[] = {
3498         {
3499                 PCI_DEVICE_SUB(PCI_VENDOR_ID_DEC,
3500                                PCI_DEVICE_ID_DEC_21285,
3501                                PCI_VENDOR_ID_MYLEX,
3502                                PCI_DEVICE_ID_MYLEX_DAC960_LA),
3503                 .driver_data    = (unsigned long) &DAC960_LA_privdata,
3504         },
3505         {
3506                 PCI_DEVICE_DATA(MYLEX, DAC960_PG, &DAC960_PG_privdata),
3507         },
3508         {
3509                 PCI_DEVICE_DATA(MYLEX, DAC960_PD, &DAC960_PD_privdata),
3510         },
3511         {
3512                 PCI_DEVICE_DATA(MYLEX, DAC960_P, &DAC960_P_privdata),
3513         },
3514         {0, },
3515 };
3516
3517 MODULE_DEVICE_TABLE(pci, myrb_id_table);
3518
3519 static struct pci_driver myrb_pci_driver = {
3520         .name           = "myrb",
3521         .id_table       = myrb_id_table,
3522         .probe          = myrb_probe,
3523         .remove         = myrb_remove,
3524 };
3525
3526 static int __init myrb_init_module(void)
3527 {
3528         int ret;
3529
3530         myrb_raid_template = raid_class_attach(&myrb_raid_functions);
3531         if (!myrb_raid_template)
3532                 return -ENODEV;
3533
3534         ret = pci_register_driver(&myrb_pci_driver);
3535         if (ret)
3536                 raid_class_release(myrb_raid_template);
3537
3538         return ret;
3539 }
3540
3541 static void __exit myrb_cleanup_module(void)
3542 {
3543         pci_unregister_driver(&myrb_pci_driver);
3544         raid_class_release(myrb_raid_template);
3545 }
3546
3547 module_init(myrb_init_module);
3548 module_exit(myrb_cleanup_module);
3549
3550 MODULE_DESCRIPTION("Mylex DAC960/AcceleRAID/eXtremeRAID driver (Block interface)");
3551 MODULE_AUTHOR("Hannes Reinecke <hare@suse.com>");
3552 MODULE_LICENSE("GPL");