| There is a TIMA kit that has the DEFPA driver, called AXPLAN02_061, and
it also requires manual configuration. The data on how to configure the
DEFPA on V6.1, V6.1-1H1, V6.1-1H2 follows:
DEFPA in V6.1, V6.1-1H1, V6.1-1H2 how to manually configure note
----------------------------------------------------------------
To configure the DEFPA using the SYSMAN utility:
(1) Use the IO SHOW BUS command to see what is installed on the PCI.
If your device is not recognized by OpenVMS, it will display
as "Unknown". You will need the TR# and the Node from the IO SHOW
BUS display.
For example:
$ MC SYSMAN IO SHOW BUS
%SYSMAN-I-OUTPUT, command execution on node SABL3
_Bus__________Node_TR#__Name____________Base CSR__________
KA0902 0 1 CPU FFFFFFFF81FBA000
KA0902 1 1 CPU FFFFFFFF81FBC000
KA0902 6 1 MEM FFFFFFFF81FBE000
KA0902 8 1 IO Port FFFFFFFF81FC0000
PCI 0 2 PCI/NI FFFFFFFF81FC2000
PCI 8 2 PCI/SCSI FFFFFFFF81FC4000
XBUS 0 4 System Board FFFFFFFF81FFE000
XBUS 1 4 Floppy FFFFFFFF81FFE000
XBUS 2 4 Parallel Port FFFFFFFF81FFE000
XBUS 3 4 Serial Port FFFFFFFF81FFE000
EISA 4 3 Lance NI Adapt FFFFFFFF8207E000
EISA 5 3 FDDI Adapter FFFFFFFF8209E000
EISA 8 3 VGA Adapter FFFFFFFF820FE000
+-> PCI 48 2 Unknown FFFFFFFF82262000
\ PCI 64 2 Unknown FFFFFFFF82266000
\
`- this is the DEFPA
(2) Issue the IO CONNECT command as follows. The CONNECT command
qualifiers are explained later.
SYSMAN> IO CONNECT FWA0 /ADAPTER=2 /CSR=0 /VECTOR=v /NODE=48 -
/DRIVER=SYS$FWDRIVER
/ADAPTER specifies the ADP that represents the bus to which your
device is connected. Use the TR# from the IO SHOW BUS display
that is associated with your device.
/CSR The /CSR qualifier is required by the driver loading
program. The value specified in the /CSR qualifier is copied to
IDB$Q_CSR by the driver loading program. On some buses, this
qualifier is used to tell the driver the physical address at which
the device is located. However, for PCI, the physical address
information is stored in the Configuration Space header of the
device, as explained earlier. Therefore, this qualifier is not
useful for PCI and should be specified as /CSR=0.
/NODE The /NODE qualifier identifies the PCI device to the PCI
bus support routines. The value specified in the /NODE qualifier
is copied to CRB$L_NODE by the driver loading program. Use the
Node value from the IO SHOW BUS display that is associated with
your device.
/VECTOR The /VECTOR qualifier is used by the driver loading
program to hook up your driver interrupt service routine to a
hardware interrupt vector. Unfortunately there is no vector
information in the IO SHOW BUS display. Even more unfortunately,
because of the wide latitude in system interrupt logic design for
PCI, there is no convenient rule you can use for figuring out the
interrupt vector associated with your device. You must run SDA on
a running system to find the interrupt vector for your device.
Here is a picture of how the ADP list and bus arrays are set up.
You must find the bus array entry for your PCI device. The bus
array entry contains the interrupt vector offset that should be
used as the value for the /VECTOR qualifier.
The ADP list on a platform with a PCI bus (note that there may be
intervening ADPs between the System ADP and the PCI ADP):
System ADP
+-----+
ioc$gl_adplist--->| | PCI ADP
| | adp$l_link +-----+
| |------------>| | adp$l_tr
+-----+ | |
| |-----+ adp$ps_bus_array
+-----+ |
|
V
+--------------+
|bus array |
|header |
+--------------+
| entry 0 |
| |
+--------------+
| entry 1 |
| |
+--------------+
| entry 2 |
| |
+--------------+
| etc |
| |
System global cell ioc$gl_adplist points to a list of ADPs. An
ADP is an OpenVMS/AXP data structure that represents an adapter.
The PCI interface is an example of an adapter. The System ADP is
always the first ADP in the list. Each ADP has a Bus Array,
pointed to by ADP cell adp$ps_bus_array. A Bus Array consists of
a header and a number of entries. There is an entry in the Bus
Array for each device connected to the bus.
The structure definition of the ADP is available in
[syslib]sys$lib_c.tlb, lib.r64, and lib.mlb. You can use the
Librarian utility to extract its definition if you want to see it.
Say
libr /alpha /extract=adpdef /out=adpdef.h sys$lib_c.tlb
or
libr /alpha /extract=$adpdef /out=adpdef.mar sys$lib_c.tlb
The structure definition of the Bus Array is also available in
[syslib]sys$lib_c.tlb. Say
libr /alpha /extract=busarraydef /out=busarraydef.h sys$lib_c.tlb
or
libr /alpha /extract=$busarraydef /out=busarraydef.mar sys$lib_c.tlb
You may find the .mar file easier to comprehend than the .h file.
Here is an example of how to traverse the ADP list to find the
interrupt vector offset for your PCI device. Note that you should
first go into SYSMAN and say IO SHOW BUS. Write down the TR
number associated with the display information of your device.
Then:
$ analyze/sys
SDA> read sys$loadable_images:sysdef
SDA> format @ioc$gl_adplist
This will display all of the fields of the System ADP. Find
the address in field ADP$L_LINK. Then format that address:
SDA> format addr_from_adp$l_link
This will display all of the fields of the next ADP in the
ADP list. Keep following the adp$l_link pointers until you
find the ADP with a TR number that matches the TR number you
found from SYSMAN IO SHOW BUS. The TR number is found in
field ADP$L_TR. When you find the matching TR number, you
have found the PCI ADP.
Note that the PCI ADP will usually be the second ADP in the
list.
Once you have found the PCI ADP, get the address from ADP
field ADP$PS_BUS_ARRAY.
Unfortunately, format does not work on the Bus Array
structure. Although an SDA whiz can probably make it work.
The key facts to remember about the bus array is that the
header is three quadwords and each entry is 6 quadwords. The
bus array header is shown below:
63 32 31 0
+-----------------------------------------+
| | parent ADP | 0x0
+-----------------------------------------+
| bus type |subty|type| size | 0x8
+-----------------------------------------+
| | node count | 0x10
+-----------------------------------------+
The Bus Array entries start after the bus array header. A
generic Bus Array entry is shown below:
63 32 31 0
+-----------------------------------------+
| hardware id | 0x0
+-----------------------------------------+
| CSR | 0x8
+-----------------------------------------+
| flags | node number | 0x10
+-----------------------------------------+
| ADP | CRB | 0x18
+-----------------------------------------+
| ctrlltr | autoconfig | 0x20
+-----------------------------------------+
| bus_specific_h | bus_specific_l | 0x28
+-----------------------------------------+
A PCI bus array entry looks as follows:
63 32 31 16 15 0
+-----------------------------------------+
| | deviceID | vendorID| 0x0
+-----------------------------------------+
| base VA of config space | 0x8
+-----------------------------------------+
| flags | node number | 0x10
+-----------------------------------------+
| ADP | CRB | 0x18
+-----------------------------------------+
| ctrlltr | autoconfig | 0x20
+-----------------------------------------+
| bus_specific_h | interrupt vector | 0x28
+-----------------------------------------+
In SDA, once you have found the PCI ADP and Bus Array, you
should examine the Bus Array until you find the DeviceID and
VendorID of your device. Then you have found the Bus Array
entry for your device. Note that the interrupt vector offset
is in the bus_specific_l field of the Bus Array entry for
your device. This is the value that you should use for the
/VECTOR qualifier in the SYSMAN IO CONNECT command.
Note that once you have done this once and found the
interrupt vector, the interrupt vector will not change from
boot to boot. If you move your device to a different slot,
though, you will have to find the new interrupt vector. If
you move your device to a different machine, you will have to
find the new interrupt vector.
For example, using on a Sable system with a few shortcuts:
$ ANA/SYS
SDA> read sys$loadable_images:sysdef
SDA> format @((@ioc$gl_adplist)+c)
809B8580 ADP$Q_CSR 81FFE000
809B8584 FFFFFFFF
809B8588 ADP$W_SIZE 0140
809B858A ADP$B_TYPE 01
809B858B ADP$B_NUMBER 00
809B858C ADP$L_LINK 809BCD80
809B8590 ADP$L_TR 00000002
809B8594 ADP$L_ADPTYPE 00000044
809B8598 ADP$PS_NODE_DATA 80829E18 IOC$LOAD_OPDRV_VEC+00040
809B859C ADP$L_VECTOR 809B8AC0
809B85A0 ADP$L_CRB 00000000
809B85A4 ADP$PS_MBPR 00000000
809B85A8 ADP$Q_QUEUE_TIME 05F5E100
809B85AC 00000000
809B85B0 ADP$Q_WAIT_TIME 05F5E100
809B85B4 00000000
809B85B8 ADP$PS_PARENT_ADP 809B8180
809B85BC ADP$PS_PEER_ADP 00000000
809B85C0 ADP$PS_CHILD_ADP 809BCD80
809B85C4 ADP$L_PROBE_CMD 00000002
809B85C8 ADP$PS_BUS_ARRAY 809B8780
...
Then search for the bus array entry with the matching device ID
of 000F1011:
SDA> search/step=long/len=long 809B8780;4000 000F1011
Searching from 809B8780 to 809BC780 in LONGWORD steps for 000F1011...
Match at 809B88B8
SDA> e 809B88B8;30
FFFFFFFF 82262000 00000000 000F1011 ......... &..... 809B88B8
00000000 00000000 00000000 00000030 0............... 809B88C8
809BCEC0 00000000 00000000 00000000 ............��.. 809B88D8
^
|
Vector is ---+ which is zero.
For this example, then, the connect command is:
SYSMAN> IO CONNECT FWA0 /ADAPTER=2 /CSR=0 /VECTOR=0 /NODE=48 -
/DRIVER=SYS$FWDRIVER
|
| Good day,
Has any one out there actually installed a DEFPA in a VMS 6.1
system. How did it go ? Does the procedure in .3 work ?
The information I've found so far indicates that you need
AXPLAN03_061, AXPBOOT04_061, console CD .8 and ECU kit 1.8
(VMS ECU 1.6). Also the console update requires changing some systems
files that are also located on the CD.
Are there any other incidentals that I should be aware of ?
Brian V
|
| Brian:
I just installed one of these guys today, and after following the
procedure on .3 the SYSMAN command still didn't recognize the PCI
adapter. However, the FWA0 device came up and I was able to go to NCP
and set my line-circuit.
However, the circuit is going up and down like a yo-yo, and at this
point I don't know if this is a hardware problem with the board, a soft
ware problem, or a DECconcentrator problem. I'll post more results as I
find them.
Carlos
|