Wed Jul 24 03:18:05 2013 UTC ()
Add drm_io_mapping_create_wc to drmP.h.

Linux's io_mapping_create_wc just takes a bus address and a size, but
we need to pass along extra information, namely the bus space tag,
which we shall pass via a struct drm_device.


(riastradh)
diff -r1.1.1.1.2.45 -r1.1.1.1.2.46 src/sys/external/bsd/drm2/dist/include/drm/drmP.h

cvs diff -r1.1.1.1.2.45 -r1.1.1.1.2.46 src/sys/external/bsd/drm2/dist/include/drm/Attic/drmP.h (switch to unified diff)

--- src/sys/external/bsd/drm2/dist/include/drm/Attic/drmP.h 2013/07/24 03:15:28 1.1.1.1.2.45
+++ src/sys/external/bsd/drm2/dist/include/drm/Attic/drmP.h 2013/07/24 03:18:05 1.1.1.1.2.46
@@ -1143,1001 +1143,1016 @@ struct drm_debugfs_node { @@ -1143,1001 +1143,1016 @@ struct drm_debugfs_node {
1143 * be created by the drm core 1143 * be created by the drm core
1144 */ 1144 */
1145struct drm_info_list { 1145struct drm_info_list {
1146 const char *name; /** file name */ 1146 const char *name; /** file name */
1147 int (*show)(struct seq_file*, void*); /** show callback */ 1147 int (*show)(struct seq_file*, void*); /** show callback */
1148 u32 driver_features; /**< Required driver features for this entry */ 1148 u32 driver_features; /**< Required driver features for this entry */
1149 void *data; 1149 void *data;
1150}; 1150};
1151 1151
1152/** 1152/**
1153 * debugfs node structure. This structure represents a debugfs file. 1153 * debugfs node structure. This structure represents a debugfs file.
1154 */ 1154 */
1155struct drm_info_node { 1155struct drm_info_node {
1156 struct list_head list; 1156 struct list_head list;
1157 struct drm_minor *minor; 1157 struct drm_minor *minor;
1158 struct drm_info_list *info_ent; 1158 struct drm_info_list *info_ent;
1159 struct dentry *dent; 1159 struct dentry *dent;
1160}; 1160};
1161#endif 1161#endif
1162 1162
1163/** 1163/**
1164 * DRM minor structure. This structure represents a drm minor number. 1164 * DRM minor structure. This structure represents a drm minor number.
1165 */ 1165 */
1166struct drm_minor { 1166struct drm_minor {
1167 int index; /**< Minor device number */ 1167 int index; /**< Minor device number */
1168 int type; /**< Control or render */ 1168 int type; /**< Control or render */
1169 dev_t device; /**< Device number for mknod */ 1169 dev_t device; /**< Device number for mknod */
1170#ifdef __NetBSD__ 1170#ifdef __NetBSD__
1171 device_t kdev; /* NetBSD device */ 1171 device_t kdev; /* NetBSD device */
1172#else 1172#else
1173 struct device kdev; /**< Linux device */ 1173 struct device kdev; /**< Linux device */
1174#endif 1174#endif
1175 struct drm_device *dev; 1175 struct drm_device *dev;
1176 1176
1177#ifndef __NetBSD__ 1177#ifndef __NetBSD__
1178 struct proc_dir_entry *proc_root; /**< proc directory entry */ 1178 struct proc_dir_entry *proc_root; /**< proc directory entry */
1179 struct drm_info_node proc_nodes; 1179 struct drm_info_node proc_nodes;
1180 struct dentry *debugfs_root; 1180 struct dentry *debugfs_root;
1181 1181
1182 struct list_head debugfs_list; 1182 struct list_head debugfs_list;
1183 struct mutex debugfs_lock; /* Protects debugfs_list. */ 1183 struct mutex debugfs_lock; /* Protects debugfs_list. */
1184#endif 1184#endif
1185 1185
1186 struct drm_master *master; /* currently active master for this node */ 1186 struct drm_master *master; /* currently active master for this node */
1187 struct list_head master_list; 1187 struct list_head master_list;
1188 struct drm_mode_group mode_group; 1188 struct drm_mode_group mode_group;
1189}; 1189};
1190 1190
1191/* mode specified on the command line */ 1191/* mode specified on the command line */
1192struct drm_cmdline_mode { 1192struct drm_cmdline_mode {
1193 bool specified; 1193 bool specified;
1194 bool refresh_specified; 1194 bool refresh_specified;
1195 bool bpp_specified; 1195 bool bpp_specified;
1196 int xres, yres; 1196 int xres, yres;
1197 int bpp; 1197 int bpp;
1198 int refresh; 1198 int refresh;
1199 bool rb; 1199 bool rb;
1200 bool interlace; 1200 bool interlace;
1201 bool cvt; 1201 bool cvt;
1202 bool margins; 1202 bool margins;
1203 enum drm_connector_force force; 1203 enum drm_connector_force force;
1204}; 1204};
1205 1205
1206 1206
1207struct drm_pending_vblank_event { 1207struct drm_pending_vblank_event {
1208 struct drm_pending_event base; 1208 struct drm_pending_event base;
1209 int pipe; 1209 int pipe;
1210 struct drm_event_vblank event; 1210 struct drm_event_vblank event;
1211}; 1211};
1212 1212
1213/** 1213/**
1214 * DRM device structure. This structure represent a complete card that 1214 * DRM device structure. This structure represent a complete card that
1215 * may contain multiple heads. 1215 * may contain multiple heads.
1216 */ 1216 */
1217struct drm_device { 1217struct drm_device {
1218 struct list_head driver_item; /**< list of devices per driver */ 1218 struct list_head driver_item; /**< list of devices per driver */
1219 char *devname; /**< For /proc/interrupts */ 1219 char *devname; /**< For /proc/interrupts */
1220 int if_version; /**< Highest interface version set */ 1220 int if_version; /**< Highest interface version set */
1221 1221
1222 /** \name Locks */ 1222 /** \name Locks */
1223 /*@{ */ 1223 /*@{ */
1224 spinlock_t count_lock; /**< For inuse, drm_device::open_count, drm_device::buf_use */ 1224 spinlock_t count_lock; /**< For inuse, drm_device::open_count, drm_device::buf_use */
1225 struct mutex struct_mutex; /**< For others */ 1225 struct mutex struct_mutex; /**< For others */
1226 /*@} */ 1226 /*@} */
1227 1227
1228 /** \name Usage Counters */ 1228 /** \name Usage Counters */
1229 /*@{ */ 1229 /*@{ */
1230 int open_count; /**< Outstanding files open */ 1230 int open_count; /**< Outstanding files open */
1231 atomic_t ioctl_count; /**< Outstanding IOCTLs pending */ 1231 atomic_t ioctl_count; /**< Outstanding IOCTLs pending */
1232 atomic_t vma_count; /**< Outstanding vma areas open */ 1232 atomic_t vma_count; /**< Outstanding vma areas open */
1233 int buf_use; /**< Buffers in use -- cannot alloc */ 1233 int buf_use; /**< Buffers in use -- cannot alloc */
1234 atomic_t buf_alloc; /**< Buffer allocation in progress */ 1234 atomic_t buf_alloc; /**< Buffer allocation in progress */
1235 /*@} */ 1235 /*@} */
1236 1236
1237 /** \name Performance counters */ 1237 /** \name Performance counters */
1238 /*@{ */ 1238 /*@{ */
1239 unsigned long counters; 1239 unsigned long counters;
1240 enum drm_stat_type types[15]; 1240 enum drm_stat_type types[15];
1241 atomic_t counts[15]; 1241 atomic_t counts[15];
1242 /*@} */ 1242 /*@} */
1243 1243
1244 struct list_head filelist; 1244 struct list_head filelist;
1245 1245
1246 /** \name Memory management */ 1246 /** \name Memory management */
1247 /*@{ */ 1247 /*@{ */
1248 struct list_head maplist; /**< Linked list of regions */ 1248 struct list_head maplist; /**< Linked list of regions */
1249 int map_count; /**< Number of mappable regions */ 1249 int map_count; /**< Number of mappable regions */
1250 struct drm_open_hash map_hash; /**< User token hash table for maps */ 1250 struct drm_open_hash map_hash; /**< User token hash table for maps */
1251 1251
1252 /** \name Context handle management */ 1252 /** \name Context handle management */
1253 /*@{ */ 1253 /*@{ */
1254 struct list_head ctxlist; /**< Linked list of context handles */ 1254 struct list_head ctxlist; /**< Linked list of context handles */
1255 int ctx_count; /**< Number of context handles */ 1255 int ctx_count; /**< Number of context handles */
1256 struct mutex ctxlist_mutex; /**< For ctxlist */ 1256 struct mutex ctxlist_mutex; /**< For ctxlist */
1257 1257
1258 struct idr ctx_idr; 1258 struct idr ctx_idr;
1259 1259
1260 struct list_head vmalist; /**< List of vmas (for debugging) */ 1260 struct list_head vmalist; /**< List of vmas (for debugging) */
1261 1261
1262 /*@} */ 1262 /*@} */
1263 1263
1264 /** \name DMA support */ 1264 /** \name DMA support */
1265 /*@{ */ 1265 /*@{ */
1266 struct drm_device_dma *dma; /**< Optional pointer for DMA support */ 1266 struct drm_device_dma *dma; /**< Optional pointer for DMA support */
1267 /*@} */ 1267 /*@} */
1268 1268
1269 /** \name Context support */ 1269 /** \name Context support */
1270 /*@{ */ 1270 /*@{ */
1271 int irq_enabled; /**< True if irq handler is enabled */ 1271 int irq_enabled; /**< True if irq handler is enabled */
1272#ifdef __NetBSD__ 1272#ifdef __NetBSD__
1273 struct drm_bus_irq_cookie *irq_cookie; 1273 struct drm_bus_irq_cookie *irq_cookie;
1274#endif 1274#endif
1275 __volatile__ long context_flag; /**< Context swapping flag */ 1275 __volatile__ long context_flag; /**< Context swapping flag */
1276 __volatile__ long interrupt_flag; /**< Interruption handler flag */ 1276 __volatile__ long interrupt_flag; /**< Interruption handler flag */
1277 __volatile__ long dma_flag; /**< DMA dispatch flag */ 1277 __volatile__ long dma_flag; /**< DMA dispatch flag */
1278#ifdef __NetBSD__ 1278#ifdef __NetBSD__
1279 drm_waitqueue_t context_wait; /**< Processes waiting on ctx switch */ 1279 drm_waitqueue_t context_wait; /**< Processes waiting on ctx switch */
1280#else 1280#else
1281 wait_queue_head_t context_wait; /**< Processes waiting on ctx switch */ 1281 wait_queue_head_t context_wait; /**< Processes waiting on ctx switch */
1282#endif 1282#endif
1283 int last_checked; /**< Last context checked for DMA */ 1283 int last_checked; /**< Last context checked for DMA */
1284 int last_context; /**< Last current context */ 1284 int last_context; /**< Last current context */
1285#ifndef __NetBSD__ 1285#ifndef __NetBSD__
1286 /* XXX Nobody seems to use this. */ 1286 /* XXX Nobody seems to use this. */
1287 unsigned long last_switch; /**< jiffies at last context switch */ 1287 unsigned long last_switch; /**< jiffies at last context switch */
1288#endif 1288#endif
1289 /*@} */ 1289 /*@} */
1290 1290
1291 struct work_struct work; 1291 struct work_struct work;
1292 /** \name VBLANK IRQ support */ 1292 /** \name VBLANK IRQ support */
1293 /*@{ */ 1293 /*@{ */
1294 1294
1295 /* 1295 /*
1296 * At load time, disabling the vblank interrupt won't be allowed since 1296 * At load time, disabling the vblank interrupt won't be allowed since
1297 * old clients may not call the modeset ioctl and therefore misbehave. 1297 * old clients may not call the modeset ioctl and therefore misbehave.
1298 * Once the modeset ioctl *has* been called though, we can safely 1298 * Once the modeset ioctl *has* been called though, we can safely
1299 * disable them when unused. 1299 * disable them when unused.
1300 */ 1300 */
1301 int vblank_disable_allowed; 1301 int vblank_disable_allowed;
1302 1302
1303#ifdef __NetBSD__ 1303#ifdef __NetBSD__
1304 drm_waitqueue_t *vbl_queue; /**< VBLANK wait queue */ 1304 drm_waitqueue_t *vbl_queue; /**< VBLANK wait queue */
1305#else 1305#else
1306 wait_queue_head_t *vbl_queue; /**< VBLANK wait queue */ 1306 wait_queue_head_t *vbl_queue; /**< VBLANK wait queue */
1307#endif 1307#endif
1308 atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */ 1308 atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */
1309 struct timeval *_vblank_time; /**< timestamp of current vblank_count (drivers must alloc right number of fields) */ 1309 struct timeval *_vblank_time; /**< timestamp of current vblank_count (drivers must alloc right number of fields) */
1310 spinlock_t vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */ 1310 spinlock_t vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */
1311 spinlock_t vbl_lock; 1311 spinlock_t vbl_lock;
1312 atomic_t *vblank_refcount; /* number of users of vblank interruptsper crtc */ 1312 atomic_t *vblank_refcount; /* number of users of vblank interruptsper crtc */
1313 u32 *last_vblank; /* protected by dev->vbl_lock, used */ 1313 u32 *last_vblank; /* protected by dev->vbl_lock, used */
1314 /* for wraparound handling */ 1314 /* for wraparound handling */
1315 int *vblank_enabled; /* so we don't call enable more than 1315 int *vblank_enabled; /* so we don't call enable more than
1316 once per disable */ 1316 once per disable */
1317 int *vblank_inmodeset; /* Display driver is setting mode */ 1317 int *vblank_inmodeset; /* Display driver is setting mode */
1318 u32 *last_vblank_wait; /* Last vblank seqno waited per CRTC */ 1318 u32 *last_vblank_wait; /* Last vblank seqno waited per CRTC */
1319 struct timer_list vblank_disable_timer; 1319 struct timer_list vblank_disable_timer;
1320 1320
1321 u32 max_vblank_count; /**< size of vblank counter register */ 1321 u32 max_vblank_count; /**< size of vblank counter register */
1322 1322
1323 /** 1323 /**
1324 * List of events 1324 * List of events
1325 */ 1325 */
1326 struct list_head vblank_event_list; 1326 struct list_head vblank_event_list;
1327 spinlock_t event_lock; 1327 spinlock_t event_lock;
1328 1328
1329 /*@} */ 1329 /*@} */
1330 cycles_t ctx_start; 1330 cycles_t ctx_start;
1331 cycles_t lck_start; 1331 cycles_t lck_start;
1332 1332
1333 struct fasync_struct *buf_async;/**< Processes waiting for SIGIO */ 1333 struct fasync_struct *buf_async;/**< Processes waiting for SIGIO */
1334#ifdef __NetBSD__ 1334#ifdef __NetBSD__
1335 drm_waitqueue_t buf_readers; /**< Processes waiting to read */ 1335 drm_waitqueue_t buf_readers; /**< Processes waiting to read */
1336 drm_waitqueue_t buf_writers; /**< Processes waiting to ctx switch */ 1336 drm_waitqueue_t buf_writers; /**< Processes waiting to ctx switch */
1337#else 1337#else
1338 wait_queue_head_t buf_readers; /**< Processes waiting to read */ 1338 wait_queue_head_t buf_readers; /**< Processes waiting to read */
1339 wait_queue_head_t buf_writers; /**< Processes waiting to ctx switch */ 1339 wait_queue_head_t buf_writers; /**< Processes waiting to ctx switch */
1340#endif 1340#endif
1341 1341
1342 struct drm_agp_head *agp; /**< AGP data */ 1342 struct drm_agp_head *agp; /**< AGP data */
1343 1343
1344 struct device *dev; /**< Device structure */ 1344 struct device *dev; /**< Device structure */
1345 struct pci_dev *pdev; /**< PCI device structure */ 1345 struct pci_dev *pdev; /**< PCI device structure */
1346 int pci_vendor; /**< PCI vendor id */ 1346 int pci_vendor; /**< PCI vendor id */
1347 int pci_device; /**< PCI device id */ 1347 int pci_device; /**< PCI device id */
1348#ifdef __alpha__ 1348#ifdef __alpha__
1349 struct pci_controller *hose; 1349 struct pci_controller *hose;
1350#endif 1350#endif
1351 1351
1352 struct platform_device *platformdev; /**< Platform device struture */ 1352 struct platform_device *platformdev; /**< Platform device struture */
1353 struct usb_device *usbdev; 1353 struct usb_device *usbdev;
1354 1354
1355#ifdef __NetBSD__ 1355#ifdef __NetBSD__
1356 bus_space_tag_t bst; 1356 bus_space_tag_t bst;
1357 struct drm_bus_map *bus_maps; 1357 struct drm_bus_map *bus_maps;
1358 size_t bus_nmaps; 1358 size_t bus_nmaps;
1359 /* XXX What does this have to do with AGP? */ 1359 /* XXX What does this have to do with AGP? */
1360 struct drm_bus_map *agp_maps; 1360 struct drm_bus_map *agp_maps;
1361 size_t agp_nmaps; 1361 size_t agp_nmaps;
1362 bus_dma_tag_t bus_dmat; 1362 bus_dma_tag_t bus_dmat;
1363 bus_dma_tag_t dmat; 1363 bus_dma_tag_t dmat;
1364 bool dmat_subregion_p; 1364 bool dmat_subregion_p;
1365 bus_addr_t dmat_subregion_min; 1365 bus_addr_t dmat_subregion_min;
1366 bus_addr_t dmat_subregion_max; 1366 bus_addr_t dmat_subregion_max;
1367#endif 1367#endif
1368 1368
1369 struct drm_sg_mem *sg; /**< Scatter gather memory */ 1369 struct drm_sg_mem *sg; /**< Scatter gather memory */
1370 unsigned int num_crtcs; /**< Number of CRTCs on this device */ 1370 unsigned int num_crtcs; /**< Number of CRTCs on this device */
1371 void *dev_private; /**< device private data */ 1371 void *dev_private; /**< device private data */
1372 void *mm_private; 1372 void *mm_private;
1373 struct address_space *dev_mapping; 1373 struct address_space *dev_mapping;
1374 struct drm_sigdata sigdata; /**< For block_all_signals */ 1374 struct drm_sigdata sigdata; /**< For block_all_signals */
1375#ifndef __NetBSD__ 1375#ifndef __NetBSD__
1376 sigset_t sigmask; 1376 sigset_t sigmask;
1377#endif 1377#endif
1378 1378
1379 struct drm_driver *driver; 1379 struct drm_driver *driver;
1380 struct drm_local_map *agp_buffer_map; 1380 struct drm_local_map *agp_buffer_map;
1381 unsigned int agp_buffer_token; 1381 unsigned int agp_buffer_token;
1382 struct drm_minor *control; /**< Control node for card */ 1382 struct drm_minor *control; /**< Control node for card */
1383 struct drm_minor *primary; /**< render type primary screen head */ 1383 struct drm_minor *primary; /**< render type primary screen head */
1384 1384
1385 struct drm_mode_config mode_config; /**< Current mode config */ 1385 struct drm_mode_config mode_config; /**< Current mode config */
1386 1386
1387 /** \name GEM information */ 1387 /** \name GEM information */
1388 /*@{ */ 1388 /*@{ */
1389 spinlock_t object_name_lock; 1389 spinlock_t object_name_lock;
1390 struct idr object_name_idr; 1390 struct idr object_name_idr;
1391 /*@} */ 1391 /*@} */
1392 int switch_power_state; 1392 int switch_power_state;
1393 1393
1394 atomic_t unplugged; /* device has been unplugged or gone away */ 1394 atomic_t unplugged; /* device has been unplugged or gone away */
1395}; 1395};
1396 1396
1397#define DRM_SWITCH_POWER_ON 0 1397#define DRM_SWITCH_POWER_ON 0
1398#define DRM_SWITCH_POWER_OFF 1 1398#define DRM_SWITCH_POWER_OFF 1
1399#define DRM_SWITCH_POWER_CHANGING 2 1399#define DRM_SWITCH_POWER_CHANGING 2
1400 1400
1401static __inline__ int drm_core_check_feature(struct drm_device *dev, 1401static __inline__ int drm_core_check_feature(struct drm_device *dev,
1402 int feature) 1402 int feature)
1403{ 1403{
1404 return ((dev->driver->driver_features & feature) ? 1 : 0); 1404 return ((dev->driver->driver_features & feature) ? 1 : 0);
1405} 1405}
1406 1406
1407static inline int drm_dev_to_irq(struct drm_device *dev) 1407static inline int drm_dev_to_irq(struct drm_device *dev)
1408{ 1408{
1409 return dev->driver->bus->get_irq(dev); 1409 return dev->driver->bus->get_irq(dev);
1410} 1410}
1411 1411
1412 1412
1413#if __OS_HAS_AGP 1413#if __OS_HAS_AGP
1414static inline int drm_core_has_AGP(struct drm_device *dev) 1414static inline int drm_core_has_AGP(struct drm_device *dev)
1415{ 1415{
1416 return drm_core_check_feature(dev, DRIVER_USE_AGP); 1416 return drm_core_check_feature(dev, DRIVER_USE_AGP);
1417} 1417}
1418#else 1418#else
1419#define drm_core_has_AGP(dev) (0) 1419#define drm_core_has_AGP(dev) (0)
1420#endif 1420#endif
1421 1421
1422#if __OS_HAS_MTRR 1422#if __OS_HAS_MTRR
1423static inline int drm_core_has_MTRR(struct drm_device *dev) 1423static inline int drm_core_has_MTRR(struct drm_device *dev)
1424{ 1424{
1425 return drm_core_check_feature(dev, DRIVER_USE_MTRR); 1425 return drm_core_check_feature(dev, DRIVER_USE_MTRR);
1426} 1426}
1427 1427
1428#define DRM_MTRR_WC MTRR_TYPE_WRCOMB 1428#define DRM_MTRR_WC MTRR_TYPE_WRCOMB
1429 1429
1430static inline int drm_mtrr_add(unsigned long offset, unsigned long size, 1430static inline int drm_mtrr_add(unsigned long offset, unsigned long size,
1431 unsigned int flags) 1431 unsigned int flags)
1432{ 1432{
1433 return mtrr_add(offset, size, flags, 1); 1433 return mtrr_add(offset, size, flags, 1);
1434} 1434}
1435 1435
1436static inline int drm_mtrr_del(int handle, unsigned long offset, 1436static inline int drm_mtrr_del(int handle, unsigned long offset,
1437 unsigned long size, unsigned int flags) 1437 unsigned long size, unsigned int flags)
1438{ 1438{
1439 return mtrr_del(handle, offset, size); 1439 return mtrr_del(handle, offset, size);
1440} 1440}
1441 1441
1442#else 1442#else
1443#define drm_core_has_MTRR(dev) (0) 1443#define drm_core_has_MTRR(dev) (0)
1444 1444
1445#define DRM_MTRR_WC 0 1445#define DRM_MTRR_WC 0
1446 1446
1447static inline int drm_mtrr_add(unsigned long offset, unsigned long size, 1447static inline int drm_mtrr_add(unsigned long offset, unsigned long size,
1448 unsigned int flags) 1448 unsigned int flags)
1449{ 1449{
1450 return 0; 1450 return 0;
1451} 1451}
1452 1452
1453static inline int drm_mtrr_del(int handle, unsigned long offset, 1453static inline int drm_mtrr_del(int handle, unsigned long offset,
1454 unsigned long size, unsigned int flags) 1454 unsigned long size, unsigned int flags)
1455{ 1455{
1456 return 0; 1456 return 0;
1457} 1457}
1458#endif 1458#endif
1459 1459
1460static inline void drm_device_set_unplugged(struct drm_device *dev) 1460static inline void drm_device_set_unplugged(struct drm_device *dev)
1461{ 1461{
1462 smp_wmb(); 1462 smp_wmb();
1463 atomic_set(&dev->unplugged, 1); 1463 atomic_set(&dev->unplugged, 1);
1464} 1464}
1465 1465
1466static inline int drm_device_is_unplugged(struct drm_device *dev) 1466static inline int drm_device_is_unplugged(struct drm_device *dev)
1467{ 1467{
1468 int ret = atomic_read(&dev->unplugged); 1468 int ret = atomic_read(&dev->unplugged);
1469 smp_rmb(); 1469 smp_rmb();
1470 return ret; 1470 return ret;
1471} 1471}
1472 1472
1473/******************************************************************/ 1473/******************************************************************/
1474/** \name Internal function definitions */ 1474/** \name Internal function definitions */
1475/*@{*/ 1475/*@{*/
1476 1476
1477#ifndef __NetBSD__ /* XXX temporary measure 20130212 */ 1477#ifndef __NetBSD__ /* XXX temporary measure 20130212 */
1478 1478
1479 /* Driver support (drm_drv.h) */ 1479 /* Driver support (drm_drv.h) */
1480extern long drm_ioctl(struct file *filp, 1480extern long drm_ioctl(struct file *filp,
1481 unsigned int cmd, unsigned long arg); 1481 unsigned int cmd, unsigned long arg);
1482extern long drm_compat_ioctl(struct file *filp, 1482extern long drm_compat_ioctl(struct file *filp,
1483 unsigned int cmd, unsigned long arg); 1483 unsigned int cmd, unsigned long arg);
1484extern int drm_lastclose(struct drm_device *dev); 1484extern int drm_lastclose(struct drm_device *dev);
1485#endif 1485#endif
1486 1486
1487 /* Device support (drm_fops.h) */ 1487 /* Device support (drm_fops.h) */
1488extern struct mutex drm_global_mutex; 1488extern struct mutex drm_global_mutex;
1489#ifdef __NetBSD__ 1489#ifdef __NetBSD__
1490extern int drm_open_file(struct drm_file *, void *, struct drm_minor *); 1490extern int drm_open_file(struct drm_file *, void *, struct drm_minor *);
1491extern int drm_close_file(struct drm_file *); 1491extern int drm_close_file(struct drm_file *);
1492#if 0 /* XXX drm event poll */ 1492#if 0 /* XXX drm event poll */
1493extern int drm_dequeue_event(struct drm_file *, size_t, 1493extern int drm_dequeue_event(struct drm_file *, size_t,
1494 struct drm_pending_event **); 1494 struct drm_pending_event **);
1495#endif 1495#endif
1496extern void drm_lastclose(struct drm_device *); 1496extern void drm_lastclose(struct drm_device *);
1497#else 1497#else
1498extern int drm_open(struct inode *inode, struct file *filp); 1498extern int drm_open(struct inode *inode, struct file *filp);
1499extern int drm_stub_open(struct inode *inode, struct file *filp); 1499extern int drm_stub_open(struct inode *inode, struct file *filp);
1500extern int drm_fasync(int fd, struct file *filp, int on); 1500extern int drm_fasync(int fd, struct file *filp, int on);
1501extern ssize_t drm_read(struct file *filp, char __user *buffer, 1501extern ssize_t drm_read(struct file *filp, char __user *buffer,
1502 size_t count, loff_t *offset); 1502 size_t count, loff_t *offset);
1503extern int drm_release(struct inode *inode, struct file *filp); 1503extern int drm_release(struct inode *inode, struct file *filp);
1504#endif 1504#endif
1505 1505
1506 /* Mapping support (drm_vm.h) */ 1506 /* Mapping support (drm_vm.h) */
1507#ifdef __NetBSD__ 1507#ifdef __NetBSD__
1508extern paddr_t drm_mmap_paddr(struct drm_device *, off_t, int); 1508extern paddr_t drm_mmap_paddr(struct drm_device *, off_t, int);
1509#else 1509#else
1510extern int drm_mmap(struct file *filp, struct vm_area_struct *vma); 1510extern int drm_mmap(struct file *filp, struct vm_area_struct *vma);
1511extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma); 1511extern int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma);
1512extern void drm_vm_open_locked(struct drm_device *dev, struct vm_area_struct *vma); 1512extern void drm_vm_open_locked(struct drm_device *dev, struct vm_area_struct *vma);
1513extern void drm_vm_close_locked(struct drm_device *dev, struct vm_area_struct *vma); 1513extern void drm_vm_close_locked(struct drm_device *dev, struct vm_area_struct *vma);
1514extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait); 1514extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
1515 1515
1516#endif 1516#endif
1517 1517
1518 /* Memory management support (drm_memory.h) */ 1518 /* Memory management support (drm_memory.h) */
1519#include <drm/drm_memory.h> 1519#include <drm/drm_memory.h>
1520#ifndef __NetBSD__ 1520#ifndef __NetBSD__
1521extern void drm_free_agp(DRM_AGP_MEM * handle, int pages); 1521extern void drm_free_agp(DRM_AGP_MEM * handle, int pages);
1522extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start); 1522extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
1523extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev, 1523extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
1524 struct page **pages, 1524 struct page **pages,
1525 unsigned long num_pages, 1525 unsigned long num_pages,
1526 uint32_t gtt_offset, 1526 uint32_t gtt_offset,
1527 uint32_t type); 1527 uint32_t type);
1528extern int drm_unbind_agp(DRM_AGP_MEM * handle); 1528extern int drm_unbind_agp(DRM_AGP_MEM * handle);
1529#endif 1529#endif
1530#ifdef __NetBSD__ 1530#ifdef __NetBSD__
1531extern void *drm_ioremap(struct drm_device *dev, struct drm_local_map *map); 1531extern void *drm_ioremap(struct drm_device *dev, struct drm_local_map *map);
1532extern void drm_iounmap(struct drm_device *dev, struct drm_local_map *map); 1532extern void drm_iounmap(struct drm_device *dev, struct drm_local_map *map);
1533extern int drm_limit_dma_space(struct drm_device *, resource_size_t, 1533extern int drm_limit_dma_space(struct drm_device *, resource_size_t,
1534 resource_size_t); 1534 resource_size_t);
1535#endif 1535#endif
1536 1536
1537 /* Misc. IOCTL support (drm_ioctl.h) */ 1537 /* Misc. IOCTL support (drm_ioctl.h) */
1538extern int drm_irq_by_busid(struct drm_device *dev, void *data, 1538extern int drm_irq_by_busid(struct drm_device *dev, void *data,
1539 struct drm_file *file_priv); 1539 struct drm_file *file_priv);
1540extern int drm_getunique(struct drm_device *dev, void *data, 1540extern int drm_getunique(struct drm_device *dev, void *data,
1541 struct drm_file *file_priv); 1541 struct drm_file *file_priv);
1542extern int drm_setunique(struct drm_device *dev, void *data, 1542extern int drm_setunique(struct drm_device *dev, void *data,
1543 struct drm_file *file_priv); 1543 struct drm_file *file_priv);
1544extern int drm_getmap(struct drm_device *dev, void *data, 1544extern int drm_getmap(struct drm_device *dev, void *data,
1545 struct drm_file *file_priv); 1545 struct drm_file *file_priv);
1546extern int drm_getclient(struct drm_device *dev, void *data, 1546extern int drm_getclient(struct drm_device *dev, void *data,
1547 struct drm_file *file_priv); 1547 struct drm_file *file_priv);
1548extern int drm_getstats(struct drm_device *dev, void *data, 1548extern int drm_getstats(struct drm_device *dev, void *data,
1549 struct drm_file *file_priv); 1549 struct drm_file *file_priv);
1550extern int drm_getcap(struct drm_device *dev, void *data, 1550extern int drm_getcap(struct drm_device *dev, void *data,
1551 struct drm_file *file_priv); 1551 struct drm_file *file_priv);
1552extern int drm_setversion(struct drm_device *dev, void *data, 1552extern int drm_setversion(struct drm_device *dev, void *data,
1553 struct drm_file *file_priv); 1553 struct drm_file *file_priv);
1554extern int drm_noop(struct drm_device *dev, void *data, 1554extern int drm_noop(struct drm_device *dev, void *data,
1555 struct drm_file *file_priv); 1555 struct drm_file *file_priv);
1556 1556
1557 /* Context IOCTL support (drm_context.h) */ 1557 /* Context IOCTL support (drm_context.h) */
1558extern int drm_resctx(struct drm_device *dev, void *data, 1558extern int drm_resctx(struct drm_device *dev, void *data,
1559 struct drm_file *file_priv); 1559 struct drm_file *file_priv);
1560extern int drm_addctx(struct drm_device *dev, void *data, 1560extern int drm_addctx(struct drm_device *dev, void *data,
1561 struct drm_file *file_priv); 1561 struct drm_file *file_priv);
1562extern int drm_modctx(struct drm_device *dev, void *data, 1562extern int drm_modctx(struct drm_device *dev, void *data,
1563 struct drm_file *file_priv); 1563 struct drm_file *file_priv);
1564extern int drm_getctx(struct drm_device *dev, void *data, 1564extern int drm_getctx(struct drm_device *dev, void *data,
1565 struct drm_file *file_priv); 1565 struct drm_file *file_priv);
1566extern int drm_switchctx(struct drm_device *dev, void *data, 1566extern int drm_switchctx(struct drm_device *dev, void *data,
1567 struct drm_file *file_priv); 1567 struct drm_file *file_priv);
1568extern int drm_newctx(struct drm_device *dev, void *data, 1568extern int drm_newctx(struct drm_device *dev, void *data,
1569 struct drm_file *file_priv); 1569 struct drm_file *file_priv);
1570extern int drm_rmctx(struct drm_device *dev, void *data, 1570extern int drm_rmctx(struct drm_device *dev, void *data,
1571 struct drm_file *file_priv); 1571 struct drm_file *file_priv);
1572 1572
1573extern int drm_ctxbitmap_init(struct drm_device *dev); 1573extern int drm_ctxbitmap_init(struct drm_device *dev);
1574extern void drm_ctxbitmap_cleanup(struct drm_device *dev); 1574extern void drm_ctxbitmap_cleanup(struct drm_device *dev);
1575extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle); 1575extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
1576 1576
1577extern int drm_setsareactx(struct drm_device *dev, void *data, 1577extern int drm_setsareactx(struct drm_device *dev, void *data,
1578 struct drm_file *file_priv); 1578 struct drm_file *file_priv);
1579extern int drm_getsareactx(struct drm_device *dev, void *data, 1579extern int drm_getsareactx(struct drm_device *dev, void *data,
1580 struct drm_file *file_priv); 1580 struct drm_file *file_priv);
1581 1581
1582 /* Authentication IOCTL support (drm_auth.h) */ 1582 /* Authentication IOCTL support (drm_auth.h) */
1583extern int drm_getmagic(struct drm_device *dev, void *data, 1583extern int drm_getmagic(struct drm_device *dev, void *data,
1584 struct drm_file *file_priv); 1584 struct drm_file *file_priv);
1585extern int drm_authmagic(struct drm_device *dev, void *data, 1585extern int drm_authmagic(struct drm_device *dev, void *data,
1586 struct drm_file *file_priv); 1586 struct drm_file *file_priv);
1587extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic); 1587extern int drm_remove_magic(struct drm_master *master, drm_magic_t magic);
1588 1588
1589#ifndef __NetBSD__ /* XXX temporary measure 20130212 */ 1589#ifndef __NetBSD__ /* XXX temporary measure 20130212 */
1590/* Cache management (drm_cache.c) */ 1590/* Cache management (drm_cache.c) */
1591void drm_clflush_pages(struct page *pages[], unsigned long num_pages); 1591void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
1592void drm_clflush_sg(struct sg_table *st); 1592void drm_clflush_sg(struct sg_table *st);
1593void drm_clflush_virt_range(char *addr, unsigned long length); 1593void drm_clflush_virt_range(char *addr, unsigned long length);
1594#endif 1594#endif
1595 1595
1596 /* Locking IOCTL support (drm_lock.h) */ 1596 /* Locking IOCTL support (drm_lock.h) */
1597extern int drm_lock(struct drm_device *dev, void *data, 1597extern int drm_lock(struct drm_device *dev, void *data,
1598 struct drm_file *file_priv); 1598 struct drm_file *file_priv);
1599extern int drm_unlock(struct drm_device *dev, void *data, 1599extern int drm_unlock(struct drm_device *dev, void *data,
1600 struct drm_file *file_priv); 1600 struct drm_file *file_priv);
1601extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context); 1601extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
1602extern void drm_idlelock_take(struct drm_lock_data *lock_data); 1602extern void drm_idlelock_take(struct drm_lock_data *lock_data);
1603extern void drm_idlelock_release(struct drm_lock_data *lock_data); 1603extern void drm_idlelock_release(struct drm_lock_data *lock_data);
1604 1604
1605/* 1605/*
1606 * These are exported to drivers so that they can implement fencing using 1606 * These are exported to drivers so that they can implement fencing using
1607 * DMA quiscent + idle. DMA quiescent usually requires the hardware lock. 1607 * DMA quiscent + idle. DMA quiescent usually requires the hardware lock.
1608 */ 1608 */
1609 1609
1610extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv); 1610extern int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv);
1611 1611
1612 /* Buffer management support (drm_bufs.h) */ 1612 /* Buffer management support (drm_bufs.h) */
1613extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); 1613extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
1614extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request); 1614extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request);
1615extern int drm_addmap(struct drm_device *dev, resource_size_t offset, 1615extern int drm_addmap(struct drm_device *dev, resource_size_t offset,
1616 unsigned int size, enum drm_map_type type, 1616 unsigned int size, enum drm_map_type type,
1617 enum drm_map_flags flags, struct drm_local_map **map_ptr); 1617 enum drm_map_flags flags, struct drm_local_map **map_ptr);
1618extern int drm_addmap_ioctl(struct drm_device *dev, void *data, 1618extern int drm_addmap_ioctl(struct drm_device *dev, void *data,
1619 struct drm_file *file_priv); 1619 struct drm_file *file_priv);
1620extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map); 1620extern int drm_rmmap(struct drm_device *dev, struct drm_local_map *map);
1621extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map); 1621extern int drm_rmmap_locked(struct drm_device *dev, struct drm_local_map *map);
1622extern int drm_rmmap_ioctl(struct drm_device *dev, void *data, 1622extern int drm_rmmap_ioctl(struct drm_device *dev, void *data,
1623 struct drm_file *file_priv); 1623 struct drm_file *file_priv);
1624extern int drm_addbufs(struct drm_device *dev, void *data, 1624extern int drm_addbufs(struct drm_device *dev, void *data,
1625 struct drm_file *file_priv); 1625 struct drm_file *file_priv);
1626extern int drm_infobufs(struct drm_device *dev, void *data, 1626extern int drm_infobufs(struct drm_device *dev, void *data,
1627 struct drm_file *file_priv); 1627 struct drm_file *file_priv);
1628extern int drm_markbufs(struct drm_device *dev, void *data, 1628extern int drm_markbufs(struct drm_device *dev, void *data,
1629 struct drm_file *file_priv); 1629 struct drm_file *file_priv);
1630extern int drm_freebufs(struct drm_device *dev, void *data, 1630extern int drm_freebufs(struct drm_device *dev, void *data,
1631 struct drm_file *file_priv); 1631 struct drm_file *file_priv);
1632extern int drm_mapbufs(struct drm_device *dev, void *data, 1632extern int drm_mapbufs(struct drm_device *dev, void *data,
1633 struct drm_file *file_priv); 1633 struct drm_file *file_priv);
1634extern int drm_order(unsigned long size); 1634extern int drm_order(unsigned long size);
1635 1635
1636 /* DMA support (drm_dma.h) */ 1636 /* DMA support (drm_dma.h) */
1637extern int drm_dma_setup(struct drm_device *dev); 1637extern int drm_dma_setup(struct drm_device *dev);
1638extern void drm_dma_takedown(struct drm_device *dev); 1638extern void drm_dma_takedown(struct drm_device *dev);
1639extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf); 1639extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf);
1640extern void drm_core_reclaim_buffers(struct drm_device *dev, 1640extern void drm_core_reclaim_buffers(struct drm_device *dev,
1641 struct drm_file *filp); 1641 struct drm_file *filp);
1642 1642
1643 /* IRQ support (drm_irq.h) */ 1643 /* IRQ support (drm_irq.h) */
1644extern int drm_control(struct drm_device *dev, void *data, 1644extern int drm_control(struct drm_device *dev, void *data,
1645 struct drm_file *file_priv); 1645 struct drm_file *file_priv);
1646extern int drm_irq_install(struct drm_device *dev); 1646extern int drm_irq_install(struct drm_device *dev);
1647extern int drm_irq_uninstall(struct drm_device *dev); 1647extern int drm_irq_uninstall(struct drm_device *dev);
1648 1648
1649extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); 1649extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);
1650extern int drm_wait_vblank(struct drm_device *dev, void *data, 1650extern int drm_wait_vblank(struct drm_device *dev, void *data,
1651 struct drm_file *filp); 1651 struct drm_file *filp);
1652extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); 1652extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
1653extern u32 drm_vblank_count(struct drm_device *dev, int crtc); 1653extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
1654extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc, 1654extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc,
1655 struct timeval *vblanktime); 1655 struct timeval *vblanktime);
1656extern void drm_send_vblank_event(struct drm_device *dev, int crtc, 1656extern void drm_send_vblank_event(struct drm_device *dev, int crtc,
1657 struct drm_pending_vblank_event *e); 1657 struct drm_pending_vblank_event *e);
1658extern bool drm_handle_vblank(struct drm_device *dev, int crtc); 1658extern bool drm_handle_vblank(struct drm_device *dev, int crtc);
1659extern int drm_vblank_get(struct drm_device *dev, int crtc); 1659extern int drm_vblank_get(struct drm_device *dev, int crtc);
1660extern void drm_vblank_put(struct drm_device *dev, int crtc); 1660extern void drm_vblank_put(struct drm_device *dev, int crtc);
1661extern void drm_vblank_off(struct drm_device *dev, int crtc); 1661extern void drm_vblank_off(struct drm_device *dev, int crtc);
1662extern void drm_vblank_cleanup(struct drm_device *dev); 1662extern void drm_vblank_cleanup(struct drm_device *dev);
1663extern u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc, 1663extern u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc,
1664 struct timeval *tvblank, unsigned flags); 1664 struct timeval *tvblank, unsigned flags);
1665extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, 1665extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
1666 int crtc, int *max_error, 1666 int crtc, int *max_error,
1667 struct timeval *vblank_time, 1667 struct timeval *vblank_time,
1668 unsigned flags, 1668 unsigned flags,
1669 struct drm_crtc *refcrtc); 1669 struct drm_crtc *refcrtc);
1670extern void drm_calc_timestamping_constants(struct drm_crtc *crtc); 1670extern void drm_calc_timestamping_constants(struct drm_crtc *crtc);
1671 1671
1672extern bool 1672extern bool
1673drm_mode_parse_command_line_for_connector(const char *mode_option, 1673drm_mode_parse_command_line_for_connector(const char *mode_option,
1674 struct drm_connector *connector, 1674 struct drm_connector *connector,
1675 struct drm_cmdline_mode *mode); 1675 struct drm_cmdline_mode *mode);
1676 1676
1677extern struct drm_display_mode * 1677extern struct drm_display_mode *
1678drm_mode_create_from_cmdline_mode(struct drm_device *dev, 1678drm_mode_create_from_cmdline_mode(struct drm_device *dev,
1679 struct drm_cmdline_mode *cmd); 1679 struct drm_cmdline_mode *cmd);
1680 1680
1681/* Modesetting support */ 1681/* Modesetting support */
1682extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc); 1682extern void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
1683extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc); 1683extern void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
1684extern int drm_modeset_ctl(struct drm_device *dev, void *data, 1684extern int drm_modeset_ctl(struct drm_device *dev, void *data,
1685 struct drm_file *file_priv); 1685 struct drm_file *file_priv);
1686 1686
1687 /* AGP/GART support (drm_agpsupport.h) */ 1687 /* AGP/GART support (drm_agpsupport.h) */
1688extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); 1688extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
1689extern int drm_agp_acquire(struct drm_device *dev); 1689extern int drm_agp_acquire(struct drm_device *dev);
1690extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data, 1690extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
1691 struct drm_file *file_priv); 1691 struct drm_file *file_priv);
1692extern int drm_agp_release(struct drm_device *dev); 1692extern int drm_agp_release(struct drm_device *dev);
1693extern int drm_agp_release_ioctl(struct drm_device *dev, void *data, 1693extern int drm_agp_release_ioctl(struct drm_device *dev, void *data,
1694 struct drm_file *file_priv); 1694 struct drm_file *file_priv);
1695extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode); 1695extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
1696extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data, 1696extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
1697 struct drm_file *file_priv); 1697 struct drm_file *file_priv);
1698extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info); 1698extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
1699extern int drm_agp_info_ioctl(struct drm_device *dev, void *data, 1699extern int drm_agp_info_ioctl(struct drm_device *dev, void *data,
1700 struct drm_file *file_priv); 1700 struct drm_file *file_priv);
1701extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request); 1701extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
1702extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data, 1702extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
1703 struct drm_file *file_priv); 1703 struct drm_file *file_priv);
1704extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request); 1704extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
1705extern int drm_agp_free_ioctl(struct drm_device *dev, void *data, 1705extern int drm_agp_free_ioctl(struct drm_device *dev, void *data,
1706 struct drm_file *file_priv); 1706 struct drm_file *file_priv);
1707extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request); 1707extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
1708extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data, 1708extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
1709 struct drm_file *file_priv); 1709 struct drm_file *file_priv);
1710extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request); 1710extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
1711extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data, 1711extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
1712 struct drm_file *file_priv); 1712 struct drm_file *file_priv);
1713 1713
1714 /* Stub support (drm_stub.h) */ 1714 /* Stub support (drm_stub.h) */
1715extern int drm_setmaster_ioctl(struct drm_device *dev, void *data, 1715extern int drm_setmaster_ioctl(struct drm_device *dev, void *data,
1716 struct drm_file *file_priv); 1716 struct drm_file *file_priv);
1717extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data, 1717extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
1718 struct drm_file *file_priv); 1718 struct drm_file *file_priv);
1719struct drm_master *drm_master_create(struct drm_minor *minor); 1719struct drm_master *drm_master_create(struct drm_minor *minor);
1720extern struct drm_master *drm_master_get(struct drm_master *master); 1720extern struct drm_master *drm_master_get(struct drm_master *master);
1721extern void drm_master_put(struct drm_master **master); 1721extern void drm_master_put(struct drm_master **master);
1722 1722
1723extern void drm_put_dev(struct drm_device *dev); 1723extern void drm_put_dev(struct drm_device *dev);
1724extern int drm_put_minor(struct drm_minor **minor); 1724extern int drm_put_minor(struct drm_minor **minor);
1725extern void drm_unplug_dev(struct drm_device *dev); 1725extern void drm_unplug_dev(struct drm_device *dev);
1726extern unsigned int drm_debug; 1726extern unsigned int drm_debug;
1727 1727
1728extern unsigned int drm_vblank_offdelay; 1728extern unsigned int drm_vblank_offdelay;
1729extern unsigned int drm_timestamp_precision; 1729extern unsigned int drm_timestamp_precision;
1730extern unsigned int drm_timestamp_monotonic; 1730extern unsigned int drm_timestamp_monotonic;
1731 1731
1732extern struct class *drm_class; 1732extern struct class *drm_class;
1733extern struct proc_dir_entry *drm_proc_root; 1733extern struct proc_dir_entry *drm_proc_root;
1734extern struct dentry *drm_debugfs_root; 1734extern struct dentry *drm_debugfs_root;
1735 1735
1736extern struct idr drm_minors_idr; 1736extern struct idr drm_minors_idr;
1737 1737
1738extern struct drm_local_map *drm_getsarea(struct drm_device *dev); 1738extern struct drm_local_map *drm_getsarea(struct drm_device *dev);
1739 1739
1740 /* Proc support (drm_proc.h) */ 1740 /* Proc support (drm_proc.h) */
1741extern int drm_proc_init(struct drm_minor *minor, int minor_id, 1741extern int drm_proc_init(struct drm_minor *minor, int minor_id,
1742 struct proc_dir_entry *root); 1742 struct proc_dir_entry *root);
1743extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root); 1743extern int drm_proc_cleanup(struct drm_minor *minor, struct proc_dir_entry *root);
1744 1744
1745 /* Debugfs support */ 1745 /* Debugfs support */
1746#if defined(CONFIG_DEBUG_FS) 1746#if defined(CONFIG_DEBUG_FS)
1747extern int drm_debugfs_init(struct drm_minor *minor, int minor_id, 1747extern int drm_debugfs_init(struct drm_minor *minor, int minor_id,
1748 struct dentry *root); 1748 struct dentry *root);
1749extern int drm_debugfs_create_files(struct drm_info_list *files, int count, 1749extern int drm_debugfs_create_files(struct drm_info_list *files, int count,
1750 struct dentry *root, struct drm_minor *minor); 1750 struct dentry *root, struct drm_minor *minor);
1751extern int drm_debugfs_remove_files(struct drm_info_list *files, int count, 1751extern int drm_debugfs_remove_files(struct drm_info_list *files, int count,
1752 struct drm_minor *minor); 1752 struct drm_minor *minor);
1753extern int drm_debugfs_cleanup(struct drm_minor *minor); 1753extern int drm_debugfs_cleanup(struct drm_minor *minor);
1754#endif 1754#endif
1755 1755
1756#ifndef __NetBSD__ 1756#ifndef __NetBSD__
1757 /* Info file support */ 1757 /* Info file support */
1758extern int drm_name_info(struct seq_file *m, void *data); 1758extern int drm_name_info(struct seq_file *m, void *data);
1759extern int drm_vm_info(struct seq_file *m, void *data); 1759extern int drm_vm_info(struct seq_file *m, void *data);
1760extern int drm_bufs_info(struct seq_file *m, void *data); 1760extern int drm_bufs_info(struct seq_file *m, void *data);
1761extern int drm_vblank_info(struct seq_file *m, void *data); 1761extern int drm_vblank_info(struct seq_file *m, void *data);
1762extern int drm_clients_info(struct seq_file *m, void* data); 1762extern int drm_clients_info(struct seq_file *m, void* data);
1763extern int drm_gem_name_info(struct seq_file *m, void *data); 1763extern int drm_gem_name_info(struct seq_file *m, void *data);
1764#endif 1764#endif
1765 1765
1766 1766
1767extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, 1767extern int drm_gem_prime_handle_to_fd(struct drm_device *dev,
1768 struct drm_file *file_priv, uint32_t handle, uint32_t flags, 1768 struct drm_file *file_priv, uint32_t handle, uint32_t flags,
1769 int *prime_fd); 1769 int *prime_fd);
1770extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, 1770extern int drm_gem_prime_fd_to_handle(struct drm_device *dev,
1771 struct drm_file *file_priv, int prime_fd, uint32_t *handle); 1771 struct drm_file *file_priv, int prime_fd, uint32_t *handle);
1772 1772
1773extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, 1773extern int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
1774 struct drm_file *file_priv); 1774 struct drm_file *file_priv);
1775extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, 1775extern int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
1776 struct drm_file *file_priv); 1776 struct drm_file *file_priv);
1777 1777
1778#ifndef __NetBSD__ /* XXX temporary measure 20130212 */ 1778#ifndef __NetBSD__ /* XXX temporary measure 20130212 */
1779extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages, 1779extern int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
1780 dma_addr_t *addrs, int max_pages); 1780 dma_addr_t *addrs, int max_pages);
1781extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages); 1781extern struct sg_table *drm_prime_pages_to_sg(struct page **pages, int nr_pages);
1782extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg); 1782extern void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
1783#endif 1783#endif
1784 1784
1785 1785
1786#ifndef __NetBSD__ /* XXX drm prime */ 1786#ifndef __NetBSD__ /* XXX drm prime */
1787void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); 1787void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv);
1788void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); 1788void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv);
1789int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle); 1789int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle);
1790int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle); 1790int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle);
1791void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf); 1791void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf);
1792 1792
1793int drm_prime_add_dma_buf(struct drm_device *dev, struct drm_gem_object *obj); 1793int drm_prime_add_dma_buf(struct drm_device *dev, struct drm_gem_object *obj);
1794int drm_prime_lookup_obj(struct drm_device *dev, struct dma_buf *buf, 1794int drm_prime_lookup_obj(struct drm_device *dev, struct dma_buf *buf,
1795 struct drm_gem_object **obj); 1795 struct drm_gem_object **obj);
1796#endif 1796#endif
1797 1797
1798#if DRM_DEBUG_CODE 1798#if DRM_DEBUG_CODE
1799#ifndef __NetBSD__ 1799#ifndef __NetBSD__
1800extern int drm_vma_info(struct seq_file *m, void *data); 1800extern int drm_vma_info(struct seq_file *m, void *data);
1801#endif 1801#endif
1802#endif 1802#endif
1803 1803
1804 /* Scatter Gather Support (drm_scatter.h) */ 1804 /* Scatter Gather Support (drm_scatter.h) */
1805extern void drm_sg_cleanup(struct drm_sg_mem * entry); 1805extern void drm_sg_cleanup(struct drm_sg_mem * entry);
1806extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data, 1806extern int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
1807 struct drm_file *file_priv); 1807 struct drm_file *file_priv);
1808extern int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request); 1808extern int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request);
1809extern int drm_sg_free(struct drm_device *dev, void *data, 1809extern int drm_sg_free(struct drm_device *dev, void *data,
1810 struct drm_file *file_priv); 1810 struct drm_file *file_priv);
1811 1811
1812 /* ATI PCIGART support (ati_pcigart.h) */ 1812 /* ATI PCIGART support (ati_pcigart.h) */
1813extern int drm_ati_pcigart_init(struct drm_device *dev, 1813extern int drm_ati_pcigart_init(struct drm_device *dev,
1814 struct drm_ati_pcigart_info * gart_info); 1814 struct drm_ati_pcigart_info * gart_info);
1815extern int drm_ati_pcigart_cleanup(struct drm_device *dev, 1815extern int drm_ati_pcigart_cleanup(struct drm_device *dev,
1816 struct drm_ati_pcigart_info * gart_info); 1816 struct drm_ati_pcigart_info * gart_info);
1817 1817
1818extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, 1818extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size,
1819 size_t align); 1819 size_t align);
1820extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1820extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
1821extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1821extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah);
1822 1822
1823 /* sysfs support (drm_sysfs.c) */ 1823 /* sysfs support (drm_sysfs.c) */
1824struct drm_sysfs_class; 1824struct drm_sysfs_class;
1825extern struct class *drm_sysfs_create(struct module *owner, char *name); 1825extern struct class *drm_sysfs_create(struct module *owner, char *name);
1826extern void drm_sysfs_destroy(void); 1826extern void drm_sysfs_destroy(void);
1827extern int drm_sysfs_device_add(struct drm_minor *minor); 1827extern int drm_sysfs_device_add(struct drm_minor *minor);
1828extern void drm_sysfs_hotplug_event(struct drm_device *dev); 1828extern void drm_sysfs_hotplug_event(struct drm_device *dev);
1829extern void drm_sysfs_device_remove(struct drm_minor *minor); 1829extern void drm_sysfs_device_remove(struct drm_minor *minor);
1830#ifndef __NetBSD__ 1830#ifndef __NetBSD__
1831extern char *drm_get_connector_status_name(enum drm_connector_status status); 1831extern char *drm_get_connector_status_name(enum drm_connector_status status);
1832#endif 1832#endif
1833extern int drm_sysfs_connector_add(struct drm_connector *connector); 1833extern int drm_sysfs_connector_add(struct drm_connector *connector);
1834extern void drm_sysfs_connector_remove(struct drm_connector *connector); 1834extern void drm_sysfs_connector_remove(struct drm_connector *connector);
1835 1835
1836/* Graphics Execution Manager library functions (drm_gem.c) */ 1836/* Graphics Execution Manager library functions (drm_gem.c) */
1837int drm_gem_init(struct drm_device *dev); 1837int drm_gem_init(struct drm_device *dev);
1838void drm_gem_destroy(struct drm_device *dev); 1838void drm_gem_destroy(struct drm_device *dev);
1839void drm_gem_object_release(struct drm_gem_object *obj); 1839void drm_gem_object_release(struct drm_gem_object *obj);
1840void drm_gem_object_free(struct kref *kref); 1840void drm_gem_object_free(struct kref *kref);
1841struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev, 1841struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev,
1842 size_t size); 1842 size_t size);
1843int drm_gem_object_init(struct drm_device *dev, 1843int drm_gem_object_init(struct drm_device *dev,
1844 struct drm_gem_object *obj, size_t size); 1844 struct drm_gem_object *obj, size_t size);
1845int drm_gem_private_object_init(struct drm_device *dev, 1845int drm_gem_private_object_init(struct drm_device *dev,
1846 struct drm_gem_object *obj, size_t size); 1846 struct drm_gem_object *obj, size_t size);
1847void drm_gem_object_handle_free(struct drm_gem_object *obj); 1847void drm_gem_object_handle_free(struct drm_gem_object *obj);
1848#ifdef __NetBSD__ 1848#ifdef __NetBSD__
1849void drm_gem_pager_reference(struct uvm_object *); 1849void drm_gem_pager_reference(struct uvm_object *);
1850void drm_gem_pager_detach(struct uvm_object *); 1850void drm_gem_pager_detach(struct uvm_object *);
1851int drm_gem_mmap_object(struct drm_device *, off_t *, size_t, 1851int drm_gem_mmap_object(struct drm_device *, off_t *, size_t,
1852 struct uvm_object **); 1852 struct uvm_object **);
1853#else 1853#else
1854void drm_gem_vm_open(struct vm_area_struct *vma); 1854void drm_gem_vm_open(struct vm_area_struct *vma);
1855void drm_gem_vm_close(struct vm_area_struct *vma); 1855void drm_gem_vm_close(struct vm_area_struct *vma);
1856int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); 1856int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
1857#endif 1857#endif
1858 1858
1859#include <drm/drm_global.h> 1859#include <drm/drm_global.h>
1860 1860
1861static inline void 1861static inline void
1862drm_gem_object_reference(struct drm_gem_object *obj) 1862drm_gem_object_reference(struct drm_gem_object *obj)
1863{ 1863{
1864 kref_get(&obj->refcount); 1864 kref_get(&obj->refcount);
1865} 1865}
1866 1866
1867static inline void 1867static inline void
1868drm_gem_object_unreference(struct drm_gem_object *obj) 1868drm_gem_object_unreference(struct drm_gem_object *obj)
1869{ 1869{
1870 if (obj != NULL) 1870 if (obj != NULL)
1871 kref_put(&obj->refcount, drm_gem_object_free); 1871 kref_put(&obj->refcount, drm_gem_object_free);
1872} 1872}
1873 1873
1874static inline void 1874static inline void
1875drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) 1875drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
1876{ 1876{
1877 if (obj != NULL) { 1877 if (obj != NULL) {
1878 struct drm_device *dev = obj->dev; 1878 struct drm_device *dev = obj->dev;
1879 mutex_lock(&dev->struct_mutex); 1879 mutex_lock(&dev->struct_mutex);
1880 kref_put(&obj->refcount, drm_gem_object_free); 1880 kref_put(&obj->refcount, drm_gem_object_free);
1881 mutex_unlock(&dev->struct_mutex); 1881 mutex_unlock(&dev->struct_mutex);
1882 } 1882 }
1883} 1883}
1884 1884
1885int drm_gem_handle_create(struct drm_file *file_priv, 1885int drm_gem_handle_create(struct drm_file *file_priv,
1886 struct drm_gem_object *obj, 1886 struct drm_gem_object *obj,
1887 u32 *handlep); 1887 u32 *handlep);
1888int drm_gem_handle_delete(struct drm_file *filp, u32 handle); 1888int drm_gem_handle_delete(struct drm_file *filp, u32 handle);
1889 1889
1890static inline void 1890static inline void
1891drm_gem_object_handle_reference(struct drm_gem_object *obj) 1891drm_gem_object_handle_reference(struct drm_gem_object *obj)
1892{ 1892{
1893 drm_gem_object_reference(obj); 1893 drm_gem_object_reference(obj);
1894 atomic_inc(&obj->handle_count); 1894 atomic_inc(&obj->handle_count);
1895} 1895}
1896 1896
1897static inline void 1897static inline void
1898drm_gem_object_handle_unreference(struct drm_gem_object *obj) 1898drm_gem_object_handle_unreference(struct drm_gem_object *obj)
1899{ 1899{
1900 if (obj == NULL) 1900 if (obj == NULL)
1901 return; 1901 return;
1902 1902
1903 if (atomic_read(&obj->handle_count) == 0) 1903 if (atomic_read(&obj->handle_count) == 0)
1904 return; 1904 return;
1905 /* 1905 /*
1906 * Must bump handle count first as this may be the last 1906 * Must bump handle count first as this may be the last
1907 * ref, in which case the object would disappear before we 1907 * ref, in which case the object would disappear before we
1908 * checked for a name 1908 * checked for a name
1909 */ 1909 */
1910 if (atomic_dec_and_test(&obj->handle_count)) 1910 if (atomic_dec_and_test(&obj->handle_count))
1911 drm_gem_object_handle_free(obj); 1911 drm_gem_object_handle_free(obj);
1912 drm_gem_object_unreference(obj); 1912 drm_gem_object_unreference(obj);
1913} 1913}
1914 1914
1915static inline void 1915static inline void
1916drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj) 1916drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj)
1917{ 1917{
1918 if (obj == NULL) 1918 if (obj == NULL)
1919 return; 1919 return;
1920 1920
1921 if (atomic_read(&obj->handle_count) == 0) 1921 if (atomic_read(&obj->handle_count) == 0)
1922 return; 1922 return;
1923 1923
1924 /* 1924 /*
1925 * Must bump handle count first as this may be the last 1925 * Must bump handle count first as this may be the last
1926 * ref, in which case the object would disappear before we 1926 * ref, in which case the object would disappear before we
1927 * checked for a name 1927 * checked for a name
1928 */ 1928 */
1929 1929
1930 if (atomic_dec_and_test(&obj->handle_count)) 1930 if (atomic_dec_and_test(&obj->handle_count))
1931 drm_gem_object_handle_free(obj); 1931 drm_gem_object_handle_free(obj);
1932 drm_gem_object_unreference_unlocked(obj); 1932 drm_gem_object_unreference_unlocked(obj);
1933} 1933}
1934 1934
1935void drm_gem_free_mmap_offset(struct drm_gem_object *obj); 1935void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
1936int drm_gem_create_mmap_offset(struct drm_gem_object *obj); 1936int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
1937 1937
1938struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, 1938struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev,
1939 struct drm_file *filp, 1939 struct drm_file *filp,
1940 u32 handle); 1940 u32 handle);
1941int drm_gem_close_ioctl(struct drm_device *dev, void *data, 1941int drm_gem_close_ioctl(struct drm_device *dev, void *data,
1942 struct drm_file *file_priv); 1942 struct drm_file *file_priv);
1943int drm_gem_flink_ioctl(struct drm_device *dev, void *data, 1943int drm_gem_flink_ioctl(struct drm_device *dev, void *data,
1944 struct drm_file *file_priv); 1944 struct drm_file *file_priv);
1945int drm_gem_open_ioctl(struct drm_device *dev, void *data, 1945int drm_gem_open_ioctl(struct drm_device *dev, void *data,
1946 struct drm_file *file_priv); 1946 struct drm_file *file_priv);
1947void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); 1947void drm_gem_open(struct drm_device *dev, struct drm_file *file_private);
1948void drm_gem_release(struct drm_device *dev, struct drm_file *file_private); 1948void drm_gem_release(struct drm_device *dev, struct drm_file *file_private);
1949 1949
1950extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev); 1950extern void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev);
1951extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev); 1951extern void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev);
1952extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev); 1952extern void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev);
1953 1953
1954static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev, 1954static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev,
1955 unsigned int token) 1955 unsigned int token)
1956{ 1956{
1957 struct drm_map_list *_entry; 1957 struct drm_map_list *_entry;
1958 list_for_each_entry(_entry, &dev->maplist, head) 1958 list_for_each_entry(_entry, &dev->maplist, head)
1959 if (_entry->user_token == token) 1959 if (_entry->user_token == token)
1960 return _entry->map; 1960 return _entry->map;
1961 return NULL; 1961 return NULL;
1962} 1962}
1963 1963
1964static __inline__ void drm_core_dropmap(struct drm_local_map *map) 1964static __inline__ void drm_core_dropmap(struct drm_local_map *map)
1965{ 1965{
1966} 1966}
1967 1967
1968#include <drm/drm_mem_util.h> 1968#include <drm/drm_mem_util.h>
1969 1969
1970extern int drm_fill_in_dev(struct drm_device *dev, 1970extern int drm_fill_in_dev(struct drm_device *dev,
1971 const struct pci_device_id *ent, 1971 const struct pci_device_id *ent,
1972 struct drm_driver *driver); 1972 struct drm_driver *driver);
1973int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int type); 1973int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int type);
1974/*@}*/ 1974/*@}*/
1975 1975
1976/* PCI section */ 1976/* PCI section */
1977static __inline__ int drm_pci_device_is_agp(struct drm_device *dev) 1977static __inline__ int drm_pci_device_is_agp(struct drm_device *dev)
1978{ 1978{
1979 if (dev->driver->device_is_agp != NULL) { 1979 if (dev->driver->device_is_agp != NULL) {
1980 int err = (*dev->driver->device_is_agp) (dev); 1980 int err = (*dev->driver->device_is_agp) (dev);
1981 1981
1982 if (err != 2) { 1982 if (err != 2) {
1983 return err; 1983 return err;
1984 } 1984 }
1985 } 1985 }
1986 1986
1987 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP); 1987 return pci_find_capability(dev->pdev, PCI_CAP_ID_AGP);
1988} 1988}
1989 1989
1990extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver); 1990extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
1991extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver); 1991extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
1992extern int drm_get_pci_dev(struct pci_dev *pdev, 1992extern int drm_get_pci_dev(struct pci_dev *pdev,
1993 const struct pci_device_id *ent, 1993 const struct pci_device_id *ent,
1994 struct drm_driver *driver); 1994 struct drm_driver *driver);
1995 1995
1996#define DRM_PCIE_SPEED_25 1 1996#define DRM_PCIE_SPEED_25 1
1997#define DRM_PCIE_SPEED_50 2 1997#define DRM_PCIE_SPEED_50 2
1998#define DRM_PCIE_SPEED_80 4 1998#define DRM_PCIE_SPEED_80 4
1999 1999
2000extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask); 2000extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
2001 2001
2002/* platform section */ 2002/* platform section */
2003extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device); 2003extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
2004extern void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device); 2004extern void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device);
2005 2005
2006extern int drm_get_platform_dev(struct platform_device *pdev, 2006extern int drm_get_platform_dev(struct platform_device *pdev,
2007 struct drm_driver *driver); 2007 struct drm_driver *driver);
2008 2008
2009/* returns true if currently okay to sleep */ 2009/* returns true if currently okay to sleep */
2010static __inline__ bool drm_can_sleep(void) 2010static __inline__ bool drm_can_sleep(void)
2011{ 2011{
2012#ifdef __NetBSD__ 2012#ifdef __NetBSD__
2013 return false; /* XXX */ 2013 return false; /* XXX */
2014#else 2014#else
2015 if (in_atomic() || in_dbg_master() || irqs_disabled()) 2015 if (in_atomic() || in_dbg_master() || irqs_disabled())
2016 return false; 2016 return false;
2017 return true; 2017 return true;
2018#endif 2018#endif
2019} 2019}
2020 2020
2021#ifdef __NetBSD__ 2021#ifdef __NetBSD__
2022static inline bool 2022static inline bool
2023DRM_IS_BUS_SPACE(struct drm_local_map *map) 2023DRM_IS_BUS_SPACE(struct drm_local_map *map)
2024{ 2024{
2025 switch (map->type) { 2025 switch (map->type) {
2026 case _DRM_FRAME_BUFFER: 2026 case _DRM_FRAME_BUFFER:
2027 panic("I don't know how to access drm frame buffer memory!"); 2027 panic("I don't know how to access drm frame buffer memory!");
2028 2028
2029 case _DRM_REGISTERS: 2029 case _DRM_REGISTERS:
2030 return true; 2030 return true;
2031 2031
2032 case _DRM_SHM: 2032 case _DRM_SHM:
2033 panic("I don't know how to access drm shared memory!"); 2033 panic("I don't know how to access drm shared memory!");
2034 2034
2035 case _DRM_AGP: 2035 case _DRM_AGP:
2036 panic("I don't know how to access drm agp memory!"); 2036 panic("I don't know how to access drm agp memory!");
2037 2037
2038 case _DRM_SCATTER_GATHER: 2038 case _DRM_SCATTER_GATHER:
2039 panic("I don't know how to access drm scatter-gather memory!"); 2039 panic("I don't know how to access drm scatter-gather memory!");
2040 2040
2041 case _DRM_CONSISTENT: 2041 case _DRM_CONSISTENT:
2042 /* 2042 /*
2043 * XXX Old drm uses bus space access for this, but 2043 * XXX Old drm uses bus space access for this, but
2044 * consistent maps don't have bus space handles! They 2044 * consistent maps don't have bus space handles! They
2045 * do, however, have kernel virtual addresses in the 2045 * do, however, have kernel virtual addresses in the
2046 * map->handle, so maybe that's right. 2046 * map->handle, so maybe that's right.
2047 */ 2047 */
2048#if 0 2048#if 0
2049 return false; 2049 return false;
2050#endif 2050#endif
2051 panic("I don't know how to access drm consistent memory!"); 2051 panic("I don't know how to access drm consistent memory!");
2052 2052
2053 case _DRM_GEM: 2053 case _DRM_GEM:
2054 panic("I don't know how to access drm gem memory!"); 2054 panic("I don't know how to access drm gem memory!");
2055 2055
2056 default: 2056 default:
2057 panic("I don't know what kind of memory you mean!"); 2057 panic("I don't know what kind of memory you mean!");
2058 } 2058 }
2059} 2059}
2060 2060
2061static inline uint8_t 2061static inline uint8_t
2062DRM_READ8(struct drm_local_map *map, bus_size_t offset) 2062DRM_READ8(struct drm_local_map *map, bus_size_t offset)
2063{ 2063{
2064 if (DRM_IS_BUS_SPACE(map)) 2064 if (DRM_IS_BUS_SPACE(map))
2065 return bus_space_read_1(map->lm_data.bus_space.bst, 2065 return bus_space_read_1(map->lm_data.bus_space.bst,
2066 map->lm_data.bus_space.bsh, offset); 2066 map->lm_data.bus_space.bsh, offset);
2067 else 2067 else
2068 return *(volatile uint8_t *)((vaddr_t)map->handle + offset); 2068 return *(volatile uint8_t *)((vaddr_t)map->handle + offset);
2069} 2069}
2070 2070
2071static inline uint16_t 2071static inline uint16_t
2072DRM_READ16(struct drm_local_map *map, bus_size_t offset) 2072DRM_READ16(struct drm_local_map *map, bus_size_t offset)
2073{ 2073{
2074 if (DRM_IS_BUS_SPACE(map)) 2074 if (DRM_IS_BUS_SPACE(map))
2075 return bus_space_read_2(map->lm_data.bus_space.bst, 2075 return bus_space_read_2(map->lm_data.bus_space.bst,
2076 map->lm_data.bus_space.bsh, offset); 2076 map->lm_data.bus_space.bsh, offset);
2077 else 2077 else
2078 return *(volatile uint16_t *)((vaddr_t)map->handle + offset); 2078 return *(volatile uint16_t *)((vaddr_t)map->handle + offset);
2079} 2079}
2080 2080
2081static inline uint32_t 2081static inline uint32_t
2082DRM_READ32(struct drm_local_map *map, bus_size_t offset) 2082DRM_READ32(struct drm_local_map *map, bus_size_t offset)
2083{ 2083{
2084 if (DRM_IS_BUS_SPACE(map)) 2084 if (DRM_IS_BUS_SPACE(map))
2085 return bus_space_read_4(map->lm_data.bus_space.bst, 2085 return bus_space_read_4(map->lm_data.bus_space.bst,
2086 map->lm_data.bus_space.bsh, offset); 2086 map->lm_data.bus_space.bsh, offset);
2087 else 2087 else
2088 return *(volatile uint32_t *)((vaddr_t)map->handle + offset); 2088 return *(volatile uint32_t *)((vaddr_t)map->handle + offset);
2089} 2089}
2090 2090
2091static inline uint64_t 2091static inline uint64_t
2092DRM_READ64(struct drm_local_map *map, bus_size_t offset) 2092DRM_READ64(struct drm_local_map *map, bus_size_t offset)
2093{ 2093{
2094 if (DRM_IS_BUS_SPACE(map)) 2094 if (DRM_IS_BUS_SPACE(map))
2095 return bus_space_read_8(map->lm_data.bus_space.bst, 2095 return bus_space_read_8(map->lm_data.bus_space.bst,
2096 map->lm_data.bus_space.bsh, offset); 2096 map->lm_data.bus_space.bsh, offset);
2097 else 2097 else
2098 return *(volatile uint64_t *)((vaddr_t)map->handle + offset); 2098 return *(volatile uint64_t *)((vaddr_t)map->handle + offset);
2099} 2099}
2100 2100
2101static inline void 2101static inline void
2102DRM_WRITE8(struct drm_local_map *map, bus_size_t offset, uint8_t value) 2102DRM_WRITE8(struct drm_local_map *map, bus_size_t offset, uint8_t value)
2103{ 2103{
2104 if (DRM_IS_BUS_SPACE(map)) 2104 if (DRM_IS_BUS_SPACE(map))
2105 bus_space_write_1(map->lm_data.bus_space.bst, 2105 bus_space_write_1(map->lm_data.bus_space.bst,
2106 map->lm_data.bus_space.bsh, offset, value); 2106 map->lm_data.bus_space.bsh, offset, value);
2107 else 2107 else
2108 *(volatile uint8_t *)((vaddr_t)map->handle + offset) = value; 2108 *(volatile uint8_t *)((vaddr_t)map->handle + offset) = value;
2109} 2109}
2110 2110
2111static inline void 2111static inline void
2112DRM_WRITE16(struct drm_local_map *map, bus_size_t offset, uint16_t value) 2112DRM_WRITE16(struct drm_local_map *map, bus_size_t offset, uint16_t value)
2113{ 2113{
2114 if (DRM_IS_BUS_SPACE(map)) 2114 if (DRM_IS_BUS_SPACE(map))
2115 bus_space_write_2(map->lm_data.bus_space.bst, 2115 bus_space_write_2(map->lm_data.bus_space.bst,
2116 map->lm_data.bus_space.bsh, offset, value); 2116 map->lm_data.bus_space.bsh, offset, value);
2117 else 2117 else
2118 *(volatile uint16_t *)((vaddr_t)map->handle + offset) = value; 2118 *(volatile uint16_t *)((vaddr_t)map->handle + offset) = value;
2119} 2119}
2120 2120
2121static inline void 2121static inline void
2122DRM_WRITE32(struct drm_local_map *map, bus_size_t offset, uint32_t value) 2122DRM_WRITE32(struct drm_local_map *map, bus_size_t offset, uint32_t value)
2123{ 2123{
2124 if (DRM_IS_BUS_SPACE(map)) 2124 if (DRM_IS_BUS_SPACE(map))
2125 bus_space_write_4(map->lm_data.bus_space.bst, 2125 bus_space_write_4(map->lm_data.bus_space.bst,
2126 map->lm_data.bus_space.bsh, offset, value); 2126 map->lm_data.bus_space.bsh, offset, value);
2127 else 2127 else
2128 *(volatile uint32_t *)((vaddr_t)map->handle + offset) = value; 2128 *(volatile uint32_t *)((vaddr_t)map->handle + offset) = value;
2129} 2129}
2130 2130
2131static inline void 2131static inline void
2132DRM_WRITE64(struct drm_local_map *map, bus_size_t offset, uint64_t value) 2132DRM_WRITE64(struct drm_local_map *map, bus_size_t offset, uint64_t value)
2133{ 2133{
2134 if (DRM_IS_BUS_SPACE(map)) 2134 if (DRM_IS_BUS_SPACE(map))
2135 bus_space_write_8(map->lm_data.bus_space.bst, 2135 bus_space_write_8(map->lm_data.bus_space.bst,
2136 map->lm_data.bus_space.bsh, offset, value); 2136 map->lm_data.bus_space.bsh, offset, value);
2137 else 2137 else
2138 *(volatile uint64_t *)((vaddr_t)map->handle + offset) = value; 2138 *(volatile uint64_t *)((vaddr_t)map->handle + offset) = value;
2139} 2139}
2140#endif /* defined(__NetBSD__) */ 2140#endif /* defined(__NetBSD__) */
2141 2141
 2142#ifdef __NetBSD__
 2143
 2144/* XXX This is pretty kludgerific. */
 2145
 2146#include <linux/io-mapping.h>
 2147
 2148static inline struct io_mapping *
 2149drm_io_mapping_create_wc(struct drm_device *dev, resource_size_t addr,
 2150 unsigned long size)
 2151{
 2152 return bus_space_io_mapping_create_wc(dev->bst, addr, size);
 2153}
 2154
 2155#endif /* defined(__NetBSD__) */
 2156
2142#endif /* __KERNEL__ */ 2157#endif /* __KERNEL__ */
2143#endif 2158#endif