6811333 Remove prom_printf() message in emlxs driver
[opensolaris.git] / usr / src / uts / common / sys / agp / agpgart_impl.h
blob997e0da9482f3eb238b5338fcd66e23b9790cc7a
1 /*
2 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
6 #ifndef _SYS_AGPGART_IMPL_H
7 #define _SYS_AGPGART_IMPL_H
9 #pragma ident "%Z%%M% %I% %E% SMI"
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
16 #ifdef _KERNEL
18 #define AGPGART_MAX_INSTANCES 1
19 #define AGP_MAXKEYS 256
20 #define AGPGART_DEVNODE "agpgart"
23 * The values of type agp_arc_type_t are used as indexes into arc_name
24 * in agp_kstat.c.
25 * So if agp_arc_type_t's values are changed in the future, the content
26 * of arc_name must be changed accordingly.
28 enum agp_arc_type {
29 ARC_IGD810 = 0,
30 ARC_IGD830 = 1,
31 ARC_INTELAGP = 2,
32 ARC_AMD64AGP = 3,
33 ARC_UNKNOWN = 5
35 typedef enum agp_arc_type agp_arc_type_t;
37 /* linked list structure of multiple agp gart devices access handles */
38 typedef struct amd64_gart_dev_list {
39 ldi_handle_t gart_devhdl;
40 struct amd64_gart_dev_list *next;
41 } amd64_gart_dev_list_t;
43 typedef struct amd64_garts_dev {
44 int gart_device_num;
45 amd64_gart_dev_list_t *gart_dev_list_head;
46 } amd64_garts_dev_t;
49 * AGP target and master device register their config space access
50 * interface here.
51 * In AMD64, gart_device_num is the number of hostbridge (device(1100, 1022))
52 * refer to <<Bios and Kernel Developer's Guide for AMD athlon64 and operton>>
54 typedef struct agp_registered_dev {
55 amd64_garts_dev_t agprd_cpugarts;
56 ldi_handle_t agprd_targethdl;
57 ldi_handle_t agprd_masterhdl;
58 agp_arc_type_t agprd_arctype; /* system types */
59 } agp_registered_dev_t;
62 * If the OS have direct mapping support for mapping physical page frames
63 * directly to user address, we use this struct for memory
64 * allocation.
66 typedef struct agp_pmem_handle {
67 devmap_pmem_cookie_t pmem_cookie;
68 } agp_pmem_handle_t;
71 * This struct is used for DDI-compliant memory allocations.
73 typedef struct agp_kmem_handle {
74 ddi_dma_handle_t kmem_handle;
75 ddi_dma_cookie_t kmem_dcookie;
76 uint32_t kmem_cookies_num;
77 caddr_t kmem_kvaddr;
78 size_t kmem_reallen;
79 ddi_acc_handle_t kmem_acchdl;
80 } agp_kmem_handle_t;
82 typedef struct keytable_ent {
83 int kte_type; /* agp memory type */
84 int kte_key; /* memory key */
85 uint32_t kte_pgoff; /* aperture offset bound in pages */
86 pgcnt_t kte_pages; /* user-requested size in pages */
87 int kte_bound; /* bound to gart table */
88 void *kte_memhdl; /* agp_kmem or agp_pmem handle */
89 pfn_t *kte_pfnarray; /* page frame numbers allocated */
90 int kte_refcnt; /* reference count */
91 } keytable_ent_t;
93 typedef struct key_list {
94 int key_idx;
95 struct key_list *next;
96 } key_list_t;
99 * for kstat
101 typedef struct agp_kern_info {
102 uint32_t agpki_mdevid;
103 agp_version_t agpki_mver;
104 uint32_t agpki_mstatus;
105 size_t agpki_presize; /* valid only for IGD, in KB */
106 uint32_t agpki_tdevid;
107 agp_version_t agpki_tver;
108 uint32_t agpki_tstatus;
109 uint64_t agpki_aperbase;
110 uint32_t agpki_apersize; /* in MB */
111 } agp_kern_info_t;
113 #ifdef _MULTI_DATAMODEL
114 typedef struct _agp_info32 {
115 agp_version_t agpi32_version;
116 uint32_t agpi32_devid; /* device VID + DID */
117 uint32_t agpi32_mode; /* mode of bridge */
118 uint32_t agpi32_aperbase; /* base of aperture */
119 uint32_t agpi32_apersize; /* in MB */
120 uint32_t agpi32_pgtotal; /* max number of pages */
121 uint32_t agpi32_pgsystem; /* same as pg_total */
122 uint32_t agpi32_pgused; /* pages consumed */
123 } agp_info32_t;
124 #endif /* _MULTI_DATAMODEL */
126 typedef struct agpgart_softstate {
127 dev_info_t *asoft_dip;
128 kmutex_t asoft_instmutex;
129 agp_kern_info_t asoft_info;
130 int asoft_opened; /* 0 not opened, non-0 opened */
131 int asoft_acquired; /* 0 released, 1 acquired */
132 int asoft_agpen; /* 0 disbaled, 1 enabled */
133 pid_t asoft_curpid; /* the process accquiring gart */
134 uint32_t asoft_mode; /* agp mode be set */
135 uint32_t asoft_pgtotal; /* total available pages */
136 uint32_t asoft_pgused; /* pages already used */
137 /* resource handles */
138 ldi_ident_t asoft_li; /* for ldi ops */
139 keytable_ent_t *asoft_table; /* key table for all allocated table */
140 ddi_dma_handle_t gart_dma_handle; /* for GATT table */
141 ddi_acc_handle_t gart_dma_acc_handle; /* for GATT table */
143 /* gart table info */
144 uint64_t gart_pbase; /* gart table physical address */
145 caddr_t gart_vbase; /* kernel-vir addr for GATT table */
146 size_t gart_size; /* the size of aperture in megabytes */
147 /* all registered agp device in here */
148 agp_registered_dev_t asoft_devreg;
149 kstat_t *asoft_ksp;
150 } agpgart_softstate_t;
152 typedef struct agpgart_ctx {
153 offset_t actx_off;
154 agpgart_softstate_t *actx_sc;
155 } agpgart_ctx_t;
157 #define KMEMP(p) ((agp_kmem_handle_t *)p)
158 #define PMEMP(p) ((agp_pmem_handle_t *)p)
160 int agp_init_kstats(agpgart_softstate_t *);
161 void agp_fini_kstats(agpgart_softstate_t *);
163 #endif /* _KERNEL */
165 #ifdef __cplusplus
167 #endif
169 #endif /* _SYS_AGPGART_IMPL_H */