summarylogtreecommitdiffstats
path: root/0011-kernel-6.0.patch
diff options
context:
space:
mode:
authorJerry2022-10-13 11:35:20 +0800
committerJerry2022-10-14 10:32:48 +0800
commitfe2b38e66f2199777bcede6eb35c5df0210f15dc (patch)
tree84d7ea8f3c2299f1acd9b48fe6cac43f4c573632 /0011-kernel-6.0.patch
parent25b93f5a3d8d951c4ccbbb9efb9d81e9be42fd51 (diff)
downloadaur-fe2b38e66f2199777bcede6eb35c5df0210f15dc.tar.gz
update for kernel 6.0
Diffstat (limited to '0011-kernel-6.0.patch')
-rw-r--r--0011-kernel-6.0.patch151
1 files changed, 151 insertions, 0 deletions
diff --git a/0011-kernel-6.0.patch b/0011-kernel-6.0.patch
new file mode 100644
index 000000000000..2b9df3b60265
--- /dev/null
+++ b/0011-kernel-6.0.patch
@@ -0,0 +1,151 @@
+diff -Naur a/kernel/nv-acpi.c b/kernel/nv-acpi.c
+--- a/kernel/nv-acpi.c 2022-10-14 02:26:04.379601051 +0000
++++ b/kernel/nv-acpi.c 2022-10-14 02:28:07.309332369 +0000
+@@ -178,6 +178,53 @@
+ return 0;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
++static struct nv_acpi_add_enumerated_data {
++ nv_acpi_t *object;
++ int *counter;
++};
++static int nv_acpi_add_enumerated(struct acpi_device *dev, void *data)
++{
++ struct nv_acpi_add_enumerated_data *rcvd_data = data;
++ nv_acpi_t *pNvAcpiObject = rcvd_data->object;
++ int *device_counter = rcvd_data->counter;
++ acpi_status status = -1;
++ nv_acpi_integer_t device_id = 0;
++ if (!dev)
++ return 0;
++ if (*device_counter == NV_MAXNUM_DISPLAY_DEVICES) {
++ nv_printf(NV_DBG_ERRORS,
++ "NVRM: nv_acpi_add: Total number of devices cannot exceed %d\n",
++ NV_MAXNUM_DISPLAY_DEVICES);
++ return 1;
++ }
++ status =
++ acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
++ if (ACPI_FAILURE(status))
++ /* Couldnt query device_id for this device */
++ return 0;
++
++ device_id = (device_id & 0xffff);
++
++ if ((device_id != 0x100) && /* Not a known CRT device-id */
++ (device_id != 0x200) && /* Not a known TV device-id */
++ (device_id != 0x0110) && (device_id != 0x0118) && (device_id != 0x0400) && /* Not an LCD*/
++ (device_id != 0x0111) && (device_id != 0x0120) && (device_id != 0x0300)) /* Not a known DVI device-id */
++ {
++ /* This isnt a known device Id.
++ Do default switching on this system. */
++ pNvAcpiObject->default_display_mask = 1;
++ return 1;
++ }
++
++ pNvAcpiObject->pNvVideo[*device_counter].dev_id = device_id;
++ pNvAcpiObject->pNvVideo[*device_counter].dev_handle = dev->handle;
++
++ (*device_counter)++;
++ return 0;
++}
++#endif
++
+ static int nv_acpi_add(struct acpi_device *device)
+ {
+ /*
+@@ -190,8 +237,10 @@
+ union acpi_object control_argument_0 = { ACPI_TYPE_INTEGER };
+ struct acpi_object_list control_argument_list = { 0, NULL };
+ nv_stack_t *sp = NULL;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
+ struct list_head *node, *next;
+ nv_acpi_integer_t device_id = 0;
++#endif
+ int device_counter = 0;
+
+ NV_KMEM_CACHE_ALLOC_STACK(sp);
+@@ -220,6 +269,7 @@
+
+ // grab handles to all the important nodes representing devices
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
+ list_for_each_safe(node, next, &device->children)
+ {
+ struct acpi_device *dev =
+@@ -261,6 +311,13 @@
+ device_counter++;
+
+ }
++#else
++ struct nv_acpi_add_enumerated_data data = {
++ .object = pNvAcpiObject,
++ .counter = &device_counter,
++ };
++ acpi_dev_for_each_child(device, nv_acpi_add_enumerated, &data);
++#endif
+
+ // arg 0, bits 1:0, 0 = enable events
+ control_argument_0.integer.type = ACPI_TYPE_INTEGER;
+@@ -1192,6 +1249,31 @@
+ return status;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
++static int nv_acpi_ddc_method_enumerated(struct acpi_device *dev, void *data)
++{
++ acpi_handle *lcd_dev_handle = data;
++ acpi_status status;
++ nv_acpi_integer_t device_id = 0;
++ if (!dev)
++ return 0;
++ status = acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
++ if (ACPI_FAILURE(status))
++ /* Couldnt query device_id for this device */
++ return 0;
++
++ device_id = (device_id & 0xffff);
++
++ if ((device_id == 0x0110) || (device_id == 0x0118) || (device_id == 0x0400)) /* Only for an LCD*/
++ {
++ *lcd_dev_handle = dev->handle;
++ nv_printf(NV_DBG_INFO, "NVRM: %s Found LCD: %x\n", __FUNCTION__, device_id);
++ return 1;
++ }
++ return 0;
++}
++#endif
++
+ /*
+ * This function executes a _DDC ACPI method.
+ */
+@@ -1207,8 +1289,10 @@
+ union acpi_object *ddc;
+ union acpi_object ddc_arg0 = { ACPI_TYPE_INTEGER };
+ struct acpi_object_list input = { 1, &ddc_arg0 };
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
+ struct list_head *node, *next;
+ nv_acpi_integer_t device_id = 0;
++#endif
+ NvU32 i;
+ acpi_handle dev_handle = NULL;
+ acpi_handle lcd_dev_handle = NULL;
+@@ -1239,6 +1323,7 @@
+ return RM_ERR_NOT_SUPPORTED;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
+ list_for_each_safe(node, next, &device->children)
+ {
+ struct acpi_device *dev =
+@@ -1262,6 +1347,9 @@
+ }
+
+ }
++#else
++ acpi_dev_for_each_child(device, nv_acpi_ddc_method_enumerated, &lcd_dev_handle);
++#endif
+
+ if (lcd_dev_handle == NULL)
+ {