ソースを参照

[intel] Expose functionality to be shared with intelx driver

The Intel 10 Gigabit NICs have a datapath that is almost
register-compatible with the Intel 1 Gigabit NICs.  Expose common
functionality to avoid duplication of code in the new "intelx" driver.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 11年前
コミット
1dd4e51063
2個のファイルの変更33行の追加15行の削除
  1. 22
    15
      src/drivers/net/intel.c
  2. 11
    0
      src/drivers/net/intel.h

+ 22
- 15
src/drivers/net/intel.c ファイルの表示

360
  * @v ring		Descriptor ring
360
  * @v ring		Descriptor ring
361
  * @ret rc		Return status code
361
  * @ret rc		Return status code
362
  */
362
  */
363
-static int intel_create_ring ( struct intel_nic *intel,
364
-			       struct intel_ring *ring ) {
363
+int intel_create_ring ( struct intel_nic *intel, struct intel_ring *ring ) {
365
 	physaddr_t address;
364
 	physaddr_t address;
366
 	uint32_t dctl;
365
 	uint32_t dctl;
367
 
366
 
412
  * @v intel		Intel device
411
  * @v intel		Intel device
413
  * @v ring		Descriptor ring
412
  * @v ring		Descriptor ring
414
  */
413
  */
415
-static void intel_destroy_ring ( struct intel_nic *intel,
416
-				 struct intel_ring *ring ) {
414
+void intel_destroy_ring ( struct intel_nic *intel, struct intel_ring *ring ) {
417
 
415
 
418
 	/* Clear ring length */
416
 	/* Clear ring length */
419
 	writel ( 0, ( intel->regs + ring->reg + INTEL_xDLEN ) );
417
 	writel ( 0, ( intel->regs + ring->reg + INTEL_xDLEN ) );
434
  *
432
  *
435
  * @v intel		Intel device
433
  * @v intel		Intel device
436
  */
434
  */
437
-static void intel_refill_rx ( struct intel_nic *intel ) {
435
+void intel_refill_rx ( struct intel_nic *intel ) {
438
 	struct intel_descriptor *rx;
436
 	struct intel_descriptor *rx;
439
 	struct io_buffer *iobuf;
437
 	struct io_buffer *iobuf;
440
 	unsigned int rx_idx;
438
 	unsigned int rx_idx;
476
 	}
474
 	}
477
 }
475
 }
478
 
476
 
477
+/**
478
+ * Discard unused receive I/O buffers
479
+ *
480
+ * @v intel		Intel device
481
+ */
482
+void intel_empty_rx ( struct intel_nic *intel ) {
483
+	unsigned int i;
484
+
485
+	for ( i = 0 ; i < INTEL_NUM_RX_DESC ; i++ ) {
486
+		if ( intel->rx_iobuf[i] )
487
+			free_iob ( intel->rx_iobuf[i] );
488
+		intel->rx_iobuf[i] = NULL;
489
+	}
490
+}
491
+
479
 /**
492
 /**
480
  * Open network device
493
  * Open network device
481
  *
494
  *
540
  */
553
  */
541
 static void intel_close ( struct net_device *netdev ) {
554
 static void intel_close ( struct net_device *netdev ) {
542
 	struct intel_nic *intel = netdev->priv;
555
 	struct intel_nic *intel = netdev->priv;
543
-	unsigned int i;
544
 
556
 
545
 	/* Disable receiver */
557
 	/* Disable receiver */
546
 	writel ( 0, intel->regs + INTEL_RCTL );
558
 	writel ( 0, intel->regs + INTEL_RCTL );
552
 	intel_destroy_ring ( intel, &intel->rx );
564
 	intel_destroy_ring ( intel, &intel->rx );
553
 
565
 
554
 	/* Discard any unused receive buffers */
566
 	/* Discard any unused receive buffers */
555
-	for ( i = 0 ; i < INTEL_NUM_RX_DESC ; i++ ) {
556
-		if ( intel->rx_iobuf[i] )
557
-			free_iob ( intel->rx_iobuf[i] );
558
-		intel->rx_iobuf[i] = NULL;
559
-	}
567
+	intel_empty_rx ( intel );
560
 
568
 
561
 	/* Destroy transmit descriptor ring */
569
 	/* Destroy transmit descriptor ring */
562
 	intel_destroy_ring ( intel, &intel->tx );
570
 	intel_destroy_ring ( intel, &intel->tx );
572
  * @v iobuf		I/O buffer
580
  * @v iobuf		I/O buffer
573
  * @ret rc		Return status code
581
  * @ret rc		Return status code
574
  */
582
  */
575
-static int intel_transmit ( struct net_device *netdev,
576
-			       struct io_buffer *iobuf ) {
583
+int intel_transmit ( struct net_device *netdev, struct io_buffer *iobuf ) {
577
 	struct intel_nic *intel = netdev->priv;
584
 	struct intel_nic *intel = netdev->priv;
578
 	struct intel_descriptor *tx;
585
 	struct intel_descriptor *tx;
579
 	unsigned int tx_idx;
586
 	unsigned int tx_idx;
613
  *
620
  *
614
  * @v netdev		Network device
621
  * @v netdev		Network device
615
  */
622
  */
616
-static void intel_poll_tx ( struct net_device *netdev ) {
623
+void intel_poll_tx ( struct net_device *netdev ) {
617
 	struct intel_nic *intel = netdev->priv;
624
 	struct intel_nic *intel = netdev->priv;
618
 	struct intel_descriptor *tx;
625
 	struct intel_descriptor *tx;
619
 	unsigned int tx_idx;
626
 	unsigned int tx_idx;
642
  *
649
  *
643
  * @v netdev		Network device
650
  * @v netdev		Network device
644
  */
651
  */
645
-static void intel_poll_rx ( struct net_device *netdev ) {
652
+void intel_poll_rx ( struct net_device *netdev ) {
646
 	struct intel_nic *intel = netdev->priv;
653
 	struct intel_nic *intel = netdev->priv;
647
 	struct intel_descriptor *rx;
654
 	struct intel_descriptor *rx;
648
 	struct io_buffer *iobuf;
655
 	struct io_buffer *iobuf;

+ 11
- 0
src/drivers/net/intel.h ファイルの表示

242
 	struct io_buffer *rx_iobuf[INTEL_NUM_RX_DESC];
242
 	struct io_buffer *rx_iobuf[INTEL_NUM_RX_DESC];
243
 };
243
 };
244
 
244
 
245
+extern int intel_create_ring ( struct intel_nic *intel,
246
+			       struct intel_ring *ring );
247
+extern void intel_destroy_ring ( struct intel_nic *intel,
248
+				 struct intel_ring *ring );
249
+extern void intel_refill_rx ( struct intel_nic *intel );
250
+extern void intel_empty_rx ( struct intel_nic *intel );
251
+extern int intel_transmit ( struct net_device *netdev,
252
+			    struct io_buffer *iobuf );
253
+extern void intel_poll_tx ( struct net_device *netdev );
254
+extern void intel_poll_rx ( struct net_device *netdev );
255
+
245
 #endif /* _INTEL_H */
256
 #endif /* _INTEL_H */

読み込み中…
キャンセル
保存