17965d9acSmrg/* 27965d9acSmrg * Copyright 2007 George Sapountzis 37965d9acSmrg * 47965d9acSmrg * Permission is hereby granted, free of charge, to any person obtaining a 57965d9acSmrg * copy of this software and associated documentation files (the "Software"), 67965d9acSmrg * to deal in the Software without restriction, including without limitation 77965d9acSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 87965d9acSmrg * and/or sell copies of the Software, and to permit persons to whom the 97965d9acSmrg * Software is furnished to do so, subject to the following conditions: 107965d9acSmrg * 117965d9acSmrg * The above copyright notice and this permission notice (including the next 127965d9acSmrg * paragraph) shall be included in all copies or substantial portions of the 137965d9acSmrg * Software. 147965d9acSmrg * 157965d9acSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 167965d9acSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 177965d9acSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 187965d9acSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 197965d9acSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 207965d9acSmrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 217965d9acSmrg * SOFTWARE. 227965d9acSmrg */ 237965d9acSmrg 247965d9acSmrg/** 257965d9acSmrg * Macros for porting drivers from legacy xfree86 PCI code to the pciaccess 267965d9acSmrg * library. The main purpose being to facilitate source code compatibility. 277965d9acSmrg */ 287965d9acSmrg 297965d9acSmrg#ifndef I128PCIRENAME_H 307965d9acSmrg#define I128PCIRENAME_H 317965d9acSmrg 327965d9acSmrgenum region_type { 337965d9acSmrg REGION_MEM, 347965d9acSmrg REGION_IO 357965d9acSmrg}; 367965d9acSmrg 377965d9acSmrg#ifndef XSERVER_LIBPCIACCESS 387965d9acSmrg 397965d9acSmrg/* pciVideoPtr */ 407965d9acSmrg#define PCI_DEV_VENDOR_ID(_pcidev) ((_pcidev)->vendor) 417965d9acSmrg#define PCI_DEV_DEVICE_ID(_pcidev) ((_pcidev)->chipType) 427965d9acSmrg#define PCI_DEV_REVISION(_pcidev) ((_pcidev)->chipRev) 437965d9acSmrg 447965d9acSmrg#define PCI_SUB_VENDOR_ID(_pcidev) ((_pcidev)->subsysVendor) 457965d9acSmrg#define PCI_SUB_DEVICE_ID(_pcidev) ((_pcidev)->subsysCard) 467965d9acSmrg 477965d9acSmrg#define PCI_DEV_TAG(_pcidev) pciTag((_pcidev)->bus, \ 487965d9acSmrg (_pcidev)->device, \ 497965d9acSmrg (_pcidev)->func) 507965d9acSmrg#define PCI_DEV_BUS(_pcidev) ((_pcidev)->bus) 517965d9acSmrg#define PCI_DEV_DEV(_pcidev) ((_pcidev)->device) 527965d9acSmrg#define PCI_DEV_FUNC(_pcidev) ((_pcidev)->func) 537965d9acSmrg 547965d9acSmrg/* pciConfigPtr */ 557965d9acSmrg#define PCI_CFG_TAG(_pcidev) (((pciConfigPtr)(_pcidev)->thisCard)->tag) 567965d9acSmrg#define PCI_CFG_BUS(_pcidev) (((pciConfigPtr)(_pcidev)->thisCard)->busnum) 577965d9acSmrg#define PCI_CFG_DEV(_pcidev) (((pciConfigPtr)(_pcidev)->thisCard)->devnum) 587965d9acSmrg#define PCI_CFG_FUNC(_pcidev) (((pciConfigPtr)(_pcidev)->thisCard)->funcnum) 597965d9acSmrg 607965d9acSmrg/* region addr: xfree86 uses different fields for memory regions and I/O ports */ 617965d9acSmrg#define PCI_REGION_BASE(_pcidev, _b, _type) \ 627965d9acSmrg (((_type) == REGION_MEM) ? (_pcidev)->memBase[(_b)] \ 637965d9acSmrg : (_pcidev)->ioBase[(_b)]) 647965d9acSmrg 657965d9acSmrg/* region size: xfree86 uses the log2 of the region size, 667965d9acSmrg * but with zero meaning no region, not size of one XXX */ 677965d9acSmrg#define PCI_REGION_SIZE(_pcidev, _b) \ 687965d9acSmrg (((_pcidev)->size[(_b)] > 0) ? (1 << (_pcidev)->size[(_b)]) : 0) 697965d9acSmrg 707965d9acSmrg/* read/write PCI configuration space */ 717965d9acSmrg#define PCI_READ_BYTE(_pcidev, _value_ptr, _offset) \ 727965d9acSmrg *(_value_ptr) = pciReadByte(PCI_CFG_TAG(_pcidev), (_offset)) 737965d9acSmrg 747965d9acSmrg#define PCI_READ_LONG(_pcidev, _value_ptr, _offset) \ 757965d9acSmrg *(_value_ptr) = pciReadLong(PCI_CFG_TAG(_pcidev), (_offset)) 767965d9acSmrg 777965d9acSmrg#define PCI_WRITE_LONG(_pcidev, _value, _offset) \ 787965d9acSmrg pciWriteLong(PCI_CFG_TAG(_pcidev), (_offset), (_value)) 797965d9acSmrg 807965d9acSmrg#else /* XSERVER_LIBPCIACCESS */ 817965d9acSmrg 827965d9acSmrgtypedef struct pci_device *pciVideoPtr; 837965d9acSmrg 847965d9acSmrg#define PCI_DEV_VENDOR_ID(_pcidev) ((_pcidev)->vendor_id) 857965d9acSmrg#define PCI_DEV_DEVICE_ID(_pcidev) ((_pcidev)->device_id) 867965d9acSmrg#define PCI_DEV_REVISION(_pcidev) ((_pcidev)->revision) 877965d9acSmrg 887965d9acSmrg#define PCI_SUB_VENDOR_ID(_pcidev) ((_pcidev)->subvendor_id) 897965d9acSmrg#define PCI_SUB_DEVICE_ID(_pcidev) ((_pcidev)->subdevice_id) 907965d9acSmrg 917965d9acSmrg/* pci-rework functions take a 'pci_device' parameter instead of a tag */ 927965d9acSmrg#define PCI_DEV_TAG(_pcidev) (_pcidev) 937965d9acSmrg 947965d9acSmrg/* PCI_DEV macros, typically used in printf's, add domain ? XXX */ 957965d9acSmrg#define PCI_DEV_BUS(_pcidev) ((_pcidev)->bus) 967965d9acSmrg#define PCI_DEV_DEV(_pcidev) ((_pcidev)->dev) 977965d9acSmrg#define PCI_DEV_FUNC(_pcidev) ((_pcidev)->func) 987965d9acSmrg 997965d9acSmrg/* pci-rework functions take a 'pci_device' parameter instead of a tag */ 1007965d9acSmrg#define PCI_CFG_TAG(_pcidev) (_pcidev) 1017965d9acSmrg 1027965d9acSmrg/* PCI_CFG macros, typically used in DRI init, contain the domain */ 1037965d9acSmrg#define PCI_CFG_BUS(_pcidev) (((_pcidev)->domain << 8) | \ 1047965d9acSmrg (_pcidev)->bus) 1057965d9acSmrg#define PCI_CFG_DEV(_pcidev) ((_pcidev)->dev) 1067965d9acSmrg#define PCI_CFG_FUNC(_pcidev) ((_pcidev)->func) 1077965d9acSmrg 1087965d9acSmrg#define PCI_REGION_BASE(_pcidev, _b, _type) ((_pcidev)->regions[(_b)].base_addr) 1097965d9acSmrg#define PCI_REGION_SIZE(_pcidev, _b) ((_pcidev)->regions[(_b)].size) 1107965d9acSmrg 1117965d9acSmrg#define PCI_READ_BYTE(_pcidev, _value_ptr, _offset) \ 1127965d9acSmrg pci_device_cfg_read_u8((_pcidev), (_value_ptr), (_offset)) 1137965d9acSmrg 1147965d9acSmrg#define PCI_READ_LONG(_pcidev, _value_ptr, _offset) \ 1157965d9acSmrg pci_device_cfg_read_u32((_pcidev), (_value_ptr), (_offset)) 1167965d9acSmrg 1177965d9acSmrg#define PCI_WRITE_LONG(_pcidev, _value, _offset) \ 1187965d9acSmrg pci_device_cfg_write_u32((_pcidev), (_value), (_offset)) 1197965d9acSmrg 1207965d9acSmrg#endif /* XSERVER_LIBPCIACCESS */ 1217965d9acSmrg 1227965d9acSmrg#endif /* I128PCIRENAME_H */ 123