root/arch/sh/mm/consistent.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. memchunk_setup
  2. memchunk_cmdline_override
  3. platform_resource_setup_memory

   1 /*
   2  * Copyright (C) 2004 - 2007  Paul Mundt
   3  *
   4  * This file is subject to the terms and conditions of the GNU General Public
   5  * License.  See the file "COPYING" in the main directory of this archive
   6  * for more details.
   7  */
   8 #include <linux/mm.h>
   9 #include <linux/init.h>
  10 #include <linux/platform_device.h>
  11 #include <linux/dma-mapping.h>
  12 #include <linux/io.h>
  13 
  14 static int __init memchunk_setup(char *str)
  15 {
  16         return 1; /* accept anything that begins with "memchunk." */
  17 }
  18 __setup("memchunk.", memchunk_setup);
  19 
  20 static void __init memchunk_cmdline_override(char *name, unsigned long *sizep)
  21 {
  22         char *p = boot_command_line;
  23         int k = strlen(name);
  24 
  25         while ((p = strstr(p, "memchunk."))) {
  26                 p += 9; /* strlen("memchunk.") */
  27                 if (!strncmp(name, p, k) && p[k] == '=') {
  28                         p += k + 1;
  29                         *sizep = memparse(p, NULL);
  30                         pr_info("%s: forcing memory chunk size to 0x%08lx\n",
  31                                 name, *sizep);
  32                         break;
  33                 }
  34         }
  35 }
  36 
  37 int __init platform_resource_setup_memory(struct platform_device *pdev,
  38                                           char *name, unsigned long memsize)
  39 {
  40         struct resource *r;
  41         dma_addr_t dma_handle;
  42         void *buf;
  43 
  44         r = pdev->resource + pdev->num_resources - 1;
  45         if (r->flags) {
  46                 pr_warning("%s: unable to find empty space for resource\n",
  47                         name);
  48                 return -EINVAL;
  49         }
  50 
  51         memchunk_cmdline_override(name, &memsize);
  52         if (!memsize)
  53                 return 0;
  54 
  55         buf = dma_alloc_coherent(&pdev->dev, memsize, &dma_handle, GFP_KERNEL);
  56         if (!buf) {
  57                 pr_warning("%s: unable to allocate memory\n", name);
  58                 return -ENOMEM;
  59         }
  60 
  61         memset(buf, 0, memsize);
  62 
  63         r->flags = IORESOURCE_MEM;
  64         r->start = dma_handle;
  65         r->end = r->start + memsize - 1;
  66         r->name = name;
  67         return 0;
  68 }

/* [<][>][^][v][top][bottom][index][help] */