|
@@ -37,22 +37,36 @@
|
|
|
#include <asm/uaccess.h>
|
|
|
|
|
|
/**
|
|
|
- * mdiobus_alloc - allocate a mii_bus structure
|
|
|
+ * mdiobus_alloc_size - allocate a mii_bus structure
|
|
|
*
|
|
|
* Description: called by a bus driver to allocate an mii_bus
|
|
|
* structure to fill in.
|
|
|
+ *
|
|
|
+ * 'size' is an an extra amount of memory to allocate for private storage.
|
|
|
+ * If non-zero, then bus->priv is points to that memory.
|
|
|
*/
|
|
|
-struct mii_bus *mdiobus_alloc(void)
|
|
|
+struct mii_bus *mdiobus_alloc_size(size_t size)
|
|
|
{
|
|
|
struct mii_bus *bus;
|
|
|
+ size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN);
|
|
|
+ size_t alloc_size;
|
|
|
+
|
|
|
+ /* If we alloc extra space, it should be aligned */
|
|
|
+ if (size)
|
|
|
+ alloc_size = aligned_size + size;
|
|
|
+ else
|
|
|
+ alloc_size = sizeof(*bus);
|
|
|
|
|
|
- bus = kzalloc(sizeof(*bus), GFP_KERNEL);
|
|
|
- if (bus != NULL)
|
|
|
+ bus = kzalloc(alloc_size, GFP_KERNEL);
|
|
|
+ if (bus) {
|
|
|
bus->state = MDIOBUS_ALLOCATED;
|
|
|
+ if (size)
|
|
|
+ bus->priv = (void *)bus + aligned_size;
|
|
|
+ }
|
|
|
|
|
|
return bus;
|
|
|
}
|
|
|
-EXPORT_SYMBOL(mdiobus_alloc);
|
|
|
+EXPORT_SYMBOL(mdiobus_alloc_size);
|
|
|
|
|
|
/**
|
|
|
* mdiobus_release - mii_bus device release callback
|