2013-03-29 15:52:27 +01:00
/*
Copyright ( C ) 2004 - 2009 Ivo van Doorn < IvDoorn @ gmail . com >
< 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
2013-12-06 03:32:11 -08:00
along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2013-03-29 15:52:27 +01:00
*/
/*
Module : rt2x00mmio
Abstract : Data structures for the rt2x00mmio module .
*/
# ifndef RT2X00MMIO_H
# define RT2X00MMIO_H
# include <linux/io.h>
/*
* Register access .
*/
2013-04-05 08:27:00 +02:00
static inline void rt2x00mmio_register_read ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
u32 * value )
2013-03-29 15:52:27 +01:00
{
* value = readl ( rt2x00dev - > csr . base + offset ) ;
}
2013-04-05 08:27:00 +02:00
static inline void rt2x00mmio_register_multiread ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
void * value , const u32 length )
2013-03-29 15:52:27 +01:00
{
memcpy_fromio ( value , rt2x00dev - > csr . base + offset , length ) ;
}
2013-04-05 08:27:00 +02:00
static inline void rt2x00mmio_register_write ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
u32 value )
2013-03-29 15:52:27 +01:00
{
writel ( value , rt2x00dev - > csr . base + offset ) ;
}
2013-04-05 08:27:00 +02:00
static inline void rt2x00mmio_register_multiwrite ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
const void * value ,
const u32 length )
2013-03-29 15:52:27 +01:00
{
__iowrite32_copy ( rt2x00dev - > csr . base + offset , value , length > > 2 ) ;
}
/**
2013-04-05 08:27:00 +02:00
* rt2x00mmio_regbusy_read - Read from register with busy check
2013-03-29 15:52:27 +01:00
* @ 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 .
*/
2013-04-05 08:27:00 +02:00
int rt2x00mmio_regbusy_read ( struct rt2x00_dev * rt2x00dev ,
const unsigned int offset ,
const struct rt2x00_field32 field ,
u32 * reg ) ;
2013-03-29 15:52:27 +01:00
/**
2013-04-05 08:27:00 +02:00
* struct queue_entry_priv_mmio : Per entry PCI specific information
2013-03-29 15:52:27 +01:00
*
* @ desc : Pointer to device descriptor
* @ desc_dma : DMA pointer to & desc .
* @ data : Pointer to device ' s entry memory .
* @ data_dma : DMA pointer to & data .
*/
2013-04-05 08:27:00 +02:00
struct queue_entry_priv_mmio {
2013-03-29 15:52:27 +01:00
__le32 * desc ;
dma_addr_t desc_dma ;
} ;
/**
2013-04-05 08:27:00 +02:00
* rt2x00mmio_rxdone - Handle RX done events
2013-03-29 15:52:27 +01:00
* @ rt2x00dev : Device pointer , see & struct rt2x00_dev .
*
* Returns true if there are still rx frames pending and false if all
* pending rx frames were processed .
*/
2013-04-05 08:27:00 +02:00
bool rt2x00mmio_rxdone ( struct rt2x00_dev * rt2x00dev ) ;
2013-03-29 15:52:27 +01:00
/**
2013-04-05 08:27:00 +02:00
* rt2x00mmio_flush_queue - Flush data queue
2013-03-29 15:52:27 +01:00
* @ queue : Data queue to stop
* @ drop : True to drop all pending frames .
*
* This will wait for a maximum of 100 ms , waiting for the queues
* to become empty .
*/
2013-04-05 08:27:00 +02:00
void rt2x00mmio_flush_queue ( struct data_queue * queue , bool drop ) ;
2013-03-29 15:52:27 +01:00
/*
* Device initialization handlers .
*/
2013-04-05 08:27:00 +02:00
int rt2x00mmio_initialize ( struct rt2x00_dev * rt2x00dev ) ;
void rt2x00mmio_uninitialize ( struct rt2x00_dev * rt2x00dev ) ;
2013-03-29 15:52:27 +01:00
# endif /* RT2X00MMIO_H */