Home | History | Annotate | Download | only in sys
      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 2007 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef	_SYS_BOFI_IMPL_H
     27 #define	_SYS_BOFI_IMPL_H
     28 
     29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     30 
     31 #ifdef __cplusplus
     32 extern "C" {
     33 #endif
     34 
     35 struct bofi_errent {
     36 	struct bofi_errent *next;	/* next on in-use chain */
     37 	struct bofi_errent *cnext;	/* next on clone chain */
     38 	struct bofi_errent *cprev;	/* prev on clone chain */
     39 	struct bofi_errdef errdef;
     40 	struct bofi_errstate errstate;
     41 	caddr_t name;
     42 	struct acc_log_elem *logbase;
     43 	uint_t state;
     44 	kcondvar_t cv;
     45 	ddi_softintr_t softintr_id;
     46 };
     47 
     48 /*
     49  * values for state
     50  */
     51 #define	BOFI_DEV_ACTIVE 1
     52 #define	BOFI_NEW_MESSAGE 2
     53 #define	BOFI_MESSAGE_WAIT 4
     54 #define	BOFI_DEBUG 8
     55 
     56 #define	BOFI_NLINKS 8192
     57 
     58 struct bofi_link {
     59 	struct bofi_link *link;	/* next on shadow handle chain */
     60 	struct bofi_errent *errentp;	/* pointer to corresponding errent */
     61 };
     62 
     63 struct bofi_shadow {
     64 	union {
     65 		struct dvma_ops dvma_ops;
     66 		ddi_acc_impl_t acc;
     67 		struct {
     68 			uint_t (*int_handler)(caddr_t, caddr_t);
     69 			caddr_t int_handler_arg1;
     70 			caddr_t int_handler_arg2;
     71 		} intr;
     72 	} save;
     73 	struct bofi_shadow *next;	/* next on inuse chain */
     74 	struct bofi_shadow *prev;	/* prev on inuse chain */
     75 	struct bofi_shadow *hnext;	/* next on hhash chain */
     76 	struct bofi_shadow *hprev;	/* prev on hhash chain */
     77 	struct bofi_shadow *dnext;	/* next on dhash chain */
     78 	struct bofi_shadow *dprev;	/* prev on dhash chain */
     79 	struct bofi_link *link;	/* errdef chain */
     80 	uint_t type;
     81 	union {
     82 		ddi_dma_handle_t dma_handle;
     83 		ddi_acc_handle_t acc_handle;
     84 	} hdl;
     85 	uint32_t bofi_inum;
     86 	dev_info_t *dip;
     87 	char name[NAMESIZE];		/* as returned by ddi_get_name() */
     88 	int instance;		/* as returned by ddi_get_instance() */
     89 	int rnumber;
     90 	offset_t offset;
     91 	offset_t len;
     92 	caddr_t addr;
     93 	caddr_t mapaddr;
     94 	caddr_t origaddr;
     95 	caddr_t allocaddr;
     96 	uint_t flags;
     97 	int map_flags;
     98 	page_t *map_pp;
     99 	page_t **map_pplist;
    100 	struct bofi_shadow **hparrayp;
    101 	int hilevel;
    102 	ddi_umem_cookie_t umem_cookie;
    103 };
    104 
    105 /*
    106  * values for type
    107  */
    108 #define	BOFI_ACC_HDL 1
    109 #define	BOFI_DMA_HDL 2
    110 #define	BOFI_INT_HDL 3
    111 #define	BOFI_NULL    4
    112 
    113 #ifdef __cplusplus
    114 }
    115 #endif
    116 
    117 #endif	/* _SYS_BOFI_IMPL_H */
    118