Loading drivers/scsi/arcmsr/arcmsr_hba.c +54 −106 Original line number Diff line number Diff line Loading @@ -493,106 +493,57 @@ static int arcmsr_alloc_ccb_pool(struct AdapterControlBlock *acb) static void arcmsr_message_isr_bh_fn(struct work_struct *work) { struct AdapterControlBlock *acb = container_of(work,struct AdapterControlBlock, arcmsr_do_message_isr_bh); switch (acb->adapter_type) { case ACB_ADAPTER_TYPE_A: { struct MessageUnit_A __iomem *reg = acb->pmuA; struct AdapterControlBlock *acb = container_of(work, struct AdapterControlBlock, arcmsr_do_message_isr_bh); char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem*) (®->message_rwbuffer[0]); char __iomem *devicemap = (char __iomem*) (®->message_rwbuffer[21]); uint32_t __iomem *signature = NULL; char __iomem *devicemap = NULL; int target, lun; struct scsi_device *psdev; char diff; char diff, temp; atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for(target = 0; target < ARCMSR_MAX_TARGETID -1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp =*acb_dev_map; for(lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if((temp & 0x01)==1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); }else if((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL ) { scsi_remove_device(psdev); scsi_device_put(psdev); } } temp >>= 1; diff >>= 1; } } devicemap++; acb_dev_map++; } } switch (acb->adapter_type) { case ACB_ADAPTER_TYPE_A: { struct MessageUnit_A __iomem *reg = acb->pmuA; signature = (uint32_t __iomem *)(®->message_rwbuffer[0]); devicemap = (char __iomem *)(®->message_rwbuffer[21]); break; } case ACB_ADAPTER_TYPE_B: { struct MessageUnit_B *reg = acb->pmuB; char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem*)(®->message_rwbuffer[0]); char __iomem *devicemap = (char __iomem*)(®->message_rwbuffer[21]); int target, lun; struct scsi_device *psdev; char diff; atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for(target = 0; target < ARCMSR_MAX_TARGETID -1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp =*acb_dev_map; for(lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if((temp & 0x01)==1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); }else if((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL ) { scsi_remove_device(psdev); scsi_device_put(psdev); } } temp >>= 1; diff >>= 1; } } devicemap++; acb_dev_map++; } } } signature = (uint32_t __iomem *)(®->message_rwbuffer[0]); devicemap = (char __iomem *)(®->message_rwbuffer[21]); break; } case ACB_ADAPTER_TYPE_C: { struct MessageUnit_C *reg = acb->pmuC; char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem *)(®->msgcode_rwbuffer[0]); char __iomem *devicemap = (char __iomem *)(®->msgcode_rwbuffer[21]); int target, lun; struct scsi_device *psdev; char diff; struct MessageUnit_C __iomem *reg = acb->pmuC; signature = (uint32_t __iomem *)(®->msgcode_rwbuffer[0]); devicemap = (char __iomem *)(®->msgcode_rwbuffer[21]); break; } } atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for (target = 0; target < ARCMSR_MAX_TARGETID - 1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (readl(signature) != ARCMSR_SIGNATURE_GET_CONFIG) return; for (target = 0; target < ARCMSR_MAX_TARGETID - 1; target++) { temp = readb(devicemap); diff = (*acb_dev_map) ^ temp; if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp = *acb_dev_map; for (lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if ((temp & 0x01) == 1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); } else if ((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); *acb_dev_map = temp; for (lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if ((diff & 0x01) == 1 && (temp & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); } else if ((diff & 0x01) == 1 && (temp & 0x01) == 0) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL) { scsi_remove_device(psdev); scsi_device_put(psdev); Loading @@ -606,9 +557,6 @@ static void arcmsr_message_isr_bh_fn(struct work_struct *work) acb_dev_map++; } } } } } static int arcmsr_request_irq(struct pci_dev *pdev, struct AdapterControlBlock *acb) Loading Loading
drivers/scsi/arcmsr/arcmsr_hba.c +54 −106 Original line number Diff line number Diff line Loading @@ -493,106 +493,57 @@ static int arcmsr_alloc_ccb_pool(struct AdapterControlBlock *acb) static void arcmsr_message_isr_bh_fn(struct work_struct *work) { struct AdapterControlBlock *acb = container_of(work,struct AdapterControlBlock, arcmsr_do_message_isr_bh); switch (acb->adapter_type) { case ACB_ADAPTER_TYPE_A: { struct MessageUnit_A __iomem *reg = acb->pmuA; struct AdapterControlBlock *acb = container_of(work, struct AdapterControlBlock, arcmsr_do_message_isr_bh); char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem*) (®->message_rwbuffer[0]); char __iomem *devicemap = (char __iomem*) (®->message_rwbuffer[21]); uint32_t __iomem *signature = NULL; char __iomem *devicemap = NULL; int target, lun; struct scsi_device *psdev; char diff; char diff, temp; atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for(target = 0; target < ARCMSR_MAX_TARGETID -1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp =*acb_dev_map; for(lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if((temp & 0x01)==1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); }else if((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL ) { scsi_remove_device(psdev); scsi_device_put(psdev); } } temp >>= 1; diff >>= 1; } } devicemap++; acb_dev_map++; } } switch (acb->adapter_type) { case ACB_ADAPTER_TYPE_A: { struct MessageUnit_A __iomem *reg = acb->pmuA; signature = (uint32_t __iomem *)(®->message_rwbuffer[0]); devicemap = (char __iomem *)(®->message_rwbuffer[21]); break; } case ACB_ADAPTER_TYPE_B: { struct MessageUnit_B *reg = acb->pmuB; char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem*)(®->message_rwbuffer[0]); char __iomem *devicemap = (char __iomem*)(®->message_rwbuffer[21]); int target, lun; struct scsi_device *psdev; char diff; atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for(target = 0; target < ARCMSR_MAX_TARGETID -1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp =*acb_dev_map; for(lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if((temp & 0x01)==1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); }else if((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL ) { scsi_remove_device(psdev); scsi_device_put(psdev); } } temp >>= 1; diff >>= 1; } } devicemap++; acb_dev_map++; } } } signature = (uint32_t __iomem *)(®->message_rwbuffer[0]); devicemap = (char __iomem *)(®->message_rwbuffer[21]); break; } case ACB_ADAPTER_TYPE_C: { struct MessageUnit_C *reg = acb->pmuC; char *acb_dev_map = (char *)acb->device_map; uint32_t __iomem *signature = (uint32_t __iomem *)(®->msgcode_rwbuffer[0]); char __iomem *devicemap = (char __iomem *)(®->msgcode_rwbuffer[21]); int target, lun; struct scsi_device *psdev; char diff; struct MessageUnit_C __iomem *reg = acb->pmuC; signature = (uint32_t __iomem *)(®->msgcode_rwbuffer[0]); devicemap = (char __iomem *)(®->msgcode_rwbuffer[21]); break; } } atomic_inc(&acb->rq_map_token); if (readl(signature) == ARCMSR_SIGNATURE_GET_CONFIG) { for (target = 0; target < ARCMSR_MAX_TARGETID - 1; target++) { diff = (*acb_dev_map)^readb(devicemap); if (readl(signature) != ARCMSR_SIGNATURE_GET_CONFIG) return; for (target = 0; target < ARCMSR_MAX_TARGETID - 1; target++) { temp = readb(devicemap); diff = (*acb_dev_map) ^ temp; if (diff != 0) { char temp; *acb_dev_map = readb(devicemap); temp = *acb_dev_map; for (lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if ((temp & 0x01) == 1 && (diff & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); } else if ((temp & 0x01) == 0 && (diff & 0x01) == 1) { psdev = scsi_device_lookup(acb->host, 0, target, lun); *acb_dev_map = temp; for (lun = 0; lun < ARCMSR_MAX_TARGETLUN; lun++) { if ((diff & 0x01) == 1 && (temp & 0x01) == 1) { scsi_add_device(acb->host, 0, target, lun); } else if ((diff & 0x01) == 1 && (temp & 0x01) == 0) { psdev = scsi_device_lookup(acb->host, 0, target, lun); if (psdev != NULL) { scsi_remove_device(psdev); scsi_device_put(psdev); Loading @@ -606,9 +557,6 @@ static void arcmsr_message_isr_bh_fn(struct work_struct *work) acb_dev_map++; } } } } } static int arcmsr_request_irq(struct pci_dev *pdev, struct AdapterControlBlock *acb) Loading