mptfc.c (cdd38c5f1ce4398ec58fec95904b75824daab7b5) mptfc.c (1897c5c7597566264cff4827fd4f02e243f773ca)
1/*
2 * linux/drivers/message/fusion/mptfc.c
3 * For use with LSI PCI chip/adapter(s)
4 * running LSI Fusion MPT (Message Passing Technology) firmware.
5 *
6 * Copyright (c) 1999-2008 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 *

--- 317 unchanged lines hidden (view full) ---

326
327 if ((rc = mpt_config(ioc, &cfg)) != 0)
328 break;
329
330 if (hdr.PageLength <= 0)
331 break;
332
333 data_sz = hdr.PageLength * 4;
1/*
2 * linux/drivers/message/fusion/mptfc.c
3 * For use with LSI PCI chip/adapter(s)
4 * running LSI Fusion MPT (Message Passing Technology) firmware.
5 *
6 * Copyright (c) 1999-2008 LSI Corporation
7 * (mailto:DL-MPTFusionLinux@lsi.com)
8 *

--- 317 unchanged lines hidden (view full) ---

326
327 if ((rc = mpt_config(ioc, &cfg)) != 0)
328 break;
329
330 if (hdr.PageLength <= 0)
331 break;
332
333 data_sz = hdr.PageLength * 4;
334 ppage0_alloc = pci_alloc_consistent(ioc->pcidev, data_sz,
335 &page0_dma);
334 ppage0_alloc = dma_alloc_coherent(&ioc->pcidev->dev, data_sz,
335 &page0_dma, GFP_KERNEL);
336 rc = -ENOMEM;
337 if (!ppage0_alloc)
338 break;
339
340 cfg.physAddr = page0_dma;
341 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
342
343 if ((rc = mpt_config(ioc, &cfg)) == 0) {

--- 18 unchanged lines hidden (view full) ---

362 ppage0_alloc->MaxRxFrameSize =
363 le16_to_cpu(ppage0_alloc->MaxRxFrameSize);
364
365 port_id = ppage0_alloc->PortIdentifier;
366 num_targ++;
367 *p_p0 = *ppage0_alloc; /* save data */
368 *p_pp0++ = p_p0++; /* save addr */
369 }
336 rc = -ENOMEM;
337 if (!ppage0_alloc)
338 break;
339
340 cfg.physAddr = page0_dma;
341 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
342
343 if ((rc = mpt_config(ioc, &cfg)) == 0) {

--- 18 unchanged lines hidden (view full) ---

362 ppage0_alloc->MaxRxFrameSize =
363 le16_to_cpu(ppage0_alloc->MaxRxFrameSize);
364
365 port_id = ppage0_alloc->PortIdentifier;
366 num_targ++;
367 *p_p0 = *ppage0_alloc; /* save data */
368 *p_pp0++ = p_p0++; /* save addr */
369 }
370 pci_free_consistent(ioc->pcidev, data_sz,
371 (u8 *) ppage0_alloc, page0_dma);
370 dma_free_coherent(&ioc->pcidev->dev, data_sz,
371 ppage0_alloc, page0_dma);
372 if (rc != 0)
373 break;
374
375 } while (port_id <= 0xff0000);
376
377 if (num_targ) {
378 /* sort array */
379 if (num_targ > 1)

--- 378 unchanged lines hidden (view full) ---

758 if ((rc = mpt_config(ioc, &cfg)) != 0)
759 return rc;
760
761 if (hdr.PageLength == 0)
762 return 0;
763
764 data_sz = hdr.PageLength * 4;
765 rc = -ENOMEM;
372 if (rc != 0)
373 break;
374
375 } while (port_id <= 0xff0000);
376
377 if (num_targ) {
378 /* sort array */
379 if (num_targ > 1)

--- 378 unchanged lines hidden (view full) ---

758 if ((rc = mpt_config(ioc, &cfg)) != 0)
759 return rc;
760
761 if (hdr.PageLength == 0)
762 return 0;
763
764 data_sz = hdr.PageLength * 4;
765 rc = -ENOMEM;
766 ppage0_alloc = pci_alloc_consistent(ioc->pcidev, data_sz, &page0_dma);
766 ppage0_alloc = dma_alloc_coherent(&ioc->pcidev->dev, data_sz,
767 &page0_dma, GFP_KERNEL);
767 if (ppage0_alloc) {
768
769 try_again:
770 memset((u8 *)ppage0_alloc, 0, data_sz);
771 cfg.physAddr = page0_dma;
772 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
773
774 if ((rc = mpt_config(ioc, &cfg)) == 0) {

--- 37 unchanged lines hidden (view full) ---

812 }
813 printk(MYIOC_s_INFO_FMT "Firmware discovery not"
814 " complete.\n",
815 ioc->name);
816 }
817 mptfc_display_port_link_speed(ioc, portnum, pp0dest);
818 }
819
768 if (ppage0_alloc) {
769
770 try_again:
771 memset((u8 *)ppage0_alloc, 0, data_sz);
772 cfg.physAddr = page0_dma;
773 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
774
775 if ((rc = mpt_config(ioc, &cfg)) == 0) {

--- 37 unchanged lines hidden (view full) ---

813 }
814 printk(MYIOC_s_INFO_FMT "Firmware discovery not"
815 " complete.\n",
816 ioc->name);
817 }
818 mptfc_display_port_link_speed(ioc, portnum, pp0dest);
819 }
820
820 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage0_alloc, page0_dma);
821 dma_free_coherent(&ioc->pcidev->dev, data_sz, ppage0_alloc,
822 page0_dma);
821 }
822
823 return rc;
824}
825
826static int
827mptfc_WriteFcPortPage1(MPT_ADAPTER *ioc, int portnum)
828{

--- 70 unchanged lines hidden (view full) ---

899
900start_over:
901
902 if (ioc->fc_data.fc_port_page1[portnum].data == NULL) {
903 data_sz = hdr.PageLength * 4;
904 if (data_sz < sizeof(FCPortPage1_t))
905 data_sz = sizeof(FCPortPage1_t);
906
823 }
824
825 return rc;
826}
827
828static int
829mptfc_WriteFcPortPage1(MPT_ADAPTER *ioc, int portnum)
830{

--- 70 unchanged lines hidden (view full) ---

901
902start_over:
903
904 if (ioc->fc_data.fc_port_page1[portnum].data == NULL) {
905 data_sz = hdr.PageLength * 4;
906 if (data_sz < sizeof(FCPortPage1_t))
907 data_sz = sizeof(FCPortPage1_t);
908
907 page1_alloc = pci_alloc_consistent(ioc->pcidev,
908 data_sz,
909 &page1_dma);
909 page1_alloc = dma_alloc_coherent(&ioc->pcidev->dev, data_sz,
910 &page1_dma, GFP_KERNEL);
910 if (!page1_alloc)
911 return -ENOMEM;
912 }
913 else {
914 page1_alloc = ioc->fc_data.fc_port_page1[portnum].data;
915 page1_dma = ioc->fc_data.fc_port_page1[portnum].dma;
916 data_sz = ioc->fc_data.fc_port_page1[portnum].pg_sz;
917 if (hdr.PageLength * 4 > data_sz) {
918 ioc->fc_data.fc_port_page1[portnum].data = NULL;
911 if (!page1_alloc)
912 return -ENOMEM;
913 }
914 else {
915 page1_alloc = ioc->fc_data.fc_port_page1[portnum].data;
916 page1_dma = ioc->fc_data.fc_port_page1[portnum].dma;
917 data_sz = ioc->fc_data.fc_port_page1[portnum].pg_sz;
918 if (hdr.PageLength * 4 > data_sz) {
919 ioc->fc_data.fc_port_page1[portnum].data = NULL;
919 pci_free_consistent(ioc->pcidev, data_sz, (u8 *)
920 page1_alloc, page1_dma);
920 dma_free_coherent(&ioc->pcidev->dev, data_sz,
921 page1_alloc, page1_dma);
921 goto start_over;
922 }
923 }
924
925 cfg.physAddr = page1_dma;
926 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
927
928 if ((rc = mpt_config(ioc, &cfg)) == 0) {
929 ioc->fc_data.fc_port_page1[portnum].data = page1_alloc;
930 ioc->fc_data.fc_port_page1[portnum].pg_sz = data_sz;
931 ioc->fc_data.fc_port_page1[portnum].dma = page1_dma;
932 }
933 else {
934 ioc->fc_data.fc_port_page1[portnum].data = NULL;
922 goto start_over;
923 }
924 }
925
926 cfg.physAddr = page1_dma;
927 cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
928
929 if ((rc = mpt_config(ioc, &cfg)) == 0) {
930 ioc->fc_data.fc_port_page1[portnum].data = page1_alloc;
931 ioc->fc_data.fc_port_page1[portnum].pg_sz = data_sz;
932 ioc->fc_data.fc_port_page1[portnum].dma = page1_dma;
933 }
934 else {
935 ioc->fc_data.fc_port_page1[portnum].data = NULL;
935 pci_free_consistent(ioc->pcidev, data_sz, (u8 *)
936 page1_alloc, page1_dma);
936 dma_free_coherent(&ioc->pcidev->dev, data_sz, page1_alloc,
937 page1_dma);
937 }
938
939 return rc;
940}
941
942static void
943mptfc_SetFcPortPage1_defaults(MPT_ADAPTER *ioc)
944{

--- 564 unchanged lines hidden (view full) ---

1509
1510 list_for_each_entry_safe(p, n, &ioc->fc_rports, list) {
1511 list_del(&p->list);
1512 kfree(p);
1513 }
1514
1515 for (ii=0; ii<ioc->facts.NumberOfPorts; ii++) {
1516 if (ioc->fc_data.fc_port_page1[ii].data) {
938 }
939
940 return rc;
941}
942
943static void
944mptfc_SetFcPortPage1_defaults(MPT_ADAPTER *ioc)
945{

--- 564 unchanged lines hidden (view full) ---

1510
1511 list_for_each_entry_safe(p, n, &ioc->fc_rports, list) {
1512 list_del(&p->list);
1513 kfree(p);
1514 }
1515
1516 for (ii=0; ii<ioc->facts.NumberOfPorts; ii++) {
1517 if (ioc->fc_data.fc_port_page1[ii].data) {
1517 pci_free_consistent(ioc->pcidev,
1518 ioc->fc_data.fc_port_page1[ii].pg_sz,
1519 (u8 *) ioc->fc_data.fc_port_page1[ii].data,
1520 ioc->fc_data.fc_port_page1[ii].dma);
1518 dma_free_coherent(&ioc->pcidev->dev,
1519 ioc->fc_data.fc_port_page1[ii].pg_sz,
1520 ioc->fc_data.fc_port_page1[ii].data,
1521 ioc->fc_data.fc_port_page1[ii].dma);
1521 ioc->fc_data.fc_port_page1[ii].data = NULL;
1522 }
1523 }
1524
1525 scsi_remove_host(ioc->sh);
1526
1527 mptscsih_remove(pdev);
1528}

--- 23 unchanged lines hidden ---
1522 ioc->fc_data.fc_port_page1[ii].data = NULL;
1523 }
1524 }
1525
1526 scsi_remove_host(ioc->sh);
1527
1528 mptscsih_remove(pdev);
1529}

--- 23 unchanged lines hidden ---