bat_rw.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * (C) Copyright 2002
  3. * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
  4. *
  5. * See file CREDITS for list of people who contributed to this
  6. * project.
  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 as
  10. * published by the Free Software Foundation; either version 2 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21. * MA 02111-1307 USA
  22. *
  23. */
  24. #include <common.h>
  25. #include <asm/processor.h>
  26. #include <asm/mmu.h>
  27. int write_bat (ppc_bat_t bat, unsigned long upper, unsigned long lower)
  28. {
  29. switch (bat) {
  30. case IBAT0:
  31. mtspr (IBAT0L, lower);
  32. mtspr (IBAT0U, upper);
  33. break;
  34. case IBAT1:
  35. mtspr (IBAT1L, lower);
  36. mtspr (IBAT1U, upper);
  37. break;
  38. case IBAT2:
  39. mtspr (IBAT2L, lower);
  40. mtspr (IBAT2U, upper);
  41. break;
  42. case IBAT3:
  43. mtspr (IBAT3L, lower);
  44. mtspr (IBAT3U, upper);
  45. break;
  46. case DBAT0:
  47. mtspr (DBAT0L, lower);
  48. mtspr (DBAT0U, upper);
  49. break;
  50. case DBAT1:
  51. mtspr (DBAT1L, lower);
  52. mtspr (DBAT1U, upper);
  53. break;
  54. case DBAT2:
  55. mtspr (DBAT2L, lower);
  56. mtspr (DBAT2U, upper);
  57. break;
  58. case DBAT3:
  59. mtspr (DBAT3L, lower);
  60. mtspr (DBAT3U, upper);
  61. break;
  62. default:
  63. return (-1);
  64. }
  65. return (0);
  66. }
  67. int read_bat (ppc_bat_t bat, unsigned long *upper, unsigned long *lower)
  68. {
  69. unsigned long register u;
  70. unsigned long register l;
  71. switch (bat) {
  72. case IBAT0:
  73. l = mfspr (IBAT0L);
  74. u = mfspr (IBAT0U);
  75. break;
  76. case IBAT1:
  77. l = mfspr (IBAT1L);
  78. u = mfspr (IBAT1U);
  79. break;
  80. case IBAT2:
  81. l = mfspr (IBAT2L);
  82. u = mfspr (IBAT2U);
  83. break;
  84. case IBAT3:
  85. l = mfspr (IBAT3L);
  86. u = mfspr (IBAT3U);
  87. break;
  88. case DBAT0:
  89. l = mfspr (DBAT0L);
  90. u = mfspr (DBAT0U);
  91. break;
  92. case DBAT1:
  93. l = mfspr (DBAT1L);
  94. u = mfspr (DBAT1U);
  95. break;
  96. case DBAT2:
  97. l = mfspr (DBAT2L);
  98. u = mfspr (DBAT2U);
  99. break;
  100. case DBAT3:
  101. l = mfspr (DBAT3L);
  102. u = mfspr (DBAT3U);
  103. break;
  104. default:
  105. return (-1);
  106. }
  107. *upper = u;
  108. *lower = l;
  109. return (0);
  110. }