1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 /*
27 * The sole purpose of this file is to document our violations of the DDI
28 * in Solaris and to get ddict to run on the data services stack.
29 * Definitions and declarations contained in this file are never compiled
30 * into the code. It is only included if we are running ddict on our src.
31 *
32 * IMPORTANT NOTE:
33 * Many of the declarations are not correct. It does not matter.
34 * Structure declarations only define the fields we require.
35 * Structures which we use in an opaque manner are defined as void *
36 */
37
38 #ifndef _SYS_CONTRACT_H
39 #define _SYS_CONTRACT_H
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 /*
46 * Define our interfaces for nsctl because ddict is stupid
47 * about intermodule dependencies
48 */
49 #include <sys/nsctl/nsctl_inter.h>
50
51 /*
52 * Define our ncall interfaces
53 */
54 #include <sys/nsctl/ncall_inter.h>
55
56 /*
57 * The STRUCT_DECL definitions in the ddict headers are fouled up
58 * we include our own model.h here to redefine it to avoid errors.
59 */
60 #if !defined(_SunOS_5_6)
61 #include <sys/nsctl/model.h>
62 #endif
63
64 /*
65 * General violations
66 * Everybody violates these
67 * Why are they called ddi if it is not part of it?
68 */
69
70 #define DDI_PROP_NOTPROM 0
71
ddi_rele_driver(void)72 int ddi_rele_driver(void) { }
ddi_hold_installed_driver(void)73 int ddi_hold_installed_driver(void) { }
74
75 /*
76 * SV module violations
77 */
78 void *curthread;
79 int devcnt;
80
81 /*
82 * The following from vnode.h
83 */
84 typedef struct vode {
85 int v_lock; /* SDBC uses this too */
86 int v_type; /* nskern too */
87 int v_rdev; /* nskern too */
88 } vnode_t;
89
90 #define FOLLOW 0
91 #define NULLVPP NULL
92 #define AT_RDEV 0
93 #define VOP_GETATTR(vp, vap, f, cr) ((void)0)
94 #define VN_RELE(vp) ((void)0)
95
96 /*
97 * The fields we use from vattr_t
98 */
99 typedef struct vattr {
100 uint_t va_mask;
101 dev_t va_rdev;
102 int va_size; /* nskern */
103 } vattr_t;
104
lookupname(void,void,void,void,void)105 int lookupname(void, void, void, void, void) { }
106
107 /*
108 * End of SV module violations
109 */
110
111 /*
112 * DSW/II module violations
113 */
114
115 /*
116 * This is really bogus that ddict does not understand sys/inttypes.h
117 */
118 #define INT32_MIN 0
119 #define INT32_MAX 0
120 #define INT64_MAX 0
121
122 /*
123 * End of DSW/II module violations
124 */
125
126 /*
127 * UNISTAT module violations
128 */
129
130 void mod_miscops;
131 typedef enum { B_FALSE, B_TRUE } boolean_t;
132
133 /*
134 * End of UNISTAT module violations
135 */
136
137 /*
138 * NSCTL module violations
139 */
140 #define ERESTART 0
141 #define EUSERS 0
142 #define ENAMETOOLONG 0
143 #define ENOSYS 0
144 #define FOPEN 0
ddi_name_to_major()145 int ddi_name_to_major() { }
146 /*
147 * End of NSCTL module violations
148 */
149
150 /*
151 * NSKERN module violations
152 */
153 #define UL_GETFSIZE 0
154 #define USHRT_MAX 0
155
156 typedef u_longlong_t rlim64_t;
ulimit()157 int ulimit() { }
158 int maxphys;
159
160 #define AT_SIZE 0
161 #define VBLK 0
162 #define VCHR 0
163 #define VREG 0
164 #define VLNK 0
165
166 #define VOP_CLOSE(vp, f, c, o, cr) ((void)0)
167 #define VOP_RWLOCK(vp, w) ((void)0)
168 #define VOP_RWUNLOCK(vp, w) ((void)0)
169 #define VOP_READ(vp, uiop, iof, cr) ((void)0)
170 #define VOP_WRITE(vp, uiop, iof, cr) ((void)0)
171
vn_open(char * pnamep,void seg,int filemode,int createmode,struct vnode ** vpp,void crwhy,mode_t umask)172 int vn_open(char *pnamep, void seg, int filemode, int createmode,
173 struct vnode **vpp, void crwhy, mode_t umask) { }
174
175 /*
176 * End of NSKERN module violations
177 */
178
179 /*
180 * NVRAM module violations
181 */
182 #define MMU_PAGESIZE 0
183
184 #ifndef MAXNAMELEN
185 #define MAXNAMELEN 1
186 #endif
187
188 #define DEVMAP_DEFAULTS 0
189 #define PFN_INVALID -1
190
191 char hw_serial[1];
mmu_ptob(void arg)192 int mmu_ptob(void arg) { }
roundup(void arg)193 int roundup(void arg) { }
194
195 /*
196 * End of NVRAM module violations
197 */
198
199 /*
200 * RDCSVR (SNDR) module
201 * Contract PSARC 2001/699
202 */
203 #define DUP_DONE 0
204 #define DUP_ERROR 0
205 #define DUP_INPROGRESS 0
206 #define DUP_NEW 0
207 #define DUP_DROP 0
208
209 #define RPC_MAXDATASIZE 0
210
211
212 typedef void * file_t; /* opaque */
213 typedef void SVCXPRT; /* opaque */
214 typedef void SVCMASTERXPRT; /* opaque */
215 typedef void xdrproc_t; /* opaque */
216 typedef int enum_t;
217
218 typedef struct svc_req { /* required fields */
219 int rq_vers;
220 int rq_proc;
221 } svc_req_t;
222
SVC_FREEARGS(void xprt,void a,void * b)223 void SVC_FREEARGS(void xprt, void a, void *b) { }
SVC_DUP(void xprt,void req,void i,void j,void * dr)224 void SVC_DUP(void xprt, void req, void i, void j, void *dr) { }
svcerr_systemerr(void xprt)225 void svcerr_systemerr(void xprt) { }
svcerr_noproc(void xprt)226 void svcerr_noproc(void xprt) { }
SVC_DUPDONE(void xprt,void dr,void a,void b,void c)227 void SVC_DUPDONE(void xprt, void dr, void a, void b, void c) { }
228
svc_tli_kcreate(void * f,void * n,void * b,void ** x,void * t,uint_t c,uint_t d)229 SVCXPRT *svc_tli_kcreate(void *f, void *n, void *b, void **x, void *t,
230 uint_t c, uint_t d) { }
231
232 /*
233 * non-ddi not under contracts
234 */
235 struct netbuf {
236 int maxlen;
237 int len;
238 char *buf;
239 }
240
241 /*
242 * End of RDCSRV module Contracts
243 */
244
245 /*
246 * RDC (SNDR) module
247 * Contract PSARC 2001/699
248 */
249
250 typedef u_longlong_t rpcproc_t;
251 typedef u_longlong_t xdrproc_t;
252 typedef u_longlong_t rpcvers_t;
253 #define __dontcare__ -1
254 #define RPC_INTR 0
255 #define RPC_SUCCESS 0
256 #define RPC_TLIERROR 0
257 #define RPC_XPRTFAILED 0
258 #define RPC_VERSMISMATCH 0
259 #define RPC_PROGVERSMISMATCH 0
260 #define RPC_INPROGRESS 0
261
262 #define ENOEXEC 0
263 #define EBADF 0
264
265 /*
266 * XDR routines
267 * from rpc/xdr.h
268 */
269 typedef void * XDR; /* opaque */
xdr_void()270 int xdr_void() { }
xdr_int()271 int xdr_int() { }
xdr_union()272 int xdr_union() { }
xdr_enum()273 int xdr_enum() { }
xdr_u_int()274 int xdr_u_int() { }
xdr_u_longlong_t()275 int xdr_u_longlong_t() { }
xdr_opaque()276 int xdr_opaque() { }
xdr_bytes()277 int xdr_bytes() { }
xdr_array()278 int xdr_array() { }
279 #define NULL_xdrproc_t ((xdrproc_t)0)
280
281 /*
282 * The following imported rpc/clnt.h
283 */
284
285 /* Client is mostly opaque exccept for the following */
286
287 typedef struct __client { /* required fields */
288 void *cl_auth;
289 bool_t cl_nosignal;
290 } CLIENT;
291
292 #define CLSET_PROGRESS 0
293 #define KNC_STRSIZE 128
294 struct knetconfig {
295 unsigned int knc_semantics;
296 caddr_t knc_protofmly;
297 caddr_t knc_proto;
298 dev_t knc_rdev;
299 };
300
clnt_sperrno()301 void *clnt_sperrno() { }
IS_UNRECOVERABLE_RPC(a)302 void IS_UNRECOVERABLE_RPC(a) { }
CLNT_CONTROL(cl,request,info)303 void CLNT_CONTROL(cl, request, info) { }
AUTH_DESTROY(void * a)304 void AUTH_DESTROY(void *a) { }
CLNT_DESTROY(void * a)305 void CLNT_DESTROY(void *a) { }
306
clnt_tli_kcreate(void * a,void * b,void c,void d,void e,void f,void * g,void ** h)307 int clnt_tli_kcreate(void *a, void *b, void c, void d, void e, void f,
308 void *g, void **h) { }
309
clnt_tli_kinit(void * h,void * config,void * addr,uint_t a,int b,void * c)310 int clnt_tli_kinit(void *h, void *config, void *addr, uint_t a, int b,
311 void *c) { }
312
CLNT_CALL(void,void,void,void,void,void,void)313 void CLNT_CALL(void, void, void, void, void, void, void) { }
314
315 /*
316 * The following imported from rpc/svc.h
317 */
svc_sendreply()318 void svc_sendreply() { }
svcerr_decode()319 void svcerr_decode() { }
SVC_GETARGS()320 void SVC_GETARGS() { }
321
322 /*
323 * The following imported from sys/file.h
324 */
325
getf(void)326 void getf(void) { }
releasef(void)327 void releasef(void) { }
328
329 /*
330 * Not under contract
331 */
sigintr(void)332 void sigintr(void) { }
sigunintr(void)333 void sigunintr(void) { }
expldev()334 dev_t expldev() { }
335
336 /*
337 * End of RDC module
338 */
339
340 /*
341 * SDBC module violations
342 */
343
344 /*
345 * devid uses internal structure
346 * from sys/ddi_impldefs.h
347 */
348 typedef struct impl_devid {
349 uchar_t did_type_hi;
350 uchar_t did_type_lo;
351 } impl_devid_t;
352
353 #define DEVID_GETTYPE(devid) 0
354 #define DEVID_SCSI_SERIAL 0
355
356 #define ENOLINK 0 /* NCALL too */
357 #define E2BIG 0
358 #define ENOENT 0
359 #define EIDRM 0
360
361 #define B_KERNBUF 0
362 #define KSTAT_TYPE_RAW 0
363 #define MAXPATHLEN 0
364
365 #define VN_HOLD(bp) ((void)0)
366
367 /* Page list IO stuff */
368 typedef struct page {
369 int v_count; /* sdbc */
370 } page_t;
371 page_t kvp; /* We use the kernel segment */
page_add(void)372 int page_add(void) { }
page_find(void)373 int page_find(void) { }
page_list_concat(void)374 int page_list_concat(void) { }
pageio_setup(void)375 int pageio_setup(void) { }
pageio_done(void)376 int pageio_done(void) { }
377
kobj_getsymvalue(void)378 void kobj_getsymvalue(void) { }
ddi_dev_pathname(void)379 int ddi_dev_pathname(void) { }
380
381 /*
382 * HACK ALERT
383 * struct buf hack for ddict.
384 * SDBC currently violates in struct buf
385 * b_pages
386 * b_proc
387 * which we will define as the pad fields for ddict since
388 * we can not overload the definition of struct buf with our own stuff.
389 */
390
391 #define b_pages b_pad7 /* b_pages in struct buf */
392 #define b_proc b_pad8 /* b_proc in struct buf */
393 #define b_forw b_pad1 /* b_forw in struct buf */
394 #define b_back b_pad2 /* b_back in struct buf */
395
396 /*
397 * End of SDBC moduel violations
398 */
399
400 /*
401 * SCMTEST module violations
402 */
403
404 #define ESRCH 0 /* NCALL too */
405
406 /*
407 * End of SCMTEST module violations
408 */
409 /*
410 * SFTM module violations
411 * Note: XXX This list is currently incomplete
412 */
413
414 typedef void * cqe_t; /* opaque */
415 typedef void * fcal_packet_t; /* opaque */
416 typedef void * soc_response_t; /* opaque */
417 typedef void * la_els_logi_t; /* opaque */
418 typedef void * la_els_adisc_t; /* opaque */
419 typedef void * fcp_rsp_t; /* opaque */
420 typedef void * soc_request_t; /* opaque */
421 typedef void * els_payload_t; /* opaque */
422 typedef void * la_els_logo_t; /* opaque */
423 typedef void * fc_frame_header_t; /* opaque */
424
425 typedef struct la_els_prli_s {
426 uchar_t ls_code;
427 uchar_t page_length;
428 ushort_t payload_length;
429 uchar_t service_params[1];
430 } la_els_prli_t;
431
432 typedef la_els_prli_t la_els_prli_reply_t;
433 typedef la_els_prli_t la_els_prlo_t;
434 typedef la_els_prli_t la_els_prlo_reply_t;
435
436 /*
437 * The following from /usr/include/sys/fc4/fcp.h
438 */
439 typedef struct fcp_cntl {
440 uchar_t cntl_reserved_1 : 5,
441 cntl_qtype : 3;
442 uchar_t cntl_kill_tsk : 1,
443 cntl_clr_aca : 1,
444 cntl_reset : 1,
445 cntl_reserved_2 : 2,
446 cntl_clr_tsk : 1,
447 cntl_abort_tsk : 1,
448 cntl_reserved_3 : 1;
449 uchar_t cntl_reserved_4 : 6,
450 cntl_read_data : 1,
451 cntl_write_data : 1;
452 } fcp_cntl_t;
453
454 typedef struct fcp_ent_addr {
455 ushort_t ent_addr_0;
456 ushort_t ent_addr_1;
457 ushort_t ent_addr_2;
458 ushort_t ent_addr_3;
459 } fcp_ent_addr_t;
460
461 typedef struct fcp_cmd_s {
462 fcp_ent_addr_t fcp_ent_addr;
463 fcp_cntl_t fcp_cntl;
464 uchar_t fcp_cdb[1];
465 int fcp_data_len;
466 } fcp_cmd_t;
467
468 typedef struct fcal_transport {
469 uchar_t dummy1;
470 uchar_t dummy2;
471 } fcal_transport_t;
472
473 /*
474 * End of SFTM module violations
475 */
476
477 /*
478 * STE module violations
479 */
480
481 typedef void la_wwn_t; /* opaque */
482 /* WWN formats from sys/fcal/fcal_linkapp.h */
483 typedef union la_wwn {
484 uchar_t raw_wwn[8];
485 struct {
486 uint_t naa_id : 4;
487 uint_t nport_id : 12;
488 uint_t wwn_hi : 16;
489 uint_t wwn_lo;
490 } w;
491 } la_wwn_t;
492
insque(void)493 insque(void) { }
remque(void)494 remque(void) { }
snprintf(void)495 snprintf(void) { }
496
497 /*
498 * STE uses inq_serial and inq_ackqreqq from struct scsi_inquiry
499 */
500 #define inq_serial inq_pid
501 #define inq_ackqreqq inq_pid
502 /*
503 * End of STE module violations
504 */
505
506 /*
507 * NCALL module violations
508 */
509 #define ENONET 0
510
511 /* NCALLSRV */
512 typedef int bool_t;
513
514 /* NCALLIP */
515 #ifndef TRUE
516 #define TRUE 1
517 #endif
518
519 #ifndef FALSE
520 #define FALSE 0
521 #endif
522
523 #define ERANGE 0
524 #define ENODATA 0
525
526 #define RPC_TIMEDOUT 0
527
528 /*
529 * End of NCALL violations
530 */
531 #ifdef __cplusplus
532 }
533 #endif
534
535 #endif /* _SYS_CONTRACT_H */
536