}
 
 
-#if 0 //for multicore VNET
-/* used for poll pkt from virtio nic by VNET
- * only when vnet is running on sidecore */
-static int handle_pkt_tx_sidecore(struct guest_info *core, struct virtio_net_state * virtio) 
-{
-    struct virtio_queue * q = &(virtio->tx_vq);
-    struct virtio_net_hdr * hdr = NULL;
-    int recved = 0;
-    unsigned long flags;
-
-    if (!q->ring_avail_addr) {
-       return -ERR_VIRTIO_TXQ_NOSET;
-    }
-
-    flags = v3_lock_irqsave(virtio->tx_lock);
-
-    while (q->cur_avail_idx != q->avail->index) {
-       struct vring_desc * hdr_desc = NULL;
-       addr_t hdr_addr = 0;
-       uint16_t desc_idx = q->avail->ring[q->cur_avail_idx % q->queue_size];
-       int desc_cnt = get_desc_count(q, desc_idx);
-       uint32_t req_len = 0;
-       int i = 0;
-
-       hdr_desc = &(q->desc[desc_idx]);
-       if (v3_gpa_to_hva(core, hdr_desc->addr_gpa, &(hdr_addr)) == -1) {
-           PrintError("Could not translate block header address\n");
-           goto exit_error;
-       }
-
-       hdr = (struct virtio_net_hdr*)hdr_addr;
-       desc_idx = hdr_desc->next;
-
-       if(desc_cnt > 2){
-           PrintError("VNIC: merged rx buffer not supported\n");
-           goto exit_error;
-       }
-
-       for (i = 0; i < desc_cnt - 1; i++) {    
-           struct vring_desc * buf_desc = &(q->desc[desc_idx]);
-           if (pkt_tx_sidecore(core, virtio, buf_desc) < 0) {
-               PrintError("Error handling nic operation\n");
-               goto exit_error;
-           }
-
-           req_len += buf_desc->length;
-           desc_idx = buf_desc->next;
-       }
-       recved ++;
-       
-       q->cur_avail_idx ++;
-    }
-
-    if(recved) PrintDebug("VNIC: Tx polling %d pkts\n", recved);
-       
-    v3_unlock_irqrestore(virtio->tx_lock, flags);
-
-    return 0;
-
-exit_error:
-       
-    v3_unlock_irqrestore(virtio->tx_lock, flags);
-    return -ERR_VIRTIO_OTHER;
-}
-
-
-/* called by VNET, to notify Virtio to update the tx_queue used index 
- * used only when vnet running on sidecore */
-static int update_tx_queue(struct virtio_net_state * virtio, int handled_pkt){
-    struct virtio_queue * q = &(virtio->tx_vq);
-    unsigned long flags;
-
-    if (!q->ring_avail_addr) {
-       return -ERR_VIRTIO_TXQ_NOSET;
-    }
-
-    flags = v3_lock_irqsave(virtio->tx_lock);
-    while(handled_pkt > 0){
-       q->used->ring[q->used->index % q->queue_size].id = q->avail->ring[virtio->cur_notify_tx_idx % q->queue_size];
-       q->used->ring[q->used->index % q->queue_size].length = req_len; // TODO:
-       q->used->index ++;
-       virtio->cur_notify_tx_idx ++;
-       handled_pkt --;
-    }
-    v3_unlock_irqrestore(virtio->tx_lock, flags);
-
-    if (handled_pkt && (!(q->avail->flags & VIRTIO_NO_IRQ_FLAG))) {
-       v3_pci_raise_irq(virtio->virtio_dev->pci_bus, 0, virtio->pci_dev);
-       virtio->virtio_cfg.pci_isr = 0x1;
-
-       /* do we need to notify here? */
-       notify_guest(virtio);
-    }
-
-    virtio->pkt_sent += handled_pkt;
-       
-#ifdef CONFIG_VNET_PROFILE
-    if (virtio->pkt_sent % 50000 == 0){
-           long cur_time, time;
-           rdtscll(cur_time);
-           time = cur_time - virtio_state->last_sent_time;
-           PrintError("Virtio NIC: last sent 50000 cycles: %ld\n",time);
-           PrintError("Virtio NIC: sent: %ld, rxed: %ld, dropped: %ld\n",
-                       virtio->pkt_sent,
-                       virtio->pkt_recv,
-                       virtio->pkt_drop);
-           rdtscll(virtio->last_sent_time);
-    }
-#endif
-
-
-    return 0;
-}
-#endif
-
 static int virtio_setup_queue(struct guest_info *core, 
                                struct virtio_net_state * virtio_state, 
                                struct virtio_queue * queue, 
 }
 
 
-#if 0 /* for encapuslation */
-/* virtio RX with encapulation version */
-static int virtio_rx_encap(uint8_t * data, 
-                                                 uint32_t size, 
-                                                 void * encap_header, 
-                                                 uint16_t encap_len,
-                                                 void * private_data) {
-    struct virtio_net_state * virtio = (struct virtio_net_state *)private_data;
-    struct virtio_queue * q = &(virtio->rx_vq);
-    struct virtio_net_hdr_mrg_rxbuf hdr;
-    uint32_t hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf);
-    uint32_t data_len = size + encap_len;
-    unsigned long flags;
-    int ret_val = -ERR_VIRTIO_OTHER;
-
-    if (q->ring_avail_addr == 0) {
-       PrintError("Queue is not set\n");
-       ret_val = -ERR_VIRTIO_RXQ_NOSET;
-       goto exit;
-    }
-       
-    memset(&hdr, 0, sizeof(struct virtio_net_hdr_mrg_rxbuf));
-
-    flags = v3_lock_irqsave(virtio->rx_lock);
-    if (q->cur_avail_idx != q->avail->index){
-       addr_t hdr_addr = 0;
-       uint16_t hdr_idx = q->avail->ring[q->cur_avail_idx % q->queue_size];
-       uint16_t buf_idx = 0;
-       struct vring_desc * hdr_desc = NULL;
-       uint32_t offset = 0;
-
-       hdr_desc = &(q->desc[hdr_idx]);
-       if (guest_pa_to_host_va(&(virtio->virtio_dev->vm->cores[0]), hdr_desc->addr_gpa, &(hdr_addr)) == -1) {
-           PrintError("Could not translate receive buffer address\n");
-           goto exit;
-       }
-       hdr.num_buffers = 1;
-       memcpy((void *)hdr_addr, &hdr, sizeof(struct virtio_net_hdr_mrg_rxbuf));
-       if (offset >= data_len) {
-           hdr_desc->flags &= ~VIRTIO_NEXT_FLAG;
-       }
-
-       struct vring_desc * buf_desc = NULL;
-       uint32_t len = 0;
-       buf_idx = hdr_desc->next;
-       buf_desc = &(q->desc[buf_idx]);
-       
-       if(hdr_len > 0 && !encap_header) {
-           len = copy_data_to_desc(&(virtio->virtio_dev->vm->cores[0]), virtio, buf_desc, encap_header, encap_len, 0);
-           offset += len;
-       }
-       
-       len = copy_data_to_desc(&(virtio->virtio_dev->vm->cores[0]), virtio, buf_desc, data + offset, data_len - offset, offset);           
-       offset += len;
-
-       if(data_len < offset)/* if there is large pkt, need merge more buffer */
-           PrintDebug("Virtio NIC: data pkt larger than RX queue buffer\n");
-
-       buf_desc->length = offset;      
-       buf_desc->flags &= ~VIRTIO_NEXT_FLAG;
-       
-       q->used->ring[q->used->index % q->queue_size].id = q->avail->ring[q->cur_avail_idx % q->queue_size];
-       q->used->ring[q->used->index % q->queue_size].length = data_len + hdr_len; /* This should be the total length of data sent to guest (header+pkt_data) */
-       q->used->index++;
-       q->cur_avail_idx++;
-
-       /* notify guest 
-         * when it returns from EXIT, guest gets the virtio rx interrupt */
-       if((++virtio->buffed_rx > q->queue_size/2) &&
-           (q->avail->flags & VIRTIO_NO_IRQ_FLAG)) {
-           if(virtio->virtio_dev->vm->cores[0].cpu_id != V3_Get_CPU()){
-                 notify_guest(virtio);
-           }
-           virtio->buffed_rx = 0;
-       }
-       ret_val = offset;
-    } else {
-       virtio->pkt_drop++;
-       ret_val = -ERR_VIRTIO_RXQ_FULL;
-       goto exit;
-    }
-    virtio->pkt_recv ++;
-
-    if (!(q->avail->flags & VIRTIO_NO_IRQ_FLAG)) {
-       PrintDebug("Raising IRQ %d\n",  virtio->pci_dev->config_header.intr_line);
-       v3_pci_raise_irq(virtio->virtio_dev->pci_bus, 0, virtio->pci_dev);
-       virtio->virtio_cfg.pci_isr = 0x1;
-    }
-
-#ifdef CONFIG_VNET_PROFILE
-    if (virtio->pkt_recv % 50000 == 0){
-           long cur_time, time;
-           rdtscll(cur_time);
-           time = cur_time - virtio->last_recv_time;
-           PrintError("Virtio NIC: sent: %ld, rxed: %ld, dropped: %ld\n",
-               virtio->pkt_sent,
-               virtio->pkt_recv,
-               virtio->pkt_drop);
-           rdtscll(virtio->last_recv_time);
-    }
-#endif
-
-exit:
-
-    v3_unlock_irqrestore(virtio->rx_lock, flags);
- 
-    return ret_val;
-}
-#endif 
-
-
-
 static struct v3_device_ops dev_ops = {
     .free = virtio_free,
     .reset = NULL,
     .stop = NULL,
 };
 
-#if 0 //temporary hacking LX
-static struct virtio_net_state *vnic_states[2] = {NULL, NULL};
-static int num_vnic = 0;
-
-void vnic_polling(void *data){
-    struct v3_vm_info *info = (struct v3_vm_info *)data;    
-    if(vnic_states[0] != NULL && info == vnic_states[0]->virtio_dev->vm){
-       handle_pkt_tx(&(info->cores[0]), vnic_states[0]);
-    }
-
-    if(vnic_states[1] != NULL && info == vnic_states[1]->virtio_dev->vm){
-       handle_pkt_tx(&(info->cores[0]), vnic_states[1]);
-    }
-}
-#endif
 
 /* TODO: Issue here: which vm info it needs? calling VM or the device's own VM? */
 static void virtio_nic_poll(struct v3_vm_info *vm, void *data){
 #endif
 }
 
-#if 0 /* NAPI */
-/* tx one pkt from guest */
-static int virtio_tx_pkt(struct guest_info *core, struct virtio_net_state * virtio_state){
-
-}
-
-static void virtio_nic_poll(struct v3_vm_info *vm, void *data, int budget){
-
-
-}
-
-#endif
-
-
 static void virtio_start_tx(void *data){
     struct virtio_net_state * virtio = (struct virtio_net_state *)data;