2002-09-29 09:21:29

by Sipos Ferenc

[permalink] [raw]
Subject: offtopic: patch for nvidia drivers

Hi!

Could anybody send me a nvidia 3123 driver patch for 2.5.39? I would
like to test the kernel. Thx.

Paco



2002-09-29 09:43:10

by Roberto Nibali

[permalink] [raw]
Subject: Re: offtopic: patch for nvidia drivers

diff -ur NVIDIA_kernel-1.0-3123/nv-linux.h NVIDIA_kernel-1.0-3123-2.5.35/nv-linux.h
--- NVIDIA_kernel-1.0-3123/nv-linux.h Wed Aug 28 01:36:53 2002
+++ NVIDIA_kernel-1.0-3123-2.5.35/nv-linux.h Tue Sep 17 23:26:14 2002
@@ -36,11 +36,6 @@
# error This driver does not support 2.3.x development kernels!
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
# define KERNEL_2_4
-#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
-# error This driver does not support 2.5.x development kernels!
-# define KERNEL_2_5
-#else
-# error This driver does not support 2.6.x or newer kernels!
#endif

#if defined (CONFIG_SMP) && !defined (__SMP__)
diff -ur NVIDIA_kernel-1.0-3123/nv.c NVIDIA_kernel-1.0-3123-2.5.35/nv.c
--- NVIDIA_kernel-1.0-3123/nv.c Wed Aug 28 01:36:52 2002
+++ NVIDIA_kernel-1.0-3123-2.5.35/nv.c Tue Sep 17 23:26:14 2002
@@ -1068,11 +1068,22 @@

/* for control device, just jump to its open routine */
/* after setting up the private data */
+
+ /* I don't really know the correct kernel version since when it changed */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
if (NV_DEVICE_IS_CONTROL_DEVICE(inode->i_rdev))
return nv_kern_ctl_open(inode, file);
-
+#else
+ if (NV_DEVICE_IS_CONTROL_DEVICE(kdev_val(inode->i_rdev)))
+ return nv_kern_ctl_open(inode, file);
+#endif
/* what device are we talking about? */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
devnum = NV_DEVICE_NUMBER(inode->i_rdev);
+#else
+ devnum = NV_DEVICE_NUMBER(kdev_val(inode->i_rdev));
+#endif
if (devnum >= NV_MAX_DEVICES)
{
rc = -ENODEV;
@@ -1178,9 +1189,14 @@

/* for control device, just jump to its open routine */
/* after setting up the private data */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
if (NV_DEVICE_IS_CONTROL_DEVICE(inode->i_rdev))
+ return nv_kern_ctl_close(inode, file);
+#else
+ if(NV_DEVICE_IS_CONTROL_DEVICE(kdev_val(inode->i_rdev)))
return nv_kern_ctl_close(inode, file);
-
+#endif
NV_DMSG(nv, "close");

rm_free_unused_clients(nv, current->pid, (void *) file);
@@ -1299,11 +1315,21 @@
#if defined(NVCPU_IA64)
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
if (remap_page_range(vma->vm_start,
(u32)(nv->regs.address) + LINUX_VMA_OFFS(vma) - NV_MMAP_REG_OFFSET,
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
+#else
+ if (remap_page_range(vma,
+ vma->vm_start,
+ (u32) (nv->regs.address) + LINUX_VMA_OFFS(vma) - NV_MMAP_REG_OFFSET,
+ vma->vm_end - vma->vm_start,
+ vma->vm_page_prot))
+ return -EAGAIN;
+#endif

/* mark it as IO so that we don't dump it on core dump */
vma->vm_flags |= VM_IO;
@@ -1316,11 +1342,20 @@
#if defined(NVCPU_IA64)
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
if (remap_page_range(vma->vm_start,
(u32)(nv->fb.address) + LINUX_VMA_OFFS(vma) - NV_MMAP_FB_OFFSET,
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
+#else
+ if (remap_page_range(vma,
+ vma->vm_start,
+ (u32) (nv->fb.address) + LINUX_VMA_OFFS(vma) - NV_MMAP_FB_OFFSET,
+ vma->vm_end - vma->vm_start,
+ vma->vm_page_prot))
+ return -EAGAIN;
+#endif

// mark it as IO so that we don't dump it on core dump
vma->vm_flags |= VM_IO;
@@ -1350,8 +1385,13 @@
while (pages--)
{
page = (unsigned long) at->page_table[i++];
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
if (remap_page_range(start, page, PAGE_SIZE, PAGE_SHARED))
return -EAGAIN;
+#else
+ if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
+ return -EAGAIN;
+#endif
start += PAGE_SIZE;
pos += PAGE_SIZE;
}
@@ -2179,7 +2219,11 @@
pte_kunmap(pte__);
#else
pte__ = NULL;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
pte = *pte_offset(pg_mid_dir, address);
+#else
+ pte = *pte_offset_map(pg_mid_dir, address);
+#endif
#endif

if (!pte_present(pte))
diff -ur NVIDIA_kernel-1.0-3123/os-interface.c NVIDIA_kernel-1.0-3123-2.5.35/os-interface.c
--- NVIDIA_kernel-1.0-3123/os-interface.c Wed Aug 28 01:36:52 2002
+++ NVIDIA_kernel-1.0-3123-2.5.35/os-interface.c Tue Sep 17 23:29:31 2002
@@ -27,7 +27,10 @@

BOOL os_is_administrator(PHWINFO pDev)
{
- return suser();
+ /* Actually suser() wasn't really a bool, but since the
+ nvidia guys want it as a bool, let's give them a bool.
+ */
+ return (!capable(CAP_SYS_ADMIN)?1:0);
}

U032 os_get_page_size(VOID)
@@ -1141,9 +1144,14 @@
uaddr = *priv;

/* finally, let's do it! */
- err = remap_page_range( (size_t) uaddr, (size_t) paddr, size_bytes,
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
+ err = remap_page_range( (size_t) uaddr, (size_t) paddr, size_bytes,
+ PAGE_SHARED);
+#else
+ err = remap_page_range( kaddr, (size_t) uaddr, (size_t) paddr, size_bytes,
PAGE_SHARED);
-
+#endif
if (err != 0)
{
return (void *) NULL;
@@ -1176,10 +1184,14 @@

uaddr = *priv;

- /* finally, let's do it! */
- err = remap_page_range( (size_t) uaddr, (size_t) start, size_bytes,
+ /* finally, let's do it! */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
+ err = remap_page_rage( (size_t) uaddr, (size_t) start, size_bytes,
+ PAGE_SHARED);
+#else
+ err = remap_page_range( *priv, (size_t) uaddr, (size_t) start, size_bytes,
PAGE_SHARED);
-
+#endif
if (err != 0)
{
return (void *) NULL;
@@ -1593,7 +1605,8 @@

agp_addr = agpinfo.aper_base + (agp_data->offset << PAGE_SHIFT);

- err = remap_page_range(vma->vm_start, (size_t) agp_addr,
+ err = remap_page_range(vma,
+ vma->vm_start, (size_t) agp_addr,
agp_data->num_pages << PAGE_SHIFT,
#if defined(NVCPU_IA64)
vma->vm_page_prot);


Attachments:
patch.nvidia_3123-2.5.35-bk3-ratz-1.diff (6.44 kB)

2002-10-05 16:20:10

by Stan Bubrouski

[permalink] [raw]
Subject: Re: offtopic: patch for nvidia drivers

Roberto Nibali wrote:
...
> - /* finally, let's do it! */
> - err = remap_page_range( (size_t) uaddr, (size_t) start, size_bytes,
> + /* finally, let's do it! */
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
> + err = remap_page_rage( (size_t) uaddr, (size_t) start, size_bytes,
> + PAGE_SHARED);
> +#else

That remap_page_rage should be remap_page_range as noted in a
previous thread. Just a reminder.

-Stan