init
This commit is contained in:
commit
e843bf3df0
82 changed files with 450785 additions and 0 deletions
|
@ -0,0 +1,610 @@
|
|||
From 5e8062c5f6500526633934006c2858812961f6f4 Mon Sep 17 00:00:00 2001
|
||||
From: OpenEmbedded <oe.patch@oe>
|
||||
Date: Wed, 22 May 2024 15:36:46 +0200
|
||||
Subject: [PATCH] drv fix MAC address for UWE5622
|
||||
|
||||
---
|
||||
drivers/misc/Kconfig | 1 +
|
||||
drivers/misc/Makefile | 1 +
|
||||
drivers/misc/sunxi-addr/Kconfig | 7 +
|
||||
drivers/misc/sunxi-addr/Makefile | 6 +
|
||||
drivers/misc/sunxi-addr/sha256.c | 178 +++++++++++++
|
||||
drivers/misc/sunxi-addr/sunxi-addr.c | 358 +++++++++++++++++++++++++++
|
||||
6 files changed, 551 insertions(+)
|
||||
create mode 100644 drivers/misc/sunxi-addr/Kconfig
|
||||
create mode 100644 drivers/misc/sunxi-addr/Makefile
|
||||
create mode 100644 drivers/misc/sunxi-addr/sha256.c
|
||||
create mode 100644 drivers/misc/sunxi-addr/sunxi-addr.c
|
||||
|
||||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
||||
index cadd4a820..605e4d2ba 100644
|
||||
--- a/drivers/misc/Kconfig
|
||||
+++ b/drivers/misc/Kconfig
|
||||
@@ -579,4 +579,5 @@ source "drivers/misc/cardreader/Kconfig"
|
||||
source "drivers/misc/uacce/Kconfig"
|
||||
source "drivers/misc/pvpanic/Kconfig"
|
||||
source "drivers/misc/mchp_pci1xxxx/Kconfig"
|
||||
+source "drivers/misc/sunxi-addr/Kconfig"
|
||||
endmenu
|
||||
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
|
||||
index f2a4d1ff6..06e857d70 100644
|
||||
--- a/drivers/misc/Makefile
|
||||
+++ b/drivers/misc/Makefile
|
||||
@@ -67,3 +67,4 @@ obj-$(CONFIG_TMR_MANAGER) += xilinx_tmr_manager.o
|
||||
obj-$(CONFIG_TMR_INJECT) += xilinx_tmr_inject.o
|
||||
obj-$(CONFIG_TPS6594_ESM) += tps6594-esm.o
|
||||
obj-$(CONFIG_TPS6594_PFSM) += tps6594-pfsm.o
|
||||
+obj-$(CONFIG_SUNXI_ADDR_MGT) += sunxi-addr/
|
||||
diff --git a/drivers/misc/sunxi-addr/Kconfig b/drivers/misc/sunxi-addr/Kconfig
|
||||
new file mode 100644
|
||||
index 000000000..d7d0ca3bd
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/sunxi-addr/Kconfig
|
||||
@@ -0,0 +1,7 @@
|
||||
+config SUNXI_ADDR_MGT
|
||||
+ tristate "Allwinner Network MAC Addess Manager"
|
||||
+ depends on BT || ETHERNET || WLAN
|
||||
+ depends on NVMEM_SUNXI_SID
|
||||
+ help
|
||||
+ allwinner network mac address management
|
||||
+
|
||||
diff --git a/drivers/misc/sunxi-addr/Makefile b/drivers/misc/sunxi-addr/Makefile
|
||||
new file mode 100644
|
||||
index 000000000..9bafcece5
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/sunxi-addr/Makefile
|
||||
@@ -0,0 +1,6 @@
|
||||
+#
|
||||
+# Makefile for wifi mac addr manager drivers
|
||||
+#
|
||||
+sunxi_addr-objs := sunxi-addr.o sha256.o
|
||||
+obj-$(CONFIG_SUNXI_ADDR_MGT) += sunxi_addr.o
|
||||
+
|
||||
diff --git a/drivers/misc/sunxi-addr/sha256.c b/drivers/misc/sunxi-addr/sha256.c
|
||||
new file mode 100644
|
||||
index 000000000..78825810c
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/sunxi-addr/sha256.c
|
||||
@@ -0,0 +1,178 @@
|
||||
+/*
|
||||
+ * Local implement of sha256.
|
||||
+ *
|
||||
+ * Copyright (C) 2013 Allwinner.
|
||||
+ *
|
||||
+ * This file is licensed under the terms of the GNU General Public
|
||||
+ * License version 2. This program is licensed "as is" without any
|
||||
+ * warranty of any kind, whether express or implied.
|
||||
+ */
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/string.h>
|
||||
+
|
||||
+/****************************** MACROS ******************************/
|
||||
+#define ROTRIGHT(a, b) (((a) >> (b)) | ((a) << (32 - (b))))
|
||||
+#define CH(x, y, z) (((x) & (y)) ^ (~(x) & (z)))
|
||||
+#define MAJ(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
|
||||
+#define EP0(x) (ROTRIGHT(x, 2) ^ ROTRIGHT(x, 13) ^ ROTRIGHT(x, 22))
|
||||
+#define EP1(x) (ROTRIGHT(x, 6) ^ ROTRIGHT(x, 11) ^ ROTRIGHT(x, 25))
|
||||
+#define SIG0(x) (ROTRIGHT(x, 7) ^ ROTRIGHT(x, 18) ^ ((x) >> 3))
|
||||
+#define SIG1(x) (ROTRIGHT(x, 17) ^ ROTRIGHT(x, 19) ^ ((x) >> 10))
|
||||
+
|
||||
+/**************************** VARIABLES *****************************/
|
||||
+static const uint32_t k[64] = {
|
||||
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
||||
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
||||
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
||||
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
||||
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
|
||||
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
||||
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
|
||||
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
||||
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
||||
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
||||
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
||||
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
||||
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
||||
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
||||
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
||||
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
||||
+};
|
||||
+
|
||||
+struct sha256_ctx {
|
||||
+ uint8_t data[64]; /* current 512-bit chunk of message data, just like a buffer */
|
||||
+ uint32_t datalen; /* sign the data length of current chunk */
|
||||
+ uint64_t bitlen; /* the bit length of the total message */
|
||||
+ uint32_t state[8]; /* store the middle state of hash abstract */
|
||||
+};
|
||||
+
|
||||
+/*********************** FUNCTION DEFINITIONS ***********************/
|
||||
+static void sha256_transform(struct sha256_ctx *ctx, const uint8_t *data)
|
||||
+{
|
||||
+ uint32_t a, b, c, d, e, f, g, h, i, j, t1, t2, m[64];
|
||||
+
|
||||
+ /* initialization */
|
||||
+ for (i = 0, j = 0; i < 16; ++i, j += 4)
|
||||
+ m[i] = (data[j] << 24) | (data[j + 1] << 16) |
|
||||
+ (data[j + 2] << 8) | (data[j + 3]);
|
||||
+ for ( ; i < 64; ++i)
|
||||
+ m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16];
|
||||
+
|
||||
+ a = ctx->state[0];
|
||||
+ b = ctx->state[1];
|
||||
+ c = ctx->state[2];
|
||||
+ d = ctx->state[3];
|
||||
+ e = ctx->state[4];
|
||||
+ f = ctx->state[5];
|
||||
+ g = ctx->state[6];
|
||||
+ h = ctx->state[7];
|
||||
+
|
||||
+ for (i = 0; i < 64; ++i) {
|
||||
+ t1 = h + EP1(e) + CH(e, f, g) + k[i] + m[i];
|
||||
+ t2 = EP0(a) + MAJ(a, b, c);
|
||||
+ h = g;
|
||||
+ g = f;
|
||||
+ f = e;
|
||||
+ e = d + t1;
|
||||
+ d = c;
|
||||
+ c = b;
|
||||
+ b = a;
|
||||
+ a = t1 + t2;
|
||||
+ }
|
||||
+
|
||||
+ ctx->state[0] += a;
|
||||
+ ctx->state[1] += b;
|
||||
+ ctx->state[2] += c;
|
||||
+ ctx->state[3] += d;
|
||||
+ ctx->state[4] += e;
|
||||
+ ctx->state[5] += f;
|
||||
+ ctx->state[6] += g;
|
||||
+ ctx->state[7] += h;
|
||||
+}
|
||||
+
|
||||
+static void sha256_init(struct sha256_ctx *ctx)
|
||||
+{
|
||||
+ ctx->datalen = 0;
|
||||
+ ctx->bitlen = 0;
|
||||
+ ctx->state[0] = 0x6a09e667;
|
||||
+ ctx->state[1] = 0xbb67ae85;
|
||||
+ ctx->state[2] = 0x3c6ef372;
|
||||
+ ctx->state[3] = 0xa54ff53a;
|
||||
+ ctx->state[4] = 0x510e527f;
|
||||
+ ctx->state[5] = 0x9b05688c;
|
||||
+ ctx->state[6] = 0x1f83d9ab;
|
||||
+ ctx->state[7] = 0x5be0cd19;
|
||||
+}
|
||||
+
|
||||
+static void sha256_update(struct sha256_ctx *ctx, const uint8_t *data, size_t len)
|
||||
+{
|
||||
+ uint32_t i;
|
||||
+
|
||||
+ for (i = 0; i < len; ++i) {
|
||||
+ ctx->data[ctx->datalen] = data[i];
|
||||
+ ctx->datalen++;
|
||||
+ if (ctx->datalen == 64) {
|
||||
+ /* 64 byte = 512 bit means the buffer ctx->data has
|
||||
+ * fully stored one chunk of message,
|
||||
+ * so do the sha256 hash map for the current chunk.
|
||||
+ */
|
||||
+ sha256_transform(ctx, ctx->data);
|
||||
+ ctx->bitlen += 512;
|
||||
+ ctx->datalen = 0;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void sha256_final(struct sha256_ctx *ctx, uint8_t *hash)
|
||||
+{
|
||||
+ uint32_t i;
|
||||
+
|
||||
+ i = ctx->datalen;
|
||||
+
|
||||
+ /* Pad whatever data is left in the buffer. */
|
||||
+ if (ctx->datalen < 56) {
|
||||
+ ctx->data[i++] = 0x80; /* pad 10000000 = 0x80 */
|
||||
+ while (i < 56)
|
||||
+ ctx->data[i++] = 0x00;
|
||||
+ } else {
|
||||
+ ctx->data[i++] = 0x80;
|
||||
+ while (i < 64)
|
||||
+ ctx->data[i++] = 0x00;
|
||||
+ sha256_transform(ctx, ctx->data);
|
||||
+ memset(ctx->data, 0, 56);
|
||||
+ }
|
||||
+
|
||||
+ /* Append to the padding the total message's length in bits and transform. */
|
||||
+ ctx->bitlen += ctx->datalen * 8;
|
||||
+ ctx->data[63] = ctx->bitlen;
|
||||
+ ctx->data[62] = ctx->bitlen >> 8;
|
||||
+ ctx->data[61] = ctx->bitlen >> 16;
|
||||
+ ctx->data[60] = ctx->bitlen >> 24;
|
||||
+ ctx->data[59] = ctx->bitlen >> 32;
|
||||
+ ctx->data[58] = ctx->bitlen >> 40;
|
||||
+ ctx->data[57] = ctx->bitlen >> 48;
|
||||
+ ctx->data[56] = ctx->bitlen >> 56;
|
||||
+ sha256_transform(ctx, ctx->data);
|
||||
+
|
||||
+ /* copying the final state to the output hash(use big endian). */
|
||||
+ for (i = 0; i < 4; ++i) {
|
||||
+ hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 20] = (ctx->state[5] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 24] = (ctx->state[6] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ hash[i + 28] = (ctx->state[7] >> (24 - i * 8)) & 0x000000ff;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+int hmac_sha256(const uint8_t *plaintext, ssize_t psize, uint8_t *output)
|
||||
+{
|
||||
+ struct sha256_ctx ctx;
|
||||
+
|
||||
+ sha256_init(&ctx);
|
||||
+ sha256_update(&ctx, plaintext, psize);
|
||||
+ sha256_final(&ctx, output);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/drivers/misc/sunxi-addr/sunxi-addr.c b/drivers/misc/sunxi-addr/sunxi-addr.c
|
||||
new file mode 100644
|
||||
index 000000000..3ba0a113f
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/sunxi-addr/sunxi-addr.c
|
||||
@@ -0,0 +1,358 @@
|
||||
+/*
|
||||
+ * The driver of SUNXI NET MAC ADDR Manager.
|
||||
+ *
|
||||
+ * Copyright (C) 2013 Allwinner.
|
||||
+ *
|
||||
+ * This file is licensed under the terms of the GNU General Public
|
||||
+ * License version 2. This program is licensed "as is" without any
|
||||
+ * warranty of any kind, whether express or implied.
|
||||
+ */
|
||||
+#define DEBUG
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/miscdevice.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+
|
||||
+#define ADDR_MGT_DBG(fmt, arg...) printk(KERN_DEBUG "[ADDR_MGT] %s: " fmt "\n",\
|
||||
+ __func__, ## arg)
|
||||
+#define ADDR_MGT_ERR(fmt, arg...) printk(KERN_ERR "[ADDR_MGT] %s: " fmt "\n",\
|
||||
+ __func__, ## arg)
|
||||
+
|
||||
+#define MODULE_CUR_VERSION "v1.0.9"
|
||||
+
|
||||
+#define MATCH_STR_LEN 20
|
||||
+#define ADDR_VAL_LEN 6
|
||||
+#define ADDR_STR_LEN 18
|
||||
+#define ID_LEN 16
|
||||
+#define HASH_LEN 32
|
||||
+
|
||||
+#define TYPE_ANY 0
|
||||
+#define TYPE_BURN 1
|
||||
+#define TYPE_IDGEN 2
|
||||
+#define TYPE_USER 3
|
||||
+#define TYPE_RAND 4
|
||||
+
|
||||
+#define ADDR_FMT_STR 0
|
||||
+#define ADDR_FMT_VAL 1
|
||||
+
|
||||
+#define IS_TYPE_INVALID(x) ((x < TYPE_ANY) || (x > TYPE_RAND))
|
||||
+
|
||||
+#define ADDR_CLASS_ATTR_ADD(name) \
|
||||
+static ssize_t addr_##name##_show(const struct class *class, \
|
||||
+ const struct class_attribute *attr, char *buffer) \
|
||||
+{ \
|
||||
+ char addr[ADDR_STR_LEN]; \
|
||||
+ if (IS_TYPE_INVALID(get_addr_by_name(ADDR_FMT_STR, addr, #name))) \
|
||||
+ return 0; \
|
||||
+ return sprintf(buffer, "%.17s\n", addr); \
|
||||
+} \
|
||||
+static ssize_t addr_##name##_store(const struct class *class, \
|
||||
+ const struct class_attribute *attr, \
|
||||
+ const char *buffer, size_t count) \
|
||||
+{ \
|
||||
+ if (count != ADDR_STR_LEN) { \
|
||||
+ ADDR_MGT_ERR("Length wrong."); \
|
||||
+ return -EINVAL; \
|
||||
+ } \
|
||||
+ set_addr_by_name(TYPE_USER, ADDR_FMT_STR, buffer, #name); \
|
||||
+ return count; \
|
||||
+} \
|
||||
+static CLASS_ATTR_RW(addr_##name);
|
||||
+
|
||||
+struct addr_mgt_info {
|
||||
+ unsigned int type_def;
|
||||
+ unsigned int type_cur;
|
||||
+ unsigned int flag;
|
||||
+ char *addr;
|
||||
+ char *name;
|
||||
+};
|
||||
+
|
||||
+static struct addr_mgt_info info[] = {
|
||||
+ {TYPE_ANY, TYPE_ANY, 1, NULL, "wifi"},
|
||||
+ {TYPE_ANY, TYPE_ANY, 0, NULL, "bt" },
|
||||
+ {TYPE_ANY, TYPE_ANY, 1, NULL, "eth" },
|
||||
+};
|
||||
+
|
||||
+extern int hmac_sha256(const uint8_t *plaintext, ssize_t psize, uint8_t *output);
|
||||
+extern int sunxi_get_soc_chipid(unsigned char *chipid);
|
||||
+
|
||||
+static int addr_parse(int fmt, const char *addr, int check)
|
||||
+{
|
||||
+ char val_buf[ADDR_VAL_LEN];
|
||||
+ char cmp_buf[ADDR_VAL_LEN];
|
||||
+ int ret = ADDR_VAL_LEN;
|
||||
+
|
||||
+ if (fmt == ADDR_FMT_STR)
|
||||
+ ret = sscanf(addr, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
|
||||
+ &val_buf[0], &val_buf[1], &val_buf[2],
|
||||
+ &val_buf[3], &val_buf[4], &val_buf[5]);
|
||||
+ else
|
||||
+ memcpy(val_buf, addr, ADDR_VAL_LEN);
|
||||
+
|
||||
+ if (ret != ADDR_VAL_LEN)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (check && (val_buf[0] & 0x3))
|
||||
+ return -1;
|
||||
+
|
||||
+ memset(cmp_buf, 0x00, ADDR_VAL_LEN);
|
||||
+ if (memcmp(val_buf, cmp_buf, ADDR_VAL_LEN) == 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ memset(cmp_buf, 0xFF, ADDR_VAL_LEN);
|
||||
+ if (memcmp(val_buf, cmp_buf, ADDR_VAL_LEN) == 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct addr_mgt_info *addr_find_by_name(char *name)
|
||||
+{
|
||||
+ int i = 0;
|
||||
+ for (i = 0; i < ARRAY_SIZE(info); i++) {
|
||||
+ if (strcmp(info[i].name, name) == 0)
|
||||
+ return &info[i];
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static int get_addr_by_name(int fmt, char *addr, char *name)
|
||||
+{
|
||||
+ struct addr_mgt_info *t;
|
||||
+
|
||||
+ t = addr_find_by_name(name);
|
||||
+ if (t == NULL) {
|
||||
+ ADDR_MGT_ERR("can't find addr named: %s", name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (IS_TYPE_INVALID(t->type_cur)) {
|
||||
+ ADDR_MGT_ERR("addr type invalid");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (addr_parse(ADDR_FMT_VAL, t->addr, t->flag)) {
|
||||
+ ADDR_MGT_ERR("addr parse fail(%s)", t->addr);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (fmt == ADDR_FMT_STR)
|
||||
+ sprintf(addr, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
+ t->addr[0], t->addr[1], t->addr[2],
|
||||
+ t->addr[3], t->addr[4], t->addr[5]);
|
||||
+ else
|
||||
+ memcpy(addr, t->addr, ADDR_VAL_LEN);
|
||||
+
|
||||
+ return t->type_cur;
|
||||
+}
|
||||
+
|
||||
+static int set_addr_by_name(int type, int fmt, const char *addr, char *name)
|
||||
+{
|
||||
+ struct addr_mgt_info *t;
|
||||
+
|
||||
+ t = addr_find_by_name(name);
|
||||
+ if (t == NULL) {
|
||||
+ ADDR_MGT_ERR("can't find addr named: %s", name);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (addr_parse(fmt, addr, t->flag)) {
|
||||
+ ADDR_MGT_ERR("addr parse fail(%s)", addr);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ t->type_cur = type;
|
||||
+ if (fmt == ADDR_FMT_STR)
|
||||
+ sscanf(addr, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
|
||||
+ &t->addr[0], &t->addr[1], &t->addr[2],
|
||||
+ &t->addr[3], &t->addr[4], &t->addr[5]);
|
||||
+ else
|
||||
+ memcpy(t->addr, addr, ADDR_VAL_LEN);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int get_custom_mac_address(int fmt, char *name, char *addr)
|
||||
+{
|
||||
+ return get_addr_by_name(fmt, addr, name);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(get_custom_mac_address);
|
||||
+
|
||||
+static int addr_factory(struct device_node *np,
|
||||
+ int idx, int type, char *mac, char *name)
|
||||
+{
|
||||
+ int ret, i;
|
||||
+ char match[MATCH_STR_LEN];
|
||||
+ const char *p;
|
||||
+ char id[ID_LEN], hash[HASH_LEN], cmp_buf[ID_LEN];
|
||||
+ struct timespec64 curtime;
|
||||
+
|
||||
+ switch (type) {
|
||||
+ case TYPE_BURN:
|
||||
+ sprintf(match, "addr_%s", name);
|
||||
+ ret = of_property_read_string_index(np, match, 0, &p);
|
||||
+ if (ret)
|
||||
+ return -1;
|
||||
+
|
||||
+ ret = sscanf(p, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
|
||||
+ &mac[0], &mac[1], &mac[2],
|
||||
+ &mac[3], &mac[4], &mac[5]);
|
||||
+
|
||||
+ if (ret != ADDR_VAL_LEN)
|
||||
+ return -1;
|
||||
+ break;
|
||||
+ case TYPE_IDGEN:
|
||||
+ if (idx > HASH_LEN / ADDR_VAL_LEN - 1)
|
||||
+ return -1;
|
||||
+ if (sunxi_get_soc_chipid(id))
|
||||
+ return -1;
|
||||
+ memset(cmp_buf, 0x00, ID_LEN);
|
||||
+ if (memcmp(id, cmp_buf, ID_LEN) == 0)
|
||||
+ return -1;
|
||||
+ if (hmac_sha256(id, ID_LEN, hash))
|
||||
+ return -1;
|
||||
+ memcpy(mac, &hash[idx * ADDR_VAL_LEN], ADDR_VAL_LEN);
|
||||
+ break;
|
||||
+ case TYPE_RAND:
|
||||
+ for (i = 0; i < ADDR_VAL_LEN; i++) {
|
||||
+ ktime_get_real_ts64(&curtime);
|
||||
+ mac[i] = (char)curtime.tv_nsec;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ ADDR_MGT_ERR("unsupport type: %d", type);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int addr_init(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device_node *np = pdev->dev.of_node;
|
||||
+ int type, i, j;
|
||||
+ char match[MATCH_STR_LEN];
|
||||
+ char addr[ADDR_VAL_LEN];
|
||||
+ int type_tab[] = {TYPE_BURN, TYPE_IDGEN, TYPE_RAND};
|
||||
+
|
||||
+ /* init addr type and value */
|
||||
+ for (i = 0; i < ARRAY_SIZE(info); i++) {
|
||||
+ sprintf(match, "type_addr_%s", info[i].name);
|
||||
+ if (of_property_read_u32(np, match, &type)) {
|
||||
+ ADDR_MGT_DBG("Failed to get type_def_%s, use default: %d",
|
||||
+ info[i].name, info[i].type_def);
|
||||
+ } else {
|
||||
+ info[i].type_def = type;
|
||||
+ info[i].type_cur = type;
|
||||
+ }
|
||||
+
|
||||
+ if (IS_TYPE_INVALID(info[i].type_def))
|
||||
+ return -1;
|
||||
+ if (info[i].type_def != TYPE_ANY) {
|
||||
+ if (addr_factory(np, i, info[i].type_def, addr, info[i].name))
|
||||
+ return -1;
|
||||
+ } else {
|
||||
+ for (j = 0; j < ARRAY_SIZE(type_tab); j++) {
|
||||
+ if (!addr_factory(np, i, type_tab[j], addr, info[i].name)) {
|
||||
+ info[i].type_cur = type_tab[j];
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (info[i].flag)
|
||||
+ addr[0] &= 0xFC;
|
||||
+
|
||||
+ if (addr_parse(ADDR_FMT_VAL, addr, info[i].flag))
|
||||
+ return -1;
|
||||
+ else {
|
||||
+ info[i].addr = devm_kzalloc(&pdev->dev, ADDR_VAL_LEN, GFP_KERNEL);
|
||||
+ memcpy(info[i].addr, addr, ADDR_VAL_LEN);
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static ssize_t summary_show(const struct class *class,
|
||||
+ const struct class_attribute *attr, char *buffer)
|
||||
+{
|
||||
+ int i = 0, ret = 0;
|
||||
+
|
||||
+ ret += sprintf(&buffer[ret], "name cfg cur address\n");
|
||||
+ for (i = 0; i < ARRAY_SIZE(info); i++) {
|
||||
+ ret += sprintf(&buffer[ret],
|
||||
+ "%4s %d %d %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
+ info[i].name, info[i].type_def, info[i].type_cur,
|
||||
+ info[i].addr[0], info[i].addr[1], info[i].addr[2],
|
||||
+ info[i].addr[3], info[i].addr[4], info[i].addr[5]);
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+static CLASS_ATTR_RO(summary);
|
||||
+
|
||||
+ADDR_CLASS_ATTR_ADD(wifi);
|
||||
+ADDR_CLASS_ATTR_ADD(bt);
|
||||
+ADDR_CLASS_ATTR_ADD(eth);
|
||||
+
|
||||
+static struct attribute *addr_class_attrs[] = {
|
||||
+ &class_attr_summary.attr,
|
||||
+ &class_attr_addr_wifi.attr,
|
||||
+ &class_attr_addr_bt.attr,
|
||||
+ &class_attr_addr_eth.attr,
|
||||
+ NULL
|
||||
+};
|
||||
+ATTRIBUTE_GROUPS(addr_class);
|
||||
+
|
||||
+static struct class addr_class = {
|
||||
+ .name = "addr_mgt",
|
||||
+ .class_groups = addr_class_groups,
|
||||
+};
|
||||
+
|
||||
+static const struct of_device_id addr_mgt_ids[] = {
|
||||
+ { .compatible = "allwinner,sunxi-addr_mgt" },
|
||||
+ { /* Sentinel */ }
|
||||
+};
|
||||
+
|
||||
+static int addr_mgt_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ int status;
|
||||
+
|
||||
+ ADDR_MGT_DBG("module version: %s", MODULE_CUR_VERSION);
|
||||
+ status = class_register(&addr_class);
|
||||
+ if (status < 0) {
|
||||
+ ADDR_MGT_ERR("class register error, status: %d.", status);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (addr_init(pdev)) {
|
||||
+ ADDR_MGT_ERR("failed to init addr.");
|
||||
+ class_unregister(&addr_class);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ ADDR_MGT_DBG("success.");
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int addr_mgt_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ class_unregister(&addr_class);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct platform_driver addr_mgt_driver = {
|
||||
+ .probe = addr_mgt_probe,
|
||||
+ .remove = addr_mgt_remove,
|
||||
+ .driver = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .name = "sunxi-addr-mgt",
|
||||
+ .of_match_table = addr_mgt_ids,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+module_platform_driver_probe(addr_mgt_driver, addr_mgt_probe);
|
||||
+
|
||||
+MODULE_AUTHOR("Allwinnertech");
|
||||
+MODULE_DESCRIPTION("Network MAC Addess Manager");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+
|
|
@ -0,0 +1,25 @@
|
|||
From e5017f74e32f644f9c707f788b2aaf47a98b820c Mon Sep 17 00:00:00 2001
|
||||
From: OpenEmbedded <oe.patch@oe>
|
||||
Date: Wed, 6 Dec 2023 00:38:22 +0100
|
||||
Subject: [PATCH 2/2] add uwe5622 to wireless makefile
|
||||
|
||||
---
|
||||
drivers/net/wireless/Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile
|
||||
index a61cf6c90..455cf9296 100644
|
||||
--- a/drivers/net/wireless/Makefile
|
||||
+++ b/drivers/net/wireless/Makefile
|
||||
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Makefile for the Linux Wireless network device drivers.
|
||||
#
|
||||
-
|
||||
+obj-$(CONFIG_SPARD_WLAN_SUPPORT) += uwe5622/
|
||||
obj-$(CONFIG_WLAN_VENDOR_ADMTEK) += admtek/
|
||||
obj-$(CONFIG_WLAN_VENDOR_ATH) += ath/
|
||||
obj-$(CONFIG_WLAN_VENDOR_ATMEL) += atmel/
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
From 3c57b45edef027fe994cd469185f10a04f12dcd7 Mon Sep 17 00:00:00 2001
|
||||
From: OpenEmbedded <oe.patch@oe>
|
||||
Date: Sat, 25 Nov 2023 14:39:37 +0000
|
||||
Subject: [PATCH] fix makefiles for yocto build
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/Makefile | 2 +-
|
||||
drivers/net/wireless/uwe5622/unisocwcn/Makefile | 9 +++++----
|
||||
2 files changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/Makefile b/drivers/net/wireless/uwe5622/Makefile
|
||||
index d2210439f3cc..09e06defdfcf 100644
|
||||
--- a/drivers/net/wireless/uwe5622/Makefile
|
||||
+++ b/drivers/net/wireless/uwe5622/Makefile
|
||||
@@ -2,7 +2,7 @@ obj-$(CONFIG_RK_WIFI_DEVICE_UWE5622) += unisocwcn/
|
||||
obj-$(CONFIG_WLAN_UWE5622) += unisocwifi/
|
||||
obj-$(CONFIG_TTY_OVERY_SDIO) += tty-sdio/
|
||||
|
||||
-UNISOCWCN_DIR := $(shell cd $(src)/unisocwcn/ && /bin/pwd)
|
||||
+UNISOCWCN_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))unisocwcn
|
||||
UNISOC_BSP_INCLUDE := $(UNISOCWCN_DIR)/include
|
||||
export UNISOC_BSP_INCLUDE
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/Makefile b/drivers/net/wireless/uwe5622/unisocwcn/Makefile
|
||||
index 939acb5c9274..a582426995ed 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/Makefile
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/Makefile
|
||||
@@ -129,9 +129,10 @@ ccflags-y += -DCONFIG_WCN_BOOT
|
||||
ccflags-y += -DCONFIG_WCN_UTILS
|
||||
|
||||
#### include path ######
|
||||
-ccflags-y += -I$(src)/include/
|
||||
-ccflags-y += -I$(src)/platform/
|
||||
-ccflags-y += -I$(src)/platform/rf/
|
||||
+local_src__ := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
+ccflags-y += -I$(local_src__)include/
|
||||
+ccflags-y += -I$(local_src__)platform/
|
||||
+ccflags-y += -I$(local_src__)platform/rf/
|
||||
|
||||
#### add cflag for Customer ######
|
||||
### ---------- Hisilicon start ---------- ###
|
||||
@@ -405,7 +406,7 @@ KDIR ?= $(ANDROID_PRODUCT_OUT)/obj/KERNEL_OBJ
|
||||
ARCH ?= arm
|
||||
CROSS_COMPILE ?= arm-histbv310-linux-
|
||||
|
||||
-EXTRA_CFLAGS += -I$(src)/include -D__linux__
|
||||
+EXTRA_CFLAGS += -I$(local_src__)include -D__linux__
|
||||
|
||||
all: $(all_dependencies)
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
# Kmeta for uwe5622
|
||||
# for 6.1 kernel
|
||||
# source: armbian misc drivers
|
||||
|
||||
|
||||
patch uwe5622-allwinner.patch
|
||||
patch uwe5622-allwinner-bugfix.patch
|
||||
|
||||
include uwe5622-common.scc
|
|
@ -0,0 +1,11 @@
|
|||
# Kmeta for uwe5622
|
||||
# patches for 6.5 & 6.6
|
||||
|
||||
|
||||
patch uwe5622-allwinner-v6.3.patch
|
||||
patch uwe5622-allwinner-bugfix-v6.3.patch
|
||||
patch uwe5622-allwinner-v6.3-compilation-fix.patch
|
||||
patch uwe5622-v6.4-post.patch
|
||||
|
||||
include uwe5622-common.scc
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# Kmeta for uwe5622
|
||||
# for kernel 6.6 only
|
||||
|
||||
include uwe5622-6_5.scc
|
||||
|
||||
patch uwe5622-v6.6-fix-tty-sdio.patch
|
||||
|
||||
# Add driver for MAC address fix
|
||||
patch 0001-drv-fix-MAC-address-for-UWE5622.patch
|
|
@ -0,0 +1,7 @@
|
|||
# Kmeta for uwe5622
|
||||
# for kernel 6.7
|
||||
# simply includes 6.6 metadata
|
||||
|
||||
include uwe5622-6_6.scc
|
||||
|
||||
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,47 @@
|
|||
From 9a649d7ad384907ba8f62ba50a6fd7e524d8ce25 Mon Sep 17 00:00:00 2001
|
||||
From: root <Gunjan Gupta>
|
||||
Date: Sun, 17 Sep 2023 20:45:44 +0000
|
||||
Subject: [PATCH] drivers: uwe5622: fix compilation on 6.3+ kernels
|
||||
|
||||
---
|
||||
.../wireless/uwe5622/unisocwcn/platform/wcn_boot.c | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
index 220bac67ddd0..b243b39c2133 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
@@ -1371,15 +1371,13 @@ static int marlin_registsr_bt_wake(struct device *dev)
|
||||
{
|
||||
struct device_node *np;
|
||||
int bt_wake_host_gpio, ret = 0;
|
||||
- struct gpio_config config;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "allwinner,sunxi-btlpm");
|
||||
if (!np) {
|
||||
WCN_ERR("dts node for bt_wake not found");
|
||||
return -EINVAL;
|
||||
}
|
||||
- bt_wake_host_gpio = of_get_named_gpio_flags(np, "bt_hostwake", 0,
|
||||
- (enum of_gpio_flags *)&config);
|
||||
+ bt_wake_host_gpio = of_get_named_gpio(np, "bt_hostwake", 0);
|
||||
if (!gpio_is_valid(bt_wake_host_gpio)) {
|
||||
WCN_ERR("bt_hostwake irq is invalid: %d\n",
|
||||
bt_wake_host_gpio);
|
||||
@@ -1403,11 +1401,8 @@ static int marlin_registsr_bt_wake(struct device *dev)
|
||||
|
||||
marlin_dev->bt_wake_host_int_num = gpio_to_irq(bt_wake_host_gpio);
|
||||
|
||||
- WCN_INFO("%s bt_hostwake gpio=%d mul-sel=%d pull=%d "
|
||||
- "drv_level=%d data=%d intnum=%d\n",
|
||||
- __func__, config.gpio, config.mul_sel, config.pull,
|
||||
- config.drv_level, config.data,
|
||||
- marlin_dev->bt_wake_host_int_num);
|
||||
+ WCN_INFO("%s bt_hostwake gpio=%d intnum=%d\n", __func__,
|
||||
+ bt_wake_host_gpio, marlin_dev->bt_wake_host_int_num);
|
||||
|
||||
ret = device_init_wakeup(dev, true);
|
||||
if (ret < 0) {
|
||||
--
|
||||
2.34.1
|
||||
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,18 @@
|
|||
# Kmeta for uwe5622
|
||||
# common patches for kernel versions 6.1, 6.5, 6.6 & 6.7
|
||||
# source: armbian misc drivers
|
||||
|
||||
# common patches to be appliend after kernel version specific ones
|
||||
|
||||
patch uwe5622-warnings.patch
|
||||
patch uwe5622-park-link-v6.1-post.patch
|
||||
patch uwe5622-v6.1.patch
|
||||
patch uwe5622-fix-setting-mac-address-for-netdev.patch
|
||||
patch wireless-uwe5622-Fix-compilation-with-6.7-kernel.patch
|
||||
patch wireless-uwe5622-reduce-system-load.patch
|
||||
|
||||
# Custom: Add driver to makefile and patch Makefiles to make it work with yocto.
|
||||
patch add-uwe5622-to-wireless-makefile.patch
|
||||
patch fix-makefiles-for-yocto-build.patch
|
||||
|
||||
kconf harware uwe5622-fragment.cfg
|
|
@ -0,0 +1,35 @@
|
|||
From 9211a92d07e9a43fce104f87f9d45e890257b699 Mon Sep 17 00:00:00 2001
|
||||
From: pbiel <pbiel7@gmail.com>
|
||||
Date: Tue, 7 Mar 2023 20:28:44 +0100
|
||||
Subject: [PATCH] wireless: fix setting mac address for netdev in uwe5622
|
||||
unisocwifi driver
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/unisocwifi/main.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwifi/main.c b/drivers/net/wireless/uwe5622/unisocwifi/main.c
|
||||
index 21efdf4e0..566a9a7f3 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwifi/main.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwifi/main.c
|
||||
@@ -1356,6 +1356,7 @@ static struct sprdwl_vif *sprdwl_register_netdev(struct sprdwl_priv *priv,
|
||||
struct wireless_dev *wdev;
|
||||
struct sprdwl_vif *vif;
|
||||
int ret;
|
||||
+ u8 target_mac_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0))
|
||||
ndev = alloc_netdev(sizeof(*vif), name, NET_NAME_UNKNOWN, ether_setup);
|
||||
@@ -1411,7 +1412,8 @@ static struct sprdwl_vif *sprdwl_register_netdev(struct sprdwl_priv *priv,
|
||||
ndev->features |= NETIF_F_SG;
|
||||
SET_NETDEV_DEV(ndev, wiphy_dev(priv->wiphy));
|
||||
|
||||
- sprdwl_set_mac_addr(vif, addr, ndev->dev_addr);
|
||||
+ sprdwl_set_mac_addr(vif, addr, target_mac_addr);
|
||||
+ dev_addr_set(ndev, target_mac_addr);
|
||||
|
||||
#ifdef CONFIG_P2P_INTF
|
||||
if (type == NL80211_IFTYPE_P2P_DEVICE)
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
CONFIG_SPARD_WLAN_SUPPORT=y
|
||||
CONFIG_WCN_BSP_DRIVER_BUILDIN=y
|
||||
CONFIG_WLAN_UWE5621=m
|
||||
CONFIG_WLAN_UWE5622=m
|
||||
CONFIG_SPRDWL_NG=m
|
||||
CONFIG_UNISOC_WIFI_PS=y
|
||||
CONFIG_TTY_OVERY_SDIO=m
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
|
||||
CONFIG_NVMEM_SUNXI_SID=m
|
|
@ -0,0 +1,58 @@
|
|||
From 67b790ecbeab3f5493dc8306e87e503e1bb7bcdc Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 29 Jan 2023 13:43:27 +0000
|
||||
Subject: [PATCH] fix spreadtrum (sprd) bluetooth broken park link status
|
||||
|
||||
---
|
||||
drivers/bluetooth/hci_ldisc.c | 6 ++++++
|
||||
include/net/bluetooth/hci.h | 6 ++++++
|
||||
net/bluetooth/hci_sync.c | 2 +-
|
||||
3 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
|
||||
--- a/drivers/bluetooth/hci_ldisc.c (revision 58aa050aa57333b34b358234002121c59fb3af26)
|
||||
+++ b/drivers/bluetooth/hci_ldisc.c (revision bf8ab2f58b21494ffde96979431a3da931deb48b)
|
||||
@@ -658,6 +658,12 @@
|
||||
hdev->setup = hci_uart_setup;
|
||||
SET_HCIDEV_DEV(hdev, hu->tty->dev);
|
||||
|
||||
+ // Set the broken Park link status quirk, specific for spreadtrum (sprd)
|
||||
+ // bluetooth devices
|
||||
+ if (hdev->manufacturer == 0xffff && hu->tty->driver &&
|
||||
+ strncmp(hu->tty->driver->name, "ttyBT", 5) == 0)
|
||||
+ set_bit(HCI_QUIRK_BROKEN_PARK_LINK_STATUS, &hdev->quirks);
|
||||
+
|
||||
if (test_bit(HCI_UART_RAW_DEVICE, &hu->hdev_flags))
|
||||
set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
|
||||
|
||||
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
|
||||
--- a/include/net/bluetooth/hci.h (revision 58aa050aa57333b34b358234002121c59fb3af26)
|
||||
+++ b/include/net/bluetooth/hci.h (revision bf8ab2f58b21494ffde96979431a3da931deb48b)
|
||||
@@ -309,6 +309,12 @@
|
||||
|
||||
/* HCI device quirks */
|
||||
enum {
|
||||
+ /*
|
||||
+ * Device declares that support Park link status, but it really
|
||||
+ * does not support it and fails to initialize
|
||||
+ */
|
||||
+ HCI_QUIRK_BROKEN_PARK_LINK_STATUS,
|
||||
+
|
||||
/* When this quirk is set, the HCI Reset command is send when
|
||||
* closing the transport instead of when opening it.
|
||||
*
|
||||
diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
|
||||
--- a/net/bluetooth/hci_sync.c (revision 58aa050aa57333b34b358234002121c59fb3af26)
|
||||
+++ b/net/bluetooth/hci_sync.c (revision bf8ab2f58b21494ffde96979431a3da931deb48b)
|
||||
@@ -3804,7 +3804,7 @@
|
||||
link_policy |= HCI_LP_HOLD;
|
||||
if (lmp_sniff_capable(hdev))
|
||||
link_policy |= HCI_LP_SNIFF;
|
||||
- if (lmp_park_capable(hdev))
|
||||
+ if (lmp_park_capable(hdev) && !test_bit(HCI_QUIRK_BROKEN_PARK_LINK_STATUS, &hdev->quirks))
|
||||
link_policy |= HCI_LP_PARK;
|
||||
|
||||
cp.policy = cpu_to_le16(link_policy);
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
From 7c0e3b529afd31f99baf78be10b5d71d9086789a Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 29 Jan 2023 15:53:20 +0000
|
||||
Subject: [PATCH] port uwe5622 driver to kernel 6.1
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
index 294f19e1f6c..9dcdee02cb9 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
@@ -703,7 +703,7 @@ static int sprdwl_add_cipher_key(struct sprdwl_vif *vif, bool pairwise,
|
||||
}
|
||||
|
||||
static int sprdwl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
||||
- u8 key_index, bool pairwise,
|
||||
+ int link_id, u8 key_index, bool pairwise,
|
||||
const u8 *mac_addr,
|
||||
struct key_params *params)
|
||||
{
|
||||
@@ -725,7 +725,7 @@ static int sprdwl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev,
|
||||
}
|
||||
|
||||
static int sprdwl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
|
||||
- u8 key_index, bool pairwise,
|
||||
+ int link_id, u8 key_index, bool pairwise,
|
||||
const u8 *mac_addr)
|
||||
{
|
||||
struct sprdwl_vif *vif = netdev_priv(ndev);
|
||||
@@ -755,7 +755,7 @@ static int sprdwl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *ndev,
|
||||
|
||||
static int sprdwl_cfg80211_set_default_key(struct wiphy *wiphy,
|
||||
struct net_device *ndev,
|
||||
- u8 key_index, bool unicast,
|
||||
+ int link_id, u8 key_index, bool unicast,
|
||||
bool multicast)
|
||||
{
|
||||
struct sprdwl_vif *vif = netdev_priv(ndev);
|
||||
@@ -2383,7 +2383,7 @@ void sprdwl_report_connection(struct sprdwl_vif *vif,
|
||||
conn_info->status == SPRDWL_ROAM_SUCCESS){
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
|
||||
struct cfg80211_roam_info roam_info = {
|
||||
- .bss = bss,
|
||||
+ .links[0].bss = bss,
|
||||
.req_ie = conn_info->req_ie,
|
||||
.req_ie_len = conn_info->req_ie_len,
|
||||
.resp_ie = conn_info->resp_ie,
|
||||
--
|
||||
2.34.1
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
index 0aa765ad839..20aea5e7366 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
@@ -143,7 +143,7 @@ static int prefixcmp(const char *str, const char *prefix)
|
||||
}
|
||||
|
||||
#if KERNEL_VERSION(3, 19, 0) <= LINUX_VERSION_CODE
|
||||
-static int find_callback(struct dir_context *ctx, const char *name, int namlen,
|
||||
+static bool find_callback(struct dir_context *ctx, const char *name, int namlen,
|
||||
loff_t offset, u64 ino, unsigned int d_type)
|
||||
#else
|
||||
static int find_callback(void *ctx, const char *name, int namlen,
|
|
@ -0,0 +1,34 @@
|
|||
From 5b43103009736d5efff606ca40a1a693ba8a04c2 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Thu, 3 Aug 2023 10:09:46 +0200
|
||||
Subject: [PATCH] fix driver for kernel 6.4
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c
|
||||
index 1a78b5b035a4..c68d86a20fe2 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_log.c
|
||||
@@ -260,7 +260,7 @@ int log_cdev_init(void)
|
||||
struct wcnlog_dev *dev[WCN_LOG_MAX_MINOR] = {NULL};
|
||||
|
||||
WCN_DEBUG("log_cdev_init\n");
|
||||
- wcnlog_class = class_create(THIS_MODULE, "slog_wcn");
|
||||
+ wcnlog_class = class_create("slog_wcn");
|
||||
if (IS_ERR(wcnlog_class))
|
||||
return PTR_ERR(wcnlog_class);
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/tty-sdio/lpm.c b/drivers/net/wireless/uwe5622/tty-sdio/lpm.c
|
||||
index 1570676ced50..79a6d60c94e8 100644
|
||||
--- a/drivers/net/wireless/uwe5622/tty-sdio/lpm.c
|
||||
+++ b/drivers/net/wireless/uwe5622/tty-sdio/lpm.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/export.h>
|
||||
+#include <linux/device.h>
|
||||
#include <marlin_platform.h>
|
||||
|
||||
#define VERSION "marlin2 V0.1"
|
|
@ -0,0 +1,27 @@
|
|||
From 332748a389a88f8d78c5b2c70cf5c29f7098c703 Mon Sep 17 00:00:00 2001
|
||||
From: Ricardo Pardini <ricardo@pardini.net>
|
||||
Date: Mon, 2 Oct 2023 16:24:12 +0200
|
||||
Subject: [PATCH] wifi uwe fix uwe5622 tty-sdio
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/tty-sdio/tty.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/tty-sdio/tty.c b/drivers/net/wireless/uwe5622/tty-sdio/tty.c
|
||||
index 6498272fc192..36fc7dd558d4 100644
|
||||
--- a/drivers/net/wireless/uwe5622/tty-sdio/tty.c
|
||||
+++ b/drivers/net/wireless/uwe5622/tty-sdio/tty.c
|
||||
@@ -467,8 +467,8 @@ static int sdio_data_transmit(uint8_t *data, size_t count)
|
||||
return mtty_write(NULL, data, count);
|
||||
}
|
||||
|
||||
-static int mtty_write_plus(struct tty_struct *tty,
|
||||
- const unsigned char *buf, int count)
|
||||
+static ssize_t mtty_write_plus(struct tty_struct *tty, const u8 *buf,
|
||||
+ size_t count)
|
||||
{
|
||||
return sitm_write(buf, count, sdio_data_transmit);
|
||||
}
|
||||
--
|
||||
2.42.0
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
From b758478655da935b50a973b0aa2ddbc20893b789 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||||
Date: Sun, 12 Jun 2022 14:33:59 +0000
|
||||
Subject: [PATCH] uwe5622: various warning and firmware path fixes
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/Makefile | 2 +-
|
||||
.../uwe5622/unisocwcn/platform/rdc_debug.c | 4 +-
|
||||
.../uwe5622/unisocwcn/platform/wcn_boot.c | 2 -
|
||||
.../unisocwcn/platform/wcn_parn_parser.c | 2 +-
|
||||
.../uwe5622/unisocwcn/sdio/sdiohal_ctl.c | 42 ++++++-------------
|
||||
.../wireless/uwe5622/unisocwifi/cfg80211.c | 4 --
|
||||
6 files changed, 17 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/Makefile b/drivers/net/wireless/uwe5622/Makefile
|
||||
index 71c863c1017..d2210439f3c 100644
|
||||
--- a/drivers/net/wireless/uwe5622/Makefile
|
||||
+++ b/drivers/net/wireless/uwe5622/Makefile
|
||||
@@ -6,5 +6,5 @@ UNISOCWCN_DIR := $(shell cd $(src)/unisocwcn/ && /bin/pwd)
|
||||
UNISOC_BSP_INCLUDE := $(UNISOCWCN_DIR)/include
|
||||
export UNISOC_BSP_INCLUDE
|
||||
|
||||
-UNISOC_FW_PATH_CONFIG := "/lib/firmware/"
|
||||
+UNISOC_FW_PATH_CONFIG := "/lib/firmware/uwe5622/"
|
||||
export UNISOC_FW_PATH_CONFIG
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.c
|
||||
index 86fa3b103ad..1343cb98362 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/rdc_debug.c
|
||||
@@ -41,13 +41,13 @@ static unsigned int wcn_cp2_file_max_num = UNISOC_DBG_FILENUM_DEFAULT;
|
||||
*/
|
||||
static unsigned int wcn_cp2_log_cover_old = 1;
|
||||
/* path of config file unisoc_cp2log_config.txt */
|
||||
-#define WCN_DEBUG_CFG_MAX_PATH_NUM 0
|
||||
+#define WCN_DEBUG_CFG_MAX_PATH_NUM 2
|
||||
static char *wcn_cp2_config_path[WCN_DEBUG_CFG_MAX_PATH_NUM] = {
|
||||
"/data/unisoc_cp2log_config.txt",
|
||||
"/vendor/etc/wifi/unisoc_cp2log_config.txt"
|
||||
};
|
||||
/* path of cp2 log and mem files. */
|
||||
-#define WCN_UNISOC_DBG_MAX_PATH_NUM 0
|
||||
+#define WCN_UNISOC_DBG_MAX_PATH_NUM 3
|
||||
static char *wcn_unisoc_dbg_path[WCN_UNISOC_DBG_MAX_PATH_NUM] = {
|
||||
UNISOC_DBG_PATH_DEFAULT,/* most of projects */
|
||||
"/data", /* amlogic s905w... */
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
index d82f56357f3..58b9d290f23 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
|
||||
@@ -325,8 +325,6 @@ static struct regmap *reg_map;
|
||||
#define AFC_CALI_READ_FINISH 0x12121212
|
||||
#define WCN_AFC_CALI_PATH "/productinfo/wcn/tsx_bt_data.txt"
|
||||
|
||||
-#define BIT(nr) (1UL << (nr))
|
||||
-
|
||||
#ifdef CONFIG_WCN_DOWNLOAD_FIRMWARE_FROM_HEX
|
||||
#define POWER_WQ_DELAYED_MS 0
|
||||
#else
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
index 9abcd326972..c1557dcce3f 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_parn_parser.c
|
||||
@@ -183,7 +183,7 @@ int parse_firmware_path(char *firmware_path)
|
||||
continue;
|
||||
}
|
||||
memset(fstab_name, 0, sizeof(fstab_name));
|
||||
- strncpy(fstab_name, fstab_dir[loop], sizeof(fstab_dir[loop]));
|
||||
+ strncpy(fstab_name, fstab_dir[loop], sizeof(fstab_name));
|
||||
if (strlen(fstab_name) > 1)
|
||||
fstab_name[strlen(fstab_name)] = '/';
|
||||
iterate_dir(file1, &ctx);
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_ctl.c b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_ctl.c
|
||||
index b426bf89cd9..8000bfea378 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_ctl.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwcn/sdio/sdiohal_ctl.c
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/vmalloc.h>
|
||||
+#include <linux/ktime.h>
|
||||
#include <wcn_bus.h>
|
||||
|
||||
#include "sdiohal.h"
|
||||
@@ -96,8 +97,10 @@ char *tp_tx_buf[TP_TX_BUF_CNT];
|
||||
|
||||
struct mchn_ops_t at_tx_ops;
|
||||
struct mchn_ops_t at_rx_ops;
|
||||
-struct timeval tp_tx_start_time;
|
||||
-struct timeval tp_tx_stop_time;
|
||||
+ktime_t tp_tx_start_time;
|
||||
+ktime_t tp_tx_stop_time;
|
||||
+ktime_t tp_rx_start_time;
|
||||
+ktime_t tp_rx_stop_time;
|
||||
int tp_tx_cnt;
|
||||
int tp_tx_flag;
|
||||
int tp_tx_buf_cnt = TP_TX_BUF_CNT;
|
||||
@@ -222,7 +225,6 @@ static int sdiohal_throughput_tx(void)
|
||||
static void sdiohal_throughput_tx_compute_time(void)
|
||||
{
|
||||
static signed long long times_count;
|
||||
- struct timespec64 now;
|
||||
|
||||
if (tp_tx_flag != 1)
|
||||
return;
|
||||
@@ -230,17 +232,12 @@ static void sdiohal_throughput_tx_compute_time(void)
|
||||
/* throughput test */
|
||||
tp_tx_cnt++;
|
||||
if (tp_tx_cnt % 500 == 0) {
|
||||
- getnstimeofday(&now);
|
||||
- tp_tx_stop_time.tv_sec = now.tv_sec;
|
||||
- tp_tx_stop_time.tv_usec = now.tv_nsec/1000;
|
||||
- times_count = timeval_to_ns(&tp_tx_stop_time) -
|
||||
- timeval_to_ns(&tp_tx_start_time);
|
||||
+ tp_tx_stop_time = ktime_get();
|
||||
+ times_count = tp_tx_stop_time - tp_tx_start_time;
|
||||
sdiohal_info("tx->times(500c) is %lldns, tx %d, rx %d\n",
|
||||
times_count, tp_tx_cnt, rx_pop_cnt);
|
||||
tp_tx_cnt = 0;
|
||||
- getnstimeofday(&now);
|
||||
- tp_tx_start_time.tv_sec = now.tv_sec;
|
||||
- tp_tx_start_time.tv_usec = now.tv_nsec/1000;
|
||||
+ tp_tx_start_time = ktime_get();
|
||||
}
|
||||
sdiohal_throughput_tx();
|
||||
}
|
||||
@@ -544,14 +541,10 @@ int at_list_tx_pop(int channel, struct mbuf_t *head,
|
||||
}
|
||||
|
||||
int tp_rx_cnt;
|
||||
-struct timeval tp_rx_start_time;
|
||||
-struct timeval tp_rx_stop_time;
|
||||
-struct timespec tp_tm_begin;
|
||||
int at_list_rx_pop(int channel, struct mbuf_t *head,
|
||||
struct mbuf_t *tail, int num)
|
||||
{
|
||||
- static signed long long times_count;
|
||||
- struct timespec64 now;
|
||||
+ ktime_t times_count;
|
||||
|
||||
sdiohal_debug("%s channel:%d head:%p tail:%p num:%d\n",
|
||||
__func__, channel, head, tail, num);
|
||||
@@ -568,19 +561,13 @@ int at_list_rx_pop(int channel, struct mbuf_t *head,
|
||||
/* throughput test */
|
||||
tp_rx_cnt += num;
|
||||
if (tp_rx_cnt / (500*64) == 1) {
|
||||
- getnstimeofday(&now);
|
||||
- tp_rx_stop_time.tv_sec = now.tv_sec;
|
||||
- tp_rx_stop_time.tv_usec = now.tv_nsec/1000;
|
||||
- times_count = timeval_to_ns(&tp_rx_stop_time)
|
||||
- - timeval_to_ns(&tp_rx_start_time);
|
||||
+ tp_rx_stop_time = ktime_get();
|
||||
+ times_count = tp_rx_stop_time - tp_rx_start_time;
|
||||
sdiohal_info("rx->times(%dc) is %lldns, tx %d, rx %d\n",
|
||||
tp_rx_cnt, times_count, tp_tx_cnt, rx_pop_cnt);
|
||||
tp_rx_cnt = 0;
|
||||
- getnstimeofday(&now);
|
||||
- tp_rx_start_time.tv_sec = now.tv_sec;
|
||||
- tp_rx_start_time.tv_usec = now.tv_nsec/1000;
|
||||
+ tp_rx_start_time = ktime_get();
|
||||
}
|
||||
- getnstimeofday(&tp_tm_begin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -834,7 +821,6 @@ static ssize_t at_cmd_write(struct file *filp,
|
||||
long int long_data;
|
||||
int ret;
|
||||
unsigned char *send_buf = NULL;
|
||||
- struct timespec64 now;
|
||||
|
||||
if (count > SDIOHAL_WRITE_SIZE) {
|
||||
sdiohal_err("%s write size > %d\n",
|
||||
@@ -1127,9 +1113,7 @@ static ssize_t at_cmd_write(struct file *filp,
|
||||
__func__, tp_tx_buf_cnt, tp_tx_buf_len);
|
||||
tp_tx_flag = 1;
|
||||
tp_tx_cnt = 0;
|
||||
- getnstimeofday(&now);
|
||||
- tp_tx_start_time.tv_sec = now.tv_sec;
|
||||
- tp_tx_start_time.tv_usec = now.tv_nsec/1000;
|
||||
+ tp_tx_start_time = ktime_get();
|
||||
if ((tp_tx_buf_cnt <= TP_TX_BUF_CNT) &&
|
||||
(tp_tx_buf_len <= TP_TX_BUF_LEN)) {
|
||||
sprdwcn_bus_chn_deinit(&at_tx_ops);
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c
|
||||
index ad310450e79..206824604ec 100755
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwifi/wl_core.c
|
||||
@@ -628,12 +628,12 @@ static int sprdwl_probe(struct platform_device *pdev)
|
||||
ret = -ENXIO;
|
||||
goto err_core_create;
|
||||
}
|
||||
- memcpy(priv->wl_ver.kernel_ver, utsname()->release,
|
||||
- strlen(utsname()->release));
|
||||
- memcpy(priv->wl_ver.drv_ver, SPRDWL_DRIVER_VERSION,
|
||||
- strlen(SPRDWL_DRIVER_VERSION));
|
||||
- memcpy(priv->wl_ver.update, SPRDWL_UPDATE, strlen(SPRDWL_UPDATE));
|
||||
- memcpy(priv->wl_ver.reserve, SPRDWL_RESERVE, strlen(SPRDWL_RESERVE));
|
||||
+ strncpy(priv->wl_ver.kernel_ver, utsname()->release,
|
||||
+ sizeof(priv->wl_ver.kernel_ver));
|
||||
+ strncpy(priv->wl_ver.drv_ver, SPRDWL_DRIVER_VERSION,
|
||||
+ sizeof(priv->wl_ver.drv_ver));
|
||||
+ strncpy(priv->wl_ver.update, SPRDWL_UPDATE, sizeof(priv->wl_ver.update));
|
||||
+ strncpy(priv->wl_ver.reserve, SPRDWL_RESERVE, sizeof(priv->wl_ver.reserve));
|
||||
wl_info("Spreadtrum WLAN Version:");
|
||||
wl_info("Kernel:%s,Driver:%s,update:%s,reserved:%s\n",
|
||||
utsname()->release, SPRDWL_DRIVER_VERSION,
|
|
@ -0,0 +1,33 @@
|
|||
From 4cf270a8ac06021e0f6cf30790d089584cb24b67 Mon Sep 17 00:00:00 2001
|
||||
From: Gunjan Gupta <viraniac@gmail.com>
|
||||
Date: Sat, 23 Dec 2023 10:05:30 +0000
|
||||
Subject: [PATCH] wireless: uwe5622: Fix compilation with 6.7 kernel
|
||||
|
||||
---
|
||||
drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
index b2f9a877edce..34b2e5e4274d 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwifi/cfg80211.c
|
||||
@@ -964,9 +964,16 @@ static int sprdwl_cfg80211_start_ap(struct wiphy *wiphy,
|
||||
|
||||
static int sprdwl_cfg80211_change_beacon(struct wiphy *wiphy,
|
||||
struct net_device *ndev,
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0))
|
||||
+ struct cfg80211_ap_update *info)
|
||||
+#else
|
||||
struct cfg80211_beacon_data *beacon)
|
||||
+#endif
|
||||
{
|
||||
struct sprdwl_vif *vif = netdev_priv(ndev);
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0))
|
||||
+ struct cfg80211_beacon_data *beacon = &(info->beacon);
|
||||
+#endif
|
||||
|
||||
wl_ndev_log(L_DBG, ndev, "%s\n", __func__);
|
||||
#ifdef DFS_MASTER
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 2bf93d6cfe24f56baa12f75a57b71dfc33fe322a Mon Sep 17 00:00:00 2001
|
||||
From: Gunjan Gupta <viraniac@gmail.com>
|
||||
Date: Tue, 2 Jan 2024 13:23:23 +0000
|
||||
Subject: [PATCH] wireless: uwe5622: reduce system load
|
||||
|
||||
Based on https://github.com/pyavitz/debian-image-builder/commit/cbed5020641ad2d2a6c2df0a2ce68586da1b1635
|
||||
---
|
||||
drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c
|
||||
index 40d51a7130d9..040193d3115d 100644
|
||||
--- a/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c
|
||||
+++ b/drivers/net/wireless/uwe5622/unisocwifi/tx_msg.c
|
||||
@@ -317,7 +317,10 @@ void sprdwl_dequeue_data_list(struct mbuf_t *head, int num)
|
||||
/* seam for tx_thread */
|
||||
void tx_down(struct sprdwl_tx_msg *tx_msg)
|
||||
{
|
||||
- wait_for_completion(&tx_msg->tx_completed);
|
||||
+ int ret;
|
||||
+ do {
|
||||
+ ret = wait_for_completion_interruptible(&tx_msg->tx_completed);
|
||||
+ } while (ret == -ERESTARTSYS);
|
||||
}
|
||||
|
||||
void tx_up(struct sprdwl_tx_msg *tx_msg)
|
||||
--
|
||||
2.34.1
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue