mpt.c (103914) | mpt.c (115778) |
---|---|
1/* $FreeBSD: head/sys/dev/mpt/mpt.c 103914 2002-09-24 21:33:43Z mjacob $ */ | 1/* $FreeBSD: head/sys/dev/mpt/mpt.c 115778 2003-06-03 17:47:48Z mjacob $ */ |
2/* 3 * Generic routines for LSI '909 FC adapters. 4 * FreeBSD Version. 5 * 6 * Copyright (c) 2000, 2001 by Greg Ansley 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 489 unchanged lines hidden (view full) --- 499} 500 501 502/* 503 * Utiltity routine to read configuration headers and pages 504 */ 505 506static int | 2/* 3 * Generic routines for LSI '909 FC adapters. 4 * FreeBSD Version. 5 * 6 * Copyright (c) 2000, 2001 by Greg Ansley 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 489 unchanged lines hidden (view full) --- 499} 500 501 502/* 503 * Utiltity routine to read configuration headers and pages 504 */ 505 506static int |
507mpt_read_cfg_header(mpt_softc_t *, int, int, int, fCONFIG_PAGE_HEADER *); | 507mpt_read_cfg_header(mpt_softc_t *, int, int, int, CONFIG_PAGE_HEADER *); |
508 509static int 510mpt_read_cfg_header(mpt_softc_t *mpt, int PageType, int PageNumber, | 508 509static int 510mpt_read_cfg_header(mpt_softc_t *mpt, int PageType, int PageNumber, |
511 int PageAddress, fCONFIG_PAGE_HEADER *rslt) | 511 int PageAddress, CONFIG_PAGE_HEADER *rslt) |
512{ 513 int count; 514 request_t *req; 515 MSG_CONFIG *cfgp; 516 MSG_CONFIG_REPLY *reply; 517 518 req = mpt_get_request(mpt); 519 --- 24 unchanged lines hidden (view full) --- 544 545 reply = (MSG_CONFIG_REPLY *) MPT_REPLY_PTOV(mpt, req->sequence); 546 if ((reply->IOCStatus & MPI_IOCSTATUS_MASK) != MPI_IOCSTATUS_SUCCESS) { 547 mpt_prt(mpt, "mpt_read_cfg_header: Config Info Status %x", 548 reply->IOCStatus); 549 mpt_free_reply(mpt, (req->sequence << 1)); 550 return (-1); 551 } | 512{ 513 int count; 514 request_t *req; 515 MSG_CONFIG *cfgp; 516 MSG_CONFIG_REPLY *reply; 517 518 req = mpt_get_request(mpt); 519 --- 24 unchanged lines hidden (view full) --- 544 545 reply = (MSG_CONFIG_REPLY *) MPT_REPLY_PTOV(mpt, req->sequence); 546 if ((reply->IOCStatus & MPI_IOCSTATUS_MASK) != MPI_IOCSTATUS_SUCCESS) { 547 mpt_prt(mpt, "mpt_read_cfg_header: Config Info Status %x", 548 reply->IOCStatus); 549 mpt_free_reply(mpt, (req->sequence << 1)); 550 return (-1); 551 } |
552 bcopy(&reply->Header, rslt, sizeof (fCONFIG_PAGE_HEADER)); | 552 bcopy(&reply->Header, rslt, sizeof (CONFIG_PAGE_HEADER)); |
553 mpt_free_reply(mpt, (req->sequence << 1)); 554 mpt_free_request(mpt, req); 555 return (0); 556} 557 558#define CFG_DATA_OFF 128 559 560int | 553 mpt_free_reply(mpt, (req->sequence << 1)); 554 mpt_free_request(mpt, req); 555 return (0); 556} 557 558#define CFG_DATA_OFF 128 559 560int |
561mpt_read_cfg_page(mpt_softc_t *mpt, int PageAddress, fCONFIG_PAGE_HEADER *hdr) | 561mpt_read_cfg_page(mpt_softc_t *mpt, int PageAddress, CONFIG_PAGE_HEADER *hdr) |
562{ 563 int count; 564 request_t *req; 565 SGE_SIMPLE32 *se; 566 MSG_CONFIG *cfgp; 567 size_t amt; 568 MSG_CONFIG_REPLY *reply; 569 --- 35 unchanged lines hidden (view full) --- 605 mpt_free_reply(mpt, (req->sequence << 1)); 606 return (-1); 607 } 608 mpt_free_reply(mpt, (req->sequence << 1)); 609 bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap, 610 BUS_DMASYNC_POSTREAD); 611 if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 612 cfgp->Header.PageNumber == 0) { | 562{ 563 int count; 564 request_t *req; 565 SGE_SIMPLE32 *se; 566 MSG_CONFIG *cfgp; 567 size_t amt; 568 MSG_CONFIG_REPLY *reply; 569 --- 35 unchanged lines hidden (view full) --- 605 mpt_free_reply(mpt, (req->sequence << 1)); 606 return (-1); 607 } 608 mpt_free_reply(mpt, (req->sequence << 1)); 609 bus_dmamap_sync(mpt->request_dmat, mpt->request_dmap, 610 BUS_DMASYNC_POSTREAD); 611 if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 612 cfgp->Header.PageNumber == 0) { |
613 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_0); | 613 amt = sizeof (CONFIG_PAGE_SCSI_PORT_0); |
614 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 615 cfgp->Header.PageNumber == 1) { | 614 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 615 cfgp->Header.PageNumber == 1) { |
616 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_1); | 616 amt = sizeof (CONFIG_PAGE_SCSI_PORT_1); |
617 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 618 cfgp->Header.PageNumber == 2) { | 617 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 618 cfgp->Header.PageNumber == 2) { |
619 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_2); | 619 amt = sizeof (CONFIG_PAGE_SCSI_PORT_2); |
620 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 621 cfgp->Header.PageNumber == 0) { | 620 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 621 cfgp->Header.PageNumber == 0) { |
622 amt = sizeof (fCONFIG_PAGE_SCSI_DEVICE_0); | 622 amt = sizeof (CONFIG_PAGE_SCSI_DEVICE_0); |
623 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 624 cfgp->Header.PageNumber == 1) { | 623 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 624 cfgp->Header.PageNumber == 1) { |
625 amt = sizeof (fCONFIG_PAGE_SCSI_DEVICE_1); | 625 amt = sizeof (CONFIG_PAGE_SCSI_DEVICE_1); |
626 } 627 bcopy(((caddr_t)req->req_vbuf)+CFG_DATA_OFF, hdr, amt); 628 mpt_free_request(mpt, req); 629 return (0); 630} 631 632int | 626 } 627 bcopy(((caddr_t)req->req_vbuf)+CFG_DATA_OFF, hdr, amt); 628 mpt_free_request(mpt, req); 629 return (0); 630} 631 632int |
633mpt_write_cfg_page(mpt_softc_t *mpt, int PageAddress, fCONFIG_PAGE_HEADER *hdr) | 633mpt_write_cfg_page(mpt_softc_t *mpt, int PageAddress, CONFIG_PAGE_HEADER *hdr) |
634{ 635 int count, hdr_attr; 636 request_t *req; 637 SGE_SIMPLE32 *se; 638 MSG_CONFIG *cfgp; 639 size_t amt; 640 MSG_CONFIG_REPLY *reply; 641 --- 23 unchanged lines hidden (view full) --- 665 MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT | 666 MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER | 667 MPI_SGE_FLAGS_END_OF_LIST | MPI_SGE_FLAGS_HOST_TO_IOC)); 668 669 cfgp->MsgContext = req->index | 0x80000000; 670 671 if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 672 cfgp->Header.PageNumber == 0) { | 634{ 635 int count, hdr_attr; 636 request_t *req; 637 SGE_SIMPLE32 *se; 638 MSG_CONFIG *cfgp; 639 size_t amt; 640 MSG_CONFIG_REPLY *reply; 641 --- 23 unchanged lines hidden (view full) --- 665 MPI_pSGE_SET_FLAGS(se, (MPI_SGE_FLAGS_SIMPLE_ELEMENT | 666 MPI_SGE_FLAGS_LAST_ELEMENT | MPI_SGE_FLAGS_END_OF_BUFFER | 667 MPI_SGE_FLAGS_END_OF_LIST | MPI_SGE_FLAGS_HOST_TO_IOC)); 668 669 cfgp->MsgContext = req->index | 0x80000000; 670 671 if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 672 cfgp->Header.PageNumber == 0) { |
673 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_0); | 673 amt = sizeof (CONFIG_PAGE_SCSI_PORT_0); |
674 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 675 cfgp->Header.PageNumber == 1) { | 674 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 675 cfgp->Header.PageNumber == 1) { |
676 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_1); | 676 amt = sizeof (CONFIG_PAGE_SCSI_PORT_1); |
677 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 678 cfgp->Header.PageNumber == 2) { | 677 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_PORT && 678 cfgp->Header.PageNumber == 2) { |
679 amt = sizeof (fCONFIG_PAGE_SCSI_PORT_2); | 679 amt = sizeof (CONFIG_PAGE_SCSI_PORT_2); |
680 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 681 cfgp->Header.PageNumber == 0) { | 680 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 681 cfgp->Header.PageNumber == 0) { |
682 amt = sizeof (fCONFIG_PAGE_SCSI_DEVICE_0); | 682 amt = sizeof (CONFIG_PAGE_SCSI_DEVICE_0); |
683 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 684 cfgp->Header.PageNumber == 1) { | 683 } else if (cfgp->Header.PageType == MPI_CONFIG_PAGETYPE_SCSI_DEVICE && 684 cfgp->Header.PageNumber == 1) { |
685 amt = sizeof (fCONFIG_PAGE_SCSI_DEVICE_1); | 685 amt = sizeof (CONFIG_PAGE_SCSI_DEVICE_1); |
686 } 687 bcopy(hdr, ((caddr_t)req->req_vbuf)+CFG_DATA_OFF, amt); 688 /* Restore stripped out attributes */ 689 hdr->PageType |= hdr_attr; 690 691 mpt_check_doorbell(mpt); 692 mpt_send_cmd(mpt, req); 693 count = 0; --- 177 unchanged lines hidden (view full) --- 871mpt_set_initial_config_spi(mpt_softc_t *mpt) 872{ 873 int i, pp1val = ((1 << mpt->mpt_ini_id) << 16) | mpt->mpt_ini_id; 874 875 mpt->mpt_disc_enable = 0xff; 876 mpt->mpt_tag_enable = 0; 877 878 if (mpt->mpt_port_page1.Configuration != pp1val) { | 686 } 687 bcopy(hdr, ((caddr_t)req->req_vbuf)+CFG_DATA_OFF, amt); 688 /* Restore stripped out attributes */ 689 hdr->PageType |= hdr_attr; 690 691 mpt_check_doorbell(mpt); 692 mpt_send_cmd(mpt, req); 693 count = 0; --- 177 unchanged lines hidden (view full) --- 871mpt_set_initial_config_spi(mpt_softc_t *mpt) 872{ 873 int i, pp1val = ((1 << mpt->mpt_ini_id) << 16) | mpt->mpt_ini_id; 874 875 mpt->mpt_disc_enable = 0xff; 876 mpt->mpt_tag_enable = 0; 877 878 if (mpt->mpt_port_page1.Configuration != pp1val) { |
879 fCONFIG_PAGE_SCSI_PORT_1 tmp; | 879 CONFIG_PAGE_SCSI_PORT_1 tmp; |
880 mpt_prt(mpt, 881 "SPI Port Page 1 Config value bad (%x)- should be %x", 882 mpt->mpt_port_page1.Configuration, pp1val); 883 tmp = mpt->mpt_port_page1; 884 tmp.Configuration = pp1val; 885 if (mpt_write_cfg_page(mpt, 0, &tmp.Header)) { 886 return (-1); 887 } --- 4 unchanged lines hidden (view full) --- 892 mpt_prt(mpt, 893 "failed to reset SPI Port Page 1 Config value"); 894 return (-1); 895 } 896 mpt->mpt_port_page1 = tmp; 897 } 898 899 for (i = 0; i < 16; i++) { | 880 mpt_prt(mpt, 881 "SPI Port Page 1 Config value bad (%x)- should be %x", 882 mpt->mpt_port_page1.Configuration, pp1val); 883 tmp = mpt->mpt_port_page1; 884 tmp.Configuration = pp1val; 885 if (mpt_write_cfg_page(mpt, 0, &tmp.Header)) { 886 return (-1); 887 } --- 4 unchanged lines hidden (view full) --- 892 mpt_prt(mpt, 893 "failed to reset SPI Port Page 1 Config value"); 894 return (-1); 895 } 896 mpt->mpt_port_page1 = tmp; 897 } 898 899 for (i = 0; i < 16; i++) { |
900 fCONFIG_PAGE_SCSI_DEVICE_1 tmp; | 900 CONFIG_PAGE_SCSI_DEVICE_1 tmp; |
901 tmp = mpt->mpt_dev_page1[i]; 902 tmp.RequestedParameters = 0; 903 tmp.Configuration = 0; 904 if (mpt->verbose > 1) { 905 mpt_prt(mpt, 906 "Set Tgt %d SPI DevicePage 1 values to %x 0 %x", 907 i, tmp.RequestedParameters, tmp.Configuration); 908 } --- 279 unchanged lines hidden --- | 901 tmp = mpt->mpt_dev_page1[i]; 902 tmp.RequestedParameters = 0; 903 tmp.Configuration = 0; 904 if (mpt->verbose > 1) { 905 mpt_prt(mpt, 906 "Set Tgt %d SPI DevicePage 1 values to %x 0 %x", 907 i, tmp.RequestedParameters, tmp.Configuration); 908 } --- 279 unchanged lines hidden --- |