xref: /haiku/headers/private/kernel/port.h (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 /*
2  * Copyright 2005-2009, Haiku Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT license.
4  */
5 #ifndef _KERNEL_PORT_H
6 #define _KERNEL_PORT_H
7 
8 
9 #include <thread.h>
10 #include <iovec.h>
11 
12 struct kernel_args;
13 struct select_info;
14 
15 
16 #define PORT_FLAG_USE_USER_MEMCPY 0x80000000
17 
18 // port flags
19 enum {
20 	// read_port_etc() flags
21 	B_PEEK_PORT_MESSAGE		= 0x100	// read the message, but don't remove it;
22 									// kernel-only; memory must be locked
23 };
24 
25 // port notifications
26 #define PORT_MONITOR	'_Pm_'
27 #define PORT_ADDED		0x01
28 #define PORT_REMOVED	0x02
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 status_t port_init(struct kernel_args *args);
35 void delete_owned_ports(Team* team);
36 int32 port_max_ports(void);
37 int32 port_used_ports(void);
38 
39 size_t port_team_link_offset();
40 
41 status_t select_port(int32 object, struct select_info *info, bool kernel);
42 status_t deselect_port(int32 object, struct select_info *info, bool kernel);
43 
44 // currently private API
45 status_t writev_port_etc(port_id id, int32 msgCode, const iovec *msgVecs,
46 				size_t vecCount, size_t bufferSize, uint32 flags,
47 				bigtime_t timeout);
48 
49 // user syscalls
50 port_id		_user_create_port(int32 queueLength, const char *name);
51 status_t	_user_close_port(port_id id);
52 status_t	_user_delete_port(port_id id);
53 port_id		_user_find_port(const char *portName);
54 status_t	_user_get_port_info(port_id id, struct port_info *info);
55 status_t 	_user_get_next_port_info(team_id team, int32 *cookie,
56 				struct port_info *info);
57 ssize_t		_user_port_buffer_size_etc(port_id port, uint32 flags,
58 				bigtime_t timeout);
59 ssize_t		_user_port_count(port_id port);
60 ssize_t		_user_read_port_etc(port_id port, int32 *msgCode,
61 				void *msgBuffer, size_t bufferSize, uint32 flags,
62 				bigtime_t timeout);
63 status_t	_user_set_port_owner(port_id port, team_id team);
64 status_t	_user_write_port_etc(port_id port, int32 msgCode,
65 				const void *msgBuffer, size_t bufferSize,
66 				uint32 flags, bigtime_t timeout);
67 status_t	_user_writev_port_etc(port_id id, int32 msgCode,
68 				const iovec *msgVecs, size_t vecCount,
69 				size_t bufferSize, uint32 flags, bigtime_t timeout);
70 status_t	_user_get_port_message_info_etc(port_id port,
71 				port_message_info *info, size_t infoSize, uint32 flags,
72 				bigtime_t timeout);
73 
74 #ifdef __cplusplus
75 }
76 #endif
77 
78 #endif	/* _KERNEL_PORT_H */
79