{
        int ter = p->des01.etx.end_ring;
 
-       memset(p, 0, sizeof(struct dma_desc));
+       memset(p, 0, offsetof(struct dma_desc, des2));
        p->des01.etx.end_ring = ter;
 }
 
 
 {
        int ter = p->des01.tx.end_ring;
 
-       /* clean field used within the xmit */
-       p->des01.tx.first_segment = 0;
-       p->des01.tx.last_segment = 0;
-       p->des01.tx.buffer1_size = 0;
-
-       /* clean status reported */
-       p->des01.tx.error_summary = 0;
-       p->des01.tx.underflow_error = 0;
-       p->des01.tx.no_carrier = 0;
-       p->des01.tx.loss_carrier = 0;
-       p->des01.tx.excessive_deferral = 0;
-       p->des01.tx.excessive_collisions = 0;
-       p->des01.tx.late_collision = 0;
-       p->des01.tx.heartbeat_fail = 0;
-       p->des01.tx.deferred = 0;
-
+       memset(p, 0, offsetof(struct dma_desc, des2));
        /* set termination field */
        p->des01.tx.end_ring = ter;
 }