| The Linux Digiboard Driver |
| -------------------------- |
| |
| The Digiboard Driver for Linux supports the following boards: |
| |
| DigiBoard PC/Xi, PC/Xe, PC/Xeve(which is the newer, smaller Xe with |
| a 8K window which is also known as PC/Xe(8K) and has no memory/irq |
| switches) You can use up to 4 cards with this driver and it should work |
| on other architectures than intel also. |
| |
| A version of this driver has been taken by Digiboard to make a driver |
| software package which supports also PC/Xem cards and newer PCI cards |
| but it doesn't support the old PC/Xi cards and it isn't yet ported to |
| linux-2.1.x and may not be usable on other architectures than intel now. |
| It is available from ftp.digi.com/ftp.digiboard.com. You can write me if |
| you need an patch for this driver. |
| |
| Bernhard Kaindl (bkaindl@netway.at) 6. April 1997. |
| |
| Configuring the Driver |
| ---------------------- |
| |
| The driver can be built direct into the kernel or as a module. |
| The pcxx driver can be configured using the command line feature while |
| loading the kernel with LILO or LOADLIN or, if built as a module, |
| with arguments to insmod and modprobe or with parameters in |
| /etc/modules.conf for modprobe and kerneld. |
| |
| After configuring the driver you need to create the device special files |
| as described in "Device file creation:" below and set the appropriate |
| permissions for your application. |
| |
| As Module |
| --------- |
| |
| modprobe pcxx io=<io> \ |
| membase=<membase> \ |
| memsize=<memsize> \ |
| numports=<numports> \ |
| altpin=<altpin> \ |
| verbose=<verbose> |
| |
| or, if several cards are installed |
| |
| modprobe pcxx io=<io-1>,<io-2>,... \ |
| membase=<membase-1>,<membase-2>,... \ |
| memsize=<memsize-1>,<memsize-2>,... \ |
| numports=<numports-1>,<numports-2>,... \ |
| altpin=<altpin-1>,<altpin-2>,... \ |
| verbose=<verbose> |
| |
| where <io-N> is the io address of the Nth card and <membase-N> is the |
| memory base address of the Nth card, etc. |
| |
| The parameters can be specified in any order. For example, the numports |
| parameter can precede the membase parameter, or vice versa. If several |
| cards are installed the ordering within the comma separated parameter |
| lists must be consistent, of course. |
| |
| io - I/O port address of that card. |
| membase - Memory start address of that card. |
| memsize - Memory size of that card, in kilobytes. If given, this value |
| is compared against the card to verify configuration and |
| hinder the driver from using a misconfigured card. If the parameter |
| does not match the board it is disabled with a memory size error. |
| numports - Number of ports on this card. This is the number of devices to |
| assign to this card or reserve if disabled. |
| altpin - 1: swap DCD and DSR for 8-pin RJ-45 with modems. |
| 0: don't swap DCD and DSR. |
| other values count as 1. |
| verbose - 1: give nice verbose output during initialisation of the driver, |
| possibly helpful during board configuration. |
| 0: normal terse output. |
| |
| Only the parameters which differ from the defaults need to be specified. |
| If the io= parameter is not given, the default config is used. This is |
| |
| io=0x200 membase=0xD0000 numports=16 altpin=0 |
| |
| Only applicable parameters need be specified. For example to configure |
| 2 boards, first one at 0x200 with 8 ports, rest defaults, second one at |
| 0x120, memory at 0xD80000, altpin enabled, rest defaults, you can do this |
| by using these parameters: |
| |
| modprobe pcxx io=0x200,0x120 numports=8,8 membase=,0xD80000 altpin=,1 |
| |
| To disable a temporary unusable board without changing the mapping of the |
| devices following that board, you can empty the io-value for that board: |
| |
| modprobe pcxx io=,0x120 numports=8,8 membase=,0xD80000 altpin=,1 |
| |
| The remaining board still uses ttyD8-ttyD15 and cud8-cud15. |
| |
| Example line for /etc/modules.conf for use with kerneld and as default |
| parameters for modprobe: |
| |
| options pcxx io=0x200 numports=8 |
| |
| For kerneld to work you will likely need to add these two lines to your |
| /etc/modules.conf: |
| |
| alias char-major-22 pcxx |
| alias char-major-23 pcxx |
| |
| |
| Boot-time configuration when linked into the kernel |
| --------------------------------------------------- |
| |
| Per board to be configured, pass a digi= command-line parameter to the |
| kernel using lilo or loadlin. It consists of a string of comma separated |
| identifiers or integers. The 6 values in order are: |
| |
| Card status: Enable - use that board |
| Disable - don't actually use that board. |
| |
| Card type: PC/Xi - the old ones with 64/128/256/512K RAM. |
| PC/Xe - PC/Xe(old ones with 64k mem range). |
| PC/Xeve - PC/Xe(new ones with 8k mem range). |
| |
| Note: This is for documentation only, the type is detected from the board. |
| |
| Altpin setting: Enable - swap DCD and DSR for 8-pin RJ-45 with modems. |
| Disable - don't swap DCD and DSR. |
| |
| Number of ports: 1 ... 16 - Number of ports on this card. This is the |
| number of devices to assign to this card. |
| |
| I/O port address: eg. 200 - I/O Port address where the card is configured. |
| |
| Memory base addr: eg. 80000 - Memory address where the board's memory starts. |
| |
| This is an example for a line which you can insert into you lilo.conf: |
| |
| append="digi=Enable,PC/Xi,Disable,4,120,D0000" |
| |
| there is an alternate form, in which you must use decimal values only: |
| |
| append="digi=1,0,0,16,512,851968" |
| |
| If you don't give a digi= command line, the compiled-in defaults of |
| board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used. |
| |
| If you have the resources (io&mem) free for use, configure your board to |
| these settings and you should be set up fine even if yours has not got 16 |
| ports. |
| |
| |
| Sources of Information |
| ---------------------- |
| |
| Please contact digi directly digilnux@dgii.com. Forward any information of |
| general interest to me so that I can include it on the webpage. |
| |
| Web page: http://lameter.com/digi |
| |
| Christoph Lameter (christoph@lameter.com) Aug 14, 2000. |
| |
| Device file creation |
| -------------------- |
| |
| Currently the Linux MAKEDEV command does not support generating the Digiboard |
| Devices. |
| |
| The /dev/cud devices behave like the /dev/cua devices |
| and the ttyD devices are like the /dev/ttyS devices. |
| |
| Use the following script to generate the devices: |
| |
| ------------------ mkdigidev begin |
| #!/bin/sh |
| # |
| # Script to create Digiboard Devices |
| # Christoph Lameter, April 16, 1996 |
| # |
| # Usage: |
| # mkdigidev [<number of devices>] |
| # |
| |
| DIGI_MAJOR=23 |
| DIGICU_MAJOR=22 |
| |
| BOARDS=$1 |
| |
| if [ "$BOARDS" = "" ]; then |
| BOARDS=1 |
| fi |
| |
| boardnum=0 |
| while [ $boardnum -lt $BOARDS ]; |
| do |
| for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; |
| do |
| name=`expr $boardnum \* 16 + $c` |
| mknod /dev/cud$name c $DIGICU_MAJOR $name |
| mknod /dev/ttyD$name c $DIGI_MAJOR $name |
| done |
| boardnum=`expr $boardnum + 1` |
| done |
| ------------------ mkdigidev end |
| |
| or apply the following patch to /dev/MAKEDEV and do a |
| sh /dev/MAKEDEV digi |
| |
| ----- MAKEDEV Patch |
| --- /dev/MAKEDEV Sun Aug 13 15:48:23 1995 |
| +++ MAKEDEV Tue Apr 16 17:53:27 1996 |
| @@ -120,7 +120,7 @@ |
| while [ $# -ne 0 ] |
| do |
| case "$1" in |
| - mem|tty|ttyp|cua|cub) ;; |
| + mem|tty|ttyp|cua|cub|cud) ;; |
| hd) echo hda hdb hdc hdd ;; |
| xd) echo xda xdb ;; |
| fd) echo fd0 fd1 ;; |
| @@ -140,6 +140,7 @@ |
| dcf) echo dcf ;; |
| pcmcia) ;; # taken care of by its own driver |
| ttyC) echo cyclades ;; |
| + ttyD) echo digi ;; |
| *) echo "$0: don't know what \"$1\" is" >&2 ;; |
| esac |
| shift |
| @@ -208,6 +209,15 @@ |
| do |
| makedev ttyC$i c $major1 `expr 32 + $i` $tty |
| makedev cub$i c $major2 `expr 32 + $i` $dialout |
| + done |
| + ;; |
| + digi) |
| + major1=`Major ttyD` || continue |
| + major2=`Major cud` || continue |
| + for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
| + do |
| + makedev ttyD$i c $major1 `expr 32 + $i` $tty |
| + makedev cud$i c $major2 `expr 32 + $i` $dialout |
| done |
| ;; |
| par[0-2]) |
| ----- End Makedev patch |
| |
| ----------------------------------------------------------------------------- |
| |
| Changes v1.5.5: |
| |
| The ability to use the kernel's command line to pass in the configuration for |
| boards. Using LILO's APPEND command, a string of comma separated identifiers |
| or integers can be used. The 6 values in order are: |
| |
| Enable/Disable this card, |
| Type of card: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3) |
| Enable/Disable alternate pin arrangement, |
| Number of ports on this card, |
| I/O Port where card is configured (in HEX if using string identifiers), |
| Base of memory window (in HEX if using string identifiers), |
| |
| Samples: |
| append="digi=E,PC/Xi,D,16,200,D0000" |
| append="digi=1,0,0,16,512,(whatever D0000 is in base 10 :) |
| |
| Drivers' minor device numbers are conserved. This means that instead of |
| each board getting a block of 16 minors pre-assigned, it gets however |
| many it should, with the next card following directly behind it. A |
| system with 4 2-port PC/Xi boards will use minor numbers 0-7. |
| This conserves some memory, and removes a few hard coded constants. |
| |
| NOTE!! NOTE!! NOTE!! |
| The definition of PC/Xem as a valid board type is the BEGINNING of support |
| for this device. The driver does not currently recognise the board, nor |
| does it want to initialize it. At least not the EISA version. |
| |
| Mike McLagan <mike.mclagan@linux.org> 5, April 1996. |