9
0
Fork 0

Merge branch 'for-next/misc'

This commit is contained in:
Sascha Hauer 2016-10-10 08:31:07 +02:00
commit bfdb14c7da
20 changed files with 131 additions and 91 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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)
{

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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",
},
};

View File

@ -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);

View File

@ -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);

View File

@ -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;
}

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;
}