static int pdp_mux(struct pdp_info *dev, const void *data, size_t len ) { int ret; size_t nbytes; u8 *tx_buf; struct pdp_hdr *hdr; const u8 *buf; if(pdp_tx_flag){ if (dev->type == DEV_TYPE_NET) return -EAGAIN; } tx_buf = dev->tx_buf; hdr = (struct pdp_hdr *)(tx_buf + 1); buf = data; hdr->id = dev->id; hdr->control = 0; while (len) { if (len > MAX_PDP_DATA_LEN) { nbytes = MAX_PDP_DATA_LEN; } else { nbytes = len; } hdr->len = nbytes + sizeof(struct pdp_hdr); tx_buf[0] = 0x7f; memcpy(tx_buf + 1 + sizeof(struct pdp_hdr), buf, nbytes); tx_buf[1 + hdr->len] = 0x7e; DPRINTK(2, "hdr->id: %d, hdr->len: %d\n", hdr->id, hdr->len); // wake_lock_timeout(&pdp_wake_lock, 12*HZ/2); wake_lock_timeout(&pdp_wake_lock, pdp_wake_time); #ifdef NO_TTY_DPRAM ret = multipdp_write(tx_buf, hdr->len +2); if( ret <= 0 ) printk("pdp_mux:multipdp_write : len = %d\n", hdr->len+2); #endif if (ret < 0) { DPRINTK(1, "dpram_write() failed: %d\n", ret); return ret; } buf += nbytes; len -= nbytes; } return 0; }
static int pdp_mux(struct pdp_info *dev, const void *data, size_t len ) { int ret; // = 0; size_t nbytes; u8 *tx_buf; struct pdp_hdr *hdr; const u8 *buf; tx_buf = dev->tx_buf; hdr = (struct pdp_hdr *)(tx_buf + 1); buf = data; hdr->id = dev->id; hdr->control = 0; while (len) { if (len > MAX_PDP_DATA_LEN) { nbytes = MAX_PDP_DATA_LEN; } else { nbytes = len; } hdr->len = nbytes + sizeof(struct pdp_hdr); tx_buf[0] = 0x7f; memcpy(tx_buf + 1 + sizeof(struct pdp_hdr), buf, nbytes); tx_buf[1 + hdr->len] = 0x7e; DPRINTK(2, "hdr->id: %d, hdr->len: %d\n", hdr->id, hdr->len); wake_lock_timeout(&pdp_wake_lock, 6*HZ); #ifdef NO_TTY_DPRAM // ret = multipdp_write(tx_buf, hdr->len +2); // if( ret <= 0 ) // printk("pdp_mux:multipdp_write : len = %d\n", hdr->len+2); #endif if (ret < 0) { DPRINTK(1, "dpram_write() failed: %d\n", ret); printk(KERN_ERR "(%s) dpram_write() failed: %d\n",__func__, ret); return ret; } buf += nbytes; len -= nbytes; } return 0; }