Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © <2010>, Intel Corporation.
  3.  *
  4.  * This program is licensed under the terms and conditions of the
  5.  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
  6.  * http://www.opensource.org/licenses/eclipse-1.0.php.
  7.  *
  8.  */
  9. // Module name: load_ILDB_Cntrl_Data.asm
  10. //
  11. // This module loads AVC ILDB control data for one MB.  
  12. //
  13. //----------------------------------------------------------------
  14. //  Symbols need to be defined before including this module
  15. //
  16. //      Source region in :ud
  17. //      CNTRL_DATA_D:   CNTRL_DATA_D Base=rxx ElementSize=4 SrcRegion=REGION(8,1) Type=ud                       // 8 GRFs
  18. //
  19. //      Binding table index:
  20. //      BI_CNTRL_DATA:  Binding table index of control data surface
  21. //
  22. //----------------------------------------------------------------
  23.  
  24.         // We need to get control data offset for the bottom MB in mbaff mode.
  25.         // That is, get f0.1=1 if MbaffFlag==1 && BotFieldFlag==1
  26.         and (1) CTemp1_W:uw             BitFields:uw    MbaffFlag+BotFieldFlag:uw       // Mute all other bits
  27.  
  28.         and.nz.f0.0     (1)     null:w          BitFields:w             CntlDataExpFlag:w                       // Get CntlDataExpFlag
  29.  
  30.         cmp.e.f0.1 (1) NULLREGW         CTemp1_W:uw     MbaffFlag+BotFieldFlag:uw       // Check mbaff and bot flags
  31.  
  32.         (f0.0)  jmpi    ILDB_LABEL(READ_BLC_CNTL_DATA)
  33.  
  34.         // On Crestline, MB control data in memory occupy 64 DWs (expanded).  
  35. //    mov (1)   MSGSRC.0<1>:ud  0:w                                             { NoDDClr }                             // Block origin X
  36. //    mov (1)   MSGSRC.1<1>:ud  CntrlDataOffsetY:ud             { NoDDClr, NoDDChk }    // Block origin Y
  37. //    mov (1)   MSGSRC.2<1>:ud  0x000F000F:ud                   { NoDDChk }                             // Block width and height (16x16=256 bytes)
  38.  
  39.     mov (2)     MSGSRC.0<1>:ud  ORIX_CUR<2;2,1>:uw                      { NoDDClr }                             // Block origin X,Y
  40.     mov (1)     MSGSRC.2<1>:ud  0x000F000F:ud                           { NoDDChk }                             // Block width and height (16x16=256 bytes)
  41.  
  42.         (f0.1) add (1)  MSGSRC.1:ud             MSGSRC.1:ud             16:w    // +16 to for bottom MB in a pair
  43.  
  44.     send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud        DAPREAD DWBRMSGDSC_SC+0x00080000+BI_CNTRL_DATA  // Receive 8 GRFs
  45.         jmpi    ILDB_LABEL(READ_CNTL_DATA_DONE)
  46.        
  47.        
  48. ILDB_LABEL(READ_BLC_CNTL_DATA):
  49.         // On Bearlake-C, MB control data in memory occupy 16 DWs. Data port returns 8 GRFs with expanded control data.
  50.  
  51.         // Global offset
  52.         mov (1) MSGSRC.2:ud             CntrlDataOffsetY:ud     // CntrlDataOffsetY is the global offset
  53.  
  54.         (f0.1) add (1) MSGSRC.2:ud              MSGSRC.2:ud             64:w    // +64 to the next MB control data (bot MB)
  55.  
  56.     send (8) CNTRL_DATA_D(0)<1> MSGHDRY MSGSRC<8;8,1>:ud        DAPREAD RESP_LEN(8)+ILDBRMSGDSC+BI_CNTRL_DATA   // Receive 8 GRFs
  57.  
  58. ILDB_LABEL(READ_CNTL_DATA_DONE):
  59.  
  60. // End of load_ILDB_Cntrl_Data.asm
  61.  
  62.  
  63.  
  64.  
  65. // AVC ILDB control data message header format
  66.  
  67. //DWord Bit     Description
  68. //M0.31:0    Debug
  69. //M0.31:0    Debug
  70. //M0.31:8    Ignored
  71. //              7:0             Dispatch ID. // This ID is assigned by the fixed function unit and is a unique identifier for the thread.  It is used to free up resources used by the thread upon thread completion.
  72. //M0.31:0    Ignored
  73. //M0.31:0    Ignored
  74. //M0.31:0    Global Offset. Specifies the global byte offset into the buffer.
  75.                                 //      This offset must be OWord aligned (bits 3:0 MBZ) Format = U32 Range = [0,FFFFFFF0h]
  76. //M0.31:0    Ignored
  77. //M0.31:0    Ignored
  78.  
  79.  
  80.  
  81.