Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: None  |  size: 3.64 KB  |  views: 35  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }
clone this paste RAW Paste Data