Commit a2171b68 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman
Browse files

Staging: sep: function shuffle



Shuffle the functions into a more normal order. Don't however change any of
them.

Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8f3aa57f
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -170,25 +170,6 @@ unsigned long jiffies_future;
    private functions
--------------------------------*/

/*
  function that is activated on the succesfull probe of the SEP device
*/
static int __devinit sep_probe(struct pci_dev *pdev, const struct pci_device_id *ent);

static struct pci_device_id sep_pci_id_tbl[] = {
	{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x080c)},
	{0}
};

MODULE_DEVICE_TABLE(pci, sep_pci_id_tbl);

/* field for registering driver to PCI device */
static struct pci_driver sep_pci_driver = {
	.name = "sep_sec_driver",
	.id_table = sep_pci_id_tbl,
	.probe = sep_probe
};

/*
  This functions locks the area of the resisnd and cache sep code
*/
@@ -453,6 +434,20 @@ end_function:
	return error;
}

static struct pci_device_id sep_pci_id_tbl[] = {
	{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x080c)},
	{0}
};

MODULE_DEVICE_TABLE(pci, sep_pci_id_tbl);

/* field for registering driver to PCI device */
static struct pci_driver sep_pci_driver = {
	.name = "sep_sec_driver",
	.id_table = sep_pci_id_tbl,
	.probe = sep_probe
};

/*
  this function registers th driver to
  the device subsystem( either PCI, USB, etc)
@@ -463,4 +458,3 @@ int sep_register_driver_to_device(void)
}

+175 −173
Original line number Diff line number Diff line
@@ -608,179 +608,6 @@ static int sep_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, u
}


/*
  this function registers the driver to the file system
*/
static int sep_register_driver_to_fs(void)
{
	int ret_val = alloc_chrdev_region(&g_sep_device_number, 0, 1, "sep_sec_driver");
	if (ret_val) {
		edbg("sep_driver:major number allocation failed, retval is %d\n", ret_val);
		goto end_function;
	}

	/* set the files operations structure */
	g_sep_fops.owner = THIS_MODULE;
	g_sep_fops.ioctl = sep_ioctl;
	g_sep_fops.poll = sep_poll;
	g_sep_fops.open = sep_open;
	g_sep_fops.release = sep_release;
	g_sep_fops.mmap = sep_mmap;

	/* init cdev */
	cdev_init(&g_sep_cdev, &g_sep_fops);
	g_sep_cdev.owner = THIS_MODULE;

	/* register the driver with the kernel */
	ret_val = cdev_add(&g_sep_cdev, g_sep_device_number, 1);

	if (ret_val) {
		edbg("sep_driver:cdev_add failed, retval is %d\n", ret_val);
		goto end_function_unregister_devnum;
	}

	goto end_function;

end_function_unregister_devnum:

	/* unregister dev numbers */
	unregister_chrdev_region(g_sep_device_number, 1);

end_function:
      return ret_val;
}

/*
  this function unregisters driver from fs
*/
static void sep_unregister_driver_from_fs(void)
{
	cdev_del(&g_sep_cdev);
	/* unregister dev numbers */
	unregister_chrdev_region(g_sep_device_number, 1);
}

/*--------------------------------------------------------------
  init function
----------------------------------------------------------------*/
static int __init sep_init(void)
{
	int ret_val = 0;
	int counter;
	int size;		/* size of memory for allocation */

	dbg("SEP Driver:-------->Init start\n");
	edbg("sep->shared_area_addr = %lx\n", (unsigned long) &sep_dev->shared_area_addr);

	/* transaction counter that coordinates the transactions between SEP
	and HOST */
	sep_dev->host_to_sep_send_counter = 0;

	/* counter for the messages from sep */
	sep_dev->sep_to_host_reply_counter = 0;

	/* counter for the number of bytes allocated in the pool
	for the current transaction */
	sep_dev->data_pool_bytes_allocated = 0;

	/* set the starting mode to blocking */
	sep_dev->block_mode_flag = 1;

	ret_val = sep_register_driver_to_device();
	if (ret_val) {
		edbg("sep_driver:sep_driver_to_device failed, ret_val is %d\n", ret_val);
		goto end_function_unregister_from_fs;
	}
	/* calculate the total size for allocation */
	size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES +
	    SEP_DRIVER_SYNCHRONIC_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES;

	/* allocate the shared area */
	if (sep_map_and_alloc_shared_area(size, &sep_dev->shared_area_addr, &sep_dev->phys_shared_area_addr)) {
		ret_val = -ENOMEM;
		/* allocation failed */
		goto end_function_unmap_io_memory;
	}
	/* now set the memory regions */
	sep_dev->message_shared_area_addr = sep_dev->shared_area_addr;

	edbg("SEP Driver: g_message_shared_area_addr is %08lx\n", sep_dev->message_shared_area_addr);

#if (SEP_DRIVER_RECONFIG_MESSAGE_AREA == 1)
	/* send the new SHARED MESSAGE AREA to the SEP */
	sep_write_reg(sep_dev, HW_HOST_HOST_SEP_GPR1_REG_ADDR, sep_dev->phys_shared_area_addr);

	/* poll for SEP response */
	retVal = sep_read_reg(sep_dev, HW_HOST_SEP_HOST_GPR1_REG_ADDR);
	while (retVal != 0xffffffff && retVal != sep_dev->phys_shared_area_addr)
		retVal = sep_read_reg(sep_dev, HW_HOST_SEP_HOST_GPR1_REG_ADDR);

	/* check the return value (register) */
	if (retVal != sep_dev->phys_shared_area_addr) {
		ret_val = -ENOMEM;
		goto end_function_deallocate_message_area;
	}
#endif
	/* init the flow contextes */
	for (counter = 0; counter < SEP_DRIVER_NUM_FLOWS; counter++)
		sep_dev->flows_data_array[counter].flow_id = SEP_FREE_FLOW_ID;

	sep_dev->flow_wq_ptr = create_singlethread_workqueue("sepflowwq");
	if (sep_dev->flow_wq_ptr == 0) {
		ret_val = -ENOMEM;
		edbg("sep_driver:flow queue creation failed\n");
		goto end_function_deallocate_sep_shared_area;
	}
	edbg("SEP Driver: create flow workqueue \n");

	/* register driver to fs */
	ret_val = sep_register_driver_to_fs();
	if (ret_val)
		goto end_function_deallocate_sep_shared_area;
	/* load the rom code */
	sep_load_rom_code();
	goto end_function;
end_function_unregister_from_fs:
	/* unregister from fs */
	sep_unregister_driver_from_fs();
end_function_deallocate_sep_shared_area:
	/* de-allocate shared area */
	sep_unmap_and_free_shared_area(size, sep_dev->shared_area_addr, sep_dev->phys_shared_area_addr);
end_function_unmap_io_memory:
	iounmap((void *) sep_dev->reg_base_address);
	/* release io memory region */
	release_mem_region(SEP_IO_MEM_REGION_START_ADDRESS, SEP_IO_MEM_REGION_SIZE);
end_function:
	dbg("SEP Driver:<-------- Init end\n");
	return ret_val;
}


/*-------------------------------------------------------------
  exit function
--------------------------------------------------------------*/
static void __exit sep_exit(void)
{
	int size;

	dbg("SEP Driver:--------> Exit start\n");

	/* unregister from fs */
	sep_unregister_driver_from_fs();
	/* calculate the total size for de-allocation */
	size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES +
	    SEP_DRIVER_SYNCHRONIC_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES;
	/* free shared area  */
	sep_unmap_and_free_shared_area(size, sep_dev->shared_area_addr, sep_dev->phys_shared_area_addr);
	edbg("SEP Driver: free pages SEP SHARED AREA \n");
	iounmap((void *) sep_dev->reg_base_address);
	edbg("SEP Driver: iounmap \n");
	/* release io memory region */
	release_mem_region(SEP_IO_MEM_REGION_START_ADDRESS, SEP_IO_MEM_REGION_SIZE);
	edbg("SEP Driver: release_mem_region \n");
	dbg("SEP Driver:<-------- Exit end\n");
}


/*
  interrupt handler function
@@ -2629,6 +2456,181 @@ static void sep_configure_dma_burst(void)

}

/*
  this function registers the driver to the file system
*/
static int sep_register_driver_to_fs(void)
{
	int ret_val = alloc_chrdev_region(&g_sep_device_number, 0, 1, "sep_sec_driver");
	if (ret_val) {
		edbg("sep_driver:major number allocation failed, retval is %d\n", ret_val);
		goto end_function;
	}

	/* set the files operations structure */
	g_sep_fops.owner = THIS_MODULE;
	g_sep_fops.ioctl = sep_ioctl;
	g_sep_fops.poll = sep_poll;
	g_sep_fops.open = sep_open;
	g_sep_fops.release = sep_release;
	g_sep_fops.mmap = sep_mmap;

	/* init cdev */
	cdev_init(&g_sep_cdev, &g_sep_fops);
	g_sep_cdev.owner = THIS_MODULE;

	/* register the driver with the kernel */
	ret_val = cdev_add(&g_sep_cdev, g_sep_device_number, 1);

	if (ret_val) {
		edbg("sep_driver:cdev_add failed, retval is %d\n", ret_val);
		goto end_function_unregister_devnum;
	}

	goto end_function;

end_function_unregister_devnum:

	/* unregister dev numbers */
	unregister_chrdev_region(g_sep_device_number, 1);

end_function:
      return ret_val;
}

/*
  this function unregisters driver from fs
*/
static void sep_unregister_driver_from_fs(void)
{
	cdev_del(&g_sep_cdev);
	/* unregister dev numbers */
	unregister_chrdev_region(g_sep_device_number, 1);
}


/*--------------------------------------------------------------
  init function
----------------------------------------------------------------*/
static int __init sep_init(void)
{
	int ret_val = 0;
	int counter;
	int size;		/* size of memory for allocation */

	dbg("SEP Driver:-------->Init start\n");
	edbg("sep->shared_area_addr = %lx\n", (unsigned long) &sep_dev->shared_area_addr);

	/* transaction counter that coordinates the transactions between SEP
	and HOST */
	sep_dev->host_to_sep_send_counter = 0;

	/* counter for the messages from sep */
	sep_dev->sep_to_host_reply_counter = 0;

	/* counter for the number of bytes allocated in the pool
	for the current transaction */
	sep_dev->data_pool_bytes_allocated = 0;

	/* set the starting mode to blocking */
	sep_dev->block_mode_flag = 1;

	ret_val = sep_register_driver_to_device();
	if (ret_val) {
		edbg("sep_driver:sep_driver_to_device failed, ret_val is %d\n", ret_val);
		goto end_function_unregister_from_fs;
	}
	/* calculate the total size for allocation */
	size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES +
	    SEP_DRIVER_SYNCHRONIC_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES;

	/* allocate the shared area */
	if (sep_map_and_alloc_shared_area(size, &sep_dev->shared_area_addr, &sep_dev->phys_shared_area_addr)) {
		ret_val = -ENOMEM;
		/* allocation failed */
		goto end_function_unmap_io_memory;
	}
	/* now set the memory regions */
	sep_dev->message_shared_area_addr = sep_dev->shared_area_addr;

	edbg("SEP Driver: g_message_shared_area_addr is %08lx\n", sep_dev->message_shared_area_addr);

#if (SEP_DRIVER_RECONFIG_MESSAGE_AREA == 1)
	/* send the new SHARED MESSAGE AREA to the SEP */
	sep_write_reg(sep_dev, HW_HOST_HOST_SEP_GPR1_REG_ADDR, sep_dev->phys_shared_area_addr);

	/* poll for SEP response */
	retVal = sep_read_reg(sep_dev, HW_HOST_SEP_HOST_GPR1_REG_ADDR);
	while (retVal != 0xffffffff && retVal != sep_dev->phys_shared_area_addr)
		retVal = sep_read_reg(sep_dev, HW_HOST_SEP_HOST_GPR1_REG_ADDR);

	/* check the return value (register) */
	if (retVal != sep_dev->phys_shared_area_addr) {
		ret_val = -ENOMEM;
		goto end_function_deallocate_message_area;
	}
#endif
	/* init the flow contextes */
	for (counter = 0; counter < SEP_DRIVER_NUM_FLOWS; counter++)
		sep_dev->flows_data_array[counter].flow_id = SEP_FREE_FLOW_ID;

	sep_dev->flow_wq_ptr = create_singlethread_workqueue("sepflowwq");
	if (sep_dev->flow_wq_ptr == 0) {
		ret_val = -ENOMEM;
		edbg("sep_driver:flow queue creation failed\n");
		goto end_function_deallocate_sep_shared_area;
	}
	edbg("SEP Driver: create flow workqueue \n");

	/* register driver to fs */
	ret_val = sep_register_driver_to_fs();
	if (ret_val)
		goto end_function_deallocate_sep_shared_area;
	/* load the rom code */
	sep_load_rom_code();
	goto end_function;
end_function_unregister_from_fs:
	/* unregister from fs */
	sep_unregister_driver_from_fs();
end_function_deallocate_sep_shared_area:
	/* de-allocate shared area */
	sep_unmap_and_free_shared_area(size, sep_dev->shared_area_addr, sep_dev->phys_shared_area_addr);
end_function_unmap_io_memory:
	iounmap((void *) sep_dev->reg_base_address);
	/* release io memory region */
	release_mem_region(SEP_IO_MEM_REGION_START_ADDRESS, SEP_IO_MEM_REGION_SIZE);
end_function:
	dbg("SEP Driver:<-------- Init end\n");
	return ret_val;
}


/*-------------------------------------------------------------
  exit function
--------------------------------------------------------------*/
static void __exit sep_exit(void)
{
	int size;

	dbg("SEP Driver:--------> Exit start\n");

	/* unregister from fs */
	sep_unregister_driver_from_fs();
	/* calculate the total size for de-allocation */
	size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES +
	    SEP_DRIVER_SYNCHRONIC_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES;
	/* free shared area  */
	sep_unmap_and_free_shared_area(size, sep_dev->shared_area_addr, sep_dev->phys_shared_area_addr);
	edbg("SEP Driver: free pages SEP SHARED AREA \n");
	iounmap((void *) sep_dev->reg_base_address);
	edbg("SEP Driver: iounmap \n");
	/* release io memory region */
	release_mem_region(SEP_IO_MEM_REGION_START_ADDRESS, SEP_IO_MEM_REGION_SIZE);
	edbg("SEP Driver: release_mem_region \n");
	dbg("SEP Driver:<-------- Exit end\n");
}


module_init(sep_init);
module_exit(sep_exit);