move netdev_boot_setup into Space.c
This is now only used by a handful of old ISA drivers, and can be moved into the file they already all depend on. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f8ade8dddb
commit
5ea2f5ffde
@@ -30,6 +30,148 @@
|
|||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
#include <net/Space.h>
|
#include <net/Space.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This structure holds boot-time configured netdevice settings. They
|
||||||
|
* are then used in the device probing.
|
||||||
|
*/
|
||||||
|
struct netdev_boot_setup {
|
||||||
|
char name[IFNAMSIZ];
|
||||||
|
struct ifmap map;
|
||||||
|
};
|
||||||
|
#define NETDEV_BOOT_SETUP_MAX 8
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Device Boot-time Settings Routines
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* Boot time configuration table */
|
||||||
|
static struct netdev_boot_setup dev_boot_setup[NETDEV_BOOT_SETUP_MAX];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* netdev_boot_setup_add - add new setup entry
|
||||||
|
* @name: name of the device
|
||||||
|
* @map: configured settings for the device
|
||||||
|
*
|
||||||
|
* Adds new setup entry to the dev_boot_setup list. The function
|
||||||
|
* returns 0 on error and 1 on success. This is a generic routine to
|
||||||
|
* all netdevices.
|
||||||
|
*/
|
||||||
|
static int netdev_boot_setup_add(char *name, struct ifmap *map)
|
||||||
|
{
|
||||||
|
struct netdev_boot_setup *s;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
s = dev_boot_setup;
|
||||||
|
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
|
||||||
|
if (s[i].name[0] == '\0' || s[i].name[0] == ' ') {
|
||||||
|
memset(s[i].name, 0, sizeof(s[i].name));
|
||||||
|
strlcpy(s[i].name, name, IFNAMSIZ);
|
||||||
|
memcpy(&s[i].map, map, sizeof(s[i].map));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return i >= NETDEV_BOOT_SETUP_MAX ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* netdev_boot_setup_check - check boot time settings
|
||||||
|
* @dev: the netdevice
|
||||||
|
*
|
||||||
|
* Check boot time settings for the device.
|
||||||
|
* The found settings are set for the device to be used
|
||||||
|
* later in the device probing.
|
||||||
|
* Returns 0 if no settings found, 1 if they are.
|
||||||
|
*/
|
||||||
|
int netdev_boot_setup_check(struct net_device *dev)
|
||||||
|
{
|
||||||
|
struct netdev_boot_setup *s = dev_boot_setup;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
|
||||||
|
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
|
||||||
|
!strcmp(dev->name, s[i].name)) {
|
||||||
|
dev->irq = s[i].map.irq;
|
||||||
|
dev->base_addr = s[i].map.base_addr;
|
||||||
|
dev->mem_start = s[i].map.mem_start;
|
||||||
|
dev->mem_end = s[i].map.mem_end;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(netdev_boot_setup_check);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* netdev_boot_base - get address from boot time settings
|
||||||
|
* @prefix: prefix for network device
|
||||||
|
* @unit: id for network device
|
||||||
|
*
|
||||||
|
* Check boot time settings for the base address of device.
|
||||||
|
* The found settings are set for the device to be used
|
||||||
|
* later in the device probing.
|
||||||
|
* Returns 0 if no settings found.
|
||||||
|
*/
|
||||||
|
static unsigned long netdev_boot_base(const char *prefix, int unit)
|
||||||
|
{
|
||||||
|
const struct netdev_boot_setup *s = dev_boot_setup;
|
||||||
|
char name[IFNAMSIZ];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf(name, "%s%d", prefix, unit);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If device already registered then return base of 1
|
||||||
|
* to indicate not to probe for this interface
|
||||||
|
*/
|
||||||
|
if (__dev_get_by_name(&init_net, name))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
|
||||||
|
if (!strcmp(name, s[i].name))
|
||||||
|
return s[i].map.base_addr;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Saves at boot time configured settings for any netdevice.
|
||||||
|
*/
|
||||||
|
static int __init netdev_boot_setup(char *str)
|
||||||
|
{
|
||||||
|
int ints[5];
|
||||||
|
struct ifmap map;
|
||||||
|
|
||||||
|
str = get_options(str, ARRAY_SIZE(ints), ints);
|
||||||
|
if (!str || !*str)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Save settings */
|
||||||
|
memset(&map, 0, sizeof(map));
|
||||||
|
if (ints[0] > 0)
|
||||||
|
map.irq = ints[1];
|
||||||
|
if (ints[0] > 1)
|
||||||
|
map.base_addr = ints[2];
|
||||||
|
if (ints[0] > 2)
|
||||||
|
map.mem_start = ints[3];
|
||||||
|
if (ints[0] > 3)
|
||||||
|
map.mem_end = ints[4];
|
||||||
|
|
||||||
|
/* Add new entry to the list */
|
||||||
|
return netdev_boot_setup_add(str, &map);
|
||||||
|
}
|
||||||
|
|
||||||
|
__setup("netdev=", netdev_boot_setup);
|
||||||
|
|
||||||
|
static int __init ether_boot_setup(char *str)
|
||||||
|
{
|
||||||
|
return netdev_boot_setup(str);
|
||||||
|
}
|
||||||
|
__setup("ether=", ether_boot_setup);
|
||||||
|
|
||||||
|
|
||||||
/* A unified ethernet device probe. This is the easiest way to have every
|
/* A unified ethernet device probe. This is the easiest way to have every
|
||||||
* ethernet adaptor have the name "eth[0123...]".
|
* ethernet adaptor have the name "eth[0123...]".
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -295,18 +295,6 @@ enum netdev_state_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure holds boot-time configured netdevice settings. They
|
|
||||||
* are then used in the device probing.
|
|
||||||
*/
|
|
||||||
struct netdev_boot_setup {
|
|
||||||
char name[IFNAMSIZ];
|
|
||||||
struct ifmap map;
|
|
||||||
};
|
|
||||||
#define NETDEV_BOOT_SETUP_MAX 8
|
|
||||||
|
|
||||||
int __init netdev_boot_setup(char *str);
|
|
||||||
|
|
||||||
struct gro_list {
|
struct gro_list {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
int count;
|
int count;
|
||||||
@@ -2939,7 +2927,6 @@ static inline struct net_device *first_net_device_rcu(struct net *net)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int netdev_boot_setup_check(struct net_device *dev);
|
int netdev_boot_setup_check(struct net_device *dev);
|
||||||
unsigned long netdev_boot_base(const char *prefix, int unit);
|
|
||||||
struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
|
struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
|
||||||
const char *hwaddr);
|
const char *hwaddr);
|
||||||
struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
|
struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type);
|
||||||
|
|||||||
125
net/core/dev.c
125
net/core/dev.c
@@ -676,131 +676,6 @@ void dev_remove_offload(struct packet_offload *po)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dev_remove_offload);
|
EXPORT_SYMBOL(dev_remove_offload);
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* Device Boot-time Settings Routines
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
/* Boot time configuration table */
|
|
||||||
static struct netdev_boot_setup dev_boot_setup[NETDEV_BOOT_SETUP_MAX];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* netdev_boot_setup_add - add new setup entry
|
|
||||||
* @name: name of the device
|
|
||||||
* @map: configured settings for the device
|
|
||||||
*
|
|
||||||
* Adds new setup entry to the dev_boot_setup list. The function
|
|
||||||
* returns 0 on error and 1 on success. This is a generic routine to
|
|
||||||
* all netdevices.
|
|
||||||
*/
|
|
||||||
static int netdev_boot_setup_add(char *name, struct ifmap *map)
|
|
||||||
{
|
|
||||||
struct netdev_boot_setup *s;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
s = dev_boot_setup;
|
|
||||||
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
|
|
||||||
if (s[i].name[0] == '\0' || s[i].name[0] == ' ') {
|
|
||||||
memset(s[i].name, 0, sizeof(s[i].name));
|
|
||||||
strlcpy(s[i].name, name, IFNAMSIZ);
|
|
||||||
memcpy(&s[i].map, map, sizeof(s[i].map));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return i >= NETDEV_BOOT_SETUP_MAX ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* netdev_boot_setup_check - check boot time settings
|
|
||||||
* @dev: the netdevice
|
|
||||||
*
|
|
||||||
* Check boot time settings for the device.
|
|
||||||
* The found settings are set for the device to be used
|
|
||||||
* later in the device probing.
|
|
||||||
* Returns 0 if no settings found, 1 if they are.
|
|
||||||
*/
|
|
||||||
int netdev_boot_setup_check(struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct netdev_boot_setup *s = dev_boot_setup;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) {
|
|
||||||
if (s[i].name[0] != '\0' && s[i].name[0] != ' ' &&
|
|
||||||
!strcmp(dev->name, s[i].name)) {
|
|
||||||
dev->irq = s[i].map.irq;
|
|
||||||
dev->base_addr = s[i].map.base_addr;
|
|
||||||
dev->mem_start = s[i].map.mem_start;
|
|
||||||
dev->mem_end = s[i].map.mem_end;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(netdev_boot_setup_check);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* netdev_boot_base - get address from boot time settings
|
|
||||||
* @prefix: prefix for network device
|
|
||||||
* @unit: id for network device
|
|
||||||
*
|
|
||||||
* Check boot time settings for the base address of device.
|
|
||||||
* The found settings are set for the device to be used
|
|
||||||
* later in the device probing.
|
|
||||||
* Returns 0 if no settings found.
|
|
||||||
*/
|
|
||||||
unsigned long netdev_boot_base(const char *prefix, int unit)
|
|
||||||
{
|
|
||||||
const struct netdev_boot_setup *s = dev_boot_setup;
|
|
||||||
char name[IFNAMSIZ];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
sprintf(name, "%s%d", prefix, unit);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If device already registered then return base of 1
|
|
||||||
* to indicate not to probe for this interface
|
|
||||||
*/
|
|
||||||
if (__dev_get_by_name(&init_net, name))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
|
|
||||||
if (!strcmp(name, s[i].name))
|
|
||||||
return s[i].map.base_addr;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Saves at boot time configured settings for any netdevice.
|
|
||||||
*/
|
|
||||||
int __init netdev_boot_setup(char *str)
|
|
||||||
{
|
|
||||||
int ints[5];
|
|
||||||
struct ifmap map;
|
|
||||||
|
|
||||||
str = get_options(str, ARRAY_SIZE(ints), ints);
|
|
||||||
if (!str || !*str)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Save settings */
|
|
||||||
memset(&map, 0, sizeof(map));
|
|
||||||
if (ints[0] > 0)
|
|
||||||
map.irq = ints[1];
|
|
||||||
if (ints[0] > 1)
|
|
||||||
map.base_addr = ints[2];
|
|
||||||
if (ints[0] > 2)
|
|
||||||
map.mem_start = ints[3];
|
|
||||||
if (ints[0] > 3)
|
|
||||||
map.mem_end = ints[4];
|
|
||||||
|
|
||||||
/* Add new entry to the list */
|
|
||||||
return netdev_boot_setup_add(str, &map);
|
|
||||||
}
|
|
||||||
|
|
||||||
__setup("netdev=", netdev_boot_setup);
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* Device Interface Subroutines
|
* Device Interface Subroutines
|
||||||
|
|||||||
@@ -62,8 +62,6 @@
|
|||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <net/pkt_sched.h>
|
#include <net/pkt_sched.h>
|
||||||
|
|
||||||
__setup("ether=", netdev_boot_setup);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* eth_header - create the Ethernet header
|
* eth_header - create the Ethernet header
|
||||||
* @skb: buffer to alter
|
* @skb: buffer to alter
|
||||||
|
|||||||
Reference in New Issue
Block a user