Advertisement
Guest User

Untitled

a guest
Apr 29th, 2012
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. #include "types.h"
  2. #include "spu.h"
  3. #include "netrpc.h"
  4. #include "util.h"
  5.  
  6. #define _EIEIO(ctxt) netrpc_eieio(ctxt)
  7.  
  8. void spu_slb_invalidate_all(netrpc_ctxt_t *ctxt, u64 spu_priv2)
  9. {
  10. s32 i;
  11.  
  12. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_Invalidate_All), 0);
  13.  
  14. _EIEIO(ctxt);
  15.  
  16. for(i = 0; i < SPU_SLB_MAX_ENTRIES; i++)
  17. {
  18. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_Index), i);
  19. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_VSID), 0);
  20. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_ESID), 0);
  21.  
  22. _EIEIO(ctxt);
  23. }
  24. }
  25.  
  26. s32 spu_slb_set_entry(netrpc_ctxt_t *ctxt, u64 spu_priv2, u64 index, u64 esid, u64 vsid)
  27. {
  28. if(index >= SPU_SLB_MAX_ENTRIES)
  29. return -1;
  30.  
  31. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_Index), index);
  32. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_VSID), vsid);
  33.  
  34. _EIEIO(ctxt);
  35.  
  36. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SLB_ESID), esid);
  37.  
  38. _EIEIO(ctxt);
  39.  
  40. return 0;
  41. }
  42.  
  43. void spu_in_mbox_write(netrpc_ctxt_t *ctxt, u64 spu_problem, u32 val)
  44. {
  45. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_In_Mbox), val);
  46.  
  47. _EIEIO(ctxt);
  48. }
  49.  
  50. void spu_in_mbox_write_64(netrpc_ctxt_t *ctxt, u64 spu_problem, u64 val)
  51. {
  52. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_In_Mbox), val >> 32);
  53. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_In_Mbox), val & 0xffffffff);
  54.  
  55. _EIEIO(ctxt);
  56. }
  57.  
  58. void spu_sig_notify_1_2_write_64(netrpc_ctxt_t *ctxt, u64 spu_problem, u64 val)
  59. {
  60. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_Sig_Notify_1), val >> 32);
  61. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_Sig_Notify_2), val & 0xffffffff);
  62.  
  63. _EIEIO(ctxt);
  64. }
  65.  
  66. void spu_isolation_req_enable(netrpc_ctxt_t *ctxt, u64 spu_priv2)
  67. {
  68. write_u64(ctxt, SPU_RADDR(spu_priv2, _OFFSET_SPU_PrivCntl), 0x4);
  69.  
  70. _EIEIO(ctxt);
  71. }
  72.  
  73. void spu_isolation_req(netrpc_ctxt_t *ctxt, u64 spu_problem)
  74. {
  75. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_RunCntl), SPU_RunCntl_ISOLATION_REQ);
  76.  
  77. _EIEIO(ctxt);
  78. }
  79.  
  80. void spu_stop_req(netrpc_ctxt_t *ctxt, u64 spu_problem)
  81. {
  82. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_RunCntl), SPU_RunCntl_STOP_REQ);
  83.  
  84. _EIEIO(ctxt);
  85. }
  86.  
  87. void spu_runcntl_req(netrpc_ctxt_t *ctxt, u64 spu_problem, u32 req)
  88. {
  89. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_RunCntl), req);
  90.  
  91. _EIEIO(ctxt);
  92. }
  93.  
  94. u8 spu_mbox_stat_intr_out_mbox_count(netrpc_ctxt_t *ctxt, u64 spu_problem)
  95. {
  96. u32 v;
  97. read_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_Mbox_Stat), &v);
  98. return (v >> 16) & 0xff;
  99. }
  100.  
  101. u8 spu_mbox_stat_in_mbox_count(netrpc_ctxt_t *ctxt, u64 spu_problem)
  102. {
  103. u32 v;
  104. read_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_Mbox_Stat), &v);
  105. return (v >> 8) & 0xff;
  106. }
  107.  
  108. u8 spu_mbox_stat_out_mbox_count(netrpc_ctxt_t *ctxt, u64 spu_problem)
  109. {
  110. u32 v;
  111. read_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_SPU_Mbox_Stat), &v);
  112. return v & 0xff;
  113. }
  114.  
  115. u8 spu_mfc_cmd_exec(netrpc_ctxt_t *ctxt, u64 spu_problem, u32 lsa, u64 ea, u16 size, u16 tag, u16 classid, u16 cmd)
  116. {
  117. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_LSA), lsa);
  118. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_EAH), ea >> 32);
  119. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_EAL), ea & 0xffffffff);
  120. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_Size), (size << 16) | tag);
  121. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_ClassID_CMD), (classid << 16) | cmd);
  122.  
  123. _EIEIO(ctxt);
  124.  
  125. u32 v;
  126. read_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_MFC_CMDStatus), &v);
  127. return v & 0x3;
  128. }
  129.  
  130. u8 spu_mfc_cmd_tag_status(netrpc_ctxt_t *ctxt, u64 spu_problem, u8 tag)
  131. {
  132. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_Prxy_QueryType), 0);
  133. write_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_Prxy_QueryMask), 1 << tag);
  134.  
  135. _EIEIO(ctxt);
  136.  
  137. u32 v;
  138. read_u32(ctxt, SPU_RADDR(spu_problem, _OFFSET_Prxy_TagStatus), &v);
  139. return (v >> tag) & 0x1;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement