Staging: sep: use O_NDELAY instead of magic APIs
Open is still completely bogus in this driver but we'll tackle that later - for now fix the bogus API Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
7913c21a25
commit
577092ac15
|
@ -86,9 +86,6 @@ struct sep_device {
|
||||||
/* global data for every flow */
|
/* global data for every flow */
|
||||||
struct sep_flow_context_t flows_data_array[SEP_DRIVER_NUM_FLOWS];
|
struct sep_flow_context_t flows_data_array[SEP_DRIVER_NUM_FLOWS];
|
||||||
|
|
||||||
/* flag for API mode - 1 -is blocking, 0 is non-blocking */
|
|
||||||
unsigned long block_mode_flag;
|
|
||||||
|
|
||||||
/* pointer to the workqueue that handles the flow done interrupts */
|
/* pointer to the workqueue that handles the flow done interrupts */
|
||||||
struct workqueue_struct *flow_wq_ptr;
|
struct workqueue_struct *flow_wq_ptr;
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#include "sep_driver_hw_defs.h"
|
#include "sep_driver_hw_defs.h"
|
||||||
#include "sep_driver_config.h"
|
#include "sep_driver_config.h"
|
||||||
#include "sep_driver_api.h"
|
#include "sep_driver_api.h"
|
||||||
#include "sep_driver_ext_api.h"
|
|
||||||
#include "sep_dev.h"
|
#include "sep_dev.h"
|
||||||
|
|
||||||
#if SEP_DRIVER_ARM_DEBUG_MODE
|
#if SEP_DRIVER_ARM_DEBUG_MODE
|
||||||
|
@ -345,25 +344,22 @@ static unsigned long sep_shared_area_phys_to_virt(unsigned long phys_address)
|
||||||
open function of the character driver - must only lock the mutex
|
open function of the character driver - must only lock the mutex
|
||||||
must also release the memory data pool allocations
|
must also release the memory data pool allocations
|
||||||
------------------------------------------------------------------------*/
|
------------------------------------------------------------------------*/
|
||||||
static int sep_open(struct inode *inode_ptr, struct file *file_ptr)
|
static int sep_open(struct inode *inode, struct file *filp)
|
||||||
{
|
{
|
||||||
int error;
|
int error = 0;
|
||||||
|
|
||||||
dbg("SEP Driver:--------> open start\n");
|
dbg("SEP Driver:--------> open start\n");
|
||||||
|
|
||||||
error = 0;
|
|
||||||
|
|
||||||
/* check the blocking mode */
|
/* check the blocking mode */
|
||||||
if (sep_dev->block_mode_flag)
|
if (filp->f_flags & O_NDELAY)
|
||||||
|
error = mutex_trylock(&sep_mutex);
|
||||||
|
else
|
||||||
/* lock mutex */
|
/* lock mutex */
|
||||||
mutex_lock(&sep_mutex);
|
mutex_lock(&sep_mutex);
|
||||||
else
|
|
||||||
error = mutex_trylock(&sep_mutex);
|
|
||||||
|
|
||||||
/* check the error */
|
/* check the error */
|
||||||
if (error) {
|
if (error) {
|
||||||
edbg("SEP Driver: down_interruptible failed\n");
|
edbg("SEP Driver: down_interruptible failed\n");
|
||||||
|
|
||||||
goto end_function;
|
goto end_function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,17 +384,13 @@ static int sep_release(struct inode *inode_ptr, struct file *file_ptr)
|
||||||
#if 0 /*!SEP_DRIVER_POLLING_MODE */
|
#if 0 /*!SEP_DRIVER_POLLING_MODE */
|
||||||
/* close IMR */
|
/* close IMR */
|
||||||
sep_write_reg(sep_dev, HW_HOST_IMR_REG_ADDR, 0x7FFF);
|
sep_write_reg(sep_dev, HW_HOST_IMR_REG_ADDR, 0x7FFF);
|
||||||
|
|
||||||
/* release IRQ line */
|
/* release IRQ line */
|
||||||
free_irq(SEP_DIRVER_IRQ_NUM, &sep_dev->reg_base_address);
|
free_irq(SEP_DIRVER_IRQ_NUM, &sep_dev->reg_base_address);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unlock the sep mutex */
|
/* unlock the sep mutex */
|
||||||
mutex_unlock(&sep_mutex);
|
mutex_unlock(&sep_mutex);
|
||||||
|
|
||||||
dbg("SEP Driver:<-------- sep_release end\n");
|
dbg("SEP Driver:<-------- sep_release end\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2150,27 +2142,6 @@ static int sep_get_time_handler(unsigned long arg)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
This api handles the setting of API mode to blocking or non-blocking
|
|
||||||
*/
|
|
||||||
static int sep_set_api_mode_handler(unsigned long arg)
|
|
||||||
{
|
|
||||||
int error;
|
|
||||||
unsigned long mode_flag;
|
|
||||||
|
|
||||||
dbg("SEP Driver:--------> sep_set_api_mode_handler start\n");
|
|
||||||
|
|
||||||
error = get_user(mode_flag, &(((struct sep_driver_set_api_mode_t *) arg)->mode));
|
|
||||||
if (error)
|
|
||||||
goto end_function;
|
|
||||||
|
|
||||||
/* set the global flag */
|
|
||||||
sep_dev->block_mode_flag = mode_flag;
|
|
||||||
end_function:
|
|
||||||
dbg("SEP Driver:<-------- sep_set_api_mode_handler end\n");
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This API handles the end transaction request
|
This API handles the end transaction request
|
||||||
*/
|
*/
|
||||||
|
@ -2294,10 +2265,6 @@ static int sep_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, u
|
||||||
/* init command to sep */
|
/* init command to sep */
|
||||||
error = sep_init_handler(arg);
|
error = sep_init_handler(arg);
|
||||||
break;
|
break;
|
||||||
case SEP_IOCSETAPIMODE:
|
|
||||||
/* set non- blocking mode */
|
|
||||||
error = sep_set_api_mode_handler(arg);
|
|
||||||
break;
|
|
||||||
case SEP_IOCGETSTATICPOOLADDR:
|
case SEP_IOCGETSTATICPOOLADDR:
|
||||||
/* get the physical and virtual addresses of the static pool */
|
/* get the physical and virtual addresses of the static pool */
|
||||||
error = sep_get_static_pool_addr_handler(arg);
|
error = sep_get_static_pool_addr_handler(arg);
|
||||||
|
@ -2639,9 +2606,6 @@ static int __init sep_init(void)
|
||||||
for the current transaction */
|
for the current transaction */
|
||||||
sep_dev->data_pool_bytes_allocated = 0;
|
sep_dev->data_pool_bytes_allocated = 0;
|
||||||
|
|
||||||
/* set the starting mode to blocking */
|
|
||||||
sep_dev->block_mode_flag = 1;
|
|
||||||
|
|
||||||
/* FIXME: Probe can occur before we are ready to survive a probe */
|
/* FIXME: Probe can occur before we are ready to survive a probe */
|
||||||
ret_val = pci_register_driver(&sep_pci_driver);
|
ret_val = pci_register_driver(&sep_pci_driver);
|
||||||
if (ret_val) {
|
if (ret_val) {
|
||||||
|
|
|
@ -83,9 +83,6 @@
|
||||||
/* init sep command */
|
/* init sep command */
|
||||||
#define SEP_IOCSEPINIT _IO(SEP_IOC_MAGIC_NUMBER , 13)
|
#define SEP_IOCSEPINIT _IO(SEP_IOC_MAGIC_NUMBER , 13)
|
||||||
|
|
||||||
/* set non blocking mode */
|
|
||||||
#define SEP_IOCSETAPIMODE _IO(SEP_IOC_MAGIC_NUMBER , 14)
|
|
||||||
|
|
||||||
/* end transaction command */
|
/* end transaction command */
|
||||||
#define SEP_IOCENDTRANSACTION _IO(SEP_IOC_MAGIC_NUMBER , 15)
|
#define SEP_IOCENDTRANSACTION _IO(SEP_IOC_MAGIC_NUMBER , 15)
|
||||||
|
|
||||||
|
@ -147,14 +144,6 @@ struct sep_driver_realloc_cache_resident_t {
|
||||||
unsigned long new_base_addr;
|
unsigned long new_base_addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
set api mode command struct
|
|
||||||
*/
|
|
||||||
struct sep_driver_set_api_mode_t {
|
|
||||||
/* mode to set - 1 - blocking, 0 - non-blocking */
|
|
||||||
unsigned long mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_driver_alloc_t {
|
struct sep_driver_alloc_t {
|
||||||
/* virtual address of allocated space */
|
/* virtual address of allocated space */
|
||||||
unsigned long offset;
|
unsigned long offset;
|
||||||
|
|
Loading…
Reference in a new issue