- 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);