ce2c4a74c63e03ea0454f310b18fba0e071a465c
[akaros.git] / kern / include / eth_audio.h
1 /* Copyright (c) 2010 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Rimas's Ethernet-Audio device */
6
7 #ifndef ROS_KERN_ETH_AUDIO_H
8 #define ROS_KERN_ETH_AUDIO_H
9
10 #include <devfs.h>
11 #include <net.h>
12
13 #define ETH_AUDIO_RCV_PORT 1792
14 #define ETH_AUDIO_SEND_PORT 1792
15 /* 10 channels * 4 bytes/channel * 32 samples/packet = 1280.  + 2 bytes for a
16  * sequence ID */
17 #define ETH_AUDIO_PAYLOAD_SZ 1282
18 #define ETH_AUDIO_IP_HDR_SZ 20
19 #define ETH_AUDIO_HEADER_OFF (ETH_HDR_SZ + ETH_AUDIO_IP_HDR_SZ + UDP_HDR_SZ)
20 #define ETH_AUDIO_FRAME_SZ (ETH_AUDIO_PAYLOAD_SZ + ETH_AUDIO_HEADER_OFF)
21
22
23 /* Ethernet frame for what one of our packets looks like (since we don't have
24  * the infrastructure to build one properly).  This implies that there are no
25  * IP or ethernet options. */
26 struct ethaud_udp_packet {
27         struct ethernet_hdr                     eth_hdr;
28         struct ip_hdr                           ip_hdr;
29         struct udp_hdr                          udp_hdr;
30         char                                            payload[ETH_AUDIO_PAYLOAD_SZ];
31 } __attribute__((packed));
32
33 /* These two files are always open, like other device nodes.  Processes can open
34  * and mmap them.  Don't do shit like unlinking them. */
35 struct file *ethaud_in, *ethaud_out;
36
37 void eth_audio_init(void);
38 /* This is called by net subsys when it detects an ethernet audio packet */
39 void eth_audio_newpacket(void *buf);
40
41 #endif /* ROS_KERN_ETH_AUDIO_H */