Skip to content

Commit 953bd76

Browse files
committed
Merge branch 'refs/heads/bits/080-wifi' into asahi-wip
2 parents 0f3a4c4 + 8ee3bde commit 953bd76

10 files changed

Lines changed: 301 additions & 73 deletions

File tree

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212

1313
static int brcmf_bca_attach(struct brcmf_pub *drvr)
1414
{
15-
pr_err("%s: executing\n", __func__);
15+
pr_info("%s: executing\n", __func__);
1616
return 0;
1717
}
1818

1919
static void brcmf_bca_detach(struct brcmf_pub *drvr)
2020
{
21-
pr_err("%s: executing\n", __func__);
21+
pr_info("%s: executing\n", __func__);
2222
}
2323

2424
const struct brcmf_fwvid_ops brcmf_bca_ops = {

drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ struct brcmf_bus_ops {
107107
void (*debugfs_create)(struct device *dev);
108108
int (*reset)(struct device *dev);
109109
void (*remove)(struct device *dev);
110+
void (*d2h_mb_rx)(struct device *dev, u32 data);
110111
};
111112

112113

@@ -286,6 +287,15 @@ static inline void brcmf_bus_remove(struct brcmf_bus *bus)
286287
bus->ops->remove(bus->dev);
287288
}
288289

290+
static inline
291+
void brcmf_bus_d2h_mb_rx(struct brcmf_bus *bus, u32 data)
292+
{
293+
if (!bus->ops->d2h_mb_rx)
294+
return;
295+
296+
return bus->ops->d2h_mb_rx(bus->dev, data);
297+
}
298+
289299
/*
290300
* interface functions from common layer
291301
*/

drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,52 +1682,44 @@ static u16 brcmf_map_fw_linkdown_reason(const struct brcmf_event_msg *e)
16821682
return reason;
16831683
}
16841684

1685-
static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len)
1685+
static int brcmf_set_wsec(struct brcmf_if *ifp, const u8 *key, u16 key_len, u16 flags)
16861686
{
16871687
struct brcmf_pub *drvr = ifp->drvr;
16881688
struct brcmf_wsec_pmk_le pmk;
16891689
int err;
16901690

1691+
if (key_len > sizeof(pmk.key)) {
1692+
bphy_err(drvr, "key must be less than %zu bytes\n",
1693+
sizeof(pmk.key));
1694+
return -EINVAL;
1695+
}
1696+
16911697
memset(&pmk, 0, sizeof(pmk));
16921698

1693-
/* pass pmk directly */
1694-
pmk.key_len = cpu_to_le16(pmk_len);
1695-
pmk.flags = cpu_to_le16(0);
1696-
memcpy(pmk.key, pmk_data, pmk_len);
1699+
/* pass key material directly */
1700+
pmk.key_len = cpu_to_le16(key_len);
1701+
pmk.flags = cpu_to_le16(flags);
1702+
memcpy(pmk.key, key, key_len);
16971703

1698-
/* store psk in firmware */
1704+
/* store key material in firmware */
16991705
err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_WSEC_PMK,
17001706
&pmk, sizeof(pmk));
17011707
if (err < 0)
17021708
bphy_err(drvr, "failed to change PSK in firmware (len=%u)\n",
1703-
pmk_len);
1709+
key_len);
17041710

17051711
return err;
17061712
}
17071713

1714+
static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len)
1715+
{
1716+
return brcmf_set_wsec(ifp, pmk_data, pmk_len, 0);
1717+
}
1718+
17081719
static int brcmf_set_sae_password(struct brcmf_if *ifp, const u8 *pwd_data,
17091720
u16 pwd_len)
17101721
{
1711-
struct brcmf_pub *drvr = ifp->drvr;
1712-
struct brcmf_wsec_sae_pwd_le sae_pwd;
1713-
int err;
1714-
1715-
if (pwd_len > BRCMF_WSEC_MAX_SAE_PASSWORD_LEN) {
1716-
bphy_err(drvr, "sae_password must be less than %d\n",
1717-
BRCMF_WSEC_MAX_SAE_PASSWORD_LEN);
1718-
return -EINVAL;
1719-
}
1720-
1721-
sae_pwd.key_len = cpu_to_le16(pwd_len);
1722-
memcpy(sae_pwd.key, pwd_data, pwd_len);
1723-
1724-
err = brcmf_fil_iovar_data_set(ifp, "sae_password", &sae_pwd,
1725-
sizeof(sae_pwd));
1726-
if (err < 0)
1727-
bphy_err(drvr, "failed to set SAE password in firmware (len=%u)\n",
1728-
pwd_len);
1729-
1730-
return err;
1722+
return brcmf_set_wsec(ifp, pwd_data, pwd_len, BRCMF_WSEC_PASSPHRASE);
17311723
}
17321724

17331725
static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason,

drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212

1313
static int brcmf_cyw_attach(struct brcmf_pub *drvr)
1414
{
15-
pr_err("%s: executing\n", __func__);
15+
pr_info("%s: executing\n", __func__);
1616
return 0;
1717
}
1818

1919
static void brcmf_cyw_detach(struct brcmf_pub *drvr)
2020
{
21-
pr_err("%s: executing\n", __func__);
21+
pr_info("%s: executing\n", __func__);
2222
}
2323

2424
const struct brcmf_fwvid_ops brcmf_cyw_ops = {

drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ struct brcmf_wsec_key_le {
574574
struct brcmf_wsec_pmk_le {
575575
__le16 key_len;
576576
__le16 flags;
577-
u8 key[2 * BRCMF_WSEC_MAX_PSK_LEN + 1];
577+
u8 key[BRCMF_WSEC_MAX_SAE_PASSWORD_LEN];
578578
};
579579

580580
/**

drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,32 @@
4747
#define MSGBUF_TYPE_RX_CMPLT 0x12
4848
#define MSGBUF_TYPE_LPBK_DMAXFER 0x13
4949
#define MSGBUF_TYPE_LPBK_DMAXFER_CMPLT 0x14
50+
#define MSGBUF_TYPE_FLOW_RING_RESUME 0x15
51+
#define MSGBUF_TYPE_FLOW_RING_RESUME_CMPLT 0x16
52+
#define MSGBUF_TYPE_FLOW_RING_SUSPEND 0x17
53+
#define MSGBUF_TYPE_FLOW_RING_SUSPEND_CMPLT 0x18
54+
#define MSGBUF_TYPE_INFO_BUF_POST 0x19
55+
#define MSGBUF_TYPE_INFO_BUF_CMPLT 0x1A
56+
#define MSGBUF_TYPE_H2D_RING_CREATE 0x1B
57+
#define MSGBUF_TYPE_D2H_RING_CREATE 0x1C
58+
#define MSGBUF_TYPE_H2D_RING_CREATE_CMPLT 0x1D
59+
#define MSGBUF_TYPE_D2H_RING_CREATE_CMPLT 0x1E
60+
#define MSGBUF_TYPE_H2D_RING_CONFIG 0x1F
61+
#define MSGBUF_TYPE_D2H_RING_CONFIG 0x20
62+
#define MSGBUF_TYPE_H2D_RING_CONFIG_CMPLT 0x21
63+
#define MSGBUF_TYPE_D2H_RING_CONFIG_CMPLT 0x22
64+
#define MSGBUF_TYPE_H2D_MAILBOX_DATA 0x23
65+
#define MSGBUF_TYPE_D2H_MAILBOX_DATA 0x24
66+
#define MSGBUF_TYPE_TIMSTAMP_BUFPOST 0x25
67+
#define MSGBUF_TYPE_HOSTTIMSTAMP 0x26
68+
#define MSGBUF_TYPE_HOSTTIMSTAMP_CMPLT 0x27
69+
#define MSGBUF_TYPE_FIRMWARE_TIMESTAMP 0x28
70+
#define MSGBUF_TYPE_SNAPSHOT_UPLOAD 0x29
71+
#define MSGBUF_TYPE_SNAPSHOT_CMPLT 0x2A
72+
#define MSGBUF_TYPE_H2D_RING_DELETE 0x2B
73+
#define MSGBUF_TYPE_D2H_RING_DELETE 0x2C
74+
#define MSGBUF_TYPE_H2D_RING_DELETE_CMPLT 0x2D
75+
#define MSGBUF_TYPE_D2H_RING_DELETE_CMPLT 0x2E
5076

5177
#define NR_TX_PKTIDS 2048
5278
#define NR_RX_PKTIDS 1024
@@ -218,6 +244,19 @@ struct msgbuf_flowring_flush_resp {
218244
__le32 rsvd0[3];
219245
};
220246

247+
struct msgbuf_h2d_mailbox_data {
248+
struct msgbuf_common_hdr msg;
249+
__le32 data;
250+
__le32 rsvd0[7];
251+
};
252+
253+
struct msgbuf_d2h_mailbox_data {
254+
struct msgbuf_common_hdr msg;
255+
struct msgbuf_completion_hdr compl_hdr;
256+
__le32 data;
257+
__le32 rsvd0[2];
258+
};
259+
221260
struct brcmf_msgbuf_work_item {
222261
struct list_head queue;
223262
u32 flowid;
@@ -1285,6 +1324,16 @@ brcmf_msgbuf_process_flow_ring_delete_response(struct brcmf_msgbuf *msgbuf,
12851324
}
12861325

12871326

1327+
static void brcmf_msgbuf_process_d2h_mailbox_data(struct brcmf_msgbuf *msgbuf,
1328+
void *buf)
1329+
{
1330+
struct msgbuf_d2h_mailbox_data *d2h_mb_data = buf;
1331+
struct brcmf_pub *drvr = msgbuf->drvr;
1332+
1333+
brcmf_bus_d2h_mb_rx(drvr->bus_if, le32_to_cpu(d2h_mb_data->data));
1334+
}
1335+
1336+
12881337
static void brcmf_msgbuf_process_msgtype(struct brcmf_msgbuf *msgbuf, void *buf)
12891338
{
12901339
struct brcmf_pub *drvr = msgbuf->drvr;
@@ -1327,6 +1376,10 @@ static void brcmf_msgbuf_process_msgtype(struct brcmf_msgbuf *msgbuf, void *buf)
13271376
brcmf_dbg(MSGBUF, "MSGBUF_TYPE_RX_CMPLT\n");
13281377
brcmf_msgbuf_process_rx_complete(msgbuf, buf);
13291378
break;
1379+
case MSGBUF_TYPE_D2H_MAILBOX_DATA:
1380+
brcmf_dbg(MSGBUF, "MSGBUF_TYPE_D2H_MAILBOX_DATA\n");
1381+
brcmf_msgbuf_process_d2h_mailbox_data(msgbuf, buf);
1382+
break;
13301383
default:
13311384
bphy_err(drvr, "Unsupported msgtype %d\n", msg->msgtype);
13321385
break;
@@ -1465,6 +1518,38 @@ void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u16 flowid)
14651518
}
14661519
}
14671520

1521+
1522+
int brcmf_msgbuf_h2d_mb_write(struct brcmf_pub *drvr, u32 data)
1523+
{
1524+
struct brcmf_msgbuf *msgbuf = (struct brcmf_msgbuf *)drvr->proto->pd;
1525+
struct brcmf_commonring *commonring;
1526+
struct msgbuf_h2d_mailbox_data *request;
1527+
void *ret_ptr;
1528+
int err;
1529+
1530+
commonring = msgbuf->commonrings[BRCMF_H2D_MSGRING_CONTROL_SUBMIT];
1531+
brcmf_commonring_lock(commonring);
1532+
ret_ptr = brcmf_commonring_reserve_for_write(commonring);
1533+
if (!ret_ptr) {
1534+
bphy_err(drvr, "Failed to reserve space in commonring\n");
1535+
brcmf_commonring_unlock(commonring);
1536+
return -ENOMEM;
1537+
}
1538+
1539+
request = (struct msgbuf_h2d_mailbox_data *)ret_ptr;
1540+
request->msg.msgtype = MSGBUF_TYPE_H2D_MAILBOX_DATA;
1541+
request->msg.ifidx = -1;
1542+
request->msg.flags = 0;
1543+
request->msg.request_id = 0;
1544+
request->data = data;
1545+
1546+
err = brcmf_commonring_write_complete(commonring);
1547+
brcmf_commonring_unlock(commonring);
1548+
1549+
return err;
1550+
}
1551+
1552+
14681553
#ifdef DEBUG
14691554
static int brcmf_msgbuf_stats_read(struct seq_file *seq, void *data)
14701555
{

drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
3232
void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u16 flowid);
3333
int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr);
3434
void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr);
35+
int brcmf_msgbuf_h2d_mb_write(struct brcmf_pub *drvr, u32 data);
3536
#else
3637
static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
3738
{

drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1793,8 +1793,8 @@ bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
17931793
/* do not configure anything. it will be */
17941794
/* sent with a default configuration */
17951795
} else {
1796-
bphy_err(drvr, "Unknown Frame: category 0x%x, action 0x%x\n",
1797-
category, action);
1796+
bphy_info_once(drvr, "Unknown Frame: category 0x%x, action 0x%x\n",
1797+
category, action);
17981798
return false;
17991799
}
18001800

0 commit comments

Comments
 (0)