compat/nes: Adding pci_zalloc_consistent backport
[compat-rdma/compat.git] / compat / compat-2.6.26.c
1 /*
2  * Copyright 2007-2010  Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * Compatibility file for Linux wireless for kernels 2.6.26.
9  *
10  * Copyright holders from ported work:
11  *
12  * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org>
13  * Copyright (c) 2006-2007 Greg Kroah-Hartman <greg@kroah.com>
14  * Copyright (c) 2006-2007 Novell Inc.
15  */
16
17 #include <net/compat.h>
18
19 /* 2.6.24 does not have the struct kobject with a name */
20 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
21
22 /**
23  * kobject_set_name_vargs - Set the name of an kobject
24  * @kobj: struct kobject to set the name of
25  * @fmt: format string used to build the name
26  * @vargs: vargs to format the string.
27  */
28 static
29 int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
30                                   va_list vargs)
31 {
32         const char *old_name = kobj->name;
33         char *s;
34
35         if (kobj->name && !fmt)
36                 return 0;
37
38         kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);
39         if (!kobj->name)
40                 return -ENOMEM;
41
42         /* ewww... some of these buggers have '/' in the name ... */
43         while ((s = strchr(kobj->name, '/')))
44                 s[0] = '!';
45
46         kfree(old_name);
47         return 0;
48 }
49 #else
50 static
51 int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
52                                   va_list vargs)
53 {
54         struct device *dev;
55         unsigned int len;
56         va_list aq;
57
58         dev = container_of(kobj, struct device, kobj);
59
60         va_copy(aq, vargs);
61         len = vsnprintf(NULL, 0, fmt, aq);
62         va_end(aq);
63
64         len = len < BUS_ID_SIZE ? (len + 1) : BUS_ID_SIZE;
65
66         vsnprintf(dev->bus_id, len, fmt, vargs);
67         return 0;
68 }
69 #endif
70
71 /**
72  * dev_set_name - set a device name
73  * @dev: device
74  * @fmt: format string for the device's name
75  */
76 int dev_set_name(struct device *dev, const char *fmt, ...)
77 {
78         va_list vargs;
79         int err;
80
81         va_start(vargs, fmt);
82         err = kobject_set_name_vargs(&dev->kobj, fmt, vargs);
83         va_end(vargs);
84         return err;
85 }
86 EXPORT_SYMBOL_GPL(dev_set_name);
87