1
0
mirror of https://github.com/gryf/gryf-overlay.git synced 2025-12-19 20:38:05 +01:00
Files
gryf-overlay/x11-drivers/ati-drivers/files/0004-Linux-2.6.26.x-kernels-firegl_public.c.patch
2010-03-27 13:22:52 +01:00

1727 lines
54 KiB
Diff

--- common/lib/modules/fglrx/build_mod/firegl_public.c
+++ common/lib/modules/fglrx/build_mod/firegl_public.c
@@ -24,13 +24,13 @@
// ============================================================
#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
#error Kernel versions older than 2.6.0 are no longer supported by this module.
-#endif
+#endif
#include <linux/autoconf.h>
-#if !defined(CONFIG_X86_PC)
+#if !defined(CONFIG_X86_PC)
#if !defined(CONFIG_X86_64)
#if !defined(CONFIG_X86_VOYAGER)
#if !defined(CONFIG_X86_NUMAQ)
@@ -62,10 +62,10 @@
* distribution would even include such a kernel patch. */
#ifdef CONFIG_MEM_MIRROR
/* Prevent asm/mm_track.h from being included in subsequent
- * kernel headers as that would redefine CONFIG_MEM_MIRROR. */
+ * kernel headers as that would redefine CONFIG_MEM_MIRROR. */
#ifndef CONFIG_X86_64
#define __I386_MMTRACK_H__
-#define mm_track(ptep)
+#define mm_track(ptep)
#else
#define __X86_64_MMTRACK_H__
#define mm_track_pte(ptep)
@@ -93,7 +93,7 @@
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
-#include <linux/init.h>
+//#include <linux/init.h>
#include <linux/file.h>
#include <linux/pci.h>
#include <linux/wait.h>
@@ -151,8 +151,8 @@
#include "linux/freezer.h"
#endif
-// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h.
-#ifndef UTS_RELEASE
+// For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h.
+#ifndef UTS_RELEASE
#include <linux/utsrelease.h>
#endif
@@ -210,7 +210,7 @@ char* firegl = NULL;
int __ke_debuglevel = 0;
int __ke_moduleflags = 0;
-static struct pci_device_id fglrx_pci_table[] =
+static struct pci_device_id fglrx_pci_table[] =
{
#define FGL_ASIC_ID(x) \
{ \
@@ -278,7 +278,7 @@ const unsigned long __ke_PAE_State = 1;
static int firegl_pat_enabled = 0;
static unsigned long KCL_pat[2];
-static unsigned long KCL_orig_pat[2];
+static unsigned long KCL_orig_pat[2];
static int ATI_API_CALL KCL_enable_pat(void);
static void ATI_API_CALL KCL_disable_pat(void);
@@ -305,7 +305,7 @@ long ip_firegl_compat_ioctl(struct file* filp, unsigned int cmd, unsigned long a
#endif
__ke_ssize_t ip_firegl_read( struct file *filp,
- char *buf,
+ char *buf,
__ke_size_t size,
__ke_loff_t *off_ptr)
{
@@ -313,7 +313,7 @@ __ke_ssize_t ip_firegl_read( struct file *filp,
}
__ke_ssize_t ip_firegl_write( struct file *filp,
- const char *buf,
+ const char *buf,
__ke_size_t size,
__ke_loff_t *off_ptr)
{
@@ -449,34 +449,34 @@ READ_PROC_WRAP(firegl_debug_info)
READ_PROC_WRAP(firegl_bios_version)
READ_PROC_WRAP(firegl_interrupt_info)
-static int
+static int
firegl_interrupt_open_wrap(
- struct inode *inode,
- struct file *file)
+ struct inode *inode,
+ struct file *file)
{
return firegl_interrupt_open(inode, file);
}
-static int
+static int
firegl_interrupt_release_wrap(
- struct inode *inode,
- struct file *file)
+ struct inode *inode,
+ struct file *file)
{
return firegl_interrupt_release(inode, file);
}
-static ssize_t
+static ssize_t
firegl_interrupt_read_wrap(
- struct file *user_file,
- char __user *user_buf,
- size_t user_buf_size,
+ struct file *user_file,
+ char __user *user_buf,
+ size_t user_buf_size,
loff_t *user_file_pos)
{
return (ssize_t) firegl_interrupt_read(user_file, user_buf, user_buf_size, user_file_pos);
}
-static unsigned int
-firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt)
+static unsigned int
+firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt)
{
if(firegl_interrupt_poll(user_file, (__ke_poll_table*)pt))
{
@@ -488,11 +488,11 @@ firegl_interrupt_poll_wrap(struct file *user_file, poll_table *pt)
}
}
-static ssize_t
+static ssize_t
firegl_interrupt_write_wrap(
- struct file *user_file,
- const char __user *user_buf,
- size_t user_buf_size,
+ struct file *user_file,
+ const char __user *user_buf,
+ size_t user_buf_size,
loff_t *user_file_pos)
{
return (ssize_t) firegl_interrupt_write(user_file, user_buf, user_buf_size, user_file_pos);
@@ -502,7 +502,7 @@ firegl_interrupt_write_wrap(
* \param func function to be wrapped
* \return None */
-static void
+static void
firegl_smp_func_parameter_wrap(
void *func)
{
@@ -517,7 +517,7 @@ static struct file_operations firegl_interrupt_file_ops = {
.write = firegl_interrupt_write_wrap
};
-__ke_proc_list_t firegl_proc_list[] =
+__ke_proc_list_t firegl_proc_list[] =
{
{ "name", drm_name_info_wrap, NULL},
{ "mem", drm_mem_info_wrap, NULL},
@@ -586,11 +586,11 @@ static struct proc_dir_entry *firegl_proc_init( device_t *dev,
{
ent->proc_fops = (struct file_operations*)list->fops;
}
-
+
{
ent->data = (dev->pubdev.signature == FGL_DEVICE_SIGNATURE)? firegl_find_device(minor) : (dev);
}
-
+
list++;
}
@@ -623,7 +623,7 @@ static int firegl_proc_cleanup( int minor,
{
remove_proc_entry("dri", NULL);
__KE_DEBUG("remove proc dri. \n");
- }
+ }
return 0;
}
@@ -661,12 +661,12 @@ static int firegl_stub_getminor(const char *name, struct file_operations *fops,
{
int i;
int count = 0;
-
+
__KE_DEBUG("firegl_stub_getminor: name=\"%s\"\n", name);
- for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ )
+ for( i = 0; i < FIREGL_STUB_MAXCARDS; i++ )
{
- if( !firegl_stub_list[i].fops )
+ if( !firegl_stub_list[i].fops )
{
firegl_stub_list[i].name = name;
firegl_stub_list[i].fops = fops;
@@ -693,16 +693,16 @@ static int firegl_stub_putminor(int minor)
if (minor < 0 || minor >= FIREGL_STUB_MAXCARDS)
{
return -1;
- }
+ }
firegl_proc_cleanup(minor, firegl_stub_root, firegl_stub_list[minor].dev_root, firegl_stub_list[minor].proclist);
firegl_stub_list[minor].name = NULL;
firegl_stub_list[minor].fops = NULL;
firegl_stub_list[minor].proclist = NULL;
- if( minor == (firegl_minors-1) )
+ if( minor == (firegl_minors-1) )
{
unregister_chrdev(DRM_MAJOR, "drm");
- }
+ }
return 0;
}
@@ -726,7 +726,7 @@ static int __init firegl_stub_register(const char *name, struct file_operations
return -1;
} else if(err == -EBUSY) {
- // the registering of the module's device has failed
+ // the registering of the module's device has failed
// because there was already some other drm module loaded.
__KE_DEBUG("register_chrdev() failed with -EBUSY\n");
return -1;
@@ -758,7 +758,7 @@ static int fglrx_pci_probe(struct pci_dev *dev, const struct pci_device_id *id_t
/* Starting from 2.6.14, kernel has new struct defined for pm_message_t,
we have to handle this case separately.
2.6.11/12/13 kernels have pm_message_t defined as int and older kernels
- don't have pm_message_t defined.
+ don't have pm_message_t defined.
*/
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
static int fglrx_pci_suspend(struct pci_dev *pdev, pm_message_t pm_event)
@@ -794,9 +794,9 @@ static int fglrx_pci_suspend(struct pci_dev *pdev, u32 pm_event)
if (!ret)
{
-
- // since privdev->pcidev is acquired in X server, use pdev
- // directly here to allow suspend/resume without X server start.
+
+ // since privdev->pcidev is acquired in X server, use pdev
+ // directly here to allow suspend/resume without X server start.
firegl_pci_save_state((__ke_pci_dev_t*)pdev, privdev);
pci_disable_device(pdev);
PMSG_EVENT(pdev->dev.power.power_state) = state;
@@ -848,13 +848,13 @@ static int fglrx_pci_resume(struct pci_dev *pdev)
// before pci_set_master!
firegl_pci_restore_state((__ke_pci_dev_t*)pdev, privdev);
- if (pci_enable_device(pdev))
+ if (pci_enable_device(pdev))
{
__KE_ERROR("Cannot enable PCI device.\n");
- }
+ }
pci_set_master(pdev);
-
+
firegl_cail_powerup(privdev);
if (PMSG_EVENT(pdev->dev.power.power_state) == PM_EVENT_SUSPEND)
@@ -865,7 +865,7 @@ static int fglrx_pci_resume(struct pci_dev *pdev)
return 0;
}
-static struct pci_driver fglrx_pci_driver =
+static struct pci_driver fglrx_pci_driver =
{
.name = "fglrx_pci",
.id_table = fglrx_pci_table,
@@ -921,10 +921,10 @@ static int firegl_init_devices(__ke_device_t *pubdev)
{
pid = (struct pci_device_id *) &fglrx_pci_table[i];
pdev = NULL;
- while (( pdev = pci_get_subsys(pid->vendor,
- pid->device,
- PCI_ANY_ID,
- PCI_ANY_ID,
+ while (( pdev = pci_get_subsys(pid->vendor,
+ pid->device,
+ PCI_ANY_ID,
+ PCI_ANY_ID,
pdev)) != NULL)
{
num_of_devices++;
@@ -934,7 +934,7 @@ static int firegl_init_devices(__ke_device_t *pubdev)
if (firegl_init_device_heads(num_of_devices))
{
- return -ENOMEM;
+ return -ENOMEM;
}
for (i=0; fglrx_pci_table[i].vendor != 0; i++)
@@ -942,15 +942,15 @@ static int firegl_init_devices(__ke_device_t *pubdev)
pid = (struct pci_device_id *) &fglrx_pci_table[i];
pdev = NULL;
- while (( pdev = pci_get_subsys(pid->vendor,
- pid->device,
- PCI_ANY_ID,
- PCI_ANY_ID,
+ while (( pdev = pci_get_subsys(pid->vendor,
+ pid->device,
+ PCI_ANY_ID,
+ PCI_ANY_ID,
pdev)) != NULL)
{
if ((ret_code = firegl_get_dev(pubdev, pdev)))
{
- return ret_code;
+ return ret_code;
}
j++;
@@ -983,7 +983,7 @@ static int __init firegl_init_module(void)
// init global vars that are in fact constants
__ke_HZ = HZ;
-#ifdef _KE_SERIAL_DEBUG
+#ifdef _KE_SERIAL_DEBUG
__ke_SetSerialPort();
#endif
@@ -995,11 +995,11 @@ static int __init firegl_init_module(void)
return retcode;
}
-#ifdef FIREGL_CF_SUPPORT
+#ifdef FIREGL_CF_SUPPORT
adapter_chain_init();
cf_object_init();
-#endif
-
+#endif
+
// init DRM proc list
drm_proclist = kmalloc((DRM_PROC_ENTRIES + 1) * sizeof(__ke_proc_list_t), GFP_KERNEL);
if ( drm_proclist == NULL )
@@ -1087,7 +1087,7 @@ static int __init firegl_init_module(void)
dev->pubdev.date,
firegl_minors);
-
+
#ifdef FIREGL_POWER_MANAGEMENT
if (pci_register_driver (&fglrx_pci_driver) < 0)
{
@@ -1117,12 +1117,12 @@ static void __exit firegl_cleanup_module(void)
{
KCL_disable_pat();
__KE_INFO("Disable PAT\n");
- }
+ }
#endif // FIREGL_USWC_SUPPORT
for (i = 0; i < count; i++)
{
- if ( firegl_stub_unregister(i) )
+ if ( firegl_stub_unregister(i) )
{
__KE_ERROR("Cannot unload module on minor: %d\n", i);
}
@@ -1144,10 +1144,10 @@ static void __exit firegl_cleanup_module(void)
dev->pubdev.patchlevel,
dev->pubdev.date);
-#ifdef FIREGL_CF_SUPPORT
+#ifdef FIREGL_CF_SUPPORT
cf_object_cleanup();
- adapter_chain_cleanup();
-#endif // FIREGL_CF_SUPPORT
+ adapter_chain_cleanup();
+#endif // FIREGL_CF_SUPPORT
firegl_private_cleanup (&dev->pubdev);
@@ -1225,18 +1225,18 @@ void ATI_API_CALL __ke_add_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_w
void ATI_API_CALL __ke_remove_wait_queue(__ke_wait_queue_head_t* queue_head, __ke_wait_queue_t* entry)
{
// current->state = TASK_RUNNING;
- remove_wait_queue((wait_queue_head_t*)(void *)queue_head,
+ remove_wait_queue((wait_queue_head_t*)(void *)queue_head,
(wait_queue_t*)(void *)entry);
}
void ATI_API_CALL __ke_init_waitqueue_head(__ke_wait_queue_head_t* queue_head)
{
- init_waitqueue_head((wait_queue_head_t*)(void *)queue_head);
+ init_waitqueue_head((wait_queue_head_t*)(void *)queue_head);
}
void ATI_API_CALL __ke_wait_event_interruptible(__ke_wait_queue_head_t* queue_head, int condition)
{
- wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition);
+ wait_event_interruptible(*((wait_queue_head_t*)(void *)queue_head), condition);
}
void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queue_head, __ke_poll_table* pt)
@@ -1247,13 +1247,13 @@ void ATI_API_CALL __ke_poll_wait(struct file* filp, __ke_wait_queue_head_t* queu
void ATI_API_CALL *__ke_asyncio_alloc_sema()
{
int i;
-
+
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++)
{
if(fireglAsyncioSemaphoreUsed[i] != 1)
{
fireglAsyncioSemaphoreUsed[i] = 1;
-
+
return &(fireglAsyncioSemaphore[i]);
}
}
@@ -1263,7 +1263,7 @@ void ATI_API_CALL *__ke_asyncio_alloc_sema()
void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema)
{
int i;
-
+
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++)
{
if( &(fireglAsyncioSemaphore[i]) == pSema )
@@ -1277,15 +1277,15 @@ void ATI_API_CALL __ke_asyncio_free_sema(struct semaphore *pSema)
void ATI_API_CALL __ke_asyncio_init_sema(void)
{
int i;
-
+
for(i=0; i<FIREGL_ASYNCIO_MAX_SEMA; i++)
{
fireglAsyncioSemaphoreUsed[i] = 0;
}
-}
+}
-int ATI_API_CALL __ke_fasync_helper( int fd,
- struct file *filep,
+int ATI_API_CALL __ke_fasync_helper( int fd,
+ struct file *filep,
int mode,
struct fasync_struct **pasync_queue)
{
@@ -1352,33 +1352,33 @@ unsigned int ATI_API_CALL KCL_ProcessIsTerminated(unsigned int pid)
{
struct task_struct *p;
int process_terminated = 1;
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
rcu_read_lock();
-#else
+#else
read_lock(&tasklist_lock);
-#endif
- p = find_task_by_pid( pid );
- if (p)
+#endif
+ p = find_task_by_vpid( pid );
+ if (p)
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
- if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD)
+ if (p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD)
#else
- if (!(p->flags & PF_EXITING))
+ if (!(p->flags & PF_EXITING))
#endif
{
process_terminated = 0;
}
- }
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
+ }
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
rcu_read_unlock();
-#else
+#else
read_unlock(&tasklist_lock);
-#endif
+#endif
return process_terminated;
}
-/** /brief Call global OS kernel task/thread scheduler
+/** /brief Call global OS kernel task/thread scheduler
* /return Nonzero if a system call was awakened by a signal
*/
int ATI_API_CALL KCL_GetSignalStatus(void)
@@ -1432,15 +1432,15 @@ void ATI_API_CALL __ke_unblock_all_signals(void)
unblock_all_signals();
}
-#if defined(__i386__)
+#if defined(__i386__)
#ifndef __HAVE_ARCH_CMPXCHG
-static inline
-unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old,
- unsigned long new, int size)
-{
- unsigned long prev;
- switch (size) {
- case 1:
+static inline
+unsigned long __fgl_cmpxchg(volatile void *ptr, unsigned long old,
+ unsigned long new, int size)
+{
+ unsigned long prev;
+ switch (size) {
+ case 1:
__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
@@ -1551,7 +1551,7 @@ struct inode* ATI_API_CALL __ke_get_file_inode(struct file* filp)
*/
KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void)
{
- return current->pid;
+ return current->pid;
}
/** /brief Return the current Thread Group ID
@@ -1559,7 +1559,7 @@ KCL_TYPE_Pid ATI_API_CALL KCL_GetPid(void)
*/
KCL_TYPE_Pid ATI_API_CALL KCL_GetTgid(void)
{
- return current->tgid;
+ return current->tgid;
}
/** /brief Return the effective user ID
@@ -1655,7 +1655,7 @@ static int KCL_MAP_KernelConfigParam[] =
1
#else
0
-#endif
+#endif
};
/** /brief Check whether a kernel configuration parameter is defined
@@ -1718,13 +1718,13 @@ unsigned long ATI_API_CALL __ke_get_resource_start(__ke_pci_dev_t *dev, unsigned
#if defined(__x86_64__) || defined(__ia64__)
void* ATI_API_CALL __ke_pci_alloc_consistent(__ke_pci_dev_t* dev, int size, void *dma_handle)
{
- return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle));
+ return (pci_alloc_consistent( (struct pci_dev*)(void *)dev, size, dma_handle));
}
void ATI_API_CALL __ke_pci_free_consistent(__ke_pci_dev_t* dev, int size, unsigned long cpu_addr,
unsigned int dma_handle)
{
- pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr,
+ pci_free_consistent( (struct pci_dev*)(void *)dev, size, (void *)cpu_addr,
(unsigned long)dma_handle);
}
#endif // __ia64__
@@ -1748,7 +1748,7 @@ static int KCL_MAP_ErrorCode[] =
/** \brief This function maps OS independent error conditions to OS defined error codes
* \param errcode OS independent error condition code
- * \return OS kernel defined error code corresponding to the requested error condition
+ * \return OS kernel defined error code corresponding to the requested error condition
*/
int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode)
{
@@ -1766,7 +1766,7 @@ int ATI_API_CALL KCL_GetErrorCode(KCL_ENUM_ErrorCode errcode)
int ATI_API_CALL firegl_get_user_ptr(u32 *src, void **dst)
{
unsigned long temp;
- int err = get_user(temp, src);
+ int err = get_user(temp, src);
*dst = (void*) temp;
return err;
}
@@ -1906,7 +1906,7 @@ void ATI_API_CALL __ke_atomic_set(void* v, int val)
int ATI_API_CALL __ke_atomic_dec_and_test(void* v)
{
- return atomic_dec_and_test((atomic_t*)v);
+ return atomic_dec_and_test((atomic_t*)v);
}
/*****************************************************************************/
@@ -2006,19 +2006,19 @@ void ATI_API_CALL __ke_print_debug(const char* fmt, ...)
#endif
#ifdef _KE_SERIAL_DEBUG
-// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file.
-// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine.
-// It's useful to debug resume if network not works properly and serial port is not recovered
+// To enable serial port debug message dumping,just define _KE_SERIAL_DEBUG in firegl_public.h file.
+// Connect two PC with a null modern serial cable. run Hyper ternimal on the remote machine.
+// It's useful to debug resume if network not works properly and serial port is not recovered
// properly when fglrx resume hook is called...
-
-
+
+
#define SER_DATA_PORT 0x3f8
#define SER_INT_CTRL_PORT SER_DATA_PORT + 1
#define SER_INT_STAT_PORT SER_DATA_PORT + 2
#define SER_LINE_CTRL_PORT SER_DATA_PORT + 3
#define SER_MODEM_CTRL_PORT SER_DATA_PORT + 4
#define SER_LINE_STAT_PORT SER_DATA_PORT + 5
-
+
void ATI_API_CALL __ke_printc(char c)
{
while((inb(SER_LINE_STAT_PORT) & 0x20) == 0 ); //wait until Transmitter Holding Register Empty
@@ -2028,7 +2028,7 @@ void ATI_API_CALL __ke_printc(char c)
void ATI_API_CALL __ke_printstr(const char *str)
{
int len = strlen(str);
- while(len--)__ke_printc(*str++);
+ while(len--)__ke_printc(*str++);
}
int ATI_API_CALL __ke_SerPrint(const char *format, ...)
@@ -2041,26 +2041,26 @@ int ATI_API_CALL __ke_SerPrint(const char *format, ...)
vsprintf(buffer, format, ap);
va_end(ap);
-
+
__ke_printstr(buffer);
-
+
return 0;
}
void ATI_API_CALL __ke_SetSerialPort()
{
DRM_INFO("setup serial port\n");
- outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts
-
- outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON
- outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte
- // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS
- outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte
- outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit
- outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register
+ outb(0x00, SER_INT_CTRL_PORT); // Turn off interrupts
+
+ outb(0x80, SER_LINE_CTRL_PORT); // SET DLAB ON
+ outb(0x01, SER_DATA_PORT); // Set Baud rate - Divisor Latch Low Byte
+ // 0x01 = 115,200 ,0x02 = 57,600, 0x06 = 19,200 BPS, 0x0C = 9,600 BPS
+ outb(0x00, SER_DATA_PORT + 1); // Set Baud rate - Divisor Latch High Byte
+ outb(0x03, SER_LINE_CTRL_PORT); // reset DLAB ,8 Bits, No Parity, 1 Stop Bit
+ outb(0xC7, SER_DATA_PORT + 2); // FIFO Control Register
outb(0x0b, SER_DATA_PORT + 4); // Turn on DTR, RTS, and OUT2
-
+
__ke_printstr("serial port 0x3f8 is set ready for message print out \n");
-}
+}
#endif
/** \brief Get number of available RAM pages
@@ -2241,7 +2241,7 @@ void *ATI_API_CALL __ke_vmalloc_to_addr(void *vmalloc_addr)
struct page *page = NULL;
page = vmalloc_to_page(vmalloc_addr);
- if(page == NULL)
+ if(page == NULL)
{
__KE_ERROR("__ke_vmalloc_to_addr: invalid page!");
return NULL;
@@ -2283,7 +2283,7 @@ int ATI_API_CALL __ke_do_munmap(unsigned long addr, unsigned long len)
retcode = do_munmap(current->mm,
addr,
len);
-#endif
+#endif
up_write(&current->mm->mmap_sem);
return retcode;
}
@@ -2327,10 +2327,10 @@ long long ATI_API_CALL __divdi3(long long n, long long base)
minus = !minus;
}
else
- {
+ {
ubase = base;
}
-
+
do_div(un, ubase);
return (minus? -un : un);
}
@@ -2360,7 +2360,7 @@ long long ATI_API_CALL __moddi3(long long n, long long base)
else
{
ubase = base;
- }
+ }
rem = do_div(un, ubase);
return (minus? -rem : rem);
@@ -2391,7 +2391,7 @@ void* ATI_API_CALL __ke_vmap(unsigned long *pagelist, unsigned int count)
vaddr = (void *) vmap(pages, count);
#else
#ifdef VM_MAP
- vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL);
+ vaddr = (void *) vmap(pages, count, VM_MAP, PAGE_KERNEL);
#else
vaddr = (void *) vmap(pages, count, 0, PAGE_KERNEL);
#endif
@@ -2447,7 +2447,7 @@ void ATI_API_CALL __ke_vunmap(void* addr)
}
#endif // defined(VM_MAP) || defined(vunmap)
-/** \brief Reserve a memory page
+/** \brief Reserve a memory page
*
* \param pt Kernel logical address of the page
*
@@ -2459,7 +2459,7 @@ void ATI_API_CALL KCL_ReserveMemPage(void* pt)
SetPageReserved(virt_to_page((unsigned long)pt));
}
-/** \brief Unreserve a memory page
+/** \brief Unreserve a memory page
*
* \param pt Kernel logical address of the page
*
@@ -2471,7 +2471,7 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt)
ClearPageReserved(virt_to_page((unsigned long)pt));
}
-/** \brief Lock a memory page
+/** \brief Lock a memory page
*
* \param pt Kernel logical address of the page
*
@@ -2480,14 +2480,14 @@ void ATI_API_CALL KCL_UnreserveMemPage(void* pt)
*/
void ATI_API_CALL KCL_LockMemPage(void* pt)
{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
SetPageReserved(virt_to_page((unsigned long)pt));
#else
lock_page(virt_to_page((unsigned long)pt));
#endif
}
-/** \brief Unlock a memory page
+/** \brief Unlock a memory page
*
* \param pt Kernel logical address of the page
*
@@ -2496,7 +2496,7 @@ void ATI_API_CALL KCL_LockMemPage(void* pt)
*/
void ATI_API_CALL KCL_UnlockMemPage(void* pt)
{
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)
ClearPageReserved(virt_to_page((unsigned long)pt));
#else
unlock_page(virt_to_page((unsigned long)pt));
@@ -2521,7 +2521,7 @@ void* ATI_API_CALL __ke_get_vmptr( struct _agp_memory* memory )
return memory->vmptr;
}
#endif
-
+
void* ATI_API_CALL __ke_ioremap(unsigned long offset, unsigned long size)
{
return ioremap(offset, size);
@@ -2592,7 +2592,7 @@ void ATI_API_CALL KCL_flush_tlb_onepage(struct vm_area_struct * vma, unsigned lo
{
/*Some kernel developer removed the export of symbol "flush_tlb_page" on 2.6.25 x86_64 SMP kernel.
Define a simple version here.*/
-#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
+#if defined(__x86_64__) && defined(__SMP__) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
on_each_cpu(KCL_flush_tlb_one, &va, 1, 1);
#else
flush_tlb_page(vma, va);
@@ -2649,9 +2649,9 @@ void ATI_API_CALL __ke_put_vm_page_table(unsigned long page_addr)
static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
{
int ret = 0;
-
+
DBG_ENTER("0x%08X, 0x%08X, 0x%08X->0x%08X", vma, addr, ptep, *ptep);
-
+
if (pte_dirty(*ptep))
{
#ifdef __x86_64__
@@ -2666,19 +2666,19 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo
{
pte_update(vma->vm_mm, addr, ptep);
}
-#endif
+#endif
}
DBG_TRACE("0x%08X->0x%08X", ptep, *ptep);
-
+
// Flush Translation Lookaside Buffers
if (ret)
{
KCL_flush_tlb_onepage(vma,addr);
}
-
+
DBG_LEAVE("%d", ret);
-
+
return ret;
}
#endif
@@ -2705,7 +2705,7 @@ static inline int ptep_clear_flush_dirty(struct vm_area_struct *vma, unsigned lo
* the virtual address
*
* \param mm Pointer to the memory descriptor structure
- * \param virtual_addr Virtual address
+ * \param virtual_addr Virtual address
*
* \return Old value of the "dirty" flag on success or negative on error
*
@@ -2961,7 +2961,7 @@ int ATI_API_CALL __ke_config_mtrr(void)
return 0;
#else
return 1;
-#endif
+#endif
#else /* !CONFIG_MTRR */
return 0;
#endif /* !CONFIG_MTRR */
@@ -2987,7 +2987,7 @@ int ATI_API_CALL __ke_mtrr_del(int reg, unsigned long base, unsigned long size)
int ATI_API_CALL __ke_has_vmap(void)
{
-// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue.
+// We disable vmap for 2.4.x kernel to work around the big memory( > 4GB ) issue.
#if defined(VM_MAP) || defined(vunmap)
return 1;
#else
@@ -3009,7 +3009,7 @@ int ATI_API_CALL __ke_no_iommu(void)
{
return 0;
}
-#endif
+#endif
/*****************************************************************************/
@@ -3066,7 +3066,7 @@ unsigned int ATI_API_CALL __ke_pci_get_func(__ke_pci_dev_t* pcidev)
{
struct pci_dev* dev = (struct pci_dev*)pcidev;
return PCI_FUNC(dev->devfn);
-}
+}
__ke_dma_addr_t ATI_API_CALL __ke_pci_map_single (__ke_pci_dev_t *pdev, void *buffer, __ke_size_t size, int direction)
{
@@ -3153,7 +3153,7 @@ static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1)
return IRQ_HANDLED;
}
#endif
-
+
int ATI_API_CALL __ke_request_irq(unsigned int irq,
void (*ATI_API_CALL handler)(int, void *, void *),
const char *dev_name, void *dev_id)
@@ -3166,7 +3166,7 @@ int ATI_API_CALL __ke_request_irq(unsigned int irq,
SA_SHIRQ,
#else
IRQF_SHARED,
-#endif
+#endif
dev_name,
dev_id);
}
@@ -3203,12 +3203,12 @@ int ATI_API_CALL __ke_agp_memory_get_page_count(struct _agp_memory* agpmem)
return (int)(agpmem->page_count);
}
-void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem,
+void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem,
unsigned long **memory_ptr)
{
__KE_DEBUG("[%s] agpmem=0x%016lx agpmem->memory=0x%016lx [0]=0x%016x",
- __FUNCTION__,
- (unsigned long)agpmem,
+ __FUNCTION__,
+ (unsigned long)agpmem,
(unsigned long)agpmem->memory,
(agpmem->memory)[0]);
@@ -3217,18 +3217,9 @@ void ATI_API_CALL __ke_agp_memory_get_memory(struct _agp_memory* agpmem,
/*****************************************************************************/
-#ifndef NOPAGE_SIGBUS
-#define NOPAGE_SIGBUS 0
-#endif /* !NOPAGE_SIGBUS */
-
typedef struct page mem_map_t;
typedef mem_map_t *vm_nopage_ret_t;
-static __inline__ vm_nopage_ret_t do_vm_nopage(struct vm_area_struct* vma,
- unsigned long address)
-{
- return 0; /* Disallow mremap */
-}
#ifdef __AGP__BUILTIN__
#ifdef __ia64__
@@ -3253,19 +3244,20 @@ static __inline__ vm_nopage_ret_t do_vm_cant_nopage(struct vm_area_struct* vma,
return page;
}
}
- return NOPAGE_SIGBUS; /* Disallow mremap */
+ return VM_FAULT_SIGBUS; /* Disallow mremap */
}
#endif /* __ia64__ */
#endif /* __AGP__BUILTIN__ */
-static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma,
- unsigned long address)
+static __inline__ int do_vm_shm_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
pgd_t* pgd_p;
pmd_t* pmd_p;
pte_t pte;
+ unsigned long address = (unsigned long)vmf->virtual_address;
unsigned long vma_offset;
unsigned long pte_linear;
mem_map_t* pMmPage;
@@ -3294,7 +3286,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma,
(unsigned long)__ke_vm_offset(vma));
if (address > vma->vm_end)
- return NOPAGE_SIGBUS; /* address is out of range */
+ return VM_FAULT_SIGBUS; /* address is out of range */
/* Calculate offset into VMA */
vma_offset = address - vma->vm_start;
@@ -3306,7 +3298,7 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma,
pte_linear = firegl_get_addr_from_vm(vma);
if (!pte_linear)
{
- return NOPAGE_SIGBUS; /* bad address */
+ return VM_FAULT_SIGBUS; /* bad address */
}
pte_linear += vma_offset;
@@ -3334,7 +3326,9 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma,
// __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n",
// address, page_address(pMmPage));
- return pMmPage;
+ vmf->page = pMmPage;
+
+ return 0;
}
/*
@@ -3343,8 +3337,10 @@ static __inline__ vm_nopage_ret_t do_vm_shm_nopage(struct vm_area_struct* vma,
(which is one ore more pages in size)
*/
-static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, unsigned long address)
+static __inline__ int do_vm_dma_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
+ unsigned long address = (unsigned long) vmf->virtual_address;
unsigned long kaddr;
mem_map_t* pMmPage;
@@ -3360,7 +3356,7 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u
kaddr = firegl_get_addr_from_vm(vma);
if (!kaddr)
{
- return NOPAGE_SIGBUS; /* bad address */
+ return VM_FAULT_SIGBUS; /* bad address */
}
kaddr += (address - vma->vm_start);
@@ -3372,19 +3368,23 @@ static __inline__ vm_nopage_ret_t do_vm_dma_nopage(struct vm_area_struct* vma, u
// with drm_alloc_pages, which marks all pages as reserved. Reserved
// pages' usage count is not decremented by the kernel during unmap!!!
//
- // For kernel >= 2.6.15, We should reenable this, because the VM sub-system
- // will decrement the pages' usage count even for the pages marked as reserved
+ // For kernel >= 2.6.15, We should reenable this, because the VM sub-system
+ // will decrement the pages' usage count even for the pages marked as reserved
// - MC.
get_page(pMmPage); /* inc usage count of page */
#endif
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n",
address, page_address(pMmPage));
- return pMmPage;
+ vmf->page = pMmPage;
+
+ return 0;
}
-static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma, unsigned long address)
+static __inline__ int do_vm_kmap_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
+ unsigned long address = (unsigned long) vmf->virtual_address;
unsigned long kaddr;
mem_map_t* pMmPage;
@@ -3394,13 +3394,14 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma,
if ((pMmPage = (mem_map_t*) firegl_get_pagetable_page_from_vm(vma)))
{
get_page(pMmPage);
- return pMmPage;
+ vmf->page = pMmPage;
+ return 0;
}
kaddr = firegl_get_addr_from_vm(vma);
if (!kaddr)
{
- return NOPAGE_SIGBUS; /* bad address */
+ return VM_FAULT_SIGBUS; /* bad address */
}
kaddr += (address - vma->vm_start);
@@ -3413,50 +3414,52 @@ static __inline__ vm_nopage_ret_t do_vm_kmap_nopage(struct vm_area_struct* vma,
__KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", address, page_address(pMmPage));
- return pMmPage;
+ vmf->page = pMmPage;
+ return 0;
}
-/**
+/**
**
- ** This routine is intented to locate the page table through the
+ ** This routine is intented to locate the page table through the
** pagelist table created earlier in dev-> pcie
**/
-static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma,
- unsigned long address)
+static __inline__ int do_vm_pcie_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
+ unsigned long address = (unsigned long)vmf->virtual_address;
unsigned long vma_offset;
- unsigned long i;
+ unsigned long i;
mem_map_t* pMmPage;
struct firegl_pcie_mem* pciemem;
unsigned long* pagelist;
-
+
drm_device_t *dev = (drm_device_t *)firegl_get_dev_from_vm(vma);
if (dev == NULL)
{
__KE_ERROR("dev is NULL\n");
- return NOPAGE_SIGBUS;
+ return VM_FAULT_SIGBUS;
}
if (address > vma->vm_end)
{
__KE_ERROR("address out of range\n");
- return NOPAGE_SIGBUS; /* address is out of range */
+ return VM_FAULT_SIGBUS; /* address is out of range */
}
pciemem = firegl_get_pciemem_from_addr ( vma, address);
if (pciemem == NULL)
{
__KE_ERROR("No pciemem found! \n");
- return NOPAGE_SIGBUS;
- }
+ return VM_FAULT_SIGBUS;
+ }
pagelist = firegl_get_pagelist_from_vm(vma);
- if (pagelist == NULL)
+ if (pagelist == NULL)
{
__KE_ERROR("No pagelist! \n");
- return NOPAGE_SIGBUS;
+ return VM_FAULT_SIGBUS;
}
-
+
/** Find offset in vma */
vma_offset = address - vma->vm_start;
/** Which entry in the pagelist */
@@ -3468,15 +3471,17 @@ static __inline__ vm_nopage_ret_t do_vm_pcie_nopage(struct vm_area_struct* vma,
if (page_address(pMmPage) == 0x0)
{
__KE_ERROR("Invalid page address\n");
- return NOPAGE_SIGBUS;
+ return VM_FAULT_SIGBUS;
}
- return pMmPage;
+
+ vmf->page = pMmPage;
+ return 0;
}
-static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma,
- unsigned long address)
+static __inline__ int do_vm_gart_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
-
+ unsigned long address = (unsigned long) vmf->virtual_address;
unsigned long page_addr;
unsigned long offset;
struct page *page;
@@ -3484,36 +3489,31 @@ static __inline__ vm_nopage_ret_t do_vm_gart_nopage(struct vm_area_struct* vma,
if (address > vma->vm_end)
{
__KE_ERROR("Invalid virtual address\n");
- return NOPAGE_SIGBUS; /* Disallow mremap */
- }
+ return VM_FAULT_SIGBUS; /* Disallow mremap */
+ }
offset = address - vma->vm_start;
-#ifdef FIREGL_CF_SUPPORT
+#ifdef FIREGL_CF_SUPPORT
page_addr = mc_heap_get_page_addr(vma, offset);
#else
page_addr = firegl_cmmqs_get_pageaddr_from_vm(vma, offset);
-#endif
+#endif
if( !page_addr)
{
__KE_ERROR("Invalid page address\n");
- return NOPAGE_SIGBUS; /* Disallow mremap */
+ return VM_FAULT_SIGBUS; /* Disallow mremap */
}
page = virt_to_page(page_addr);
get_page(page);
- return page;
+ vmf->page = page;
+ return 0;
}
-
-
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
-
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
+static int vm_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- if (type) *type = VM_FAULT_MINOR;
- return do_vm_nopage(vma, address);
+ return VM_FAULT_SIGBUS;
}
#ifdef __AGP__BUILTIN__
@@ -3545,91 +3545,10 @@ static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma,
(which is one or more pages in size)
*/
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
-{
- if (type) *type = VM_FAULT_MINOR;
- return do_vm_shm_nopage(vma, address);
-}
-
-/*
-
- This routine is intended to remap addresses of a OpenGL context
- (which is one ore more pages in size)
-
-*/
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
-{
- if (type) *type = VM_FAULT_MINOR;
- return do_vm_dma_nopage(vma, address);
-}
-
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
-{
- if (type) *type = VM_FAULT_MINOR;
- return do_vm_kmap_nopage(vma, address);
-}
-
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
-{
- return do_vm_pcie_nopage(vma, address);
-}
-
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
-{
- return do_vm_gart_nopage(vma, address);
-}
-
-#else /* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */
-
-static vm_nopage_ret_t vm_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
-{
- return do_vm_nopage(vma, address);
-}
-
-#ifdef __AGP__BUILTIN__
-#ifdef __ia64__
-
-
-static vm_nopage_ret_t vm_cant_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
-{
- return do_vm_cant_nopage(vma, address);
-}
-#endif /* __ia64__ */
-#endif /* __AGP__BUILTIN__ */
-
-/*
-
- This function is called when a page of a mmap()'ed area is not currently
- visible in the specified VMA.
- Return value is the associated physical address for the requested page.
- (If not implemented, then the kernel default routine would allocate a new,
- zeroed page for servicing us)
-
- Possible errors: SIGBUS, OutOfMem
-
- This routine is intended to remap addresses of SHM SAREA
- (which is one or more pages in size)
-
- */
-static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
+static int vm_shm_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- return do_vm_shm_nopage(vma, address);
+ return do_vm_shm_nopage(vma, vmf);
}
/*
@@ -3638,37 +3557,30 @@ static vm_nopage_ret_t vm_shm_nopage(struct vm_area_struct* vma,
(which is one ore more pages in size)
*/
-static vm_nopage_ret_t vm_dma_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
+static int vm_dma_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- return do_vm_dma_nopage(vma, address);
+ return do_vm_dma_nopage(vma, vmf);
}
-static vm_nopage_ret_t vm_kmap_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
+static int vm_kmap_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- return do_vm_kmap_nopage(vma, address);
+ return do_vm_kmap_nopage(vma, vmf);
}
-static vm_nopage_ret_t vm_pcie_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int write_access)
+static int vm_pcie_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- return do_vm_pcie_nopage(vma, address);
+ return do_vm_pcie_nopage(vma, vmf);
}
-static vm_nopage_ret_t vm_gart_nopage(struct vm_area_struct* vma,
- unsigned long address,
- int *type)
+static int vm_gart_nopage(struct vm_area_struct* vma,
+ struct vm_fault *vmf)
{
- return do_vm_gart_nopage(vma, address);
+ return do_vm_gart_nopage(vma, vmf);
}
-
-#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) */
-
void* ATI_API_CALL __ke_vma_file_priv(struct vm_area_struct* vma)
{
return vma->vm_file->private_data;
@@ -3718,7 +3630,7 @@ char* ATI_API_CALL __ke_vm_page_prot_str(struct vm_area_struct* vma, char* buf)
*(buf + i++) = pgprot & _PAGE_DIRTY ? 'd' : '-';
*(buf + i++) = pgprot & _PAGE_PSE ? 'm' : 'k';
*(buf + i++) = pgprot & _PAGE_GLOBAL ? 'g' : 'l';
-#endif /* __i386__ */
+#endif /* __i386__ */
*(buf + i++) = 0;
return buf;
@@ -3747,9 +3659,9 @@ char *__ke_pte_phys_addr_str(pte_t pte, char *buf, __ke_dma_addr_t* phys_address
return buf;
}
-char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma,
- char* buf,
- unsigned long virtual_addr,
+char* ATI_API_CALL __ke_vm_phys_addr_str(struct vm_area_struct* vma,
+ char* buf,
+ unsigned long virtual_addr,
__ke_dma_addr_t* phys_address)
{
pgd_t* pgd_p;
@@ -3773,7 +3685,7 @@ void ip_drm_vm_close(struct vm_area_struct* vma)
static struct vm_operations_struct vm_ops =
{
- nopage: vm_nopage,
+ fault: vm_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
@@ -3791,42 +3703,42 @@ static struct vm_operations_struct vm_cant_ops =
static struct vm_operations_struct vm_shm_ops =
{
- nopage: vm_shm_nopage,
+ fault: do_vm_shm_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
static struct vm_operations_struct vm_pci_bq_ops =
{
- nopage: vm_dma_nopage,
+ fault: vm_dma_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
static struct vm_operations_struct vm_ctx_ops =
{
- nopage: vm_dma_nopage,
+ fault: vm_dma_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
-static struct vm_operations_struct vm_pcie_ops =
+static struct vm_operations_struct vm_pcie_ops =
{
- nopage: vm_pcie_nopage,
+ fault: vm_pcie_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
static struct vm_operations_struct vm_kmap_ops =
{
- nopage: vm_kmap_nopage,
+ fault: vm_kmap_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
static struct vm_operations_struct vm_gart_ops =
{
- nopage: vm_gart_nopage,
+ fault: vm_gart_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
@@ -3835,14 +3747,14 @@ static struct vm_operations_struct vm_gart_ops =
#ifndef __ia64__
static struct vm_operations_struct vm_agp_bq_ops =
{
- nopage: vm_nopage,
+ fault: vm_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
-#else
+#else
static struct vm_operations_struct vm_cant_agp_bq_ops =
{
- nopage: vm_cant_nopage,
+ fault: vm_cant_nopage,
open: ip_drm_vm_open,
close: ip_drm_vm_close,
};
@@ -3877,19 +3789,19 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
#ifdef __i386__
if (boot_cpu_data.x86 > 3)
{
-#ifdef FIREGL_USWC_SUPPORT
+#ifdef FIREGL_USWC_SUPPORT
if (!firegl_pat_enabled)
-#endif
+#endif
{
pgprot_val(vma->vm_page_prot) |= _PAGE_PCD;
pgprot_val(vma->vm_page_prot) &= ~_PAGE_PWT;
}
-#ifdef FIREGL_USWC_SUPPORT
+#ifdef FIREGL_USWC_SUPPORT
else
{
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
- }
-#endif
+ }
+#endif
}
#endif /* __i386__ */
#ifdef __ia64__
@@ -3908,7 +3820,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
}
break;
-#ifdef FIREGL_USWC_SUPPORT
+#ifdef FIREGL_USWC_SUPPORT
case __KE_ADPT_REG:
{
#ifdef __ia64__
@@ -3928,7 +3840,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
}
else
{
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
}
}
#endif /* __i386__ */
@@ -3947,7 +3859,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
vma->vm_ops = &vm_ops;
}
break;
-#endif
+#endif
case __KE_SHM:
vma->vm_flags |= VM_SHM | VM_RESERVED; /* Don't swap */
@@ -3981,7 +3893,7 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
#ifdef __AGP__BUILTIN__
case __KE_AGP:
- // if(dev->agp->cant_use_aperture == 1)
+ // if(dev->agp->cant_use_aperture == 1)
#ifdef __ia64__
{
/*
@@ -4005,9 +3917,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
if( firegl_pat_enabled )
{
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
- }
+ }
}
-#endif
+#endif
if (REMAP_PAGE_RANGE(vma,offset))
{
@@ -4024,8 +3936,8 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
#endif
break;
case __KE_AGP_BQS:
- // if(dev->agp->cant_use_aperture == 1)
-#ifdef __ia64__
+ // if(dev->agp->cant_use_aperture == 1)
+#ifdef __ia64__
{
/*
* On some systems we can't talk to bus dma address from
@@ -4048,9 +3960,9 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
if( firegl_pat_enabled )
{
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
- }
+ }
}
-#endif
+#endif
if (REMAP_PAGE_RANGE(vma,offset))
{
@@ -4079,15 +3991,15 @@ int ATI_API_CALL __ke_vm_map(struct file* filp,
break;
case __KE_GART_USWC:
-#ifdef FIREGL_USWC_SUPPORT
+#ifdef FIREGL_USWC_SUPPORT
if (boot_cpu_data.x86 > 3)
{
if( firegl_pat_enabled )
{
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
- }
+ }
}
-#endif
+#endif
// fall through
case __KE_GART_CACHEABLE:
vma->vm_flags |= VM_RESERVED;
@@ -4137,7 +4049,7 @@ extern struct _agp_memory *_X(agp_allocate_memory_phys_list)(size_t, u32, u64 *)
#define FIREGL_agp_backend_release _X(agp_backend_release)
#define FIREGL_agp_memory _X(agp_memory)
-unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE;
+unsigned int __ke_firegl_agpgart_inuse = AGPGART_INUSE_NONE;
#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
/*****************************************************************************/
@@ -4252,7 +4164,7 @@ static
int ATI_API_CALL __ke_agpgart_available(__ke_pci_dev_t *pcidev, int use_internal)
{
drm_agp_module_stub = &drm_agp;
- __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE;
+ __ke_firegl_agpgart_inuse = KERNEL26_AGPGART_INUSE;
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
firegl_pci_device = (struct pci_dev*)(void*)pcidev;
@@ -4305,7 +4217,7 @@ int ATI_API_CALL __ke_agp_available(__ke_pci_dev_t *pcidev, int use_internal)
} else {
available = __ke_firegl_agpgart_available();
}
-
+
return available;
}
@@ -4410,7 +4322,7 @@ void ATI_API_CALL __ke_agp_copy_info(__ke_agp_kern_info_t* info)
if (AGP_AVAILABLE(copy_info))
{
- struct agp_kern_info kern;
+ struct agp_kern_info kern;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
if (firegl_agp_bridge == NULL)
@@ -4508,7 +4420,7 @@ int ATI_API_CALL __ke_agp_enable(unsigned long mode)
int ATI_API_CALL __ke_read_agp_caps_registers(__ke_pci_dev_t* dev, unsigned int *caps)
{
- return -EINVAL;
+ return -EINVAL;
}
int ATI_API_CALL __ke_agp_acquire(__ke_pci_dev_t* dev)
@@ -4550,9 +4462,9 @@ int ATI_API_CALL __ke_smp_processor_id(void)
/** \brief Runs a function on all other CPUs
* \param func_to_call function to be called on all other cpus
- * \return None
+ * \return None
*/
-void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call)
+void ATI_API_CALL KCL_CallFuncOnOtherCpus(firegl_void_routine_t func_to_call)
{
#ifdef CONFIG_SMP
smp_call_function( firegl_smp_func_parameter_wrap, (void*)func_to_call, 0, 1 );
@@ -4659,7 +4571,7 @@ int ATI_API_CALL __ke_has_PSE(void)
int ATI_API_CALL KCL_is_pat_enabled(void)
{
- return firegl_pat_enabled;
+ return firegl_pat_enabled;
}
static int ATI_API_CALL KCL_has_pat(void)
@@ -4675,7 +4587,7 @@ static void KCL_setup_pat(void *info)
{
unsigned long cr0=0, cr4=0;
unsigned long flags;
-
+
local_irq_save(flags);
cr0 = read_cr0() | 0x40000000;
write_cr0(cr0);
@@ -4706,7 +4618,7 @@ static void KCL_restore_pat(void *info)
{
unsigned long cr0 = 0, cr4 = 0;
unsigned long flags;
-
+
local_irq_save(flags);
cr0 = read_cr0() | 0x40000000;
write_cr0(cr0);
@@ -4718,7 +4630,7 @@ static void KCL_restore_pat(void *info)
write_cr4(cr4 & ~X86_CR4_PGE);
}
__flush_tlb();
-
+
wrmsr(MSR_IA32_CR_PAT, KCL_orig_pat[0], KCL_orig_pat[1]);
cr0 = read_cr0();
@@ -4741,7 +4653,7 @@ static int ATI_API_CALL KCL_enable_pat(void)
__KE_INFO("USWC is disabled in module parameters\n");
return 0;
}
-
+
if (!KCL_has_pat())
{
return 0;
@@ -4751,13 +4663,13 @@ static int ATI_API_CALL KCL_enable_pat(void)
for ( i = 0; i < 2; i++ )
{
- for (j = 0; j < 4; j ++)
+ for (j = 0; j < 4; j ++)
{
if (((KCL_orig_pat[i] >> (j * 8)) & 0xFF) == 1)
- {
+ {
__KE_ERROR("Pat entry %d is already configured\n", (i+1)*(j+1));
return 0;
- }
+ }
}
}
@@ -4829,7 +4741,7 @@ typedef struct tag_kasContext_t
} kasContext_t;
/** \brief KAS context */
-static kasContext_t kasContext;
+static kasContext_t kasContext;
/** \brief Kernel support required to enable KAS */
#if defined(cmpxchg) && \
@@ -5137,7 +5049,7 @@ unsigned int ATI_API_CALL KAS_Ih_Execute(KAS_IhRoutine_t ih_routine,
DBG_TRACE("Interrupt handler returned 0x%08X", ret);
kasSetExecutionLevel(orig_level);
- spin_unlock(&kasContext.lock_ih);
+ spin_unlock(&kasContext.lock_ih);
DBG_LEAVE("%d", ret);
return ret;
@@ -5412,7 +5324,7 @@ typedef struct tag_kasSlabCache_t
#endif
spinlock_t lock; /* OS spinlock object protecting the cache */
unsigned int routine_type; /* Type of routine the cache might be accessed from */
- char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */
+ char name[24]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */
} kasSlabCache_t;
/** \brief Return Slab Cache object size
@@ -5450,7 +5362,8 @@ unsigned int ATI_API_CALL KAS_SlabCache_Initialize(void* hSlabCache,
slabcache_obj->routine_type = access_type;
spin_lock_init(&(slabcache_obj->lock));
- sprintf(slabcache_obj->name, "kas(%08lX)",(unsigned long)slabcache_obj);
+ snprintf(slabcache_obj->name, sizeof(slabcache_obj->name),
+ "kas(%p)", slabcache_obj);
DBG_TRACE("creating slab object '%s'", slabcache_obj->name);
@@ -6366,7 +6279,7 @@ unsigned int ATI_API_CALL KAS_AtomicAddInt(
kas_xadd(puiDestination, iAdd, ret, "l");
- return ret + iAdd;
+ return ret + iAdd;
#else
return 0xDEADC0DE; /* To make compiler happy */
#endif
@@ -6449,7 +6362,7 @@ long ATI_API_CALL KAS_ScheduleTimeout(long n_jiffies)
#ifdef FIREGL_CF_SUPPORT
void *ATI_API_CALL KCL_lock_init()
-{
+{
spinlock_t *lock;
lock = kmalloc(sizeof(*lock), GFP_KERNEL);
@@ -6461,7 +6374,7 @@ void *ATI_API_CALL KCL_lock_init()
}
void ATI_API_CALL KCL_lock_deinit(void *plock)
-{
+{
if (plock == NULL)
{
__KE_ERROR("plock is NULL\n");