• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/scsi/aic94xx/

Lines Matching defs:asd_ha

86 static int __devinit asd_map_memio(struct asd_ha_struct *asd_ha)
91 asd_ha->iospace = 0;
93 io_handle = &asd_ha->io_handle[i==0?0:1];
94 io_handle->start = pci_resource_start(asd_ha->pcidev, i);
95 io_handle->len = pci_resource_len(asd_ha->pcidev, i);
96 io_handle->flags = pci_resource_flags(asd_ha->pcidev, i);
100 i==0?0:1, pci_name(asd_ha->pcidev));
103 err = pci_request_region(asd_ha->pcidev, i, ASD_DRIVER_NAME);
106 pci_name(asd_ha->pcidev));
117 pci_name(asd_ha->pcidev));
124 pci_release_region(asd_ha->pcidev, i);
127 io_handle = &asd_ha->io_handle[0];
129 pci_release_region(asd_ha->pcidev, 0);
134 static void __devexit asd_unmap_memio(struct asd_ha_struct *asd_ha)
138 io_handle = &asd_ha->io_handle[1];
140 pci_release_region(asd_ha->pcidev, 2);
142 io_handle = &asd_ha->io_handle[0];
144 pci_release_region(asd_ha->pcidev, 0);
147 static int __devinit asd_map_ioport(struct asd_ha_struct *asd_ha)
150 struct asd_ha_addrspace *io_handle = &asd_ha->io_handle[0];
152 asd_ha->iospace = 1;
153 io_handle->start = pci_resource_start(asd_ha->pcidev, i);
154 io_handle->len = pci_resource_len(asd_ha->pcidev, i);
155 io_handle->flags = pci_resource_flags(asd_ha->pcidev, i);
159 pci_name(asd_ha->pcidev));
162 err = pci_request_region(asd_ha->pcidev, i, ASD_DRIVER_NAME);
165 pci_name(asd_ha->pcidev));
171 static void __devexit asd_unmap_ioport(struct asd_ha_struct *asd_ha)
173 pci_release_region(asd_ha->pcidev, PCI_IOBAR_OFFSET);
176 static int __devinit asd_map_ha(struct asd_ha_struct *asd_ha)
181 err = pci_read_config_word(asd_ha->pcidev, PCI_COMMAND, &cmd_reg);
184 pci_name(asd_ha->pcidev));
190 if ((err = asd_map_memio(asd_ha)))
193 if ((err = asd_map_ioport(asd_ha)))
196 pci_name(asd_ha->pcidev));
199 pci_name(asd_ha->pcidev));
208 static void __devexit asd_unmap_ha(struct asd_ha_struct *asd_ha)
210 if (asd_ha->iospace)
211 asd_unmap_ioport(asd_ha);
213 asd_unmap_memio(asd_ha);
222 static int __devinit asd_common_setup(struct asd_ha_struct *asd_ha)
226 err = pci_read_config_byte(asd_ha->pcidev, PCI_REVISION_ID,
227 &asd_ha->revision_id);
230 pci_name(asd_ha->pcidev));
234 if (asd_ha->revision_id < AIC9410_DEV_REV_B0) {
236 pci_name(asd_ha->pcidev),
237 asd_dev_rev[asd_ha->revision_id],
238 asd_ha->revision_id);
242 asd_ha->hw_prof.max_scbs = 512;
243 asd_ha->hw_prof.max_ddbs = ASD_MAX_DDBS;
244 asd_ha->hw_prof.num_phys = ASD_MAX_PHYS;
246 asd_ha->hw_prof.enabled_phys = 0xFF;
248 asd_ha->hw_prof.phy_desc[i].max_sas_lrate =
250 asd_ha->hw_prof.phy_desc[i].min_sas_lrate =
252 asd_ha->hw_prof.phy_desc[i].max_sata_lrate =
254 asd_ha->hw_prof.phy_desc[i].min_sata_lrate =
263 static int __devinit asd_aic9410_setup(struct asd_ha_struct *asd_ha)
265 int err = asd_common_setup(asd_ha);
270 asd_ha->hw_prof.addr_range = 8;
271 asd_ha->hw_prof.port_name_base = 0;
272 asd_ha->hw_prof.dev_name_base = 8;
273 asd_ha->hw_prof.sata_name_base = 16;
278 static int __devinit asd_aic9405_setup(struct asd_ha_struct *asd_ha)
280 int err = asd_common_setup(asd_ha);
285 asd_ha->hw_prof.addr_range = 4;
286 asd_ha->hw_prof.port_name_base = 0;
287 asd_ha->hw_prof.dev_name_base = 4;
288 asd_ha->hw_prof.sata_name_base = 8;
296 struct asd_ha_struct *asd_ha = dev_to_asd_ha(dev);
298 asd_dev_rev[asd_ha->revision_id]);
305 struct asd_ha_struct *asd_ha = dev_to_asd_ha(dev);
306 return snprintf(buf, PAGE_SIZE, "%d\n", asd_ha->hw_prof.bios.bld);
313 struct asd_ha_struct *asd_ha = dev_to_asd_ha(dev);
314 return snprintf(buf, PAGE_SIZE, "%s\n", asd_ha->hw_prof.pcba_sn);
318 static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
322 err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
326 err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
330 err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
337 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
339 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
343 static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha)
345 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
346 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
347 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
355 int (*setup)(struct asd_ha_struct *asd_ha);
369 static inline int asd_create_ha_caches(struct asd_ha_struct *asd_ha)
371 asd_ha->scb_pool = dma_pool_create(ASD_DRIVER_NAME "_scb_pool",
372 &asd_ha->pcidev->dev,
375 if (!asd_ha->scb_pool) {
385 * asd_ha: pointer to host adapter structure
387 static inline void asd_free_edbs(struct asd_ha_struct *asd_ha)
389 struct asd_seq_data *seq = &asd_ha->seq;
393 asd_free_coherent(asd_ha, seq->edb_arr[i]);
398 static inline void asd_free_escbs(struct asd_ha_struct *asd_ha)
400 struct asd_seq_data *seq = &asd_ha->seq;
413 static inline void asd_destroy_ha_caches(struct asd_ha_struct *asd_ha)
417 if (asd_ha->hw_prof.ddb_ext)
418 asd_free_coherent(asd_ha, asd_ha->hw_prof.ddb_ext);
419 if (asd_ha->hw_prof.scb_ext)
420 asd_free_coherent(asd_ha, asd_ha->hw_prof.scb_ext);
422 if (asd_ha->hw_prof.ddb_bitmap)
423 kfree(asd_ha->hw_prof.ddb_bitmap);
424 asd_ha->hw_prof.ddb_bitmap = NULL;
427 struct asd_phy *phy = &asd_ha->phys[i];
429 asd_free_coherent(asd_ha, phy->id_frm_tok);
431 if (asd_ha->seq.escb_arr)
432 asd_free_escbs(asd_ha);
433 if (asd_ha->seq.edb_arr)
434 asd_free_edbs(asd_ha);
435 if (asd_ha->hw_prof.ue.area) {
436 kfree(asd_ha->hw_prof.ue.area);
437 asd_ha->hw_prof.ue.area = NULL;
439 if (asd_ha->seq.tc_index_array) {
440 kfree(asd_ha->seq.tc_index_array);
441 kfree(asd_ha->seq.tc_index_bitmap);
442 asd_ha->seq.tc_index_array = NULL;
443 asd_ha->seq.tc_index_bitmap = NULL;
445 if (asd_ha->seq.actual_dl) {
446 asd_free_coherent(asd_ha, asd_ha->seq.actual_dl);
447 asd_ha->seq.actual_dl = NULL;
448 asd_ha->seq.dl = NULL;
450 if (asd_ha->seq.next_scb.vaddr) {
451 dma_pool_free(asd_ha->scb_pool, asd_ha->seq.next_scb.vaddr,
452 asd_ha->seq.next_scb.dma_handle);
453 asd_ha->seq.next_scb.vaddr = NULL;
455 dma_pool_destroy(asd_ha->scb_pool);
456 asd_ha->scb_pool = NULL;
507 static int asd_register_sas_ha(struct asd_ha_struct *asd_ha)
521 asd_ha->sas_ha.sas_ha_name = (char *) asd_ha->name;
522 asd_ha->sas_ha.lldd_module = THIS_MODULE;
523 asd_ha->sas_ha.sas_addr = &asd_ha->hw_prof.sas_addr[0];
526 sas_phys[i] = &asd_ha->phys[i].sas_phy;
527 sas_ports[i] = &asd_ha->ports[i];
530 asd_ha->sas_ha.sas_phy = sas_phys;
531 asd_ha->sas_ha.sas_port= sas_ports;
532 asd_ha->sas_ha.num_phys= ASD_MAX_PHYS;
534 asd_ha->sas_ha.lldd_queue_size = asd_ha->seq.can_queue;
535 asd_ha->sas_ha.lldd_max_execute_num = lldd_max_execute_num;
537 return sas_register_ha(&asd_ha->sas_ha);
540 static int asd_unregister_sas_ha(struct asd_ha_struct *asd_ha)
544 err = sas_unregister_ha(&asd_ha->sas_ha);
546 sas_remove_host(asd_ha->sas_ha.core.shost);
547 scsi_remove_host(asd_ha->sas_ha.core.shost);
548 scsi_host_put(asd_ha->sas_ha.core.shost);
550 kfree(asd_ha->sas_ha.sas_phy);
551 kfree(asd_ha->sas_ha.sas_port);
561 struct asd_ha_struct *asd_ha;
585 asd_ha = kzalloc(sizeof(*asd_ha), GFP_KERNEL);
586 if (!asd_ha) {
590 asd_ha->pcidev = dev;
591 asd_ha->sas_ha.pcidev = asd_ha->pcidev;
592 asd_ha->sas_ha.lldd_ha = asd_ha;
594 asd_ha->name = asd_dev->name;
595 asd_printk("found %s, device %s\n", asd_ha->name, pci_name(dev));
597 SHOST_TO_SAS_HA(shost) = &asd_ha->sas_ha;
598 asd_ha->sas_ha.core.shost = shost;
612 err = asd_dev->setup(asd_ha);
628 pci_set_drvdata(dev, asd_ha);
630 err = asd_map_ha(asd_ha);
634 err = asd_create_ha_caches(asd_ha);
638 err = asd_init_hw(asd_ha);
644 pci_name(dev), SAS_ADDR(asd_ha->hw_prof.sas_addr),
645 asd_ha->hw_prof.pcba_sn, asd_ha->hw_prof.max_phys,
646 asd_ha->hw_prof.num_phys,
647 asd_ha->hw_prof.flash.present ? "present" : "not present",
648 asd_ha->hw_prof.bios.present ? "build " : "not present",
649 asd_ha->hw_prof.bios.bld);
651 shost->can_queue = asd_ha->seq.can_queue;
654 pci_enable_msi(asd_ha->pcidev);
656 err = request_irq(asd_ha->pcidev->irq, asd_hw_isr, IRQF_SHARED,
657 ASD_DRIVER_NAME, asd_ha);
660 asd_ha->pcidev->irq, pci_name(asd_ha->pcidev));
663 asd_enable_ints(asd_ha);
665 err = asd_init_post_escbs(asd_ha);
668 pci_name(asd_ha->pcidev));
673 err = asd_create_dev_attrs(asd_ha);
677 err = asd_register_sas_ha(asd_ha);
686 asd_remove_dev_attrs(asd_ha);
689 asd_disable_ints(asd_ha);
690 free_irq(dev->irq, asd_ha);
694 asd_chip_hardrst(asd_ha);
696 asd_destroy_ha_caches(asd_ha);
698 asd_unmap_ha(asd_ha);
700 kfree(asd_ha);
707 static void asd_free_queues(struct asd_ha_struct *asd_ha)
713 spin_lock_irqsave(&asd_ha->seq.pend_q_lock, flags);
714 asd_ha->seq.pending = 0;
715 list_splice_init(&asd_ha->seq.pend_q, &pending);
716 spin_unlock_irqrestore(&asd_ha->seq.pend_q_lock, flags);
738 static void asd_turn_off_leds(struct asd_ha_struct *asd_ha)
740 u8 phy_mask = asd_ha->hw_prof.enabled_phys;
744 asd_turn_led(asd_ha, i, 0);
745 asd_control_led(asd_ha, i, 0);
751 struct asd_ha_struct *asd_ha = pci_get_drvdata(dev);
753 if (!asd_ha)
756 asd_unregister_sas_ha(asd_ha);
758 asd_disable_ints(asd_ha);
760 asd_remove_dev_attrs(asd_ha);
763 free_irq(dev->irq, asd_ha);
765 pci_disable_msi(asd_ha->pcidev);
766 asd_turn_off_leds(asd_ha);
767 asd_chip_hardrst(asd_ha);
768 asd_free_queues(asd_ha);
769 asd_destroy_ha_caches(asd_ha);
770 asd_unmap_ha(asd_ha);
771 kfree(asd_ha);
778 struct asd_ha_struct *asd_ha;
781 asd_ha = SHOST_TO_SAS_HA(shost)->lldd_ha;
782 err = asd_enable_phys(asd_ha, asd_ha->hw_prof.enabled_phys);