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