summaryrefslogtreecommitdiff
path: root/src/drivers/net/network.h
blob: 39ae627880f1516a728ff6f36eef2128ce3b7a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#ifndef NETWORK_H
#define NETWORK_H

#include "driver.h"

#include "stdint.h"
#include "stddef.h"

#include "ethernet.h"

typedef struct {
	uint16_t length;
	uint8_t *data;
} network_buffer_t;

typedef struct {
	network_buffer_t buf;
} network_event_t;

typedef void (*network_event_handler_t)( network_event_t *event, void *context );

typedef struct {
	driver_t base;
	network_mac_address_t mac_address;
	network_event_handler_t handler;
} network_t;

typedef struct {
	driver_vtable_t base;
	void (*register_handler)( void *obj, network_event_handler_t handler );
	void (*write)( void *obj, network_buffer_t buf );
} network_vtable_t;

void network_init( network_t *network, interrupt_t *interrupt, void *context );

void network_register_handler( void *obj, network_event_handler_t handler );
void network_write( void *obj, network_buffer_t buf );

#endif // NETWORK_H