Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Functions
ipath_user_pages.c File Reference
#include <linux/mm.h>
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include "ipath_kernel.h"

Go to the source code of this file.

Data Structures

struct  ipath_user_pages_work


dma_addr_t ipath_map_page (struct pci_dev *hwdev, struct page *page, unsigned long offset, size_t size, int direction)
dma_addr_t ipath_map_single (struct pci_dev *hwdev, void *ptr, size_t size, int direction)
int ipath_get_user_pages (unsigned long start_page, size_t num_pages, struct page **p)
void ipath_release_user_pages (struct page **p, size_t num_pages)
void ipath_release_user_pages_on_close (struct page **p, size_t num_pages)

Function Documentation

int ipath_get_user_pages ( unsigned long  start_page,
size_t  num_pages,
struct page **  p 

ipath_get_user_pages - lock user pages into memory : the start page : the number of pages : the output page structures

This function takes a given start page (page aligned user virtual address) and pins it and the following specified number of pages. For now, num_pages is always 1, but that will probably change at some point (because caller is doing expected sends on a single virtually contiguous buffer, so we can do all pages at once).

Definition at line 161 of file ipath_user_pages.c.

dma_addr_t ipath_map_page ( struct pci_dev hwdev,
struct page page,
unsigned long  offset,
size_t  size,
int  direction 

ipath_map_page - a safety wrapper around pci_map_page()

A dma_addr of all 0's is interpreted by the chip as "disabled". Unfortunately, it can also be a valid dma_addr returned on some architectures.

The powerpc iommu assigns dma_addrs in ascending order, so we don't have to bother with retries or mapping a dummy page to insure we don't just get the same mapping again.

I'm sure we won't be so lucky with other iommu's, so FIXME.

Definition at line 106 of file ipath_user_pages.c.

dma_addr_t ipath_map_single ( struct pci_dev hwdev,
void ptr,
size_t  size,
int  direction 

ipath_map_single - a safety wrapper around pci_map_single()

Same idea as ipath_map_page().

Definition at line 130 of file ipath_user_pages.c.

void ipath_release_user_pages ( struct page **  p,
size_t  num_pages 

Definition at line 175 of file ipath_user_pages.c.

void ipath_release_user_pages_on_close ( struct page **  p,
size_t  num_pages 

Definition at line 204 of file ipath_user_pages.c.