2008-05-19 16:52:27 -07:00
/*
2005-04-16 15:20:36 -07:00
* ebus . h : PCI to Ebus pseudo driver software state .
*
* Copyright ( C ) 1997 Eddie C . Dost ( ecd @ skynet . be )
* Copyright ( C ) 1999 David S . Miller ( davem @ redhat . com )
*/
# ifndef __SPARC64_EBUS_H
# define __SPARC64_EBUS_H
# include <asm/oplib.h>
2006-06-22 19:12:03 -07:00
# include <asm/prom.h>
2006-06-23 01:44:10 -07:00
# include <asm/of_device.h>
2005-04-16 15:20:36 -07:00
struct linux_ebus_child {
struct linux_ebus_child * next ;
struct linux_ebus_device * parent ;
struct linux_ebus * bus ;
2006-06-22 19:12:03 -07:00
struct device_node * prom_node ;
2005-04-16 15:20:36 -07:00
struct resource resource [ PROMREG_MAX ] ;
int num_addrs ;
unsigned int irqs [ PROMINTR_MAX ] ;
int num_irqs ;
} ;
struct linux_ebus_device {
2006-06-23 01:44:10 -07:00
struct of_device ofdev ;
2005-04-16 15:20:36 -07:00
struct linux_ebus_device * next ;
struct linux_ebus_child * children ;
struct linux_ebus * bus ;
2006-06-22 19:12:03 -07:00
struct device_node * prom_node ;
2005-04-16 15:20:36 -07:00
struct resource resource [ PROMREG_MAX ] ;
int num_addrs ;
unsigned int irqs [ PROMINTR_MAX ] ;
int num_irqs ;
} ;
2006-06-23 01:44:10 -07:00
# define to_ebus_device(d) container_of(d, struct linux_ebus_device, ofdev.dev)
2005-04-16 15:20:36 -07:00
struct linux_ebus {
2006-06-23 01:44:10 -07:00
struct of_device ofdev ;
2005-04-16 15:20:36 -07:00
struct linux_ebus * next ;
struct linux_ebus_device * devices ;
struct pci_dev * self ;
int index ;
int is_rio ;
2006-06-22 19:12:03 -07:00
struct device_node * prom_node ;
2005-04-16 15:20:36 -07:00
} ;
2006-06-23 01:44:10 -07:00
# define to_ebus(d) container_of(d, struct linux_ebus, ofdev.dev)
2005-04-16 15:20:36 -07:00
struct ebus_dma_info {
spinlock_t lock ;
void __iomem * regs ;
unsigned int flags ;
# define EBUS_DMA_FLAG_USE_EBDMA_HANDLER 0x00000001
# define EBUS_DMA_FLAG_TCI_DISABLE 0x00000002
/* These are only valid is EBUS_DMA_FLAG_USE_EBDMA_HANDLER is
* set .
*/
void ( * callback ) ( struct ebus_dma_info * p , int event , void * cookie ) ;
void * client_cookie ;
unsigned int irq ;
# define EBUS_DMA_EVENT_ERROR 1
# define EBUS_DMA_EVENT_DMA 2
# define EBUS_DMA_EVENT_DEVICE 4
unsigned char name [ 64 ] ;
} ;
extern int ebus_dma_register ( struct ebus_dma_info * p ) ;
extern int ebus_dma_irq_enable ( struct ebus_dma_info * p , int on ) ;
extern void ebus_dma_unregister ( struct ebus_dma_info * p ) ;
extern int ebus_dma_request ( struct ebus_dma_info * p , dma_addr_t bus_addr ,
size_t len ) ;
extern void ebus_dma_prepare ( struct ebus_dma_info * p , int write ) ;
extern unsigned int ebus_dma_residue ( struct ebus_dma_info * p ) ;
2005-11-07 14:09:19 -08:00
extern unsigned int ebus_dma_addr ( struct ebus_dma_info * p ) ;
2005-04-16 15:20:36 -07:00
extern void ebus_dma_enable ( struct ebus_dma_info * p , int on ) ;
extern struct linux_ebus * ebus_chain ;
extern void ebus_init ( void ) ;
# define for_each_ebus(bus) \
for ( ( bus ) = ebus_chain ; ( bus ) ; ( bus ) = ( bus ) - > next )
# define for_each_ebusdev(dev, bus) \
for ( ( dev ) = ( bus ) - > devices ; ( dev ) ; ( dev ) = ( dev ) - > next )
# define for_each_edevchild(dev, child) \
for ( ( child ) = ( dev ) - > children ; ( child ) ; ( child ) = ( child ) - > next )
# endif /* !(__SPARC64_EBUS_H) */