1 /* 2 ************************************************************************* 3 * Ralink Tech Inc. 4 * 5F., No.36, Taiyuan St., Jhubei City, 5 * Hsinchu County 302, 6 * Taiwan, R.O.C. 7 * 8 * (c) Copyright 2002-2007, Ralink Technology, Inc. 9 * 10 * This program is free software; you can redistribute it and/or modify * 11 * it under the terms of the GNU General Public License as published by * 12 * the Free Software Foundation; either version 2 of the License, or * 13 * (at your option) any later version. * 14 * * 15 * This program is distributed in the hope that it will be useful, * 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 18 * GNU General Public License for more details. * 19 * * 20 * You should have received a copy of the GNU General Public License * 21 * along with this program; if not, write to the * 22 * Free Software Foundation, Inc., * 23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 24 * * 25 ************************************************************************* 26 */ 27 28 #ifndef __RTMP_PCI_H__ 29 #define __RTMP_PCI_H__ 30 31 #define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ 32 ((struct os_cookie *)handle)->pci_dev = dev_p; 33 34 #ifdef LINUX 35 /* set driver data */ 36 #define RT28XX_DRVDATA_SET(_a) pci_set_drvdata(_a, net_dev); 37 38 #define RT28XX_PUT_DEVICE(dev_p) 39 40 #define SA_SHIRQ IRQF_SHARED 41 42 #ifdef PCI_MSI_SUPPORT 43 #define RTMP_MSI_ENABLE(_pAd) \ 44 { struct os_cookie *_pObj = (struct os_cookie *)(_pAd->OS_Cookie); \ 45 (_pAd)->HaveMsi = pci_enable_msi(_pObj->pci_dev) \ 46 == 0 ? TRUE : FALSE; \ 47 } 48 49 #define RTMP_MSI_DISABLE(_pAd) \ 50 { struct os_cookie *_pObj = (struct os_cookie *)(_pAd->OS_Cookie); \ 51 if (_pAd->HaveMsi == TRUE) \ 52 pci_disable_msi(_pObj->pci_dev); \ 53 _pAd->HaveMsi = FALSE; \ 54 } 55 #else 56 #define RTMP_MSI_ENABLE(_pAd) do {} while (0) 57 #define RTMP_MSI_DISABLE(_pAd) do {} while (0) 58 #endif /* PCI_MSI_SUPPORT */ 59 60 #define RTMP_PCI_DEV_UNMAP() \ 61 { if (net_dev->base_addr) { \ 62 iounmap((void *)(net_dev->base_addr)); \ 63 release_mem_region(pci_resource_start(dev_p, 0), \ 64 pci_resource_len(dev_p, 0)); } \ 65 if (net_dev->irq) \ 66 pci_release_regions(dev_p); } 67 68 #define PCI_REG_READ_WORD(pci_dev, offset, Configuration) {\ 69 if (pci_read_config_word(pci_dev, offset, ®16) == 0) \ 70 Configuration = le2cpu16(reg16); \ 71 else \ 72 Configuration = 0; } 73 74 #define PCI_REG_WIRTE_WORD(pci_dev, offset, Configuration) {\ 75 reg16 = cpu2le16(Configuration); \ 76 pci_write_config_word(pci_dev, offset, reg16); } 77 78 #endif /* LINUX */ 79 80 #endif /* __RTMP_PCI_H__ */ 81