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