NTREG.TXT Driver File Contents (epci2fc110.exe)

                ExpresFC2 Windows 2k & NT Registry Settings
                --------- ------- -- - -- -------- --------

CAUTION - Modifying your registry incorrectly may result in making your
machine unbootable.  Please use care in editing the registry.  This should
only be performed by users experienced with the registry editor.

NOTE - Some of the following requires knowledge of hexadecimal arithmetic and
a sense for basic SCSI command processing.  For most users, the defaults
set by the adapter driver installation .INF file will suffice.  "If it ain't
broke, don't fix it!"

A registry entry can be used to control various parameters and settings used
to control the initialization and operation of the ExpresFC adapter.  All
of the parameters are DWORD values and are under the registry key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EpciFc2\Parameters\Device.
The following are the registry values.

        /************************************************************/
        /*                                                          */
        /*                      ** NOTE **                          */
        /*                                                          */
        /*  The values NumIoReq, NumReplies, NumXcbs, NumScbs, and  */
        /* NumLinkSrvcBufs determine the number of these structures */
        /*           allocated for EACH adapter channel!            */
        /*                                                          */
        /************************************************************/

        NumIoReq:

            Number of IoReq structures allocated during driver initializa-
            tion.  These structures are used in Initiator Mode to manage
            the progress of SCSI commands sent to the various targets.  One
            structure is used for each I/O request of up to 40960 bytes.  For
            requests of more than 40960 bytes, an additional IoReq structure
            is needed for each additional 61440 bytes (or part thereof).
            The default value is 512; minimum 256, maximum 2048.  Each
            structure requires 192 bytes of memory.

            If the driver runs out of these structures, nothing bad happens;
            commands sent to the driver are simply placed on a backup list
            until structures are available. If you are trying to get the
            highest level of performance, and your application(s) have a
            large number of large transfers outstanding at any given time,
            you may want to try to increase this allocation to see if it has
            any effect.  Using the default value, the driver can handle 512
            simultaneous read/write commands of up to 40960 bytes each, or
            30 simultaneous commands of up to 1 meg each, without placing
            any commands on the backup list.

        NumReplies:

            Reply frames are used to report unsuccessful completion of
            I/O requests and to reply to certain other kinds of requests
            issued by the driver to the chip firmware.  In general, the
            number of reply frames needed should not be more than the
            actual number of devices with commands outstanding.  Each reply
            frame uses 96 bytes of system memory.  The default value is 32;
            minimum is 16, maximum is 128.

        ForceOrderedQueue:

            A nonzero value in this registry value forces all Simple Queue
            Tag requests to use Ordered Queue Tag requests.  There are some
            disk drives that don't respond well to a lot of Simple Queue Tag
            requests.  The only case we have seen where this was needed was
            with certain disk drives with more than 16 initiators accessing
            the drives simultaneously.  The default value for this value
            is 0.

        CacheLineZero:

            A nonzero value causes the driver to set the PCI Cache Line Size
            register to 0.  We have seen cases where certain PCI-to-PCI
            bridges cause poor performance under some circumstances.  Setting
            the PCI Cache Line Size register to 0 causes the chip to use
            the PCI Read Multiple command instead of the Read Line command.
            The default value is 0 (Cache Line Size remains set to its
            system-initialized value).

        DisableBusChangeNotification:

            A nonzero value causes the driver not to issue Bus Change
            notifications to the OS.  This applies to Windows 2000 and XP
            only at the present time.  We have found that some versions of
            Windows 2000 do not handle these notifications well, and there
            may be some other circumstances where the user may not want the
            notifications.  The default value is 0 (Bus Change notification
            enabled).

        EventLogMask -

            For debugging purposes, it is possible to log events
            in the NT Event Log.  Events are classified by various
            types.  For reference, the event types are listed at
            the end of this document.  The value in this parameter
            is the sum of the desired Event Types to log.  The
            default value of this variable is 1, logging only
            all fatal initialization errors.  See EVENT_TYPE_xxx
            definitions below.

        TargetMode:

            Enables Target Mode support if the value is nonzero.  The default
            for this value is 0, disabling Target Mode support.  Reinstalling
            the driver DOES NOT reset this value.

            Support for Target Mode requires specialized upper-level system
            drivers that are application-specific.

        NumXcb -

            Number of simultaneous Exchanges that can be handled
            in Target Mode.  Each received SCSI command utilizes
            one XCB.  Each XCB requires 76 bytes of memory.  The
            default value is 512; minimum 64, maximum 2048.
            Incoming commands above the set limit are dropped.
            This value is disregarded if NoTarget is set.

        NumScb -

            Number of simultaneous Sequences that can be handled
            in Target Mode.  When responding to a SCSI command,
            the upper level driver will initiate one or more
            Sequences (data transfer and/or completion status)
            to process the command.  Each SCB requires 168 bytes
            of memory.  The minimum is the setting for NumXcb;
            maximum 2048.  The default value is 1024.  This
            value is disregarded if NoTarget is set.

        NumLinkSrvcBufs:

            When using Target Mode, the driver must handle certain Fibre
            Channel Link Service requests, such as PRLI, PRLO, and ABTS.
            This value determines the number of buffers available to process
            these requests.  The default value is 64; minimum 16, maximum
            512.  Each buffer requires 168 bytes of system memory.


	-----------------------------------------------------------------

The following is a description of the Event Types logged and the contents of
the resulting Event Log messages for each.  In the description below, the
EventCode refers to the value in the Event Log message at ofset 0x34, and
the UniqueId appears in the Event Log message at offset 0x10.

        /************************************************************/
        /*                                                          */
        /*                      ** NOTE **                          */
        /*                                                          */
        /* An error log decoding program, log.exe, is available to  */
        /* automatically decode these events to an ASCII text file. */
        /* It is a command-line utility and is installed during the */
        /* normal utility installation procedure.                   */
        /*                                                          */
        /************************************************************/


        /************ Define the Event Classification flags *************/
        /*                                                              */
        /* The event classification is a bit mask of errors to be       */
        /* reported.  In NT, there is a registry entry for a mask of    */
        /* the errors to be reported.  When OsLogEvent is called,       */
        /* the OS layer will check the Flags value against this mask    */
        /* and, if set, will log the event.                             */
        /*                                                              */
        /****************************************************************/

#define EVENT_TYPE_FATAL    0x00000001  /* Fatal initialization errors  */
#define EVENT_TYPE_LOOP     0x00000002  /* Loop events                  */
#define EVENT_TYPE_SCSI     0x00000004  /* SCSI errors                  */
#define EVENT_TYPE_ISP      0x00000008  /* ISP reported errors          */
#define EVENT_TYPE_LOGIN    0x00000010  /* Port login/logout events     */
#define EVENT_TYPE_RSCN     0x00000020  /* RSCN events                  */
#define EVENT_TYPE_RSRC     0x00000040  /* Resource usage failures (NT) */
#define EVENT_TYPE_INFO     0x00000080  /* Informational messages       */


        /******************* Define the Event codes. ********************/
        /*                                                              */
        /* NOTE - Codes 0x0000 - 0x3FFF are certain fatal errors        */
        /*                              reported at the upper level     */
        /*                              driver layer.  For NT, see      */
        /*                              header file errors.h.           */
        /*        Codes 0x4000 - 0x4FFF are Mailbox Command error codes */
        /*                              reported as is.                 */
        /*        Codes 0x8000 - 0x8FFF are Asynchronous Event codes    */
        /*                              from the ISP used as is.        */
        /*        Codes 0xF000 - 0xFFFF are described below.            */
        /*                                                              */
        /****************************************************************/

        /* For EVENT_CODE_SCSI, UniqueId contains 4 bytes; the LS byte  */
        /* is the SCSI error code, then Sense Key if any, then          */
        /* Additional Sense Code, then the SCSI Command Code in the MS  */
        /* byte.                                                        */

#define EVENT_CODE_SCSI     0xF000

        /* For EVENT_CODE_ISPSTAT, the LS WORD of EventCode contains    */
        /* the ISP error as defined in the CompStat value in the        */
        /* QH_STAT Response Queue entry, and UniqueId contains the      */
        /* StateFlags and StatusFlags in the LS and MS WORDs            */
        /* respectively.                                                */
        /*  For LSI based cards, the LS WORD of the EventCode contains  */
        /* the IocStat value.                                           */

#define EVENT_CODE_ISPSTAT  0xF001

        /* For EVENT_CODE_ISPCTIO, the LS WORD of EventCode contains    */
        /* the Status value from the QH_CTIO Status Response Queue      */
        /* entry, and the ExchangeId and CtlFlags are reported in the   */
        /* LS and MS WORDs of UniqueId respectively.                    */
        /*  For LSI based cards, the LS WORD of the EventCode contains  */
        /* the IocStat value.                                           */

#define EVENT_CODE_ISPCTIO  0xF002

        /* For EVENT_CODE_LOGIN/LOGOUT, the UniqueId contains the       */
        /* trailing 4 bytes of the Port or Node Name of the port that   */
        /* logged in/out and the low word of EventCode contains bytes   */
        /* 2 and 3.  Sorry - there's no place to put bytes 0 and 1.     */
        /* For logout, the logout could be either implicit or explicit. */

#define EVENT_CODE_LOGIN    0xF003
#define EVENT_CODE_LOGOUT   0xF004

        /*    EVENT_CODE_RSRC is only reported once per minute.  The    */
        /* function OsLogRsrcFail will update a counter in the OS's     */
        /* ADAPTER structure, and the timer routine will make an Event  */
        /* Log entry for each resource with nonzero counts, then clear  */
        /* the counts.  The LS WORD of the EventCode will contain the   */
        /* EVENT_RSRC_xxxx type, and the count of times the resource    */
        /* was unavailable will be reported in UniqueId.                */
        /*    OsLogRsrcFail is currently only called by the upper level */
        /* of the driver and therefore is defined in driver.h.  If      */
        /* resouce failure logging is implemented for other platforms   */
        /* the declaration of the function will be moved here.          */

#define EVENT_CODE_RSRC     0xF005
    #define EVENT_RSRC_IOREQ    0x0000
    #define EVENT_RSRC_XCB      0x0001
    #define EVENT_RSRC_SCB      0x0002

        /* EVENT_CODE_RESET is classified in the EVENT_TYPE_SCSI class  */
        /* and indicates that the upper level drivers requested a SCSI  */
        /* bus reset.  No other information is provided.                */

#define EVENT_CODE_RESET    0xF006

        /* EVENT_CODE_INIT is classified in the EVENT_TYPE_INFO class   */
        /* and indicates that the adapter has successfully completed    */
        /* initialization.                                              */

#define EVENT_CODE_INIT     0xF007

        /* EVENT_CODE_SCAN is classified in the EVENT_TYPE_INFO class   */
        /* and indicates that a bus scan has been initiated on the      */
        /* indicated adapter.                                           */

#define EVENT_CODE_SCAN     0xF008

        /* EVENT_CODE_FW_CHECK is classified in the EVENT_TYPE_FATAL    */
        /* class and indicates that the firmware failed its checksum    */
        /* test.                                                        */

#define EVENT_CODE_FW_CHECK 0xF009

        /* EVENT_CODE_FW_STRT is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the firmware failed to start.       */

#define EVENT_CODE_FW_STRT  0xF00A

        /* EVENT_CODE_FW_INIT is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the firmware failed to initialize.  */

#define EVENT_CODE_FW_INIT  0xF00B

        /* EVENT_CODE_FW_LOAD is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the firmware failed to load.        */

#define EVENT_CODE_FW_LOAD  0xF00C

        /* EVENT_CODE_RISC_PAR is classified in the EVENT_TYPE_FATAL    */
        /* class and indicates that the RISC chip detected a parity     */
        /* error.  The low word of the EventCode (offset 0x34) contains */
        /* the HCCR register at the time of the parity error; bit 0 (1) */
        /* indicates a parity error in the SRAM; bit 1 (2) indicates a  */
        /* parity error in the General Purpose Registers; and bit 2 (4) */
        /* indicates a parity error in the Instruction Queue.  In       */
        /* addition, bit 5 (0x20) should be on indicating that the RISC */
        /* is currently paused.  The high word of the UniqueId (offset  */
        /* 0x12) contains the RISC instruction pointer at the time of   */
        /* the parity error, and the low word (offset 0x10) contains    */
        /* the RISC Processor Status Word.                              */

#define EVENT_CODE_RISC_PAR 0xF00D

        /* EVENT_CODE_IOINDEX is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the I/O Index received in the       */
        /* Context Reply from an LSI-based chip was invalid.  The LS    */
        /* WORD of the EventCode contains the invalid I/O Index value.  */

#define EVENT_CODE_IOINDEX  0xF00E

        /* EVENT_CODE_ININDEX is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the Initiator Index received in the */
        /* Context Reply from an LSI-based chip was invalid.  The LS    */
        /* WORD of the EventCode contains the invalid Initiator Index.  */

#define EVENT_CODE_ININDEX  0xF00F

        /* EVENT_CODE_NOLOGIN is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that the Initiator Index received in the */
        /* Context Reply from an LSI-based chip mapped to a port that   */
        /* is not logged in.  The LS WORD of the EventCode contains the */
        /* Initiator Index.                                             */

#define EVENT_CODE_NOLOGIN  0xF010

        /* EVENT_CODE_LOGINFO is classified in the EVENT_TYPE_FATAL     */
        /* class simply because we want these things to be stuck in the */
        /* Event Log when they haven't turned on our diagnostic mess-   */
        /* ages and indicates that the LSI-based chip returned an Ioc-  */
        /* Status value with the Log Info bit turned on.  The IOCLogInf */
        /* value is found in UniqueId.                                  */

#define EVENT_CODE_LOGINFO  0xF011

        /* EVENT_CODE_LSPOST indicates that a Link Service Buffer Post  */
        /* reply was received with either the LSPOST_NO_RSP bit set, in */
        /* which case the low WORD of the EventCode contains 0xFFFF, or */
        /* received a reply for an unexpected Extended Link Service     */
        /* command, in which case the ELS Command Code is in the LS     */
        /* WORD of the EventCode.                                       */

#define EVENT_CODE_LSPOST   0xF012

        /* EVENT_CODE_BADFUNC is classified in the EVENT_TYPE_FATAL     */
        /* class and indicates that a Reply Frame was received (LSI)    */
        /* with an unknown Function Code.  The LS WORD of the EventCode */
        /* contains the Function Code.                                  */

#define EVENT_CODE_BADFUNC  0xF013

        /* EVENT_CODE_DOORBELL is classified in the EVENT_CODE_FATAL    */
        /* class and indicates some error in processing a Doorbell      */
        /* command.  The LS WORD of the EventCode contains a value      */
        /* indicating where in the processing the error occurred.  The  */
        /* UniqueId contains the first DWORD of additonal data if this  */
        /* was a Handshake operation.                                   */

#define EVENT_CODE_DOORBELL 0xF014

    #define EVENT_DRBL_USED     1   /* Doorbell alaready in use         */
    #define EVENT_DRBL_CMD      2   /* Timeout sending the Command      */
    #define EVENT_DRBL_STRT     3   /* Timeout waiting for drbl to strt */
    #define EVENT_DRBL_SEND     4   /* Timeout sending handshake data   */
    #define EVENT_DRBL_RSP      5   /* Timeout reading the 1st rsp word */
    #define EVENT_DRBL_READ     6   /* Timeout reading rest of data     */
    #define EVENT_DRBL_END      7   /* Timeout waiting for completion   */

        /* EVENT_CODE_CHIPRST is classified in the EVENT_CODE_FATAL     */
        /* and indicates that the LSI chip failed to reset.             */

#define EVENT_CODE_CHIPRST  0xF015

        /* EVENT_CODE_CHIPRDY is classified in the EVENT_CODE_FATAL     */
        /* and indicates that the LSI chip failed to go to the Ready    */
        /* state.                                                       */

#define EVENT_CODE_CHIPRDY  0xF016

        /* EVENT_CODE_DIAGMSG is classified in the EVENT_TYPE_FATAL     */
        /* and indicates that the LSI chip failed the Diagnostic Mess-  */
        /* ages test.                                                   */

#define EVENT_CODE_DIAGMSG  0xF017

        /* EVENT_TYPE_LOOP is classified in the EVENT_TYPE_LOOP         */
        /* category and indicates a change in loop status or state.     */
        /* The LS WORD of EventCode indicates the MPI Event.  Further   */
        /* qualification information may be found in the LS WORD of     */
        /* UniqueId.                                                    */

#define EVENT_CODE_LOOP     0xF018

        /* EVENT_CODE_OVERFLOW indicates that the upper-level driver    */
        /* overflowed the Event ring buffer.  This Event indicates that */
        /* some events have been lost.  The count of lost events is     */
        /* shown in UniqueId.                                           */

#define EVENT_CODE_OVERFLOW 0xF100


        /****************** Special note for NT/2k **********************/
        /*                                                              */
        /* Since the NT/2000 Port Driver will only report one event per */
        /* interrupt or execution of its DPC routine, the actual events */
        /* are stored in a ring buffer in the upper-level ADAPTER       */
        /* structure, then are dumped to the port driver in the Timer   */
        /* routine, one per invocation of the Timer.  The Timer only    */
        /* executes once per 100 ms; therefore, times reported may not  */
        /* be accurate when a lot of events are stacked up.             */
        /*                                                              */
        /****************************************************************/

    /* These are typically upper level driver error codes, but are  */
    /* listed here to get them all in one place.                    */

#define EVENT_CODE_BUS_RST   0x2000     /* Error doing bus reset        */
#define EVENT_CODE_DEV_RST   0x2001     /* Error on device reset        */
#define EVENT_CODE_CMD_ABRT  0x2002     /* Error on command abort       */
#define EVENT_CODE_INV_CMD   0x2003     /* Invalid SCSI_REQUEST_BLOCK   */
#define EVENT_CODE_RISC_RST  0x2004     /* Error resetting RISC         */
#define EVENT_CODE_DIAGS     0x2005     /* Diagnostic failure           */
#define EVENT_CODE_IOBASE    0x2006     /* No PCI I/O Base Address      */
#define EVENT_CODE_EXTENSION 0x2007     /* Can't get uncached extension */
#define EVENT_CODE_LM_ALLOC  0x2008     /* LunMask allocation error     */
#define EVENT_CODE_LM_TOT    0x2009     /* LunMask registry error -     */
                                        /*   Total value                */
#define EVENT_CODE_LM_PART   0x200A     /* LunMask registry error -     */
                                        /*   Partial value              */
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web1, load: 0.77