Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 
0003 =========================================
0004 The Linux SYM-2 driver documentation file
0005 =========================================
0006 
0007 Written by Gerard Roudier <groudier@free.fr>
0008 
0009 21 Rue Carnot
0010 
0011 95170 DEUIL LA BARRE - FRANCE
0012 
0013 Updated by Matthew Wilcox <matthew@wil.cx>
0014 
0015 2004-10-09
0016 
0017 .. Contents
0018 
0019    1.  Introduction
0020    2.  Supported chips and SCSI features
0021    3.  Advantages of this driver for newer chips.
0022          3.1 Optimized SCSI SCRIPTS
0023          3.2 New features appeared with the SYM53C896
0024    4.  Memory mapped I/O versus normal I/O
0025    5.  Tagged command queueing
0026    6.  Parity checking
0027    7.  Profiling information
0028    8.  Control commands
0029          8.1  Set minimum synchronous period
0030          8.2  Set wide size
0031          8.3  Set maximum number of concurrent tagged commands
0032          8.4  Set debug mode
0033          8.5  Set flag (no_disc)
0034          8.6  Set verbose level
0035          8.7  Reset all logical units of a target
0036          8.8  Abort all tasks of all logical units of a target
0037    9.  Configuration parameters
0038    10. Boot setup commands
0039          10.1 Syntax
0040          10.2 Available arguments
0041                 10.2.1  Default number of tagged commands
0042                 10.2.2  Burst max
0043                 10.2.3  LED support
0044                 10.2.4  Differential mode
0045                 10.2.5  IRQ mode
0046                 10.2.6  Check SCSI BUS
0047                 10.2.7  Suggest a default SCSI id for hosts
0048                 10.2.8  Verbosity level
0049                 10.2.9  Debug mode
0050                 10.2.10 Settle delay
0051                 10.2.11 Serial NVRAM
0052                 10.2.12 Exclude a host from being attached
0053          10.3 Converting from old options
0054          10.4 SCSI BUS checking boot option
0055    11. SCSI problem troubleshooting
0056          15.1 Problem tracking
0057          15.2 Understanding hardware error reports
0058    12. Serial NVRAM support (by Richard Waltham)
0059          17.1 Features
0060          17.2 Symbios NVRAM layout
0061          17.3 Tekram  NVRAM layout
0062 
0063 
0064 1. Introduction
0065 ===============
0066 
0067 This driver supports the whole SYM53C8XX family of PCI-SCSI controllers.
0068 It also support the subset of LSI53C10XX PCI-SCSI controllers that are based
0069 on the SYM53C8XX SCRIPTS language.
0070 
0071 It replaces the sym53c8xx+ncr53c8xx driver bundle and shares its core code
0072 with the FreeBSD SYM-2 driver. The 'glue' that allows this driver to work
0073 under Linux is contained in 2 files named sym_glue.h and sym_glue.c.
0074 Other drivers files are intended not to depend on the Operating System
0075 on which the driver is used.
0076 
0077 The history of this driver can be summarized as follows:
0078 
0079 1993: ncr driver written for 386bsd and FreeBSD by:
0080 
0081           - Wolfgang Stanglmeier        <wolf@cologne.de>
0082           - Stefan Esser                <se@mi.Uni-Koeln.de>
0083 
0084 1996: port of the ncr driver to Linux-1.2.13 and rename it ncr53c8xx.
0085 
0086           - Gerard Roudier
0087 
0088 1998: new sym53c8xx driver for Linux based on LOAD/STORE instruction and that
0089       adds full support for the 896 but drops support for early NCR devices.
0090 
0091           - Gerard Roudier
0092 
0093 1999: port of the sym53c8xx driver to FreeBSD and support for the LSI53C1010
0094       33 MHz and 66MHz Ultra-3 controllers. The new driver is named 'sym'.
0095 
0096           - Gerard Roudier
0097 
0098 2000: Add support for early NCR devices to FreeBSD 'sym' driver.
0099       Break the driver into several sources and separate the OS glue
0100       code from the core code that can be shared among different O/Ses.
0101       Write a glue code for Linux.
0102 
0103           - Gerard Roudier
0104 
0105 2004: Remove FreeBSD compatibility code.  Remove support for versions of
0106       Linux before 2.6.  Start using Linux facilities.
0107 
0108 This README file addresses the Linux version of the driver. Under FreeBSD,
0109 the driver documentation is the sym.8 man page.
0110 
0111 Information about new chips is available at LSILOGIC web server:
0112 
0113           http://www.lsilogic.com/
0114 
0115 SCSI standard documentations are available at T10 site:
0116 
0117           http://www.t10.org/
0118 
0119 Useful SCSI tools written by Eric Youngdale are part of most Linux
0120 distributions:
0121 
0122    ============ ==========================
0123    scsiinfo     command line tool
0124    scsi-config  TCL/Tk tool using scsiinfo
0125    ============ ==========================
0126 
0127 2. Supported chips and SCSI features
0128 ====================================
0129 
0130 The following features are supported for all chips:
0131 
0132         - Synchronous negotiation
0133         - Disconnection
0134         - Tagged command queuing
0135         - SCSI parity checking
0136         - PCI Master parity checking
0137 
0138 Other features depends on chip capabilities.
0139 
0140 The driver notably uses optimized SCRIPTS for devices that support
0141 LOAD/STORE and handles PHASE MISMATCH from SCRIPTS for devices that
0142 support the corresponding feature.
0143 
0144 The following table shows some characteristics of the chip family.
0145 
0146 +--------+-----------+-----+-----------+------------+------------+---------+
0147 |        |           |     |           |            |Load/store  |Hardware |
0148 |        |On board   |     |           |            |scripts     |phase    |
0149 |Chip    |SDMS BIOS  |Wide |SCSI std.  | Max. sync  |            |mismatch |
0150 +--------+-----------+-----+-----------+------------+------------+---------+
0151 |810     |     N     |  N  | FAST10    | 10 MB/s    |      N     |    N    |
0152 +--------+-----------+-----+-----------+------------+------------+---------+
0153 |810A    |     N     |  N  | FAST10    | 10 MB/s    |      Y     |    N    |
0154 +--------+-----------+-----+-----------+------------+------------+---------+
0155 |815     |     Y     |  N  | FAST10    | 10 MB/s    |      N     |    N    |
0156 +--------+-----------+-----+-----------+------------+------------+---------+
0157 |825     |     Y     |  Y  | FAST10    | 20 MB/s    |      N     |    N    |
0158 +--------+-----------+-----+-----------+------------+------------+---------+
0159 |825A    |     Y     |  Y  | FAST10    | 20 MB/s    |      Y     |    N    |
0160 +--------+-----------+-----+-----------+------------+------------+---------+
0161 |860     |     N     |  N  | FAST20    | 20 MB/s    |      Y     |    N    |
0162 +--------+-----------+-----+-----------+------------+------------+---------+
0163 |875     |     Y     |  Y  | FAST20    | 40 MB/s    |      Y     |    N    |
0164 +--------+-----------+-----+-----------+------------+------------+---------+
0165 |875A    |     Y     |  Y  | FAST20    | 40 MB/s    |      Y     |    Y    |
0166 +--------+-----------+-----+-----------+------------+------------+---------+
0167 |876     |     Y     |  Y  | FAST20    | 40 MB/s    |      Y     |    N    |
0168 +--------+-----------+-----+-----------+------------+------------+---------+
0169 |895     |     Y     |  Y  | FAST40    | 80 MB/s    |      Y     |    N    |
0170 +--------+-----------+-----+-----------+------------+------------+---------+
0171 |895A    |     Y     |  Y  | FAST40    | 80 MB/s    |      Y     |    Y    |
0172 +--------+-----------+-----+-----------+------------+------------+---------+
0173 |896     |     Y     |  Y  | FAST40    | 80 MB/s    |      Y     |    Y    |
0174 +--------+-----------+-----+-----------+------------+------------+---------+
0175 |897     |     Y     |  Y  | FAST40    | 80 MB/s    |      Y     |    Y    |
0176 +--------+-----------+-----+-----------+------------+------------+---------+
0177 |1510D   |     Y     |  Y  | FAST40    | 80 MB/s    |      Y     |    Y    |
0178 +--------+-----------+-----+-----------+------------+------------+---------+
0179 |1010    |     Y     |  Y  | FAST80    |160 MB/s    |      Y     |    Y    |
0180 +--------+-----------+-----+-----------+------------+------------+---------+
0181 |1010_66 |     Y     |  Y  | FAST80    |160 MB/s    |      Y     |    Y    |
0182 |[1]_    |           |     |           |            |            |         |
0183 +--------+-----------+-----+-----------+------------+------------+---------+
0184 
0185 .. [1] Chip supports 33MHz and 66MHz PCI bus clock.
0186 
0187 
0188 Summary of other supported features:
0189 
0190 :Module:                allow to load the driver
0191 :Memory mapped I/O:     increases performance
0192 :Control commands:      write operations to the proc SCSI file system
0193 :Debugging information: written to syslog (expert only)
0194 :Serial NVRAM:          Symbios and Tekram formats
0195 
0196 - Scatter / gather
0197 - Shared interrupt
0198 - Boot setup commands
0199 
0200 
0201 3. Advantages of this driver for newer chips.
0202 =============================================
0203 
0204 3.1 Optimized SCSI SCRIPTS
0205 --------------------------
0206 
0207 All chips except the 810, 815 and 825, support new SCSI SCRIPTS instructions
0208 named LOAD and STORE that allow to move up to 1 DWORD from/to an IO register
0209 to/from memory much faster that the MOVE MEMORY instruction that is supported
0210 by the 53c7xx and 53c8xx family.
0211 
0212 The LOAD/STORE instructions support absolute and DSA relative addressing
0213 modes. The SCSI SCRIPTS had been entirely rewritten using LOAD/STORE instead
0214 of MOVE MEMORY instructions.
0215 
0216 Due to the lack of LOAD/STORE SCRIPTS instructions by earlier chips, this
0217 driver also incorporates a different SCRIPTS set based on MEMORY MOVE, in
0218 order to provide support for the entire SYM53C8XX chips family.
0219 
0220 3.2 New features appeared with the SYM53C896
0221 --------------------------------------------
0222 
0223 Newer chips (see above) allows handling of the phase mismatch context from
0224 SCRIPTS (avoids the phase mismatch interrupt that stops the SCSI processor
0225 until the C code has saved the context of the transfer).
0226 
0227 The 896 and 1010 chips support 64 bit PCI transactions and addressing,
0228 while the 895A supports 32 bit PCI transactions and 64 bit addressing.
0229 The SCRIPTS processor of these chips is not true 64 bit, but uses segment
0230 registers for bit 32-63. Another interesting feature is that LOAD/STORE
0231 instructions that address the on-chip RAM (8k) remain internal to the chip.
0232 
0233 4. Memory mapped I/O versus normal I/O
0234 ======================================
0235 
0236 Memory mapped I/O has less latency than normal I/O and is the recommended
0237 way for doing IO with PCI devices. Memory mapped I/O seems to work fine on
0238 most hardware configurations, but some poorly designed chipsets may break
0239 this feature. A configuration option is provided for normal I/O to be
0240 used but the driver defaults to MMIO.
0241 
0242 5. Tagged command queueing
0243 ==========================
0244 
0245 Queuing more than 1 command at a time to a device allows it to perform
0246 optimizations based on actual head positions and its mechanical
0247 characteristics. This feature may also reduce average command latency.
0248 In order to really gain advantage of this feature, devices must have
0249 a reasonable cache size (No miracle is to be expected for a low-end
0250 hard disk with 128 KB or less).
0251 
0252 Some known old SCSI devices do not properly support tagged command queuing.
0253 Generally, firmware revisions that fix this kind of problems are available
0254 at respective vendor web/ftp sites.
0255 
0256 All I can say is that I never have had problem with tagged queuing using
0257 this driver and its predecessors. Hard disks that behaved correctly for
0258 me using tagged commands are the following:
0259 
0260 - IBM S12 0662
0261 - Conner 1080S
0262 - Quantum Atlas I
0263 - Quantum Atlas II
0264 - Seagate Cheetah I
0265 - Quantum Viking II
0266 - IBM DRVS
0267 - Quantum Atlas IV
0268 - Seagate Cheetah II
0269 
0270 If your controller has NVRAM, you can configure this feature per target
0271 from the user setup tool. The Tekram Setup program allows to tune the
0272 maximum number of queued commands up to 32. The Symbios Setup only allows
0273 to enable or disable this feature.
0274 
0275 The maximum number of simultaneous tagged commands queued to a device
0276 is currently set to 16 by default.  This value is suitable for most SCSI
0277 disks.  With large SCSI disks (>= 2GB, cache >= 512KB, average seek time
0278 <= 10 ms), using a larger value may give better performances.
0279 
0280 This driver supports up to 255 commands per device, and but using more than
0281 64 is generally not worth-while, unless you are using a very large disk or
0282 disk arrays. It is noticeable that most of recent hard disks seem not to
0283 accept more than 64 simultaneous commands. So, using more than 64 queued
0284 commands is probably just resource wasting.
0285 
0286 If your controller does not have NVRAM or if it is managed by the SDMS
0287 BIOS/SETUP, you can configure tagged queueing feature and device queue
0288 depths from the boot command-line. For example::
0289 
0290   sym53c8xx=tags:4/t2t3q15-t4q7/t1u0q32
0291 
0292 will set tagged commands queue depths as follow:
0293 
0294 - target 2  all luns  on controller 0 --> 15
0295 - target 3  all luns  on controller 0 --> 15
0296 - target 4  all luns  on controller 0 -->  7
0297 - target 1  lun 0     on controller 1 --> 32
0298 - all other target/lun                -->  4
0299 
0300 In some special conditions, some SCSI disk firmwares may return a
0301 QUEUE FULL status for a SCSI command. This behaviour is managed by the
0302 driver using the following heuristic:
0303 
0304 - Each time a QUEUE FULL status is returned, tagged queue depth is reduced
0305   to the actual number of disconnected commands.
0306 
0307 - Every 200 successfully completed SCSI commands, if allowed by the
0308   current limit, the maximum number of queueable commands is incremented.
0309 
0310 Since QUEUE FULL status reception and handling is resource wasting, the
0311 driver notifies by default this problem to user by indicating the actual
0312 number of commands used and their status, as well as its decision on the
0313 device queue depth change.
0314 The heuristic used by the driver in handling QUEUE FULL ensures that the
0315 impact on performances is not too bad. You can get rid of the messages by
0316 setting verbose level to zero, as follow:
0317 
0318 1st method:
0319             boot your system using 'sym53c8xx=verb:0' option.
0320 2nd method:
0321             apply "setverbose 0" control command to the proc fs entry
0322             corresponding to your controller after boot-up.
0323 
0324 6. Parity checking
0325 ==================
0326 
0327 The driver supports SCSI parity checking and PCI bus master parity
0328 checking.  These features must be enabled in order to ensure safe
0329 data transfers.  Some flawed devices or mother boards may have problems
0330 with parity.  The options to defeat parity checking have been removed
0331 from the driver.
0332 
0333 7. Profiling information
0334 ========================
0335 
0336 This driver does not provide profiling information as did its predecessors.
0337 This feature was not this useful and added complexity to the code.
0338 As the driver code got more complex, I have decided to remove everything
0339 that didn't seem actually useful.
0340 
0341 8. Control commands
0342 ===================
0343 
0344 Control commands can be sent to the driver with write operations to
0345 the proc SCSI file system. The generic command syntax is the
0346 following::
0347 
0348       echo "<verb> <parameters>" >/proc/scsi/sym53c8xx/0
0349       (assumes controller number is 0)
0350 
0351 Using "all" for "<target>" parameter with the commands below will
0352 apply to all targets of the SCSI chain (except the controller).
0353 
0354 Available commands:
0355 
0356 8.1 Set minimum synchronous period factor
0357 -----------------------------------------
0358 
0359     setsync <target> <period factor>
0360 
0361     :target:   target number
0362     :period:   minimum synchronous period.
0363                Maximum speed = 1000/(4*period factor) except for special
0364                cases below.
0365 
0366     Specify a period of 0, to force asynchronous transfer mode.
0367 
0368      -  9 means 12.5 nano-seconds synchronous period
0369      - 10 means 25 nano-seconds synchronous period
0370      - 11 means 30 nano-seconds synchronous period
0371      - 12 means 50 nano-seconds synchronous period
0372 
0373 8.2 Set wide size
0374 -----------------
0375 
0376     setwide <target> <size>
0377 
0378     :target:   target number
0379     :size:     0=8 bits, 1=16bits
0380 
0381 8.3 Set maximum number of concurrent tagged commands
0382 ----------------------------------------------------
0383 
0384     settags <target> <tags>
0385 
0386     :target:   target number
0387     :tags:     number of concurrent tagged commands
0388                must not be greater than configured (default: 16)
0389 
0390 8.4 Set debug mode
0391 ------------------
0392 
0393     setdebug <list of debug flags>
0394 
0395     Available debug flags:
0396 
0397         ======== ========================================================
0398         alloc    print info about memory allocations (ccb, lcb)
0399         queue    print info about insertions into the command start queue
0400         result   print sense data on CHECK CONDITION status
0401         scatter  print info about the scatter process
0402         scripts  print info about the script binding process
0403         tiny     print minimal debugging information
0404         timing   print timing information of the NCR chip
0405         nego     print information about SCSI negotiations
0406         phase    print information on script interruptions
0407         ======== ========================================================
0408 
0409     Use "setdebug" with no argument to reset debug flags.
0410 
0411 
0412 8.5 Set flag (no_disc)
0413 ----------------------
0414 
0415     setflag <target> <flag>
0416 
0417     :target:    target number
0418 
0419     For the moment, only one flag is available:
0420 
0421         no_disc:   not allow target to disconnect.
0422 
0423     Do not specify any flag in order to reset the flag. For example:
0424 
0425     setflag 4
0426       will reset no_disc flag for target 4, so will allow it disconnections.
0427     setflag all
0428       will allow disconnection for all devices on the SCSI bus.
0429 
0430 
0431 8.6 Set verbose level
0432 ---------------------
0433 
0434     setverbose #level
0435 
0436     The driver default verbose level is 1. This command allows to change
0437     th driver verbose level after boot-up.
0438 
0439 8.7 Reset all logical units of a target
0440 ---------------------------------------
0441 
0442     resetdev <target>
0443 
0444     :target:    target number
0445 
0446     The driver will try to send a BUS DEVICE RESET message to the target.
0447 
0448 8.8 Abort all tasks of all logical units of a target
0449 ----------------------------------------------------
0450 
0451     cleardev <target>
0452 
0453     :target:    target number
0454 
0455     The driver will try to send a ABORT message to all the logical units
0456     of the target.
0457 
0458 
0459 9. Configuration parameters
0460 ===========================
0461 
0462 Under kernel configuration tools (make menuconfig, for example), it is
0463 possible to change some default driver configuration parameters.
0464 If the firmware of all your devices is perfect enough, all the
0465 features supported by the driver can be enabled at start-up. However,
0466 if only one has a flaw for some SCSI feature, you can disable the
0467 support by the driver of this feature at linux start-up and enable
0468 this feature after boot-up only for devices that support it safely.
0469 
0470 Configuration parameters:
0471 
0472 Use normal IO                         (default answer: n)
0473     Answer "y" if you suspect your mother board to not allow memory mapped I/O.
0474     May slow down performance a little.
0475 
0476 Default tagged command queue depth    (default answer: 16)
0477     Entering 0 defaults to tagged commands not being used.
0478     This parameter can be specified from the boot command line.
0479 
0480 Maximum number of queued commands     (default answer: 32)
0481     This option allows you to specify the maximum number of tagged commands
0482     that can be queued to a device. The maximum supported value is 255.
0483 
0484 Synchronous transfers frequency       (default answer: 80)
0485     This option allows you to specify the frequency in MHz the driver
0486     will use at boot time for synchronous data transfer negotiations.
0487     0 means "asynchronous data transfers".
0488 
0489 10. Boot setup commands
0490 =======================
0491 
0492 10.1 Syntax
0493 -----------
0494 
0495 Setup commands can be passed to the driver either at boot time or as
0496 parameters to modprobe, as described in Documentation/admin-guide/kernel-parameters.rst
0497 
0498 Example of boot setup command under lilo prompt::
0499 
0500     lilo: linux root=/dev/sda2 sym53c8xx.cmd_per_lun=4 sym53c8xx.sync=10 sym53c8xx.debug=0x200
0501 
0502 - enable tagged commands, up to 4 tagged commands queued.
0503 - set synchronous negotiation speed to 10 Mega-transfers / second.
0504 - set DEBUG_NEGO flag.
0505 
0506 The following command will install the driver module with the same
0507 options as above::
0508 
0509     modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
0510 
0511 10.2 Available arguments
0512 ------------------------
0513 
0514 10.2.1  Default number of tagged commands
0515 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0516         - cmd_per_lun=0 (or cmd_per_lun=1) tagged command queuing disabled
0517         - cmd_per_lun=#tags (#tags > 1) tagged command queuing enabled
0518 
0519   #tags will be truncated to the max queued commands configuration parameter.
0520 
0521 10.2.2 Burst max
0522 ^^^^^^^^^^^^^^^^
0523 
0524         ========== ======================================================
0525         burst=0    burst disabled
0526         burst=255  get burst length from initial IO register settings.
0527         burst=#x   burst enabled (1<<#x burst transfers max)
0528 
0529                    #x is an integer value which is log base 2 of the burst
0530                    transfers max.
0531         ========== ======================================================
0532 
0533   By default the driver uses the maximum value supported by the chip.
0534 
0535 10.2.3 LED support
0536 ^^^^^^^^^^^^^^^^^^
0537 
0538         =====      ===================
0539         led=1      enable  LED support
0540         led=0      disable LED support
0541         =====      ===================
0542 
0543   Do not enable LED support if your scsi board does not use SDMS BIOS.
0544   (See 'Configuration parameters')
0545 
0546 10.2.4 Differential mode
0547 ^^^^^^^^^^^^^^^^^^^^^^^^
0548 
0549         ======  =================================
0550         diff=0  never set up diff mode
0551         diff=1  set up diff mode if BIOS set it
0552         diff=2  always set up diff mode
0553         diff=3  set diff mode if GPIO3 is not set
0554         ======  =================================
0555 
0556 10.2.5 IRQ mode
0557 ^^^^^^^^^^^^^^^
0558 
0559         ======     ================================================
0560         irqm=0     always open drain
0561         irqm=1     same as initial settings (assumed BIOS settings)
0562         irqm=2     always totem pole
0563         ======     ================================================
0564 
0565 10.2.6 Check SCSI BUS
0566 ^^^^^^^^^^^^^^^^^^^^^
0567 
0568         buschk=<option bits>
0569 
0570     Available option bits:
0571 
0572         ===    ================================================
0573         0x0    No check.
0574         0x1    Check and do not attach the controller on error.
0575         0x2    Check and just warn on error.
0576         ===    ================================================
0577 
0578 10.2.7 Suggest a default SCSI id for hosts
0579 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0580 
0581         ==========      ==========================================
0582         hostid=255      no id suggested.
0583         hostid=#x       (0 < x < 7) x suggested for hosts SCSI id.
0584         ==========      ==========================================
0585 
0586     If a host SCSI id is available from the NVRAM, the driver will ignore
0587     any value suggested as boot option. Otherwise, if a suggested value
0588     different from 255 has been supplied, it will use it. Otherwise, it will
0589     try to deduce the value previously set in the hardware and use value
0590     7 if the hardware value is zero.
0591 
0592 10.2.8  Verbosity level
0593 ^^^^^^^^^^^^^^^^^^^^^^^
0594 
0595         ======     ========
0596         verb=0     minimal
0597         verb=1     normal
0598         verb=2     too much
0599         ======     ========
0600 
0601 10.2.9 Debug mode
0602 ^^^^^^^^^^^^^^^^^
0603 
0604         =========   ====================================
0605         debug=0     clear debug flags
0606         debug=#x    set debug flags
0607 
0608                     #x is an integer value combining the
0609                     following power-of-2 values:
0610 
0611                     =============  ======
0612                     DEBUG_ALLOC       0x1
0613                     DEBUG_PHASE       0x2
0614                     DEBUG_POLL        0x4
0615                     DEBUG_QUEUE       0x8
0616                     DEBUG_RESULT     0x10
0617                     DEBUG_SCATTER    0x20
0618                     DEBUG_SCRIPT     0x40
0619                     DEBUG_TINY       0x80
0620                     DEBUG_TIMING    0x100
0621                     DEBUG_NEGO      0x200
0622                     DEBUG_TAGS      0x400
0623                     DEBUG_FREEZE    0x800
0624                     DEBUG_RESTART  0x1000
0625                     =============  ======
0626         =========   ====================================
0627 
0628   You can play safely with DEBUG_NEGO. However, some of these flags may
0629   generate bunches of syslog messages.
0630 
0631 10.2.10 Settle delay
0632 ^^^^^^^^^^^^^^^^^^^^
0633 
0634         ========        ===================
0635         settle=n        delay for n seconds
0636         ========        ===================
0637 
0638   After a bus reset, the driver will delay for n seconds before talking
0639   to any device on the bus.  The default is 3 seconds and safe mode will
0640   default it to 10.
0641 
0642 10.2.11 Serial NVRAM
0643 ^^^^^^^^^^^^^^^^^^^^
0644 
0645         .. Note:: option not currently implemented.
0646 
0647         =======     =========================================
0648         nvram=n     do not look for serial NVRAM
0649         nvram=y     test controllers for onboard serial NVRAM
0650         =======     =========================================
0651 
0652         (alternate binary form)
0653 
0654         nvram=<bits options>
0655 
0656         ====   =================================================================
0657         0x01   look for NVRAM  (equivalent to nvram=y)
0658         0x02   ignore NVRAM "Synchronous negotiation" parameters for all devices
0659         0x04   ignore NVRAM "Wide negotiation"  parameter for all devices
0660         0x08   ignore NVRAM "Scan at boot time" parameter for all devices
0661         0x80   also attach controllers set to OFF in the NVRAM (sym53c8xx only)
0662         ====   =================================================================
0663 
0664 10.2.12 Exclude a host from being attached
0665 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0666 
0667         excl=<io_address>,...
0668 
0669     Prevent host at a given io address from being attached.
0670     For example 'excl=0xb400,0xc000' indicate to the
0671     driver not to attach hosts at address 0xb400 and 0xc000.
0672 
0673 10.3 Converting from old style options
0674 --------------------------------------
0675 
0676 Previously, the sym2 driver accepted arguments of the form::
0677 
0678         sym53c8xx=tags:4,sync:10,debug:0x200
0679 
0680 As a result of the new module parameters, this is no longer available.
0681 Most of the options have remained the same, but tags has become
0682 cmd_per_lun to reflect its different purposes.  The sample above would
0683 be specified as::
0684 
0685         modprobe sym53c8xx cmd_per_lun=4 sync=10 debug=0x200
0686 
0687 or on the kernel boot line as::
0688 
0689         sym53c8xx.cmd_per_lun=4 sym53c8xx.sync=10 sym53c8xx.debug=0x200
0690 
0691 10.4 SCSI BUS checking boot option
0692 ----------------------------------
0693 
0694 When this option is set to a non-zero value, the driver checks SCSI lines
0695 logic state, 100 micro-seconds after having asserted the SCSI RESET line.
0696 The driver just reads SCSI lines and checks all lines read FALSE except RESET.
0697 Since SCSI devices shall release the BUS at most 800 nano-seconds after SCSI
0698 RESET has been asserted, any signal to TRUE may indicate a SCSI BUS problem.
0699 Unfortunately, the following common SCSI BUS problems are not detected:
0700 
0701 - Only 1 terminator installed.
0702 - Misplaced terminators.
0703 - Bad quality terminators.
0704 
0705 On the other hand, either bad cabling, broken devices, not conformant
0706 devices, ... may cause a SCSI signal to be wrong when te driver reads it.
0707 
0708 15. SCSI problem troubleshooting
0709 ================================
0710 
0711 15.1 Problem tracking
0712 ---------------------
0713 
0714 Most SCSI problems are due to a non conformant SCSI bus or too buggy
0715 devices.  If unfortunately you have SCSI problems, you can check the
0716 following things:
0717 
0718 - SCSI bus cables
0719 - terminations at both end of the SCSI chain
0720 - linux syslog messages (some of them may help you)
0721 
0722 If you do not find the source of problems, you can configure the
0723 driver or devices in the NVRAM with minimal features.
0724 
0725 - only asynchronous data transfers
0726 - tagged commands disabled
0727 - disconnections not allowed
0728 
0729 Now, if your SCSI bus is ok, your system has every chance to work
0730 with this safe configuration but performances will not be optimal.
0731 
0732 If it still fails, then you can send your problem description to
0733 appropriate mailing lists or news-groups.  Send me a copy in order to
0734 be sure I will receive it.  Obviously, a bug in the driver code is
0735 possible.
0736 
0737   My current email address: Gerard Roudier <groudier@free.fr>
0738 
0739 Allowing disconnections is important if you use several devices on
0740 your SCSI bus but often causes problems with buggy devices.
0741 Synchronous data transfers increases throughput of fast devices like
0742 hard disks.  Good SCSI hard disks with a large cache gain advantage of
0743 tagged commands queuing.
0744 
0745 15.2 Understanding hardware error reports
0746 -----------------------------------------
0747 
0748 When the driver detects an unexpected error condition, it may display a
0749 message of the following pattern::
0750 
0751     sym0:1: ERROR (0:48) (1-21-65) (f/95/0) @ (script 7c0:19000000).
0752     sym0: script cmd = 19000000
0753     sym0: regdump: da 10 80 95 47 0f 01 07 75 01 81 21 80 01 09 00.
0754 
0755 Some fields in such a message may help you understand the cause of the
0756 problem, as follows::
0757 
0758     sym0:1: ERROR (0:48) (1-21-65) (f/95/0) @ (script 7c0:19000000).
0759     .....A.........B.C....D.E..F....G.H..I.......J.....K...L.......
0760 
0761 Field A : target number.
0762   SCSI ID of the device the controller was talking with at the moment the
0763   error occurs.
0764 
0765 Field B : DSTAT io register (DMA STATUS)
0766   ========   =============================================================
0767   Bit 0x40   MDPE Master Data Parity Error
0768              Data parity error detected on the PCI BUS.
0769   Bit 0x20   BF   Bus Fault
0770              PCI bus fault condition detected
0771   Bit 0x01   IID  Illegal Instruction Detected
0772              Set by the chip when it detects an Illegal Instruction format
0773              on some condition that makes an instruction illegal.
0774   Bit 0x80   DFE Dma Fifo Empty
0775              Pure status bit that does not indicate an error.
0776   ========   =============================================================
0777 
0778   If the reported DSTAT value contains a combination of MDPE (0x40),
0779   BF (0x20), then the cause may be likely due to a PCI BUS problem.
0780 
0781 Field C : SIST io register (SCSI Interrupt Status)
0782   ========   ==================================================================
0783   Bit 0x08   SGE  SCSI GROSS ERROR
0784              Indicates that the chip detected a severe error condition
0785              on the SCSI BUS that prevents the SCSI protocol from functioning
0786              properly.
0787   Bit 0x04   UDC  Unexpected Disconnection
0788              Indicates that the device released the SCSI BUS when the chip
0789              was not expecting this to happen. A device may behave so to
0790              indicate the SCSI initiator that an error condition not reportable              using the SCSI protocol has occurred.
0791   Bit 0x02   RST  SCSI BUS Reset
0792              Generally SCSI targets do not reset the SCSI BUS, although any
0793              device on the BUS can reset it at any time.
0794   Bit 0x01   PAR  Parity
0795              SCSI parity error detected.
0796   ========   ==================================================================
0797 
0798   On a faulty SCSI BUS, any error condition among SGE (0x08), UDC (0x04) and
0799   PAR (0x01) may be detected by the chip. If your SCSI system sometimes
0800   encounters such error conditions, especially SCSI GROSS ERROR, then a SCSI
0801   BUS problem is likely the cause of these errors.
0802 
0803 For fields D,E,F,G and H, you may look into the sym53c8xx_defs.h file
0804 that contains some minimal comments on IO register bits.
0805 
0806 Field D : SOCL  Scsi Output Control Latch
0807           This register reflects the state of the SCSI control lines the
0808           chip want to drive or compare against.
0809 Field E : SBCL  Scsi Bus Control Lines
0810           Actual value of control lines on the SCSI BUS.
0811 Field F : SBDL  Scsi Bus Data Lines
0812           Actual value of data lines on the SCSI BUS.
0813 Field G : SXFER  SCSI Transfer
0814           Contains the setting of the Synchronous Period for output and
0815           the current Synchronous offset (offset 0 means asynchronous).
0816 Field H : SCNTL3 Scsi Control Register 3
0817           Contains the setting of timing values for both asynchronous and
0818           synchronous data transfers.
0819 Field I : SCNTL4 Scsi Control Register 4
0820           Only meaningful for 53C1010 Ultra3 controllers.
0821 
0822 Understanding Fields J, K, L and dumps requires to have good knowledge of
0823 SCSI standards, chip cores functionnals and internal driver data structures.
0824 You are not required to decode and understand them, unless you want to help
0825 maintain the driver code.
0826 
0827 17. Serial NVRAM (added by Richard Waltham: dormouse@farsrobt.demon.co.uk)
0828 ==========================================================================
0829 
0830 17.1 Features
0831 -------------
0832 
0833 Enabling serial NVRAM support enables detection of the serial NVRAM included
0834 on Symbios and some Symbios compatible host adaptors, and Tekram boards. The
0835 serial NVRAM is used by Symbios and Tekram to hold set up parameters for the
0836 host adaptor and its attached drives.
0837 
0838 The Symbios NVRAM also holds data on the boot order of host adaptors in a
0839 system with more than one host adaptor.  This information is no longer used
0840 as it's fundamentally incompatible with the hotplug PCI model.
0841 
0842 Tekram boards using Symbios chips, DC390W/F/U, which have NVRAM are detected
0843 and this is used to distinguish between Symbios compatible and Tekram host
0844 adaptors. This is used to disable the Symbios compatible "diff" setting
0845 incorrectly set on Tekram boards if the CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT
0846 configuration parameter is set enabling both Symbios and Tekram boards to be
0847 used together with the Symbios cards using all their features, including
0848 "diff" support. ("led pin" support for Symbios compatible cards can remain
0849 enabled when using Tekram cards. It does nothing useful for Tekram host
0850 adaptors but does not cause problems either.)
0851 
0852 The parameters the driver is able to get from the NVRAM depend on the
0853 data format used, as follow:
0854 
0855 +-------------------------------+------------------+--------------+
0856 |                               |Tekram format     |Symbios format|
0857 +-------------------------------+------------------+--------------+
0858 |General and host parameters    |                  |              |
0859 +-------------------------------+------------------+--------------+
0860 |  * Boot order                 |        N         |       Y      |
0861 +-------------------------------+------------------+--------------+
0862 |  * Host SCSI ID               |        Y         |       Y      |
0863 +-------------------------------+------------------+--------------+
0864 |  * SCSI parity checking       |        Y         |       Y      |
0865 +-------------------------------+------------------+--------------+
0866 |  * Verbose boot messages      |        N         |       Y      |
0867 +-------------------------------+------------------+--------------+
0868 |SCSI devices parameters                                          |
0869 +-------------------------------+------------------+--------------+
0870 |  * Synchronous transfer speed |        Y         |       Y      |
0871 +-------------------------------+------------------+--------------+
0872 |  * Wide 16 / Narrow           |        Y         |       Y      |
0873 +-------------------------------+------------------+--------------+
0874 |  * Tagged Command Queuing     |        Y         |       Y      |
0875 |    enabled                    |                  |              |
0876 +-------------------------------+------------------+--------------+
0877 |  * Disconnections enabled     |        Y         |       Y      |
0878 +-------------------------------+------------------+--------------+
0879 |  * Scan at boot time          |        N         |       Y      |
0880 +-------------------------------+------------------+--------------+
0881 
0882 
0883 In order to speed up the system boot, for each device configured without
0884 the "scan at boot time" option, the driver forces an error on the
0885 first TEST UNIT READY command received for this device.
0886 
0887 
0888 17.2 Symbios NVRAM layout
0889 -------------------------
0890 
0891 typical data at NVRAM address 0x100 (53c810a NVRAM)::
0892 
0893     00 00
0894     64 01
0895     8e 0b
0896 
0897     00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
0898 
0899     04 00 0f 00 00 10 00 50 00 00 01 00 00 62
0900     04 00 03 00 00 10 00 58 00 00 01 00 00 63
0901     04 00 01 00 00 10 00 48 00 00 01 00 00 61
0902     00 00 00 00 00 00 00 00 00 00 00 00 00 00
0903 
0904     0f 00 08 08 64 00 0a 00
0905     0f 00 08 08 64 00 0a 00
0906     0f 00 08 08 64 00 0a 00
0907     0f 00 08 08 64 00 0a 00
0908     0f 00 08 08 64 00 0a 00
0909     0f 00 08 08 64 00 0a 00
0910     0f 00 08 08 64 00 0a 00
0911     0f 00 08 08 64 00 0a 00
0912 
0913     0f 00 08 08 64 00 0a 00
0914     0f 00 08 08 64 00 0a 00
0915     0f 00 08 08 64 00 0a 00
0916     0f 00 08 08 64 00 0a 00
0917     0f 00 08 08 64 00 0a 00
0918     0f 00 08 08 64 00 0a 00
0919     0f 00 08 08 64 00 0a 00
0920     0f 00 08 08 64 00 0a 00
0921 
0922     00 00 00 00 00 00 00 00
0923     00 00 00 00 00 00 00 00
0924     00 00 00 00 00 00 00 00
0925     00 00 00 00 00 00 00 00
0926     00 00 00 00 00 00 00 00
0927     00 00 00 00 00 00 00 00
0928     00 00 00 00 00 00 00 00
0929     00 00 00 00 00 00 00 00
0930 
0931     00 00 00 00 00 00 00 00
0932     00 00 00 00 00 00 00 00
0933     00 00 00 00 00 00 00 00
0934     00 00 00 00 00 00 00 00
0935     00 00 00 00 00 00 00 00
0936     00 00 00 00 00 00 00 00
0937     00 00 00 00 00 00 00 00
0938     00 00 00 00 00 00 00 00
0939 
0940     00 00 00 00 00 00 00 00
0941     00 00 00 00 00 00 00 00
0942     00 00 00 00 00 00 00 00
0943 
0944     fe fe
0945     00 00
0946     00 00
0947 
0948 NVRAM layout details
0949 
0950 ============= =================
0951 NVRAM Address
0952 ============= =================
0953 0x000-0x0ff   not used
0954 0x100-0x26f   initialised data
0955 0x270-0x7ff   not used
0956 ============= =================
0957 
0958 general layout::
0959 
0960         header  -   6 bytes,
0961         data    - 356 bytes (checksum is byte sum of this data)
0962         trailer -   6 bytes
0963                   ---
0964         total     368 bytes
0965 
0966 data area layout::
0967 
0968         controller set up  -  20 bytes
0969         boot configuration -  56 bytes (4x14 bytes)
0970         device set up      - 128 bytes (16x8 bytes)
0971         unused (spare?)    - 152 bytes (19x8 bytes)
0972                              ---
0973         total                356 bytes
0974 
0975 header::
0976 
0977     00 00   - ?? start marker
0978     64 01   - byte count (lsb/msb excludes header/trailer)
0979     8e 0b   - checksum (lsb/msb excludes header/trailer)
0980 
0981 controller set up::
0982 
0983     00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
0984                     |     |           |     |
0985                     |     |           |      -- host ID
0986                     |     |           |
0987                     |     |            --Removable Media Support
0988                     |     |               0x00 = none
0989                     |     |               0x01 = Bootable Device
0990                     |     |               0x02 = All with Media
0991                     |     |
0992                     |      --flag bits 2
0993                     |        0x00000001= scan order hi->low
0994                     |            (default 0x00 - scan low->hi)
0995                         --flag bits 1
0996                         0x00000001 scam enable
0997                         0x00000010 parity enable
0998                         0x00000100 verbose boot msgs
0999 
1000 remaining bytes unknown - they do not appear to change in my
1001 current set up for any of the controllers.
1002 
1003 default set up is identical for 53c810a and 53c875 NVRAM
1004 (Removable Media added Symbios BIOS version 4.09)
1005 
1006 boot configuration
1007 
1008 boot order set by order of the devices in this table::
1009 
1010     04 00 0f 00 00 10 00 50 00 00 01 00 00 62 -- 1st controller
1011     04 00 03 00 00 10 00 58 00 00 01 00 00 63    2nd controller
1012     04 00 01 00 00 10 00 48 00 00 01 00 00 61    3rd controller
1013     00 00 00 00 00 00 00 00 00 00 00 00 00 00    4th controller
1014         |  |  |  |     |        |     |  |
1015         |  |  |  |     |        |      ---- PCI io port adr
1016         |  |  |  |     |         --0x01 init/scan at boot time
1017         |  |  |  |      --PCI device/function number (0xdddddfff)
1018         |  |   ----- ?? PCI vendor ID (lsb/msb)
1019             ----PCI device ID (lsb/msb)
1020 
1021 ?? use of this data is a guess but seems reasonable
1022 
1023 remaining bytes unknown - they do not appear to change in my
1024 current set up
1025 
1026 default set up is identical for 53c810a and 53c875 NVRAM
1027 
1028 device set up (up to 16 devices - includes controller)::
1029 
1030     0f 00 08 08 64 00 0a 00 - id 0
1031     0f 00 08 08 64 00 0a 00
1032     0f 00 08 08 64 00 0a 00
1033     0f 00 08 08 64 00 0a 00
1034     0f 00 08 08 64 00 0a 00
1035     0f 00 08 08 64 00 0a 00
1036     0f 00 08 08 64 00 0a 00
1037     0f 00 08 08 64 00 0a 00
1038 
1039     0f 00 08 08 64 00 0a 00
1040     0f 00 08 08 64 00 0a 00
1041     0f 00 08 08 64 00 0a 00
1042     0f 00 08 08 64 00 0a 00
1043     0f 00 08 08 64 00 0a 00
1044     0f 00 08 08 64 00 0a 00
1045     0f 00 08 08 64 00 0a 00
1046     0f 00 08 08 64 00 0a 00 - id 15
1047     |     |  |  |     |  |
1048     |     |  |  |      ----timeout (lsb/msb)
1049     |     |  |   --synch period (0x?? 40 Mtrans/sec- fast 40) (probably 0x28)
1050     |     |  |                  (0x30 20 Mtrans/sec- fast 20)
1051     |     |  |                  (0x64 10 Mtrans/sec- fast )
1052     |     |  |                  (0xc8  5 Mtrans/sec)
1053     |     |  |                  (0x00  asynchronous)
1054     |     |   -- ?? max sync offset (0x08 in NVRAM on 53c810a)
1055     |     |                         (0x10 in NVRAM on 53c875)
1056     |      --device bus width (0x08 narrow)
1057     |                         (0x10 16 bit wide)
1058     --flag bits
1059         0x00000001 - disconnect enabled
1060         0x00000010 - scan at boot time
1061         0x00000100 - scan luns
1062         0x00001000 - queue tags enabled
1063 
1064 remaining bytes unknown - they do not appear to change in my
1065 current set up
1066 
1067 ?? use of this data is a guess but seems reasonable
1068 (but it could be max bus width)
1069 
1070 default set up for 53c810a NVRAM
1071 default set up for 53c875 NVRAM
1072 
1073                                 - bus width     - 0x10
1074                                 - sync offset ? - 0x10
1075                                 - sync period   - 0x30
1076 
1077 ?? spare device space (32 bit bus ??)::
1078 
1079     00 00 00 00 00 00 00 00  (19x8bytes)
1080     .
1081     .
1082     00 00 00 00 00 00 00 00
1083 
1084 default set up is identical for 53c810a and 53c875 NVRAM
1085 
1086 trailer::
1087 
1088     fe fe   - ? end marker ?
1089     00 00
1090     00 00
1091 
1092 default set up is identical for 53c810a and 53c875 NVRAM
1093 
1094 17.3 Tekram NVRAM layout
1095 ------------------------
1096 
1097 nvram 64x16 (1024 bit)
1098 
1099 Drive settings::
1100 
1101     Drive ID 0-15 (addr 0x0yyyy0 = device setup, yyyy = ID)
1102                 (addr 0x0yyyy1 = 0x0000)
1103 
1104         x x x x  x x x x  x x x x  x x x x
1105                 | | |      | |  | | | |
1106                 | | |      | |  | | |  ----- parity check   0 - off
1107                 | | |      | |  | | |                       1 - on
1108                 | | |      | |  | | |
1109                 | | |      | |  | |  ------- sync neg       0 - off
1110                 | | |      | |  | |                         1 - on
1111                 | | |      | |  | |
1112                 | | |      | |  |  --------- disconnect     0 - off
1113                 | | |      | |  |                           1 - on
1114                 | | |      | |  |
1115                 | | |      | |   ----------- start cmd      0 - off
1116                 | | |      | |                              1 - on
1117                 | | |      | |
1118                 | | |      |  -------------- tagged cmds    0 - off
1119                 | | |      |                                1 - on
1120                 | | |      |
1121                 | | |       ---------------- wide neg       0 - off
1122                 | | |                                       1 - on
1123                 | | |
1124                     --------------------------- sync rate      0 - 10.0 Mtrans/sec
1125                                                             1 -  8.0
1126                                                             2 -  6.6
1127                                                             3 -  5.7
1128                                                             4 -  5.0
1129                                                             5 -  4.0
1130                                                             6 -  3.0
1131                                                             7 -  2.0
1132                                                             7 -  2.0
1133                                                             8 - 20.0
1134                                                             9 - 16.7
1135                                                             a - 13.9
1136                                                             b - 11.9
1137 
1138 Global settings
1139 
1140 Host flags 0 (addr 0x100000, 32)::
1141 
1142     x x x x  x x x x  x x x x  x x x x
1143     | | | |  | | | |           | | | |
1144     | | | |  | | | |            ----------- host ID    0x00 - 0x0f
1145     | | | |  | | | |
1146     | | | |  | | |  ----------------------- support for    0 - off
1147     | | | |  | | |                          > 2 drives     1 - on
1148     | | | |  | | |
1149     | | | |  | |  ------------------------- support drives 0 - off
1150     | | | |  | |                            > 1Gbytes      1 - on
1151     | | | |  | |
1152     | | | |  |  --------------------------- bus reset on   0 - off
1153     | | | |  |                                power on     1 - on
1154     | | | |  |
1155     | | | |   ----------------------------- active neg     0 - off
1156     | | | |                                                1 - on
1157     | | | |
1158     | | |  -------------------------------- imm seek       0 - off
1159     | | |                                                  1 - on
1160     | | |
1161     | |  ---------------------------------- scan luns      0 - off
1162     | |                                                    1 - on
1163     | |
1164      -------------------------------------- removable      0 - disable
1165                                             as BIOS dev    1 - boot device
1166                                                            2 - all
1167 
1168 Host flags 1 (addr 0x100001, 33)::
1169 
1170     x x x x  x x x x  x x x x  x x x x
1171                | | |             | | |
1172                | | |              --------- boot delay     0 -   3 sec
1173                | | |                                       1 -   5
1174                | | |                                       2 -  10
1175                | | |                                       3 -  20
1176                | | |                                       4 -  30
1177                | | |                                       5 -  60
1178                | | |                                       6 - 120
1179                | | |
1180                 --------------------------- max tag cmds   0 -  2
1181                                                            1 -  4
1182                                                            2 -  8
1183                                                            3 - 16
1184                                                            4 - 32
1185 
1186 Host flags 2 (addr 0x100010, 34)::
1187 
1188     x x x x  x x x x  x x x x  x x x x
1189                                      |
1190                                       ----- F2/F6 enable   0 - off ???
1191                                                            1 - on  ???
1192 
1193 checksum (addr 0x111111)
1194 
1195 checksum = 0x1234 - (sum addr 0-63)
1196 
1197 ----------------------------------------------------------------------------
1198 
1199 default nvram data::
1200 
1201     0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1202     0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1203     0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1204     0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1205 
1206     0x0f07 0x0400 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000
1207     0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
1208     0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
1209     0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0xfbbc