| .. |
| ************************************************** |
| * * |
| * Automatically generated file, do not edit! * |
| * * |
| ************************************************** |
| |
| .. _amdgpu_synid_gfx9_msg: |
| |
| msg |
| === |
| |
| A 16-bit message code. The bits of this operand have the following meaning: |
| |
| ============ =============================== =============== |
| Bits Description Value Range |
| ============ =============================== =============== |
| 3:0 Message *type*. 0..15 |
| 6:4 Optional *operation*. 0..7 |
| 7:7 Unused. \- |
| 9:8 Optional *stream*. 0..3 |
| 15:10 Unused. \- |
| ============ =============================== =============== |
| |
| This operand may be specified as one of the following: |
| |
| * An :ref:`integer_number<amdgpu_synid_integer_number>` or an :ref:`absolute_expression<amdgpu_synid_absolute_expression>`. The value must be in the range from 0 to 0xFFFF. |
| * A *sendmsg* value which is described below. |
| |
| ==================================== ==================================================== |
| Sendmsg Value Syntax Description |
| ==================================== ==================================================== |
| sendmsg(<*type*>) A message identified by its *type*. |
| sendmsg(<*type*>,<*op*>) A message identified by its *type* and *operation*. |
| sendmsg(<*type*>,<*op*>,<*stream*>) A message identified by its *type* and *operation* |
| with a stream *id*. |
| ==================================== ==================================================== |
| |
| *Type* may be specified using message *name* or message *id*. |
| |
| *Op* may be specified using operation *name* or operation *id*. |
| |
| Stream *id* is an integer in the range from 0 to 3. |
| |
| Numeric values may be specified as positive :ref:`integer numbers<amdgpu_synid_integer_number>` |
| or :ref:`absolute expressions<amdgpu_synid_absolute_expression>`. |
| |
| Each message type supports specific operations: |
| |
| ====================== ========== ============================== ============ ========== |
| Message name Message Id Supported Operations Operation Id Stream Id |
| ====================== ========== ============================== ============ ========== |
| MSG_INTERRUPT 1 \- \- \- |
| MSG_GS 2 GS_OP_CUT 1 Optional |
| \ GS_OP_EMIT 2 Optional |
| \ GS_OP_EMIT_CUT 3 Optional |
| MSG_GS_DONE 3 GS_OP_NOP 0 \- |
| \ GS_OP_CUT 1 Optional |
| \ GS_OP_EMIT 2 Optional |
| \ GS_OP_EMIT_CUT 3 Optional |
| MSG_SAVEWAVE 4 \- \- \- |
| MSG_STALL_WAVE_GEN 5 \- \- \- |
| MSG_HALT_WAVES 6 \- \- \- |
| MSG_ORDERED_PS_DONE 7 \- \- \- |
| MSG_EARLY_PRIM_DEALLOC 8 \- \- \- |
| MSG_GS_ALLOC_REQ 9 \- \- \- |
| MSG_GET_DOORBELL 10 \- \- \- |
| MSG_SYSMSG 15 SYSMSG_OP_ECC_ERR_INTERRUPT 1 \- |
| \ SYSMSG_OP_REG_RD 2 \- |
| \ SYSMSG_OP_TTRACE_PC 4 \- |
| ====================== ========== ============================== ============ ========== |
| |
| *Sendmsg* arguments are validated depending on how *type* value is specified: |
| |
| * If message *type* is specified by name, arguments values must satisfy limitations detailed in the table above. |
| * If message *type* is specified as a number, each argument must not exceed the corresponding value range (see the first table). |
| |
| Examples: |
| |
| .. parsed-literal:: |
| |
| // numeric message code |
| msg = 0x10 |
| s_sendmsg 0x12 |
| s_sendmsg msg + 2 |
| |
| // sendmsg with strict arguments validation |
| s_sendmsg sendmsg(MSG_INTERRUPT) |
| s_sendmsg sendmsg(MSG_GS, GS_OP_EMIT) |
| s_sendmsg sendmsg(MSG_GS, 2) |
| s_sendmsg sendmsg(MSG_GS_DONE, GS_OP_EMIT_CUT, 1) |
| s_sendmsg sendmsg(MSG_SYSMSG, SYSMSG_OP_TTRACE_PC) |
| s_sendmsg sendmsg(MSG_GET_DOORBELL) |
| |
| // sendmsg with validation of value range only |
| msg = 2 |
| op = 3 |
| stream = 1 |
| s_sendmsg sendmsg(msg, op, stream) |
| s_sendmsg sendmsg(2, GS_OP_CUT) |