hw.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2
  3. // Refer to the license.txt file included.
  4. #include "common/common_types.h"
  5. #include "core/hw/hw.h"
  6. #include "core/hw/gpu.h"
  7. #include "core/hw/ndma.h"
  8. namespace HW {
  9. enum {
  10. VADDR_HASH = 0x1EC01000,
  11. VADDR_CSND = 0x1EC03000,
  12. VADDR_DSP = 0x1EC40000,
  13. VADDR_PDN = 0x1EC41000,
  14. VADDR_CODEC = 0x1EC41000,
  15. VADDR_SPI = 0x1EC42000,
  16. VADDR_SPI_2 = 0x1EC43000, // Only used under TWL_FIRM?
  17. VADDR_I2C = 0x1EC44000,
  18. VADDR_CODEC_2 = 0x1EC45000,
  19. VADDR_HID = 0x1EC46000,
  20. VADDR_PAD = 0x1EC46000,
  21. VADDR_PTM = 0x1EC46000,
  22. VADDR_GPIO = 0x1EC47000,
  23. VADDR_I2C_2 = 0x1EC48000,
  24. VADDR_SPI_3 = 0x1EC60000,
  25. VADDR_I2C_3 = 0x1EC61000,
  26. VADDR_MIC = 0x1EC62000,
  27. VADDR_PXI = 0x1EC63000, // 0xFFFD2000
  28. //VADDR_NTRCARD
  29. VADDR_CDMA = 0xFFFDA000, // CoreLink DMA-330? Info
  30. VADDR_DSP_2 = 0x1ED03000,
  31. VADDR_HASH_2 = 0x1EE01000,
  32. VADDR_GPU = 0x1EF00000,
  33. };
  34. template <typename T>
  35. inline void Read(T &var, const u32 addr) {
  36. switch (addr & 0xFFFFF000) {
  37. // TODO(bunnei): What is the virtual address of NDMA?
  38. // case VADDR_NDMA:
  39. // NDMA::Read(var, addr);
  40. // break;
  41. case VADDR_GPU:
  42. GPU::Read(var, addr);
  43. break;
  44. default:
  45. ERROR_LOG(HW, "unknown Read%lu @ 0x%08X", sizeof(var) * 8, addr);
  46. }
  47. }
  48. template <typename T>
  49. inline void Write(u32 addr, const T data) {
  50. switch (addr & 0xFFFFF000) {
  51. // TODO(bunnei): What is the virtual address of NDMA?
  52. // case VADDR_NDMA
  53. // NDMA::Write(addr, data);
  54. // break;
  55. case VADDR_GPU:
  56. GPU::Write(addr, data);
  57. break;
  58. default:
  59. ERROR_LOG(HW, "unknown Write%lu 0x%08X @ 0x%08X", sizeof(data) * 8, (u32)data, addr);
  60. }
  61. }
  62. // Explicitly instantiate template functions because we aren't defining this in the header:
  63. template void Read<u64>(u64 &var, const u32 addr);
  64. template void Read<u32>(u32 &var, const u32 addr);
  65. template void Read<u16>(u16 &var, const u32 addr);
  66. template void Read<u8>(u8 &var, const u32 addr);
  67. template void Write<u64>(u32 addr, const u64 data);
  68. template void Write<u32>(u32 addr, const u32 data);
  69. template void Write<u16>(u32 addr, const u16 data);
  70. template void Write<u8>(u32 addr, const u8 data);
  71. /// Update hardware
  72. void Update() {
  73. GPU::Update();
  74. NDMA::Update();
  75. }
  76. /// Initialize hardware
  77. void Init() {
  78. GPU::Init();
  79. NDMA::Init();
  80. NOTICE_LOG(HW, "initialized OK");
  81. }
  82. /// Shutdown hardware
  83. void Shutdown() {
  84. NOTICE_LOG(HW, "shutdown OK");
  85. }
  86. }