Merge branch 'master' into ohligs
This commit is contained in:
commit
fc1c65a919
16 changed files with 102 additions and 61 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -9,7 +9,6 @@
|
|||
*.log
|
||||
*.swp
|
||||
*.DS_Store
|
||||
*.swp
|
||||
tags
|
||||
Makefile
|
||||
include/metalsvm/config.h
|
||||
|
|
|
@ -104,12 +104,12 @@ int socket_init(vfs_node_t* node, const char* name)
|
|||
return -ENOMEM;
|
||||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &socket_open;
|
||||
new_node->close = &socket_close;
|
||||
new_node->read = &socket_read;
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &socket_open;
|
||||
new_node->close = &socket_close;
|
||||
new_node->read = &socket_read;
|
||||
new_node->write = &socket_write;
|
||||
spinlock_init(&new_node->lock);
|
||||
spinlock_init(&new_node->lock);
|
||||
|
||||
blist= &node->block_list;
|
||||
do {
|
||||
|
|
|
@ -55,6 +55,7 @@ static int null_close(fildes_t* file)
|
|||
|
||||
static ssize_t stdio_read(fildes_t* file, uint8_t* buffer, size_t size)
|
||||
{
|
||||
#ifdef CONFIG_KEYBOARD
|
||||
kb_buffer.buffer = kmalloc(size * sizeof(char));
|
||||
kb_buffer.maxsize = size;
|
||||
kb_buffer.size = 0;
|
||||
|
@ -72,6 +73,9 @@ static ssize_t stdio_read(fildes_t* file, uint8_t* buffer, size_t size)
|
|||
//kprintf("Size: %i, offset: %i, buffer: %s", size, buffer, offset);
|
||||
file->offset += size;
|
||||
return size;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Write Function of a stdio device */
|
||||
|
@ -111,12 +115,12 @@ int null_init(vfs_node_t* node, const char* name)
|
|||
return -ENOMEM;
|
||||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->write = &null_write;
|
||||
spinlock_init(&new_node->lock);
|
||||
spinlock_init(&new_node->lock);
|
||||
|
||||
blist= &node->block_list;
|
||||
do {
|
||||
|
@ -170,12 +174,12 @@ int stdin_init(vfs_node_t* node, const char* name)
|
|||
return -ENOMEM;
|
||||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &stdio_read;
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &stdio_read;
|
||||
new_node->write = &null_write;
|
||||
spinlock_init(&new_node->lock);
|
||||
spinlock_init(&new_node->lock);
|
||||
|
||||
blist= &node->block_list;
|
||||
do {
|
||||
|
@ -229,12 +233,12 @@ int stdout_init(vfs_node_t* node, const char* name)
|
|||
return -ENOMEM;
|
||||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->write = &stdio_write;
|
||||
spinlock_init(&new_node->lock);
|
||||
spinlock_init(&new_node->lock);
|
||||
|
||||
blist= &node->block_list;
|
||||
do {
|
||||
|
@ -288,12 +292,12 @@ int stderr_init(vfs_node_t* node, const char* name)
|
|||
return -ENOMEM;
|
||||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->type = FS_CHARDEVICE;
|
||||
new_node->open = &null_open;
|
||||
new_node->close = &null_close;
|
||||
new_node->read = &null_read;
|
||||
new_node->write = &stdio_write;
|
||||
spinlock_init(&new_node->lock);
|
||||
spinlock_init(&new_node->lock);
|
||||
|
||||
blist= &node->block_list;
|
||||
do {
|
||||
|
|
|
@ -227,6 +227,7 @@ static err_t rckemacif_output(struct netif* netif, struct pbuf* p)
|
|||
rckemacif->tx_write_offset = 1;
|
||||
|
||||
packets = CLINE_PACKETS(p->tot_len + 2);
|
||||
//LWIP_DEBUGF(NETIF_DEBUG, ("TX packets: %d\n", packets));
|
||||
|
||||
read_offset = read_emac(rckemacif->num_emac, EMAC_TX_CONTROL+EMAC_TX_BUFFER_READ_OFFSET, rckemacif->core);
|
||||
#if 1
|
||||
|
@ -335,7 +336,7 @@ static void rckemacif_input(struct netif* netif, struct pbuf* p)
|
|||
err_t err;
|
||||
|
||||
/* points to packet payload, which starts with an Ethernet header */
|
||||
ethhdr = p->payload;
|
||||
ethhdr = (struct eth_hdr *) p->payload;
|
||||
|
||||
switch (htons(ethhdr->type)) {
|
||||
/* IP or ARP packet? */
|
||||
|
@ -364,7 +365,7 @@ static void rckemacif_rx_handler(struct netif* netif, unsigned int write_offset)
|
|||
unsigned short read_offset = rckemacif->rx_read_offset;
|
||||
volatile void *addr = NULL;
|
||||
uint16_t i, length = 0;
|
||||
struct pbuf *p;
|
||||
struct pbuf *p = NULL;
|
||||
struct pbuf* q;
|
||||
|
||||
if (write_offset > rckemacif->rx_buffer_max) {
|
||||
|
@ -476,7 +477,6 @@ out:
|
|||
#if ETH_PAD_SIZE
|
||||
pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */
|
||||
#endif
|
||||
rckemacif_input(netif, p);
|
||||
LINK_STATS_INC(link.recv);
|
||||
} else {
|
||||
LWIP_DEBUGF(NETIF_DEBUG, ("rckemacif_rx_inthandler: not enough memory!\n"));
|
||||
|
@ -490,6 +490,11 @@ rxDone:
|
|||
write_emac(rckemacif->num_emac, EMAC_RX_CONTROL + EMAC_RX_BUFFER_READ_OFFSET, rckemacif->core, read_offset);
|
||||
rckemacif->rx_read_offset = read_offset;
|
||||
|
||||
if (p) {
|
||||
rckemacif_input(netif, p);
|
||||
p = NULL;
|
||||
}
|
||||
|
||||
if (read_offset != write_offset)
|
||||
goto again;
|
||||
}
|
||||
|
|
|
@ -212,7 +212,7 @@ static int initrd_open(fildes_t* file, const char* name)
|
|||
}
|
||||
|
||||
if (file->node->type == FS_DIRECTORY) {
|
||||
if (!file->flags & O_CREAT)
|
||||
if (!(file->flags & O_CREAT))
|
||||
return -ENOENT;
|
||||
|
||||
uint32_t i, j;
|
||||
|
|
|
@ -74,6 +74,12 @@ extern "C" {
|
|||
#define __NR_recv 21
|
||||
#define __NR_send 22
|
||||
#define __NR_socket 23
|
||||
#define __NR_getsockopt 24
|
||||
#define __NR_setsockopt 25
|
||||
#define __NR_gethostbyname 26
|
||||
#define __NR_sendto 27
|
||||
#define __NR_recvfrom 28
|
||||
#define __NR_select 29
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -47,7 +47,6 @@ typedef struct
|
|||
static int nPort = DEFAULTPORT;
|
||||
static const int sobufsize = 131072;
|
||||
static struct in_addr addr_local;
|
||||
static int bTimeOver = 0;
|
||||
|
||||
static int send_data(int socket, void *buffer, size_t size, int flags)
|
||||
{
|
||||
|
@ -139,7 +138,7 @@ static int TCPServer(void* arg)
|
|||
if ((err = bind(server, (struct sockaddr *) &sa_server, sizeof(sa_server))) < 0)
|
||||
{
|
||||
kprintf("bind failed: %d\n", err);
|
||||
close(server);
|
||||
closesocket(server);
|
||||
kfree(cBuffer, TMAXSIZE);
|
||||
return -1;
|
||||
}
|
||||
|
@ -147,7 +146,7 @@ static int TCPServer(void* arg)
|
|||
if ((err = listen(server, 2)) != 0)
|
||||
{
|
||||
kprintf("listen failed: %d\n", err);
|
||||
close(server);
|
||||
closesocket(server);
|
||||
kfree(cBuffer, TMAXSIZE);
|
||||
return -1;
|
||||
}
|
||||
|
@ -240,11 +239,10 @@ static int TCPServer(void* arg)
|
|||
nByte += rc;
|
||||
}
|
||||
|
||||
kputs("B");
|
||||
nData += ctl.data;
|
||||
} while(((rdtsc()-start)/(uint64_t)freq) < 6000000ULL /*= 6s */);
|
||||
end = rdtsc();
|
||||
} while((end-start)/freq < 6000000ULL /* = 6s */);
|
||||
|
||||
kputs("AAAA");
|
||||
cBuffer[0] = 1;
|
||||
|
||||
if (send_data(client, cBuffer, ctl.data, 0))
|
||||
|
@ -258,13 +256,13 @@ kputs("AAAA");
|
|||
|
||||
kprintf("\nDone.\n");
|
||||
|
||||
close(client);
|
||||
closesocket(client);
|
||||
|
||||
if (rc < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
close(server);
|
||||
closesocket(server);
|
||||
kfree(cBuffer, TMAXSIZE);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -507,13 +507,12 @@ static int load_task(load_args_t* largs)
|
|||
elf_header_t header;
|
||||
elf_program_header_t prog_header;
|
||||
//elf_section_header_t sec_header;
|
||||
///!!! kfree is missing!
|
||||
///!!! kfree is missing!
|
||||
fildes_t *file = kmalloc(sizeof(fildes_t));
|
||||
file->offset = 0;
|
||||
file->flags = 0;
|
||||
|
||||
//TODO: init the hole fildes_t struct!
|
||||
vfs_node_t* node;
|
||||
task_t* curr_task = per_core(current_task);
|
||||
int err;
|
||||
|
||||
|
@ -524,7 +523,7 @@ static int load_task(load_args_t* largs)
|
|||
if (!file->node)
|
||||
return -EINVAL;
|
||||
|
||||
read_fs(file, (uint8_t*)&header, sizeof(elf_header_t));
|
||||
err = read_fs(file, (uint8_t*)&header, sizeof(elf_header_t));
|
||||
if (err < 0) {
|
||||
kprintf("read_fs failed: %d\n", err);
|
||||
return err;
|
||||
|
|
|
@ -404,14 +404,14 @@ void* client_task(void* e)
|
|||
|
||||
int test_init(void)
|
||||
{
|
||||
char* argv[] = {"/bin/mshell", NULL};
|
||||
// char* argv[] = {"/bin/tests", NULL};
|
||||
// char* argv[] = {"/bin/mshell", NULL};
|
||||
char* argv[] = {"/bin/tests", NULL};
|
||||
// char* server_argv[] = {"/bin/server", "6789", NULL};
|
||||
// char* client_argv[] = {"/bin/client", "127.0.0.1", "6789", NULL};
|
||||
|
||||
//sem_init(&producing, 1);
|
||||
//sem_init(&consuming, 0);
|
||||
//mailbox_int32_init(&mbox);
|
||||
sem_init(&producing, 1);
|
||||
sem_init(&consuming, 0);
|
||||
mailbox_int32_init(&mbox);
|
||||
|
||||
#if defined(CONFIG_LWIP) && defined(CONFIG_ROCKCREEK)
|
||||
|
||||
|
@ -426,16 +426,17 @@ int test_init(void)
|
|||
// create_kernel_task(NULL,client_task,NULL);
|
||||
#endif
|
||||
|
||||
//create_kernel_task(NULL, foo, "Hello from foo1", NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, join_test, NULL, NORMAL_PRIO);
|
||||
|
||||
create_kernel_task(NULL, foo, "Hello from foo1", NORMAL_PRIO);
|
||||
create_kernel_task(NULL, join_test, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, producer, , NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, consumer, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, mail_ping, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, mail_noise, NULL, NORMAL_PRIO);
|
||||
//create_kernel_task(NULL, svm_test, NULL, NORMAL_PRIO);
|
||||
//create_user_task(NULL, "/bin/hello", argv);
|
||||
create_user_task(NULL, "/bin/mshell", argv);
|
||||
create_user_task(NULL, "/bin/tests", argv);
|
||||
//create_user_task(NULL, "/bin/jacobi", argv);
|
||||
//create_user_task(NULL, "/bin/mshell", argv);
|
||||
//create_user_task(NULL, "/bin/jacobi", argv);
|
||||
//create_user_task(NULL, "/bin/server", server_argv);
|
||||
//sleep(5);
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
#include <metalsvm/stddef.h>
|
||||
#include <metalsvm/time.h>
|
||||
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#ifndef TRUE
|
||||
|
@ -87,7 +87,7 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg,
|
|||
sys_thread_t tmp;
|
||||
|
||||
err = create_kernel_task(&tmp, thread, arg, prio);
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_thread_new: create_kernel_task %d, id = %u", err, tmp));
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_thread_new: create_kernel_task %d, id = %u\n", err, tmp));
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
@ -196,6 +196,8 @@ u32_t sys_arch_mbox_tryfetch(sys_mbox_t* mbox, void** msg)
|
|||
*/
|
||||
err_t sys_mbox_new(sys_mbox_t* mbox, int size)
|
||||
{
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_new: create mailbox with the minimum size: %d\n", size));
|
||||
|
||||
mbox->valid = TRUE;
|
||||
return mailbox_ptr_init(&mbox->mailbox);
|
||||
}
|
||||
|
@ -216,7 +218,9 @@ err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
|
|||
int err;
|
||||
|
||||
err = mailbox_ptr_trypost(&mbox->mailbox, msg);
|
||||
//LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_trypost: %d"\n, err));
|
||||
if (err != 0) {
|
||||
LWIP_DEBUGF(SYS_DEBUG, ("sys_mbox_trypost: %d\n", err));
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,11 @@
|
|||
/**
|
||||
* LWIP_DHCP==1: Enable DHCP module.
|
||||
*/
|
||||
#ifdef CONFIG_ROCKCREEK
|
||||
#define LWIP_DHCP 0
|
||||
#else
|
||||
#define LWIP_DHCP 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
* DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address.
|
||||
|
@ -68,7 +72,7 @@
|
|||
* when opening a connection. For the transmit size, this MSS sets
|
||||
* an upper limit on the MSS advertised by the remote host.
|
||||
*/
|
||||
#define TCP_MSS 1460
|
||||
#define TCP_MSS 1440
|
||||
|
||||
/**
|
||||
* TCP_SND_BUF: TCP sender buffer space (bytes).
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#undef errno
|
||||
extern int errno;
|
||||
|
||||
/*file descriptor init*/
|
||||
#define NR_OPEN 10
|
||||
|
@ -43,12 +45,13 @@
|
|||
int main(int argc, char** argv)
|
||||
{
|
||||
char* teststr = malloc(sizeof(char)*100);
|
||||
int testfile = open("/bin/test2", O_CREAT | O_EXCL, "wr");
|
||||
write(testfile, "hello in new file '/bin/test2'", 30);
|
||||
int testfile = open("/bin/test.txt", O_CREAT | O_EXCL, "wr");
|
||||
write(testfile, "hello in new file '/bin/test.txt'", 30);
|
||||
lseek(testfile, 0, SEEK_SET);
|
||||
read(testfile, teststr, 100);
|
||||
close(testfile);
|
||||
printf("Gelesen aus neuer Datei: %s", teststr);
|
||||
|
||||
printf("read from new file: %s\n", teststr);
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,19 @@
|
|||
/*
|
||||
* Copyright 2011 Marian Ohligs, Chair for Operating Systems,
|
||||
* RWTH Aachen University
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
@ -10,6 +23,8 @@
|
|||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#undef errno
|
||||
extern int errno;
|
||||
|
||||
void showlogo() {
|
||||
printf("\n\n");
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
test
|
||||
hallo
|
||||
huso
|
|
@ -63,6 +63,12 @@ extern "C" {
|
|||
#define __NR_recv 21
|
||||
#define __NR_send 22
|
||||
#define __NR_socket 23
|
||||
#define __NR_getsockopt 24
|
||||
#define __NR_setsockopt 25
|
||||
#define __NR_gethostbyname 26
|
||||
#define __NR_sendto 27
|
||||
#define __NR_recvfrom 28
|
||||
#define __NR_select 29
|
||||
|
||||
#define _STR(token) #token
|
||||
#define _SYSCALLSTR(x) "int $" _STR(x) " "
|
||||
|
|
|
@ -7,7 +7,7 @@ LDFLGAS =
|
|||
DEFINES=
|
||||
NASM = nasm
|
||||
NASMFLAGS = -fbin
|
||||
EXECFILES = $(shell find ../newlib/examples -perm -u+r+x -type f) ../newlib/examples/test
|
||||
EXECFILES = $(shell find ../newlib/examples -perm -u+r+x -type f)
|
||||
|
||||
# other implicit rules
|
||||
%.o : %.c
|
||||
|
|
Loading…
Add table
Reference in a new issue