1/*-
2 * Copyright (c) 2010 Isilon Systems, Inc.
3 * Copyright (c) 2010 iX Systems, Inc.
4 * Copyright (c) 2010 Panasas, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice unmodified, this list of conditions, and the following
12 *    disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28#ifndef	_LINUX_MM_H_
29#define	_LINUX_MM_H_
30
31#include <linux/spinlock.h>
32#include <linux/gfp.h>
33#include <linux/kernel.h>
34
35#define	PAGE_ALIGN(x)	ALIGN(x, PAGE_SIZE)
36
37struct vm_area_struct {
38	vm_offset_t	vm_start;
39	vm_offset_t	vm_end;
40	vm_offset_t	vm_pgoff;
41	vm_paddr_t	vm_pfn;		/* PFN For mmap. */
42	vm_memattr_t	vm_page_prot;
43};
44
45/*
46 * Compute log2 of the power of two rounded up count of pages
47 * needed for size bytes.
48 */
49static inline int
50get_order(unsigned long size)
51{
52	int order;
53
54	size = (size - 1) >> PAGE_SHIFT;
55	order = 0;
56	while (size) {
57		order++;
58		size >>= 1;
59	}
60	return (order);
61}
62
63static inline void *
64lowmem_page_address(struct page *page)
65{
66
67	return page_address(page);
68}
69
70/*
71 * This only works via mmap ops.
72 */
73static inline int
74io_remap_pfn_range(struct vm_area_struct *vma,
75    unsigned long addr, unsigned long pfn, unsigned long size,
76    vm_memattr_t prot)
77{
78	vma->vm_page_prot = prot;
79	vma->vm_pfn = pfn;
80
81	return (0);
82}
83
84#endif	/* _LINUX_MM_H_ */
85