1 /* Prototypes and definitions for network drivers. */ 2 3 #ifndef _MINIX_NETDRIVER_H 4 #define _MINIX_NETDRIVER_H 5 6 #include <minix/endpoint.h> 7 #include <minix/ipc.h> 8 #include <minix/com.h> 9 10 /* The flags that make up the requested receive mode. */ 11 #define NDEV_NOMODE DL_NOMODE /* targeted packets only */ 12 #define NDEV_PROMISC DL_PROMISC_REQ /* promiscuous mode */ 13 #define NDEV_MULTI DL_MULTI_REQ /* receive multicast packets */ 14 #define NDEV_BROAD DL_BROAD_REQ /* receive broadcast packets */ 15 16 /* 17 * For now, only ethernet-type network drivers are supported, and thus, we use 18 * some ethernet-specific data structures. 19 */ 20 #include <net/gen/ether.h> 21 #include <net/gen/eth_io.h> 22 23 /* Opaque data structure for copying in and out actual packet data. */ 24 struct netdriver_data; 25 26 /* Function call table for network drivers. */ 27 struct netdriver { 28 int (*ndr_init)(unsigned int instance, ether_addr_t *addr); 29 void (*ndr_stop)(void); 30 void (*ndr_mode)(unsigned int mode); 31 ssize_t (*ndr_recv)(struct netdriver_data *data, size_t max); 32 int (*ndr_send)(struct netdriver_data *data, size_t size); 33 void (*ndr_stat)(eth_stat_t *stat); 34 void (*ndr_intr)(unsigned int mask); 35 void (*ndr_alarm)(clock_t stamp); 36 void (*ndr_other)(const message *m_ptr, int ipc_status); 37 }; 38 39 /* Functions defined by libnetdriver. */ 40 void netdriver_task(const struct netdriver *ndp); 41 42 void netdriver_announce(void); /* legacy; deprecated */ 43 int netdriver_init(const struct netdriver *ndp); 44 void netdriver_process(const struct netdriver * __restrict ndp, 45 const message * __restrict m_ptr, int ipc_status); 46 void netdriver_terminate(void); 47 48 void netdriver_recv(void); 49 void netdriver_send(void); 50 51 void netdriver_copyin(struct netdriver_data * __restrict data, size_t off, 52 void * __restrict ptr, size_t size); 53 void netdriver_copyout(struct netdriver_data * __restrict data, size_t off, 54 const void * __restrict ptr, size_t size); 55 56 void netdriver_portinb(struct netdriver_data *data, size_t off, long port, 57 size_t size); 58 void netdriver_portoutb(struct netdriver_data *data, size_t off, long port, 59 size_t size); 60 void netdriver_portinw(struct netdriver_data *data, size_t off, long port, 61 size_t size); 62 void netdriver_portoutw(struct netdriver_data *data, size_t off, long port, 63 size_t size); 64 65 #define netdriver_receive sef_receive_status /* legacy; deprecated */ 66 67 #endif /* _MINIX_NETDRIVER_H */ 68