mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-24 05:48:41 +00:00
* [Early WIP] Update sunxi-next to kernel 4.17 * Switch Allwinner 32 and 64bit to U-boot 2018.05 * Adjust patched for 4.17.y / sunxi-next - adjust both configurations - removing FAT support from u-boot (breaks if you try to save) Tested those boards: Cubietruck: wlan fails http://ix.io/1fYS USB OK, HDMI yes Bananapi R40: http://ix.io/1fZm USB OK, HDMI yes Lime A64: USB no, HDMI no, wireless buggy, eMMC yes Orangepi prime H5: OK http://ix.io/1fZJ DVFS no Orangepi2e: DVFS OK, HDMI OK, net OK, wifi OK, eMMC ok, http://ix.io/1fZT * Kernel config update, enabling HDMI on CT+ * Trying to fix A64 HDMI but failed. Fixed M64 ethernet instead * Update orangepioneplus.wip * Update orangepioneplus.wip * Fix H6 build process * Add regulator bits for Orangepizero+, thanks to @5kft * add H5 support for optional 1.3v regulator and 1.3GHz operation This patch adds two optional overlays that can be used to: 1) enable the 1.1v/1.3v regulator on boards that provide the necessary compatible H/W support 2) modify the default CPU clock operating table to add new 1.2GHz and 1.3GHz clocks Note that the generated regulator overlay will only support boards whose 1.1v/1.3v regulator is controlled by GPIO PL6. * updates for the NanoPi NEO Plus2 This change introduces a patch that provides two changes for the NanoPi NEO Plus2: * Configure the "cpu0" to use the "vdd_cpux" regulator; this enables the ability to use higher CPU clocks * Correct the configurations of the on-board power and status LEDs * Adjust nightly building and few boards config cleanup
113 lines
4 KiB
Diff
113 lines
4 KiB
Diff
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
index 72954fd6df3b..b1f702faff4f 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
@@ -21,6 +21,7 @@
|
|
#include <net/cfg80211.h>
|
|
#include <net/rtnetlink.h>
|
|
#include <net/addrconf.h>
|
|
+#include <net/ieee80211_radiotap.h>
|
|
#include <net/ipv6.h>
|
|
#include <brcmu_utils.h>
|
|
#include <brcmu_wifi.h>
|
|
@@ -404,6 +405,30 @@ void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
|
netif_rx_ni(skb);
|
|
}
|
|
|
|
+void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb)
|
|
+{
|
|
+ if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_MONITOR_FMT_RADIOTAP)) {
|
|
+ /* Do nothing */
|
|
+ } else {
|
|
+ struct ieee80211_radiotap_header *radiotap;
|
|
+
|
|
+ /* TODO: use RX status to fill some radiotap data */
|
|
+ radiotap = skb_push(skb, sizeof(*radiotap));
|
|
+ memset(radiotap, 0, sizeof(*radiotap));
|
|
+ radiotap->it_len = cpu_to_le16(sizeof(*radiotap));
|
|
+
|
|
+ /* TODO: 4 bytes with receive status? */
|
|
+ skb->len -= 4;
|
|
+ }
|
|
+
|
|
+ skb->dev = ifp->ndev;
|
|
+ skb_reset_mac_header(skb);
|
|
+ skb->pkt_type = PACKET_OTHERHOST;
|
|
+ skb->protocol = htons(ETH_P_802_2);
|
|
+
|
|
+ brcmf_netif_rx(ifp, skb);
|
|
+}
|
|
+
|
|
static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
|
|
struct brcmf_if **ifp)
|
|
{
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
|
index 401f50458686..dcf6e27cc16f 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
|
|
@@ -121,6 +121,7 @@ struct brcmf_pub {
|
|
|
|
struct brcmf_if *iflist[BRCMF_MAX_IFS];
|
|
s32 if2bss[BRCMF_MAX_IFS];
|
|
+ struct brcmf_if *mon_if;
|
|
|
|
struct mutex proto_block;
|
|
unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
|
|
@@ -216,6 +217,7 @@ void brcmf_txflowblock_if(struct brcmf_if *ifp,
|
|
enum brcmf_netif_stop_reason reason, bool state);
|
|
void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
|
|
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
|
+void brcmf_netif_mon_rx(struct brcmf_if *ifp, struct sk_buff *skb);
|
|
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
|
|
int __init brcmf_core_init(void);
|
|
void __exit brcmf_core_exit(void);
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
index c40ba8855cd5..4e8397a0cbc8 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
@@ -69,6 +69,8 @@
|
|
#define BRCMF_MSGBUF_MAX_EVENTBUF_POST 8
|
|
|
|
#define BRCMF_MSGBUF_PKT_FLAGS_FRAME_802_3 0x01
|
|
+#define BRCMF_MSGBUF_PKT_FLAGS_FRAME_802_11 0x02
|
|
+#define BRCMF_MSGBUF_PKT_FLAGS_FRAME_MASK 0x07
|
|
#define BRCMF_MSGBUF_PKT_FLAGS_PRIO_SHIFT 5
|
|
|
|
#define BRCMF_MSGBUF_TX_FLUSH_CNT1 32
|
|
@@ -1128,6 +1130,7 @@ brcmf_msgbuf_process_rx_complete(struct brcmf_msgbuf *msgbuf, void *buf)
|
|
struct sk_buff *skb;
|
|
u16 data_offset;
|
|
u16 buflen;
|
|
+ u16 flags;
|
|
u32 idx;
|
|
struct brcmf_if *ifp;
|
|
|
|
@@ -1137,6 +1140,7 @@ brcmf_msgbuf_process_rx_complete(struct brcmf_msgbuf *msgbuf, void *buf)
|
|
data_offset = le16_to_cpu(rx_complete->data_offset);
|
|
buflen = le16_to_cpu(rx_complete->data_len);
|
|
idx = le32_to_cpu(rx_complete->msg.request_id);
|
|
+ flags = le16_to_cpu(rx_complete->flags);
|
|
|
|
skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,
|
|
msgbuf->rx_pktids, idx);
|
|
@@ -1150,6 +1154,20 @@ brcmf_msgbuf_process_rx_complete(struct brcmf_msgbuf *msgbuf, void *buf)
|
|
|
|
skb_trim(skb, buflen);
|
|
|
|
+ if ((flags & BRCMF_MSGBUF_PKT_FLAGS_FRAME_MASK) ==
|
|
+ BRCMF_MSGBUF_PKT_FLAGS_FRAME_802_11) {
|
|
+ ifp = msgbuf->drvr->mon_if;
|
|
+
|
|
+ if (!ifp) {
|
|
+ brcmf_err("Received unexpected monitor pkt\n");
|
|
+ brcmu_pkt_buf_free_skb(skb);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ brcmf_netif_mon_rx(ifp, skb);
|
|
+ return;
|
|
+ }
|
|
+
|
|
ifp = brcmf_get_ifp(msgbuf->drvr, rx_complete->msg.ifidx);
|
|
if (!ifp || !ifp->ndev) {
|
|
brcmf_err("Received pkt for invalid ifidx %d\n",
|