From 4eab5bc8ca6b66dc965cf188dd4577ad19c5b879 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 11 Aug 2009 23:40:27 +0100 Subject: [netdevice] Allow the hardware and link-layer addresses to differ in size IPoIB has a 20-byte link-layer address, of which only eight bytes represent anything relating to a "hardware address". The PXE and EFI SNP APIs expect the permanent address to be the same size as the link-layer address, so fill in the "permanent address" field with the initial link layer address (as generated by register_netdev() based upon the real hardware address). --- src/interface/efi/efi_snp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/interface/efi/efi_snp.c') diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c index 00830343..b5241e54 100644 --- a/src/interface/efi/efi_snp.c +++ b/src/interface/efi/efi_snp.c @@ -119,10 +119,11 @@ static EFI_GUID efi_pci_io_protocol_guid static void efi_snp_set_mode ( struct efi_snp_device *snpdev ) { struct net_device *netdev = snpdev->netdev; EFI_SIMPLE_NETWORK_MODE *mode = &snpdev->mode; - unsigned int ll_addr_len = netdev->ll_protocol->ll_addr_len; + struct ll_protocol *ll_protocol = netdev->ll_protocol; + unsigned int ll_addr_len = ll_protocol->ll_addr_len; mode->HwAddressSize = ll_addr_len; - mode->MediaHeaderSize = netdev->ll_protocol->ll_header_len; + mode->MediaHeaderSize = ll_protocol->ll_header_len; mode->MaxPacketSize = netdev->max_pkt_len; mode->ReceiveFilterMask = ( EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST | @@ -130,8 +131,8 @@ static void efi_snp_set_mode ( struct efi_snp_device *snpdev ) { assert ( ll_addr_len <= sizeof ( mode->CurrentAddress ) ); memcpy ( &mode->CurrentAddress, netdev->ll_addr, ll_addr_len ); memcpy ( &mode->BroadcastAddress, netdev->ll_broadcast, ll_addr_len ); - memcpy ( &mode->PermanentAddress, netdev->hw_addr, ll_addr_len ); - mode->IfType = ntohs ( netdev->ll_protocol->ll_proto ); + ll_protocol->init_addr ( netdev->hw_addr, &mode->PermanentAddress ); + mode->IfType = ntohs ( ll_protocol->ll_proto ); mode->MacAddressChangeable = TRUE; mode->MediaPresentSupported = TRUE; mode->MediaPresent = ( netdev_link_ok ( netdev ) ? TRUE : FALSE ); -- cgit v1.2.3-55-g7522