home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / vio.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.2 KB  |  119 lines

  1. /*
  2.  * IBM PowerPC Virtual I/O Infrastructure Support.
  3.  *
  4.  * Copyright (c) 2003 IBM Corp.
  5.  *  Dave Engebretsen engebret@us.ibm.com
  6.  *  Santiago Leon santil@us.ibm.com
  7.  *
  8.  * This program is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU General Public License
  10.  * as published by the Free Software Foundation; either version
  11.  * 2 of the License, or (at your option) any later version.
  12.  */
  13.  
  14. #ifndef _ASM_POWERPC_VIO_H
  15. #define _ASM_POWERPC_VIO_H
  16. #ifdef __KERNEL__
  17.  
  18. #include <linux/init.h>
  19. #include <linux/errno.h>
  20. #include <linux/device.h>
  21. #include <linux/dma-mapping.h>
  22. #include <linux/mod_devicetable.h>
  23.  
  24. #include <asm/hvcall.h>
  25. #include <asm/scatterlist.h>
  26.  
  27. /*
  28.  * Architecture-specific constants for drivers to
  29.  * extract attributes of the device using vio_get_attribute()
  30.  */
  31. #define VETH_MAC_ADDR "local-mac-address"
  32. #define VETH_MCAST_FILTER_SIZE "ibm,mac-address-filters"
  33.  
  34. /* End architecture-specific constants */
  35.  
  36. #define h_vio_signal(ua, mode) \
  37.   plpar_hcall_norets(H_VIO_SIGNAL, ua, mode)
  38.  
  39. #define VIO_IRQ_DISABLE        0UL
  40. #define VIO_IRQ_ENABLE        1UL
  41.  
  42. /*
  43.  * VIO CMO minimum entitlement for all devices and spare entitlement
  44.  */
  45. #define VIO_CMO_MIN_ENT 1562624
  46.  
  47. struct iommu_table;
  48.  
  49. /**
  50.  * vio_dev - This structure is used to describe virtual I/O devices.
  51.  *
  52.  * @desired: set from return of driver's get_desired_dma() function
  53.  * @entitled: bytes of IO data that has been reserved for this device.
  54.  * @allocated: bytes of IO data currently in use by the device.
  55.  * @allocs_failed: number of DMA failures due to insufficient entitlement.
  56.  */
  57. struct vio_dev {
  58.     const char *name;
  59.     const char *type;
  60.     uint32_t unit_address;
  61.     unsigned int irq;
  62.     struct {
  63.         size_t desired;
  64.         size_t entitled;
  65.         size_t allocated;
  66.         atomic_t allocs_failed;
  67.     } cmo;
  68.     struct device dev;
  69. };
  70.  
  71. struct vio_driver {
  72.     const struct vio_device_id *id_table;
  73.     int (*probe)(struct vio_dev *dev, const struct vio_device_id *id);
  74.     int (*remove)(struct vio_dev *dev);
  75.     /* A driver must have a get_desired_dma() function to
  76.      * be loaded in a CMO environment if it uses DMA.
  77.      */
  78.     unsigned long (*get_desired_dma)(struct vio_dev *dev);
  79.     struct device_driver driver;
  80. };
  81.  
  82. extern int vio_register_driver(struct vio_driver *drv);
  83. extern void vio_unregister_driver(struct vio_driver *drv);
  84.  
  85. extern int vio_cmo_entitlement_update(size_t);
  86. extern void vio_cmo_set_dev_desired(struct vio_dev *viodev, size_t desired);
  87.  
  88. extern void __devinit vio_unregister_device(struct vio_dev *dev);
  89.  
  90. struct device_node;
  91.  
  92. extern struct vio_dev *vio_register_device_node(
  93.         struct device_node *node_vdev);
  94. extern const void *vio_get_attribute(struct vio_dev *vdev, char *which,
  95.         int *length);
  96. #ifdef CONFIG_PPC_PSERIES
  97. extern struct vio_dev *vio_find_node(struct device_node *vnode);
  98. extern int vio_enable_interrupts(struct vio_dev *dev);
  99. extern int vio_disable_interrupts(struct vio_dev *dev);
  100. #else
  101. static inline int vio_enable_interrupts(struct vio_dev *dev)
  102. {
  103.     return 0;
  104. }
  105. #endif
  106.  
  107. static inline struct vio_driver *to_vio_driver(struct device_driver *drv)
  108. {
  109.     return container_of(drv, struct vio_driver, driver);
  110. }
  111.  
  112. static inline struct vio_dev *to_vio_dev(struct device *dev)
  113. {
  114.     return container_of(dev, struct vio_dev, dev);
  115. }
  116.  
  117. #endif /* __KERNEL__ */
  118. #endif /* _ASM_POWERPC_VIO_H */
  119.