1 /**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 *** To edit the content of this header, modify the corresponding 11 *** source file (e.g. under external/kernel-headers/original/) then 12 *** run bionic/libc/kernel/tools/update_all.py 13 *** 14 *** Any manual change here will be lost the next time this script will 15 *** be run. You've been warned! 16 *** 17 **************************************************************************** 18 ****************************************************************************/ 19 #ifndef HABANALABS_H_ 20 #define HABANALABS_H_ 21 #include <linux/types.h> 22 #include <linux/ioctl.h> 23 #define GOYA_KMD_SRAM_RESERVED_SIZE_FROM_START 0x8000 24 #define GAUDI_DRIVER_SRAM_RESERVED_SIZE_FROM_START 0x80 25 #define GAUDI_FIRST_AVAILABLE_W_S_SYNC_OBJECT 48 26 #define GAUDI_FIRST_AVAILABLE_W_S_MONITOR 24 27 enum goya_queue_id { 28 GOYA_QUEUE_ID_DMA_0 = 0, 29 GOYA_QUEUE_ID_DMA_1 = 1, 30 GOYA_QUEUE_ID_DMA_2 = 2, 31 GOYA_QUEUE_ID_DMA_3 = 3, 32 GOYA_QUEUE_ID_DMA_4 = 4, 33 GOYA_QUEUE_ID_CPU_PQ = 5, 34 GOYA_QUEUE_ID_MME = 6, 35 GOYA_QUEUE_ID_TPC0 = 7, 36 GOYA_QUEUE_ID_TPC1 = 8, 37 GOYA_QUEUE_ID_TPC2 = 9, 38 GOYA_QUEUE_ID_TPC3 = 10, 39 GOYA_QUEUE_ID_TPC4 = 11, 40 GOYA_QUEUE_ID_TPC5 = 12, 41 GOYA_QUEUE_ID_TPC6 = 13, 42 GOYA_QUEUE_ID_TPC7 = 14, 43 GOYA_QUEUE_ID_SIZE 44 }; 45 enum gaudi_queue_id { 46 GAUDI_QUEUE_ID_DMA_0_0 = 0, 47 GAUDI_QUEUE_ID_DMA_0_1 = 1, 48 GAUDI_QUEUE_ID_DMA_0_2 = 2, 49 GAUDI_QUEUE_ID_DMA_0_3 = 3, 50 GAUDI_QUEUE_ID_DMA_1_0 = 4, 51 GAUDI_QUEUE_ID_DMA_1_1 = 5, 52 GAUDI_QUEUE_ID_DMA_1_2 = 6, 53 GAUDI_QUEUE_ID_DMA_1_3 = 7, 54 GAUDI_QUEUE_ID_CPU_PQ = 8, 55 GAUDI_QUEUE_ID_DMA_2_0 = 9, 56 GAUDI_QUEUE_ID_DMA_2_1 = 10, 57 GAUDI_QUEUE_ID_DMA_2_2 = 11, 58 GAUDI_QUEUE_ID_DMA_2_3 = 12, 59 GAUDI_QUEUE_ID_DMA_3_0 = 13, 60 GAUDI_QUEUE_ID_DMA_3_1 = 14, 61 GAUDI_QUEUE_ID_DMA_3_2 = 15, 62 GAUDI_QUEUE_ID_DMA_3_3 = 16, 63 GAUDI_QUEUE_ID_DMA_4_0 = 17, 64 GAUDI_QUEUE_ID_DMA_4_1 = 18, 65 GAUDI_QUEUE_ID_DMA_4_2 = 19, 66 GAUDI_QUEUE_ID_DMA_4_3 = 20, 67 GAUDI_QUEUE_ID_DMA_5_0 = 21, 68 GAUDI_QUEUE_ID_DMA_5_1 = 22, 69 GAUDI_QUEUE_ID_DMA_5_2 = 23, 70 GAUDI_QUEUE_ID_DMA_5_3 = 24, 71 GAUDI_QUEUE_ID_DMA_6_0 = 25, 72 GAUDI_QUEUE_ID_DMA_6_1 = 26, 73 GAUDI_QUEUE_ID_DMA_6_2 = 27, 74 GAUDI_QUEUE_ID_DMA_6_3 = 28, 75 GAUDI_QUEUE_ID_DMA_7_0 = 29, 76 GAUDI_QUEUE_ID_DMA_7_1 = 30, 77 GAUDI_QUEUE_ID_DMA_7_2 = 31, 78 GAUDI_QUEUE_ID_DMA_7_3 = 32, 79 GAUDI_QUEUE_ID_MME_0_0 = 33, 80 GAUDI_QUEUE_ID_MME_0_1 = 34, 81 GAUDI_QUEUE_ID_MME_0_2 = 35, 82 GAUDI_QUEUE_ID_MME_0_3 = 36, 83 GAUDI_QUEUE_ID_MME_1_0 = 37, 84 GAUDI_QUEUE_ID_MME_1_1 = 38, 85 GAUDI_QUEUE_ID_MME_1_2 = 39, 86 GAUDI_QUEUE_ID_MME_1_3 = 40, 87 GAUDI_QUEUE_ID_TPC_0_0 = 41, 88 GAUDI_QUEUE_ID_TPC_0_1 = 42, 89 GAUDI_QUEUE_ID_TPC_0_2 = 43, 90 GAUDI_QUEUE_ID_TPC_0_3 = 44, 91 GAUDI_QUEUE_ID_TPC_1_0 = 45, 92 GAUDI_QUEUE_ID_TPC_1_1 = 46, 93 GAUDI_QUEUE_ID_TPC_1_2 = 47, 94 GAUDI_QUEUE_ID_TPC_1_3 = 48, 95 GAUDI_QUEUE_ID_TPC_2_0 = 49, 96 GAUDI_QUEUE_ID_TPC_2_1 = 50, 97 GAUDI_QUEUE_ID_TPC_2_2 = 51, 98 GAUDI_QUEUE_ID_TPC_2_3 = 52, 99 GAUDI_QUEUE_ID_TPC_3_0 = 53, 100 GAUDI_QUEUE_ID_TPC_3_1 = 54, 101 GAUDI_QUEUE_ID_TPC_3_2 = 55, 102 GAUDI_QUEUE_ID_TPC_3_3 = 56, 103 GAUDI_QUEUE_ID_TPC_4_0 = 57, 104 GAUDI_QUEUE_ID_TPC_4_1 = 58, 105 GAUDI_QUEUE_ID_TPC_4_2 = 59, 106 GAUDI_QUEUE_ID_TPC_4_3 = 60, 107 GAUDI_QUEUE_ID_TPC_5_0 = 61, 108 GAUDI_QUEUE_ID_TPC_5_1 = 62, 109 GAUDI_QUEUE_ID_TPC_5_2 = 63, 110 GAUDI_QUEUE_ID_TPC_5_3 = 64, 111 GAUDI_QUEUE_ID_TPC_6_0 = 65, 112 GAUDI_QUEUE_ID_TPC_6_1 = 66, 113 GAUDI_QUEUE_ID_TPC_6_2 = 67, 114 GAUDI_QUEUE_ID_TPC_6_3 = 68, 115 GAUDI_QUEUE_ID_TPC_7_0 = 69, 116 GAUDI_QUEUE_ID_TPC_7_1 = 70, 117 GAUDI_QUEUE_ID_TPC_7_2 = 71, 118 GAUDI_QUEUE_ID_TPC_7_3 = 72, 119 GAUDI_QUEUE_ID_NIC_0_0 = 73, 120 GAUDI_QUEUE_ID_NIC_0_1 = 74, 121 GAUDI_QUEUE_ID_NIC_0_2 = 75, 122 GAUDI_QUEUE_ID_NIC_0_3 = 76, 123 GAUDI_QUEUE_ID_NIC_1_0 = 77, 124 GAUDI_QUEUE_ID_NIC_1_1 = 78, 125 GAUDI_QUEUE_ID_NIC_1_2 = 79, 126 GAUDI_QUEUE_ID_NIC_1_3 = 80, 127 GAUDI_QUEUE_ID_NIC_2_0 = 81, 128 GAUDI_QUEUE_ID_NIC_2_1 = 82, 129 GAUDI_QUEUE_ID_NIC_2_2 = 83, 130 GAUDI_QUEUE_ID_NIC_2_3 = 84, 131 GAUDI_QUEUE_ID_NIC_3_0 = 85, 132 GAUDI_QUEUE_ID_NIC_3_1 = 86, 133 GAUDI_QUEUE_ID_NIC_3_2 = 87, 134 GAUDI_QUEUE_ID_NIC_3_3 = 88, 135 GAUDI_QUEUE_ID_NIC_4_0 = 89, 136 GAUDI_QUEUE_ID_NIC_4_1 = 90, 137 GAUDI_QUEUE_ID_NIC_4_2 = 91, 138 GAUDI_QUEUE_ID_NIC_4_3 = 92, 139 GAUDI_QUEUE_ID_NIC_5_0 = 93, 140 GAUDI_QUEUE_ID_NIC_5_1 = 94, 141 GAUDI_QUEUE_ID_NIC_5_2 = 95, 142 GAUDI_QUEUE_ID_NIC_5_3 = 96, 143 GAUDI_QUEUE_ID_NIC_6_0 = 97, 144 GAUDI_QUEUE_ID_NIC_6_1 = 98, 145 GAUDI_QUEUE_ID_NIC_6_2 = 99, 146 GAUDI_QUEUE_ID_NIC_6_3 = 100, 147 GAUDI_QUEUE_ID_NIC_7_0 = 101, 148 GAUDI_QUEUE_ID_NIC_7_1 = 102, 149 GAUDI_QUEUE_ID_NIC_7_2 = 103, 150 GAUDI_QUEUE_ID_NIC_7_3 = 104, 151 GAUDI_QUEUE_ID_NIC_8_0 = 105, 152 GAUDI_QUEUE_ID_NIC_8_1 = 106, 153 GAUDI_QUEUE_ID_NIC_8_2 = 107, 154 GAUDI_QUEUE_ID_NIC_8_3 = 108, 155 GAUDI_QUEUE_ID_NIC_9_0 = 109, 156 GAUDI_QUEUE_ID_NIC_9_1 = 110, 157 GAUDI_QUEUE_ID_NIC_9_2 = 111, 158 GAUDI_QUEUE_ID_NIC_9_3 = 112, 159 GAUDI_QUEUE_ID_SIZE 160 }; 161 enum goya_engine_id { 162 GOYA_ENGINE_ID_DMA_0 = 0, 163 GOYA_ENGINE_ID_DMA_1, 164 GOYA_ENGINE_ID_DMA_2, 165 GOYA_ENGINE_ID_DMA_3, 166 GOYA_ENGINE_ID_DMA_4, 167 GOYA_ENGINE_ID_MME_0, 168 GOYA_ENGINE_ID_TPC_0, 169 GOYA_ENGINE_ID_TPC_1, 170 GOYA_ENGINE_ID_TPC_2, 171 GOYA_ENGINE_ID_TPC_3, 172 GOYA_ENGINE_ID_TPC_4, 173 GOYA_ENGINE_ID_TPC_5, 174 GOYA_ENGINE_ID_TPC_6, 175 GOYA_ENGINE_ID_TPC_7, 176 GOYA_ENGINE_ID_SIZE 177 }; 178 enum gaudi_engine_id { 179 GAUDI_ENGINE_ID_DMA_0 = 0, 180 GAUDI_ENGINE_ID_DMA_1, 181 GAUDI_ENGINE_ID_DMA_2, 182 GAUDI_ENGINE_ID_DMA_3, 183 GAUDI_ENGINE_ID_DMA_4, 184 GAUDI_ENGINE_ID_DMA_5, 185 GAUDI_ENGINE_ID_DMA_6, 186 GAUDI_ENGINE_ID_DMA_7, 187 GAUDI_ENGINE_ID_MME_0, 188 GAUDI_ENGINE_ID_MME_1, 189 GAUDI_ENGINE_ID_MME_2, 190 GAUDI_ENGINE_ID_MME_3, 191 GAUDI_ENGINE_ID_TPC_0, 192 GAUDI_ENGINE_ID_TPC_1, 193 GAUDI_ENGINE_ID_TPC_2, 194 GAUDI_ENGINE_ID_TPC_3, 195 GAUDI_ENGINE_ID_TPC_4, 196 GAUDI_ENGINE_ID_TPC_5, 197 GAUDI_ENGINE_ID_TPC_6, 198 GAUDI_ENGINE_ID_TPC_7, 199 GAUDI_ENGINE_ID_NIC_0, 200 GAUDI_ENGINE_ID_NIC_1, 201 GAUDI_ENGINE_ID_NIC_2, 202 GAUDI_ENGINE_ID_NIC_3, 203 GAUDI_ENGINE_ID_NIC_4, 204 GAUDI_ENGINE_ID_NIC_5, 205 GAUDI_ENGINE_ID_NIC_6, 206 GAUDI_ENGINE_ID_NIC_7, 207 GAUDI_ENGINE_ID_NIC_8, 208 GAUDI_ENGINE_ID_NIC_9, 209 GAUDI_ENGINE_ID_SIZE 210 }; 211 enum hl_device_status { 212 HL_DEVICE_STATUS_OPERATIONAL, 213 HL_DEVICE_STATUS_IN_RESET, 214 HL_DEVICE_STATUS_MALFUNCTION 215 }; 216 #define HL_INFO_HW_IP_INFO 0 217 #define HL_INFO_HW_EVENTS 1 218 #define HL_INFO_DRAM_USAGE 2 219 #define HL_INFO_HW_IDLE 3 220 #define HL_INFO_DEVICE_STATUS 4 221 #define HL_INFO_DEVICE_UTILIZATION 6 222 #define HL_INFO_HW_EVENTS_AGGREGATE 7 223 #define HL_INFO_CLK_RATE 8 224 #define HL_INFO_RESET_COUNT 9 225 #define HL_INFO_TIME_SYNC 10 226 #define HL_INFO_CS_COUNTERS 11 227 #define HL_INFO_PCI_COUNTERS 12 228 #define HL_INFO_CLK_THROTTLE_REASON 13 229 #define HL_INFO_SYNC_MANAGER 14 230 #define HL_INFO_TOTAL_ENERGY 15 231 #define HL_INFO_VERSION_MAX_LEN 128 232 #define HL_INFO_CARD_NAME_MAX_LEN 16 233 struct hl_info_hw_ip_info { 234 __u64 sram_base_address; 235 __u64 dram_base_address; 236 __u64 dram_size; 237 __u32 sram_size; 238 __u32 num_of_events; 239 __u32 device_id; 240 __u32 module_id; 241 __u32 reserved[2]; 242 __u32 cpld_version; 243 __u32 psoc_pci_pll_nr; 244 __u32 psoc_pci_pll_nf; 245 __u32 psoc_pci_pll_od; 246 __u32 psoc_pci_pll_div_factor; 247 __u8 tpc_enabled_mask; 248 __u8 dram_enabled; 249 __u8 pad[2]; 250 __u8 cpucp_version[HL_INFO_VERSION_MAX_LEN]; 251 __u8 card_name[HL_INFO_CARD_NAME_MAX_LEN]; 252 }; 253 struct hl_info_dram_usage { 254 __u64 dram_free_mem; 255 __u64 ctx_dram_mem; 256 }; 257 struct hl_info_hw_idle { 258 __u32 is_idle; 259 __u32 busy_engines_mask; 260 __u64 busy_engines_mask_ext; 261 }; 262 struct hl_info_device_status { 263 __u32 status; 264 __u32 pad; 265 }; 266 struct hl_info_device_utilization { 267 __u32 utilization; 268 __u32 pad; 269 }; 270 struct hl_info_clk_rate { 271 __u32 cur_clk_rate_mhz; 272 __u32 max_clk_rate_mhz; 273 }; 274 struct hl_info_reset_count { 275 __u32 hard_reset_cnt; 276 __u32 soft_reset_cnt; 277 }; 278 struct hl_info_time_sync { 279 __u64 device_time; 280 __u64 host_time; 281 }; 282 struct hl_info_pci_counters { 283 __u64 rx_throughput; 284 __u64 tx_throughput; 285 __u64 replay_cnt; 286 }; 287 #define HL_CLK_THROTTLE_POWER 0x1 288 #define HL_CLK_THROTTLE_THERMAL 0x2 289 struct hl_info_clk_throttle { 290 __u32 clk_throttling_reason; 291 }; 292 struct hl_info_energy { 293 __u64 total_energy_consumption; 294 }; 295 struct hl_info_sync_manager { 296 __u32 first_available_sync_object; 297 __u32 first_available_monitor; 298 }; 299 struct hl_cs_counters { 300 __u64 out_of_mem_drop_cnt; 301 __u64 parsing_drop_cnt; 302 __u64 queue_full_drop_cnt; 303 __u64 device_in_reset_drop_cnt; 304 __u64 max_cs_in_flight_drop_cnt; 305 }; 306 struct hl_info_cs_counters { 307 struct hl_cs_counters cs_counters; 308 struct hl_cs_counters ctx_cs_counters; 309 }; 310 enum gaudi_dcores { 311 HL_GAUDI_WS_DCORE, 312 HL_GAUDI_WN_DCORE, 313 HL_GAUDI_EN_DCORE, 314 HL_GAUDI_ES_DCORE 315 }; 316 struct hl_info_args { 317 __u64 return_pointer; 318 __u32 return_size; 319 __u32 op; 320 union { 321 __u32 dcore_id; 322 __u32 ctx_id; 323 __u32 period_ms; 324 }; 325 __u32 pad; 326 }; 327 #define HL_CB_OP_CREATE 0 328 #define HL_CB_OP_DESTROY 1 329 #define HL_MAX_CB_SIZE (0x200000 - 32) 330 #define HL_CB_FLAGS_MAP 0x1 331 struct hl_cb_in { 332 __u64 cb_handle; 333 __u32 op; 334 __u32 cb_size; 335 __u32 ctx_id; 336 __u32 flags; 337 }; 338 struct hl_cb_out { 339 __u64 cb_handle; 340 }; 341 union hl_cb_args { 342 struct hl_cb_in in; 343 struct hl_cb_out out; 344 }; 345 struct hl_cs_chunk { 346 union { 347 __u64 cb_handle; 348 __u64 signal_seq_arr; 349 }; 350 __u32 queue_index; 351 union { 352 __u32 cb_size; 353 __u32 num_signal_seq_arr; 354 }; 355 __u32 cs_chunk_flags; 356 __u32 pad[11]; 357 }; 358 #define HL_CS_FLAGS_FORCE_RESTORE 0x1 359 #define HL_CS_FLAGS_SIGNAL 0x2 360 #define HL_CS_FLAGS_WAIT 0x4 361 #define HL_CS_STATUS_SUCCESS 0 362 #define HL_MAX_JOBS_PER_CS 512 363 struct hl_cs_in { 364 __u64 chunks_restore; 365 __u64 chunks_execute; 366 __u64 chunks_store; 367 __u32 num_chunks_restore; 368 __u32 num_chunks_execute; 369 __u32 num_chunks_store; 370 __u32 cs_flags; 371 __u32 ctx_id; 372 }; 373 struct hl_cs_out { 374 __u64 seq; 375 __u32 status; 376 __u32 pad; 377 }; 378 union hl_cs_args { 379 struct hl_cs_in in; 380 struct hl_cs_out out; 381 }; 382 struct hl_wait_cs_in { 383 __u64 seq; 384 __u64 timeout_us; 385 __u32 ctx_id; 386 __u32 pad; 387 }; 388 #define HL_WAIT_CS_STATUS_COMPLETED 0 389 #define HL_WAIT_CS_STATUS_BUSY 1 390 #define HL_WAIT_CS_STATUS_TIMEDOUT 2 391 #define HL_WAIT_CS_STATUS_ABORTED 3 392 #define HL_WAIT_CS_STATUS_INTERRUPTED 4 393 struct hl_wait_cs_out { 394 __u32 status; 395 __u32 pad; 396 }; 397 union hl_wait_cs_args { 398 struct hl_wait_cs_in in; 399 struct hl_wait_cs_out out; 400 }; 401 #define HL_MEM_OP_ALLOC 0 402 #define HL_MEM_OP_FREE 1 403 #define HL_MEM_OP_MAP 2 404 #define HL_MEM_OP_UNMAP 3 405 #define HL_MEM_CONTIGUOUS 0x1 406 #define HL_MEM_SHARED 0x2 407 #define HL_MEM_USERPTR 0x4 408 struct hl_mem_in { 409 union { 410 struct { 411 __u64 mem_size; 412 } alloc; 413 struct { 414 __u64 handle; 415 } free; 416 struct { 417 __u64 hint_addr; 418 __u64 handle; 419 } map_device; 420 struct { 421 __u64 host_virt_addr; 422 __u64 hint_addr; 423 __u64 mem_size; 424 } map_host; 425 struct { 426 __u64 device_virt_addr; 427 } unmap; 428 }; 429 __u32 op; 430 __u32 flags; 431 __u32 ctx_id; 432 __u32 pad; 433 }; 434 struct hl_mem_out { 435 union { 436 __u64 device_virt_addr; 437 __u64 handle; 438 }; 439 }; 440 union hl_mem_args { 441 struct hl_mem_in in; 442 struct hl_mem_out out; 443 }; 444 #define HL_DEBUG_MAX_AUX_VALUES 10 445 struct hl_debug_params_etr { 446 __u64 buffer_address; 447 __u64 buffer_size; 448 __u32 sink_mode; 449 __u32 pad; 450 }; 451 struct hl_debug_params_etf { 452 __u64 buffer_address; 453 __u64 buffer_size; 454 __u32 sink_mode; 455 __u32 pad; 456 }; 457 struct hl_debug_params_stm { 458 __u64 he_mask; 459 __u64 sp_mask; 460 __u32 id; 461 __u32 frequency; 462 }; 463 struct hl_debug_params_bmon { 464 __u64 start_addr0; 465 __u64 addr_mask0; 466 __u64 start_addr1; 467 __u64 addr_mask1; 468 __u32 bw_win; 469 __u32 win_capture; 470 __u32 id; 471 __u32 pad; 472 }; 473 struct hl_debug_params_spmu { 474 __u64 event_types[HL_DEBUG_MAX_AUX_VALUES]; 475 __u32 event_types_num; 476 __u32 pad; 477 }; 478 #define HL_DEBUG_OP_ETR 0 479 #define HL_DEBUG_OP_ETF 1 480 #define HL_DEBUG_OP_STM 2 481 #define HL_DEBUG_OP_FUNNEL 3 482 #define HL_DEBUG_OP_BMON 4 483 #define HL_DEBUG_OP_SPMU 5 484 #define HL_DEBUG_OP_TIMESTAMP 6 485 #define HL_DEBUG_OP_SET_MODE 7 486 struct hl_debug_args { 487 __u64 input_ptr; 488 __u64 output_ptr; 489 __u32 input_size; 490 __u32 output_size; 491 __u32 op; 492 __u32 reg_idx; 493 __u32 enable; 494 __u32 ctx_id; 495 }; 496 #define HL_IOCTL_INFO _IOWR('H', 0x01, struct hl_info_args) 497 #define HL_IOCTL_CB _IOWR('H', 0x02, union hl_cb_args) 498 #define HL_IOCTL_CS _IOWR('H', 0x03, union hl_cs_args) 499 #define HL_IOCTL_WAIT_CS _IOWR('H', 0x04, union hl_wait_cs_args) 500 #define HL_IOCTL_MEMORY _IOWR('H', 0x05, union hl_mem_args) 501 #define HL_IOCTL_DEBUG _IOWR('H', 0x06, struct hl_debug_args) 502 #define HL_COMMAND_START 0x01 503 #define HL_COMMAND_END 0x07 504 #endif 505