[netdevice] Allocate private data for each network upper-layer driver

Allow network upper-layer drivers (such as LLDP, which attaches to
each network device in order to provide a corresponding LLDP settings
block) to specify a size for private data, which will be allocated as
part of the network device structure (as with the existing private
data allocated for the underlying device driver).

This will allow network upper-layer drivers to be simplified by
omitting memory allocation and freeing code.  If the upper-layer
driver requires a reference counter (e.g. for interface
initialisation), then it may use the network device's existing
reference counter, since this is now the reference counter for the
containing block of memory.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2023-09-13 16:29:59 +01:00
parent eeb7cd56e5
commit ae4e85bde9
13 changed files with 110 additions and 34 deletions

View File

@@ -375,9 +375,10 @@ int pxe_start_nbp ( void ) {
* Notify BIOS of existence of network device
*
* @v netdev Network device
* @v priv Private data
* @ret rc Return status code
*/
static int pxe_notify ( struct net_device *netdev ) {
static int pxe_notify ( struct net_device *netdev, void *priv __unused ) {
/* Do nothing if we already have a network device */
if ( pxe_netdev )

View File

@@ -207,9 +207,11 @@ struct init_fn guestinfo_init_fn __init_fn ( INIT_NORMAL ) = {
* Create per-netdevice GuestInfo settings
*
* @v netdev Network device
* @v priv Private data
* @ret rc Return status code
*/
static int guestinfo_net_probe ( struct net_device *netdev ) {
static int guestinfo_net_probe ( struct net_device *netdev,
void *priv __unused ) {
struct settings *settings;
int rc;
@@ -247,8 +249,10 @@ static int guestinfo_net_probe ( struct net_device *netdev ) {
* Remove per-netdevice GuestInfo settings
*
* @v netdev Network device
* @v priv Private data
*/
static void guestinfo_net_remove ( struct net_device *netdev ) {
static void guestinfo_net_remove ( struct net_device *netdev,
void *priv __unused ) {
struct settings *parent = netdev_settings ( netdev );
struct settings *settings;