Document revision date: 30 March 2001 | |
![]() |
![]() ![]() ![]() ![]() |
![]() |
Previous | Contents | Index |
Table 11-2 summarizes the OpenVMS Alpha system services that support 64-bit addresses.
Although RMS system services provide some 64-bit addressing capabilities, they are not listed in this table because they are not full 64-bit system services. See Section 11.2 for more details.
Service | Arguments |
---|---|
Alignment System Services | |
$GET_ALIGN_FAULT_DATA | buffer_64, buffer_size, return_size_64 |
$GET_SYS_ALIGN_FAULT_DATA | buffer_64, buffer_size, return_size_64 |
$INIT_SYS_ALIGN_FAULT_REPORT | match_table_64, buffer_size, flags |
AST System Service | |
$DCLAST | astadr_64, astprm_64, acmode |
Condition Handling System Services | |
$FAO | ctrstr_64, outlen_64, outbuf_64, p1_64...pn_64 |
$FAOL | ctrstr_64, outlen_64, outbuf_64, long_prmlst_64 |
$FAOL_64 | ctrstr_64, outlen_64, outbuf_64, quad_prmlst_64 |
$GETMSG | msgid, msglen_64, bufadr_64, flags, outadr_64 |
$PUTMSG | msgvec_64, actrtn_64, facnam_64, actprm_64 |
$SIGNAL_ARRAY_64 | mcharg, sigarg_64 |
CPU Scheduling System Services | |
$CPU_CAPABILITIES | cpu_id, select_mask, modify_mask, prev_mask, flags |
$FREE_USER_CAPABILITY | cap_num, prev_mask, flags |
$GET_USER_CAPABILITY | cap_num, select_num, select_mask, prev_mask, flags |
$PROCESS_AFFINITY | pidadr, prcnam, select_mask, modify_mask, prev_mask, flags |
$PROCESS_CAPABILITIES | pidadr, prcnam, select_mask, modify_mask, prev_mask, flags |
$SET_IMPLICIT_AFFINITY | pidadr, prcnam, state, cpu_id, prev_mask |
Event Flag System Service | |
$READEF | efn, state_64 |
Fast-I/O System Services | |
$IO_CLEANUP | fandle |
$IO_PERFORM | fandle, chan, iosadr, bufadr, buflen, porint |
$IO_PERFORMW | fandle, chan, iosadr, bufadr, buflen, porint |
$IO_SETUP | func, bufobj, iosobj, astadr, flags, return_fandle |
I/O System Services | |
$QIO(W) 1 | efn, chan, func, iosb_64, astadr_64, astprm_64, p1_64, p2_64, p3_64, p4_64, p5_64, p6_64 |
$SYNCH | efn, iosb_64 |
Locking System Services | |
$DEQ | lkid, vablk_64, acmode, flags |
$ENQ(W) | efn, lkmode, lksb_64, flags, resnam_64, parid, astadr_64, astprm_64, blkast_64, acmode |
Logical Name System Services | |
$CRELNM | attr, tabnam, lognam, acmode, itmlst |
$CRELNT | ttr, resnam, reslen, quota, promsk, tabnam, partab, acmode |
$DELLNM | tabnam, lognam, acmode |
$TRNLNM | attr, tabnam, lognam, acmode, itmlst |
Memory Management System Services | |
$ADJWSL | pagcnt, wsetlm_64 |
$CREATE_BUFOBJ_64 | start_va_64, length_64, acmode, flags, return_va_64, return_length_64, return_buffer_handle_64 |
$CREATE_GDZRO | gsdnam_64, ident_64, prot, length_64, acmode, flags, ... |
$CRMPSC_GDZRO_64 | gsdnam_64, ident_64, prot, length_64, region_id_64, section_offset_64, acmode, flags, return_va_64, return_length_64, ... |
$CREATE_GFILE | gsdnam_64, ident_64, file_offset_64, length_64, chan, acmode, flags, return_length_64, ... |
$CREATE_GPFILE | gsdnam_64, ident_64, prot, length_64, acmode, flags |
$CREATE_GPFN | gsdnam_64, ident_64, prot, start_pfn, page_count, acmode, flags |
$CREATE_REGION_64 | length_64, region_prot, flags, return_region_id_64, return_va_64, return_length_64, ... |
$CRETVA_64 | region_id_64, start_va_64, length_64, acmode, flags, return_va_64, return_length_64 |
$CRMPSC_FILE_64 | region_id_64, file_offset_64, length_64, chan, acmode, flags, return_va_64, return_length_64, ... |
$CRMPSC_GFILE_64 | gsdnam_64, ident_64, file_offset_64, length_64, chan, region_id_64, section_offset, acmode, flags, return_va_64, return_length_64, ... |
$CRMPSC_GPFILE_64 | gsdnam_64, ident_64, prot, length_64, region_id_64, section_offset_64, acmode, flags, return_va_64, return_length_64, ... |
$CRMPSC_GPFN_64 | gsdnam_64, ident_64, prot, start_pfn, page_count, region_id_64, relative_page, acmode, flags, return_va_64, return_length_64, ... |
$CRMPSC_PFN_64 | region_id_64, start_pfn, page_count, acmode, flags, return_va_64, return_length_64, ... |
$DELETE_BUFOBJ | buffer_handle_64 |
$DELETE_REGION_64 | region_id_64, acmode, return_va_64, return_length_64 |
$DELTVA_64 | region_id_64, start_va_64, length_64, acmode, return_va_64, return_length_64 |
$DGBLSC | flags, gsdnam_64, ident_64 |
$EXPREG_64 | region_id_64, length_64, acmode, flags, return_va_64, return_length_64 |
$GET_REGION_INFO | function_code, region_id_64, start_va_64, ,buffer_length, buffer_address_64, return_length_64 |
$LCKPAG_64 | start_va_64, length_64, acmode, return_va_64, return_length_64 |
$LKWSET_64 | start_va_64, length_64, acmode, return_va_64, return_length_64 |
$MGBLSC_64 | gsdnam_64, ident_64, region_id_64, section_offset_64, length_64, acmode, flags, return_va_64, return_length_64, ... |
$MGBLSC_GPFN_64 | gsdnam_64, ident_64, region_id_64, relative_page, page_count, acmode, flags, return_va_64, return_length_64, ... |
$PURGE_WS | start_va_64, length_64 |
$SETPRT_64 | start_va_64, length_64, acmode, prot, return_va_64, return_length_64, return_prot_64 |
$ULKPAG_64 | start_va_64, length_64, acmode, return_va_64, return_length_64 |
$ULWSET_64 | start_va_64, length_64, acmode, return_va_64, return_length_64 |
$UPDSEC_64(W) | start_va_64, length_64, acmode, updflg, efn, iosa_64, return_va_64, return_length_64, ... |
Process Control System Services | |
$GETJPI(W) | efn, pidadr, prcnam, itmlst, iosb, astadr, astprm |
$PROCESS_SCAN | pidctx, itmlst |
Time System Services | |
$ASCTIM | timlen, timbuf, timadr, cvtflg |
$ASCUTC | timlen, timbuf, utcadr, cvtflg |
$BINTIM | timbuf, timadr |
$BINUTC | timbuf, utcadr |
$CANTIM | reqidt_64, acmode |
$GETTIM | timadr_64 |
$GETUTC | utcadr |
$NUMTIM | timbuf, timadr |
$NUMUTC | timbuf, utcadr |
$SETIME | timadr |
$SETIMR | efn, daytim_64, astadr_64, reqidt_64, flags |
$TIMCON | timadr, utcadr, cvtflg |
Other System Services | |
$CMEXEC_64 | routine_64, quad_arglst_64 |
$CMKRNL_64 | routine_64, quad_arglst_64 |
$GETSYI(W) | efn, csidadr, nodename, itmlst, iosb, astadr, astprm |
$IDTOASC | id, namlen, nambuf, resid, attrib, contxt |
OpenVMS system services not listed in Table 11-2 and all
user-written system services that are not explicitly enhanced to accept
64-bit addresses will receive sign-extension checking. Any argument
passed to these services that is not properly sign-extended will cause
the error status SS$_ARG_GTR_32_BITS to be returned.
11.1.6 Language Support for 64-Bit System Services
C function prototypes for system services are available in SYS$LIBRARY:SYS$STARLET_C.TLB (or STARLET).
No 64-bit MACRO-32 macros are available for system services. The
MACRO-32 caller must use the AMACRO built-in EVAX_CALLG_64 or the
$CALL64 macro. For more information about MACRO-32 programming support
for 64-bit addressing, see OpenVMS MACRO-32 Porting and User's Guide.
11.1.7 NEW STARLET Definitions for C
As of OpenVMS Alpha Version 7.0, SYS$LIBRARY:SYS$STARLET_C.TLB (or STARLET) provides C function prototypes for system services, as well as new and enhanced data structure definitions. The new definitions are more consistent with the OpenVMS C language coding conventions and definitions (typedefs) used in SYS$LIBRARY:SYS$LIB_C.TLB.
To maintain source compatibility for existing users of STARLET.H, the old style function declarations and definitions are still provided by default. To take advantage of the new system service function prototypes and type definitions, you must explicitly enable them.
You can either define the __NEW_STARLET symbol with a Compaq C command line qualifier or include the definition directly in your source program. For example:
/DEFINE=(__NEW_STARLET=1) |
#define __NEW_STARLET 1 #include <starlet.h> #include <vadef.h> |
To see the currently available system service function prototypes in STARLET.H, you can use the Librarian Utility, as shown in the following example:
$ LIBRARY/OUTPUT=STARLET.H SYS$LIBRARY:SYS$STARLET_C.TLB/EXTRACT=STARLET |
The following example shows a new system service function prototype as it is defined in STARLET.H:
#pragma __required_pointer_size __long int sys$expreg_64( struct _generic_64 *region_id_64, unsigned __int64 length_64, unsigned int acmode, unsigned int flags, void *(*(return_va_64)), unsigned __int64 *return_length_64); #pragma __required_pointer_size __short |
For more information about Compaq C pointer size pragmas, see the DEC C User's Guide for OpenVMS Systems.
The following source code example shows the sys$expreg_64 function prototype referenced in a program.
#define __NEW_STARLET 1 /* Enable "New Starlet" features */ #include <starlet.h> /* Declare prototypes for system services */ #include <gen64def.h> /* Define GENERIC_64 type */ #include <vadef.h> /* Define VA$ constants */ #include <ints.h> /* Define 64-bit integer types */ #include <far_pointers.h> /* Define 64-bit pointer types */ { int status; /* Ubiquitous VMS status value */ GENERIC_64 region = { VA$C_P2 }; /* Expand in "default" P2 region */ VOID_PQ p2_va; /* Returned VA in P2 space */ uint64 length; /* Allocated size in bytes */ extern uint64 page_size; /* Page size in bytes */ status = sys$expreg_64( ®ion, request_size, 0, 0, &p2_va, &length ); ... } |
Table 11-3 lists the data structures that are used by the new function prototypes.
Structure Used by Prototype | Defined by Header File | Common Prefix for Structure Member Names | Description |
---|---|---|---|
struct _cluevthndl | cluevtdef.h | cluevthndl$ | Cluster event handle |
struct _fabdef | fabdef.h | fab$ | File access block |
struct _generic_64 | gen64def.h | gen64$ | Generic quadword structure |
struct _ieee | ieeedef.h | ieee$ | IEEE floating point control structure |
struct _ile2 1 | iledef.h | ile2$ | Item list entry 2 |
struct _ile3 1 | iledef.h | ile3$ | Item list entry 3 |
struct _ilea_64 1 | ilea_64$ | iledef.h | 64-bit item list entry A structure |
struct _ileb_64 1 | ileb_64$ | iledef.h | 64-bit item list entry B structure |
struct _iosa | iosadef.h | iosa$ | I/O status area |
struct _iosb | iosbdef.h | iosb$ | I/O status block |
struct _lksb | lksbdef.h | lksb$ | Lock status block |
struct _rabdef | rabdef.h | rab$ | RMS record access block |
struct _secid | seciddef.h | secid$ | Global section identifier |
struct _va_range | va_rangedef.h | va_range$ | 32-bit virtual address range |
This section summarizes changes to the RMS interface that support 64-bit addressing and enable you to use RMS to perform input and output operations to P2 or S2 space. You can take full advantage of these RMS enhancements by making only minor modifications to existing RMS code.
For complete information about RMS support for 64-bit addressing, see the OpenVMS Record Management Services Reference Manual.
The RMS user interface consists of a number of control data structures (FAB, RAB, NAM, XABs). These are linked together with 32-bit pointers and contain embedded pointers to I/O buffers and various user data buffers, including file name strings and item lists. RMS support for 64-bit addressable regions allows 64-bit addresses for the following user I/O buffers:
The prompt buffer pointed to by RAB$L_PBF is excluded because the terminal driver does not allow 64-bit addresses.
Specific enhancements to the RMS interface for 64-bit addressing are as follows:
The rest of the RMS interface currently is restricted to 32-bit pointers:
The RAB64, a RMS user interface structure, is an extended RAB that can accommodate 64-bit buffer addresses. The RAB64 data structure consists of a 32-bit RAB structure followed by a 64-bit extension as shown below:
The RAB64 contains fields identical to all of the RAB fields except that field names have the RAB64 prefix instead of the RAB prefix. In addition, RAB64 has the following fields in the extension:
This field... | Is an extension of this field |
Description |
---|---|---|
RAB64$Q_CTX | RAB64$L_CTX | User context. This field is not used by RMS but is available to the user. The CTX field is often used to contain a pointer. For asynchronous I/O, it provides the user with the equivalent of an AST parameter. |
RAB64$PQ_KBF | RAB64$L_KBF | Key buffer address containing the key value for random access (for $GET and $FIND). |
RAB64$PQ_RBF | RAB64$L_RBF | Record buffer address (for $PUT, $UPDATE, and $WRITE). |
RAB64$PQ_RHB | RAB64$L_RHB | Record header buffer address (fixed portion of VFC record format). |
RAB64$Q_RSZ | RAB64$W_RSZ | Record buffer size. |
RAB64$PQ_UBF | RAB64$L_UBF | User buffer address (for $GET and $READ). |
RAB64$Q_USZ | RAB64$W_USZ | User buffer size. |
Note that the fields with the PQ tag in their names can hold either a 64-bit address or a 32-bit address sign-extended to 64 bits. Therefore, you can use the fields in all applications whether or not you are using 64-bit addresses.
For most record I/O service requests, there is an RMS internal buffer between the device and the user's data buffer. The one exception occurs with the RMS service $PUT. If the device is a unit record device and it is not being accessed over the network, RMS passes the address of the user record buffer (RBF) to the $QIO system service. If you inappropriately specify a record buffer (RBF) allocated in 64-bit address space for a $PUT to a unit record device that does not support 64-bit address space (for example, a terminal), the $QIO service returns SS$_NOT64DEVFUNC. (See Writing OpenVMS Alpha Device Drivers in C and OpenVMS Alpha Guide to Upgrading Privileged-Code Applications for more information about $QIO.) RMS returns the error status RMS$_SYS with SS$_NOT64DEVFUNC as the secondary status value in RAB64$L_STV.
RMS system services support the RAB structure as well as the RAB64 structure.
Previous | Next | Contents | Index |
![]() ![]() ![]() ![]() |
privacy and legal statement | ||
5841PRO_035.HTML |