diff --git a/drivers/misc/mods/mods.h b/drivers/misc/mods/mods.h index 24b96fbe..37221e20 100644 --- a/drivers/misc/mods/mods.h +++ b/drivers/misc/mods/mods.h @@ -1,8 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0 */ /* - * mods.h - This file is part of NVIDIA MODS kernel driver. + * mods_internal.h - This file is part of NVIDIA MODS kernel driver. * - * Copyright (c) 2008-2020, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. * * NVIDIA MODS kernel driver is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License, @@ -18,1477 +18,8 @@ * If not, see . */ -#ifndef _MODS_H_ -#define _MODS_H_ - -#include - -/* Driver version */ -#define MODS_DRIVER_VERSION_MAJOR 3 -#define MODS_DRIVER_VERSION_MINOR 96 -#define MODS_DRIVER_VERSION ((MODS_DRIVER_VERSION_MAJOR << 8) | \ - ((MODS_DRIVER_VERSION_MINOR/10) << 4) | \ - (MODS_DRIVER_VERSION_MINOR%10)) - -#pragma pack(push, 1) - -/* ************************************************************************* */ -/* ** ESCAPE INTERFACE STRUCTURE */ -/* ************************************************************************* */ - -struct mods_pci_dev_2 { - __u16 domain; - __u16 bus; - __u16 device; - __u16 function; -}; - -struct mods_pci_dev { - __u16 bus; - __u8 device; - __u8 function; -}; - -/* MODS_ESC_ALLOC_PAGES_2 */ -struct MODS_ALLOC_PAGES_2 { - /* IN */ - __u64 num_bytes; - __u32 flags; /* MODS_ALLOC_* */ - __s32 numa_node; - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __u64 memory_handle; -}; - -/* numa_node */ -#define MODS_ANY_NUMA_NODE (-1) - -/* flags */ -#define MODS_ALLOC_CACHED 0 /* Default WB cache attr */ -#define MODS_ALLOC_UNCACHED 1 /* UC cache attr */ -#define MODS_ALLOC_WRITECOMBINE 2 /* WC cache attr */ -#define MODS_ALLOC_CACHE_MASK 7U /* The first three bits are cache attr */ - -#define MODS_ALLOC_DMA32 8 /* Force 32-bit PA, else any PA */ -#define MODS_ALLOC_CONTIGUOUS 16 /* Force contiguous, else any PA */ -#define MODS_ALLOC_USE_NUMA 32 /* Use numa_node instead of PCI dev for - * NUMA node hint - */ -#define MODS_ALLOC_FORCE_NUMA 64 /* Force memory to be from a given NUMA - * node (same as PCI dev or numa_node). - * Otherwise use PCI dev/numa_node as - * a hint and if that is not possible, - * allocate from any NUMA node - */ -#define MODS_ALLOC_MAP_DEV 128 /* DMA map to PCI device */ - -/* MODS_ESC_ALLOC_PAGES */ -struct MODS_ALLOC_PAGES { - /* IN */ - __u32 num_bytes; - __u32 contiguous; - __u32 address_bits; - __u32 attrib; - - /* OUT */ - __u64 memory_handle; -}; - -/* MODS_ESC_DEVICE_ALLOC_PAGES_2 */ -struct MODS_DEVICE_ALLOC_PAGES_2 { - /* IN */ - __u32 num_bytes; - __u32 contiguous; - __u32 address_bits; - __u32 attrib; - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __u64 memory_handle; -}; - -/* MODS_ESC_DEVICE_ALLOC_PAGES */ -struct MODS_DEVICE_ALLOC_PAGES { - /* IN */ - __u32 num_bytes; - __u32 contiguous; - __u32 address_bits; - __u32 attrib; - struct mods_pci_dev pci_device; - - /* OUT */ - __u64 memory_handle; -}; - -/* MODS_ESC_FREE_PAGES */ -struct MODS_FREE_PAGES { - /* IN */ - __u64 memory_handle; -}; - -#define MODS_MAX_MERGE_HANDLES 64 - -/* MODS_ESC_MERGE_PAGES */ -struct MODS_MERGE_PAGES { - /* IN */ - __u64 in_memory_handles[MODS_MAX_MERGE_HANDLES]; - __u32 num_in_handles; - __u32 dummy_align; - - /* OUT */ - __u64 memory_handle; -}; - -/* MODS_ESC_GET_PHYSICAL_ADDRESS */ -struct MODS_GET_PHYSICAL_ADDRESS { - /* IN */ - __u64 memory_handle; - __u32 offset; - - /* OUT */ - __u64 physical_address; -}; - -/* MODS_ESC_GET_PHYSICAL_ADDRESS */ -struct MODS_GET_PHYSICAL_ADDRESS_2 { - /* IN */ - __u64 memory_handle; - __u32 offset; - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __u64 physical_address; -}; - -/* MODS_ESC_GET_PHYSICAL_ADDRESS_3 */ -struct MODS_GET_PHYSICAL_ADDRESS_3 { - /* IN */ - __u64 memory_handle; - __u64 offset; - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __u64 physical_address; -}; - -/* MODS_ESC_VIRTUAL_TO_PHYSICAL */ -struct MODS_VIRTUAL_TO_PHYSICAL { - /* IN */ - __u64 virtual_address; - - /* OUT */ - __u64 physical_address; -}; - -/* MODS_ESC_PHYSICAL_TO_VIRTUAL */ -struct MODS_PHYSICAL_TO_VIRTUAL { - /* IN */ - __u64 physical_address; - - /* OUT */ - __u64 virtual_address; - -}; - -/* MODS_ESC_FLUSH_CACHE_RANGE */ -#define MODS_FLUSH_CPU_CACHE 1 -#define MODS_INVALIDATE_CPU_CACHE 2 - -struct MODS_FLUSH_CPU_CACHE_RANGE { - /* IN */ - __u64 virt_addr_start; - __u64 virt_addr_end; - __u32 flags; -}; - -/* MODS_ESC_DMA_MAP_MEMORY */ -struct MODS_DMA_MAP_MEMORY { - /* IN */ - __u64 memory_handle; - struct mods_pci_dev_2 pci_device; -}; - -/* MODS_ESC_PCI_SET_DMA_MASK */ -struct MODS_PCI_DMA_MASK { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u32 num_bits; -}; - -#define MODS_SWIOTLB_DISABLED 0 -#define MODS_SWIOTLB_ACTIVE 1 -#define MODS_SWIOTLB_INDETERMINATE 2 - -/* MODS_ESC_GET_IOMMU_STATE */ -struct MODS_GET_IOMMU_STATE { - /* IN */ - struct mods_pci_dev_2 pci_device; - /* OUT */ - __u32 state; -}; - -/* MODS_ESC_FIND_PCI_DEVICE_2 */ -struct MODS_FIND_PCI_DEVICE_2 { - /* IN */ - __u32 device_id; - __u32 vendor_id; - __u32 index; - - /* OUT */ - struct mods_pci_dev_2 pci_device; -}; - -/* MODS_ESC_FIND_PCI_DEVICE */ -struct MODS_FIND_PCI_DEVICE { - /* IN */ - __u32 device_id; - __u32 vendor_id; - __u32 index; - - /* OUT */ - __u32 bus_number; - __u32 device_number; - __u32 function_number; -}; - -/* MODS_ESC_FIND_PCI_CLASS_CODE_2 */ -struct MODS_FIND_PCI_CLASS_CODE_2 { - /* IN */ - __u32 class_code; - __u32 index; - - /* OUT */ - struct mods_pci_dev_2 pci_device; -}; - -/* MODS_ESC_FIND_PCI_CLASS_CODE */ -struct MODS_FIND_PCI_CLASS_CODE { - /* IN */ - __u32 class_code; - __u32 index; - - /* OUT */ - __u32 bus_number; - __u32 device_number; - __u32 function_number; -}; - -/* MODS_ESC_PCI_GET_BAR_INFO_2 */ -struct MODS_PCI_GET_BAR_INFO_2 { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u32 bar_index; - - /* OUT */ - __u64 base_address; - __u64 bar_size; -}; - -/* MODS_ESC_PCI_GET_BAR_INFO */ -struct MODS_PCI_GET_BAR_INFO { - /* IN */ - struct mods_pci_dev pci_device; - __u32 bar_index; - - /* OUT */ - __u64 base_address; - __u64 bar_size; -}; - -/* MODS_ESC_PCI_GET_IRQ_2 */ -struct MODS_PCI_GET_IRQ_2 { - /* IN */ - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __u32 irq; -}; - -/* MODS_ESC_PCI_GET_IRQ */ -struct MODS_PCI_GET_IRQ { - /* IN */ - struct mods_pci_dev pci_device; - - /* OUT */ - __u32 irq; -}; - -/* MODS_ESC_PCI_READ_2 */ -struct MODS_PCI_READ_2 { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u32 address; - __u32 data_size; - - /* OUT */ - __u32 data; -}; - -/* MODS_ESC_PCI_READ */ -struct MODS_PCI_READ { - /* IN */ - __u32 bus_number; - __u32 device_number; - __u32 function_number; - __u32 address; - __u32 data_size; - - /* OUT */ - __u32 data; -}; - -/* MODS_ESC_PCI_WRITE_2 */ -struct MODS_PCI_WRITE_2 { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u32 address; - __u32 data; - __u32 data_size; -}; - -/* MODS_ESC_PCI_WRITE */ -struct MODS_PCI_WRITE { - /* IN */ - __u32 bus_number; - __u32 device_number; - __u32 function_number; - __u32 address; - __u32 data; - __u32 data_size; -}; - -/* MODS_ESC_PCI_HOT_RESET */ -struct MODS_PCI_HOT_RESET { - /* IN */ - struct mods_pci_dev_2 pci_device; -}; - -/* MODS_ESC_PCI_BUS_REMOVE_DEV */ -struct MODS_PCI_BUS_REMOVE_DEV { - /* IN */ - struct mods_pci_dev_2 pci_device; -}; - -/* MODS_ESC_SET_PPC_TCE_BYPASS */ -#define MODS_PPC_TCE_BYPASS_DEFAULT 0 -#define MODS_PPC_TCE_BYPASS_ON 1 -#define MODS_PPC_TCE_BYPASS_OFF 2 -struct MODS_SET_PPC_TCE_BYPASS { - /* IN */ - __u8 mode; - __u8 _dummy_align[7]; - struct mods_pci_dev_2 pci_device; - __u64 device_dma_mask; - - /* OUT */ - __u64 dma_base_address; -}; - -/* MODS_ESC_PCI_BUS_ADD_DEVICES*/ -struct MODS_PCI_BUS_ADD_DEVICES { - /* IN */ - __u32 bus; -}; - -/* MODS_ESC_PCI_BUS_RESCAN */ -struct MODS_PCI_BUS_RESCAN { - __u16 domain; - __u16 bus; -}; - -/* MODS_ESC_PCI_MAP_RESOURCE */ -struct MODS_PCI_MAP_RESOURCE { - /* IN */ - struct mods_pci_dev_2 local_pci_device; - struct mods_pci_dev_2 remote_pci_device; - __u32 resource_index; - __u64 page_count; - - /* IN/OUT */ - __u64 va; -}; - -/* MODS_ESC_PCI_UNMAP_RESOURCE */ -struct MODS_PCI_UNMAP_RESOURCE { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u64 va; -}; - -/* MODS_ESC_PIO_READ */ -struct MODS_PIO_READ { - /* IN */ - __u16 port; - __u32 data_size; - - /* OUT */ - __u32 data; -}; - -/* MODS_ESC_PIO_WRITE */ -struct MODS_PIO_WRITE { - /* IN */ - __u16 port; - __u32 data; - __u32 data_size; -}; - -#define INQ_CNT 8 - -struct mods_irq_data { - __u32 irq; - __u32 delay; -}; - -struct mods_irq_status { - struct mods_irq_data data[INQ_CNT]; - __u32 irqbits:INQ_CNT; - __u32 otherirq:1; -}; - -/* MODS_ESC_IRQ */ -struct MODS_IRQ { - /* IN */ - __u32 cmd; - __u32 size; /* memory size */ - __u32 irq; /* the irq number to be registered in driver */ - - /* IN OUT */ - __u32 channel; /* application id allocated by driver. */ - - /* OUT */ - struct mods_irq_status stat; /* for querying irq */ - __u64 phys; /* the memory physical address */ -}; -#define MODS_IRQ_MAX_MASKS 16 - -/* MODS_ESC_REGISTER_IRQ_3 */ -struct mods_mask_info2 { - __u8 mask_type; /*mask type 32/64 bit access*/ - __u8 reserved[7]; /*force 64bit alignment */ - __u32 irq_pending_offset; /* register to read IRQ pending status*/ - __u32 irq_enabled_offset; /* register to read IRQ enabled status */ - __u32 irq_enable_offset; /* register to write to enable IRQs */ - __u32 irq_disable_offset; /* register to write to disable IRQs */ - __u64 and_mask; /*and mask for clearing bits in this register */ - __u64 or_mask; /*or mask for setting bit in this register */ -}; - -struct MODS_REGISTER_IRQ_4 { - /* IN */ - struct mods_pci_dev_2 dev; /* device identifying interrupt for */ - /* which the mask will be applied */ - __u64 aperture_addr; /* physical address of aperture */ - __u32 aperture_size; /* size of the mapped region */ - __u32 mask_info_cnt; /* number of entries in mask_info[]*/ - struct mods_mask_info2 mask_info[MODS_IRQ_MAX_MASKS]; - __u32 irq_count; /* number of irq's to allocate */ - __u32 irq_flags; /* irq type and affinity */ -}; - -struct MODS_REGISTER_IRQ_3 { - /* IN */ - struct mods_pci_dev_2 dev; /* device identifying interrupt for */ - /* which the mask will be applied */ - __u64 aperture_addr; /* physical address of aperture */ - __u32 aperture_size; /* size of the mapped region */ - __u32 mask_info_cnt; /* number of entries in mask_info[]*/ - struct mods_mask_info2 mask_info[MODS_IRQ_MAX_MASKS]; - __u8 irq_type; /* MODS_IRQ_TYPE_* */ - __u8 reserved[7]; /* keep alignment to 64bits */ -}; - -/* MODS_ESC_REGISTER_IRQ_2 */ -/* MODS_ESC_UNREGISTER_IRQ_2 */ -/* MODS_ESC_IRQ_HANDLED_2 */ -struct MODS_REGISTER_IRQ_2 { - /* IN */ - struct mods_pci_dev_2 dev; /* device which generates the interrupt */ - __u8 type; /* MODS_IRQ_TYPE_* */ -}; - -/* MODS_ESC_REGISTER_IRQ */ -/* MODS_ESC_UNREGISTER_IRQ */ -/* MODS_ESC_IRQ_HANDLED */ -struct MODS_REGISTER_IRQ { - /* IN */ - struct mods_pci_dev dev; /* device which generates */ - /* the interrupt */ - __u8 type; /* MODS_IRQ_TYPE_* */ -}; - -struct mods_irq_3 { - struct mods_pci_dev_2 dev; /* device which generated the interrupt */ - __u32 irq_index; /* index of irq 0 for INTx & MSI */ - __u32 delay; /* delay in ns between the irq */ - /* occurring and MODS querying for it */ -}; - -struct mods_irq_2 { - __u32 delay; /* delay in ns between the irq */ - /* occurring and MODS querying for it */ - struct mods_pci_dev_2 dev; /* device which generated the interrupt */ -}; - -struct mods_irq { - __u32 delay; /* delay in ns between the irq */ - /* occurring and MODS querying */ - /* for it */ - struct mods_pci_dev dev; /* device which generated */ - /* the interrupt */ -}; - -#define MODS_MAX_IRQS 32 - -/* MODS_ESC_QUERY_IRQ_3 */ -struct MODS_QUERY_IRQ_3 { - /* OUT */ - struct mods_irq_3 irq_list[MODS_MAX_IRQS]; - __u8 more; /* indicates that more interrupts */ - /* are waiting */ -}; - -/* MODS_ESC_QUERY_IRQ_2 */ -struct MODS_QUERY_IRQ_2 { - /* OUT */ - struct mods_irq_2 irq_list[MODS_MAX_IRQS]; - __u8 more; /* indicates that more interrupts */ - /* are waiting */ -}; - -/* MODS_ESC_QUERY_IRQ */ -struct MODS_QUERY_IRQ { - /* OUT */ - struct mods_irq irq_list[MODS_MAX_IRQS]; - __u8 more; /* indicates that more interrupts are waiting */ -}; - -#define MODS_IRQ_TYPE_INT 0 -#define MODS_IRQ_TYPE_MSI 1 -#define MODS_IRQ_TYPE_CPU 2 -#define MODS_IRQ_TYPE_MSIX 3 -#define MODS_IRQ_TYPE_MASK 0xff - -/* MODS_ESC_SET_IRQ_MULTIMASK */ -struct mods_mask_info { - __u8 mask_type; /*mask type 32/64 bit access*/ - __u8 reserved[3]; - __u32 reg_offset; /* offset of register within the bar aperture*/ - __u64 and_mask; /*and mask for clearing bits in this register */ - __u64 or_mask; /*or value for setting bit in this register */ -}; - -struct MODS_SET_IRQ_MULTIMASK { - /* IN */ - __u64 aperture_addr; /* physical address of aperture */ - __u32 aperture_size; /* size of the mapped region */ - struct mods_pci_dev_2 dev; /* device identifying interrupt for */ - /* which the mask will be applied */ - __u32 mask_info_cnt; /* number of entries in mask_info[]*/ - struct mods_mask_info mask_info[MODS_IRQ_MAX_MASKS]; - __u8 irq_type; /* irq type */ -}; - -/* MODS_ESC_SET_IRQ_MASK_2 */ -struct MODS_SET_IRQ_MASK_2 { - /* IN */ - __u64 aperture_addr;/* physical address of aperture */ - __u32 aperture_size;/* size of the mapped region */ - __u32 reg_offset; /* offset of the irq mask */ - /* register within the aperture */ - __u64 and_mask; /* and mask for clearing bits */ - /* in the irq mask register */ - __u64 or_mask; /* or mask for setting bits in */ - /* the irq mask register */ - struct mods_pci_dev_2 dev; /* device identifying interrupt */ - /* for which the mask will be */ - /* applied */ - __u8 irq_type; /* irq type */ - __u8 mask_type; /* mask type */ -}; - -/* MODS_ESC_SET_IRQ_MASK */ -struct MODS_SET_IRQ_MASK { - /* IN */ - __u64 aperture_addr; /* physical address of aperture */ - __u32 aperture_size; /* size of the mapped region */ - __u32 reg_offset; /* offset of the irq mask register */ - /* within the aperture */ - __u32 and_mask; /* and mask for clearing bits in */ - /* the irq mask register */ - __u32 or_mask; /* or mask for setting bits in */ - /* the irq mask register */ - struct mods_pci_dev dev; /* device identifying interrupt */ - /* for which the mask will be */ - /* applied */ - __u8 irq_type; /* irq type */ - __u8 mask_type; /* mask type */ -}; - -#define MAX_DT_SIZE 64 -#define MAX_FULL_SIZE 128 - -/*MODS_ESC_MAP_INTERRUPT*/ -struct MODS_DT_INFO { - /* OUT */ - /* Logical irq number*/ - __u32 irq; - /* IN */ - /* DT name for looking up device tree node */ - char dt_name[MAX_DT_SIZE]; - /* Full name of node as in device tree */ - char full_name[MAX_FULL_SIZE]; - /* Irq index corresponding to physical irq */ - __u32 index; -}; - -#define MAX_GPIO_NAME_SIZE 256 -struct MODS_GPIO_INFO { - /* OUTPUT */ - /* Irq number to be mapped to gpio and returned to user */ - __u32 irq; - /* IN */ - /* Name of Gpio to be mapped */ - char name[MAX_GPIO_NAME_SIZE]; - /* IN */ - /* DT Name of device that gpio belongs to */ - char dt_name[MAX_DT_SIZE]; - /* IN */ - /* Name of device that gpio belongs to */ - char full_name[MAX_DT_SIZE]; -}; - -#define MODS_MASK_TYPE_IRQ_DISABLE 0 -#define MODS_MASK_TYPE_IRQ_DISABLE64 1 - -#define ACPI_MODS_TYPE_INTEGER 1 -#define ACPI_MODS_TYPE_BUFFER 2 -#define ACPI_MODS_IGNORE_ACPI_ID 0xffffffff -#define ACPI_MAX_BUFFER_LENGTH 4096 -#define ACPI_MAX_METHOD_LENGTH 12 -#define ACPI_MAX_ARGUMENT_NUMBER 12 - -union ACPI_ARGUMENT { - __u32 type; - - struct { - __u32 type; - __u32 value; - } integer; - - struct { - __u32 type; - __u32 length; - __u32 offset; - } buffer; -}; - -/* MODS_ESC_EVAL_ACPI_METHOD */ -struct MODS_EVAL_ACPI_METHOD { - /* IN */ - char method_name[ACPI_MAX_METHOD_LENGTH]; - __u32 argument_count; - union ACPI_ARGUMENT argument[ACPI_MAX_ARGUMENT_NUMBER]; - __u8 in_buffer[ACPI_MAX_BUFFER_LENGTH]; - - /* IN OUT */ - __u32 out_data_size; - - /* OUT */ - __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; - __u32 out_status; -}; - -/* MODS_ESC_EVAL_DEV_ACPI_METHOD_3 */ -struct MODS_EVAL_DEV_ACPI_METHOD_3 { - /* IN OUT */ - struct MODS_EVAL_ACPI_METHOD method; - - /* IN */ - struct mods_pci_dev_2 device; - __u32 acpi_id; -}; - -/* MODS_ESC_EVAL_DEV_ACPI_METHOD_2 */ -struct MODS_EVAL_DEV_ACPI_METHOD_2 { - /* IN OUT */ - struct MODS_EVAL_ACPI_METHOD method; - - /* IN */ - struct mods_pci_dev_2 device; -}; - -/* MODS_ESC_EVAL_DEV_ACPI_METHOD */ -struct MODS_EVAL_DEV_ACPI_METHOD { - /* IN OUT */ - struct MODS_EVAL_ACPI_METHOD method; - - /* IN */ - struct mods_pci_dev device; -}; - -/* MODS_ESC_ACPI_GET_DDC_2 */ -struct MODS_ACPI_GET_DDC_2 { - /* OUT */ - __u32 out_data_size; - __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; - - /* IN */ - struct mods_pci_dev_2 device; -}; - -/* MODS_ESC_ACPI_GET_DDC */ -struct MODS_ACPI_GET_DDC { - /* OUT */ - __u32 out_data_size; - __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; - - /* IN */ - struct mods_pci_dev device; -}; - -/* MODS_ESC_GET_VERSION */ -struct MODS_GET_VERSION { - /* OUT */ - __u64 version; -}; - -/* MODS_ESC_SET_PARA */ -struct MODS_SET_PARA { - /* IN */ - __u64 Highmem4g; - __u64 debug; -}; - -/* MODS_ESC_SET_MEMORY_TYPE */ -struct MODS_MEMORY_TYPE { - /* IN */ - __u64 physical_address; - __u64 size; - __u32 type; -}; - -#define MAX_CLOCK_HANDLE_NAME 64 - -/* MODS_ESC_GET_CLOCK_HANDLE */ -struct MODS_GET_CLOCK_HANDLE { - /* OUT */ - __u32 clock_handle; - - /* IN */ - char device_name[MAX_CLOCK_HANDLE_NAME]; - char controller_name[MAX_CLOCK_HANDLE_NAME]; -}; - -/* MODS_ESC_SET_CLOCK_RATE, MODS_ESC_GET_CLOCK_RATE, */ -/* MODS_ESC_GET_CLOCK_MAX_RATE, MODS_ESC_SET_CLOCK_MAX_RATE */ -struct MODS_CLOCK_RATE { - /* IN/OUT */ - __u64 clock_rate_hz; - - /* IN */ - __u32 clock_handle; -}; - -/* MODS_ESC_SET_CLOCK_PARENT, MODS_ESC_GET_CLOCK_PARENT */ -struct MODS_CLOCK_PARENT { - /* IN */ - __u32 clock_handle; - - /* IN/OUT */ - __u32 clock_parent_handle; -}; - -/* MODS_ESC_ENABLE_CLOCK, MODS_ESC_DISABLE_CLOCK, */ -/* MODS_ESC_CLOCK_RESET_ASSERT, MODS_ESC_CLOCK_RESET_DEASSERT */ -struct MODS_CLOCK_HANDLE { - /* IN */ - __u32 clock_handle; -}; - -/* MODS_ESC_IS_CLOCK_ENABLED */ -struct MODS_CLOCK_ENABLED { - /* IN */ - __u32 clock_handle; - - /* OUT */ - __u32 enable_count; -}; - -#define MAX_CPU_MASKS_3 128 /* CPU indices can be at most 4096 apart */ - -/* MODS_ESC_DEVICE_NUMA_INFO_3 */ -struct MODS_DEVICE_NUMA_INFO_3 { - /* IN */ - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __s32 node; - __u32 node_count; - __u32 cpu_count; - __u32 first_cpu_mask_offset; - __u32 node_cpu_mask[MAX_CPU_MASKS_3]; -}; - -#if defined(CONFIG_PPC64) || defined(PPC64LE) -#define MAX_CPU_MASKS 64 /* 32 masks of 32bits = 2048 CPUs max */ -#else -#define MAX_CPU_MASKS 32 /* 32 masks of 32bits = 1024 CPUs max */ -#endif - -/* MODS_ESC_DEVICE_NUMA_INFO_2 */ -struct MODS_DEVICE_NUMA_INFO_2 { - /* IN */ - struct mods_pci_dev_2 pci_device; - - /* OUT */ - __s32 node; - __u32 node_count; - __u32 node_cpu_mask[MAX_CPU_MASKS]; - __u32 cpu_count; -}; - -/* MODS_ESC_DEVICE_NUMA_INFO */ -struct MODS_DEVICE_NUMA_INFO { - /* IN */ - struct mods_pci_dev pci_device; - - /* OUT */ - __s32 node; - __u32 node_count; - __u32 node_cpu_mask[MAX_CPU_MASKS]; - __u32 cpu_count; -}; - -/* The ids match MODS ids */ -#define MODS_MEMORY_CACHED 5 -#define MODS_MEMORY_UNCACHED 1 -#define MODS_MEMORY_WRITECOMBINE 2 - -struct MODS_TEGRA_DC_WINDOW { - __s32 index; - __u32 flags; - __u32 x; - __u32 y; - __u32 w; - __u32 h; - __u32 out_x; - __u32 out_y; - __u32 out_w; - __u32 out_h; - __u32 pixformat; /* NVDC pix format */ - - __u32 bandwidth; -}; -#define MODS_TEGRA_DC_WINDOW_FLAG_ENABLED (1 << 0) -#define MODS_TEGRA_DC_WINDOW_FLAG_TILED (1 << 1) -#define MODS_TEGRA_DC_WINDOW_FLAG_SCAN_COL (1 << 2) -#define MODS_TEGRA_DC_MAX_WINDOWS (6) - -/* MODS_ESC_TEGRA_DC_CONFIG_POSSIBLE */ -struct MODS_TEGRA_DC_CONFIG_POSSIBLE { - /* IN/OUT */ - struct MODS_TEGRA_DC_WINDOW windows[MODS_TEGRA_DC_MAX_WINDOWS]; - - /* IN */ - __u8 head; - __u8 win_num; - - /* OUT */ - __u8 possible; -}; - - -#define MODS_TEGRA_DC_SETUP_SD_LUT_SIZE 9 -#define MODS_TEGRA_DC_SETUP_BLTF_SIZE 16 -/* MODS_ESC_TEGRA_DC_SETUP_SD */ -struct MODS_TEGRA_DC_SETUP_SD { - /* IN */ - __u8 head; - __u8 enable; - - __u8 use_vid_luma; - __u8 csc_r; - __u8 csc_g; - __u8 csc_b; - __u8 aggressiveness; - __u8 bin_width_log2; - - __u32 lut[MODS_TEGRA_DC_SETUP_SD_LUT_SIZE]; - __u32 bltf[MODS_TEGRA_DC_SETUP_BLTF_SIZE]; - - __u32 klimit; - __u32 soft_clipping_threshold; - __u32 smooth_k_inc; - __u8 k_init_bias; - - - __u32 win_x; - __u32 win_y; - __u32 win_w; - __u32 win_h; -}; - -/* MODS_ESC_DMABUF_GET_PHYSICAL_ADDRESS */ -struct MODS_DMABUF_GET_PHYSICAL_ADDRESS { - /* IN */ - __s32 buf_fd; - __u32 padding; - __u64 offset; - - /* OUT */ - __u64 physical_address; - __u64 segment_size; -}; - -#define MODS_ADSP_APP_NAME_SIZE 64 -#define MODS_ADSP_APP_MAX_PARAM 128 -struct MODS_ADSP_RUN_APP_INFO { - char app_name[MODS_ADSP_APP_NAME_SIZE]; - char app_file_name[MODS_ADSP_APP_NAME_SIZE]; - __u32 argc; - __u32 argv[MODS_ADSP_APP_MAX_PARAM]; - __u32 timeout; -}; - -/* MODS_ESC_GET_SCREEN_INFO */ -struct MODS_SCREEN_INFO { - /* OUT */ - __u8 orig_video_mode; - __u8 orig_video_is_vga; - __u16 lfb_width; - __u16 lfb_height; - __u16 lfb_depth; - __u32 lfb_base; - __u32 lfb_size; - __u16 lfb_linelength; -}; - -/* MODS_ESC_GET_SCREEN_INFO_2 */ -struct MODS_SCREEN_INFO_2 { - /* OUT */ - struct MODS_SCREEN_INFO info; - __u32 ext_lfb_base; -}; - -enum MODS_DMA_TRANSACTION_TYPE { - MODS_DMA_MEMCPY, - MODS_DMA_XOR, - MODS_DMA_PQ, - MODS_DMA_XOR_VAL, - MODS_DMA_PQ_VAL, - MODS_DMA_MEMSET, - MODS_DMA_MEMSET_SG, - MODS_DMA_INTERRUPT, - MODS_DMA_SG, - MODS_DMA_PRIVATE, - MODS_DMA_ASYNC_TX, - MODS_DMA_SLAVE, - MODS_DMA_CYCLIC, - MODS_DMA_INTERLEAVE, -/* last transaction type for creation of the capabilities mask */ - MODS_DMA_TX_TYPE_END -}; - -struct MODS_DMA_HANDLE { - /* IN */ - __u32 dma_type; /* Indicate the DMA Type*/ - /* OUT */ - __u32 dma_id; /* Inditify for the DMA */ -}; - -enum MODS_DMA_TRANSFER_DIRECTION { - MODS_DMA_MEM_TO_MEM, - MODS_DMA_MEM_TO_DEV, - MODS_DMA_DEV_TO_MEM, - MODS_DMA_DEV_TO_DEV, - MODS_DMA_TRANS_NONE -}; - -enum MODS_DMA_BUSWIDTH { - MODS_DMA_BUSWIDTH_UNDEFINED = 0, - MODS_DMA_BUSWIDTH_1_BYTE = 1, - MODS_DMA_BUSWIDTH_2_BYTES = 2, - MODS_DMA_BUSWIDTH_4_BYTES = 4, - MODS_DMA_BUSWIDTH_8_BYTES = 8 -}; - -struct MODS_DMA_CHANNEL_CONFIG { - __u64 src_addr; - __u64 dst_addr; - struct MODS_DMA_HANDLE handle; - __u32 direction; - __u32 src_addr_width; - __u32 dst_addr_width; - __u32 src_maxburst; - __u32 dst_maxburst; - __u32 slave_id; - __u32 device_fc; -}; - -/* Node: Only support SINGLE MODS so far*/ -enum MODS_DMA_TX_MODE { - MODS_DMA_SINGLE = 0, - MODS_DMA_TX_CYCLIC, - MODS_DMA_INTERLEAVED /* Common to Slave as well as M2M clients. */ -}; - -typedef __s32 mods_dma_cookie_t; - -struct MODS_DMA_TX_DESC { - /* IN */ - __u64 phys; - __u64 phys_2; /* only valid for MEMCPY */ - struct MODS_DMA_HANDLE handle; - __u32 mode; - __u32 data_dir; - __u32 length; - __u32 flags; - /* OUT */ - mods_dma_cookie_t cookie; -}; - -enum MODS_DMA_WAIT_TYPE { - MODS_DMA_SYNC_WAIT, /* wait until finished */ - MODS_DMA_ASYNC_WAIT /* just check tx status */ -}; - -struct MODS_DMA_WAIT_DESC { - struct MODS_DMA_HANDLE handle; - mods_dma_cookie_t cookie; - __u32 type; - /* OUT */ - __u32 tx_complete; -}; - -#define MAX_NET_DEVICE_NAME_LENGTH 16 -struct MODS_NET_DEVICE_NAME { - /* in */ - char device_name[MAX_NET_DEVICE_NAME_LENGTH]; -}; -struct MODS_DMA_COHERENT_MEM_HANDLE { - __u32 num_bytes; - __u32 attrib; - __u64 memory_handle_phys; - __u64 memory_handle_virt; -}; - -/* MODS_ESC_DMA_COPY_TO_USER */ -struct MODS_DMA_COPY_TO_USER { - __u32 num_bytes; - __u32 attrib; - __u64 memory_handle_src; - __u64 memory_handle_dst; -}; - -struct MODS_TEGRA_PROD_SET_TUPLE { - /* IN */ - __u64 prod_dev_handle; - __u64 ctrl_dev_handle; - char prod_name[MAX_DT_SIZE]; - __u32 index; - __u32 offset; - __u32 mask; -}; - -struct MODS_TEGRA_PROD_IS_SUPPORTED { - /* IN */ - __u64 prod_dev_handle; - char prod_name[MAX_DT_SIZE]; - /* OUT */ - __u32 is_supported; -}; - -struct MODS_TEGRA_PROD_ITERATOR { - /* IN */ - __u64 device_handle; - char name[MAX_DT_SIZE]; - char next_name[MAX_DT_SIZE]; - __u32 index; - __u32 is_leaf; - /* OUT */ - __u64 next_device_handle; -}; - -/* MODS_ESC_GET_ATS_ADDRESS_RANGE */ -struct MODS_GET_ATS_ADDRESS_RANGE { - /* IN */ - struct mods_pci_dev_2 pci_device; - __s32 npu_index; - __u8 reserved[4]; /* Alignment */ - - /* OUT */ - struct mods_pci_dev_2 npu_device; - __u64 phys_addr; - __u64 guest_addr; - __u64 aperture_size; - __s32 numa_memory_node; -}; - -/* MODS_ESC_SET_NVLINK_SYSMEM_TRAINED */ -struct MODS_SET_NVLINK_SYSMEM_TRAINED { - /* IN */ - struct mods_pci_dev_2 pci_device; - __u8 trained; -}; - -/* MODS_ESC_GET_NVLINK_LINE_RATE */ -struct MODS_GET_NVLINK_LINE_RATE { - /* IN */ - struct mods_pci_dev_2 pci_device; - __s32 npu_index; - - /* OUT */ - __u32 speed; -}; - -/* MODS_ESC_ACQUIRE_ACCESS_TOKEN - * MODS_ESC_RELEASE_ACCESS_TOKEN - * MODS_ESC_VERIFY_ACCESS_TOKEN +/* Note: the original mods.h which contains ioctls is located in + * include/uapi/misc/mods. */ -#define MODS_ACCESS_TOKEN_NONE ~0U -struct MODS_ACCESS_TOKEN { - /* IN/OUT */ - __u32 token; -}; -#define MODS_MAX_SYSFS_PATH_BUF_SIZE 512 -#define MODS_MAX_SYSFS_PATH_LEN (512 - 6) -#define MODS_MAX_SYSFS_FILE_SIZE 4096 - -/* MODS_ESC_WRITE_SYSFS_NODE */ -struct MODS_SYSFS_NODE { - /* IN */ - char path[MODS_MAX_SYSFS_PATH_BUF_SIZE]; - char contents[MODS_MAX_SYSFS_FILE_SIZE]; - __u32 size; -}; - -#define MODS_IRQ_TYPE_FROM_FLAGS(flags) ((flags)&0xf) -#define MODS_IRQ_FLAG_FROM_FLAGS(flags) (((flags)&0xfff0)>>4) - -/* MODS_ESC_SET_NUM_VF */ -struct MODS_SET_NUM_VF { - /* IN */ - struct mods_pci_dev_2 dev; - __u32 numvfs; /* number of virtual functions */ -}; - -/* MODS_ESC_READ_MSR - * MODS_ESC_WRITE_MSR - */ -struct MODS_MSR { - /* IN */ - __u32 reg; - __u32 cpu_num; - - /* IN/OUT */ - __u32 low; - __u32 high; -}; - -#pragma pack(pop) - -/* ************************************************************************* */ -/* ************************************************************************* */ -/* ** */ -/* ** ESCAPE CALLS */ -/* ** */ -/* ************************************************************************* */ -/* ************************************************************************* */ -#define MODS_IOC_MAGIC 'x' -#define MODS_ESC_ALLOC_PAGES \ - _IOWR(MODS_IOC_MAGIC, 0, struct MODS_ALLOC_PAGES) -#define MODS_ESC_FREE_PAGES \ - _IOWR(MODS_IOC_MAGIC, 1, struct MODS_FREE_PAGES) -#define MODS_ESC_GET_PHYSICAL_ADDRESS \ - _IOWR(MODS_IOC_MAGIC, 2, struct MODS_GET_PHYSICAL_ADDRESS) -#define MODS_ESC_VIRTUAL_TO_PHYSICAL \ - _IOWR(MODS_IOC_MAGIC, 3, struct MODS_VIRTUAL_TO_PHYSICAL) -#define MODS_ESC_PHYSICAL_TO_VIRTUAL \ - _IOWR(MODS_IOC_MAGIC, 4, struct MODS_PHYSICAL_TO_VIRTUAL) -#define MODS_ESC_FIND_PCI_DEVICE \ - _IOWR(MODS_IOC_MAGIC, 5, struct MODS_FIND_PCI_DEVICE) -#define MODS_ESC_FIND_PCI_CLASS_CODE \ - _IOWR(MODS_IOC_MAGIC, 6, struct MODS_FIND_PCI_CLASS_CODE) -#define MODS_ESC_PCI_READ \ - _IOWR(MODS_IOC_MAGIC, 7, struct MODS_PCI_READ) -#define MODS_ESC_PCI_WRITE \ - _IOWR(MODS_IOC_MAGIC, 8, struct MODS_PCI_WRITE) -#define MODS_ESC_PIO_READ \ - _IOWR(MODS_IOC_MAGIC, 9, struct MODS_PIO_READ) -#define MODS_ESC_PIO_WRITE \ - _IOWR(MODS_IOC_MAGIC, 10, struct MODS_PIO_WRITE) -/* Deprecated */ -#define MODS_ESC_IRQ_REGISTER \ - _IOWR(MODS_IOC_MAGIC, 11, struct MODS_IRQ) -/* Deprecated */ -#define MODS_ESC_IRQ_FREE \ - _IOWR(MODS_IOC_MAGIC, 12, struct MODS_IRQ) -/* Deprecated */ -#define MODS_ESC_IRQ_INQUIRY \ - _IOWR(MODS_IOC_MAGIC, 13, struct MODS_IRQ) -#define MODS_ESC_EVAL_ACPI_METHOD \ - _IOWR_BAD(MODS_IOC_MAGIC, 16, struct MODS_EVAL_ACPI_METHOD) -#define MODS_ESC_GET_API_VERSION \ - _IOWR(MODS_IOC_MAGIC, 17, struct MODS_GET_VERSION) -/* Deprecated */ -#define MODS_ESC_GET_KERNEL_VERSION \ - _IOWR(MODS_IOC_MAGIC, 18, struct MODS_GET_VERSION) -/* Deprecated */ -#define MODS_ESC_SET_DRIVER_PARA \ - _IOWR(MODS_IOC_MAGIC, 19, struct MODS_SET_PARA) -/* Deprecated */ -#define MODS_ESC_MSI_REGISTER \ - _IOWR(MODS_IOC_MAGIC, 20, struct MODS_IRQ) -/* Deprecated */ -#define MODS_ESC_REARM_MSI \ - _IOWR(MODS_IOC_MAGIC, 21, struct MODS_IRQ) -#define MODS_ESC_SET_MEMORY_TYPE \ - _IOW(MODS_IOC_MAGIC, 22, struct MODS_MEMORY_TYPE) -/* Deprecated */ -#define MODS_ESC_PCI_BUS_ADD_DEVICES \ - _IOW(MODS_IOC_MAGIC, 23, struct MODS_PCI_BUS_ADD_DEVICES) -#define MODS_ESC_REGISTER_IRQ \ - _IOW(MODS_IOC_MAGIC, 24, struct MODS_REGISTER_IRQ) -#define MODS_ESC_UNREGISTER_IRQ \ - _IOW(MODS_IOC_MAGIC, 25, struct MODS_REGISTER_IRQ) -#define MODS_ESC_QUERY_IRQ \ - _IOR(MODS_IOC_MAGIC, 26, struct MODS_QUERY_IRQ) -#define MODS_ESC_EVAL_DEV_ACPI_METHOD \ - _IOWR_BAD(MODS_IOC_MAGIC, 27, struct MODS_EVAL_DEV_ACPI_METHOD) -#define MODS_ESC_ACPI_GET_DDC \ - _IOWR(MODS_IOC_MAGIC, 28, struct MODS_ACPI_GET_DDC) -#define MODS_ESC_GET_CLOCK_HANDLE \ - _IOWR(MODS_IOC_MAGIC, 29, struct MODS_GET_CLOCK_HANDLE) -#define MODS_ESC_SET_CLOCK_RATE \ - _IOW(MODS_IOC_MAGIC, 30, struct MODS_CLOCK_RATE) -#define MODS_ESC_GET_CLOCK_RATE \ - _IOWR(MODS_IOC_MAGIC, 31, struct MODS_CLOCK_RATE) -#define MODS_ESC_SET_CLOCK_PARENT \ - _IOW(MODS_IOC_MAGIC, 32, struct MODS_CLOCK_PARENT) -#define MODS_ESC_GET_CLOCK_PARENT \ - _IOWR(MODS_IOC_MAGIC, 33, struct MODS_CLOCK_PARENT) -#define MODS_ESC_ENABLE_CLOCK \ - _IOW(MODS_IOC_MAGIC, 34, struct MODS_CLOCK_HANDLE) -#define MODS_ESC_DISABLE_CLOCK \ - _IOW(MODS_IOC_MAGIC, 35, struct MODS_CLOCK_HANDLE) -#define MODS_ESC_IS_CLOCK_ENABLED \ - _IOWR(MODS_IOC_MAGIC, 36, struct MODS_CLOCK_ENABLED) -#define MODS_ESC_CLOCK_RESET_ASSERT \ - _IOW(MODS_IOC_MAGIC, 37, struct MODS_CLOCK_HANDLE) -#define MODS_ESC_CLOCK_RESET_DEASSERT \ - _IOW(MODS_IOC_MAGIC, 38, struct MODS_CLOCK_HANDLE) -/* Deprecated */ -#define MODS_ESC_SET_IRQ_MASK \ - _IOW(MODS_IOC_MAGIC, 39, struct MODS_SET_IRQ_MASK) -#define MODS_ESC_MEMORY_BARRIER \ - _IO(MODS_IOC_MAGIC, 40) -#define MODS_ESC_IRQ_HANDLED \ - _IOW(MODS_IOC_MAGIC, 41, struct MODS_REGISTER_IRQ) -#define MODS_ESC_FLUSH_CPU_CACHE_RANGE \ - _IOW(MODS_IOC_MAGIC, 42, struct MODS_FLUSH_CPU_CACHE_RANGE) -#define MODS_ESC_GET_CLOCK_MAX_RATE \ - _IOWR(MODS_IOC_MAGIC, 43, struct MODS_CLOCK_RATE) -#define MODS_ESC_SET_CLOCK_MAX_RATE \ - _IOW(MODS_IOC_MAGIC, 44, struct MODS_CLOCK_RATE) -#define MODS_ESC_DEVICE_ALLOC_PAGES \ - _IOWR(MODS_IOC_MAGIC, 45, struct MODS_DEVICE_ALLOC_PAGES) -#define MODS_ESC_DEVICE_NUMA_INFO \ - _IOWR(MODS_IOC_MAGIC, 46, struct MODS_DEVICE_NUMA_INFO) -#define MODS_ESC_TEGRA_DC_CONFIG_POSSIBLE \ - _IOWR(MODS_IOC_MAGIC, 47, \ - struct MODS_TEGRA_DC_CONFIG_POSSIBLE) -#define MODS_ESC_TEGRA_DC_SETUP_SD \ - _IOW(MODS_IOC_MAGIC, 48, struct MODS_TEGRA_DC_SETUP_SD) -#define MODS_ESC_DMABUF_GET_PHYSICAL_ADDRESS \ - _IOWR(MODS_IOC_MAGIC, 49, \ - struct MODS_DMABUF_GET_PHYSICAL_ADDRESS) -#define MODS_ESC_ADSP_LOAD \ - _IO(MODS_IOC_MAGIC, 50) -#define MODS_ESC_ADSP_START \ - _IO(MODS_IOC_MAGIC, 51) -#define MODS_ESC_ADSP_STOP \ - _IO(MODS_IOC_MAGIC, 52) -#define MODS_ESC_ADSP_RUN_APP \ - _IOW(MODS_IOC_MAGIC, 53, struct MODS_ADSP_RUN_APP_INFO) -#define MODS_ESC_PCI_GET_BAR_INFO \ - _IOWR(MODS_IOC_MAGIC, 54, struct MODS_PCI_GET_BAR_INFO) -#define MODS_ESC_PCI_GET_IRQ \ - _IOWR(MODS_IOC_MAGIC, 55, struct MODS_PCI_GET_IRQ) -/* Deprecated */ -#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS \ - _IOWR(MODS_IOC_MAGIC, 56, \ - struct MODS_GET_PHYSICAL_ADDRESS) -#define MODS_ESC_DEVICE_ALLOC_PAGES_2 \ - _IOWR(MODS_IOC_MAGIC, 57, struct MODS_DEVICE_ALLOC_PAGES_2) -#define MODS_ESC_FIND_PCI_DEVICE_2 \ - _IOWR(MODS_IOC_MAGIC, 58, struct MODS_FIND_PCI_DEVICE_2) -#define MODS_ESC_FIND_PCI_CLASS_CODE_2 \ - _IOWR(MODS_IOC_MAGIC, 59, \ - struct MODS_FIND_PCI_CLASS_CODE_2) -#define MODS_ESC_PCI_GET_BAR_INFO_2 \ - _IOWR(MODS_IOC_MAGIC, 60, struct MODS_PCI_GET_BAR_INFO_2) -#define MODS_ESC_PCI_GET_IRQ_2 \ - _IOWR(MODS_IOC_MAGIC, 61, struct MODS_PCI_GET_IRQ_2) -#define MODS_ESC_PCI_READ_2 \ - _IOWR(MODS_IOC_MAGIC, 62, struct MODS_PCI_READ_2) -#define MODS_ESC_PCI_WRITE_2 \ - _IOW(MODS_IOC_MAGIC, 63, struct MODS_PCI_WRITE_2) -#define MODS_ESC_REGISTER_IRQ_2 \ - _IOW(MODS_IOC_MAGIC, 64, struct MODS_REGISTER_IRQ_2) -#define MODS_ESC_UNREGISTER_IRQ_2 \ - _IOW(MODS_IOC_MAGIC, 65, struct MODS_REGISTER_IRQ_2) -#define MODS_ESC_IRQ_HANDLED_2 \ - _IOW(MODS_IOC_MAGIC, 66, struct MODS_REGISTER_IRQ_2) -#define MODS_ESC_QUERY_IRQ_2 \ - _IOR(MODS_IOC_MAGIC, 67, struct MODS_QUERY_IRQ_2) -/* Deprecated */ -#define MODS_ESC_SET_IRQ_MASK_2 \ - _IOW(MODS_IOC_MAGIC, 68, struct MODS_SET_IRQ_MASK_2) -#define MODS_ESC_EVAL_DEV_ACPI_METHOD_2 \ - _IOWR_BAD(MODS_IOC_MAGIC, 69,\ - struct MODS_EVAL_DEV_ACPI_METHOD_2) -#define MODS_ESC_DEVICE_NUMA_INFO_2 \ - _IOWR(MODS_IOC_MAGIC, 70, struct MODS_DEVICE_NUMA_INFO_2) -#define MODS_ESC_ACPI_GET_DDC_2 \ - _IOWR(MODS_IOC_MAGIC, 71, struct MODS_ACPI_GET_DDC_2) -#define MODS_ESC_GET_SCREEN_INFO \ - _IOR(MODS_IOC_MAGIC, 72, struct MODS_SCREEN_INFO) -#define MODS_ESC_PCI_HOT_RESET \ - _IOW(MODS_IOC_MAGIC, 73, struct MODS_PCI_HOT_RESET) -#define MODS_ESC_SET_PPC_TCE_BYPASS \ - _IOWR(MODS_IOC_MAGIC, 74, struct MODS_SET_PPC_TCE_BYPASS) -#define MODS_ESC_DMA_MAP_MEMORY \ - _IOW(MODS_IOC_MAGIC, 75, struct MODS_DMA_MAP_MEMORY) -#define MODS_ESC_DMA_UNMAP_MEMORY \ - _IOW(MODS_IOC_MAGIC, 76, struct MODS_DMA_MAP_MEMORY) -/* Deprecated */ -#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS_2 \ - _IOWR(MODS_IOC_MAGIC, 77, \ - struct MODS_GET_PHYSICAL_ADDRESS_2) -/* Deprecated */ -#define MODS_ESC_PCI_MAP_RESOURCE \ - _IOWR(MODS_IOC_MAGIC, 78, struct MODS_PCI_MAP_RESOURCE) -/* Deprecated */ -#define MODS_ESC_PCI_UNMAP_RESOURCE \ - _IOW(MODS_IOC_MAGIC, 79, struct MODS_PCI_UNMAP_RESOURCE) -#define MODS_ESC_DMA_REQUEST_HANDLE \ - _IOR(MODS_IOC_MAGIC, 80, struct MODS_DMA_HANDLE) -#define MODS_ESC_DMA_RELEASE_HANDLE \ - _IOW(MODS_IOC_MAGIC, 81, struct MODS_DMA_HANDLE) -#define MODS_ESC_DMA_SET_CONFIG \ - _IOW(MODS_IOC_MAGIC, 82, struct MODS_DMA_CHANNEL_CONFIG) -#define MODS_ESC_DMA_TX_SUBMIT \ - _IOW(MODS_IOC_MAGIC, 83, struct MODS_DMA_TX_DESC) -#define MODS_ESC_DMA_TX_WAIT \ - _IOWR(MODS_IOC_MAGIC, 84, struct MODS_DMA_WAIT_DESC) -#define MODS_ESC_DMA_ISSUE_PENDING \ - _IOW(MODS_IOC_MAGIC, 85, struct MODS_DMA_HANDLE) -/* Deprecated */ -#define MODS_ESC_SET_IRQ_MULTIMASK \ - _IOW(MODS_IOC_MAGIC, 86, struct MODS_SET_IRQ_MULTIMASK) -#define MODS_ESC_NET_FORCE_LINK \ - _IOW(MODS_IOC_MAGIC, 87, struct MODS_NET_DEVICE_NAME) -#define MODS_ESC_REGISTER_IRQ_3 \ - _IOW(MODS_IOC_MAGIC, 88, struct MODS_REGISTER_IRQ_3) -#define MODS_ESC_DMA_ALLOC_COHERENT \ - _IOWR(MODS_IOC_MAGIC, 89, \ - struct MODS_DMA_COHERENT_MEM_HANDLE) -#define MODS_ESC_DMA_FREE_COHERENT \ - _IOWR(MODS_IOC_MAGIC, 90, \ - struct MODS_DMA_COHERENT_MEM_HANDLE) -#define MODS_ESC_DMA_COPY_TO_USER \ - _IOWR(MODS_IOC_MAGIC, 91, \ - struct MODS_DMA_COPY_TO_USER) -#define MODS_ESC_MAP_INTERRUPT \ - _IOWR(MODS_IOC_MAGIC, 92, \ - struct MODS_DT_INFO) -#define MODS_ESC_LOCK_CONSOLE \ - _IO(MODS_IOC_MAGIC, 93) -#define MODS_ESC_UNLOCK_CONSOLE \ - _IO(MODS_IOC_MAGIC, 94) -#define MODS_ESC_TEGRA_PROD_IS_SUPPORTED \ - _IOWR(MODS_IOC_MAGIC, 95, \ - struct MODS_TEGRA_PROD_IS_SUPPORTED) -#define MODS_ESC_TEGRA_PROD_SET_PROD_ALL \ - _IOW(MODS_IOC_MAGIC, 96, \ - struct MODS_TEGRA_PROD_SET_TUPLE) -#define MODS_ESC_TEGRA_PROD_SET_PROD_BOOT \ - _IOW(MODS_IOC_MAGIC, 97, \ - struct MODS_TEGRA_PROD_SET_TUPLE) -#define MODS_ESC_TEGRA_PROD_SET_PROD_BY_NAME \ - _IOW(MODS_IOC_MAGIC, 98, \ - struct MODS_TEGRA_PROD_SET_TUPLE) -#define MODS_ESC_TEGRA_PROD_SET_PROD_EXACT \ - _IOW(MODS_IOC_MAGIC, 99, \ - struct MODS_TEGRA_PROD_SET_TUPLE) -#define MODS_ESC_TEGRA_PROD_ITERATE_DT \ - _IOWR(MODS_IOC_MAGIC, 100, \ - struct MODS_TEGRA_PROD_ITERATOR) -#define MODS_ESC_GET_ATS_ADDRESS_RANGE \ - _IOWR(MODS_IOC_MAGIC, 101, \ - struct MODS_GET_ATS_ADDRESS_RANGE) -#define MODS_ESC_SET_NVLINK_SYSMEM_TRAINED \ - _IOW(MODS_IOC_MAGIC, 102, \ - struct MODS_SET_NVLINK_SYSMEM_TRAINED) -#define MODS_ESC_GET_NVLINK_LINE_RATE \ - _IOWR(MODS_IOC_MAGIC, 103, \ - struct MODS_GET_NVLINK_LINE_RATE) -#define MODS_ESC_SUSPEND_CONSOLE \ - _IO(MODS_IOC_MAGIC, 104) -#define MODS_ESC_RESUME_CONSOLE \ - _IO(MODS_IOC_MAGIC, 105) -#define MODS_ESC_GET_SCREEN_INFO_2 \ - _IOR(MODS_IOC_MAGIC, 106, struct MODS_SCREEN_INFO_2) -#define MODS_ESC_ACQUIRE_ACCESS_TOKEN \ - _IOR(MODS_IOC_MAGIC, 107, struct MODS_ACCESS_TOKEN) -#define MODS_ESC_RELEASE_ACCESS_TOKEN \ - _IOW(MODS_IOC_MAGIC, 108, struct MODS_ACCESS_TOKEN) -#define MODS_ESC_VERIFY_ACCESS_TOKEN \ - _IOW(MODS_IOC_MAGIC, 109, struct MODS_ACCESS_TOKEN) -#define MODS_ESC_GET_IOMMU_STATE \ - _IOWR(MODS_IOC_MAGIC, 110, struct MODS_GET_IOMMU_STATE) -#define MODS_ESC_WRITE_SYSFS_NODE \ - _IOW(MODS_IOC_MAGIC, 111, struct MODS_SYSFS_NODE) -#define MODS_ESC_GET_PHYSICAL_ADDRESS_2 \ - _IOWR(MODS_IOC_MAGIC, 112, \ - struct MODS_GET_PHYSICAL_ADDRESS_3) -#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS_3 \ - _IOWR(MODS_IOC_MAGIC, 113, \ - struct MODS_GET_PHYSICAL_ADDRESS_3) -#define MODS_ESC_REGISTER_IRQ_4 \ - _IOW(MODS_IOC_MAGIC, 114, struct MODS_REGISTER_IRQ_4) -#define MODS_ESC_QUERY_IRQ_3 \ - _IOR(MODS_IOC_MAGIC, 115, struct MODS_QUERY_IRQ_3) -#define MODS_ESC_SET_NUM_VF \ - _IOW(MODS_IOC_MAGIC, 116, struct MODS_SET_NUM_VF) -#define MODS_ESC_SET_TOTAL_VF \ - _IOW(MODS_IOC_MAGIC, 117, struct MODS_SET_NUM_VF) -#define MODS_ESC_PCI_SET_DMA_MASK \ - _IOW(MODS_IOC_MAGIC, 118, struct MODS_PCI_DMA_MASK) -#define MODS_ESC_GET_IOMMU_STATE_2 \ - _IOWR(MODS_IOC_MAGIC, 119, struct MODS_GET_IOMMU_STATE) -#define MODS_ESC_READ_MSR \ - _IOWR(MODS_IOC_MAGIC, 120, struct MODS_MSR) -#define MODS_ESC_WRITE_MSR \ - _IOW(MODS_IOC_MAGIC, 121, struct MODS_MSR) -#define MODS_ESC_EVAL_DEV_ACPI_METHOD_3 \ - _IOWR_BAD(MODS_IOC_MAGIC, 122,\ - struct MODS_EVAL_DEV_ACPI_METHOD_3) -#define MODS_ESC_PCI_BUS_REMOVE_DEV\ - _IOW(MODS_IOC_MAGIC, 123, struct MODS_PCI_BUS_REMOVE_DEV) -#define MODS_ESC_ALLOC_PAGES_2 \ - _IOWR(MODS_IOC_MAGIC, 124, struct MODS_ALLOC_PAGES_2) -#define MODS_ESC_MERGE_PAGES \ - _IOWR(MODS_IOC_MAGIC, 125, struct MODS_MERGE_PAGES) -#define MODS_ESC_DEVICE_NUMA_INFO_3 \ - _IOWR(MODS_IOC_MAGIC, 126, struct MODS_DEVICE_NUMA_INFO_3) -#define MODS_ESC_PCI_BUS_RESCAN \ - _IOW(MODS_IOC_MAGIC, 127, struct MODS_PCI_BUS_RESCAN) -#define MODS_ESC_MAP_GPIO \ - _IOWR(MODS_IOC_MAGIC, 128, \ - struct MODS_GPIO_INFO) - -#endif /* _MODS_H_ */ +#include diff --git a/drivers/misc/mods/mods_netdevice.c b/drivers/misc/mods/mods_netdevice.c index 0b16b92c..42f221f8 100644 --- a/drivers/misc/mods/mods_netdevice.c +++ b/drivers/misc/mods/mods_netdevice.c @@ -18,7 +18,6 @@ * If not, see . */ -#include "mods.h" #include "mods_internal.h" #include diff --git a/include/uapi/misc/mods.h b/include/uapi/misc/mods.h new file mode 100644 index 00000000..24b96fbe --- /dev/null +++ b/include/uapi/misc/mods.h @@ -0,0 +1,1494 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * mods.h - This file is part of NVIDIA MODS kernel driver. + * + * Copyright (c) 2008-2020, NVIDIA CORPORATION. All rights reserved. + * + * NVIDIA MODS kernel driver is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * NVIDIA MODS kernel driver is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with NVIDIA MODS kernel driver. + * If not, see . + */ + +#ifndef _MODS_H_ +#define _MODS_H_ + +#include + +/* Driver version */ +#define MODS_DRIVER_VERSION_MAJOR 3 +#define MODS_DRIVER_VERSION_MINOR 96 +#define MODS_DRIVER_VERSION ((MODS_DRIVER_VERSION_MAJOR << 8) | \ + ((MODS_DRIVER_VERSION_MINOR/10) << 4) | \ + (MODS_DRIVER_VERSION_MINOR%10)) + +#pragma pack(push, 1) + +/* ************************************************************************* */ +/* ** ESCAPE INTERFACE STRUCTURE */ +/* ************************************************************************* */ + +struct mods_pci_dev_2 { + __u16 domain; + __u16 bus; + __u16 device; + __u16 function; +}; + +struct mods_pci_dev { + __u16 bus; + __u8 device; + __u8 function; +}; + +/* MODS_ESC_ALLOC_PAGES_2 */ +struct MODS_ALLOC_PAGES_2 { + /* IN */ + __u64 num_bytes; + __u32 flags; /* MODS_ALLOC_* */ + __s32 numa_node; + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __u64 memory_handle; +}; + +/* numa_node */ +#define MODS_ANY_NUMA_NODE (-1) + +/* flags */ +#define MODS_ALLOC_CACHED 0 /* Default WB cache attr */ +#define MODS_ALLOC_UNCACHED 1 /* UC cache attr */ +#define MODS_ALLOC_WRITECOMBINE 2 /* WC cache attr */ +#define MODS_ALLOC_CACHE_MASK 7U /* The first three bits are cache attr */ + +#define MODS_ALLOC_DMA32 8 /* Force 32-bit PA, else any PA */ +#define MODS_ALLOC_CONTIGUOUS 16 /* Force contiguous, else any PA */ +#define MODS_ALLOC_USE_NUMA 32 /* Use numa_node instead of PCI dev for + * NUMA node hint + */ +#define MODS_ALLOC_FORCE_NUMA 64 /* Force memory to be from a given NUMA + * node (same as PCI dev or numa_node). + * Otherwise use PCI dev/numa_node as + * a hint and if that is not possible, + * allocate from any NUMA node + */ +#define MODS_ALLOC_MAP_DEV 128 /* DMA map to PCI device */ + +/* MODS_ESC_ALLOC_PAGES */ +struct MODS_ALLOC_PAGES { + /* IN */ + __u32 num_bytes; + __u32 contiguous; + __u32 address_bits; + __u32 attrib; + + /* OUT */ + __u64 memory_handle; +}; + +/* MODS_ESC_DEVICE_ALLOC_PAGES_2 */ +struct MODS_DEVICE_ALLOC_PAGES_2 { + /* IN */ + __u32 num_bytes; + __u32 contiguous; + __u32 address_bits; + __u32 attrib; + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __u64 memory_handle; +}; + +/* MODS_ESC_DEVICE_ALLOC_PAGES */ +struct MODS_DEVICE_ALLOC_PAGES { + /* IN */ + __u32 num_bytes; + __u32 contiguous; + __u32 address_bits; + __u32 attrib; + struct mods_pci_dev pci_device; + + /* OUT */ + __u64 memory_handle; +}; + +/* MODS_ESC_FREE_PAGES */ +struct MODS_FREE_PAGES { + /* IN */ + __u64 memory_handle; +}; + +#define MODS_MAX_MERGE_HANDLES 64 + +/* MODS_ESC_MERGE_PAGES */ +struct MODS_MERGE_PAGES { + /* IN */ + __u64 in_memory_handles[MODS_MAX_MERGE_HANDLES]; + __u32 num_in_handles; + __u32 dummy_align; + + /* OUT */ + __u64 memory_handle; +}; + +/* MODS_ESC_GET_PHYSICAL_ADDRESS */ +struct MODS_GET_PHYSICAL_ADDRESS { + /* IN */ + __u64 memory_handle; + __u32 offset; + + /* OUT */ + __u64 physical_address; +}; + +/* MODS_ESC_GET_PHYSICAL_ADDRESS */ +struct MODS_GET_PHYSICAL_ADDRESS_2 { + /* IN */ + __u64 memory_handle; + __u32 offset; + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __u64 physical_address; +}; + +/* MODS_ESC_GET_PHYSICAL_ADDRESS_3 */ +struct MODS_GET_PHYSICAL_ADDRESS_3 { + /* IN */ + __u64 memory_handle; + __u64 offset; + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __u64 physical_address; +}; + +/* MODS_ESC_VIRTUAL_TO_PHYSICAL */ +struct MODS_VIRTUAL_TO_PHYSICAL { + /* IN */ + __u64 virtual_address; + + /* OUT */ + __u64 physical_address; +}; + +/* MODS_ESC_PHYSICAL_TO_VIRTUAL */ +struct MODS_PHYSICAL_TO_VIRTUAL { + /* IN */ + __u64 physical_address; + + /* OUT */ + __u64 virtual_address; + +}; + +/* MODS_ESC_FLUSH_CACHE_RANGE */ +#define MODS_FLUSH_CPU_CACHE 1 +#define MODS_INVALIDATE_CPU_CACHE 2 + +struct MODS_FLUSH_CPU_CACHE_RANGE { + /* IN */ + __u64 virt_addr_start; + __u64 virt_addr_end; + __u32 flags; +}; + +/* MODS_ESC_DMA_MAP_MEMORY */ +struct MODS_DMA_MAP_MEMORY { + /* IN */ + __u64 memory_handle; + struct mods_pci_dev_2 pci_device; +}; + +/* MODS_ESC_PCI_SET_DMA_MASK */ +struct MODS_PCI_DMA_MASK { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u32 num_bits; +}; + +#define MODS_SWIOTLB_DISABLED 0 +#define MODS_SWIOTLB_ACTIVE 1 +#define MODS_SWIOTLB_INDETERMINATE 2 + +/* MODS_ESC_GET_IOMMU_STATE */ +struct MODS_GET_IOMMU_STATE { + /* IN */ + struct mods_pci_dev_2 pci_device; + /* OUT */ + __u32 state; +}; + +/* MODS_ESC_FIND_PCI_DEVICE_2 */ +struct MODS_FIND_PCI_DEVICE_2 { + /* IN */ + __u32 device_id; + __u32 vendor_id; + __u32 index; + + /* OUT */ + struct mods_pci_dev_2 pci_device; +}; + +/* MODS_ESC_FIND_PCI_DEVICE */ +struct MODS_FIND_PCI_DEVICE { + /* IN */ + __u32 device_id; + __u32 vendor_id; + __u32 index; + + /* OUT */ + __u32 bus_number; + __u32 device_number; + __u32 function_number; +}; + +/* MODS_ESC_FIND_PCI_CLASS_CODE_2 */ +struct MODS_FIND_PCI_CLASS_CODE_2 { + /* IN */ + __u32 class_code; + __u32 index; + + /* OUT */ + struct mods_pci_dev_2 pci_device; +}; + +/* MODS_ESC_FIND_PCI_CLASS_CODE */ +struct MODS_FIND_PCI_CLASS_CODE { + /* IN */ + __u32 class_code; + __u32 index; + + /* OUT */ + __u32 bus_number; + __u32 device_number; + __u32 function_number; +}; + +/* MODS_ESC_PCI_GET_BAR_INFO_2 */ +struct MODS_PCI_GET_BAR_INFO_2 { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u32 bar_index; + + /* OUT */ + __u64 base_address; + __u64 bar_size; +}; + +/* MODS_ESC_PCI_GET_BAR_INFO */ +struct MODS_PCI_GET_BAR_INFO { + /* IN */ + struct mods_pci_dev pci_device; + __u32 bar_index; + + /* OUT */ + __u64 base_address; + __u64 bar_size; +}; + +/* MODS_ESC_PCI_GET_IRQ_2 */ +struct MODS_PCI_GET_IRQ_2 { + /* IN */ + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __u32 irq; +}; + +/* MODS_ESC_PCI_GET_IRQ */ +struct MODS_PCI_GET_IRQ { + /* IN */ + struct mods_pci_dev pci_device; + + /* OUT */ + __u32 irq; +}; + +/* MODS_ESC_PCI_READ_2 */ +struct MODS_PCI_READ_2 { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u32 address; + __u32 data_size; + + /* OUT */ + __u32 data; +}; + +/* MODS_ESC_PCI_READ */ +struct MODS_PCI_READ { + /* IN */ + __u32 bus_number; + __u32 device_number; + __u32 function_number; + __u32 address; + __u32 data_size; + + /* OUT */ + __u32 data; +}; + +/* MODS_ESC_PCI_WRITE_2 */ +struct MODS_PCI_WRITE_2 { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u32 address; + __u32 data; + __u32 data_size; +}; + +/* MODS_ESC_PCI_WRITE */ +struct MODS_PCI_WRITE { + /* IN */ + __u32 bus_number; + __u32 device_number; + __u32 function_number; + __u32 address; + __u32 data; + __u32 data_size; +}; + +/* MODS_ESC_PCI_HOT_RESET */ +struct MODS_PCI_HOT_RESET { + /* IN */ + struct mods_pci_dev_2 pci_device; +}; + +/* MODS_ESC_PCI_BUS_REMOVE_DEV */ +struct MODS_PCI_BUS_REMOVE_DEV { + /* IN */ + struct mods_pci_dev_2 pci_device; +}; + +/* MODS_ESC_SET_PPC_TCE_BYPASS */ +#define MODS_PPC_TCE_BYPASS_DEFAULT 0 +#define MODS_PPC_TCE_BYPASS_ON 1 +#define MODS_PPC_TCE_BYPASS_OFF 2 +struct MODS_SET_PPC_TCE_BYPASS { + /* IN */ + __u8 mode; + __u8 _dummy_align[7]; + struct mods_pci_dev_2 pci_device; + __u64 device_dma_mask; + + /* OUT */ + __u64 dma_base_address; +}; + +/* MODS_ESC_PCI_BUS_ADD_DEVICES*/ +struct MODS_PCI_BUS_ADD_DEVICES { + /* IN */ + __u32 bus; +}; + +/* MODS_ESC_PCI_BUS_RESCAN */ +struct MODS_PCI_BUS_RESCAN { + __u16 domain; + __u16 bus; +}; + +/* MODS_ESC_PCI_MAP_RESOURCE */ +struct MODS_PCI_MAP_RESOURCE { + /* IN */ + struct mods_pci_dev_2 local_pci_device; + struct mods_pci_dev_2 remote_pci_device; + __u32 resource_index; + __u64 page_count; + + /* IN/OUT */ + __u64 va; +}; + +/* MODS_ESC_PCI_UNMAP_RESOURCE */ +struct MODS_PCI_UNMAP_RESOURCE { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u64 va; +}; + +/* MODS_ESC_PIO_READ */ +struct MODS_PIO_READ { + /* IN */ + __u16 port; + __u32 data_size; + + /* OUT */ + __u32 data; +}; + +/* MODS_ESC_PIO_WRITE */ +struct MODS_PIO_WRITE { + /* IN */ + __u16 port; + __u32 data; + __u32 data_size; +}; + +#define INQ_CNT 8 + +struct mods_irq_data { + __u32 irq; + __u32 delay; +}; + +struct mods_irq_status { + struct mods_irq_data data[INQ_CNT]; + __u32 irqbits:INQ_CNT; + __u32 otherirq:1; +}; + +/* MODS_ESC_IRQ */ +struct MODS_IRQ { + /* IN */ + __u32 cmd; + __u32 size; /* memory size */ + __u32 irq; /* the irq number to be registered in driver */ + + /* IN OUT */ + __u32 channel; /* application id allocated by driver. */ + + /* OUT */ + struct mods_irq_status stat; /* for querying irq */ + __u64 phys; /* the memory physical address */ +}; +#define MODS_IRQ_MAX_MASKS 16 + +/* MODS_ESC_REGISTER_IRQ_3 */ +struct mods_mask_info2 { + __u8 mask_type; /*mask type 32/64 bit access*/ + __u8 reserved[7]; /*force 64bit alignment */ + __u32 irq_pending_offset; /* register to read IRQ pending status*/ + __u32 irq_enabled_offset; /* register to read IRQ enabled status */ + __u32 irq_enable_offset; /* register to write to enable IRQs */ + __u32 irq_disable_offset; /* register to write to disable IRQs */ + __u64 and_mask; /*and mask for clearing bits in this register */ + __u64 or_mask; /*or mask for setting bit in this register */ +}; + +struct MODS_REGISTER_IRQ_4 { + /* IN */ + struct mods_pci_dev_2 dev; /* device identifying interrupt for */ + /* which the mask will be applied */ + __u64 aperture_addr; /* physical address of aperture */ + __u32 aperture_size; /* size of the mapped region */ + __u32 mask_info_cnt; /* number of entries in mask_info[]*/ + struct mods_mask_info2 mask_info[MODS_IRQ_MAX_MASKS]; + __u32 irq_count; /* number of irq's to allocate */ + __u32 irq_flags; /* irq type and affinity */ +}; + +struct MODS_REGISTER_IRQ_3 { + /* IN */ + struct mods_pci_dev_2 dev; /* device identifying interrupt for */ + /* which the mask will be applied */ + __u64 aperture_addr; /* physical address of aperture */ + __u32 aperture_size; /* size of the mapped region */ + __u32 mask_info_cnt; /* number of entries in mask_info[]*/ + struct mods_mask_info2 mask_info[MODS_IRQ_MAX_MASKS]; + __u8 irq_type; /* MODS_IRQ_TYPE_* */ + __u8 reserved[7]; /* keep alignment to 64bits */ +}; + +/* MODS_ESC_REGISTER_IRQ_2 */ +/* MODS_ESC_UNREGISTER_IRQ_2 */ +/* MODS_ESC_IRQ_HANDLED_2 */ +struct MODS_REGISTER_IRQ_2 { + /* IN */ + struct mods_pci_dev_2 dev; /* device which generates the interrupt */ + __u8 type; /* MODS_IRQ_TYPE_* */ +}; + +/* MODS_ESC_REGISTER_IRQ */ +/* MODS_ESC_UNREGISTER_IRQ */ +/* MODS_ESC_IRQ_HANDLED */ +struct MODS_REGISTER_IRQ { + /* IN */ + struct mods_pci_dev dev; /* device which generates */ + /* the interrupt */ + __u8 type; /* MODS_IRQ_TYPE_* */ +}; + +struct mods_irq_3 { + struct mods_pci_dev_2 dev; /* device which generated the interrupt */ + __u32 irq_index; /* index of irq 0 for INTx & MSI */ + __u32 delay; /* delay in ns between the irq */ + /* occurring and MODS querying for it */ +}; + +struct mods_irq_2 { + __u32 delay; /* delay in ns between the irq */ + /* occurring and MODS querying for it */ + struct mods_pci_dev_2 dev; /* device which generated the interrupt */ +}; + +struct mods_irq { + __u32 delay; /* delay in ns between the irq */ + /* occurring and MODS querying */ + /* for it */ + struct mods_pci_dev dev; /* device which generated */ + /* the interrupt */ +}; + +#define MODS_MAX_IRQS 32 + +/* MODS_ESC_QUERY_IRQ_3 */ +struct MODS_QUERY_IRQ_3 { + /* OUT */ + struct mods_irq_3 irq_list[MODS_MAX_IRQS]; + __u8 more; /* indicates that more interrupts */ + /* are waiting */ +}; + +/* MODS_ESC_QUERY_IRQ_2 */ +struct MODS_QUERY_IRQ_2 { + /* OUT */ + struct mods_irq_2 irq_list[MODS_MAX_IRQS]; + __u8 more; /* indicates that more interrupts */ + /* are waiting */ +}; + +/* MODS_ESC_QUERY_IRQ */ +struct MODS_QUERY_IRQ { + /* OUT */ + struct mods_irq irq_list[MODS_MAX_IRQS]; + __u8 more; /* indicates that more interrupts are waiting */ +}; + +#define MODS_IRQ_TYPE_INT 0 +#define MODS_IRQ_TYPE_MSI 1 +#define MODS_IRQ_TYPE_CPU 2 +#define MODS_IRQ_TYPE_MSIX 3 +#define MODS_IRQ_TYPE_MASK 0xff + +/* MODS_ESC_SET_IRQ_MULTIMASK */ +struct mods_mask_info { + __u8 mask_type; /*mask type 32/64 bit access*/ + __u8 reserved[3]; + __u32 reg_offset; /* offset of register within the bar aperture*/ + __u64 and_mask; /*and mask for clearing bits in this register */ + __u64 or_mask; /*or value for setting bit in this register */ +}; + +struct MODS_SET_IRQ_MULTIMASK { + /* IN */ + __u64 aperture_addr; /* physical address of aperture */ + __u32 aperture_size; /* size of the mapped region */ + struct mods_pci_dev_2 dev; /* device identifying interrupt for */ + /* which the mask will be applied */ + __u32 mask_info_cnt; /* number of entries in mask_info[]*/ + struct mods_mask_info mask_info[MODS_IRQ_MAX_MASKS]; + __u8 irq_type; /* irq type */ +}; + +/* MODS_ESC_SET_IRQ_MASK_2 */ +struct MODS_SET_IRQ_MASK_2 { + /* IN */ + __u64 aperture_addr;/* physical address of aperture */ + __u32 aperture_size;/* size of the mapped region */ + __u32 reg_offset; /* offset of the irq mask */ + /* register within the aperture */ + __u64 and_mask; /* and mask for clearing bits */ + /* in the irq mask register */ + __u64 or_mask; /* or mask for setting bits in */ + /* the irq mask register */ + struct mods_pci_dev_2 dev; /* device identifying interrupt */ + /* for which the mask will be */ + /* applied */ + __u8 irq_type; /* irq type */ + __u8 mask_type; /* mask type */ +}; + +/* MODS_ESC_SET_IRQ_MASK */ +struct MODS_SET_IRQ_MASK { + /* IN */ + __u64 aperture_addr; /* physical address of aperture */ + __u32 aperture_size; /* size of the mapped region */ + __u32 reg_offset; /* offset of the irq mask register */ + /* within the aperture */ + __u32 and_mask; /* and mask for clearing bits in */ + /* the irq mask register */ + __u32 or_mask; /* or mask for setting bits in */ + /* the irq mask register */ + struct mods_pci_dev dev; /* device identifying interrupt */ + /* for which the mask will be */ + /* applied */ + __u8 irq_type; /* irq type */ + __u8 mask_type; /* mask type */ +}; + +#define MAX_DT_SIZE 64 +#define MAX_FULL_SIZE 128 + +/*MODS_ESC_MAP_INTERRUPT*/ +struct MODS_DT_INFO { + /* OUT */ + /* Logical irq number*/ + __u32 irq; + /* IN */ + /* DT name for looking up device tree node */ + char dt_name[MAX_DT_SIZE]; + /* Full name of node as in device tree */ + char full_name[MAX_FULL_SIZE]; + /* Irq index corresponding to physical irq */ + __u32 index; +}; + +#define MAX_GPIO_NAME_SIZE 256 +struct MODS_GPIO_INFO { + /* OUTPUT */ + /* Irq number to be mapped to gpio and returned to user */ + __u32 irq; + /* IN */ + /* Name of Gpio to be mapped */ + char name[MAX_GPIO_NAME_SIZE]; + /* IN */ + /* DT Name of device that gpio belongs to */ + char dt_name[MAX_DT_SIZE]; + /* IN */ + /* Name of device that gpio belongs to */ + char full_name[MAX_DT_SIZE]; +}; + +#define MODS_MASK_TYPE_IRQ_DISABLE 0 +#define MODS_MASK_TYPE_IRQ_DISABLE64 1 + +#define ACPI_MODS_TYPE_INTEGER 1 +#define ACPI_MODS_TYPE_BUFFER 2 +#define ACPI_MODS_IGNORE_ACPI_ID 0xffffffff +#define ACPI_MAX_BUFFER_LENGTH 4096 +#define ACPI_MAX_METHOD_LENGTH 12 +#define ACPI_MAX_ARGUMENT_NUMBER 12 + +union ACPI_ARGUMENT { + __u32 type; + + struct { + __u32 type; + __u32 value; + } integer; + + struct { + __u32 type; + __u32 length; + __u32 offset; + } buffer; +}; + +/* MODS_ESC_EVAL_ACPI_METHOD */ +struct MODS_EVAL_ACPI_METHOD { + /* IN */ + char method_name[ACPI_MAX_METHOD_LENGTH]; + __u32 argument_count; + union ACPI_ARGUMENT argument[ACPI_MAX_ARGUMENT_NUMBER]; + __u8 in_buffer[ACPI_MAX_BUFFER_LENGTH]; + + /* IN OUT */ + __u32 out_data_size; + + /* OUT */ + __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; + __u32 out_status; +}; + +/* MODS_ESC_EVAL_DEV_ACPI_METHOD_3 */ +struct MODS_EVAL_DEV_ACPI_METHOD_3 { + /* IN OUT */ + struct MODS_EVAL_ACPI_METHOD method; + + /* IN */ + struct mods_pci_dev_2 device; + __u32 acpi_id; +}; + +/* MODS_ESC_EVAL_DEV_ACPI_METHOD_2 */ +struct MODS_EVAL_DEV_ACPI_METHOD_2 { + /* IN OUT */ + struct MODS_EVAL_ACPI_METHOD method; + + /* IN */ + struct mods_pci_dev_2 device; +}; + +/* MODS_ESC_EVAL_DEV_ACPI_METHOD */ +struct MODS_EVAL_DEV_ACPI_METHOD { + /* IN OUT */ + struct MODS_EVAL_ACPI_METHOD method; + + /* IN */ + struct mods_pci_dev device; +}; + +/* MODS_ESC_ACPI_GET_DDC_2 */ +struct MODS_ACPI_GET_DDC_2 { + /* OUT */ + __u32 out_data_size; + __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; + + /* IN */ + struct mods_pci_dev_2 device; +}; + +/* MODS_ESC_ACPI_GET_DDC */ +struct MODS_ACPI_GET_DDC { + /* OUT */ + __u32 out_data_size; + __u8 out_buffer[ACPI_MAX_BUFFER_LENGTH]; + + /* IN */ + struct mods_pci_dev device; +}; + +/* MODS_ESC_GET_VERSION */ +struct MODS_GET_VERSION { + /* OUT */ + __u64 version; +}; + +/* MODS_ESC_SET_PARA */ +struct MODS_SET_PARA { + /* IN */ + __u64 Highmem4g; + __u64 debug; +}; + +/* MODS_ESC_SET_MEMORY_TYPE */ +struct MODS_MEMORY_TYPE { + /* IN */ + __u64 physical_address; + __u64 size; + __u32 type; +}; + +#define MAX_CLOCK_HANDLE_NAME 64 + +/* MODS_ESC_GET_CLOCK_HANDLE */ +struct MODS_GET_CLOCK_HANDLE { + /* OUT */ + __u32 clock_handle; + + /* IN */ + char device_name[MAX_CLOCK_HANDLE_NAME]; + char controller_name[MAX_CLOCK_HANDLE_NAME]; +}; + +/* MODS_ESC_SET_CLOCK_RATE, MODS_ESC_GET_CLOCK_RATE, */ +/* MODS_ESC_GET_CLOCK_MAX_RATE, MODS_ESC_SET_CLOCK_MAX_RATE */ +struct MODS_CLOCK_RATE { + /* IN/OUT */ + __u64 clock_rate_hz; + + /* IN */ + __u32 clock_handle; +}; + +/* MODS_ESC_SET_CLOCK_PARENT, MODS_ESC_GET_CLOCK_PARENT */ +struct MODS_CLOCK_PARENT { + /* IN */ + __u32 clock_handle; + + /* IN/OUT */ + __u32 clock_parent_handle; +}; + +/* MODS_ESC_ENABLE_CLOCK, MODS_ESC_DISABLE_CLOCK, */ +/* MODS_ESC_CLOCK_RESET_ASSERT, MODS_ESC_CLOCK_RESET_DEASSERT */ +struct MODS_CLOCK_HANDLE { + /* IN */ + __u32 clock_handle; +}; + +/* MODS_ESC_IS_CLOCK_ENABLED */ +struct MODS_CLOCK_ENABLED { + /* IN */ + __u32 clock_handle; + + /* OUT */ + __u32 enable_count; +}; + +#define MAX_CPU_MASKS_3 128 /* CPU indices can be at most 4096 apart */ + +/* MODS_ESC_DEVICE_NUMA_INFO_3 */ +struct MODS_DEVICE_NUMA_INFO_3 { + /* IN */ + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __s32 node; + __u32 node_count; + __u32 cpu_count; + __u32 first_cpu_mask_offset; + __u32 node_cpu_mask[MAX_CPU_MASKS_3]; +}; + +#if defined(CONFIG_PPC64) || defined(PPC64LE) +#define MAX_CPU_MASKS 64 /* 32 masks of 32bits = 2048 CPUs max */ +#else +#define MAX_CPU_MASKS 32 /* 32 masks of 32bits = 1024 CPUs max */ +#endif + +/* MODS_ESC_DEVICE_NUMA_INFO_2 */ +struct MODS_DEVICE_NUMA_INFO_2 { + /* IN */ + struct mods_pci_dev_2 pci_device; + + /* OUT */ + __s32 node; + __u32 node_count; + __u32 node_cpu_mask[MAX_CPU_MASKS]; + __u32 cpu_count; +}; + +/* MODS_ESC_DEVICE_NUMA_INFO */ +struct MODS_DEVICE_NUMA_INFO { + /* IN */ + struct mods_pci_dev pci_device; + + /* OUT */ + __s32 node; + __u32 node_count; + __u32 node_cpu_mask[MAX_CPU_MASKS]; + __u32 cpu_count; +}; + +/* The ids match MODS ids */ +#define MODS_MEMORY_CACHED 5 +#define MODS_MEMORY_UNCACHED 1 +#define MODS_MEMORY_WRITECOMBINE 2 + +struct MODS_TEGRA_DC_WINDOW { + __s32 index; + __u32 flags; + __u32 x; + __u32 y; + __u32 w; + __u32 h; + __u32 out_x; + __u32 out_y; + __u32 out_w; + __u32 out_h; + __u32 pixformat; /* NVDC pix format */ + + __u32 bandwidth; +}; +#define MODS_TEGRA_DC_WINDOW_FLAG_ENABLED (1 << 0) +#define MODS_TEGRA_DC_WINDOW_FLAG_TILED (1 << 1) +#define MODS_TEGRA_DC_WINDOW_FLAG_SCAN_COL (1 << 2) +#define MODS_TEGRA_DC_MAX_WINDOWS (6) + +/* MODS_ESC_TEGRA_DC_CONFIG_POSSIBLE */ +struct MODS_TEGRA_DC_CONFIG_POSSIBLE { + /* IN/OUT */ + struct MODS_TEGRA_DC_WINDOW windows[MODS_TEGRA_DC_MAX_WINDOWS]; + + /* IN */ + __u8 head; + __u8 win_num; + + /* OUT */ + __u8 possible; +}; + + +#define MODS_TEGRA_DC_SETUP_SD_LUT_SIZE 9 +#define MODS_TEGRA_DC_SETUP_BLTF_SIZE 16 +/* MODS_ESC_TEGRA_DC_SETUP_SD */ +struct MODS_TEGRA_DC_SETUP_SD { + /* IN */ + __u8 head; + __u8 enable; + + __u8 use_vid_luma; + __u8 csc_r; + __u8 csc_g; + __u8 csc_b; + __u8 aggressiveness; + __u8 bin_width_log2; + + __u32 lut[MODS_TEGRA_DC_SETUP_SD_LUT_SIZE]; + __u32 bltf[MODS_TEGRA_DC_SETUP_BLTF_SIZE]; + + __u32 klimit; + __u32 soft_clipping_threshold; + __u32 smooth_k_inc; + __u8 k_init_bias; + + + __u32 win_x; + __u32 win_y; + __u32 win_w; + __u32 win_h; +}; + +/* MODS_ESC_DMABUF_GET_PHYSICAL_ADDRESS */ +struct MODS_DMABUF_GET_PHYSICAL_ADDRESS { + /* IN */ + __s32 buf_fd; + __u32 padding; + __u64 offset; + + /* OUT */ + __u64 physical_address; + __u64 segment_size; +}; + +#define MODS_ADSP_APP_NAME_SIZE 64 +#define MODS_ADSP_APP_MAX_PARAM 128 +struct MODS_ADSP_RUN_APP_INFO { + char app_name[MODS_ADSP_APP_NAME_SIZE]; + char app_file_name[MODS_ADSP_APP_NAME_SIZE]; + __u32 argc; + __u32 argv[MODS_ADSP_APP_MAX_PARAM]; + __u32 timeout; +}; + +/* MODS_ESC_GET_SCREEN_INFO */ +struct MODS_SCREEN_INFO { + /* OUT */ + __u8 orig_video_mode; + __u8 orig_video_is_vga; + __u16 lfb_width; + __u16 lfb_height; + __u16 lfb_depth; + __u32 lfb_base; + __u32 lfb_size; + __u16 lfb_linelength; +}; + +/* MODS_ESC_GET_SCREEN_INFO_2 */ +struct MODS_SCREEN_INFO_2 { + /* OUT */ + struct MODS_SCREEN_INFO info; + __u32 ext_lfb_base; +}; + +enum MODS_DMA_TRANSACTION_TYPE { + MODS_DMA_MEMCPY, + MODS_DMA_XOR, + MODS_DMA_PQ, + MODS_DMA_XOR_VAL, + MODS_DMA_PQ_VAL, + MODS_DMA_MEMSET, + MODS_DMA_MEMSET_SG, + MODS_DMA_INTERRUPT, + MODS_DMA_SG, + MODS_DMA_PRIVATE, + MODS_DMA_ASYNC_TX, + MODS_DMA_SLAVE, + MODS_DMA_CYCLIC, + MODS_DMA_INTERLEAVE, +/* last transaction type for creation of the capabilities mask */ + MODS_DMA_TX_TYPE_END +}; + +struct MODS_DMA_HANDLE { + /* IN */ + __u32 dma_type; /* Indicate the DMA Type*/ + /* OUT */ + __u32 dma_id; /* Inditify for the DMA */ +}; + +enum MODS_DMA_TRANSFER_DIRECTION { + MODS_DMA_MEM_TO_MEM, + MODS_DMA_MEM_TO_DEV, + MODS_DMA_DEV_TO_MEM, + MODS_DMA_DEV_TO_DEV, + MODS_DMA_TRANS_NONE +}; + +enum MODS_DMA_BUSWIDTH { + MODS_DMA_BUSWIDTH_UNDEFINED = 0, + MODS_DMA_BUSWIDTH_1_BYTE = 1, + MODS_DMA_BUSWIDTH_2_BYTES = 2, + MODS_DMA_BUSWIDTH_4_BYTES = 4, + MODS_DMA_BUSWIDTH_8_BYTES = 8 +}; + +struct MODS_DMA_CHANNEL_CONFIG { + __u64 src_addr; + __u64 dst_addr; + struct MODS_DMA_HANDLE handle; + __u32 direction; + __u32 src_addr_width; + __u32 dst_addr_width; + __u32 src_maxburst; + __u32 dst_maxburst; + __u32 slave_id; + __u32 device_fc; +}; + +/* Node: Only support SINGLE MODS so far*/ +enum MODS_DMA_TX_MODE { + MODS_DMA_SINGLE = 0, + MODS_DMA_TX_CYCLIC, + MODS_DMA_INTERLEAVED /* Common to Slave as well as M2M clients. */ +}; + +typedef __s32 mods_dma_cookie_t; + +struct MODS_DMA_TX_DESC { + /* IN */ + __u64 phys; + __u64 phys_2; /* only valid for MEMCPY */ + struct MODS_DMA_HANDLE handle; + __u32 mode; + __u32 data_dir; + __u32 length; + __u32 flags; + /* OUT */ + mods_dma_cookie_t cookie; +}; + +enum MODS_DMA_WAIT_TYPE { + MODS_DMA_SYNC_WAIT, /* wait until finished */ + MODS_DMA_ASYNC_WAIT /* just check tx status */ +}; + +struct MODS_DMA_WAIT_DESC { + struct MODS_DMA_HANDLE handle; + mods_dma_cookie_t cookie; + __u32 type; + /* OUT */ + __u32 tx_complete; +}; + +#define MAX_NET_DEVICE_NAME_LENGTH 16 +struct MODS_NET_DEVICE_NAME { + /* in */ + char device_name[MAX_NET_DEVICE_NAME_LENGTH]; +}; +struct MODS_DMA_COHERENT_MEM_HANDLE { + __u32 num_bytes; + __u32 attrib; + __u64 memory_handle_phys; + __u64 memory_handle_virt; +}; + +/* MODS_ESC_DMA_COPY_TO_USER */ +struct MODS_DMA_COPY_TO_USER { + __u32 num_bytes; + __u32 attrib; + __u64 memory_handle_src; + __u64 memory_handle_dst; +}; + +struct MODS_TEGRA_PROD_SET_TUPLE { + /* IN */ + __u64 prod_dev_handle; + __u64 ctrl_dev_handle; + char prod_name[MAX_DT_SIZE]; + __u32 index; + __u32 offset; + __u32 mask; +}; + +struct MODS_TEGRA_PROD_IS_SUPPORTED { + /* IN */ + __u64 prod_dev_handle; + char prod_name[MAX_DT_SIZE]; + /* OUT */ + __u32 is_supported; +}; + +struct MODS_TEGRA_PROD_ITERATOR { + /* IN */ + __u64 device_handle; + char name[MAX_DT_SIZE]; + char next_name[MAX_DT_SIZE]; + __u32 index; + __u32 is_leaf; + /* OUT */ + __u64 next_device_handle; +}; + +/* MODS_ESC_GET_ATS_ADDRESS_RANGE */ +struct MODS_GET_ATS_ADDRESS_RANGE { + /* IN */ + struct mods_pci_dev_2 pci_device; + __s32 npu_index; + __u8 reserved[4]; /* Alignment */ + + /* OUT */ + struct mods_pci_dev_2 npu_device; + __u64 phys_addr; + __u64 guest_addr; + __u64 aperture_size; + __s32 numa_memory_node; +}; + +/* MODS_ESC_SET_NVLINK_SYSMEM_TRAINED */ +struct MODS_SET_NVLINK_SYSMEM_TRAINED { + /* IN */ + struct mods_pci_dev_2 pci_device; + __u8 trained; +}; + +/* MODS_ESC_GET_NVLINK_LINE_RATE */ +struct MODS_GET_NVLINK_LINE_RATE { + /* IN */ + struct mods_pci_dev_2 pci_device; + __s32 npu_index; + + /* OUT */ + __u32 speed; +}; + +/* MODS_ESC_ACQUIRE_ACCESS_TOKEN + * MODS_ESC_RELEASE_ACCESS_TOKEN + * MODS_ESC_VERIFY_ACCESS_TOKEN + */ +#define MODS_ACCESS_TOKEN_NONE ~0U +struct MODS_ACCESS_TOKEN { + /* IN/OUT */ + __u32 token; +}; + +#define MODS_MAX_SYSFS_PATH_BUF_SIZE 512 +#define MODS_MAX_SYSFS_PATH_LEN (512 - 6) +#define MODS_MAX_SYSFS_FILE_SIZE 4096 + +/* MODS_ESC_WRITE_SYSFS_NODE */ +struct MODS_SYSFS_NODE { + /* IN */ + char path[MODS_MAX_SYSFS_PATH_BUF_SIZE]; + char contents[MODS_MAX_SYSFS_FILE_SIZE]; + __u32 size; +}; + +#define MODS_IRQ_TYPE_FROM_FLAGS(flags) ((flags)&0xf) +#define MODS_IRQ_FLAG_FROM_FLAGS(flags) (((flags)&0xfff0)>>4) + +/* MODS_ESC_SET_NUM_VF */ +struct MODS_SET_NUM_VF { + /* IN */ + struct mods_pci_dev_2 dev; + __u32 numvfs; /* number of virtual functions */ +}; + +/* MODS_ESC_READ_MSR + * MODS_ESC_WRITE_MSR + */ +struct MODS_MSR { + /* IN */ + __u32 reg; + __u32 cpu_num; + + /* IN/OUT */ + __u32 low; + __u32 high; +}; + +#pragma pack(pop) + +/* ************************************************************************* */ +/* ************************************************************************* */ +/* ** */ +/* ** ESCAPE CALLS */ +/* ** */ +/* ************************************************************************* */ +/* ************************************************************************* */ +#define MODS_IOC_MAGIC 'x' +#define MODS_ESC_ALLOC_PAGES \ + _IOWR(MODS_IOC_MAGIC, 0, struct MODS_ALLOC_PAGES) +#define MODS_ESC_FREE_PAGES \ + _IOWR(MODS_IOC_MAGIC, 1, struct MODS_FREE_PAGES) +#define MODS_ESC_GET_PHYSICAL_ADDRESS \ + _IOWR(MODS_IOC_MAGIC, 2, struct MODS_GET_PHYSICAL_ADDRESS) +#define MODS_ESC_VIRTUAL_TO_PHYSICAL \ + _IOWR(MODS_IOC_MAGIC, 3, struct MODS_VIRTUAL_TO_PHYSICAL) +#define MODS_ESC_PHYSICAL_TO_VIRTUAL \ + _IOWR(MODS_IOC_MAGIC, 4, struct MODS_PHYSICAL_TO_VIRTUAL) +#define MODS_ESC_FIND_PCI_DEVICE \ + _IOWR(MODS_IOC_MAGIC, 5, struct MODS_FIND_PCI_DEVICE) +#define MODS_ESC_FIND_PCI_CLASS_CODE \ + _IOWR(MODS_IOC_MAGIC, 6, struct MODS_FIND_PCI_CLASS_CODE) +#define MODS_ESC_PCI_READ \ + _IOWR(MODS_IOC_MAGIC, 7, struct MODS_PCI_READ) +#define MODS_ESC_PCI_WRITE \ + _IOWR(MODS_IOC_MAGIC, 8, struct MODS_PCI_WRITE) +#define MODS_ESC_PIO_READ \ + _IOWR(MODS_IOC_MAGIC, 9, struct MODS_PIO_READ) +#define MODS_ESC_PIO_WRITE \ + _IOWR(MODS_IOC_MAGIC, 10, struct MODS_PIO_WRITE) +/* Deprecated */ +#define MODS_ESC_IRQ_REGISTER \ + _IOWR(MODS_IOC_MAGIC, 11, struct MODS_IRQ) +/* Deprecated */ +#define MODS_ESC_IRQ_FREE \ + _IOWR(MODS_IOC_MAGIC, 12, struct MODS_IRQ) +/* Deprecated */ +#define MODS_ESC_IRQ_INQUIRY \ + _IOWR(MODS_IOC_MAGIC, 13, struct MODS_IRQ) +#define MODS_ESC_EVAL_ACPI_METHOD \ + _IOWR_BAD(MODS_IOC_MAGIC, 16, struct MODS_EVAL_ACPI_METHOD) +#define MODS_ESC_GET_API_VERSION \ + _IOWR(MODS_IOC_MAGIC, 17, struct MODS_GET_VERSION) +/* Deprecated */ +#define MODS_ESC_GET_KERNEL_VERSION \ + _IOWR(MODS_IOC_MAGIC, 18, struct MODS_GET_VERSION) +/* Deprecated */ +#define MODS_ESC_SET_DRIVER_PARA \ + _IOWR(MODS_IOC_MAGIC, 19, struct MODS_SET_PARA) +/* Deprecated */ +#define MODS_ESC_MSI_REGISTER \ + _IOWR(MODS_IOC_MAGIC, 20, struct MODS_IRQ) +/* Deprecated */ +#define MODS_ESC_REARM_MSI \ + _IOWR(MODS_IOC_MAGIC, 21, struct MODS_IRQ) +#define MODS_ESC_SET_MEMORY_TYPE \ + _IOW(MODS_IOC_MAGIC, 22, struct MODS_MEMORY_TYPE) +/* Deprecated */ +#define MODS_ESC_PCI_BUS_ADD_DEVICES \ + _IOW(MODS_IOC_MAGIC, 23, struct MODS_PCI_BUS_ADD_DEVICES) +#define MODS_ESC_REGISTER_IRQ \ + _IOW(MODS_IOC_MAGIC, 24, struct MODS_REGISTER_IRQ) +#define MODS_ESC_UNREGISTER_IRQ \ + _IOW(MODS_IOC_MAGIC, 25, struct MODS_REGISTER_IRQ) +#define MODS_ESC_QUERY_IRQ \ + _IOR(MODS_IOC_MAGIC, 26, struct MODS_QUERY_IRQ) +#define MODS_ESC_EVAL_DEV_ACPI_METHOD \ + _IOWR_BAD(MODS_IOC_MAGIC, 27, struct MODS_EVAL_DEV_ACPI_METHOD) +#define MODS_ESC_ACPI_GET_DDC \ + _IOWR(MODS_IOC_MAGIC, 28, struct MODS_ACPI_GET_DDC) +#define MODS_ESC_GET_CLOCK_HANDLE \ + _IOWR(MODS_IOC_MAGIC, 29, struct MODS_GET_CLOCK_HANDLE) +#define MODS_ESC_SET_CLOCK_RATE \ + _IOW(MODS_IOC_MAGIC, 30, struct MODS_CLOCK_RATE) +#define MODS_ESC_GET_CLOCK_RATE \ + _IOWR(MODS_IOC_MAGIC, 31, struct MODS_CLOCK_RATE) +#define MODS_ESC_SET_CLOCK_PARENT \ + _IOW(MODS_IOC_MAGIC, 32, struct MODS_CLOCK_PARENT) +#define MODS_ESC_GET_CLOCK_PARENT \ + _IOWR(MODS_IOC_MAGIC, 33, struct MODS_CLOCK_PARENT) +#define MODS_ESC_ENABLE_CLOCK \ + _IOW(MODS_IOC_MAGIC, 34, struct MODS_CLOCK_HANDLE) +#define MODS_ESC_DISABLE_CLOCK \ + _IOW(MODS_IOC_MAGIC, 35, struct MODS_CLOCK_HANDLE) +#define MODS_ESC_IS_CLOCK_ENABLED \ + _IOWR(MODS_IOC_MAGIC, 36, struct MODS_CLOCK_ENABLED) +#define MODS_ESC_CLOCK_RESET_ASSERT \ + _IOW(MODS_IOC_MAGIC, 37, struct MODS_CLOCK_HANDLE) +#define MODS_ESC_CLOCK_RESET_DEASSERT \ + _IOW(MODS_IOC_MAGIC, 38, struct MODS_CLOCK_HANDLE) +/* Deprecated */ +#define MODS_ESC_SET_IRQ_MASK \ + _IOW(MODS_IOC_MAGIC, 39, struct MODS_SET_IRQ_MASK) +#define MODS_ESC_MEMORY_BARRIER \ + _IO(MODS_IOC_MAGIC, 40) +#define MODS_ESC_IRQ_HANDLED \ + _IOW(MODS_IOC_MAGIC, 41, struct MODS_REGISTER_IRQ) +#define MODS_ESC_FLUSH_CPU_CACHE_RANGE \ + _IOW(MODS_IOC_MAGIC, 42, struct MODS_FLUSH_CPU_CACHE_RANGE) +#define MODS_ESC_GET_CLOCK_MAX_RATE \ + _IOWR(MODS_IOC_MAGIC, 43, struct MODS_CLOCK_RATE) +#define MODS_ESC_SET_CLOCK_MAX_RATE \ + _IOW(MODS_IOC_MAGIC, 44, struct MODS_CLOCK_RATE) +#define MODS_ESC_DEVICE_ALLOC_PAGES \ + _IOWR(MODS_IOC_MAGIC, 45, struct MODS_DEVICE_ALLOC_PAGES) +#define MODS_ESC_DEVICE_NUMA_INFO \ + _IOWR(MODS_IOC_MAGIC, 46, struct MODS_DEVICE_NUMA_INFO) +#define MODS_ESC_TEGRA_DC_CONFIG_POSSIBLE \ + _IOWR(MODS_IOC_MAGIC, 47, \ + struct MODS_TEGRA_DC_CONFIG_POSSIBLE) +#define MODS_ESC_TEGRA_DC_SETUP_SD \ + _IOW(MODS_IOC_MAGIC, 48, struct MODS_TEGRA_DC_SETUP_SD) +#define MODS_ESC_DMABUF_GET_PHYSICAL_ADDRESS \ + _IOWR(MODS_IOC_MAGIC, 49, \ + struct MODS_DMABUF_GET_PHYSICAL_ADDRESS) +#define MODS_ESC_ADSP_LOAD \ + _IO(MODS_IOC_MAGIC, 50) +#define MODS_ESC_ADSP_START \ + _IO(MODS_IOC_MAGIC, 51) +#define MODS_ESC_ADSP_STOP \ + _IO(MODS_IOC_MAGIC, 52) +#define MODS_ESC_ADSP_RUN_APP \ + _IOW(MODS_IOC_MAGIC, 53, struct MODS_ADSP_RUN_APP_INFO) +#define MODS_ESC_PCI_GET_BAR_INFO \ + _IOWR(MODS_IOC_MAGIC, 54, struct MODS_PCI_GET_BAR_INFO) +#define MODS_ESC_PCI_GET_IRQ \ + _IOWR(MODS_IOC_MAGIC, 55, struct MODS_PCI_GET_IRQ) +/* Deprecated */ +#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS \ + _IOWR(MODS_IOC_MAGIC, 56, \ + struct MODS_GET_PHYSICAL_ADDRESS) +#define MODS_ESC_DEVICE_ALLOC_PAGES_2 \ + _IOWR(MODS_IOC_MAGIC, 57, struct MODS_DEVICE_ALLOC_PAGES_2) +#define MODS_ESC_FIND_PCI_DEVICE_2 \ + _IOWR(MODS_IOC_MAGIC, 58, struct MODS_FIND_PCI_DEVICE_2) +#define MODS_ESC_FIND_PCI_CLASS_CODE_2 \ + _IOWR(MODS_IOC_MAGIC, 59, \ + struct MODS_FIND_PCI_CLASS_CODE_2) +#define MODS_ESC_PCI_GET_BAR_INFO_2 \ + _IOWR(MODS_IOC_MAGIC, 60, struct MODS_PCI_GET_BAR_INFO_2) +#define MODS_ESC_PCI_GET_IRQ_2 \ + _IOWR(MODS_IOC_MAGIC, 61, struct MODS_PCI_GET_IRQ_2) +#define MODS_ESC_PCI_READ_2 \ + _IOWR(MODS_IOC_MAGIC, 62, struct MODS_PCI_READ_2) +#define MODS_ESC_PCI_WRITE_2 \ + _IOW(MODS_IOC_MAGIC, 63, struct MODS_PCI_WRITE_2) +#define MODS_ESC_REGISTER_IRQ_2 \ + _IOW(MODS_IOC_MAGIC, 64, struct MODS_REGISTER_IRQ_2) +#define MODS_ESC_UNREGISTER_IRQ_2 \ + _IOW(MODS_IOC_MAGIC, 65, struct MODS_REGISTER_IRQ_2) +#define MODS_ESC_IRQ_HANDLED_2 \ + _IOW(MODS_IOC_MAGIC, 66, struct MODS_REGISTER_IRQ_2) +#define MODS_ESC_QUERY_IRQ_2 \ + _IOR(MODS_IOC_MAGIC, 67, struct MODS_QUERY_IRQ_2) +/* Deprecated */ +#define MODS_ESC_SET_IRQ_MASK_2 \ + _IOW(MODS_IOC_MAGIC, 68, struct MODS_SET_IRQ_MASK_2) +#define MODS_ESC_EVAL_DEV_ACPI_METHOD_2 \ + _IOWR_BAD(MODS_IOC_MAGIC, 69,\ + struct MODS_EVAL_DEV_ACPI_METHOD_2) +#define MODS_ESC_DEVICE_NUMA_INFO_2 \ + _IOWR(MODS_IOC_MAGIC, 70, struct MODS_DEVICE_NUMA_INFO_2) +#define MODS_ESC_ACPI_GET_DDC_2 \ + _IOWR(MODS_IOC_MAGIC, 71, struct MODS_ACPI_GET_DDC_2) +#define MODS_ESC_GET_SCREEN_INFO \ + _IOR(MODS_IOC_MAGIC, 72, struct MODS_SCREEN_INFO) +#define MODS_ESC_PCI_HOT_RESET \ + _IOW(MODS_IOC_MAGIC, 73, struct MODS_PCI_HOT_RESET) +#define MODS_ESC_SET_PPC_TCE_BYPASS \ + _IOWR(MODS_IOC_MAGIC, 74, struct MODS_SET_PPC_TCE_BYPASS) +#define MODS_ESC_DMA_MAP_MEMORY \ + _IOW(MODS_IOC_MAGIC, 75, struct MODS_DMA_MAP_MEMORY) +#define MODS_ESC_DMA_UNMAP_MEMORY \ + _IOW(MODS_IOC_MAGIC, 76, struct MODS_DMA_MAP_MEMORY) +/* Deprecated */ +#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS_2 \ + _IOWR(MODS_IOC_MAGIC, 77, \ + struct MODS_GET_PHYSICAL_ADDRESS_2) +/* Deprecated */ +#define MODS_ESC_PCI_MAP_RESOURCE \ + _IOWR(MODS_IOC_MAGIC, 78, struct MODS_PCI_MAP_RESOURCE) +/* Deprecated */ +#define MODS_ESC_PCI_UNMAP_RESOURCE \ + _IOW(MODS_IOC_MAGIC, 79, struct MODS_PCI_UNMAP_RESOURCE) +#define MODS_ESC_DMA_REQUEST_HANDLE \ + _IOR(MODS_IOC_MAGIC, 80, struct MODS_DMA_HANDLE) +#define MODS_ESC_DMA_RELEASE_HANDLE \ + _IOW(MODS_IOC_MAGIC, 81, struct MODS_DMA_HANDLE) +#define MODS_ESC_DMA_SET_CONFIG \ + _IOW(MODS_IOC_MAGIC, 82, struct MODS_DMA_CHANNEL_CONFIG) +#define MODS_ESC_DMA_TX_SUBMIT \ + _IOW(MODS_IOC_MAGIC, 83, struct MODS_DMA_TX_DESC) +#define MODS_ESC_DMA_TX_WAIT \ + _IOWR(MODS_IOC_MAGIC, 84, struct MODS_DMA_WAIT_DESC) +#define MODS_ESC_DMA_ISSUE_PENDING \ + _IOW(MODS_IOC_MAGIC, 85, struct MODS_DMA_HANDLE) +/* Deprecated */ +#define MODS_ESC_SET_IRQ_MULTIMASK \ + _IOW(MODS_IOC_MAGIC, 86, struct MODS_SET_IRQ_MULTIMASK) +#define MODS_ESC_NET_FORCE_LINK \ + _IOW(MODS_IOC_MAGIC, 87, struct MODS_NET_DEVICE_NAME) +#define MODS_ESC_REGISTER_IRQ_3 \ + _IOW(MODS_IOC_MAGIC, 88, struct MODS_REGISTER_IRQ_3) +#define MODS_ESC_DMA_ALLOC_COHERENT \ + _IOWR(MODS_IOC_MAGIC, 89, \ + struct MODS_DMA_COHERENT_MEM_HANDLE) +#define MODS_ESC_DMA_FREE_COHERENT \ + _IOWR(MODS_IOC_MAGIC, 90, \ + struct MODS_DMA_COHERENT_MEM_HANDLE) +#define MODS_ESC_DMA_COPY_TO_USER \ + _IOWR(MODS_IOC_MAGIC, 91, \ + struct MODS_DMA_COPY_TO_USER) +#define MODS_ESC_MAP_INTERRUPT \ + _IOWR(MODS_IOC_MAGIC, 92, \ + struct MODS_DT_INFO) +#define MODS_ESC_LOCK_CONSOLE \ + _IO(MODS_IOC_MAGIC, 93) +#define MODS_ESC_UNLOCK_CONSOLE \ + _IO(MODS_IOC_MAGIC, 94) +#define MODS_ESC_TEGRA_PROD_IS_SUPPORTED \ + _IOWR(MODS_IOC_MAGIC, 95, \ + struct MODS_TEGRA_PROD_IS_SUPPORTED) +#define MODS_ESC_TEGRA_PROD_SET_PROD_ALL \ + _IOW(MODS_IOC_MAGIC, 96, \ + struct MODS_TEGRA_PROD_SET_TUPLE) +#define MODS_ESC_TEGRA_PROD_SET_PROD_BOOT \ + _IOW(MODS_IOC_MAGIC, 97, \ + struct MODS_TEGRA_PROD_SET_TUPLE) +#define MODS_ESC_TEGRA_PROD_SET_PROD_BY_NAME \ + _IOW(MODS_IOC_MAGIC, 98, \ + struct MODS_TEGRA_PROD_SET_TUPLE) +#define MODS_ESC_TEGRA_PROD_SET_PROD_EXACT \ + _IOW(MODS_IOC_MAGIC, 99, \ + struct MODS_TEGRA_PROD_SET_TUPLE) +#define MODS_ESC_TEGRA_PROD_ITERATE_DT \ + _IOWR(MODS_IOC_MAGIC, 100, \ + struct MODS_TEGRA_PROD_ITERATOR) +#define MODS_ESC_GET_ATS_ADDRESS_RANGE \ + _IOWR(MODS_IOC_MAGIC, 101, \ + struct MODS_GET_ATS_ADDRESS_RANGE) +#define MODS_ESC_SET_NVLINK_SYSMEM_TRAINED \ + _IOW(MODS_IOC_MAGIC, 102, \ + struct MODS_SET_NVLINK_SYSMEM_TRAINED) +#define MODS_ESC_GET_NVLINK_LINE_RATE \ + _IOWR(MODS_IOC_MAGIC, 103, \ + struct MODS_GET_NVLINK_LINE_RATE) +#define MODS_ESC_SUSPEND_CONSOLE \ + _IO(MODS_IOC_MAGIC, 104) +#define MODS_ESC_RESUME_CONSOLE \ + _IO(MODS_IOC_MAGIC, 105) +#define MODS_ESC_GET_SCREEN_INFO_2 \ + _IOR(MODS_IOC_MAGIC, 106, struct MODS_SCREEN_INFO_2) +#define MODS_ESC_ACQUIRE_ACCESS_TOKEN \ + _IOR(MODS_IOC_MAGIC, 107, struct MODS_ACCESS_TOKEN) +#define MODS_ESC_RELEASE_ACCESS_TOKEN \ + _IOW(MODS_IOC_MAGIC, 108, struct MODS_ACCESS_TOKEN) +#define MODS_ESC_VERIFY_ACCESS_TOKEN \ + _IOW(MODS_IOC_MAGIC, 109, struct MODS_ACCESS_TOKEN) +#define MODS_ESC_GET_IOMMU_STATE \ + _IOWR(MODS_IOC_MAGIC, 110, struct MODS_GET_IOMMU_STATE) +#define MODS_ESC_WRITE_SYSFS_NODE \ + _IOW(MODS_IOC_MAGIC, 111, struct MODS_SYSFS_NODE) +#define MODS_ESC_GET_PHYSICAL_ADDRESS_2 \ + _IOWR(MODS_IOC_MAGIC, 112, \ + struct MODS_GET_PHYSICAL_ADDRESS_3) +#define MODS_ESC_GET_MAPPED_PHYSICAL_ADDRESS_3 \ + _IOWR(MODS_IOC_MAGIC, 113, \ + struct MODS_GET_PHYSICAL_ADDRESS_3) +#define MODS_ESC_REGISTER_IRQ_4 \ + _IOW(MODS_IOC_MAGIC, 114, struct MODS_REGISTER_IRQ_4) +#define MODS_ESC_QUERY_IRQ_3 \ + _IOR(MODS_IOC_MAGIC, 115, struct MODS_QUERY_IRQ_3) +#define MODS_ESC_SET_NUM_VF \ + _IOW(MODS_IOC_MAGIC, 116, struct MODS_SET_NUM_VF) +#define MODS_ESC_SET_TOTAL_VF \ + _IOW(MODS_IOC_MAGIC, 117, struct MODS_SET_NUM_VF) +#define MODS_ESC_PCI_SET_DMA_MASK \ + _IOW(MODS_IOC_MAGIC, 118, struct MODS_PCI_DMA_MASK) +#define MODS_ESC_GET_IOMMU_STATE_2 \ + _IOWR(MODS_IOC_MAGIC, 119, struct MODS_GET_IOMMU_STATE) +#define MODS_ESC_READ_MSR \ + _IOWR(MODS_IOC_MAGIC, 120, struct MODS_MSR) +#define MODS_ESC_WRITE_MSR \ + _IOW(MODS_IOC_MAGIC, 121, struct MODS_MSR) +#define MODS_ESC_EVAL_DEV_ACPI_METHOD_3 \ + _IOWR_BAD(MODS_IOC_MAGIC, 122,\ + struct MODS_EVAL_DEV_ACPI_METHOD_3) +#define MODS_ESC_PCI_BUS_REMOVE_DEV\ + _IOW(MODS_IOC_MAGIC, 123, struct MODS_PCI_BUS_REMOVE_DEV) +#define MODS_ESC_ALLOC_PAGES_2 \ + _IOWR(MODS_IOC_MAGIC, 124, struct MODS_ALLOC_PAGES_2) +#define MODS_ESC_MERGE_PAGES \ + _IOWR(MODS_IOC_MAGIC, 125, struct MODS_MERGE_PAGES) +#define MODS_ESC_DEVICE_NUMA_INFO_3 \ + _IOWR(MODS_IOC_MAGIC, 126, struct MODS_DEVICE_NUMA_INFO_3) +#define MODS_ESC_PCI_BUS_RESCAN \ + _IOW(MODS_IOC_MAGIC, 127, struct MODS_PCI_BUS_RESCAN) +#define MODS_ESC_MAP_GPIO \ + _IOWR(MODS_IOC_MAGIC, 128, \ + struct MODS_GPIO_INFO) + +#endif /* _MODS_H_ */