root/headers/private/net/ether_driver.h
/*
 * Copyright 2007, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _ETHER_DRIVER_H
#define _ETHER_DRIVER_H

/*! Standard ethernet driver interface */


#include <Drivers.h>


/* ioctl() opcodes a driver should support */
enum {
        ETHER_GETADDR = B_DEVICE_OP_CODES_END,
                /* get ethernet address (required) */
        ETHER_INIT,                                                             /* (obsolete) */
        ETHER_NONBLOCK,                                                 /* change non blocking mode (int *) */
        ETHER_ADDMULTI,                                                 /* add multicast address */
        ETHER_REMMULTI,                                                 /* remove multicast address */
        ETHER_SETPROMISC,                                               /* set promiscuous mode (int *) */
        ETHER_GETFRAMESIZE,                                             /* get frame size (required) (int *) */
        ETHER_SET_LINK_STATE_SEM,
                /* pass over a semaphore to release on link state changes (sem_id *) */
        ETHER_GET_LINK_STATE,
                /* get line speed, quality, duplex mode, etc. (ether_link_state_t *) */

        ETHER_SEND_NET_BUFFER,                                  /* send a net_buffer */
        ETHER_RECEIVE_NET_BUFFER,                               /* receive a net_buffer */
};


/* ETHER_GETADDR - MAC address */
typedef struct ether_address {
        uint8   ebyte[6];
} ether_address_t;

/* ETHER_GETLINKSTATE */
typedef struct ether_link_state {
        uint32  media;          /* as specified in net/if_media.h */
        uint32  quality;        /* in one tenth of a percent */
        uint64  speed;          /* in bit/s */
} ether_link_state_t;

#endif  /* _ETHER_DRIVER_H */