|
HP OpenVMS systems documentation |
Previous | Contents | Index |
This chapter describes how to modify customer-written device drivers to support 64-bit addresses.
For more information about the data structures and routines described
in this chapter, see Appendix A and Appendix B.
4.1 Recommendations for Modifying Device Drivers
Before you can modify a device driver to support 64-bit addresses, your driver must recompile and relink without errors on OpenVMS Alpha Version 7.0. See Chapter 2. If you are using OpenVMS-supplied FDT routines, supporting 64-bit addresses can be automatic or easily obtained. Device drivers written in C are usually easier to modify than drivers written in MACRO-32. Drives using direct I/O are usually easier to modify than those using buffered I/O.
When your device driver runs successfully as a 32-bit addressable driver on OpenVMS Alpha Version 7.0, you can modify it to support 64-bit addresses as follows:
The remaining sections in this chapter provide more information about
these recommendations.
4.2 Mixed Pointer Environment in C
OpenVMS Alpha 64-bit addressing support for mixed pointers includes the following features:
To support 64-bit addresses in device drivers, you must use the new version (V5.2) of the DEC C compiler as follows:
$ CC/STANDARD=RELAXED_ANSI89 - /INSTRUCTION=NOFLOATING_POINT - /EXTERN=STRICT - /POINTER_SIZE=32 - LRDRIVER+SYS$LIBRARY:SYS$LIB_C.TLB/LIBRARY |
#include <far_pointers.h> VOID_PQ user_va; /* 64-bit "void *" */ ... #include <ptedef.h> PTE * svapte; /* 32-bit pointer to a PTE */ PTE_PQ va_pte; /* Quadword pointer to a PTE */ PTE_PPQ vapte_p; /* Quadword pointer to a * quadword pointer to a PTE */ |
p0_va = p2_va; ^ %CC-W-MAYLOSEDATA, In this statement, "p2_va" has a larger data size than "short pointer to char" |
The $QIO and $QIOW system services accept the following arguments:
$QIO[W] efn,chan,func,iosb,astadr,astprm,p1,p2,p3,p4,p5,p6 |
These services have a 64-bit friendly interface (as described in OpenVMS Alpha Guide to 64-Bit Addressing and VLM Features)1, which allows these services to support 64-bit addresses.
Table 4-1 summarizes the changes to the data types of the $QIO and $QIOW system service arguments to accommodate 64-bit addresses.
Argument | Prior Type | New Type | Description |
---|---|---|---|
efn | Unsigned longword | - | Event flag number. Unchanged. |
chan | Unsigned word | - | Channel number. Unchanged. |
func | Unsigned longword | - | I/O function code. Unchanged. |
iosb | 32-bit pointer 1 | 64-bit pointer | Pointer to a quadword I/O status block (IOSB). The IOSB format is unchanged. |
astadr | 32-bit pointer 1 | 64-bit pointer | Procedure value of the caller's AST routine. On Alpha systems, the procedure value is a pointer to the procedure descriptor. |
astprm | Unsigned longword 2 | Quadword | Argument value for the AST routine. |
P1 | Longword 2 | Quadword | Device-dependent argument. Often P1 is a buffer address. |
P2 | Longword 2 | Quadword | Device-dependent argument. Only the low-order 32-bits will be used by system-supplied FDT routines that use P2 as the buffer size. |
P3 | Longword 2 | Quadword | Device-dependent argument. |
P4 | Longword 2 | Quadword | Device-dependent argument. |
P5 | Longword 2 | Quadword | Device-dependent argument. |
P6 | Longword 2 | Quadword | Device-dependent argument. Sometimes P6 is used to contain the address of a diagnostic buffer. |
Usually the $QIO P1 argument specifies a buffer address. All the system-supplied upper-level FDT routines that support the read and write functions use this convention. The P1 argument determines whether the caller of the $QIO service requires 64-bit support. If the $QIO system service rejects a 64-bit I/O request, the following fatal system error status is returned:
SS$_NOT64DEVFUNC 64-bit address not supported by device for this function |
This fatal condition value is returned under the following circumstances:
For more information about the $QIO, $QIOW, and $SYNCH system services, see the HP OpenVMS System Services Reference Manual: GETUTC--Z.
1 This manual has been archived but is available on the OpenVMS Documentation CD-ROM. This information has also been included in the OpenVMS Programming Concepts Manual, Volume I. |
4.4 Declaring Support for 64-Bit Addresses in Drivers
Device drivers declare that they can support a 64-bit address by individual function. The details vary depending on the language used to code the initialization of the driver's Function Decision Table.
Previous | Next | Contents | Index |