Loading drivers/scsi/stex.c +21 −7 Original line number Diff line number Diff line Loading @@ -121,7 +121,8 @@ enum { st_shasta = 0, st_vsc = 1, st_yosemite = 2, st_vsc1 = 2, st_yosemite = 3, PASSTHRU_REQ_TYPE = 0x00000001, PASSTHRU_REQ_NO_WAKEUP = 0x00000100, Loading Loading @@ -151,6 +152,8 @@ enum { MGT_CMD_SIGNATURE = 0xba, INQUIRY_EVPD = 0x01, ST_ADDITIONAL_MEM = 0x200000, }; /* SCSI inquiry data */ Loading Loading @@ -212,7 +215,9 @@ struct handshake_frame { __le32 partner_ver_minor; __le32 partner_ver_oem; __le32 partner_ver_build; u32 reserved1[4]; __le32 extra_offset; /* NEW */ __le32 extra_size; /* NEW */ u32 reserved1[2]; }; struct req_msg { Loading Loading @@ -303,6 +308,7 @@ struct st_hba { void __iomem *mmio_base; /* iomapped PCI memory space */ void *dma_mem; dma_addr_t dma_handle; size_t dma_size; struct Scsi_Host *host; struct pci_dev *pdev; Loading Loading @@ -941,6 +947,11 @@ static int stex_handshake(struct st_hba *hba) h->status_cnt = cpu_to_le16(MU_STATUS_COUNT); stex_gettime(&h->hosttime); h->partner_type = HMU_PARTNER_TYPE; if (hba->dma_size > STEX_BUFFER_SIZE) { h->extra_offset = cpu_to_le32(STEX_BUFFER_SIZE); h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM); } else h->extra_offset = h->extra_size = 0; status_phys = hba->dma_handle + MU_REQ_BUFFER_SIZE; writel(status_phys, base + IMR0); Loading Loading @@ -1203,8 +1214,13 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto out_iounmap; } hba->cardtype = (unsigned int) id->driver_data; if (hba->cardtype == st_vsc && (pdev->subsystem_device & 0xf) == 0x1) hba->cardtype = st_vsc1; hba->dma_size = (hba->cardtype == st_vsc1) ? (STEX_BUFFER_SIZE + ST_ADDITIONAL_MEM) : (STEX_BUFFER_SIZE); hba->dma_mem = dma_alloc_coherent(&pdev->dev, STEX_BUFFER_SIZE, &hba->dma_handle, GFP_KERNEL); hba->dma_size, &hba->dma_handle, GFP_KERNEL); if (!hba->dma_mem) { err = -ENOMEM; printk(KERN_ERR DRV_NAME "(%s): dma mem alloc failed\n", Loading @@ -1217,8 +1233,6 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) hba->copy_buffer = hba->dma_mem + MU_BUFFER_SIZE; hba->mu_status = MU_STATE_STARTING; hba->cardtype = (unsigned int) id->driver_data; /* firmware uses id/lun pair for a logical drive, but lun would be always 0 if CONFIG_SCSI_MULTI_LUN not configured, so we use channel to map lun here */ Loading Loading @@ -1266,7 +1280,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) out_free_irq: free_irq(pdev->irq, hba); out_pci_free: dma_free_coherent(&pdev->dev, STEX_BUFFER_SIZE, dma_free_coherent(&pdev->dev, hba->dma_size, hba->dma_mem, hba->dma_handle); out_iounmap: iounmap(hba->mmio_base); Loading Loading @@ -1327,7 +1341,7 @@ static void stex_hba_free(struct st_hba *hba) pci_release_regions(hba->pdev); dma_free_coherent(&hba->pdev->dev, STEX_BUFFER_SIZE, dma_free_coherent(&hba->pdev->dev, hba->dma_size, hba->dma_mem, hba->dma_handle); } Loading Loading
drivers/scsi/stex.c +21 −7 Original line number Diff line number Diff line Loading @@ -121,7 +121,8 @@ enum { st_shasta = 0, st_vsc = 1, st_yosemite = 2, st_vsc1 = 2, st_yosemite = 3, PASSTHRU_REQ_TYPE = 0x00000001, PASSTHRU_REQ_NO_WAKEUP = 0x00000100, Loading Loading @@ -151,6 +152,8 @@ enum { MGT_CMD_SIGNATURE = 0xba, INQUIRY_EVPD = 0x01, ST_ADDITIONAL_MEM = 0x200000, }; /* SCSI inquiry data */ Loading Loading @@ -212,7 +215,9 @@ struct handshake_frame { __le32 partner_ver_minor; __le32 partner_ver_oem; __le32 partner_ver_build; u32 reserved1[4]; __le32 extra_offset; /* NEW */ __le32 extra_size; /* NEW */ u32 reserved1[2]; }; struct req_msg { Loading Loading @@ -303,6 +308,7 @@ struct st_hba { void __iomem *mmio_base; /* iomapped PCI memory space */ void *dma_mem; dma_addr_t dma_handle; size_t dma_size; struct Scsi_Host *host; struct pci_dev *pdev; Loading Loading @@ -941,6 +947,11 @@ static int stex_handshake(struct st_hba *hba) h->status_cnt = cpu_to_le16(MU_STATUS_COUNT); stex_gettime(&h->hosttime); h->partner_type = HMU_PARTNER_TYPE; if (hba->dma_size > STEX_BUFFER_SIZE) { h->extra_offset = cpu_to_le32(STEX_BUFFER_SIZE); h->extra_size = cpu_to_le32(ST_ADDITIONAL_MEM); } else h->extra_offset = h->extra_size = 0; status_phys = hba->dma_handle + MU_REQ_BUFFER_SIZE; writel(status_phys, base + IMR0); Loading Loading @@ -1203,8 +1214,13 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto out_iounmap; } hba->cardtype = (unsigned int) id->driver_data; if (hba->cardtype == st_vsc && (pdev->subsystem_device & 0xf) == 0x1) hba->cardtype = st_vsc1; hba->dma_size = (hba->cardtype == st_vsc1) ? (STEX_BUFFER_SIZE + ST_ADDITIONAL_MEM) : (STEX_BUFFER_SIZE); hba->dma_mem = dma_alloc_coherent(&pdev->dev, STEX_BUFFER_SIZE, &hba->dma_handle, GFP_KERNEL); hba->dma_size, &hba->dma_handle, GFP_KERNEL); if (!hba->dma_mem) { err = -ENOMEM; printk(KERN_ERR DRV_NAME "(%s): dma mem alloc failed\n", Loading @@ -1217,8 +1233,6 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) hba->copy_buffer = hba->dma_mem + MU_BUFFER_SIZE; hba->mu_status = MU_STATE_STARTING; hba->cardtype = (unsigned int) id->driver_data; /* firmware uses id/lun pair for a logical drive, but lun would be always 0 if CONFIG_SCSI_MULTI_LUN not configured, so we use channel to map lun here */ Loading Loading @@ -1266,7 +1280,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) out_free_irq: free_irq(pdev->irq, hba); out_pci_free: dma_free_coherent(&pdev->dev, STEX_BUFFER_SIZE, dma_free_coherent(&pdev->dev, hba->dma_size, hba->dma_mem, hba->dma_handle); out_iounmap: iounmap(hba->mmio_base); Loading Loading @@ -1327,7 +1341,7 @@ static void stex_hba_free(struct st_hba *hba) pci_release_regions(hba->pdev); dma_free_coherent(&hba->pdev->dev, STEX_BUFFER_SIZE, dma_free_coherent(&hba->pdev->dev, hba->dma_size, hba->dma_mem, hba->dma_handle); } Loading