* [PATCH v1.2 6/16] arcmsr: precise checking adapter ID
@ 2014-05-14 11:20 ching
0 siblings, 0 replies; only message in thread
From: ching @ 2014-05-14 11:20 UTC (permalink / raw)
To: jbottomley, dan.carpenter, thenzl, agordeev, linux-scsi,
linux-kernel@vger.kernel.org
From: Ching<ching2048@areca.com.tw>
Rewriteing the arcmsr_define_adapter_type function to precisely check adapter ID.
This can prevent an unknown adapter be used as a default adapter type by driver.
Signed-off-by: Ching<ching2048@areca.com.tw>
---
diff -uprN a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
--- a/drivers/scsi/arcmsr/arcmsr_hba.c 2014-05-07 18:44:40.000000000 +0800
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c 2014-05-07 18:45:20.000000000 +0800
@@ -295,24 +295,43 @@ static int arcmsr_bios_param(struct scsi
return 0;
}
-static void arcmsr_define_adapter_type(struct AdapterControlBlock *acb)
+static bool arcmsr_define_adapter_type(struct AdapterControlBlock *acb)
{
struct pci_dev *pdev = acb->pdev;
u16 dev_id;
+
pci_read_config_word(pdev, PCI_DEVICE_ID, &dev_id);
acb->dev_id = dev_id;
switch (dev_id) {
- case 0x1880: {
+ case 0x1880:
acb->adapter_type = ACB_ADAPTER_TYPE_C;
- }
break;
- case 0x1201: {
+ case 0x1200:
+ case 0x1201:
+ case 0x1202:
acb->adapter_type = ACB_ADAPTER_TYPE_B;
- }
break;
-
- default: acb->adapter_type = ACB_ADAPTER_TYPE_A;
+ case 0x1110:
+ case 0x1120:
+ case 0x1130:
+ case 0x1160:
+ case 0x1170:
+ case 0x1210:
+ case 0x1220:
+ case 0x1230:
+ case 0x1260:
+ case 0x1270:
+ case 0x1280:
+ case 0x1380:
+ case 0x1381:
+ case 0x1680:
+ acb->adapter_type = ACB_ADAPTER_TYPE_A;
+ break;
+ default:
+ pr_notice("Unknown device ID = 0x%x\n", dev_id);
+ return false;
}
+ return true;
}
static uint8_t arcmsr_hba_wait_msgint_ready(struct AdapterControlBlock *acb)
@@ -714,7 +733,9 @@ static int arcmsr_probe(struct pci_dev *
ACB_F_MESSAGE_WQBUFFER_READED);
acb->acb_flags &= ~ACB_F_SCSISTOPADAPTER;
INIT_LIST_HEAD(&acb->ccb_free_list);
- arcmsr_define_adapter_type(acb);
+ error = arcmsr_define_adapter_type(acb);
+ if (!error)
+ goto pci_release_regs;
error = arcmsr_remap_pciregion(acb);
if(!error){
goto pci_release_regs;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2014-05-14 11:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-14 11:20 [PATCH v1.2 6/16] arcmsr: precise checking adapter ID ching
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.