summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown2017-07-07 18:25:37 +0200
committerMichael Brown2017-07-10 13:41:23 +0200
commit1ee7f4e03652951670cff6e2f49171230ea2bcd7 (patch)
treedd079679846f7968ac6d6379a6fc831b16ccb987 /src/drivers
parent[smscusb] Allow for alternative PHY register layouts (diff)
downloadipxe-1ee7f4e03652951670cff6e2f49171230ea2bcd7.tar.gz
ipxe-1ee7f4e03652951670cff6e2f49171230ea2bcd7.tar.xz
ipxe-1ee7f4e03652951670cff6e2f49171230ea2bcd7.zip
[smsc75xx] Expose functionality shared with LAN78xx devices
The LAN78xx datapath is essentially identical to that of the SMSC75xx. Expose the transmit, poll, and bulk IN endpoint operations to allow for reuse by the LAN78xx driver. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/net/smsc75xx.c12
-rw-r--r--src/drivers/net/smsc75xx.h7
2 files changed, 13 insertions, 6 deletions
diff --git a/src/drivers/net/smsc75xx.c b/src/drivers/net/smsc75xx.c
index 0da255c2..861669ed 100644
--- a/src/drivers/net/smsc75xx.c
+++ b/src/drivers/net/smsc75xx.c
@@ -60,7 +60,7 @@ static struct profiler smsc75xx_out_profiler __profiler =
* @v smscusb SMSC USB device
* @ret rc Return status code
*/
-static int smsc75xx_dump_statistics ( struct smscusb_device *smscusb ) {
+int smsc75xx_dump_statistics ( struct smscusb_device *smscusb ) {
struct smsc75xx_statistics stats;
int rc;
@@ -230,7 +230,7 @@ static void smsc75xx_in_complete ( struct usb_endpoint *ep,
}
/** Bulk IN endpoint operations */
-static struct usb_endpoint_driver_operations smsc75xx_in_operations = {
+struct usb_endpoint_driver_operations smsc75xx_in_operations = {
.complete = smsc75xx_in_complete,
};
@@ -386,7 +386,8 @@ static void smsc75xx_close ( struct net_device *netdev ) {
usbnet_close ( &smscusb->usbnet );
/* Dump statistics (for debugging) */
- smsc75xx_dump_statistics ( smscusb );
+ if ( DBG_LOG )
+ smsc75xx_dump_statistics ( smscusb );
/* Reset device */
smsc75xx_reset ( smscusb );
@@ -399,8 +400,7 @@ static void smsc75xx_close ( struct net_device *netdev ) {
* @v iobuf I/O buffer
* @ret rc Return status code
*/
-static int smsc75xx_transmit ( struct net_device *netdev,
- struct io_buffer *iobuf ) {
+int smsc75xx_transmit ( struct net_device *netdev, struct io_buffer *iobuf ) {
struct smscusb_device *smscusb = netdev->priv;
int rc;
@@ -416,7 +416,7 @@ static int smsc75xx_transmit ( struct net_device *netdev,
*
* @v netdev Network device
*/
-static void smsc75xx_poll ( struct net_device *netdev ) {
+void smsc75xx_poll ( struct net_device *netdev ) {
struct smscusb_device *smscusb = netdev->priv;
uint32_t int_sts;
int rc;
diff --git a/src/drivers/net/smsc75xx.h b/src/drivers/net/smsc75xx.h
index f8bcefb7..72339df0 100644
--- a/src/drivers/net/smsc75xx.h
+++ b/src/drivers/net/smsc75xx.h
@@ -213,4 +213,11 @@ struct smsc75xx_statistics {
( sizeof ( struct smsc75xx_rx_header ) + \
ETH_FRAME_LEN + 4 /* possible VLAN header */ )
+extern struct usb_endpoint_driver_operations smsc75xx_in_operations;
+
+extern int smsc75xx_dump_statistics ( struct smscusb_device *smscusb );
+extern int smsc75xx_transmit ( struct net_device *netdev,
+ struct io_buffer *iobuf );
+extern void smsc75xx_poll ( struct net_device *netdev );
+
#endif /* _SMSC75XX_H */