diff options
Diffstat (limited to 'sys/compat/linuxkpi/common/include/linux/io-mapping.h')
| -rw-r--r-- | sys/compat/linuxkpi/common/include/linux/io-mapping.h | 53 | 
1 files changed, 43 insertions, 10 deletions
| diff --git a/sys/compat/linuxkpi/common/include/linux/io-mapping.h b/sys/compat/linuxkpi/common/include/linux/io-mapping.h index 8650dba65e6b..7c92c50d637a 100644 --- a/sys/compat/linuxkpi/common/include/linux/io-mapping.h +++ b/sys/compat/linuxkpi/common/include/linux/io-mapping.h @@ -28,52 +28,85 @@   *   * $FreeBSD$   */ -#ifndef	_LINUX_IO_MAPPING_H_ + +#ifndef _LINUX_IO_MAPPING_H_  #define	_LINUX_IO_MAPPING_H_ +#include <sys/types.h> +#include <machine/vm.h> +  #include <linux/types.h>  #include <linux/io.h> +#include <linux/slab.h> -struct io_mapping; +struct io_mapping { +	unsigned long base; +	unsigned long size; +	void *mem; +	vm_memattr_t attr; +}; + +static inline struct io_mapping * +io_mapping_init_wc(struct io_mapping *mapping, resource_size_t base, +    unsigned long size) +{ + +	mapping->base = base; +	mapping->size = size; +	mapping->mem = ioremap_wc(base, size); +	mapping->attr = VM_MEMATTR_WRITE_COMBINING; +	return (mapping); +}  static inline struct io_mapping *  io_mapping_create_wc(resource_size_t base, unsigned long size)  { +	struct io_mapping *mapping; -	return ioremap_wc(base, size); +	mapping = kmalloc(sizeof(*mapping), GFP_KERNEL); +	if (mapping == NULL) +		return (NULL); +	return (io_mapping_init_wc(mapping, base, size)); +} + +static inline void +io_mapping_fini(struct io_mapping *mapping) +{ + +	iounmap(mapping->mem);  }  static inline void  io_mapping_free(struct io_mapping *mapping)  { -	iounmap(mapping); +	io_mapping_fini(mapping->mem); +	kfree(mapping);  }  static inline void *  io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset)  { -	return (((char *)mapping) + offset); +	return ((char *)mapping->mem + offset);  }  static inline void  io_mapping_unmap_atomic(void *vaddr)  { -  }  static inline void * -io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset) +io_mapping_map_wc(struct io_mapping *mapping, unsigned long offset, +    unsigned long size)  { -	return (((char *) mapping) + offset); +	return ((char *)mapping->mem + offset);  }  static inline void  io_mapping_unmap(void *vaddr)  { -  } -#endif	/* _LINUX_IO_MAPPING_H_ */ +#endif /* _LINUX_IO_MAPPING_H_ */ | 
