From 322bd920c661c9af6a1e7da2c1d37cd9c835d4e5 Mon Sep 17 00:00:00 2001 From: Matthew Wilcox Date: Mon, 24 Mar 2003 23:02:44 -0600 Subject: [PATCH] [PATCH] C3000 support in sym53c8xx This patch adds support for the HP firmware call pdc_get_initiator(). This is necessary to support the narrow SCSI port on machines such as the C3000 which use one channel of the 896 in narrow mode and one in wide mode. The only way to figure this out is to ask firmware how it's configured. --- drivers/scsi/sym53c8xx.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/scsi/sym53c8xx.c b/drivers/scsi/sym53c8xx.c index 95d3d9e2c4c31..5c2c3497a9a00 100644 --- a/drivers/scsi/sym53c8xx.c +++ b/drivers/scsi/sym53c8xx.c @@ -4901,6 +4901,11 @@ static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram) u_long period; int i; +#ifdef CONFIG_PARISC + char scsi_mode = -1; + struct hardware_path hwpath; +#endif + /* ** Wide ? */ @@ -4972,6 +4977,31 @@ static int __init ncr_prepare_setting(ncb_p np, ncr_nvram *nvram) */ period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz; + +#ifdef CONFIG_PARISC + /* Host firmware (PDC) keeps a table for crippling SCSI capabilities. + * Many newer machines export one channel of 53c896 chip + * as SE, 50-pin HD. Also used for Multi-initiator SCSI clusters + * to set the SCSI Initiator ID. + */ + get_pci_node_path(np->pdev, &hwpath); + if (pdc_get_initiator(&hwpath, &np->myaddr, &period, &np->maxwide, &scsi_mode)) + { + if (np->maxwide) + np->features |= FE_WIDE; + if (scsi_mode >= 0) { + /* C3000 PDC reports period/mode */ + driver_setup.diff_support = 0; + switch(scsi_mode) { + case 0: np->scsi_mode = SMODE_SE; break; + case 1: np->scsi_mode = SMODE_HVD; break; + case 2: np->scsi_mode = SMODE_LVD; break; + default: break; + } + } + } +#endif + if (period <= 250) np->minsync = 10; else if (period <= 303) np->minsync = 11; else if (period <= 500) np->minsync = 12; -- 2.53.0