1 #ifndef _MINIX_NETDRIVER_H 2 #define _MINIX_NETDRIVER_H 3 4 /* 5 * Prototypes and definitions for network drivers. 6 */ 7 #include <minix/config.h> 8 #include <minix/endpoint.h> 9 #include <minix/ipc.h> 10 #include <minix/com.h> 11 12 #include <net/if_media.h> 13 14 /* Opaque data structure for copying in and out actual packet data. */ 15 struct netdriver_data; 16 17 /* Network (ethernet) address structure. */ 18 typedef struct { 19 uint8_t na_addr[NDEV_HWADDR_MAX]; 20 } netdriver_addr_t; 21 22 /* Information and function call table for network drivers. */ 23 struct netdriver { 24 const char *ndr_name; 25 int (* ndr_init)(unsigned int instance, netdriver_addr_t * hwaddr, 26 uint32_t * caps, unsigned int * ticks); 27 void (* ndr_stop)(void); 28 void (* ndr_set_mode)(unsigned int mode, 29 const netdriver_addr_t * mcast_list, unsigned int mcast_count); 30 void (* ndr_set_caps)(uint32_t caps); 31 void (* ndr_set_flags)(uint32_t flags); 32 void (* ndr_set_media)(uint32_t media); 33 void (* ndr_set_hwaddr)(const netdriver_addr_t * hwaddr); 34 ssize_t (* ndr_recv)(struct netdriver_data * data, size_t max); 35 int (* ndr_send)(struct netdriver_data * data, size_t size); 36 unsigned int (* ndr_get_link)(uint32_t * media); 37 void (* ndr_intr)(unsigned int mask); 38 void (* ndr_tick)(void); 39 void (* ndr_other)(const message * m_ptr, int ipc_status); 40 }; 41 42 /* Functions defined by libnetdriver. */ 43 void netdriver_task(const struct netdriver * ndp); 44 45 int netdriver_init(const struct netdriver * ndp); 46 void netdriver_process(const struct netdriver * __restrict ndp, 47 const message * __restrict m_ptr, int ipc_status); 48 void netdriver_terminate(void); 49 50 const char *netdriver_name(void); 51 52 void netdriver_recv(void); 53 void netdriver_send(void); 54 void netdriver_link(void); 55 56 void netdriver_stat_oerror(uint32_t count); 57 void netdriver_stat_coll(uint32_t count); 58 void netdriver_stat_ierror(uint32_t count); 59 void netdriver_stat_iqdrop(uint32_t count); 60 61 void netdriver_copyin(struct netdriver_data * __restrict data, size_t off, 62 void * __restrict ptr, size_t size); 63 void netdriver_copyout(struct netdriver_data * __restrict data, size_t off, 64 const void * __restrict ptr, size_t size); 65 66 void netdriver_portinb(struct netdriver_data * data, size_t off, long port, 67 size_t size); 68 void netdriver_portoutb(struct netdriver_data * data, size_t off, long port, 69 size_t size); 70 void netdriver_portinw(struct netdriver_data * data, size_t off, long port, 71 size_t size); 72 void netdriver_portoutw(struct netdriver_data * data, size_t off, long port, 73 size_t size); 74 75 #endif /* _MINIX_NETDRIVER_H */ 76