Merge branch 'master' into ohligs

This commit is contained in:
Marian Ohligs 2011-09-15 23:27:20 +02:00
commit fc1c65a919
16 changed files with 102 additions and 61 deletions

1
.gitignore vendored
View file

@ -9,7 +9,6 @@
*.log
*.swp
*.DS_Store
*.swp
tags
Makefile
include/metalsvm/config.h

View file

@ -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 {

View file

@ -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 {

View file

@ -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;
}

View file

@ -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;

View file

@ -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
}

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;
}

View file

@ -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).

View file

@ -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;
}

View file

@ -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");

View file

@ -1,3 +0,0 @@
test
hallo
huso

View file

@ -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) " "

View file

@ -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