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 /* 23 * Copyright (c) 2009, Intel Corporation. 24 * All Rights Reserved. 25 */ 26 27 /* 28 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 29 * Use is subject to license terms. 30 */ 31 32 #ifndef _SYS_AGPMASTER_IO_H 33 #define _SYS_AGPMASTER_IO_H 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #ifdef _KERNEL 40 41 #define AGPMASTER_NAME "agpmaster" 42 #define AGPMASTER_DEVLINK "/dev/agp/agpmaster" 43 44 /* macros for layered ioctls */ 45 #define AGPMASTERIOC_BASE 'M' 46 #define DEVICE_DETECT _IOR(AGPMASTERIOC_BASE, 10, int) 47 #define I8XX_GET_INFO _IOR(AGPMASTERIOC_BASE, 11, igd_info_t) 48 #define I810_SET_GTT_BASE _IOW(AGPMASTERIOC_BASE, 12, uint32_t) 49 #define I8XX_ADD2GTT _IOW(AGPMASTERIOC_BASE, 13, igd_gtt_seg_t) 50 #define I8XX_REM_GTT _IOW(AGPMASTERIOC_BASE, 14, igd_gtt_seg_t) 51 #define I8XX_UNCONFIG _IO(AGPMASTERIOC_BASE, 16) 52 #define AGP_MASTER_GETINFO _IOR(AGPMASTERIOC_BASE, 20, agp_info_t) 53 #define AGP_MASTER_SETCMD _IOW(AGPMASTERIOC_BASE, 21, uint32_t) 54 55 /* used for IGD to bind/unbind gtt entries */ 56 typedef struct igd_gtt_seg { 57 uint32_t igs_pgstart; 58 uint32_t igs_npage; 59 uint32_t *igs_phyaddr; /* pointer to address array */ 60 uint32_t igs_type; /* reserved for other memory type */ 61 } igd_gtt_seg_t; 62 63 /* used for IGD to get info */ 64 typedef struct igd_info { 65 uint32_t igd_devid; 66 uint32_t igd_aperbase; 67 size_t igd_apersize; /* in MB */ 68 } igd_info_t; 69 70 typedef struct gtt_impl { 71 ddi_acc_handle_t gtt_mmio_handle; /* mmaped graph registers */ 72 caddr_t gtt_mmio_base; /* pointer to register base */ 73 ddi_acc_handle_t gtt_handle; /* GTT table */ 74 caddr_t gtt_addr; /* pointer to gtt */ 75 igd_info_t gtt_info; /* for I8XX_GET_INFO ioctl */ 76 } gtt_impl_t; 77 78 typedef struct agp_master_softc { 79 uint32_t agpm_id; /* agp master device id */ 80 ddi_acc_handle_t agpm_acc_hdl; /* agp master pci conf handle */ 81 int agpm_dev_type; /* which agp device type */ 82 union { 83 off_t agpm_acaptr; /* AGP capability reg pointer */ 84 gtt_impl_t agpm_gtt; /* for gtt table */ 85 } agpm_data; 86 } agp_master_softc_t; 87 88 extern int agpmaster_attach(dev_info_t *, agp_master_softc_t **, 89 ddi_acc_handle_t, minor_t); 90 extern void agpmaster_detach(agp_master_softc_t **); 91 extern int agpmaster_ioctl(dev_t dev, int cmd, intptr_t data, int mode, 92 cred_t *cred, int *rval, agp_master_softc_t *softc); 93 94 #endif /* _KERNEL */ 95 96 #ifdef __cplusplus 97 } 98 #endif 99 100 #endif /* _SYS_AGPMASTER_IO_H */