idals.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* 
  2.    * File...........: linux/include/asm-s390x/idals.h
  3.    * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
  4.    * Bugreports.to..: <Linux390@de.ibm.com>
  5.    * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000a
  6.    
  7.    * History of changes
  8.    * 07/24/00 new file
  9.  */
  10. #include <linux/config.h>
  11. #include <asm/irq.h>
  12. #define IDA_SIZE_LOG 11 /* 11 for 2k , 12 for 4k */
  13. #define IDA_BLOCK_SIZE (1L<<IDA_SIZE_LOG)
  14. static inline addr_t *
  15. idal_alloc ( int nridaws )
  16. {
  17. if ( nridaws > 33 )
  18. BUG();
  19. return kmalloc(nridaws * sizeof(addr_t), GFP_ATOMIC | GFP_DMA );
  20. }
  21. static inline void 
  22. idal_free ( addr_t *idal )
  23. {
  24. kfree (idal);
  25. }
  26. #if defined(CONFIG_ARCH_S390X)
  27. extern unsigned long __create_idal(unsigned long address, int count);
  28. #endif
  29. /*
  30.  * Function: set_normalized_cda
  31.  * sets the address of the data in CCW
  32.  * if necessary it allocates an IDAL and sets sthe appropriate flags
  33.  */
  34. static inline int
  35. set_normalized_cda(ccw1_t * ccw, unsigned long address)
  36. {
  37. int ret = 0;
  38. #if defined (CONFIG_ARCH_S390X)
  39. if (((address + ccw->count) >> 31) != 0) {
  40. if (ccw->flags & CCW_FLAG_IDA)
  41. BUG();
  42. address = __create_idal(address, ccw->count);
  43. if (address)
  44. ccw->flags |= CCW_FLAG_IDA;
  45. else
  46. ret = -ENOMEM;
  47. }
  48. #endif
  49. ccw->cda = (__u32) address;
  50. return ret;
  51. }
  52. /*
  53.  * Function: clear_normalized_cda
  54.  * releases any allocated IDAL related to the CCW
  55.  */
  56. static inline void
  57. clear_normalized_cda ( ccw1_t * ccw ) 
  58. {
  59. #if defined(CONFIG_ARCH_S390X)
  60. if ( ccw -> flags & CCW_FLAG_IDA ) {
  61. idal_free ( (addr_t *)(unsigned long) (ccw -> cda ));
  62. ccw -> flags &= ~CCW_FLAG_IDA;
  63. }
  64. #endif
  65. ccw -> cda = 0;
  66. }