static void redrat3_read_packet_start(struct redrat3_dev *rr3, int len) { u16 tx_error; u16 hdrlen; rr3_ftr(rr3->dev, "Entering %s\n", __func__); /* */ memcpy(&(rr3->pktlen), (unsigned char *) rr3->bulk_in_buf, sizeof(rr3->pktlen)); memcpy(&(rr3->pkttype), ((unsigned char *) rr3->bulk_in_buf + sizeof(rr3->pktlen)), sizeof(rr3->pkttype)); /* */ rr3->pktlen = be16_to_cpu(rr3->pktlen); rr3->pkttype = be16_to_cpu(rr3->pkttype); switch (rr3->pkttype) { case RR3_ERROR: memcpy(&tx_error, ((unsigned char *)rr3->bulk_in_buf + (sizeof(rr3->pktlen) + sizeof(rr3->pkttype))), sizeof(tx_error)); tx_error = be16_to_cpu(tx_error); redrat3_dump_fw_error(rr3, tx_error); break; case RR3_MOD_SIGNAL_IN: hdrlen = sizeof(rr3->pktlen) + sizeof(rr3->pkttype); rr3->bytes_read = len; rr3->bytes_read -= hdrlen; rr3->datap = &(rr3->pbuf[0]); memcpy(rr3->datap, ((unsigned char *)rr3->bulk_in_buf + hdrlen), rr3->bytes_read); rr3->datap += rr3->bytes_read; rr3_dbg(rr3->dev, "bytes_read %d, pktlen %d\n", rr3->bytes_read, rr3->pktlen); break; default: rr3_dbg(rr3->dev, "ignoring packet with type 0x%02x, " "len of %d, 0x%02x\n", rr3->pkttype, len, rr3->pktlen); break; } }
static void redrat3_read_packet_start(struct redrat3_dev *rr3, unsigned len) { struct redrat3_header *header = rr3->bulk_in_buf; unsigned pktlen, pkttype; rr3_ftr(rr3->dev, "Entering %s\n", __func__); /* grab the Length and type of transfer */ pktlen = be16_to_cpu(header->length); pkttype = be16_to_cpu(header->transfer_type); if (pktlen > sizeof(rr3->irdata)) { dev_warn(rr3->dev, "packet length %u too large\n", pktlen); return; } switch (pkttype) { case RR3_ERROR: if (len >= sizeof(struct redrat3_error)) { struct redrat3_error *error = rr3->bulk_in_buf; unsigned fw_error = be16_to_cpu(error->fw_error); redrat3_dump_fw_error(rr3, fw_error); } break; case RR3_MOD_SIGNAL_IN: memcpy(&rr3->irdata, rr3->bulk_in_buf, len); rr3->bytes_read = len; rr3_dbg(rr3->dev, "bytes_read %d, pktlen %d\n", rr3->bytes_read, pktlen); break; default: rr3_dbg(rr3->dev, "ignoring packet with type 0x%02x, len of %d, 0x%02x\n", pkttype, len, pktlen); break; } }