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 
  72 int ddi_rele_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 
 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
 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;
 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 
 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];
 192 int mmu_ptob(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 
 223 void SVC_FREEARGS(void xprt, void a, void *b) { }
 224 void SVC_DUP(void xprt, void req, void i, void j, void *dr) { }
 225 void svcerr_systemerr(void xprt) { }
 226 void svcerr_noproc(void xprt) { }
 227 void SVC_DUPDONE(void xprt, void dr, void a, void b, void c) { }
 228 
 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 */
 270 int xdr_void() { }
 271 int xdr_int() { }
 272 int xdr_union() { }
 273 int xdr_enum() { }
 274 int xdr_u_int() { }
 275 int xdr_u_longlong_t() { }
 276 int xdr_opaque() { }
 277 int xdr_bytes() { }
 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 
 301 void *clnt_sperrno() { }
 302 void IS_UNRECOVERABLE_RPC(a) { }
 303 void CLNT_CONTROL(cl, request, info) { }
 304 void AUTH_DESTROY(void *a) { }
 305 void CLNT_DESTROY(void *a) { }
 306 
 307 int clnt_tli_kcreate(void *a, void *b, void c, void d, void e, void f,
 308         void *g, void **h) { }
 309 
 310 int clnt_tli_kinit(void *h, void *config, void *addr, uint_t a, int b,
 311         void *c) { }
 312 
 313 void     CLNT_CALL(void, void, void, void, void, void, void) { }
 314 
 315 /*
 316  * The following imported from rpc/svc.h
 317  */
 318 void svc_sendreply() { }
 319 void svcerr_decode() { }
 320 void SVC_GETARGS() { }
 321 
 322 /*
 323  * The following imported from sys/file.h
 324  */
 325 
 326 void getf(void) { }
 327 void releasef(void) { }
 328 
 329 /*
 330  * Not under contract
 331  */
 332 void sigintr(void) { }
 333 void sigunintr(void) { }
 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 */
 372 int page_add(void) { }
 373 int page_find(void) { }
 374 int page_list_concat(void) { }
 375 int pageio_setup(void) { }
 376 int pageio_done(void) { }
 377 
 378 void kobj_getsymvalue(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 
 493 insque(void) { }
 494 remque(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 */