Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linuxkpi/common/include/linux/io-mapping.h
Show All 22 Lines | |||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
* | * | ||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#ifndef _LINUX_IO_MAPPING_H_ | #ifndef _LINUX_IO_MAPPING_H_ | ||||
#define _LINUX_IO_MAPPING_H_ | #define _LINUX_IO_MAPPING_H_ | ||||
#include <sys/types.h> | |||||
#include <machine/vm.h> | |||||
#include <linux/types.h> | #include <linux/types.h> | ||||
#include <linux/io.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 * | 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) | 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 | static inline void | ||||
io_mapping_fini(struct io_mapping *mapping) | |||||
{ | |||||
iounmap(mapping->mem); | |||||
} | |||||
static inline void | |||||
io_mapping_free(struct io_mapping *mapping) | io_mapping_free(struct io_mapping *mapping) | ||||
{ | { | ||||
iounmap(mapping); | io_mapping_fini(mapping->mem); | ||||
kfree(mapping); | |||||
} | } | ||||
static inline void * | static inline void * | ||||
io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) | io_mapping_map_atomic_wc(struct io_mapping *mapping, unsigned long offset) | ||||
{ | { | ||||
return (((char *)mapping) + offset); | return ((char *)mapping->mem + offset); | ||||
} | } | ||||
static inline void | static inline void | ||||
io_mapping_unmap_atomic(void *vaddr) | io_mapping_unmap_atomic(void *vaddr) | ||||
{ | { | ||||
} | } | ||||
static inline void * | 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 | static inline void | ||||
io_mapping_unmap(void *vaddr) | io_mapping_unmap(void *vaddr) | ||||
{ | { | ||||
} | } | ||||
#endif /* _LINUX_IO_MAPPING_H_ */ | #endif /* _LINUX_IO_MAPPING_H_ */ |