linux/drivers/net/wireless/rt2x00/rt2x00pci.h
<<
>>
Prefs
   1/*
   2        Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
   3        <http://rt2x00.serialmonkey.com>
   4
   5        This program is free software; you can redistribute it and/or modify
   6        it under the terms of the GNU General Public License as published by
   7        the Free Software Foundation; either version 2 of the License, or
   8        (at your option) any later version.
   9
  10        This program is distributed in the hope that it will be useful,
  11        but WITHOUT ANY WARRANTY; without even the implied warranty of
  12        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13        GNU General Public License for more details.
  14
  15        You should have received a copy of the GNU General Public License
  16        along with this program; if not, write to the
  17        Free Software Foundation, Inc.,
  18        59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19 */
  20
  21/*
  22        Module: rt2x00pci
  23        Abstract: Data structures for the rt2x00pci module.
  24 */
  25
  26#ifndef RT2X00PCI_H
  27#define RT2X00PCI_H
  28
  29#include <linux/io.h>
  30#include <linux/pci.h>
  31
  32/*
  33 * This variable should be used with the
  34 * pci_driver structure initialization.
  35 */
  36#define PCI_DEVICE_DATA(__ops)  .driver_data = (kernel_ulong_t)(__ops)
  37
  38/*
  39 * Register access.
  40 */
  41static inline void rt2x00pci_register_read(struct rt2x00_dev *rt2x00dev,
  42                                           const unsigned int offset,
  43                                           u32 *value)
  44{
  45        *value = readl(rt2x00dev->csr.base + offset);
  46}
  47
  48static inline void rt2x00pci_register_multiread(struct rt2x00_dev *rt2x00dev,
  49                                                const unsigned int offset,
  50                                                void *value, const u32 length)
  51{
  52        memcpy_fromio(value, rt2x00dev->csr.base + offset, length);
  53}
  54
  55static inline void rt2x00pci_register_write(struct rt2x00_dev *rt2x00dev,
  56                                            const unsigned int offset,
  57                                            u32 value)
  58{
  59        writel(value, rt2x00dev->csr.base + offset);
  60}
  61
  62static inline void rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev,
  63                                                 const unsigned int offset,
  64                                                 const void *value,
  65                                                 const u32 length)
  66{
  67        __iowrite32_copy(rt2x00dev->csr.base + offset, value, length >> 2);
  68}
  69
  70/**
  71 * rt2x00pci_regbusy_read - Read from register with busy check
  72 * @rt2x00dev: Device pointer, see &struct rt2x00_dev.
  73 * @offset: Register offset
  74 * @field: Field to check if register is busy
  75 * @reg: Pointer to where register contents should be stored
  76 *
  77 * This function will read the given register, and checks if the
  78 * register is busy. If it is, it will sleep for a couple of
  79 * microseconds before reading the register again. If the register
  80 * is not read after a certain timeout, this function will return
  81 * FALSE.
  82 */
  83int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev,
  84                           const unsigned int offset,
  85                           const struct rt2x00_field32 field,
  86                           u32 *reg);
  87
  88/**
  89 * struct queue_entry_priv_pci: Per entry PCI specific information
  90 *
  91 * @desc: Pointer to device descriptor
  92 * @desc_dma: DMA pointer to &desc.
  93 * @data: Pointer to device's entry memory.
  94 * @data_dma: DMA pointer to &data.
  95 */
  96struct queue_entry_priv_pci {
  97        __le32 *desc;
  98        dma_addr_t desc_dma;
  99};
 100
 101/**
 102 * rt2x00pci_rxdone - Handle RX done events
 103 * @rt2x00dev: Device pointer, see &struct rt2x00_dev.
 104 *
 105 * Returns true if there are still rx frames pending and false if all
 106 * pending rx frames were processed.
 107 */
 108bool rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev);
 109
 110/**
 111 * rt2x00pci_flush_queue - Flush data queue
 112 * @queue: Data queue to stop
 113 * @drop: True to drop all pending frames.
 114 *
 115 * This will wait for a maximum of 100ms, waiting for the queues
 116 * to become empty.
 117 */
 118void rt2x00pci_flush_queue(struct data_queue *queue, bool drop);
 119
 120/*
 121 * Device initialization handlers.
 122 */
 123int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev);
 124void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev);
 125
 126/*
 127 * PCI driver handlers.
 128 */
 129int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops);
 130void rt2x00pci_remove(struct pci_dev *pci_dev);
 131#ifdef CONFIG_PM
 132int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state);
 133int rt2x00pci_resume(struct pci_dev *pci_dev);
 134#else
 135#define rt2x00pci_suspend       NULL
 136#define rt2x00pci_resume        NULL
 137#endif /* CONFIG_PM */
 138
 139#endif /* RT2X00PCI_H */
 140