2007-09-25 17:57:13 -07:00
/*
2009-11-08 16:39:55 +01:00
Copyright ( C ) 2004 - 2009 Ivo van Doorn < IvDoorn @ gmail . com >
2007-09-25 17:57:13 -07:00
< http : //rt2x00.serialmonkey.com>
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the
Free Software Foundation , Inc . ,
59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*/
/*
Module : rt2x00pci
Abstract : Data structures for the rt2x00pci module .
*/
# ifndef RT2X00PCI_H
# define RT2X00PCI_H
# include <linux/io.h>
2010-02-13 20:55:48 +01:00
# include <linux/pci.h>
2007-09-25 17:57:13 -07:00
/*
* This variable should be used with the
* pci_driver structure initialization .
*/
# define PCI_DEVICE_DATA(__ops) .driver_data = (kernel_ulong_t)(__ops)
/*
* Register access .
*/
2007-10-27 13:41:25 +02:00
static inline void rt2x00pci_register_read ( struct rt2x00_dev * rt2x00dev ,
2008-10-29 19:41:03 +01:00
const unsigned int offset ,
2007-09-25 17:57:13 -07:00
u32 * value )
{
2008-02-10 22:49:13 +01:00
* value = readl ( rt2x00dev - > csr . base + offset ) ;
2007-09-25 17:57:13 -07:00
}
2009-11-04 18:35:25 +01:00
static inline void rt2x00pci_register_multiread ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
void * value , const u32 length )
2007-09-25 17:57:13 -07:00
{
2008-02-10 22:49:13 +01:00
memcpy_fromio ( value , rt2x00dev - > csr . base + offset , length ) ;
2007-09-25 17:57:13 -07:00
}
2007-10-27 13:41:25 +02:00
static inline void rt2x00pci_register_write ( struct rt2x00_dev * rt2x00dev ,
2008-10-29 19:41:03 +01:00
const unsigned int offset ,
2007-09-25 17:57:13 -07:00
u32 value )
{
2008-02-10 22:49:13 +01:00
writel ( value , rt2x00dev - > csr . base + offset ) ;
2007-09-25 17:57:13 -07:00
}
2009-11-04 18:35:25 +01:00
static inline void rt2x00pci_register_multiwrite ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
const void * value ,
const u32 length )
2007-09-25 17:57:13 -07:00
{
2010-12-13 12:39:39 +01:00
__iowrite32_copy ( rt2x00dev - > csr . base + offset , value , length > > 2 ) ;
2007-09-25 17:57:13 -07:00
}
2008-11-10 19:41:40 +01:00
/**
* rt2x00pci_regbusy_read - Read from register with busy check
* @ rt2x00dev : Device pointer , see & struct rt2x00_dev .
* @ offset : Register offset
* @ field : Field to check if register is busy
* @ reg : Pointer to where register contents should be stored
*
* This function will read the given register , and checks if the
* register is busy . If it is , it will sleep for a couple of
* microseconds before reading the register again . If the register
* is not read after a certain timeout , this function will return
* FALSE .
*/
int rt2x00pci_regbusy_read ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
const struct rt2x00_field32 field ,
u32 * reg ) ;
2008-02-05 16:42:23 -05:00
/**
2008-05-10 13:46:03 +02:00
* struct queue_entry_priv_pci : Per entry PCI specific information
2008-02-05 16:42:23 -05:00
*
* @ desc : Pointer to device descriptor
2008-05-10 13:46:03 +02:00
* @ desc_dma : DMA pointer to & desc .
2008-02-05 16:42:23 -05:00
* @ data : Pointer to device ' s entry memory .
2008-04-21 19:02:17 +02:00
* @ data_dma : DMA pointer to & data .
2008-02-05 16:42:23 -05:00
*/
2008-05-10 13:46:03 +02:00
struct queue_entry_priv_pci {
2008-02-05 16:42:23 -05:00
__le32 * desc ;
2008-02-17 17:33:24 +01:00
dma_addr_t desc_dma ;
2008-02-05 16:42:23 -05:00
} ;
/**
* rt2x00pci_rxdone - Handle RX done events
* @ rt2x00dev : Device pointer , see & struct rt2x00_dev .
2007-09-25 17:57:13 -07:00
*/
void rt2x00pci_rxdone ( struct rt2x00_dev * rt2x00dev ) ;
2008-02-05 16:42:23 -05:00
2007-09-25 17:57:13 -07:00
/*
* Device initialization handlers .
*/
int rt2x00pci_initialize ( struct rt2x00_dev * rt2x00dev ) ;
void rt2x00pci_uninitialize ( struct rt2x00_dev * rt2x00dev ) ;
/*
* PCI driver handlers .
*/
int rt2x00pci_probe ( struct pci_dev * pci_dev , const struct pci_device_id * id ) ;
void rt2x00pci_remove ( struct pci_dev * pci_dev ) ;
# ifdef CONFIG_PM
int rt2x00pci_suspend ( struct pci_dev * pci_dev , pm_message_t state ) ;
int rt2x00pci_resume ( struct pci_dev * pci_dev ) ;
# else
# define rt2x00pci_suspend NULL
# define rt2x00pci_resume NULL
# endif /* CONFIG_PM */
# endif /* RT2X00PCI_H */