Lines Matching refs:mvi

99 static void __devinit mvs_phy_init(struct mvs_info *mvi, int phy_id)
101 struct mvs_phy *phy = &mvi->phy[phy_id];
104 phy->mvi = mvi;
107 sas_phy->enabled = (phy_id < mvi->chip->n_phy) ? 1 : 0;
117 sas_phy->sas_addr = &mvi->sas_addr[0];
119 sas_phy->ha = (struct sas_ha_struct *)mvi->shost->hostdata;
123 static void mvs_free(struct mvs_info *mvi)
128 if (!mvi)
131 if (mvi->flags & MVF_FLAG_SOC)
136 if (mvi->dma_pool)
137 pci_pool_destroy(mvi->dma_pool);
139 if (mvi->tx)
140 dma_free_coherent(mvi->dev,
141 sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ,
142 mvi->tx, mvi->tx_dma);
143 if (mvi->rx_fis)
144 dma_free_coherent(mvi->dev, MVS_RX_FISL_SZ,
145 mvi->rx_fis, mvi->rx_fis_dma);
146 if (mvi->rx)
147 dma_free_coherent(mvi->dev,
148 sizeof(*mvi->rx) * (MVS_RX_RING_SZ + 1),
149 mvi->rx, mvi->rx_dma);
150 if (mvi->slot)
151 dma_free_coherent(mvi->dev,
152 sizeof(*mvi->slot) * slot_nr,
153 mvi->slot, mvi->slot_dma);
155 if (mvi->bulk_buffer)
156 dma_free_coherent(mvi->dev, TRASH_BUCKET_SIZE,
157 mvi->bulk_buffer, mvi->bulk_buffer_dma);
158 if (mvi->bulk_buffer1)
159 dma_free_coherent(mvi->dev, TRASH_BUCKET_SIZE,
160 mvi->bulk_buffer1, mvi->bulk_buffer_dma1);
162 MVS_CHIP_DISP->chip_iounmap(mvi);
163 if (mvi->shost)
164 scsi_host_put(mvi->shost);
165 list_for_each_entry(mwq, &mvi->wq_list, entry)
167 kfree(mvi->tags);
168 kfree(mvi);
177 struct mvs_info *mvi;
181 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[0];
183 if (unlikely(!mvi))
186 stat = MVS_CHIP_DISP->isr_status(mvi, mvi->pdev->irq);
191 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[i];
192 MVS_CHIP_DISP->isr(mvi, mvi->pdev->irq, stat);
195 MVS_CHIP_DISP->interrupt_enable(mvi);
204 struct mvs_info *mvi;
211 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[0];
213 if (unlikely(!mvi))
216 MVS_CHIP_DISP->interrupt_disable(mvi);
219 stat = MVS_CHIP_DISP->isr_status(mvi, irq);
222 MVS_CHIP_DISP->interrupt_enable(mvi);
231 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[i];
232 MVS_CHIP_DISP->isr(mvi, irq, stat);
238 static int __devinit mvs_alloc(struct mvs_info *mvi, struct Scsi_Host *shost)
243 if (mvi->flags & MVF_FLAG_SOC)
248 spin_lock_init(&mvi->lock);
249 for (i = 0; i < mvi->chip->n_phy; i++) {
250 mvs_phy_init(mvi, i);
251 mvi->port[i].wide_port_phymap = 0;
252 mvi->port[i].port_attached = 0;
253 INIT_LIST_HEAD(&mvi->port[i].list);
256 mvi->devices[i].taskfileset = MVS_ID_NOT_MAPPED;
257 mvi->devices[i].dev_type = NO_DEVICE;
258 mvi->devices[i].device_id = i;
259 mvi->devices[i].dev_status = MVS_DEV_NORMAL;
260 init_timer(&mvi->devices[i].timer);
266 mvi->tx = dma_alloc_coherent(mvi->dev,
267 sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ,
268 &mvi->tx_dma, GFP_KERNEL);
269 if (!mvi->tx)
271 memset(mvi->tx, 0, sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ);
272 mvi->rx_fis = dma_alloc_coherent(mvi->dev, MVS_RX_FISL_SZ,
273 &mvi->rx_fis_dma, GFP_KERNEL);
274 if (!mvi->rx_fis)
276 memset(mvi->rx_fis, 0, MVS_RX_FISL_SZ);
278 mvi->rx = dma_alloc_coherent(mvi->dev,
279 sizeof(*mvi->rx) * (MVS_RX_RING_SZ + 1),
280 &mvi->rx_dma, GFP_KERNEL);
281 if (!mvi->rx)
283 memset(mvi->rx, 0, sizeof(*mvi->rx) * (MVS_RX_RING_SZ + 1));
284 mvi->rx[0] = cpu_to_le32(0xfff);
285 mvi->rx_cons = 0xfff;
287 mvi->slot = dma_alloc_coherent(mvi->dev,
288 sizeof(*mvi->slot) * slot_nr,
289 &mvi->slot_dma, GFP_KERNEL);
290 if (!mvi->slot)
292 memset(mvi->slot, 0, sizeof(*mvi->slot) * slot_nr);
294 mvi->bulk_buffer = dma_alloc_coherent(mvi->dev,
296 &mvi->bulk_buffer_dma, GFP_KERNEL);
297 if (!mvi->bulk_buffer)
300 mvi->bulk_buffer1 = dma_alloc_coherent(mvi->dev,
302 &mvi->bulk_buffer_dma1, GFP_KERNEL);
303 if (!mvi->bulk_buffer1)
306 sprintf(pool_name, "%s%d", "mvs_dma_pool", mvi->id);
307 mvi->dma_pool = pci_pool_create(pool_name, mvi->pdev, MVS_SLOT_BUF_SZ, 16, 0);
308 if (!mvi->dma_pool) {
312 mvi->tags_num = slot_nr;
315 mvs_tag_init(mvi);
322 int mvs_ioremap(struct mvs_info *mvi, int bar, int bar_ex)
325 struct pci_dev *pdev = mvi->pdev;
338 mvi->regs_ex = ioremap(res_start, res_len);
340 mvi->regs_ex = ioremap_nocache(res_start,
343 mvi->regs_ex = (void *)res_start;
344 if (!mvi->regs_ex)
355 mvi->regs = ioremap(res_start, res_len);
357 mvi->regs = ioremap_nocache(res_start, res_len);
359 if (!mvi->regs) {
360 if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM))
361 iounmap(mvi->regs_ex);
362 mvi->regs_ex = NULL;
380 struct mvs_info *mvi = NULL;
383 mvi = kzalloc(sizeof(*mvi) +
386 if (!mvi)
389 mvi->pdev = pdev;
390 mvi->dev = &pdev->dev;
391 mvi->chip_id = ent->driver_data;
392 mvi->chip = &mvs_chips[mvi->chip_id];
393 INIT_LIST_HEAD(&mvi->wq_list);
395 ((struct mvs_prv_info *)sha->lldd_ha)->mvi[id] = mvi;
396 ((struct mvs_prv_info *)sha->lldd_ha)->n_phy = mvi->chip->n_phy;
398 mvi->id = id;
399 mvi->sas = sha;
400 mvi->shost = shost;
402 mvi->tags = kzalloc(MVS_CHIP_SLOT_SZ>>3, GFP_KERNEL);
403 if (!mvi->tags)
406 if (MVS_CHIP_DISP->chip_ioremap(mvi))
408 if (!mvs_alloc(mvi, shost))
409 return mvi;
411 mvs_free(mvi);
493 struct mvs_info *mvi = NULL;
498 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[j];
501 &mvi->phy[i].sas_phy;
503 &mvi->port[i].sas_port;
508 sha->dev = mvi->dev;
510 sha->sas_addr = &mvi->sas_addr[0];
516 if (mvi->flags & MVF_FLAG_SOC)
524 mvi->shost->cmd_per_lun = MVS_QUEUE_SIZE;
525 sha->core.shost = mvi->shost;
528 static void mvs_init_sas_add(struct mvs_info *mvi)
531 for (i = 0; i < mvi->chip->n_phy; i++) {
532 mvi->phy[i].dev_sas_addr = 0x5005043011ab0000ULL;
533 mvi->phy[i].dev_sas_addr =
534 cpu_to_be64((u64)(*(u64 *)&mvi->phy[i].dev_sas_addr));
537 memcpy(mvi->sas_addr, &mvi->phy[0].dev_sas_addr, SAS_ADDR_SIZE);
544 struct mvs_info *mvi;
591 mvi = mvs_pci_alloc(pdev, ent, shost, nhost);
592 if (!mvi) {
597 memset(&mvi->hba_info_param, 0xFF,
600 mvs_init_sas_add(mvi);
602 mvi->instance = nhost;
603 rc = MVS_CHIP_DISP->chip_init(mvi);
605 mvs_free(mvi);
630 MVS_CHIP_DISP->interrupt_enable(mvi);
632 scsi_scan_host(mvi->shost);
639 scsi_remove_host(mvi->shost);
652 struct mvs_info *mvi = NULL;
655 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[0];
663 sas_remove_host(mvi->shost);
664 scsi_remove_host(mvi->shost);
666 MVS_CHIP_DISP->interrupt_disable(mvi);
667 free_irq(mvi->pdev->irq, sha);
669 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[i];
670 mvs_free(mvi);
772 struct mvs_info *mvi = NULL;
791 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[0];
793 if (unlikely(!mvi))
797 mvi = ((struct mvs_prv_info *)sha->lldd_ha)->mvi[i];
799 MVS_CHIP_DISP->tune_interrupt(mvi,