Deleted Added
full compact
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 ---