mirror of
https://github.com/ipxe/ipxe
synced 2025-12-17 01:52:08 +03:00
[settings] Add Bus ID setting
Users can find the bus type and PCI IDs for a network interface with: netX/busid Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
This commit is contained in:
committed by
Stefan Hajnoczi
parent
70928aeaa0
commit
177389fb73
@@ -20,8 +20,10 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <byteswap.h>
|
||||
#include <gpxe/dhcp.h>
|
||||
#include <gpxe/settings.h>
|
||||
#include <gpxe/device.h>
|
||||
#include <gpxe/netdevice.h>
|
||||
|
||||
/** @file
|
||||
@@ -36,6 +38,11 @@ struct setting mac_setting __setting = {
|
||||
.description = "MAC address",
|
||||
.type = &setting_type_hex,
|
||||
};
|
||||
struct setting busid_setting __setting = {
|
||||
.name = "busid",
|
||||
.description = "Bus ID",
|
||||
.type = &setting_type_hex,
|
||||
};
|
||||
|
||||
/**
|
||||
* Store value of network device setting
|
||||
@@ -74,6 +81,8 @@ static int netdev_fetch ( struct settings *settings, struct setting *setting,
|
||||
void *data, size_t len ) {
|
||||
struct net_device *netdev = container_of ( settings, struct net_device,
|
||||
settings.settings );
|
||||
struct device_description *desc = &netdev->dev->desc;
|
||||
struct dhcp_netdev_desc dhcp_desc;
|
||||
|
||||
if ( setting_cmp ( setting, &mac_setting ) == 0 ) {
|
||||
if ( len > netdev->ll_protocol->ll_addr_len )
|
||||
@@ -81,6 +90,15 @@ static int netdev_fetch ( struct settings *settings, struct setting *setting,
|
||||
memcpy ( data, netdev->ll_addr, len );
|
||||
return netdev->ll_protocol->ll_addr_len;
|
||||
}
|
||||
if ( setting_cmp ( setting, &busid_setting ) == 0 ) {
|
||||
dhcp_desc.type = desc->bus_type;
|
||||
dhcp_desc.vendor = htons ( desc->vendor );
|
||||
dhcp_desc.device = htons ( desc->device );
|
||||
if ( len > sizeof ( dhcp_desc ) )
|
||||
len = sizeof ( dhcp_desc );
|
||||
memcpy ( data, &dhcp_desc, len );
|
||||
return sizeof ( dhcp_desc );
|
||||
}
|
||||
|
||||
return generic_settings_fetch ( settings, setting, data, len );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user