xref: /minix/minix/include/minix/netdriver.h (revision e4dbab1e)
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