#include #include #include #include #include #include "dev.h" #include "str.h" #include "sock.h" #include "die.h" #include "link.h" int device_ifindex(const char *ifname) { int ret, sock, index; struct ifreq ifr; if (!strncmp("any", ifname, strlen("any"))) return 0; sock = af_socket(AF_INET); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ret = ioctl(sock, SIOCGIFINDEX, &ifr); if (!ret) index = ifr.ifr_ifindex; else index = -1; close(sock); return index; } static int __device_address6(const char *ifname, struct sockaddr_storage *ss) { int ret, family, found = -EINVAL; struct ifaddrs *ifaddr, *ifa; ret = getifaddrs(&ifaddr); if (ret < 0) panic("Cannot get device addresses for IPv6!\n"); for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { family = ifa->ifa_addr->sa_family; if (family != AF_INET6) continue; if (strcmp(ifa->ifa_name, ifname)) continue; memcpy(ss, ifa->ifa_addr, sizeof(*ss)); found = 0; break; } freeifaddrs(ifaddr); return found; } int device_address(const char *ifname, int af, struct sockaddr_storage *ss) { int ret, sock; struct ifreq ifr; if (!ss) return -EINVAL; if (!strncmp("any", ifname, strlen("any"))) return -EINVAL; if (af == AF_INET6) return __device_address6(ifname, ss); sock = af_socket(af); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ifr.ifr_addr.sa_family = af; ret = ioctl(sock, SIOCGIFADDR, &ifr); if (!ret) memcpy(ss, &ifr.ifr_addr, sizeof(ifr.ifr_addr)); close(sock); return ret; } int device_mtu(const char *ifname) { int ret, sock, mtu; struct ifreq ifr; sock = af_socket(AF_INET); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ret = ioctl(sock, SIOCGIFMTU, &ifr); if (!ret) mtu = ifr.ifr_mtu; else mtu = 0; close(sock); return mtu; } short device_get_flags(const char *ifname) { short flags; int ret, sock; struct ifreq ifr; sock = af_socket(AF_INET); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ret = ioctl(sock, SIOCGIFFLAGS, &ifr); if (!ret) flags = ifr.ifr_flags; else flags = 0; close(sock); return flags; } void device_set_flags(const char *ifname, const short flags) { int ret, sock; struct ifreq ifr; sock = af_socket(AF_INET); memset(&ifr, 0, sizeof(ifr)); strlcpy(ifr.ifr_name, ifname, IFNAMSIZ); ifr.ifr_flags = flags; ret = ioctl(sock, SIOCSIFFLAGS, &ifr); if (ret < 0) panic("Cannot set NIC flags!\n"); close(sock); } int device_up_and_running(char *ifname) { if (!ifname) return -EINVAL; if (!strncmp("any", ifname, strlen("any"))) return 1; return (device_get_flags(ifname) & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING); } u32 device_bitrate(const char *ifname) { u32 speed_c, speed_w; speed_c = ethtool_bitrate(ifname); speed_w = wireless_bitrate(ifname); return (speed_c == 0 ? speed_w : speed_c); } ext.git/commit/Documentation?h=nds-private-remove&id=a34b027dca5ea840fbc84121db66488375acfdea'>Documentation
diff options
context:
space:
mode:
authorMatthias Reichl <hias@horus.com>2016-04-25 13:39:38 +0000
committerMark Brown <broonie@kernel.org>2016-04-25 17:39:05 +0100
commita34b027dca5ea840fbc84121db66488375acfdea (patch)
treecc46d5c017caf38f8cecace0e0627b48b536ae62 /Documentation
parentf55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff)
ASoC: bcm2835: add 24bit support
This adds 24 bit support to the I2S driver of the BCM2835 Code ported from bcm2708-i2s driver in Raspberry Pi tree. Signed-off-by: Florian Meier <florian.meier@koalo.de> Signed-off-by: Matthias Reichl <hias@horus.com> Signed-off-by: Martin Sperl <kernel@martin.sperl.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'Documentation')