6 // This is the number of argument registers for Alpha (used by gensrv). //++ // // Copyright (c) 1989 Microsoft Corporation // // Module Name: // // systable.s // // Abstract: // // This module implements the system service dispatch table. // // Author: // // David N. Cutler (davec) 29-Apr-1989 // // Environment: // // Kernel mode only. // // Revision History: // // Joe Notarangelo 08-Jul-1992 // alpha version // - 6 argument registers for alpha // - size of allocation for each table entry address = 64 bits // (this was necessary with BL3 of the compiler, it may no // longer be the case but this shouldn't hurt, the system // service exception code will load long anyway) // // Thomas Van Baak (tvb) 04-Sep-1992 // // The first line of this file was "6 8" which the new gensrv used // to set the number of in-register arguments (6) and the size of a // register (8). // // Now instead, the ARGTBL_ENTRY macro itself converts i386/Mips 4 // byte units into Alpha 8 byte units. This way, if an old version // of gensrv is used, we still get the proper byte counts for Alpha. // //-- // // To add a system service simply add the name of the service to the below // table. If the system service has in memory arguments, then immediately // follow the name of the serice with a comma and following that the number // of bytes of in memory arguments, e.g. CreateObject,40. // #define TABLE_BEGIN1( t ) .rdata #define TABLE_BEGIN2( t ) .align 4 #define TABLE_BEGIN3( t ) .globl KiServiceTable #define TABLE_BEGIN4( t ) KiServiceTable: #define TABLE_BEGIN5( t ) #define TABLE_BEGIN6( t ) #define TABLE_BEGIN7( t ) #define TABLE_BEGIN8( t ) #define TABLE_ENTRY( l,bias,numargs ) .long Nt##l+bias #define TABLE_END( n ) .sdata ; .globl KiServiceLimit ; KiServiceLimit: .long n + 1 #define ARGTBL_BEGIN .rdata ; .align 4 ; .globl KiArgumentTable ; KiArgumentTable: // // Convert gensrv 4-byte units to Alpha 8-bytes-per-register units. // #define ARGTBL_ENTRY( e0,e1,e2,e3,e4,e5,e6,e7 ) \ .byte e0 *2, e1 *2, e2 *2, e3 *2, e4 *2, e5 *2, e6 *2, e7 *2 #define ARGTBL_END TABLE_BEGIN1( "System Service Dispatch Table" ) TABLE_BEGIN2( "System Service Dispatch Table" ) TABLE_BEGIN3( "System Service Dispatch Table" ) TABLE_BEGIN4( "System Service Dispatch Table" ) TABLE_BEGIN5( "System Service Dispatch Table" ) TABLE_BEGIN6( "System Service Dispatch Table" ) TABLE_BEGIN7( "System Service Dispatch Table" ) TABLE_BEGIN8( "System Service Dispatch Table" )