1*e93f7393Sniklas /* xdr_rdb.c - xdr routines for Remote Debug interface to VxWorks */ 2*e93f7393Sniklas 3*e93f7393Sniklas /* Copyright 1992 Free Software Foundation, Inc. 4*e93f7393Sniklas 5*e93f7393Sniklas This code was donated by Wind River Systems, Inc. */ 6*e93f7393Sniklas 7*e93f7393Sniklas /* 8*e93f7393Sniklas modification history 9*e93f7393Sniklas -------------------- 10*e93f7393Sniklas 01a,21mar90,llk created using modification 01d of xdr_dbx.c. 11*e93f7393Sniklas */ 12*e93f7393Sniklas 13*e93f7393Sniklas /* 14*e93f7393Sniklas DESCRIPTION 15*e93f7393Sniklas This module contains the eXternal Data Representation (XDR) routines 16*e93f7393Sniklas for the RDB interface for VxWorks. 17*e93f7393Sniklas */ 18*e93f7393Sniklas 19*e93f7393Sniklas #include "defs.h" 20*e93f7393Sniklas #include "vxWorks.h" 21*e93f7393Sniklas #include <rpc/rpc.h> 22*e93f7393Sniklas #include "xdr_rdb.h" 23*e93f7393Sniklas 24*e93f7393Sniklas /* forward declarations */ 25*e93f7393Sniklas 26*e93f7393Sniklas bool_t 27*e93f7393Sniklas xdr_arg_type(xdrs, objp) 28*e93f7393Sniklas XDR *xdrs; 29*e93f7393Sniklas arg_type *objp; 30*e93f7393Sniklas { 31*e93f7393Sniklas if (!xdr_enum(xdrs, (enum_t *)objp)) { 32*e93f7393Sniklas return (FALSE); 33*e93f7393Sniklas } 34*e93f7393Sniklas return (TRUE); 35*e93f7393Sniklas } 36*e93f7393Sniklas 37*e93f7393Sniklas bool_t 38*e93f7393Sniklas xdr_arg_value(xdrs, objp) 39*e93f7393Sniklas XDR *xdrs; 40*e93f7393Sniklas arg_value *objp; 41*e93f7393Sniklas { 42*e93f7393Sniklas if (!xdr_arg_type(xdrs, &objp->type)) { 43*e93f7393Sniklas return (FALSE); 44*e93f7393Sniklas } 45*e93f7393Sniklas switch (objp->type) { 46*e93f7393Sniklas case T_BYTE: 47*e93f7393Sniklas if (!xdr_char(xdrs, &objp->arg_value_u.v_byte)) { 48*e93f7393Sniklas return (FALSE); 49*e93f7393Sniklas } 50*e93f7393Sniklas break; 51*e93f7393Sniklas case T_WORD: 52*e93f7393Sniklas if (!xdr_short(xdrs, &objp->arg_value_u.v_word)) { 53*e93f7393Sniklas return (FALSE); 54*e93f7393Sniklas } 55*e93f7393Sniklas break; 56*e93f7393Sniklas case T_INT: 57*e93f7393Sniklas if (!xdr_int(xdrs, &objp->arg_value_u.v_int)) { 58*e93f7393Sniklas return (FALSE); 59*e93f7393Sniklas } 60*e93f7393Sniklas break; 61*e93f7393Sniklas case T_FLOAT: 62*e93f7393Sniklas if (!xdr_float(xdrs, &objp->arg_value_u.v_fp)) { 63*e93f7393Sniklas return (FALSE); 64*e93f7393Sniklas } 65*e93f7393Sniklas break; 66*e93f7393Sniklas case T_DOUBLE: 67*e93f7393Sniklas if (!xdr_double(xdrs, &objp->arg_value_u.v_dp)) { 68*e93f7393Sniklas return (FALSE); 69*e93f7393Sniklas } 70*e93f7393Sniklas break; 71*e93f7393Sniklas case T_UNKNOWN: 72*e93f7393Sniklas break; 73*e93f7393Sniklas } 74*e93f7393Sniklas return (TRUE); 75*e93f7393Sniklas } 76*e93f7393Sniklas 77*e93f7393Sniklas bool_t 78*e93f7393Sniklas xdr_func_call(xdrs, objp) 79*e93f7393Sniklas XDR *xdrs; 80*e93f7393Sniklas func_call *objp; 81*e93f7393Sniklas { 82*e93f7393Sniklas if (!xdr_int(xdrs, &objp->func_addr)) { 83*e93f7393Sniklas return (FALSE); 84*e93f7393Sniklas } 85*e93f7393Sniklas if (!xdr_array(xdrs, (char **)&objp->args.args_val, (u_int *)&objp->args.args_len, MAX_FUNC_ARGS, sizeof(arg_value), xdr_arg_value)) { 86*e93f7393Sniklas return (FALSE); 87*e93f7393Sniklas } 88*e93f7393Sniklas return (TRUE); 89*e93f7393Sniklas } 90*e93f7393Sniklas 91*e93f7393Sniklas bool_t 92*e93f7393Sniklas xdr_arg_one(xdrs, objp) 93*e93f7393Sniklas XDR *xdrs; 94*e93f7393Sniklas arg_one *objp; 95*e93f7393Sniklas { 96*e93f7393Sniklas if (!xdr_string(xdrs, objp, MAX_ARG_LEN)) { 97*e93f7393Sniklas return (FALSE); 98*e93f7393Sniklas } 99*e93f7393Sniklas return (TRUE); 100*e93f7393Sniklas } 101*e93f7393Sniklas 102*e93f7393Sniklas 103*e93f7393Sniklas 104*e93f7393Sniklas 105*e93f7393Sniklas bool_t 106*e93f7393Sniklas xdr_arg_array(xdrs, objp) 107*e93f7393Sniklas XDR *xdrs; 108*e93f7393Sniklas arg_array *objp; 109*e93f7393Sniklas { 110*e93f7393Sniklas if (!xdr_array(xdrs, (char **)&objp->arg_array_val, (u_int *)&objp->arg_array_len, MAX_ARG_CNT, sizeof(arg_one), xdr_arg_one)) { 111*e93f7393Sniklas return (FALSE); 112*e93f7393Sniklas } 113*e93f7393Sniklas return (TRUE); 114*e93f7393Sniklas } 115*e93f7393Sniklas 116*e93f7393Sniklas /********************************************************************* 117*e93f7393Sniklas * 118*e93f7393Sniklas * xdr_EVENT_TYPE - 119*e93f7393Sniklas * 120*e93f7393Sniklas */ 121*e93f7393Sniklas 122*e93f7393Sniklas bool_t xdr_EVENT_TYPE(xdrs, objp) 123*e93f7393Sniklas XDR *xdrs; 124*e93f7393Sniklas EVENT_TYPE *objp; 125*e93f7393Sniklas 126*e93f7393Sniklas { 127*e93f7393Sniklas if (!xdr_enum (xdrs, (enum_t *) objp)) 128*e93f7393Sniklas return (FALSE); 129*e93f7393Sniklas return (TRUE); 130*e93f7393Sniklas } 131*e93f7393Sniklas 132*e93f7393Sniklas /********************************************************************* 133*e93f7393Sniklas * 134*e93f7393Sniklas * xdr_RDB_EVENT - 135*e93f7393Sniklas * 136*e93f7393Sniklas */ 137*e93f7393Sniklas 138*e93f7393Sniklas bool_t xdr_RDB_EVENT (xdrs, objp) 139*e93f7393Sniklas XDR *xdrs; 140*e93f7393Sniklas RDB_EVENT *objp; 141*e93f7393Sniklas 142*e93f7393Sniklas { 143*e93f7393Sniklas if (!xdr_int (xdrs, &objp->status)) 144*e93f7393Sniklas return (FALSE); 145*e93f7393Sniklas if (!xdr_int (xdrs, &objp->taskId)) 146*e93f7393Sniklas return (FALSE); 147*e93f7393Sniklas if (!xdr_EVENT_TYPE (xdrs, &objp->eventType)) 148*e93f7393Sniklas return (FALSE); 149*e93f7393Sniklas if (!xdr_int (xdrs, &objp->sigType)) 150*e93f7393Sniklas return (FALSE); 151*e93f7393Sniklas return (TRUE); 152*e93f7393Sniklas } 153*e93f7393Sniklas 154*e93f7393Sniklas /********************************************************************* 155*e93f7393Sniklas * 156*e93f7393Sniklas * xdr_TASK_START - 157*e93f7393Sniklas * 158*e93f7393Sniklas */ 159*e93f7393Sniklas 160*e93f7393Sniklas bool_t 161*e93f7393Sniklas xdr_TASK_START (xdrs, objp) 162*e93f7393Sniklas XDR *xdrs; 163*e93f7393Sniklas TASK_START *objp; 164*e93f7393Sniklas 165*e93f7393Sniklas { 166*e93f7393Sniklas if (!xdr_int (xdrs, &objp->status)) 167*e93f7393Sniklas return (FALSE); 168*e93f7393Sniklas if (!xdr_int (xdrs, &objp->pid)) 169*e93f7393Sniklas return (FALSE); 170*e93f7393Sniklas return (TRUE); 171*e93f7393Sniklas } 172*e93f7393Sniklas 173*e93f7393Sniklas 174*e93f7393Sniklas /********************************************************************* 175*e93f7393Sniklas * 176*e93f7393Sniklas * xdr_SYMBOL_ADDR - 177*e93f7393Sniklas * 178*e93f7393Sniklas */ 179*e93f7393Sniklas 180*e93f7393Sniklas bool_t 181*e93f7393Sniklas xdr_SYMBOL_ADDR (xdrs, objp) 182*e93f7393Sniklas XDR *xdrs; 183*e93f7393Sniklas SYMBOL_ADDR *objp; 184*e93f7393Sniklas 185*e93f7393Sniklas { 186*e93f7393Sniklas if (!xdr_int (xdrs, &objp->status)) 187*e93f7393Sniklas return (FALSE); 188*e93f7393Sniklas if (!xdr_u_int (xdrs, &objp->addr)) 189*e93f7393Sniklas return (FALSE); 190*e93f7393Sniklas return (TRUE); 191*e93f7393Sniklas } 192*e93f7393Sniklas 193*e93f7393Sniklas /********************************************************************* 194*e93f7393Sniklas * 195*e93f7393Sniklas * xdr_SOURCE_STEP - 196*e93f7393Sniklas * 197*e93f7393Sniklas */ 198*e93f7393Sniklas 199*e93f7393Sniklas bool_t 200*e93f7393Sniklas xdr_SOURCE_STEP (xdrs, objp) 201*e93f7393Sniklas XDR *xdrs; 202*e93f7393Sniklas SOURCE_STEP *objp; 203*e93f7393Sniklas 204*e93f7393Sniklas { 205*e93f7393Sniklas if (!xdr_int (xdrs, &objp->taskId)) 206*e93f7393Sniklas return (FALSE); 207*e93f7393Sniklas if (!xdr_u_int (xdrs, &objp->startAddr)) 208*e93f7393Sniklas return (FALSE); 209*e93f7393Sniklas if (!xdr_u_int (xdrs, &objp->endAddr)) 210*e93f7393Sniklas return (FALSE); 211*e93f7393Sniklas return (TRUE); 212*e93f7393Sniklas } 213