コード例 #1
0
ファイル: atl1e_ethtool.c プロジェクト: jiangchengbin/src
static int
atl1e_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
{
    struct atl1e_adapter *adapter = netdev_priv(netdev);

    if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE))
        return -EOPNOTSUPP;

    if (wol->wolopts & (WAKE_MCAST|WAKE_BCAST|WAKE_MCAST)) {
        AT_DBG("Interface does not support broadcast/multicast frame wake-up packets\n");
        return -EOPNOTSUPP;
    }

    /* these settings will always override what we currently have */
    adapter->wol = 0;

    if (wol->wolopts & WAKE_MAGIC) {
        adapter->wol |= AT_WUFC_MAG;
        DEBUGOUT("magic WOL enable");
    }
    if (wol->wolopts & WAKE_PHY) {
        adapter->wol |= AT_WUFC_LNKC;
        DEBUGOUT("linkchg WOL enable");
    }

    return 0;
}
コード例 #2
0
static void ICACHE_FLASH_ATTR parseWsFrame(char *data, WSFrame *frame) {
	uint8_t masked_length;
	frame->flags = (*data) & FLAGS_MASK;
	frame->opcode = (*data) & OPCODE_MASK;
	//next byte
	data += 1;
	frame->isMasked = (*data) & IS_MASKED;
	frame->payloadLength = (*data) & PAYLOAD_MASK;

	//next byte
	data += 1;

	if (frame->payloadLength == 126) {
		os_memcpy(&frame->payloadLength, data, sizeof(uint16_t));
		data += sizeof(uint16_t);
	} else if (frame->payloadLength == 127) {
		//CANNOT support.
		AT_DBG("CANNOT SUPPORT BIG DATA PACKAGE.");
		os_memcpy(&frame->payloadLength, data, sizeof(uint64_t));
		data += sizeof(uint64_t);
	}

	if (frame->isMasked) {
		os_memcpy(&frame->maskingKey, data, sizeof(uint32_t));
		data += sizeof(uint32_t);
	}

	frame->payloadData = data;
}
コード例 #3
0
ファイル: at_queue.c プロジェクト: diguokaituozhe/XR871
AT_QUEUE_ERROR_CODE at_queue_get(u8 *element)
{
	at_queue_t *q = &at_queue;
	u8 winbuf[32];
	s32 dcnt;

	if (q->qcnt <= 0) {
		if (at_queue_callback != NULL) {
			dcnt = at_queue_callback(winbuf, sizeof(winbuf));

			if (dcnt > 0) {
				if (dcnt > q->qsize - q->qcnt) {
					AT_DBG("queue is overflow\n");
				}
				else {
					s32 i;

					for (i=0; i < dcnt; i++) {
						q->qbuf[q->widx++] = winbuf[i];
						q->widx = q->widx >= q->qsize ? 0 : q->widx;
						q->qcnt++;
					}
				}
			}
			else {
				return AQEC_EMPTY;
			}
		}
		else {
			return AQEC_EMPTY;
		}
	}

	*element = q->qbuf[q->ridx++];
	q->ridx = q->ridx >= q->qsize ? 0 : q->ridx;
	q->qcnt--;

	return AQEC_OK;
}