Merge branch 'for-next/misc'
This commit is contained in:
commit
bfdb14c7da
|
@ -28,9 +28,11 @@ can be checked out as follows:
|
|||
Checking connectivity... done.
|
||||
Checking out files: 100% (5651/5651), done.
|
||||
|
||||
After this, make sure to check out the appropriate branch. If you want to
|
||||
develop for barebox, it's best to check out the ``next`` branch rather than
|
||||
the ``master`` branch:
|
||||
By default, the master branch is checked out. If you want to develop for
|
||||
barebox, this is the right branch to send patches against.
|
||||
|
||||
If you want to see which patches are already selected for the next release,
|
||||
you can look at the ``next`` branch:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
|
|
|
@ -231,8 +231,10 @@ static void *am33xx_net_boot(void)
|
|||
int err;
|
||||
int len;
|
||||
struct dhcp_req_param dhcp_param;
|
||||
const char *bootfile, *ip;
|
||||
const char *bootfile;
|
||||
IPaddr_t ip;
|
||||
char *file;
|
||||
char ip4_str[sizeof("255.255.255.255")];
|
||||
|
||||
am33xx_register_ethaddr(0, 0);
|
||||
|
||||
|
@ -258,8 +260,9 @@ static void *am33xx_net_boot(void)
|
|||
if (err)
|
||||
return NULL;
|
||||
|
||||
ip = ip_to_string(net_get_serverip());
|
||||
err = mount(ip, "tftp", TFTP_MOUNT, NULL);
|
||||
ip = net_get_serverip();
|
||||
sprintf(ip4_str, "%pI4", &ip);
|
||||
err = mount(ip4_str, "tftp", TFTP_MOUNT, NULL);
|
||||
if (err < 0) {
|
||||
printf("Unable to mount.\n");
|
||||
return NULL;
|
||||
|
|
|
@ -31,11 +31,6 @@ else
|
|||
CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs))
|
||||
endif
|
||||
|
||||
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
||||
-e s/arm.*/arm/ -e s/sa110/arm/ \
|
||||
-e s/s390x/s390/ -e s/parisc64/parisc/ \
|
||||
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
|
||||
|
||||
archprepare: maketools
|
||||
|
||||
PHONY += maketools
|
||||
|
|
|
@ -36,6 +36,7 @@ static int do_tftpb(int argc, char *argv[])
|
|||
int tftp_push = 0;
|
||||
int ret;
|
||||
IPaddr_t ip;
|
||||
char ip4_str[sizeof("255.255.255.255")];
|
||||
|
||||
while ((opt = getopt(argc, argv, "p")) > 0) {
|
||||
switch(opt) {
|
||||
|
@ -73,7 +74,8 @@ static int do_tftpb(int argc, char *argv[])
|
|||
goto err_free;
|
||||
|
||||
ip = net_get_serverip();
|
||||
ret = mount(ip_to_string(ip), "tftp", TFTP_MOUNT_PATH, NULL);
|
||||
sprintf(ip4_str, "%pI4", &ip);
|
||||
ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, NULL);
|
||||
if (ret)
|
||||
goto err_rmdir;
|
||||
|
||||
|
|
|
@ -306,7 +306,7 @@ static char *parse_nfs_url(const char *url)
|
|||
if (ip == 0)
|
||||
goto out;
|
||||
|
||||
hostpath = basprintf("%s:%s", ip_to_string(ip), path);
|
||||
hostpath = basprintf("%pI4:%s", &ip, path);
|
||||
|
||||
prevpath = nfs_find_mountpath(hostpath);
|
||||
|
||||
|
@ -348,7 +348,7 @@ out:
|
|||
* entry_is_of_compatible - check if a bootspec entry is compatible with
|
||||
* the current machine.
|
||||
*
|
||||
* returns true is the entry is compatible, false otherwise
|
||||
* returns true if the entry is compatible, false otherwise
|
||||
*/
|
||||
static bool entry_is_of_compatible(struct blspec_entry *entry)
|
||||
{
|
||||
|
|
|
@ -279,7 +279,7 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
|||
struct env_context *c;
|
||||
char *instr_param;
|
||||
int len;
|
||||
char end = '=';
|
||||
char end = '=', *pos, *dot;
|
||||
char *begin = "";
|
||||
|
||||
if (!instr)
|
||||
|
@ -290,7 +290,6 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
|||
end = ' ';
|
||||
}
|
||||
|
||||
instr_param = strchr(instr, '.');
|
||||
len = strlen(instr);
|
||||
|
||||
c = get_current_context();
|
||||
|
@ -312,20 +311,21 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
|||
c = c->parent;
|
||||
}
|
||||
|
||||
if (instr_param) {
|
||||
pos = instr;
|
||||
while ((dot = strchr(pos, '.'))) {
|
||||
char *devname;
|
||||
|
||||
len = (instr_param - instr);
|
||||
|
||||
devname = xstrndup(instr, len);
|
||||
devname = xstrndup(instr, dot - instr);
|
||||
|
||||
instr_param++;
|
||||
|
||||
dev = get_device_by_name(devname);
|
||||
free(devname);
|
||||
|
||||
if (dev)
|
||||
device_param_complete(dev, sl, instr_param, eval);
|
||||
return 0;
|
||||
device_param_complete(dev, sl, dot + 1, eval);
|
||||
|
||||
pos = dot + 1;
|
||||
}
|
||||
|
||||
len = strlen(instr);
|
||||
|
|
50
common/env.c
50
common/env.c
|
@ -135,25 +135,45 @@ static const char *getenv_raw(struct list_head *l, const char *name)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const char *getenv (const char *name)
|
||||
static const char *dev_getenv(const char *name)
|
||||
{
|
||||
const char *pos, *val, *dot, *varname;
|
||||
char *devname;
|
||||
struct device_d *dev;
|
||||
|
||||
pos = name;
|
||||
|
||||
while (1) {
|
||||
dot = strchr(pos, '.');
|
||||
if (!dot)
|
||||
break;
|
||||
|
||||
devname = xstrndup(name, dot - name);
|
||||
varname = dot + 1;
|
||||
|
||||
dev = get_device_by_name(devname);
|
||||
|
||||
free(devname);
|
||||
|
||||
if (dev) {
|
||||
val = dev_get_param(dev, varname);
|
||||
if (val)
|
||||
return val;
|
||||
}
|
||||
|
||||
pos = dot + 1;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *getenv(const char *name)
|
||||
{
|
||||
struct env_context *c;
|
||||
const char *val;
|
||||
|
||||
if (strchr(name, '.')) {
|
||||
const char *ret = NULL;
|
||||
char *devstr = strdup(name);
|
||||
char *par = strchr(devstr, '.');
|
||||
struct device_d *dev;
|
||||
*par = 0;
|
||||
dev = get_device_by_name(devstr);
|
||||
if (dev) {
|
||||
par++;
|
||||
ret = dev_get_param(dev, par);
|
||||
}
|
||||
free(devstr);
|
||||
return ret;
|
||||
}
|
||||
if (strchr(name, '.'))
|
||||
return dev_getenv(name);
|
||||
|
||||
c = context;
|
||||
|
||||
|
|
|
@ -382,7 +382,7 @@ EXPORT_SYMBOL(envfs_save);
|
|||
static int envfs_check_super(struct envfs_super *super, size_t *size)
|
||||
{
|
||||
if (ENVFS_32(super->magic) != ENVFS_MAGIC) {
|
||||
printf("envfs: wrong magic\n");
|
||||
printf("envfs: no envfs (magic mismatch) - envfs newer written?\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,9 +35,9 @@
|
|||
*
|
||||
* fpga@0 {
|
||||
* compatible = "altr,fpga-passive-serial";
|
||||
* nstat-gpio = <&gpio4 18 0>;
|
||||
* confd-gpio = <&gpio4 19 0>;
|
||||
* nconfig-gpio = <&gpio4 20 0>;
|
||||
* nstat-gpios = <&gpio4 18 0>;
|
||||
* confd-gpios = <&gpio4 19 0>;
|
||||
* nconfig-gpios = <&gpio4 20 0>;
|
||||
* spi-max-frequency = <10000000>;
|
||||
* reg = <0>;
|
||||
* };
|
||||
|
@ -220,26 +220,24 @@ static int altera_spi_of(struct device_d *dev, struct fpga_spi *this)
|
|||
const char *name;
|
||||
int ret;
|
||||
|
||||
name = "nstat-gpio";
|
||||
if (!of_get_property(n, name, NULL)) {
|
||||
name = "nstat-gpios";
|
||||
this->nstat_gpio = of_get_named_gpio(n, name, 0);
|
||||
if (this->nstat_gpio == -ENOENT) {
|
||||
dev_info(dev, "nstat-gpio is not specified, assuming it is not connected\n");
|
||||
this->nstat_gpio = -1;
|
||||
} else {
|
||||
this->nstat_gpio = of_get_named_gpio(n, name, 0);
|
||||
if (this->nstat_gpio < 0) {
|
||||
ret = this->nstat_gpio;
|
||||
goto out;
|
||||
}
|
||||
} else if (this->nstat_gpio < 0) {
|
||||
ret = this->nstat_gpio;
|
||||
goto out;
|
||||
}
|
||||
|
||||
name = "confd-gpio";
|
||||
name = "confd-gpios";
|
||||
this->confd_gpio = of_get_named_gpio(n, name, 0);
|
||||
if (this->confd_gpio < 0) {
|
||||
ret = this->confd_gpio;
|
||||
goto out;
|
||||
}
|
||||
|
||||
name = "nconfig-gpio";
|
||||
name = "nconfig-gpios";
|
||||
this->nconfig_gpio = of_get_named_gpio(n, name, 0);
|
||||
if (this->nconfig_gpio < 0) {
|
||||
ret = this->nconfig_gpio;
|
||||
|
@ -330,7 +328,7 @@ out:
|
|||
|
||||
static struct of_device_id altera_spi_id_table[] = {
|
||||
{
|
||||
.compatible = "altr,passive-serial",
|
||||
.compatible = "altr,fpga-passive-serial",
|
||||
},
|
||||
};
|
||||
|
||||
|
|
12
fs/nfs.c
12
fs/nfs.c
|
@ -1314,10 +1314,9 @@ static char *rootnfsopts;
|
|||
static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
|
||||
{
|
||||
char *str, *tmp;
|
||||
const char *ip;
|
||||
const char *bootargs;
|
||||
|
||||
ip = ip_to_string(npriv->server);
|
||||
str = basprintf("root=/dev/nfs nfsroot=%s:%s%s%s", ip, npriv->path,
|
||||
str = basprintf("root=/dev/nfs nfsroot=%pI4:%s%s%s", &npriv->server, npriv->path,
|
||||
rootnfsopts[0] ? "," : "", rootnfsopts);
|
||||
|
||||
/* forward specific mount options on demand */
|
||||
|
@ -1333,6 +1332,13 @@ static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
|
|||
str = tmp;
|
||||
}
|
||||
|
||||
bootargs = dev_get_param(&npriv->con->edev->dev, "linux.bootargs");
|
||||
if (bootargs) {
|
||||
tmp = basprintf("%s %s", str, bootargs);
|
||||
free(str);
|
||||
str = tmp;
|
||||
}
|
||||
|
||||
fsdev_set_linux_rootarg(fsdev, str);
|
||||
|
||||
free(str);
|
||||
|
|
|
@ -62,6 +62,7 @@ struct eth_device {
|
|||
IPaddr_t netmask;
|
||||
IPaddr_t gateway;
|
||||
char ethaddr[6];
|
||||
char *bootarg;
|
||||
};
|
||||
|
||||
#define dev_to_edev(d) container_of(d, struct eth_device, dev)
|
||||
|
@ -257,9 +258,6 @@ static inline int net_eth_to_udplen(char *pkt)
|
|||
int net_checksum_ok(unsigned char *, int); /* Return true if cksum OK */
|
||||
uint16_t net_checksum(unsigned char *, int); /* Calculate the checksum */
|
||||
|
||||
/* Print an IP address on the console */
|
||||
void print_IPaddr (IPaddr_t);
|
||||
|
||||
/*
|
||||
* The following functions are a bit ugly, but necessary to deal with
|
||||
* alignment restrictions on ARM.
|
||||
|
@ -308,9 +306,6 @@ static inline void net_copy_uint32(uint32_t *to, uint32_t *from)
|
|||
memcpy(to, from, sizeof(uint32_t));
|
||||
}
|
||||
|
||||
/* Convert an IP address to a string */
|
||||
char *ip_to_string (IPaddr_t x);
|
||||
|
||||
/* Convert a string to ip address */
|
||||
int string_to_ip(const char *s, IPaddr_t *ip);
|
||||
|
||||
|
|
|
@ -777,7 +777,7 @@ static const char *param_ip_get(struct device_d *dev, struct param_d *p)
|
|||
}
|
||||
|
||||
free(p->value);
|
||||
p->value = xstrdup(ip_to_string(*pi->ip));
|
||||
p->value = xasprintf("%pI4", pi->ip);
|
||||
|
||||
return p->value;
|
||||
}
|
||||
|
|
|
@ -190,6 +190,27 @@ static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int
|
|||
#endif
|
||||
}
|
||||
|
||||
static noinline_for_stack
|
||||
char *ip4_addr_string(char *buf, char *end, const u8 *addr, int field_width,
|
||||
int precision, int flags, const char *fmt)
|
||||
{
|
||||
char ip4_addr[sizeof("255.255.255.255")];
|
||||
char *pos;
|
||||
int i;
|
||||
|
||||
pos = ip4_addr;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
pos = number(pos, pos + 3, addr[i], 10, 0, 0, LEFT);
|
||||
if (i < 3)
|
||||
*pos++ = '.';
|
||||
}
|
||||
|
||||
*pos = 0;
|
||||
|
||||
return string(buf, end, ip4_addr, field_width, precision, flags);
|
||||
}
|
||||
|
||||
static noinline_for_stack
|
||||
char *uuid_string(char *buf, char *end, const u8 *addr, int field_width,
|
||||
int precision, int flags, const char *fmt)
|
||||
|
@ -267,6 +288,8 @@ char *address_val(char *buf, char *end, const void *addr,
|
|||
*
|
||||
* Right now we handle:
|
||||
*
|
||||
* - 'I' [4] for IPv4 addresses printed in the usual way
|
||||
* IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
|
||||
* - 'S' For symbolic direct pointers
|
||||
* - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
|
||||
* "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
||||
|
@ -297,6 +320,12 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field
|
|||
break;
|
||||
case 'a':
|
||||
return address_val(buf, end, ptr, field_width, precision, flags, fmt);
|
||||
case 'I':
|
||||
switch (fmt[1]) {
|
||||
case '4':
|
||||
return ip4_addr_string(buf, end, ptr, field_width, precision, flags, fmt);
|
||||
}
|
||||
break;
|
||||
}
|
||||
flags |= SMALL;
|
||||
if (field_width == -1) {
|
||||
|
|
|
@ -613,13 +613,13 @@ static void dhcp_handler(void *ctx, char *packet, unsigned int len)
|
|||
debug ("%s: State REQUESTING\n", __func__);
|
||||
|
||||
if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK ) {
|
||||
IPaddr_t ip;
|
||||
if (net_read_uint32((uint32_t *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
|
||||
dhcp_options_process((u8 *)&bp->bp_vend[4], bp);
|
||||
bootp_copy_net_params(bp); /* Store net params from reply */
|
||||
dhcp_state = BOUND;
|
||||
puts ("DHCP client bound to address ");
|
||||
print_IPaddr(net_get_ip());
|
||||
putchar('\n');
|
||||
ip = net_get_ip();
|
||||
printf("DHCP client bound to address %pI4\n", &ip);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -221,7 +221,7 @@ IPaddr_t resolv(const char *host)
|
|||
if (string_to_ip(ns, &ip))
|
||||
return 0;
|
||||
|
||||
debug("resolving host %s via nameserver %s\n", host, ip_to_string(ip));
|
||||
debug("resolving host %s via nameserver %pI4\n", host, &ip);
|
||||
|
||||
dns_con = net_udp_new(ip, DNS_PORT, dns_handler, NULL);
|
||||
if (IS_ERR(dns_con))
|
||||
|
@ -258,9 +258,7 @@ static int do_host(int argc, char *argv[])
|
|||
if (!ip)
|
||||
printf("unknown host %s\n", argv[1]);
|
||||
else {
|
||||
printf("%s is at ", argv[1]);
|
||||
print_IPaddr(ip);
|
||||
printf("\n");
|
||||
printf("%s is at %pI4\n", argv[1], &ip);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -384,6 +384,8 @@ int eth_register(struct eth_device *edev)
|
|||
dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev);
|
||||
dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL,
|
||||
edev->ethaddr, edev);
|
||||
edev->bootarg = xstrdup("");
|
||||
dev_add_param_string(dev, "linux.bootargs", NULL, NULL, &edev->bootarg, NULL);
|
||||
|
||||
if (edev->init)
|
||||
edev->init(edev);
|
||||
|
|
|
@ -106,12 +106,21 @@ int ifup(const char *name, unsigned flags)
|
|||
ret = eth_set_param(dev, "serverip");
|
||||
if (ret)
|
||||
goto out;
|
||||
dev_set_param(dev, "linux.bootargs", "ip=dhcp");
|
||||
} else if (!strcmp(ip, "static")) {
|
||||
char *bootarg;
|
||||
for (i = 0; i < ARRAY_SIZE(vars); i++) {
|
||||
ret = eth_set_param(dev, vars[i]);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4:::",
|
||||
&edev->ipaddr,
|
||||
&edev->serverip,
|
||||
&edev->gateway,
|
||||
&edev->netmask);
|
||||
dev_set_param(dev, "linux.bootargs", bootarg);
|
||||
free(bootarg);
|
||||
} else {
|
||||
pr_err("unknown ip type: %s\n", ip);
|
||||
ret = -EINVAL;
|
||||
|
|
19
net/lib.c
19
net/lib.c
|
@ -57,25 +57,6 @@ void ethaddr_to_string(const u8 enetaddr[6], char *str)
|
|||
enetaddr[4], enetaddr[5]);
|
||||
}
|
||||
|
||||
void print_IPaddr(IPaddr_t x)
|
||||
{
|
||||
puts(ip_to_string(x));
|
||||
}
|
||||
|
||||
char *ip_to_string(IPaddr_t x)
|
||||
{
|
||||
static char s[sizeof("xxx.xxx.xxx.xxx")];
|
||||
|
||||
x = ntohl(x);
|
||||
sprintf(s, "%d.%d.%d.%d",
|
||||
(int) ((x >> 24) & 0xff),
|
||||
(int) ((x >> 16) & 0xff),
|
||||
(int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff)
|
||||
);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
int string_to_ip(const char *s, IPaddr_t *ip)
|
||||
{
|
||||
IPaddr_t addr = 0;
|
||||
|
|
|
@ -78,9 +78,9 @@ IPaddr_t getenv_ip(const char *name)
|
|||
|
||||
int setenv_ip(const char *name, IPaddr_t ip)
|
||||
{
|
||||
const char *str;
|
||||
char str[sizeof("255.255.255.255")];
|
||||
|
||||
str = ip_to_string(ip);
|
||||
sprintf(str, "%pI4", &ip);
|
||||
|
||||
setenv(name, str);
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ static int nc_set_active(struct console_device *cdev, unsigned flags)
|
|||
|
||||
net_udp_bind(priv->con, priv->port);
|
||||
|
||||
pr_info("netconsole initialized with %s:%d\n", ip_to_string(priv->ip), priv->port);
|
||||
pr_info("netconsole initialized with %pI4:%d\n", &priv->ip, priv->port);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue