regdrv.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*------------------------------------------------------------------------------
  2. -- --
  3. -- This software is confidential and proprietary and may be used --
  4. -- only as expressly authorized by a licensing agreement from --
  5. -- --
  6. -- Hantro Products Oy. --
  7. -- --
  8. -- (C) COPYRIGHT 2006 HANTRO PRODUCTS OY --
  9. -- ALL RIGHTS RESERVED --
  10. -- --
  11. -- The entire notice above must be reproduced --
  12. -- on all copies and should not be removed. --
  13. -- --
  14. --------------------------------------------------------------------------------
  15. --
  16. -- Description :
  17. --
  18. --------------------------------------------------------------------------------
  19. --
  20. -- Version control information, please leave untouched.
  21. --
  22. -- $RCSfile: regdrv.c,v $
  23. -- $Revision: 1.6 $
  24. -- $Date: 2008/04/24 11:49:29 $
  25. --
  26. ------------------------------------------------------------------------------*/
  27. /*------------------------------------------------------------------------------
  28. Include headers
  29. ------------------------------------------------------------------------------*/
  30. #include <linux/module.h>
  31. #include <linux/platform_device.h>
  32. #include "regdrv.h"
  33. /*------------------------------------------------------------------------------
  34. External compiler flags
  35. ------------------------------------------------------------------------------*/
  36. /*------------------------------------------------------------------------------
  37. Module defines
  38. ------------------------------------------------------------------------------*/
  39. #ifdef _ASSERT_USED
  40. #ifndef ASSERT
  41. #include <assert.h>
  42. #define ASSERT(expr) assert(expr)
  43. #endif
  44. #else
  45. #define ASSERT(expr)
  46. #endif
  47. static const u32 regMask[33] = { 0x00000000,
  48. 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
  49. 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
  50. 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
  51. 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
  52. 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
  53. 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
  54. 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
  55. 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
  56. };
  57. /* { SWREG, BITS, POSITION } */
  58. static const u32 hwDecRegSpec[HWIF_LAST_REG + 1][3] = {
  59. /* include script-generated part */
  60. #include "8170table.h"
  61. /* HWIF_DEC_IRQ_STAT */ {1, 7, 12},
  62. /* HWIF_PP_IRQ_STAT */ {60, 2, 12},
  63. /* dummy entry */ {0, 0, 0}
  64. };
  65. /*------------------------------------------------------------------------------
  66. Local function prototypes
  67. ------------------------------------------------------------------------------*/
  68. /*------------------------------------------------------------------------------
  69. Functions
  70. ------------------------------------------------------------------------------*/
  71. /*------------------------------------------------------------------------------
  72. Function name: SetDecRegister
  73. Functional description:
  74. Inputs:
  75. Outputs:
  76. Returns:
  77. ------------------------------------------------------------------------------*/
  78. void SetDecRegister(u32 * regBase, u32 id, u32 value)
  79. {
  80. u32 tmp;
  81. ASSERT(id < HWIF_LAST_REG);
  82. tmp = regBase[hwDecRegSpec[id][0]];
  83. tmp &= ~(regMask[hwDecRegSpec[id][1]] << hwDecRegSpec[id][2]);
  84. tmp |= (value & regMask[hwDecRegSpec[id][1]]) << hwDecRegSpec[id][2];
  85. regBase[hwDecRegSpec[id][0]] = tmp;
  86. }
  87. /*------------------------------------------------------------------------------
  88. Function name: GetDecRegister
  89. Functional description:
  90. Inputs:
  91. Outputs:
  92. Returns:
  93. ------------------------------------------------------------------------------*/
  94. u32 GetDecRegister(const u32 * regBase, u32 id)
  95. {
  96. u32 tmp;
  97. ASSERT(id < HWIF_LAST_REG);
  98. tmp = regBase[hwDecRegSpec[id][0]];
  99. tmp = tmp >> hwDecRegSpec[id][2];
  100. tmp &= regMask[hwDecRegSpec[id][1]];
  101. return (tmp);
  102. }