sd: remove 'ssd' driver support
[unleashed/tickless.git] / arch / x86 / kernel / platform / i86pc / include / sys / xsvc.h
blob2d631768494ecb7aa19685ac905b664aa29a7637
1 /*
2 * CDDL HEADER START
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.
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.
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]
19 * CDDL HEADER END
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_XSVC_H
28 #define _SYS_XSVC_H
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
34 #include <sys/avl.h>
35 #include <sys/types.h>
37 /* xsvc ioctls */
38 #define XSVCIOC ('Q'<< 8)
39 #define XSVC_ALLOC_MEM (XSVCIOC | 130)
40 #define XSVC_FREE_MEM (XSVCIOC | 131)
41 #define XSVC_FLUSH_MEM (XSVCIOC | 132)
43 /* arg * struct for ioctls */
44 typedef struct _xsvc_mem_req {
45 int xsvc_mem_reqid; /* request ID */
46 uint64_t xsvc_mem_addr_lo; /* low DMA address range */
47 uint64_t xsvc_mem_addr_hi; /* high DMA address range */
48 uint64_t xsvc_mem_align; /* DMA address alignment */
49 int xsvc_mem_sgllen; /* s/g length */
50 size_t xsvc_mem_size; /* length of mem in bytes */
51 void *xsvc_sg_list; /* returned scatter gather list */
52 } xsvc_mem_req;
54 /* xsvc_sg_list format */
55 typedef struct _xsvc_mloc {
56 uint64_t mloc_addr;
57 size_t mloc_size;
58 } xsvc_mloc;
60 #ifdef _KERNEL
61 /* *** Driver Private Below *** */
63 /* arg * struct for ioctls from 32-bit app in 64-bit kernel */
64 #pragma pack(1)
65 typedef struct _xsvc_mem_req_32 {
66 int xsvc_mem_reqid; /* request ID */
67 uint64_t xsvc_mem_addr_lo; /* low DMA address range */
68 uint64_t xsvc_mem_addr_hi; /* high DMA address range */
69 uint64_t xsvc_mem_align; /* DMA address alignment */
70 int xsvc_mem_sgllen; /* s/g length */
71 uint32_t xsvc_mem_size; /* length of mem in bytes */
72 uint32_t xsvc_sg_list; /* returned scatter gather list */
73 } xsvc_mem_req_32;
74 #pragma pack()
76 /* xsvc_sg_list format */
77 #pragma pack(1)
78 typedef struct _xsvc_mloc_32 {
79 uint64_t mloc_addr;
80 uint32_t mloc_size;
81 } xsvc_mloc_32;
82 #pragma pack()
84 /* avl node */
85 typedef struct xsvc_mnode_s {
86 avl_node_t mn_link;
87 uint64_t mn_key;
88 struct xsvc_mem_s *mn_home;
89 } xsvc_mnode_t;
91 /* track memory allocs */
92 typedef struct xsvc_mem_s {
93 xsvc_mnode_t xm_mnode;
94 size_t xm_size;
95 caddr_t xm_addr;
96 size_t xm_real_length;
97 ddi_dma_handle_t xm_dma_handle;
98 ddi_acc_handle_t xm_mem_handle;
99 ddi_dma_attr_t xm_dma_attr;
100 ddi_device_acc_attr_t xm_device_attr;
101 uint_t xm_cookie_count;
102 ddi_dma_cookie_t xm_cookie;
103 } xsvc_mem_t;
105 /* list of memory allocs */
106 typedef struct xsvc_mlist_s {
107 kmutex_t ml_mutex;
108 avl_tree_t ml_avl;
109 } xsvc_mlist_t;
111 /* driver state */
112 typedef struct xsvc_state_s {
113 dev_info_t *xs_dip;
114 int xs_instance;
117 * track total memory allocated, mutex only covers
118 * xs_currently_alloced
120 kmutex_t xs_mutex;
121 uint64_t xs_currently_alloced;
123 kmutex_t xs_cookie_mutex;
125 xsvc_mlist_t xs_mlist;
126 } xsvc_state_t;
128 #endif /* _KERNEL */
130 #ifdef __cplusplus
132 #endif
134 #endif /* _SYS_XSVC_H */