#define   PIPE_CONTROL_DEPTH_CACHE_FLUSH               (1<<0)
 #define   PIPE_CONTROL_GLOBAL_GTT (1<<2) /* in addr dword */
 
+#define MI_MATH(x)                     MI_INSTR(0x1a, (x) - 1)
+#define MI_MATH_INSTR(opcode, op1, op2) ((opcode) << 20 | (op1) << 10 | (op2))
+/* Opcodes for MI_MATH_INSTR */
+#define   MI_MATH_NOOP                 MI_MATH_INSTR(0x000, 0x0, 0x0)
+#define   MI_MATH_LOAD(op1, op2)       MI_MATH_INSTR(0x080, op1, op2)
+#define   MI_MATH_LOADINV(op1, op2)    MI_MATH_INSTR(0x480, op1, op2)
+#define   MI_MATH_LOAD0(op1)           MI_MATH_INSTR(0x081, op1)
+#define   MI_MATH_LOAD1(op1)           MI_MATH_INSTR(0x481, op1)
+#define   MI_MATH_ADD                  MI_MATH_INSTR(0x100, 0x0, 0x0)
+#define   MI_MATH_SUB                  MI_MATH_INSTR(0x101, 0x0, 0x0)
+#define   MI_MATH_AND                  MI_MATH_INSTR(0x102, 0x0, 0x0)
+#define   MI_MATH_OR                   MI_MATH_INSTR(0x103, 0x0, 0x0)
+#define   MI_MATH_XOR                  MI_MATH_INSTR(0x104, 0x0, 0x0)
+#define   MI_MATH_STORE(op1, op2)      MI_MATH_INSTR(0x180, op1, op2)
+#define   MI_MATH_STOREINV(op1, op2)   MI_MATH_INSTR(0x580, op1, op2)
+/* Registers used as operands in MI_MATH_INSTR */
+#define   MI_MATH_REG(x)               (x)
+#define   MI_MATH_REG_SRCA             0x20
+#define   MI_MATH_REG_SRCB             0x21
+#define   MI_MATH_REG_ACCU             0x31
+#define   MI_MATH_REG_ZF               0x32
+#define   MI_MATH_REG_CF               0x33
+
 /*
  * Commands used only by the command parser
  */
 
 #define   RING_WAIT            (1 << 11) /* gen3+, PRBx_CTL */
 #define   RING_WAIT_SEMAPHORE  (1 << 10) /* gen6+ */
 
+/* There are 16 64-bit CS General Purpose Registers per-engine on Gen8+ */
+#define GEN8_RING_CS_GPR(base, n)      _MMIO((base) + 0x600 + (n) * 8)
+#define GEN8_RING_CS_GPR_UDW(base, n)  _MMIO((base) + 0x600 + (n) * 8 + 4)
+
 #define RING_FORCE_TO_NONPRIV(base, i) _MMIO(((base) + 0x4D0) + (i) * 4)
 #define   RING_FORCE_TO_NONPRIV_ACCESS_RW      (0 << 28)    /* CFL+ & Gen11+ */
 #define   RING_FORCE_TO_NONPRIV_ACCESS_RD      (1 << 28)