summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/ncm.c
diff options
context:
space:
mode:
authorSimon Rettberg2021-03-08 15:55:33 +0100
committerSimon Rettberg2021-03-08 15:55:33 +0100
commit6707d9218c8e6e760e53068d5f41ceb31fac6ea0 (patch)
tree88e8fc84ede2a0ed2c1cec3a6109beb9fb53abf5 /src/drivers/net/ncm.c
parentMerge branch 'master' into openslx (diff)
parent[linux] Do not assume that stat() works on sysfs files (diff)
downloadipxe-6707d9218c8e6e760e53068d5f41ceb31fac6ea0.tar.gz
ipxe-6707d9218c8e6e760e53068d5f41ceb31fac6ea0.tar.xz
ipxe-6707d9218c8e6e760e53068d5f41ceb31fac6ea0.zip
Merge branch 'master' into openslx
Diffstat (limited to 'src/drivers/net/ncm.c')
-rw-r--r--src/drivers/net/ncm.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/drivers/net/ncm.c b/src/drivers/net/ncm.c
index 1837291f7..cc07a4388 100644
--- a/src/drivers/net/ncm.c
+++ b/src/drivers/net/ncm.c
@@ -558,6 +558,8 @@ static int ncm_probe ( struct usb_function *func,
struct usb_interface_descriptor *comms;
struct ecm_ethernet_descriptor *ethernet;
struct ncm_ntb_parameters params;
+ unsigned int remainder;
+ unsigned int divisor;
int rc;
/* Allocate and initialise structure */
@@ -616,14 +618,15 @@ static int ncm_probe ( struct usb_function *func,
DBGC2 ( ncm, "NCM %p maximum IN size is %zd bytes\n", ncm, ncm->mtu );
/* Calculate transmit padding */
- ncm->padding = ( ( le16_to_cpu ( params.out.remainder ) -
- sizeof ( struct ncm_ntb_header ) - ETH_HLEN ) &
- ( le16_to_cpu ( params.out.divisor ) - 1 ) );
+ divisor = ( params.out.divisor ?
+ le16_to_cpu ( params.out.divisor ) : 1 );
+ remainder = le16_to_cpu ( params.out.remainder );
+ ncm->padding = ( ( remainder - sizeof ( struct ncm_ntb_header ) -
+ ETH_HLEN ) & ( divisor - 1 ) );
DBGC2 ( ncm, "NCM %p using %zd-byte transmit padding\n",
ncm, ncm->padding );
assert ( ( ( sizeof ( struct ncm_ntb_header ) + ncm->padding +
- ETH_HLEN ) % le16_to_cpu ( params.out.divisor ) ) ==
- le16_to_cpu ( params.out.remainder ) );
+ ETH_HLEN ) % divisor ) == remainder );
/* Register network device */
if ( ( rc = register_netdev ( netdev ) ) != 0 )