1/*
2 * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3 * This file may be used under the terms of the MIT License.
4 */
5#ifndef USERLAND_IPC_H
6#define USERLAND_IPC_H
7
8/*! userland_ipc - Communication between the network driver
9		and the userland stack.
10*/
11
12#include <OS.h>
13#include <Drivers.h>
14
15#include "net_stack_driver.h"
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#define NET_STACK_PORTNAME "net_server connection"
22
23enum {
24	NET_STACK_OPEN = NET_STACK_IOCTL_MAX,
25	NET_STACK_CLOSE,
26	NET_STACK_NEW_CONNECTION,
27};
28
29#define MAX_NET_AREAS 16
30
31typedef struct {
32	area_id id;
33	uint8	*offset;
34} net_area_info;
35
36typedef struct {
37	int32	op;
38//	int32	buffer;
39	uint8	*data;
40	int32	length;
41	int32	result;
42	net_area_info	area[MAX_NET_AREAS];
43} net_command;
44
45#define CONNECTION_QUEUE_LENGTH 128
46#define CONNECTION_COMMAND_SIZE 2048
47
48typedef struct {
49	port_id	port;
50	area_id area;
51	thread_id socket_thread;
52
53	sem_id	commandSemaphore;	// command queue
54	uint32	numCommands,bufferSize;
55} net_connection;
56
57
58extern status_t init_userland_ipc(void);
59extern void shutdown_userland_ipc(void);
60
61
62#ifdef __cplusplus
63}  // end of extern "C"
64#endif
65
66#endif	/* USERLAND_IPC_H */
67