Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 341480
b: refs/heads/master
c: 607d5c0
h: refs/heads/master
v: v3
  • Loading branch information
Arend van Spriel authored and John W. Linville committed Nov 16, 2012
1 parent 34764d6 commit c92f0af
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bdf5ff516b453137cecb71e60ff860ec0a704509
refs/heads/master: 607d5c0ef6c4d3a2e7a61ba1b62baa0712366bc0
66 changes: 31 additions & 35 deletions trunk/drivers/net/wireless/brcm80211/brcmfmac/fweh.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,42 +191,13 @@ static const char *brcmf_fweh_event_name(enum brcmf_fweh_event_code code)
/**
* brcmf_fweh_queue_event() - create and queue event.
*
* @ifp: firmware interface object.
* @code: event code.
* @pkt: event ether packet.
* @fweh: firmware event handling info.
* @event: event queue entry.
*/
static void brcmf_fweh_queue_event(struct brcmf_if *ifp,
enum brcmf_fweh_event_code code,
struct brcmf_event *pkt)
static void brcmf_fweh_queue_event(struct brcmf_fweh_info *fweh,
struct brcmf_fweh_queue_item *event)
{
struct brcmf_fweh_info *fweh = &ifp->drvr->fweh;
struct brcmf_fweh_queue_item *event;
gfp_t alloc_flag = GFP_KERNEL;
ulong flags;
void *data;
u32 datalen;

/* determine event data */
datalen = get_unaligned_be32(&pkt->msg.datalen);
data = &pkt[1];

if (!ifp->ndev || (code != BRCMF_E_IF && !fweh->evt_handler[code])) {
brcmf_dbg(EVENT, "event ignored: code=%d\n", code);
brcmf_dbg_hex_dump(BRCMF_EVENT_ON(), data, datalen, "event:");
return;
}

if (in_interrupt())
alloc_flag = GFP_ATOMIC;

event = kzalloc(sizeof(*event) + datalen, alloc_flag);
event->code = code;
event->ifidx = ifp->idx;

/* use memcpy to get aligned event message */
memcpy(&event->emsg, &pkt->msg, sizeof(event->emsg));
memcpy(event->data, data, datalen);
memcpy(event->ifaddr, pkt->eth.h_dest, ETH_ALEN);

spin_lock_irqsave(&fweh->evt_q_lock, flags);
list_add_tail(&event->q, &fweh->event_q);
Expand Down Expand Up @@ -489,10 +460,35 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
struct brcmf_event *event_packet, u8 *ifidx)
{
enum brcmf_fweh_event_code code;
struct brcmf_fweh_info *fweh = &drvr->fweh;
struct brcmf_fweh_queue_item *event;
gfp_t alloc_flag = GFP_KERNEL;
void *data;
u32 datalen;

/* determine event code and interface index */
/* get event info */
code = get_unaligned_be32(&event_packet->msg.event_type);
datalen = get_unaligned_be32(&event_packet->msg.datalen);
*ifidx = event_packet->msg.ifidx;
data = &event_packet[1];

if (code != BRCMF_E_IF && !fweh->evt_handler[code]) {
brcmf_dbg(EVENT, "event ignored: code=%d\n", code);
brcmf_dbg_hex_dump(BRCMF_EVENT_ON(), data, datalen, "event:");
return;
}

if (in_interrupt())
alloc_flag = GFP_ATOMIC;

event = kzalloc(sizeof(*event) + datalen, alloc_flag);
event->code = code;
event->ifidx = *ifidx;

/* use memcpy to get aligned event message */
memcpy(&event->emsg, &event_packet->msg, sizeof(event->emsg));
memcpy(event->data, data, datalen);
memcpy(event->ifaddr, event_packet->eth.h_dest, ETH_ALEN);

brcmf_fweh_queue_event(drvr->iflist[*ifidx], code, event_packet);
brcmf_fweh_queue_event(fweh, event);
}

0 comments on commit c92f0af

Please sign in to comment.