Commit 88c8a377 authored by Todd Poynor's avatar Todd Poynor Committed by Greg Kroah-Hartman
Browse files

staging: gasket: core: fix function param line continuation style



Fix multi-line alignment formatting to look like:
      int ret = long_function_name(device, VARIABLE1, VARIABLE2,
                                   VARIABLE3, VARIABLE4);

Signed-off-by: default avatarTodd Poynor <toddpoynor@google.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6d2bd645
Loading
Loading
Loading
Loading
+145 −149
Original line number Original line Diff line number Diff line
@@ -103,8 +103,9 @@ enum gasket_sysfs_attribute_type {
};
};


/* Perform a standard Gasket callback. */
/* Perform a standard Gasket callback. */
static inline int check_and_invoke_callback(
static inline int
	struct gasket_dev *gasket_dev, int (*cb_function)(struct gasket_dev *))
check_and_invoke_callback(struct gasket_dev *gasket_dev,
			  int (*cb_function)(struct gasket_dev *))
{
{
	int ret = 0;
	int ret = 0;


@@ -119,8 +120,9 @@ static inline int check_and_invoke_callback(
}
}


/* Perform a standard Gasket callback without grabbing gasket_dev->mutex. */
/* Perform a standard Gasket callback without grabbing gasket_dev->mutex. */
static inline int gasket_check_and_invoke_callback_nolock(
static inline int
	struct gasket_dev *gasket_dev, int (*cb_function)(struct gasket_dev *))
gasket_check_and_invoke_callback_nolock(struct gasket_dev *gasket_dev,
					int (*cb_function)(struct gasket_dev *))
{
{
	int ret = 0;
	int ret = 0;


@@ -147,8 +149,8 @@ static int gasket_owned_by_current_tgid(struct gasket_cdev_info *info)
 *
 *
 * Returns the located slot number on success or a negative number on failure.
 * Returns the located slot number on success or a negative number on failure.
 */
 */
static int gasket_find_dev_slot(
static int gasket_find_dev_slot(struct gasket_internal_desc *internal_desc,
	struct gasket_internal_desc *internal_desc, const char *kobj_name)
				const char *kobj_name)
{
{
	int i;
	int i;


@@ -186,9 +188,9 @@ static int gasket_find_dev_slot(
 *
 *
 * Returns 0 if successful, a negative error code otherwise.
 * Returns 0 if successful, a negative error code otherwise.
 */
 */
static int gasket_alloc_dev(
static int gasket_alloc_dev(struct gasket_internal_desc *internal_desc,
	struct gasket_internal_desc *internal_desc, struct device *parent,
			    struct device *parent, struct gasket_dev **pdev,
	struct gasket_dev **pdev, const char *kobj_name)
			    const char *kobj_name)
{
{
	int dev_idx;
	int dev_idx;
	const struct gasket_driver_desc *driver_desc =
	const struct gasket_driver_desc *driver_desc =
@@ -371,8 +373,8 @@ static void gasket_unmap_pci_bar(struct gasket_dev *dev, int bar_num)
 *
 *
 * Returns 0 on success and a negative value otherwise.
 * Returns 0 on success and a negative value otherwise.
 */
 */
static int gasket_setup_pci(
static int gasket_setup_pci(struct pci_dev *pci_dev,
	struct pci_dev *pci_dev, struct gasket_dev *gasket_dev)
			    struct gasket_dev *gasket_dev)
{
{
	int i, mapped_bars, ret;
	int i, mapped_bars, ret;


@@ -421,8 +423,8 @@ static int gasket_get_hw_status(struct gasket_dev *gasket_dev)
	const struct gasket_driver_desc *driver_desc =
	const struct gasket_driver_desc *driver_desc =
		gasket_dev->internal_desc->driver_desc;
		gasket_dev->internal_desc->driver_desc;


	status = gasket_check_and_invoke_callback_nolock(
	status = gasket_check_and_invoke_callback_nolock(gasket_dev,
		gasket_dev, driver_desc->device_status_cb);
							 driver_desc->device_status_cb);
	if (status != GASKET_STATUS_ALIVE) {
	if (status != GASKET_STATUS_ALIVE) {
		dev_dbg(gasket_dev->dev, "Hardware reported status %d.\n",
		dev_dbg(gasket_dev->dev, "Hardware reported status %d.\n",
			status);
			status);
@@ -437,8 +439,7 @@ static int gasket_get_hw_status(struct gasket_dev *gasket_dev)
	}
	}


	for (i = 0; i < driver_desc->num_page_tables; ++i) {
	for (i = 0; i < driver_desc->num_page_tables; ++i) {
		status = gasket_page_table_system_status(
		status = gasket_page_table_system_status(gasket_dev->page_table[i]);
			gasket_dev->page_table[i]);
		if (status != GASKET_STATUS_ALIVE) {
		if (status != GASKET_STATUS_ALIVE) {
			dev_dbg(gasket_dev->dev,
			dev_dbg(gasket_dev->dev,
				"Page table %d reported status %d.\n",
				"Page table %d reported status %d.\n",
@@ -450,8 +451,10 @@ static int gasket_get_hw_status(struct gasket_dev *gasket_dev)
	return GASKET_STATUS_ALIVE;
	return GASKET_STATUS_ALIVE;
}
}


static ssize_t gasket_write_mappable_regions(
static ssize_t
	char *buf, const struct gasket_driver_desc *driver_desc, int bar_index)
gasket_write_mappable_regions(char *buf,
			      const struct gasket_driver_desc *driver_desc,
			      int bar_index)
{
{
	int i;
	int i;
	ssize_t written;
	ssize_t written;
@@ -478,8 +481,8 @@ static ssize_t gasket_write_mappable_regions(
	return total_written;
	return total_written;
}
}


static ssize_t gasket_sysfs_data_show(
static ssize_t gasket_sysfs_data_show(struct device *device,
	struct device *device, struct device_attribute *attr, char *buf)
				      struct device_attribute *attr, char *buf)
{
{
	int i, ret = 0;
	int i, ret = 0;
	ssize_t current_written = 0;
	ssize_t current_written = 0;
@@ -532,45 +535,39 @@ static ssize_t gasket_sysfs_data_show(
		}
		}
		break;
		break;
	case ATTR_DRIVER_VERSION:
	case ATTR_DRIVER_VERSION:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%s\n",
			buf, PAGE_SIZE, "%s\n",
			       gasket_dev->internal_desc->driver_desc->driver_version);
			       gasket_dev->internal_desc->driver_desc->driver_version);
		break;
		break;
	case ATTR_FRAMEWORK_VERSION:
	case ATTR_FRAMEWORK_VERSION:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%s\n",
			buf, PAGE_SIZE, "%s\n", GASKET_FRAMEWORK_VERSION);
			       GASKET_FRAMEWORK_VERSION);
		break;
		break;
	case ATTR_DEVICE_TYPE:
	case ATTR_DEVICE_TYPE:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%s\n",
			buf, PAGE_SIZE, "%s\n",
			       gasket_dev->internal_desc->driver_desc->name);
			       gasket_dev->internal_desc->driver_desc->name);
		break;
		break;
	case ATTR_HARDWARE_REVISION:
	case ATTR_HARDWARE_REVISION:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%d\n",
			buf, PAGE_SIZE, "%d\n", gasket_dev->hardware_revision);
			       gasket_dev->hardware_revision);
		break;
		break;
	case ATTR_PCI_ADDRESS:
	case ATTR_PCI_ADDRESS:
		ret = snprintf(buf, PAGE_SIZE, "%s\n", gasket_dev->kobj_name);
		ret = snprintf(buf, PAGE_SIZE, "%s\n", gasket_dev->kobj_name);
		break;
		break;
	case ATTR_STATUS:
	case ATTR_STATUS:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%s\n",
			buf, PAGE_SIZE, "%s\n",
			       gasket_num_name_lookup(gasket_dev->status,
			gasket_num_name_lookup(
						      gasket_status_name_table));
				gasket_dev->status, gasket_status_name_table));
		break;
		break;
	case ATTR_IS_DEVICE_OWNED:
	case ATTR_IS_DEVICE_OWNED:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%d\n",
			buf, PAGE_SIZE, "%d\n",
			       gasket_dev->dev_info.ownership.is_owned);
			       gasket_dev->dev_info.ownership.is_owned);
		break;
		break;
	case ATTR_DEVICE_OWNER:
	case ATTR_DEVICE_OWNER:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%d\n",
			buf, PAGE_SIZE, "%d\n",
			       gasket_dev->dev_info.ownership.owner);
			       gasket_dev->dev_info.ownership.owner);
		break;
		break;
	case ATTR_WRITE_OPEN_COUNT:
	case ATTR_WRITE_OPEN_COUNT:
		ret = snprintf(
		ret = snprintf(buf, PAGE_SIZE, "%d\n",
			buf, PAGE_SIZE, "%d\n",
			       gasket_dev->dev_info.ownership.write_open_count);
			       gasket_dev->dev_info.ownership.write_open_count);
		break;
		break;
	case ATTR_RESET_COUNT:
	case ATTR_RESET_COUNT:
@@ -578,8 +575,9 @@ static ssize_t gasket_sysfs_data_show(
		break;
		break;
	case ATTR_USER_MEM_RANGES:
	case ATTR_USER_MEM_RANGES:
		for (i = 0; i < GASKET_NUM_BARS; ++i) {
		for (i = 0; i < GASKET_NUM_BARS; ++i) {
			current_written = gasket_write_mappable_regions(
			current_written =
				buf, driver_desc, i);
				gasket_write_mappable_regions(buf, driver_desc,
							      i);
			buf += current_written;
			buf += current_written;
			ret += current_written;
			ret += current_written;
		}
		}
@@ -622,9 +620,9 @@ static const struct gasket_sysfs_attribute gasket_sysfs_generic_attrs[] = {
};
};


/* Add a char device and related info. */
/* Add a char device and related info. */
static int gasket_add_cdev(
static int gasket_add_cdev(struct gasket_cdev_info *dev_info,
	struct gasket_cdev_info *dev_info,
			   const struct file_operations *file_ops,
	const struct file_operations *file_ops, struct module *owner)
			   struct module *owner)
{
{
	int ret;
	int ret;


@@ -672,8 +670,8 @@ static void gasket_disable_dev(struct gasket_dev *gasket_dev)
 * Precondition: Called with g_mutex held (to avoid a race on return).
 * Precondition: Called with g_mutex held (to avoid a race on return).
 * Returns NULL if no matching device was found.
 * Returns NULL if no matching device was found.
 */
 */
static struct gasket_internal_desc *lookup_internal_desc(
static struct gasket_internal_desc *
	struct pci_dev *pci_dev)
lookup_internal_desc(struct pci_dev *pci_dev)
{
{
	int i;
	int i;


@@ -693,8 +691,8 @@ static struct gasket_internal_desc *lookup_internal_desc(
 * that the provided descriptor/range is of adequate size to hold the range to
 * that the provided descriptor/range is of adequate size to hold the range to
 * be mapped.
 * be mapped.
 */
 */
static bool gasket_mmap_has_permissions(
static bool gasket_mmap_has_permissions(struct gasket_dev *gasket_dev,
	struct gasket_dev *gasket_dev, struct vm_area_struct *vma,
					struct vm_area_struct *vma,
					int bar_permissions)
					int bar_permissions)
{
{
	int requested_permissions;
	int requested_permissions;
@@ -735,8 +733,9 @@ static bool gasket_mmap_has_permissions(
 * Verifies that the input address is within the region allocated to coherent
 * Verifies that the input address is within the region allocated to coherent
 * buffer.
 * buffer.
 */
 */
static bool gasket_is_coherent_region(
static bool
	const struct gasket_driver_desc *driver_desc, ulong address)
gasket_is_coherent_region(const struct gasket_driver_desc *driver_desc,
			  ulong address)
{
{
	struct gasket_coherent_buffer_desc coh_buff_desc =
	struct gasket_coherent_buffer_desc coh_buff_desc =
		driver_desc->coherent_buffer_description;
		driver_desc->coherent_buffer_description;
@@ -750,8 +749,8 @@ static bool gasket_is_coherent_region(
	return false;
	return false;
}
}


static int gasket_get_bar_index(
static int gasket_get_bar_index(const struct gasket_dev *gasket_dev,
	const struct gasket_dev *gasket_dev, ulong phys_addr)
				ulong phys_addr)
{
{
	int i;
	int i;
	const struct gasket_driver_desc *driver_desc;
	const struct gasket_driver_desc *driver_desc;
@@ -786,9 +785,10 @@ static int gasket_get_bar_index(
 *
 *
 * Returns true if there's anything to map, and false otherwise.
 * Returns true if there's anything to map, and false otherwise.
 */
 */
static bool gasket_mm_get_mapping_addrs(
static bool
	const struct gasket_mappable_region *region, ulong bar_offset,
gasket_mm_get_mapping_addrs(const struct gasket_mappable_region *region,
	ulong requested_length, struct gasket_mappable_region *mappable_region,
			    ulong bar_offset, ulong requested_length,
			    struct gasket_mappable_region *mappable_region,
			    ulong *virt_offset)
			    ulong *virt_offset)
{
{
	ulong range_start = region->start;
	ulong range_start = region->start;
@@ -835,8 +835,8 @@ static bool gasket_mm_get_mapping_addrs(
		 */
		 */
		mappable_region->start = bar_offset;
		mappable_region->start = bar_offset;
		*virt_offset = 0;
		*virt_offset = 0;
		mappable_region->length_bytes = min(
		mappable_region->length_bytes =
			requested_length, range_end - bar_offset);
			min(requested_length, range_end - bar_offset);
		return true;
		return true;
	}
	}


@@ -852,8 +852,8 @@ static bool gasket_mm_get_mapping_addrs(
 * The offset is written into bar_offset on success.
 * The offset is written into bar_offset on success.
 * Returns zero on success, anything else on error.
 * Returns zero on success, anything else on error.
 */
 */
static int gasket_mm_vma_bar_offset(
static int gasket_mm_vma_bar_offset(const struct gasket_dev *gasket_dev,
	const struct gasket_dev *gasket_dev, const struct vm_area_struct *vma,
				    const struct vm_area_struct *vma,
				    ulong *bar_offset)
				    ulong *bar_offset)
{
{
	ulong raw_offset;
	ulong raw_offset;
@@ -877,8 +877,8 @@ static int gasket_mm_vma_bar_offset(
	return 0;
	return 0;
}
}


int gasket_mm_unmap_region(
int gasket_mm_unmap_region(const struct gasket_dev *gasket_dev,
	const struct gasket_dev *gasket_dev, struct vm_area_struct *vma,
			   struct vm_area_struct *vma,
			   const struct gasket_mappable_region *map_region)
			   const struct gasket_mappable_region *map_region)
{
{
	ulong bar_offset;
	ulong bar_offset;
@@ -893,8 +893,8 @@ int gasket_mm_unmap_region(
	if (ret)
	if (ret)
		return ret;
		return ret;


	if (!gasket_mm_get_mapping_addrs(
	if (!gasket_mm_get_mapping_addrs(map_region, bar_offset,
		map_region, bar_offset, vma->vm_end - vma->vm_start,
					 vma->vm_end - vma->vm_start,
					 &mappable_region, &virt_offset))
					 &mappable_region, &virt_offset))
		return 1;
		return 1;


@@ -904,8 +904,7 @@ int gasket_mm_unmap_region(
	 *
	 *
	 * Next multiple of y: ceil_div(x, y) * y
	 * Next multiple of y: ceil_div(x, y) * y
	 */
	 */
	zap_vma_ptes(
	zap_vma_ptes(vma, vma->vm_start + virt_offset,
		vma, vma->vm_start + virt_offset,
		     DIV_ROUND_UP(mappable_region.length_bytes, PAGE_SIZE) *
		     DIV_ROUND_UP(mappable_region.length_bytes, PAGE_SIZE) *
		     PAGE_SIZE);
		     PAGE_SIZE);
	return 0;
	return 0;
@@ -913,8 +912,8 @@ int gasket_mm_unmap_region(
EXPORT_SYMBOL(gasket_mm_unmap_region);
EXPORT_SYMBOL(gasket_mm_unmap_region);


/* Maps a virtual address + range to a physical offset of a BAR. */
/* Maps a virtual address + range to a physical offset of a BAR. */
static enum do_map_region_status do_map_region(
static enum do_map_region_status
	const struct gasket_dev *gasket_dev, struct vm_area_struct *vma,
do_map_region(const struct gasket_dev *gasket_dev, struct vm_area_struct *vma,
	      struct gasket_mappable_region *mappable_region)
	      struct gasket_mappable_region *mappable_region)
{
{
	/* Maximum size of a single call to io_remap_pfn_range. */
	/* Maximum size of a single call to io_remap_pfn_range. */
@@ -944,8 +943,7 @@ static enum do_map_region_status do_map_region(


	virt_base = vma->vm_start + virt_offset;
	virt_base = vma->vm_start + virt_offset;
	bar_index =
	bar_index =
		gasket_get_bar_index(
		gasket_get_bar_index(gasket_dev,
			gasket_dev,
				     (vma->vm_pgoff << PAGE_SHIFT) +
				     (vma->vm_pgoff << PAGE_SHIFT) +
				     driver_desc->legacy_mmap_address_offset);
				     driver_desc->legacy_mmap_address_offset);
	phys_base = gasket_dev->bar_data[bar_index].phys_base + phys_offset;
	phys_base = gasket_dev->bar_data[bar_index].phys_base + phys_offset;
@@ -957,10 +955,10 @@ static enum do_map_region_status do_map_region(
		chunk_size = min(max_chunk_size, map_length - mapped_bytes);
		chunk_size = min(max_chunk_size, map_length - mapped_bytes);


		cond_resched();
		cond_resched();
		ret = io_remap_pfn_range(
		ret = io_remap_pfn_range(vma, virt_base + mapped_bytes,
			vma, virt_base + mapped_bytes,
					 (phys_base + mapped_bytes) >>
			(phys_base + mapped_bytes) >> PAGE_SHIFT,
					 PAGE_SHIFT, chunk_size,
			chunk_size, vma->vm_page_prot);
					 vma->vm_page_prot);
		if (ret) {
		if (ret) {
			dev_err(gasket_dev->dev,
			dev_err(gasket_dev->dev,
				"Error remapping PFN range.\n");
				"Error remapping PFN range.\n");
@@ -984,8 +982,8 @@ static enum do_map_region_status do_map_region(
}
}


/* Map a region of coherent memory. */
/* Map a region of coherent memory. */
static int gasket_mmap_coherent(
static int gasket_mmap_coherent(struct gasket_dev *gasket_dev,
	struct gasket_dev *gasket_dev, struct vm_area_struct *vma)
				struct vm_area_struct *vma)
{
{
	const struct gasket_driver_desc *driver_desc =
	const struct gasket_driver_desc *driver_desc =
		gasket_dev->internal_desc->driver_desc;
		gasket_dev->internal_desc->driver_desc;
@@ -1008,10 +1006,9 @@ static int gasket_mmap_coherent(


	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);


	ret = remap_pfn_range(
	ret = remap_pfn_range(vma, vma->vm_start,
		vma, vma->vm_start,
			      (gasket_dev->coherent_buffer.phys_base) >>
		(gasket_dev->coherent_buffer.phys_base) >> PAGE_SHIFT,
			      PAGE_SHIFT, requested_length, vma->vm_page_prot);
		requested_length, vma->vm_page_prot);
	if (ret) {
	if (ret) {
		dev_err(gasket_dev->dev, "Error remapping PFN range err=%d.\n",
		dev_err(gasket_dev->dev, "Error remapping PFN range err=%d.\n",
			ret);
			ret);
@@ -1022,9 +1019,9 @@ static int gasket_mmap_coherent(
	/* Record the user virtual to dma_address mapping that was
	/* Record the user virtual to dma_address mapping that was
	 * created by the kernel.
	 * created by the kernel.
	 */
	 */
	gasket_set_user_virt(
	gasket_set_user_virt(gasket_dev, requested_length,
		gasket_dev, requested_length,
			     gasket_dev->coherent_buffer.phys_base,
		gasket_dev->coherent_buffer.phys_base, vma->vm_start);
			     vma->vm_start);
	return 0;
	return 0;
}
}


@@ -1058,8 +1055,8 @@ static int gasket_mmap(struct file *filp, struct vm_area_struct *vma)
	raw_offset = (vma->vm_pgoff << PAGE_SHIFT) +
	raw_offset = (vma->vm_pgoff << PAGE_SHIFT) +
		driver_desc->legacy_mmap_address_offset;
		driver_desc->legacy_mmap_address_offset;
	vma_size = vma->vm_end - vma->vm_start;
	vma_size = vma->vm_end - vma->vm_start;
	trace_gasket_mmap_entry(
	trace_gasket_mmap_entry(gasket_dev->dev_info.name, raw_offset,
		gasket_dev->dev_info.name, raw_offset, vma_size);
				vma_size);


	/*
	/*
	 * Check if the raw offset is within a bar region. If not, check if it
	 * Check if the raw offset is within a bar region. If not, check if it
@@ -1103,8 +1100,10 @@ static int gasket_mmap(struct file *filp, struct vm_area_struct *vma)
	}
	}


	if (driver_desc->get_mappable_regions_cb) {
	if (driver_desc->get_mappable_regions_cb) {
		ret = driver_desc->get_mappable_regions_cb(
		ret = driver_desc->get_mappable_regions_cb(gasket_dev,
			gasket_dev, bar_index, &map_regions, &num_map_regions);
							   bar_index,
							   &map_regions,
							   &num_map_regions);
		if (ret)
		if (ret)
			return ret;
			return ret;
	} else {
	} else {
@@ -1231,8 +1230,8 @@ static int gasket_open(struct inode *inode, struct file *filp)


	/* If the node is not owned, assign it to the current TGID. */
	/* If the node is not owned, assign it to the current TGID. */
	if (!ownership->is_owned) {
	if (!ownership->is_owned) {
		ret = gasket_check_and_invoke_callback_nolock(
		ret = gasket_check_and_invoke_callback_nolock(gasket_dev,
			gasket_dev, driver_desc->device_open_cb);
							      driver_desc->device_open_cb);
		if (ret) {
		if (ret) {
			dev_err(gasket_dev->dev,
			dev_err(gasket_dev->dev,
				"Error in device open cb: %d\n", ret);
				"Error in device open cb: %d\n", ret);
@@ -1298,16 +1297,14 @@ static int gasket_release(struct inode *inode, struct file *file)
			driver_desc->device_reset_cb(gasket_dev, 0);
			driver_desc->device_reset_cb(gasket_dev, 0);


			for (i = 0; i < driver_desc->num_page_tables; ++i) {
			for (i = 0; i < driver_desc->num_page_tables; ++i) {
				gasket_page_table_unmap_all(
				gasket_page_table_unmap_all(gasket_dev->page_table[i]);
					gasket_dev->page_table[i]);
				gasket_page_table_garbage_collect(gasket_dev->page_table[i]);
				gasket_page_table_garbage_collect(
					gasket_dev->page_table[i]);
				gasket_free_coherent_memory_all(gasket_dev, i);
				gasket_free_coherent_memory_all(gasket_dev, i);
			}
			}


			/* Closes device, enters power save. */
			/* Closes device, enters power save. */
			gasket_check_and_invoke_callback_nolock(
			gasket_check_and_invoke_callback_nolock(gasket_dev,
				gasket_dev, driver_desc->device_close_cb);
								driver_desc->device_close_cb);
		}
		}
	}
	}


@@ -1367,8 +1364,7 @@ static const struct file_operations gasket_file_ops = {
};
};


/* Perform final init and marks the device as active. */
/* Perform final init and marks the device as active. */
static int gasket_enable_dev(
static int gasket_enable_dev(struct gasket_internal_desc *internal_desc,
	struct gasket_internal_desc *internal_desc,
			     struct gasket_dev *gasket_dev)
			     struct gasket_dev *gasket_dev)
{
{
	int tbl_idx;
	int tbl_idx;
@@ -1376,10 +1372,11 @@ static int gasket_enable_dev(
	const struct gasket_driver_desc *driver_desc =
	const struct gasket_driver_desc *driver_desc =
		internal_desc->driver_desc;
		internal_desc->driver_desc;


	ret = gasket_interrupt_init(
	ret = gasket_interrupt_init(gasket_dev, driver_desc->name,
		gasket_dev, driver_desc->name,
				    driver_desc->interrupt_type,
		driver_desc->interrupt_type, driver_desc->interrupts,
				    driver_desc->interrupts,
		driver_desc->num_interrupts, driver_desc->interrupt_pack_width,
				    driver_desc->num_interrupts,
				    driver_desc->interrupt_pack_width,
				    driver_desc->interrupt_bar_index,
				    driver_desc->interrupt_bar_index,
				    driver_desc->wire_interrupt_offsets);
				    driver_desc->wire_interrupt_offsets);
	if (ret) {
	if (ret) {
@@ -1392,12 +1389,11 @@ static int gasket_enable_dev(
	for (tbl_idx = 0; tbl_idx < driver_desc->num_page_tables; tbl_idx++) {
	for (tbl_idx = 0; tbl_idx < driver_desc->num_page_tables; tbl_idx++) {
		dev_dbg(gasket_dev->dev, "Initializing page table %d.\n",
		dev_dbg(gasket_dev->dev, "Initializing page table %d.\n",
			tbl_idx);
			tbl_idx);
		ret = gasket_page_table_init(
		ret = gasket_page_table_init(&gasket_dev->page_table[tbl_idx],
			&gasket_dev->page_table[tbl_idx],
					     &gasket_dev->bar_data[driver_desc->page_table_bar_index],
			&gasket_dev->bar_data[
				driver_desc->page_table_bar_index],
					     &driver_desc->page_table_configs[tbl_idx],
					     &driver_desc->page_table_configs[tbl_idx],
			gasket_dev->dev, gasket_dev->pci_dev);
					     gasket_dev->dev,
					     gasket_dev->pci_dev);
		if (ret) {
		if (ret) {
			dev_err(gasket_dev->dev,
			dev_err(gasket_dev->dev,
				"Couldn't init page table %d: %d\n",
				"Couldn't init page table %d: %d\n",
@@ -1415,8 +1411,8 @@ static int gasket_enable_dev(
	 * hardware_revision_cb returns a positive integer (the rev) if
	 * hardware_revision_cb returns a positive integer (the rev) if
	 * successful.)
	 * successful.)
	 */
	 */
	ret = check_and_invoke_callback(
	ret = check_and_invoke_callback(gasket_dev,
		gasket_dev, driver_desc->hardware_revision_cb);
					driver_desc->hardware_revision_cb);
	if (ret < 0) {
	if (ret < 0) {
		dev_err(gasket_dev->dev,
		dev_err(gasket_dev->dev,
			"Error getting hardware revision: %d\n", ret);
			"Error getting hardware revision: %d\n", ret);
@@ -1436,8 +1432,8 @@ static int gasket_enable_dev(
	if (gasket_dev->status == GASKET_STATUS_DEAD)
	if (gasket_dev->status == GASKET_STATUS_DEAD)
		dev_err(gasket_dev->dev, "Device reported as unhealthy.\n");
		dev_err(gasket_dev->dev, "Device reported as unhealthy.\n");


	ret = gasket_add_cdev(
	ret = gasket_add_cdev(&gasket_dev->dev_info, &gasket_file_ops,
		&gasket_dev->dev_info, &gasket_file_ops, driver_desc->module);
			      driver_desc->module);
	if (ret)
	if (ret)
		return ret;
		return ret;


@@ -1452,8 +1448,8 @@ static int gasket_enable_dev(
 *
 *
 * Returns 0 if successful and a negative value otherwise.
 * Returns 0 if successful and a negative value otherwise.
 */
 */
static int gasket_pci_probe(
static int gasket_pci_probe(struct pci_dev *pci_dev,
	struct pci_dev *pci_dev, const struct pci_device_id *id)
			    const struct pci_device_id *id)
{
{
	int ret;
	int ret;
	const char *kobj_name = dev_name(&pci_dev->dev);
	const char *kobj_name = dev_name(&pci_dev->dev);
@@ -1497,8 +1493,8 @@ static int gasket_pci_probe(
		goto fail2;
		goto fail2;
	}
	}


	ret = gasket_sysfs_create_mapping(
	ret = gasket_sysfs_create_mapping(gasket_dev->dev_info.device,
		gasket_dev->dev_info.device, gasket_dev);
					  gasket_dev);
	if (ret)
	if (ret)
		goto fail3;
		goto fail3;


@@ -1513,13 +1509,13 @@ static int gasket_pci_probe(
			"Cannot create sysfs pci link: %d\n", ret);
			"Cannot create sysfs pci link: %d\n", ret);
		goto fail3;
		goto fail3;
	}
	}
	ret = gasket_sysfs_create_entries(
	ret = gasket_sysfs_create_entries(gasket_dev->dev_info.device,
		gasket_dev->dev_info.device, gasket_sysfs_generic_attrs);
					  gasket_sysfs_generic_attrs);
	if (ret)
	if (ret)
		goto fail4;
		goto fail4;


	ret = check_and_invoke_callback(
	ret = check_and_invoke_callback(gasket_dev,
		gasket_dev, driver_desc->sysfs_setup_cb);
					driver_desc->sysfs_setup_cb);
	if (ret) {
	if (ret) {
		dev_err(gasket_dev->dev, "Error in sysfs setup cb: %d\n", ret);
		dev_err(gasket_dev->dev, "Error in sysfs setup cb: %d\n", ret);
		goto fail5;
		goto fail5;
@@ -1611,8 +1607,8 @@ static void gasket_pci_remove(struct pci_dev *pci_dev)
 *
 *
 *		The table must have a NULL name pointer at the end.
 *		The table must have a NULL name pointer at the end.
 */
 */
const char *gasket_num_name_lookup(
const char *gasket_num_name_lookup(uint num,
	uint num, const struct gasket_num_name *table)
				   const struct gasket_num_name *table)
{
{
	uint i = 0;
	uint i = 0;


@@ -1677,8 +1673,8 @@ int gasket_reset_nolock(struct gasket_dev *gasket_dev, uint reset_type)
}
}
EXPORT_SYMBOL(gasket_reset_nolock);
EXPORT_SYMBOL(gasket_reset_nolock);


gasket_ioctl_permissions_cb_t gasket_get_ioctl_permissions_cb(
gasket_ioctl_permissions_cb_t
	struct gasket_dev *gasket_dev)
gasket_get_ioctl_permissions_cb(struct gasket_dev *gasket_dev)
{
{
	return gasket_dev->internal_desc->driver_desc->ioctl_permissions_cb;
	return gasket_dev->internal_desc->driver_desc->ioctl_permissions_cb;
}
}
@@ -1713,8 +1709,8 @@ struct device *gasket_get_device(struct gasket_dev *dev)
 * Description: Busy waits for a specific combination of bits to be set on a
 * Description: Busy waits for a specific combination of bits to be set on a
 * Gasket register.
 * Gasket register.
 **/
 **/
int gasket_wait_with_reschedule(
int gasket_wait_with_reschedule(struct gasket_dev *gasket_dev, int bar,
	struct gasket_dev *gasket_dev, int bar, u64 offset, u64 mask, u64 val,
				u64 offset, u64 mask, u64 val,
				uint max_retries, u64 delay_ms)
				uint max_retries, u64 delay_ms)
{
{
	uint retries = 0;
	uint retries = 0;
@@ -1797,16 +1793,16 @@ int gasket_register_device(const struct gasket_driver_desc *driver_desc)
	 * depends on KBUILD_MODNAME, and this is a shared file.
	 * depends on KBUILD_MODNAME, and this is a shared file.
	 */
	 */
	pr_debug("Registering PCI driver.\n");
	pr_debug("Registering PCI driver.\n");
	ret = __pci_register_driver(
	ret = __pci_register_driver(&internal->pci, driver_desc->module,
		&internal->pci, driver_desc->module, driver_desc->name);
				    driver_desc->name);
	if (ret) {
	if (ret) {
		pr_err("cannot register pci driver [ret=%d]\n", ret);
		pr_err("cannot register pci driver [ret=%d]\n", ret);
		goto fail1;
		goto fail1;
	}
	}


	pr_debug("Registering char driver.\n");
	pr_debug("Registering char driver.\n");
	ret = register_chrdev_region(
	ret = register_chrdev_region(MKDEV(driver_desc->major,
		MKDEV(driver_desc->major, driver_desc->minor), GASKET_DEV_MAX,
					   driver_desc->minor), GASKET_DEV_MAX,
				     driver_desc->name);
				     driver_desc->name);
	if (ret) {
	if (ret) {
		pr_err("cannot register char driver [ret=%d]\n", ret);
		pr_err("cannot register char driver [ret=%d]\n", ret);
@@ -1853,8 +1849,8 @@ void gasket_unregister_device(const struct gasket_driver_desc *driver_desc)
		return;
		return;
	}
	}


	unregister_chrdev_region(
	unregister_chrdev_region(MKDEV(driver_desc->major, driver_desc->minor),
		MKDEV(driver_desc->major, driver_desc->minor), GASKET_DEV_MAX);
				 GASKET_DEV_MAX);


	pci_unregister_driver(&internal_desc->pci);
	pci_unregister_driver(&internal_desc->pci);


+34 −34
Original line number Original line Diff line number Diff line
@@ -318,11 +318,11 @@ struct gasket_dev {
};
};


/* Type of the ioctl handler callback. */
/* Type of the ioctl handler callback. */
typedef long (*gasket_ioctl_handler_cb_t)
typedef long (*gasket_ioctl_handler_cb_t)(struct file *file, uint cmd,
		(struct file *file, uint cmd, void __user *argp);
					  void __user *argp);
/* Type of the ioctl permissions check callback. See below. */
/* Type of the ioctl permissions check callback. See below. */
typedef int (*gasket_ioctl_permissions_cb_t)(
typedef int (*gasket_ioctl_permissions_cb_t)(struct file *filp, uint cmd,
	struct file *filp, uint cmd, void __user *argp);
					     void __user *argp);


/*
/*
 * Device type descriptor.
 * Device type descriptor.
@@ -457,8 +457,8 @@ struct gasket_driver_desc {
	 * descriptor for an open file is closed. This call is intended to
	 * descriptor for an open file is closed. This call is intended to
	 * handle any per-user or per-fd cleanup.
	 * handle any per-user or per-fd cleanup.
	 */
	 */
	int (*device_release_cb)(
	int (*device_release_cb)(struct gasket_dev *gasket_dev,
		struct gasket_dev *gasket_dev, struct file *file);
				 struct file *file);


	/*
	/*
	 * device_close_cb: Callback for when a device node is closed for the
	 * device_close_cb: Callback for when a device node is closed for the
@@ -527,8 +527,8 @@ struct gasket_driver_desc {
	 * information is then compared to mmap request to determine which
	 * information is then compared to mmap request to determine which
	 * regions to actually map.
	 * regions to actually map.
	 */
	 */
	int (*get_mappable_regions_cb)(
	int (*get_mappable_regions_cb)(struct gasket_dev *gasket_dev,
		struct gasket_dev *gasket_dev, int bar_index,
				       int bar_index,
				       struct gasket_mappable_region **mappable_regions,
				       struct gasket_mappable_region **mappable_regions,
				       int *num_mappable_regions);
				       int *num_mappable_regions);


@@ -631,16 +631,16 @@ int gasket_reset_nolock(struct gasket_dev *gasket_dev, uint reset_type);
 */
 */


/* Unmaps the specified mappable region from a VMA. */
/* Unmaps the specified mappable region from a VMA. */
int gasket_mm_unmap_region(
int gasket_mm_unmap_region(const struct gasket_dev *gasket_dev,
	const struct gasket_dev *gasket_dev, struct vm_area_struct *vma,
			   struct vm_area_struct *vma,
			   const struct gasket_mappable_region *map_region);
			   const struct gasket_mappable_region *map_region);


/*
/*
 * Get the ioctl permissions callback.
 * Get the ioctl permissions callback.
 * @gasket_dev: Gasket device structure.
 * @gasket_dev: Gasket device structure.
 */
 */
gasket_ioctl_permissions_cb_t gasket_get_ioctl_permissions_cb(
gasket_ioctl_permissions_cb_t
	struct gasket_dev *gasket_dev);
gasket_get_ioctl_permissions_cb(struct gasket_dev *gasket_dev);


/**
/**
 * Lookup a name by number in a num_name table.
 * Lookup a name by number in a num_name table.
@@ -648,36 +648,36 @@ gasket_ioctl_permissions_cb_t gasket_get_ioctl_permissions_cb(
 * @table: Array of num_name structures, the table for the lookup.
 * @table: Array of num_name structures, the table for the lookup.
 *
 *
 */
 */
const char *gasket_num_name_lookup(
const char *gasket_num_name_lookup(uint num,
	uint num, const struct gasket_num_name *table);
				   const struct gasket_num_name *table);


/* Handy inlines */
/* Handy inlines */
static inline ulong gasket_dev_read_64(
static inline ulong gasket_dev_read_64(struct gasket_dev *gasket_dev, int bar,
	struct gasket_dev *gasket_dev, int bar, ulong location)
				       ulong location)
{
{
	return readq(&gasket_dev->bar_data[bar].virt_base[location]);
	return readq(&gasket_dev->bar_data[bar].virt_base[location]);
}
}


static inline void gasket_dev_write_64(
static inline void gasket_dev_write_64(struct gasket_dev *dev, u64 value,
	struct gasket_dev *dev, u64 value, int bar, ulong location)
				       int bar, ulong location)
{
{
	writeq(value, &dev->bar_data[bar].virt_base[location]);
	writeq(value, &dev->bar_data[bar].virt_base[location]);
}
}


static inline void gasket_dev_write_32(
static inline void gasket_dev_write_32(struct gasket_dev *dev, u32 value,
	struct gasket_dev *dev, u32 value, int bar, ulong location)
				       int bar, ulong location)
{
{
	writel(value, &dev->bar_data[bar].virt_base[location]);
	writel(value, &dev->bar_data[bar].virt_base[location]);
}
}


static inline u32 gasket_dev_read_32(
static inline u32 gasket_dev_read_32(struct gasket_dev *dev, int bar,
	struct gasket_dev *dev, int bar, ulong location)
				     ulong location)
{
{
	return readl(&dev->bar_data[bar].virt_base[location]);
	return readl(&dev->bar_data[bar].virt_base[location]);
}
}


static inline void gasket_read_modify_write_64(
static inline void gasket_read_modify_write_64(struct gasket_dev *dev, int bar,
	struct gasket_dev *dev, int bar, ulong location, u64 value,
					       ulong location, u64 value,
					       u64 mask_width, u64 mask_shift)
					       u64 mask_width, u64 mask_shift)
{
{
	u64 mask, tmp;
	u64 mask, tmp;
@@ -688,8 +688,8 @@ static inline void gasket_read_modify_write_64(
	gasket_dev_write_64(dev, tmp, bar, location);
	gasket_dev_write_64(dev, tmp, bar, location);
}
}


static inline void gasket_read_modify_write_32(
static inline void gasket_read_modify_write_32(struct gasket_dev *dev, int bar,
	struct gasket_dev *dev, int bar, ulong location, u32 value,
					       ulong location, u32 value,
					       u32 mask_width, u32 mask_shift)
					       u32 mask_width, u32 mask_shift)
{
{
	u32 mask, tmp;
	u32 mask, tmp;
@@ -707,8 +707,8 @@ const struct gasket_driver_desc *gasket_get_driver_desc(struct gasket_dev *dev);
struct device *gasket_get_device(struct gasket_dev *dev);
struct device *gasket_get_device(struct gasket_dev *dev);


/* Helper function, Asynchronous waits on a given set of bits. */
/* Helper function, Asynchronous waits on a given set of bits. */
int gasket_wait_with_reschedule(
int gasket_wait_with_reschedule(struct gasket_dev *gasket_dev, int bar,
	struct gasket_dev *gasket_dev, int bar, u64 offset, u64 mask, u64 val,
				u64 offset, u64 mask, u64 val,
				uint max_retries, u64 delay_ms);
				uint max_retries, u64 delay_ms);


#endif /* __GASKET_CORE_H__ */
#endif /* __GASKET_CORE_H__ */