IBM 3270 Display System support

This file describes the driver that supports local channel attachment
of IBM 3270 devices.  It consists of three sections:
	* Introduction
	* Installation
	* Operation


INTRODUCTION.

This paper describes installing and operating 3270 devices under
Linux/390.  A 3270 device is a block-mode rows-and-columns terminal of
which I'm sure hundreds of millions were sold by IBM and clonemakers
twenty and thirty years ago.

You may have 3270s in-house and not know it.  If you're using the
VM-ESA operating system, define a 3270 to your virtual machine by using
the command "DEF GRAF <hex-address>"  This paper presumes you will be
defining four 3270s with the CP/CMS commands

	DEF GRAF 620
	DEF GRAF 621
	DEF GRAF 622
	DEF GRAF 623

Your network connection from VM-ESA allows you to use x3270, tn3270, or
another 3270 emulator, started from an xterm window on your PC or
workstation.  With the DEF GRAF command, an application such as xterm,
and this Linux-390 3270 driver, you have another way of talking to your
Linux box.

This paper covers installation of the driver and operation of a
dialed-in x3270.


INSTALLATION.

You install the driver by installing a patch, doing a kernel build, and
running the configuration script (config3270.sh, in this directory).

WARNING:  If you are using 3270 console support, you must rerun the
configuration script every time you change the console's address (perhaps
by using the condev= parameter in silo's /boot/parmfile).  More precisely,
you should rerun the configuration script every time your set of 3270s,
including the console 3270, changes subchannel identifier relative to
one another.  ReIPL as soon as possible after running the configuration
script and the resulting /tmp/mkdev3270.

If you have chosen to make tub3270 a module, you add a line to a
configuration file under /etc/modprobe.d/.  If you are working on a VM
virtual machine, you can use DEF GRAF to define virtual 3270 devices.

You may generate both 3270 and 3215 console support, or one or the
other, or neither.  If you generate both, the console type under VM is
not changed.  Use #CP Q TERM to see what the current console type is.
Use #CP TERM CONMODE 3270 to change it to 3270.  If you generate only
3270 console support, then the driver automatically converts your console
at boot time to a 3270 if it is a 3215.

In brief, these are the steps:
	1. Install the tub3270 patch
	2. (If a module) add a line to a file in /etc/modprobe.d/*.conf
	3. (If VM) define devices with DEF GRAF
	4. Reboot
	5. Configure

To test that everything works, assuming VM and x3270,
	1. Bring up an x3270 window.
	2. Use the DIAL command in that window.
	3. You should immediately see a Linux login screen.

Here are the installation steps in detail:

	1.  The 3270 driver is a part of the official Linux kernel
	source.  Build a tree with the kernel source and any necessary
	patches.  Then do
		make oldconfig
		(If you wish to disable 3215 console support, edit
		.config; change CONFIG_TN3215's value to "n";
		and rerun "make oldconfig".)
		make image
		make modules
		make modules_install

	2. (Perform this step only if you have configured tub3270 as a
	module.)  Add a line to a file /etc/modprobe.d/*.conf to automatically
	load the driver when it's needed.  With this line added, you will see
	login prompts appear on your 3270s as soon as boot is complete (or
	with emulated 3270s, as soon as you dial into your vm guest using the
	command "DIAL <vmguestname>").  Since the line-mode major number is
	227, the line to add should be:
		alias char-major-227 tub3270

	3. Define graphic devices to your vm guest machine, if you
	haven't already.  Define them before you reboot (reipl):
		DEFINE GRAF 620
		DEFINE GRAF 621
		DEFINE GRAF 622
		DEFINE GRAF 623

	4. Reboot.  The reboot process scans hardware devices, including
	3270s, and this enables the tub3270 driver once loaded to respond
	correctly to the configuration requests of the next step.  If
	you have chosen 3270 console support, your console now behaves
	as a 3270, not a 3215.

	5. Run the 3270 configuration script config3270.  It is
	distributed in this same directory, Documentation/s390, as
	config3270.sh.	Inspect the output script it produces,
	/tmp/mkdev3270, and then run that script.  This will create the
	necessary character special device files and make the necessary
	changes to /etc/inittab.

	Then notify /sbin/init that /etc/inittab has changed, by issuing
	the telinit command with the q operand:
		cd Documentation/s390
		sh config3270.sh
		sh /tmp/mkdev3270
		telinit q

	This should be sufficient for your first time.	If your 3270
	configuration has changed and you're reusing config3270, you
	should follow these steps:
		Change 3270 configuration
		Reboot
		Run config3270 and /tmp/mkdev3270
		Reboot

Here are the testing steps in detail:

	1. Bring up an x3270 window, or use an actual hardware 3278 or
	3279, or use the 3270 emulator of your choice.  You would be
	running the emulator on your PC or workstation.  You would use
	the command, for example,
		x3270 vm-esa-domain-name &
	if you wanted a 3278 Model 4 with 43 rows of 80 columns, the
	default model number.  The driver does not take advantage of
	extended attributes.

	The screen you should now see contains a VM logo with input
	lines near the bottom.  Use TAB to move to the bottom line,
	probably labeled "COMMAND  ===>".

	2. Use the DIAL command instead of the LOGIN command to connect
	to one of the virtual 3270s you defined with the DEF GRAF
	commands:
		dial my-vm-guest-name

	3. You should immediately see a login prompt from your
	Linux-390 operating system.  If that does not happen, you would
	see instead the line "DIALED TO my-vm-guest-name   0620".

	To troubleshoot:  do these things.

	A. Is the driver loaded?  Use the lsmod command (no operands)
	to find out.  Probably it isn't.  Try loading it manually, with
	the command "insmod tub3270".  Does that command give error
	messages?  Ha!  There's your problem.

	B. Is the /etc/inittab file modified as in installation step 3
	above?  Use the grep command to find out; for instance, issue
	"grep 3270 /etc/inittab".  Nothing found?  There's your
	problem!

	C. Are the device special files created, as in installation
	step 2 above?  Use the ls -l command to find out; for instance,
	issue "ls -l /dev/3270/tty620".  The output should start with the
	letter "c" meaning character device and should contain "227, 1"
	just to the left of the device name.  No such file?  no "c"?
	Wrong major number?  Wrong minor number?  There's your
	problem!

	D. Do you get the message
		 "HCPDIA047E my-vm-guest-name 0620 does not exist"?
	If so, you must issue the command "DEF GRAF 620" from your VM
	3215 console and then reboot the system.



OPERATION.

The driver defines three areas on the 3270 screen:  the log area, the
input area, and the status area.

The log area takes up all but the bottom two lines of the screen.  The
driver writes terminal output to it, starting at the top line and going
down.  When it fills, the status area changes from "Linux Running" to
"Linux More...".  After a scrolling timeout of (default) 5 sec, the
screen clears and more output is written, from the top down.

The input area extends from the beginning of the second-to-last screen
line to the start of the status area.  You type commands in this area
and hit ENTER to execute them.

The status area initializes to "Linux Running" to give you a warm
fuzzy feeling.  When the log area fills up and output awaits, it
changes to "Linux More...".  At this time you can do several things or
nothing.  If you do nothing, the screen will clear in (default) 5 sec
and more output will appear.  You may hit ENTER with nothing typed in
the input area to toggle between "Linux More..." and "Linux Holding",
which indicates no scrolling will occur.  (If you hit ENTER with "Linux
Running" and nothing typed, the application receives a newline.)

You may change the scrolling timeout value.  For example, the following
command line:
	echo scrolltime=60 > /proc/tty/driver/tty3270
changes the scrolling timeout value to 60 sec.  Set scrolltime to 0 if
you wish to prevent scrolling entirely.

Other things you may do when the log area fills up are:  hit PA2 to
clear the log area and write more output to it, or hit CLEAR to clear
the log area and the input area and write more output to the log area.

Some of the Program Function (PF) and Program Attention (PA) keys are
preassigned special functions.  The ones that are not yield an alarm
when pressed.

PA1 causes a SIGINT to the currently running application.  You may do
the same thing from the input area, by typing "^C" and hitting ENTER.

PA2 causes the log area to be cleared.  If output awaits, it is then
written to the log area.

PF3 causes an EOF to be received as input by the application.  You may
cause an EOF also by typing "^D" and hitting ENTER.

No PF key is preassigned to cause a job suspension, but you may cause a
job suspension by typing "^Z" and hitting ENTER.  You may wish to
assign this function to a PF key.  To make PF7 cause job suspension,
execute the command:
	echo pf7=^z > /proc/tty/driver/tty3270

If the input you type does not end with the two characters "^n", the
driver appends a newline character and sends it to the tty driver;
otherwise the driver strips the "^n" and does not append a newline.
The IBM 3215 driver behaves similarly.

Pf10 causes the most recent command to be retrieved from the tube's
command stack (default depth 20) and displayed in the input area.  You
may hit PF10 again for the next-most-recent command, and so on.  A
command is entered into the stack only when the input area is not made
invisible (such as for password entry) and it is not identical to the
current top entry.  PF10 rotates backward through the command stack;
PF11 rotates forward.  You may assign the backward function to any PF
key (or PA key, for that matter), say, PA3, with the command:
	echo -e pa3=\\033k > /proc/tty/driver/tty3270
This assigns the string ESC-k to PA3.  Similarly, the string ESC-j
performs the forward function.  (Rationale:  In bash with vi-mode line
editing, ESC-k and ESC-j retrieve backward and forward history.
Suggestions welcome.)

Is a stack size of twenty commands not to your liking?  Change it on
the fly.  To change to saving the last 100 commands, execute the
command:
	echo recallsize=100 > /proc/tty/driver/tty3270

Have a command you issue frequently?  Assign it to a PF or PA key!  Use
the command
	echo pf24="mkdir foobar; cd foobar" > /proc/tty/driver/tty3270 
to execute the commands mkdir foobar and cd foobar immediately when you
hit PF24.  Want to see the command line first, before you execute it?
Use the -n option of the echo command:
	echo -n pf24="mkdir foo; cd foo" > /proc/tty/driver/tty3270



Happy testing!  I welcome any and all comments about this document, the
driver, etc etc.

Dick Hitt <rbh00@utsglobal.com>
