S/390 common I/O-Layer - command line parameters and /proc entries
==================================================================

Command line parameters
-----------------------

* cio_msg = yes | no
  
  Determines whether information on found devices and sensed device 
  characteristics should be shown during startup, i. e. messages of the types 
  "Detected device 0.0.4711 on subchannel 0.0.0042" and "SenseID: Device
  0.0.4711 reports: ...".

  Default is off.


* cio_ignore = {all} |
	       {<device> | <range of devices>} |
	       {!<device> | !<range of devices>}

  The given devices will be ignored by the common I/O-layer; no detection
  and device sensing will be done on any of those devices. The subchannel to 
  which the device in question is attached will be treated as if no device was
  attached.

  An ignored device can be un-ignored later; see the "/proc entries"-section for
  details.

  The devices must be given either as bus ids (0.0.abcd) or as hexadecimal
  device numbers (0xabcd or abcd, for 2.4 backward compatibility).
  You can use the 'all' keyword to ignore all devices.
  The '!' operator will cause the I/O-layer to _not_ ignore a device.
  The command line is parsed from left to right.

  For example, 
	cio_ignore=0.0.0023-0.0.0042,0.0.4711
  will ignore all devices ranging from 0.0.0023 to 0.0.0042 and the device
  0.0.4711, if detected.
  As another example,
	cio_ignore=all,!0.0.4711,!0.0.fd00-0.0.fd02
  will ignore all devices but 0.0.4711, 0.0.fd00, 0.0.fd01, 0.0.fd02.

  By default, no devices are ignored.


/proc entries
-------------

* /proc/cio_ignore

  Lists the ranges of devices (by bus id) which are ignored by common I/O.

  You can un-ignore certain or all devices by piping to /proc/cio_ignore. 
  "free all" will un-ignore all ignored devices, 
  "free <device range>, <device range>, ..." will un-ignore the specified
  devices.

  For example, if devices 0.0.0023 to 0.0.0042 and 0.0.4711 are ignored,
  - echo free 0.0.0030-0.0.0032 > /proc/cio_ignore
    will un-ignore devices 0.0.0030 to 0.0.0032 and will leave devices 0.0.0023
    to 0.0.002f, 0.0.0033 to 0.0.0042 and 0.0.4711 ignored;
  - echo free 0.0.0041 > /proc/cio_ignore will furthermore un-ignore device
    0.0.0041;
  - echo free all > /proc/cio_ignore will un-ignore all remaining ignored 
    devices.

  When a device is un-ignored, device recognition and sensing is performed and 
  the device driver will be notified if possible, so the device will become
  available to the system. Note that un-ignoring is performed asynchronously.

  You can also add ranges of devices to be ignored by piping to 
  /proc/cio_ignore; "add <device range>, <device range>, ..." will ignore the
  specified devices.

  Note: While already known devices can be added to the list of devices to be
        ignored, there will be no effect on then. However, if such a device
	disappears and then reappears, it will then be ignored.

  For example,
	"echo add 0.0.a000-0.0.accc, 0.0.af00-0.0.afff > /proc/cio_ignore"
  will add 0.0.a000-0.0.accc and 0.0.af00-0.0.afff to the list of ignored
  devices.

  The devices can be specified either by bus id (0.0.abcd) or, for 2.4 backward
  compatibility, by the device number in hexadecimal (0xabcd or abcd).


* /proc/s390dbf/cio_*/ (S/390 debug feature)

  Some views generated by the debug feature to hold various debug outputs.

  - /proc/s390dbf/cio_crw/sprintf
    Messages from the processing of pending channel report words (machine check
    handling), which will also show when CONFIG_DEBUG_CRW is defined.

  - /proc/s390dbf/cio_msg/sprintf
    Various debug messages from the common I/O-layer; generally, messages which 
    will also show when CONFIG_DEBUG_IO is defined.

  - /proc/s390dbf/cio_trace/hex_ascii
    Logs the calling of functions in the common I/O-layer and, if applicable, 
    which subchannel they were called for, as well as dumps of some data
    structures (like irb in an error case).

  The level of logging can be changed to be more or less verbose by piping to 
  /proc/s390dbf/cio_*/level a number between 0 and 6; see the documentation on
  the S/390 debug feature (Documentation/s390/s390dbf.txt) for details.

* For some of the information present in the /proc filesystem in 2.4 (namely,
  /proc/subchannels and /proc/chpids), see driver-model.txt.
  Information formerly in /proc/irq_count is now in /proc/interrupts.
