//0x7F, pdp_hdr static int multipdp_demux(char *buf, int size) { int ret; u8 ch; size_t len; struct pdp_info *dev = NULL; struct pdp_hdr hdr; //printk("multipdp_demux : size = %d\n", size); //mutex_lock(&pdp_lock); memcpy( (void *)&hdr, (void *)buf, sizeof( struct pdp_hdr)); len = hdr.len - sizeof(struct pdp_hdr); dev = pdp_get_dev(hdr.id); if (dev == NULL) { printk("========================================= : (1)\n"); yhexdump((char*)&hdr, sizeof(struct pdp_hdr)); printk("========================================= : (2)\n"); yhexdump((char*)buf, size); printk("========================================= : (3)\n"); EPRINTK("invalid id: %u, there is no existing device.\n", hdr.id); multipdp_dump(); ret = -ENODEV; goto err; } if( buf[-1] != 0x7F) { printk("============ multipdp_demux : ******** not 0x7F \n"); } if( len > size ) { printk("============== multipdp_demux : len>size : len=%d, size=%d\n", size, len); } /* read data */ switch (dev->type) { case DEV_TYPE_NET: if( len > 1500 ) { printk("-------------> len is [%d]\n", len); multipdp_dump(); } //printk("multipdp_demux:vnet_recv(VNET) (1): len = %d\n", len); ret = multipdp_vnet_recv(dev, (char *)&buf[sizeof(struct pdp_hdr)], len); break; case DEV_TYPE_SERIAL: //printk("multipdp_demux:vs_read(SERIAL) : len = %d\n", len); ret = multipdp_vs_read(dev, (char *)&buf[sizeof(struct pdp_hdr)], len); break; default: printk("-------------> type invalid [%d]\n", dev->type); multipdp_dump(); ret = -1; } if (ret < 0) { goto err; } /* check stop byte */ ch = buf[hdr.len]; if ( ch != 0x7e) { printk(" *******Not 0x7E ... !!!!\n"); //mutex_unlock(&pdp_lock); return ret; } //mutex_unlock(&pdp_lock); return ret; err: /* flush the remaining data including stop byte. */ //mutex_unlock(&pdp_lock); return ret; }
static int multipdp_demux(char *buf, int size) { int ret; u8 ch; size_t len; struct pdp_info *dev = NULL; struct pdp_hdr hdr; /* mutex_lock(&pdp_lock); */ memcpy((void *)&hdr, (void *)buf, sizeof(struct pdp_hdr)); len = hdr.len - sizeof(struct pdp_hdr); dev = pdp_get_dev(hdr.id); if (dev == NULL) { pr_err("[MULTIPDP] invalid id: %u, no existing device.\n", hdr.id); yhexdump((char *)&hdr, sizeof(struct pdp_hdr)); multipdp_dump(); ret = -ENODEV; goto err; } if (buf[-1] != 0x7F) pr_err("[MULTIPDP] Start byte is not 0x7F\n"); if (len > size) pr_err("[MULTIPDP] len>size : len=%d, size=%d\n", size, len); /* read data */ switch (dev->type) { case DEV_TYPE_NET: if (len > 1500) { pr_err("[MULTIPDP] TYPE_NET len is [%d]\n", len); multipdp_dump(); } ret = multipdp_vnet_recv(dev, (char *)&buf[sizeof(struct pdp_hdr)], len); break; case DEV_TYPE_SERIAL: ret = multipdp_vs_read(dev, (char *)&buf[sizeof(struct pdp_hdr)], len); break; default: pr_err("[MULTIPDP] Type invalid [%d]\n", dev->type); multipdp_dump(); ret = -1; } if (ret < 0) goto err; /* check stop byte */ ch = buf[hdr.len]; if (ch != 0x7e) { pr_err("[MULTIPDP] End byte is Not 0x7E ... !!!!\n"); /* mutex_unlock(&pdp_lock); */ return ret; } /* mutex_unlock(&pdp_lock); */ return ret; err: /* flush the remaining data including stop byte. */ /* mutex_unlock(&pdp_lock); */ return ret; }