349,7 → 349,7 |
u32 adr; |
int err; |
|
PRINTK(KERN_DEBUG "%s : CmdMachine()\n", DEVICE_NAME); |
//PRINTK(KERN_DEBUG "%s : CmdMachine()\n", DEVICE_NAME); |
|
// loop through the init (or deinit) list |
while (psInitElement->bDestination != STOP) |
402,7 → 402,7 |
int err; |
PCIVME_INIT_ELEMENT *element = init->sVie; |
|
PRINTK(KERN_DEBUG "%s : init_hardware()\n", DEVICE_NAME); |
PRINTK(KERN_INFO "%s : init_hardware()\n", DEVICE_NAME); |
|
err = CmdMachine(pd, element); |
if (err) |
621,7 → 621,7 |
u16 intCSR = readw((const volatile void *) pd->pPCIADAIntCSR); |
int status = 0; |
|
PRINTK(KERN_DEBUG "%s : VMEMM_RESET()\n", DEVICE_NAME); |
PRINTK(KERN_INFO "%s : VMEMM_RESET()\n", DEVICE_NAME); |
|
// am I connected and switched on?? |
if ((cntrl & 0x0980) == 0x0980) |
801,8 → 801,17 |
return 0; |
} |
|
/* |
static long pcivme_compat_ioctl(struct file *pFile, unsigned int cmd, unsigned long arg){ |
PRINTK(KERN_DEBUG "%s : pcivme_compat_ioctl(0x%08x), size = %d\n", DEVICE_NAME, cmd, _IOC_SIZE(cmd)); |
return pcivme_ioctl(NULL, pFile, cmd,arg); |
} |
*/ |
|
static long pcivme_unlocked_ioctl(struct file *pFile, unsigned int cmd, unsigned long arg){ |
long retval=0; |
|
|
#if HAVE_UNLOCKED_IOCTL |
struct mutex fs_mutex; |
mutex_init(&fs_mutex); |
811,6 → 820,7 |
lock_kernel(); |
#endif |
|
PRINTK(KERN_DEBUG "%s : pcivme_unlocked_ioctl(0x%08x), size = %d\n", DEVICE_NAME, cmd, _IOC_SIZE(cmd)); |
retval = pcivme_ioctl(NULL, pFile, cmd,arg); |
|
#if HAVE_UNLOCKED_IOCTL |
818,6 → 828,7 |
#else |
unlock_kernel(); |
#endif |
|
return retval; |
} |
|
825,10 → 836,10 |
{ |
DEVICE_OBJ *pd = 0; |
DEVICE_OBJ *desc = 0; |
int nMinor = MINOR(pInode->i_rdev); |
int nMinor = MINOR(pInode->i_rdev); |
struct list_head *ptr; |
|
PRINTK(KERN_DEBUG "%s : pcivme_open(), %d, %d, scanning %d devices\n", DEVICE_NAME, major(pInode->i_rdev), nMinor, drv.count); |
PRINTK(KERN_DEBUG "%s : pcivme_open(), %d, scanning %d devices\n", DEVICE_NAME, nMinor, drv.count); |
|
/* search for device */ |
for (ptr = drv.devList.next; ptr != &drv.devList; ptr = ptr->next) |
839,7 → 850,7 |
{ |
if (test_connection(pd)) |
{ |
printk(KERN_ERR "%s : connection test for module %d failed!\n", DEVICE_NAME, pd->cModuleNumber); |
printk(KERN_ERR "%s : pcivme_open() connection test for module %d failed!\n", DEVICE_NAME, pd->cModuleNumber); |
pd->bConnected = 0; |
} |
else |
850,7 → 861,7 |
} |
} |
else |
PRINTK(KERN_DEBUG "%s : module %d not connected!\n", DEVICE_NAME, nMinor); |
PRINTK(KERN_DEBUG "%s pcivme_open(): module %d not connected!\n", DEVICE_NAME, nMinor); |
} |
|
if (desc) |
871,7 → 882,7 |
pp->AlignmentCheck = MisalignmentForByteAccess; |
pFile->private_data = (void *)pp; |
|
PRINTK(KERN_DEBUG "%s : found VMEMM module with number %d.\n", DEVICE_NAME, nMinor); |
PRINTK(KERN_DEBUG "%s : pcivme_open() found VMEMM module with number %d.\n", DEVICE_NAME, nMinor); |
|
if (!pd->nOpenCounter) |
{ |
878,7 → 889,7 |
err = CmdMachine(pd, init_element); |
if (err) |
{ |
printk(KERN_ERR "%s : default init failed with err = %d!\n", DEVICE_NAME, err); |
printk(KERN_ERR "%s : pcivme_open() default init failed with err = %d!\n", DEVICE_NAME, err); |
kfree_s(pp, sizeof(*pp)); // FREE(pFile->private_data); |
return err; |
} |
888,7 → 899,7 |
} |
else |
{ |
printk(KERN_ERR "%s : No VMEMM module found.\n", DEVICE_NAME); |
printk(KERN_ERR "%s pcivme_open(): No VMEMM module found.\n", DEVICE_NAME); |
return -ENODEV; |
} |
|
900,7 → 911,7 |
{ |
PATH_OBJ *pp; |
|
PRINTK(KERN_DEBUG "%s : release()\n", DEVICE_NAME); |
PRINTK(KERN_DEBUG "%s : pcivme_release()\n", DEVICE_NAME); |
|
if (pFile->private_data) |
{ |
1016,32 → 1027,43 |
} |
|
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) |
struct file_operations pcivme_fops = |
// http://learninglinuxkernel.in/writing-char-driver-for-linux-kernel-2-6/ |
// http://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/ |
loff_t pcivme_lseek(struct file* filep, loff_t offset, int whence) |
{ |
NULL, /* lseek */ |
pcivme_read, /* read */ |
pcivme_write, /* write */ |
NULL, /* readdir */ |
NULL, /* select */ |
pcivme_ioctl, /* ioctl */ |
NULL, /* mmap */ |
pcivme_open, /* open */ |
NULL, /* flush */ |
pcivme_release, /* release */ |
}; |
#else |
|
PRINTK(KERN_DEBUG "%s : pcivme_lseek(0x%08x, %d)\n", DEVICE_NAME, (u32) offset, whence); |
switch (whence) { |
case 0: /* SEEK_SET */ |
filep->f_pos = offset; |
break; |
case 1: /* SEEK_CUR */ |
filep->f_pos += offset; |
break; |
case 2: /* SEEK_END */ |
return -EINVAL; |
default: |
return -EINVAL; |
}; |
|
return filep->f_pos; |
} |
|
|
|
struct file_operations pcivme_fops = |
{ |
.llseek = pcivme_lseek, /* lseek */ |
.read = pcivme_read, /* read */ |
.write = pcivme_write, /* write */ |
// .compat_ioctl = pcivme_compat_ioctl, /* ioctl */ |
.unlocked_ioctl = pcivme_unlocked_ioctl, /* ioctl */ |
.open = pcivme_open, /* open */ |
.release = pcivme_release, /* release */ |
}; |
#endif |
|
|
|
|
|
|