]> git.pld-linux.org Git - packages/kernel.git/blame - 2.6.1-rc2-mptlinux-3.00.00.patch
- update for cset 20040707_...
[packages/kernel.git] / 2.6.1-rc2-mptlinux-3.00.00.patch
CommitLineData
9e5a6bf4 1diff -uarN linux-2.6.1-rc2-reference/drivers/message/fusion/mptbase.c linux-2.6.1-rc2/drivers/message/fusion/mptbase.c
2--- linux-2.6.1-rc2-reference/drivers/message/fusion/mptbase.c 2004-01-06 14:17:58.000000000 -0700
3+++ linux-2.6.1-rc2/drivers/message/fusion/mptbase.c 2004-01-06 15:01:27.803311992 -0700
4@@ -167,6 +167,7 @@
5 static MPT_EVHANDLER MptEvHandlers[MPT_MAX_PROTOCOL_DRIVERS];
6 /* Reset handler lookup table */
7 static MPT_RESETHANDLER MptResetHandlers[MPT_MAX_PROTOCOL_DRIVERS];
8+static MPT_DVHANDLER MptDvHandler[MPT_MAX_PROTOCOL_DRIVERS];
9
10 static int FusionInitCalled = 0;
11 static int mpt_base_index = -1;
12@@ -183,7 +184,6 @@
13 static int mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply);
14
15 static int mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag);
16-static int mpt_adapter_install(struct pci_dev *pdev);
17 static void mpt_detect_bound_ports(MPT_ADAPTER *this, struct pci_dev *pdev);
18 static void mpt_adapter_disable(MPT_ADAPTER *ioc, int freeup);
19 static void mpt_adapter_dispose(MPT_ADAPTER *ioc);
20@@ -232,8 +232,11 @@
21 static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info);
22 static void mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info);
23
24-int fusion_init(void);
25-static void fusion_exit(void);
26+/* module entry point */
27+static int __devinit mptbase_probe (struct pci_dev *, const struct pci_device_id *);
28+static void __devexit mptbase_remove(struct pci_dev *);
29+static int __init fusion_init (void);
30+static void __exit fusion_exit (void);
31
32 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
33 /*
34@@ -260,6 +263,80 @@
35
36 #endif
37
38+/****************************************************************************
39+ * Supported hardware
40+ */
41+#define DEVT_INDEX_MPT 0x0000 /* Fusion MPT Interface */
42+
43+static struct pci_device_id mptbase_pci_table[] = {
44+ {
45+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
46+ .device = PCI_DEVICE_ID_LSI_FC909,
47+ .subvendor = PCI_ANY_ID,
48+ .subdevice = PCI_ANY_ID,
49+ .class = PCI_CLASS_SERIAL_FIBER << 8,
50+ .class_mask = 0xFFFF00,
51+ .driver_data = DEVT_INDEX_MPT
52+ },
53+ {
54+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
55+ .device = PCI_DEVICE_ID_LSI_FC929,
56+ .subvendor = PCI_ANY_ID,
57+ .subdevice = PCI_ANY_ID,
58+ .class = PCI_CLASS_SERIAL_FIBER << 8,
59+ .class_mask = 0xFFFF00,
60+ .driver_data = DEVT_INDEX_MPT
61+ },
62+ {
63+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
64+ .device = PCI_DEVICE_ID_LSI_FC919,
65+ .subvendor = PCI_ANY_ID,
66+ .subdevice = PCI_ANY_ID,
67+ .class = PCI_CLASS_SERIAL_FIBER << 8,
68+ .class_mask = 0xFFFF00,
69+ .driver_data = DEVT_INDEX_MPT
70+ },
71+ {
72+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
73+ .device = PCI_DEVICE_ID_LSI_FC929X,
74+ .subvendor = PCI_ANY_ID,
75+ .subdevice = PCI_ANY_ID,
76+ .class = PCI_CLASS_SERIAL_FIBER << 8,
77+ .class_mask = 0xFFFF00,
78+ .driver_data = DEVT_INDEX_MPT
79+ },
80+ {
81+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
82+ .device = PCI_DEVICE_ID_LSI_FC919X,
83+ .subvendor = PCI_ANY_ID,
84+ .subdevice = PCI_ANY_ID,
85+ .class = PCI_CLASS_SERIAL_FIBER << 8,
86+ .class_mask = 0xFFFF00,
87+ .driver_data = DEVT_INDEX_MPT
88+ },
89+ {
90+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
91+ .device = PCI_DEVICE_ID_LSI_53C1030,
92+ .subvendor = PCI_ANY_ID,
93+ .subdevice = PCI_ANY_ID,
94+ .class = PCI_CLASS_STORAGE_SCSI << 8,
95+ .class_mask = 0xFFFF00,
96+ .driver_data = DEVT_INDEX_MPT
97+ },
98+ {
99+ .vendor = PCI_VENDOR_ID_LSI_LOGIC,
100+ .device = PCI_DEVICE_ID_LSI_1030_53C1035,
101+ .subvendor = PCI_ANY_ID,
102+ .subdevice = PCI_ANY_ID,
103+ .class = PCI_CLASS_STORAGE_SCSI << 8,
104+ .class_mask = 0xFFFF00,
105+ .driver_data = DEVT_INDEX_MPT
106+ },
107+ {0} /* Terminating entry */
108+};
109+MODULE_DEVICE_TABLE(pci, mptbase_pci_table);
110+
111+
112 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
113 /* 20000207 -sralston
114 * GRRRRR... IOSpace (port i/o) register access (for the 909) is back!
115@@ -803,6 +880,36 @@
116 MptResetHandlers[cb_idx] = NULL;
117 }
118
119+
120+#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION
121+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
122+/**
123+ * mpt_dv_register - Register protocol-specific domain validation handler.
124+ */
125+int mpt_dv_register(MPT_DVHANDLER dv_cbfunc, int cb_idx)
126+{
127+ if (cb_idx < 1 || cb_idx >= MPT_MAX_PROTOCOL_DRIVERS)
128+ return -1;
129+
130+ MptDvHandler[cb_idx] = dv_cbfunc;
131+ return 0;
132+}
133+
134+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
135+/**
136+ * mpt_dv_deregister - Deregister protocol-specific domain validation handler.
137+ */
138+void
139+mpt_dv_deregister(int cb_idx)
140+{
141+ if (cb_idx < 1 || cb_idx >= MPT_MAX_PROTOCOL_DRIVERS)
142+ return;
143+
144+ MptDvHandler[cb_idx] = NULL;
145+}
146+#endif
147+
148+
149 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
150 /**
151 * mpt_get_msg_frame - Obtain a MPT request frame from the pool (of 1024)
152@@ -1142,88 +1249,6 @@
153 return next;
154 }
155
156-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
157-/*
158- * mpt_pci_scan - Scan PCI devices for MPT adapters.
159- *
160- * Returns count of MPT adapters found, keying off of PCI vendor and
161- * device_id's.
162- */
163-static int __init
164-mpt_pci_scan(void)
165-{
166- struct pci_dev *pdev = NULL;
167- struct pci_dev *pdev2;
168- int found = 0;
169- int count = 0;
170- int r;
171-
172- dprintk((KERN_INFO MYNAM ": Checking for MPT adapters...\n"));
173-
174- /*
175- * NOTE: The 929, 929X, 1030 and 1035 will appear as 2 separate PCI devices,
176- * one for each channel.
177- */
178- while ((pdev = pci_find_device(PCI_VENDOR_ID_LSI_LOGIC, PCI_ANY_ID, pdev)) != NULL) {
179- pdev2 = NULL;
180- if ((pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC909) &&
181- (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC929) &&
182- (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC919) &&
183- (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC929X) &&
184- (pdev->device != MPI_MANUFACTPAGE_DEVICEID_FC919X) &&
185- (pdev->device != MPI_MANUFACTPAGE_DEVID_53C1030) &&
186- (pdev->device != MPI_MANUFACTPAGE_DEVID_1030_53C1035) &&
187- 1) {
188- dprintk((KERN_INFO MYNAM ": Skipping LSI device=%04xh\n", pdev->device));
189- continue;
190- }
191-
192- /* GRRRRR
193- * dual function devices (929, 929X, 1030, 1035) may be presented in Func 1,0 order,
194- * but we'd really really rather have them in Func 0,1 order.
195- * Do some kind of look ahead here...
196- */
197- if (pdev->devfn & 1) {
198- pdev2 = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev);
199- if (pdev2 && (pdev2->vendor == 0x1000) &&
200- (PCI_SLOT(pdev2->devfn) == PCI_SLOT(pdev->devfn)) &&
201- (pdev2->device == pdev->device) &&
202- (pdev2->bus->number == pdev->bus->number) &&
203- !(pdev2->devfn & 1)) {
204- dprintk((KERN_INFO MYNAM ": MPT adapter found: PCI bus/dfn=%02x/%02xh, class=%08x, id=%xh\n",
205- pdev2->bus->number, pdev2->devfn, pdev2->class, pdev2->device));
206- found++;
207- if ((r = mpt_adapter_install(pdev2)) == 0)
208- count++;
209- } else {
210- pdev2 = NULL;
211- }
212- }
213-
214- dprintk((KERN_INFO MYNAM ": MPT adapter found: PCI bus/dfn=%02x/%02xh, class=%08x, id=%xh\n",
215- pdev->bus->number, pdev->devfn, pdev->class, pdev->device));
216- found++;
217- if ((r = mpt_adapter_install(pdev)) == 0)
218- count++;
219-
220- if (pdev2)
221- pdev = pdev2;
222- }
223-
224- printk(KERN_INFO MYNAM ": %d MPT adapter%s found, %d installed.\n",
225- found, (found==1) ? "" : "s", count);
226-
227- if (!found || !count) {
228- fusion_exit();
229- return -ENODEV;
230- }
231-
232-#ifdef CONFIG_PROC_FS
233- (void) procmpt_create();
234-#endif
235-
236- return count;
237-}
238
239 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
240 /**
241@@ -1253,7 +1278,7 @@
242
243 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
244 /*
245- * mpt_adapter_install - Install a PCI intelligent MPT adapter.
246+ * mptbase_probe - Install a PCI intelligent MPT adapter.
247 * @pdev: Pointer to pci_dev structure
248 *
249 * This routine performs all the steps necessary to bring the IOC of
250@@ -1268,8 +1293,8 @@
251 *
252 * TODO: Add support for polled controllers
253 */
254-static int __init
255-mpt_adapter_install(struct pci_dev *pdev)
256+static int
257+__devinit mptbase_probe(struct pci_dev *pdev, const struct pci_device_id *id)
258 {
259 MPT_ADAPTER *ioc;
260 u8 *mem;
261@@ -1292,6 +1317,13 @@
262 return r;
263 }
264
265+ if (!pci_set_consistent_dma_mask(pdev, mask))
266+ dprintk((KERN_INFO MYNAM
267+ ": Using 64 bit consistent mask\n"));
268+ else
269+ dprintk((KERN_INFO MYNAM
270+ ": Not using 64 bit consistent mask\n"));
271+
272 ioc = kmalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC);
273 if (ioc == NULL) {
274 printk(KERN_ERR MYNAM ": ERROR - Insufficient memory to add adapter!\n");
275@@ -1500,6 +1532,7 @@
276 ioc->pci_irq = pdev->irq;
277
278 pci_set_master(pdev); /* ?? */
279+ pci_set_drvdata(pdev, ioc);
280
281 #ifndef __sparc__
282 dprintk((KERN_INFO MYNAM ": %s installed at interrupt %d\n", ioc->name, pdev->irq));
283@@ -1525,6 +1558,146 @@
284
285 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
286 /*
287+ * mptbase_remove - Remove a PCI intelligent MPT adapter.
288+ * @pdev: Pointer to pci_dev structure
289+ *
290+ */
291+
292+static void
293+__devexit mptbase_remove(struct pci_dev *pdev)
294+{
295+ mptscsih_sync_irq(pdev->irq);
296+ pci_set_drvdata(pdev, NULL);
297+}
298+
299+
300+/**************************************************************************
301+ * Power Management
302+ */
303+#ifdef CONFIG_PM
304+#include <acpi/acpi_drivers.h>
305+
306+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
307+/*
308+ * mptbase_suspend - Fusion MPT base driver suspend routine.
309+ *
310+ *
311+ */
312+static int mptbase_suspend(struct pci_dev *pdev, u32 state)
313+{
314+ u32 device_state;
315+ MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
316+
317+ switch(state)
318+ {
319+ case ACPI_STATE_S1:
320+ device_state=ACPI_STATE_D1;
321+ break;
322+ case ACPI_STATE_S3:
323+ case ACPI_STATE_S4:
324+ device_state=ACPI_STATE_D3;
325+ break;
326+ default:
327+ return -EAGAIN /*FIXME*/;
328+ break;
329+ }
330+
331+ printk(MYIOC_s_INFO_FMT
332+ "pci-suspend: pdev=0x%p, slot=%s, Entering operating state [D%d]\n",
333+ ioc->name, pdev, pci_name(pdev), device_state);
334+
335+ pci_save_state(pdev, ioc->PciState);
336+
337+ /* put ioc into READY_STATE */
338+ if(SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, CAN_SLEEP)) {
339+ printk(MYIOC_s_ERR_FMT
340+ "pci-suspend: IOC msg unit reset failed!\n", ioc->name);
341+ }
342+
343+ /* disable interrupts */
344+ CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF);
345+ ioc->active = 0;
346+
347+ /* Clear any lingering interrupt */
348+ CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
349+
350+ pci_disable_device(pdev);
351+ pci_set_power_state(pdev, device_state);
352+
353+ return 0;
354+}
355+
356+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
357+/*
358+ * mptbase_resume - Fusion MPT base driver resume routine.
359+ *
360+ *
361+ */
362+static int mptbase_resume(struct pci_dev *pdev)
363+{
364+ MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
365+ u32 device_state = pdev->current_state;
366+ int do_domain_validation_flag=0;
367+ int recovery_state;
368+
369+ printk(MYIOC_s_INFO_FMT
370+ "pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n",
371+ ioc->name, pdev, pci_name(pdev), device_state);
372+
373+ pci_set_power_state(pdev, ACPI_STATE_D0);
374+ pci_restore_state(pdev, ioc->PciState);
375+ pci_enable_device(pdev);
376+
377+ /* enable interrupts */
378+ CHIPREG_WRITE32(&ioc->chip->IntMask, ~(MPI_HIM_RIM));
379+ ioc->active = 1;
380+
381+ /* F/W not running */
382+ if(!CHIPREG_READ32(&ioc->chip->Doorbell)) {
383+ do_domain_validation_flag=1;
384+ }
385+
386+ printk(MYIOC_s_INFO_FMT
387+ "pci-resume: ioc-state=0x%x,doorbell=0x%x\n",
388+ ioc->name,
389+ (mpt_GetIocState(ioc, 1) >> MPI_IOC_STATE_SHIFT),
390+ CHIPREG_READ32(&ioc->chip->Doorbell));
391+
392+ /* bring ioc to operational state */
393+ if ((recovery_state = mpt_do_ioc_recovery(ioc,
394+ MPT_HOSTEVENT_IOC_RECOVER, CAN_SLEEP)) != 0) {
395+ printk(MYIOC_s_INFO_FMT
396+ "pci-resume: Cannot recover, error:[%x]\n",
397+ ioc->name, recovery_state);
398+ } else {
399+ printk(MYIOC_s_INFO_FMT
400+ "pci-resume: success\n", ioc->name);
401+ }
402+
403+#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION
404+ if(do_domain_validation_flag) {
405+ int ii;
406+
407+ for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++) {
408+ ioc->spi_data.dvStatus[ii] |= MPT_SCSICFG_NEED_DV;
409+ }
410+
411+ for(ii=0; ii<MPT_MAX_PROTOCOL_DRIVERS; ii++) {
412+ if(MptDvHandler[ii]) {
413+ printk(MYIOC_s_INFO_FMT
414+ "pci-resume: domain validation\n",ioc->name);
415+ (*(MptDvHandler[ii]))(NULL);
416+ }
417+ }
418+ }
419+#endif
420+ return 0;
421+}
422+
423+#endif
424+
425+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
426+/*
427 * mpt_do_ioc_recovery - Initialize or recover MPT adapter.
428 * @ioc: Pointer to MPT adapter structure
429 * @reason: Event word / reason
430@@ -5851,6 +6024,8 @@
431 EXPORT_SYMBOL(mpt_event_deregister);
432 EXPORT_SYMBOL(mpt_reset_register);
433 EXPORT_SYMBOL(mpt_reset_deregister);
434+EXPORT_SYMBOL(mpt_dv_register);
435+EXPORT_SYMBOL(mpt_dv_deregister);
436 EXPORT_SYMBOL(mpt_get_msg_frame);
437 EXPORT_SYMBOL(mpt_put_msg_frame);
438 EXPORT_SYMBOL(mpt_free_msg_frame);
439@@ -5877,16 +6052,29 @@
440 EXPORT_SYMBOL(mpt_ASCQ_TableSz);
441 EXPORT_SYMBOL(mpt_ScsiOpcodesPtr);
442
443+
444+static struct pci_driver mptbase_driver = {
445+ .name = "mptbase",
446+ .id_table = mptbase_pci_table,
447+ .probe = mptbase_probe,
448+ .remove = __devexit_p(mptbase_remove),
449+#ifdef CONFIG_PM
450+ .suspend = mptbase_suspend,
451+ .resume = mptbase_resume,
452+#endif
453+};
454+
455 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
456 /*
457 * fusion_init - Fusion MPT base driver initialization routine.
458 *
459 * Returns 0 for success, non-zero for failure.
460 */
461-int __init
462-fusion_init(void)
463+static int
464+__init fusion_init(void)
465 {
466 int i;
467+ int r;
468
469 if (FusionInitCalled++) {
470 dprintk((KERN_INFO MYNAM ": INFO - Driver late-init entry point called\n"));
471@@ -5920,10 +6108,13 @@
472 /* FIXME! */
473 }
474
475- if ((i = mpt_pci_scan()) < 0)
476- return i;
477+ r = pci_module_init(&mptbase_driver);
478
479- return 0;
480+#ifdef CONFIG_PROC_FS
481+ (void) procmpt_create();
482+#endif
483+
484+ return r;
485 }
486
487 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
488@@ -5934,13 +6125,14 @@
489 * and removes all %MPT_PROCFS_MPTBASEDIR entries.
490 */
491 static void
492-fusion_exit(void)
493+__exit fusion_exit(void)
494 {
495 MPT_ADAPTER *this;
496- struct pci_dev *pdev = NULL;
497
498 dprintk((KERN_INFO MYNAM ": fusion_exit() called!\n"));
499
500+ pci_unregister_driver(&mptbase_driver);
501+
502 /* Whups? 20010120 -sralston
503 * Moved this *above* removal of all MptAdapters!
504 */
505@@ -5956,9 +6148,6 @@
506
507 this->active = 0;
508
509- pdev = (struct pci_dev *)this->pcidev;
510- mptscsih_sync_irq(pdev->irq);
511-
512 /* Clear any lingering interrupt */
513 CHIPREG_WRITE32(&this->chip->IntStatus, 0);
514
515@@ -5971,7 +6160,6 @@
516 mpt_reset_deregister(mpt_base_index);
517 }
518
519-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
520
521 module_init(fusion_init);
522 module_exit(fusion_exit);
523diff -uarN linux-2.6.1-rc2-reference/drivers/message/fusion/mptbase.h linux-2.6.1-rc2/drivers/message/fusion/mptbase.h
524--- linux-2.6.1-rc2-reference/drivers/message/fusion/mptbase.h 2004-01-06 14:17:58.000000000 -0700
525+++ linux-2.6.1-rc2/drivers/message/fusion/mptbase.h 2003-12-19 10:01:51.000000000 -0700
526@@ -80,8 +80,8 @@
527 #define COPYRIGHT "Copyright (c) 1999-2003 " MODULEAUTHOR
528 #endif
529
0affecb3 530-#define MPT_LINUX_VERSION_COMMON "2.05.00.06"
531-#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-2.05.00.06"
9e5a6bf4 532+#define MPT_LINUX_VERSION_COMMON "3.00.00"
533+#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.00.00"
534 #define WHAT_MAGIC_STRING "@" "(" "#" ")"
535
536 #define show_mptmod_ver(s,ver) \
537@@ -629,6 +629,9 @@
538 FCPortPage0_t fc_port_page0[2];
539 LANPage0_t lan_cnfg_page0;
540 LANPage1_t lan_cnfg_page1;
541+#ifdef CONFIG_PM
542+ u32 PciState[64]; /* save PCI state to this area */
543+#endif
544 u8 FirstWhoInit;
545 u8 upload_fw; /* If set, do a fw upload */
546 u8 reload_fw; /* Force a FW Reload on next reset */
547@@ -649,6 +652,7 @@
548 typedef int (*MPT_CALLBACK)(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply);
549 typedef int (*MPT_EVHANDLER)(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply);
550 typedef int (*MPT_RESETHANDLER)(MPT_ADAPTER *ioc, int reset_phase);
551+typedef void (*MPT_DVHANDLER)(void *arg);
552 /* reset_phase defs */
553 #define MPT_IOC_PRE_RESET 0
554 #define MPT_IOC_POST_RESET 1
555@@ -1001,6 +1005,8 @@
556 extern void mpt_event_deregister(int cb_idx);
557 extern int mpt_reset_register(int cb_idx, MPT_RESETHANDLER reset_func);
558 extern void mpt_reset_deregister(int cb_idx);
559+extern int mpt_dv_register(MPT_DVHANDLER dv_cbfunc, int cb_idx);
560+extern void mpt_dv_deregister(int cb_idx);
561 extern int mpt_register_ascqops_strings(void *ascqTable, int ascqtbl_sz, const char **opsTable);
562 extern void mpt_deregister_ascqops_strings(void);
563 extern MPT_FRAME_HDR *mpt_get_msg_frame(int handle, int iocid);
564diff -uarN linux-2.6.1-rc2-reference/drivers/message/fusion/mptscsih.c linux-2.6.1-rc2/drivers/message/fusion/mptscsih.c
565--- linux-2.6.1-rc2-reference/drivers/message/fusion/mptscsih.c 2004-01-06 14:17:58.000000000 -0700
566+++ linux-2.6.1-rc2/drivers/message/fusion/mptscsih.c 2004-01-06 14:25:16.000000000 -0700
567@@ -164,8 +164,8 @@
568 static MPT_FRAME_HDR *mptscsih_search_pendingQ(MPT_SCSI_HOST *hd, int scpnt_idx);
569 static void post_pendingQ_commands(MPT_SCSI_HOST *hd);
570
571-static int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag);
572-static int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag);
573+static int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag);
574+static int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag);
575
576 static int mptscsih_ioc_reset(MPT_ADAPTER *ioc, int post_reset);
577 static int mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply);
578@@ -196,6 +196,12 @@
579 static int mptscsih_setup(char *str);
580 static int mptscsih_halt(struct notifier_block *nb, ulong event, void *buf);
581
582+/* module entry point */
583+static int __init mptscsih_init (void);
584+static void __exit mptscsih_exit (void);
585+int mptscsih_release(struct Scsi_Host *host);
586+
587+
588 /*
589 * Reboot Notification
590 */
591@@ -238,6 +244,34 @@
592 driver_setup = MPTSCSIH_DRIVER_SETUP;
593
594 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
595+
596+/* see mptscsih.h */
597+
598+#ifdef MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS
599+static Scsi_Host_Template driver_template = {
600+ .proc_name = "mptscsih",
601+ .proc_info = x_scsi_proc_info,
602+ .name = "MPT SCSI Host",
603+ .info = x_scsi_info,
604+ .queuecommand = x_scsi_queuecommand,
605+ .slave_alloc = x_scsi_slave_alloc,
606+ .slave_configure = x_scsi_slave_configure,
607+ .slave_destroy = x_scsi_slave_destroy,
608+ .eh_abort_handler = x_scsi_abort,
609+ .eh_device_reset_handler = x_scsi_dev_reset,
610+ .eh_bus_reset_handler = x_scsi_bus_reset,
611+ .eh_host_reset_handler = x_scsi_host_reset,
612+ .bios_param = x_scsi_bios_param,
613+ .can_queue = MPT_SCSI_CAN_QUEUE,
614+ .this_id = -1,
615+ .sg_tablesize = MPT_SCSI_SG_DEPTH,
616+ .max_sectors = MPT_SCSI_MAX_SECTORS,
617+ .cmd_per_lun = MPT_SCSI_CMD_PER_LUN,
618+ .use_clustering = ENABLE_CLUSTERING,
619+};
620+#endif
621+
622+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
623 /*
624 * Private inline routines...
625 */
626@@ -264,12 +298,14 @@
627 mptscsih_io_direction(Scsi_Cmnd *cmd)
628 {
629 switch (cmd->cmnd[0]) {
630- case WRITE_6:
631- case WRITE_10:
632+ case WRITE_6:
633+ case WRITE_10:
634+ case WRITE_16:
635 return SCSI_DATA_WRITE;
636 break;
637- case READ_6:
638- case READ_10:
639+ case READ_6:
640+ case READ_10:
641+ case READ_16:
642 return SCSI_DATA_READ;
643 break;
644 }
645@@ -280,6 +316,7 @@
646 switch (cmd->cmnd[0]) {
647 /* _DATA_OUT commands */
648 case WRITE_6: case WRITE_10: case WRITE_12:
649+ case WRITE_16:
650 case WRITE_LONG: case WRITE_SAME: case WRITE_BUFFER:
651 case WRITE_VERIFY: case WRITE_VERIFY_12:
652 case COMPARE: case COPY: case COPY_VERIFY:
653@@ -826,6 +863,13 @@
654 sc->resid = sc->request_bufflen - xfer_cnt;
655 dprintk((KERN_NOTICE " SET sc->resid=%02xh\n", sc->resid));
656
657+ if(sc->underflow > xfer_cnt) {
658+ printk(MYIOC_s_INFO_FMT
659+ "SCSI data underrun: underflow=%02x, xfercnt=%02x\n",
660+ ioc->name, sc->underflow, xfer_cnt);
661+ sc->result = DID_SOFT_ERROR << 16;
662+ }
663+
664 /* Report Queue Full
665 */
666 if (sc->result == MPI_SCSI_STATUS_TASK_SET_FULL)
9e5a6bf4 667@@ -1275,7 +1320,6 @@
668 mem = (u8 *) hd->ChainToChain;
669 }
670 memset(mem, 0xFF, sz);
671-
672 sz = num_chain * hd->ioc->req_sz;
673 if (hd->ChainBuffer == NULL) {
674 /* Allocate free chain buffer pool
675@@ -1357,18 +1401,13 @@
676 /* SCSI host fops start here... */
677 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
678 /**
679- * mptscsih_detect - Register MPT adapter(s) as SCSI host(s) with
680+ * mptscsih_init - Register MPT adapter(s) as SCSI host(s) with
681 * linux scsi mid-layer.
682- * @tpnt: Pointer to Scsi_Host_Template structure
683 *
684- * (linux Scsi_Host_Template.detect routine)
685- *
686- * Returns number of SCSI host adapters that were successfully
687- * registered with the linux scsi mid-layer via the scsi_register()
688- * API call.
689+ * Returns 0 for success, non-zero for failure.
690 */
691-int
692-mptscsih_detect(Scsi_Host_Template *tpnt)
693+static int
694+__init mptscsih_init(void)
695 {
696 struct Scsi_Host *sh = NULL;
697 MPT_SCSI_HOST *hd = NULL;
698@@ -1387,6 +1426,12 @@
699 ScsiTaskCtx = mpt_register(mptscsih_taskmgmt_complete, MPTSCSIH_DRIVER);
700 ScsiScanDvCtx = mpt_register(mptscsih_scandv_complete, MPTSCSIH_DRIVER);
701
702+#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION
703+ if(mpt_dv_register(mptscsih_domainValidation, MPTSCSIH_DRIVER) != 0 ) {
704+ dprintk((KERN_INFO MYNAM
705+ ": failed to register dv callback\n"));
706+ }
707+#endif
708 if (mpt_event_register(ScsiDoneCtx, mptscsih_event_process) == 0) {
709 dprintk((KERN_INFO MYNAM ": Registered for IOC event notifications\n"));
710 } else {
711@@ -1431,14 +1476,17 @@
712 continue;
713 }
714
715- tpnt->proc_info = mptscsih_proc_info;
716- sh = scsi_register(tpnt, sizeof(MPT_SCSI_HOST));
717+ sh = scsi_host_alloc(&driver_template, sizeof(MPT_SCSI_HOST));
718 if (sh != NULL) {
719 spin_lock_irqsave(&this->FreeQlock, flags);
720 sh->io_port = 0;
721 sh->n_io_port = 0;
722 sh->irq = 0;
723
724+ /* set 16 byte cdb's
725+ */
726+ sh->max_cmd_len = 16;
727+
728 /* Yikes! This is important!
729 * Otherwise, by default, linux
730 * only scans target IDs 0-7!
731@@ -1634,7 +1682,7 @@
732 hd->ioc->spi_data.forceDv = 0;
733 for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++)
734 hd->ioc->spi_data.dvStatus[ii] = MPT_SCSICFG_NEGOTIATE;
735-
736+
737 if (hd->negoNvram == 0) {
738 for (ii=0; ii < MPT_MAX_SCSI_DEVICES; ii++)
739 hd->ioc->spi_data.dvStatus[ii] |= MPT_SCSICFG_DV_NOT_DONE;
740@@ -1649,6 +1697,10 @@
741 }
742
743 mpt_scsi_hosts++;
744+
745+ scsi_add_host (sh, &this->pcidev->dev);
746+ scsi_scan_host(sh);
747+
748 }
749
750 } /* for each adapter port */
751@@ -1657,24 +1709,62 @@
752 }
753
754 done:
755- if (mpt_scsi_hosts > 0)
756+ if (mpt_scsi_hosts > 0) {
757 register_reboot_notifier(&mptscsih_notifier);
758- else {
759+ return 0;
760+ } else {
761 mpt_reset_deregister(ScsiDoneCtx);
762 dprintk((KERN_INFO MYNAM ": Deregistered for IOC reset notifications\n"));
763
764 mpt_event_deregister(ScsiDoneCtx);
765 dprintk((KERN_INFO MYNAM ": Deregistered for IOC event notifications\n"));
766
767+#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION
768+ mpt_dv_deregister(MPTSCSIH_DRIVER);
769+#endif
770 mpt_deregister(ScsiScanDvCtx);
771 mpt_deregister(ScsiTaskCtx);
772 mpt_deregister(ScsiDoneCtx);
773
774 if (info_kbuf != NULL)
775 kfree(info_kbuf);
776+
777+ return -EBUSY;
778 }
779
780- return mpt_scsi_hosts;
781+}
782+
783+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
784+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
785+/**
786+ * mptscsih_exit - Unregisters MPT adapter(s)
787+ *
788+ */
789+static void
790+__exit mptscsih_exit(void)
791+{
792+ MPT_ADAPTER *this;
793+ struct Scsi_Host *sh = NULL;
794+
795+ this = mpt_adapter_find_first();
796+ while (this != NULL) {
797+
798+ if (this->last_state != MPI_IOC_STATE_OPERATIONAL) {
799+ this = mpt_adapter_find_next(this);
800+ continue;
801+ }
802+
803+ sh = this->sh;
804+ if( sh == NULL ) {
805+ continue;
806+ }
807+
808+ scsi_remove_host(sh);
809+ mptscsih_release(sh);
810+ scsi_host_put(sh);
811+ this->sh = NULL;
812+ this = mpt_adapter_find_next(this);
813+ }
814 }
815
816 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
817@@ -1801,7 +1891,6 @@
818 /* NULL the Scsi_Host pointer
819 */
820 hd->ioc->sh = NULL;
821- scsi_unregister(host);
822
823 if (mpt_scsi_hosts) {
824 if (--mpt_scsi_hosts == 0) {
825@@ -1811,6 +1900,10 @@
826 mpt_event_deregister(ScsiDoneCtx);
827 dprintk((KERN_INFO MYNAM ": Deregistered for IOC event notifications\n"));
828
829+#ifndef MPTSCSIH_DISABLE_DOMAIN_VALIDATION
830+ mpt_dv_deregister(MPTSCSIH_DRIVER);
831+#endif
832+
833 mpt_deregister(ScsiScanDvCtx);
834 mpt_deregister(ScsiTaskCtx);
835 mpt_deregister(ScsiDoneCtx);
836@@ -2606,7 +2699,7 @@
837 * Returns 0 for SUCCESS or -1 if FAILED.
838 */
839 static int
840-mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag)
841+mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag)
842 {
843 MPT_ADAPTER *ioc = NULL;
844 int rc = -1;
845@@ -2662,7 +2755,7 @@
846 */
847 if (hd->hard_resets < -1)
848 hd->hard_resets++;
849- rc = mptscsih_IssueTaskMgmt(hd, type, target, lun, ctx2abort, sleepFlag);
850+ rc = mptscsih_IssueTaskMgmt(hd, type, target, lun, ctx2abort, timeout, sleepFlag);
851 if (rc) {
852 printk(MYIOC_s_INFO_FMT "Issue of TaskMgmt failed!\n", hd->ioc->name);
853 } else {
854@@ -2708,7 +2801,7 @@
855 * else other non-zero value returned.
856 */
857 static int
858-mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, int sleepFlag)
859+mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 target, u8 lun, int ctx2abort, ulong timeout, int sleepFlag)
860 {
861 MPT_FRAME_HDR *mf;
862 SCSITaskMgmt_t *pScsiTm;
863@@ -2758,7 +2851,7 @@
864 */
865 hd->tmPtr = mf;
866 hd->numTMrequests++;
867- hd->TMtimer.expires = jiffies + HZ*20; /* 20 seconds */
868+ hd->TMtimer.expires = jiffies + timeout;
869 add_timer(&hd->TMtimer);
870
871 if ((retval = mpt_send_handshake_request(ScsiTaskCtx, hd->ioc->id,
872@@ -2868,7 +2961,8 @@
873
874 spin_unlock_irq(host_lock);
875 if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK,
876- SCpnt->device->id, SCpnt->device->lun, ctx2abort, CAN_SLEEP)
877+ SCpnt->device->id, SCpnt->device->lun,
878+ ctx2abort, (HZ*2) /* 2 second timeout */,CAN_SLEEP)
879 < 0) {
880
881 /* The TM request failed and the subsequent FW-reload failed!
882@@ -2938,7 +3032,7 @@
883 }
884
885 if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
886- SCpnt->device->id, 0, 0, CAN_SLEEP)
887+ SCpnt->device->id, 0, 0, (HZ*5) /* 5 second timeout */, CAN_SLEEP)
888 < 0){
889 /* The TM request failed and the subsequent FW-reload failed!
890 * Fatal error case.
891@@ -3002,7 +3096,7 @@
892
893 /* We are now ready to execute the task management request. */
894 if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS,
895- 0, 0, 0, CAN_SLEEP)
896+ 0, 0, 0, (HZ*5) /* 5 second timeout */, CAN_SLEEP)
897 < 0){
898
899 /* The TM request failed and the subsequent FW-reload failed!
900@@ -3085,7 +3179,7 @@
901 mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd)
902 {
903 unsigned long flags;
904- int loop_count = 60 * 4; /* Wait 60 seconds */
905+ int loop_count = 10 * 4; /* Wait 10 seconds */
906 int status = FAILED;
907
908 do {
909@@ -3225,18 +3319,50 @@
910 */
911 int
912 mptscsih_bios_param(struct scsi_device * sdev, struct block_device *bdev,
913- sector_t capacity, int *ip)
914+ sector_t capacity, int geom[])
915 {
916- int size;
917+ int heads;
918+ int sectors;
919+ sector_t cylinders;
920+#ifdef CONFIG_LBD
921+ ulong dummy;
922+#endif
923
924- size = capacity;
925- ip[0] = 64; /* heads */
926- ip[1] = 32; /* sectors */
927- if ((ip[2] = size >> 11) > 1024) { /* cylinders, test for big disk */
928- ip[0] = 255; /* heads */
929- ip[1] = 63; /* sectors */
930- ip[2] = size / (255 * 63); /* cylinders */
931+ heads = 64;
932+ sectors = 32;
933+#ifdef CONFIG_LBD
934+ dummy = heads * sectors;
935+ cylinders = capacity;
936+ do_div(cylinders,dummy);
937+#else
938+ cylinders = (ulong)capacity / (heads * sectors);
939+#endif
940+
941+ /*
942+ * Handle extended translation size for logical drives
943+ * > 1Gb
944+ */
945+ if ((ulong)capacity >= 0x200000) {
946+ heads = 255;
947+ sectors = 63;
948+#ifdef CONFIG_LBD
949+ dummy = heads * sectors;
950+ cylinders = capacity;
951+ do_div(cylinders,dummy);
952+#else
953+ cylinders = (ulong)capacity / (heads * sectors);
954+#endif
955 }
956+
957+ /* return result */
958+ geom[0] = heads;
959+ geom[1] = sectors;
960+ geom[2] = cylinders;
961+
962+ dprintk((KERN_NOTICE
963+ ": bios_param: Id=%i Lun=%i Channel=%i CHS=%i/%i/%i\n",
964+ sdev->id, sdev->lun,sdev->channel,(int)cylinders,heads,sectors));
965+
966 return 0;
967 }
968
969@@ -3366,7 +3492,7 @@
970 vdev->raidVolume = 0;
971 if (hd->is_spi && (hd->ioc->spi_data.isRaid & (1 << (device->id)))) {
972 vdev->raidVolume = 1;
973- ddvtprintk((KERN_INFO "RAID Volume @ id %d\n", target_id));
974+ ddvtprintk((KERN_INFO "RAID Volume @ id %d\n", device->id));
975 }
976
977 mptscsih_target_settings(hd, vdev, device);
978@@ -3648,36 +3774,6 @@
979 return -1;
980 }
981
982-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
983-
984-/* see mptscsih.h */
985-
986-#ifdef MPT_SCSIHOST_NEED_ENTRY_EXIT_HOOKUPS
987-static Scsi_Host_Template driver_template = {
988- .proc_name = "mptscsih",
989- .proc_info = x_scsi_proc_info,
990- .name = "MPT SCSI Host",
991- .detect = x_scsi_detect,
992- .release = x_scsi_release,
993- .info = x_scsi_info,
994- .queuecommand = x_scsi_queuecommand,
995- .slave_alloc = x_scsi_slave_alloc,
996- .slave_configure = x_scsi_slave_configure,
997- .slave_destroy = x_scsi_slave_destroy,
998- .eh_abort_handler = x_scsi_abort,
999- .eh_device_reset_handler = x_scsi_dev_reset,
1000- .eh_bus_reset_handler = x_scsi_bus_reset,
1001- .eh_host_reset_handler = x_scsi_host_reset,
1002- .bios_param = x_scsi_bios_param,
1003- .can_queue = MPT_SCSI_CAN_QUEUE,
1004- .this_id = -1,
1005- .sg_tablesize = MPT_SCSI_SG_DEPTH,
1006- .max_sectors = MPT_SCSI_MAX_SECTORS,
1007- .cmd_per_lun = MPT_SCSI_CMD_PER_LUN,
1008- .use_clustering = ENABLE_CLUSTERING,
1009-};
1010-#include "../../scsi/scsi_module.c"
1011-#endif
1012
1013 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
1014 /* Search the pendingQ for a command with specific index.
1015@@ -4318,6 +4414,8 @@
1016 case WRITE_10:
1017 case READ_12:
1018 case WRITE_12:
1019+ case READ_16:
1020+ case WRITE_16:
1021 break;
1022 default:
1023 return 0;
1024@@ -5413,7 +5511,7 @@
1025 flags = hd->ioc->spi_data.noQas;
1026 if (hd->ioc->spi_data.nvram && (hd->ioc->spi_data.nvram[id] != MPT_HOST_NVRAM_INVALID)) {
1027 data = hd->ioc->spi_data.nvram[id];
1028-
1029+
1030 if (data & MPT_NVRAM_WIDE_DISABLE)
1031 flags |= MPT_TARGET_NO_NEGO_WIDE;
1032
1033@@ -5518,7 +5616,7 @@
1034 /* DV only to SCSI adapters */
1035 if ((int)ioc->chip_type <= (int)FC929)
1036 continue;
1037-
1038+
1039 /* Make sure everything looks ok */
1040 if (ioc->sh == NULL)
1041 continue;
1042@@ -7007,3 +7105,6 @@
1043
1044 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
1045
1046+
1047+module_init(mptscsih_init);
1048+module_exit(mptscsih_exit);
1049diff -uarN linux-2.6.1-rc2-reference/drivers/message/fusion/mptscsih.h linux-2.6.1-rc2/drivers/message/fusion/mptscsih.h
1050--- linux-2.6.1-rc2-reference/drivers/message/fusion/mptscsih.h 2004-01-06 14:17:58.000000000 -0700
1051+++ linux-2.6.1-rc2/drivers/message/fusion/mptscsih.h 2003-12-16 12:18:46.000000000 -0700
1052@@ -160,8 +160,6 @@
1053
1054 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
1055
1056-#define x_scsi_detect mptscsih_detect
1057-#define x_scsi_release mptscsih_release
1058 #define x_scsi_info mptscsih_info
1059 #define x_scsi_queuecommand mptscsih_qcmd
1060 #define x_scsi_abort mptscsih_abort
1061@@ -170,9 +168,6 @@
1062 #define x_scsi_host_reset mptscsih_host_reset
1063 #define x_scsi_bios_param mptscsih_bios_param
1064
1065-#define x_scsi_taskmgmt_bh mptscsih_taskmgmt_bh
1066-#define x_scsi_old_abort mptscsih_old_abort
1067-#define x_scsi_old_reset mptscsih_old_reset
1068 #define x_scsi_slave_alloc mptscsih_slave_alloc
1069 #define x_scsi_slave_configure mptscsih_slave_configure
1070 #define x_scsi_slave_destroy mptscsih_slave_destroy
1071@@ -182,8 +177,6 @@
1072 /*
1073 * MPT SCSI Host / Initiator decls...
1074 */
1075-extern int x_scsi_detect(Scsi_Host_Template *);
1076-extern int x_scsi_release(struct Scsi_Host *host);
1077 extern const char *x_scsi_info(struct Scsi_Host *);
1078 extern int x_scsi_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
1079 extern int x_scsi_abort(Scsi_Cmnd *);
1080@@ -191,8 +184,7 @@
1081 extern int x_scsi_dev_reset(Scsi_Cmnd *);
1082 extern int x_scsi_host_reset(Scsi_Cmnd *);
1083 extern int x_scsi_bios_param(struct scsi_device * sdev, struct block_device *bdev,
1084- sector_t capacity, int *ip);
1085-extern void x_scsi_taskmgmt_bh(void *);
1086+ sector_t capacity, int geom[]);
1087 extern int x_scsi_slave_alloc(Scsi_Device *);
1088 extern int x_scsi_slave_configure(Scsi_Device *);
1089 extern void x_scsi_slave_destroy(Scsi_Device *);
This page took 0.160936 seconds and 4 git commands to generate.