Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1504 → Rev 1505

/uspace/trunk/fb/main.c
30,11 → 30,34
#include <ipc/services.h>
#include <sysinfo.h>
#include <async.h>
#include <as.h>
#include <align.h>
#include <errno.h>
 
#include "fb.h"
#include "sysio.h"
#include "ega.h"
#include "main.h"
 
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
size_t maxsize)
{
void *dest;
 
if (*area) {
ipc_answer_fast(callid, ELIMIT, 0, 0);
return;
}
if (IPC_GET_ARG2(*call) > ALIGN_UP(maxsize, PAGE_SIZE)) {
ipc_answer_fast(callid, EINVAL, 0, 0);
return;
}
dest = as_get_mappable_page(maxsize);
if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0)
*area = dest;
}
 
int main(int argc, char *argv[])
{
ipcarg_t phonead;
/uspace/trunk/fb/fb.c
40,9 → 40,12
#include <ipc/services.h>
#include <kernel/errno.h>
#include <async.h>
 
#include "font-8x16.h"
#include "helenos.xbm"
#include "fb.h"
#include "main.h"
#include "../console/screenbuffer.h"
 
#define DEFAULT_BGCOLOR 0x000080
#define DEFAULT_FGCOLOR 0xffff00
458,6 → 461,22
cursor_print(vp);
}
 
static void draw_text_data(int vp, keyfield_t *data)
{
viewport_t *vport = &viewports[vp];
int i;
char c;
 
clear_port(vp);
for (i=0; i < vport->cols * vport->rows; i++) {
if (data[i].character == ' ') /* TODO: && data[i].style==vport->style */
continue;
draw_char(vp, data[i].character, i/vport->rows, i % vport->cols);
}
cursor_print(vp);
}
 
 
/** Function for handling connections to FB
*
*/
469,6 → 488,8
int i;
unsigned int row,col;
char c;
keyfield_t *interbuffer = NULL;
size_t intersize = 0;
 
int vp = 0;
viewport_t *vport = &viewports[0];
494,6 → 515,25
vport->initialized = 0;
ipc_answer_fast(callid,0,0,0);
return; /* Exit thread */
case IPC_M_AS_AREA_SEND:
/* We accept one area for data interchange */
intersize = IPC_GET_ARG2(call);
receive_comm_area(callid,&call,(void **)&interbuffer,
sizeof(*interbuffer)*viewports[0].cols*viewports[0].rows);
continue;
 
case FB_DRAW_TEXT_DATA:
if (!interbuffer) {
retval = EINVAL;
break;
}
if (intersize < vport->cols*vport->rows*sizeof(*interbuffer)) {
retval = EINVAL;
break;
}
draw_text_data(vp, interbuffer);
retval = 0;
break;
case FB_PUTCHAR:
c = IPC_GET_ARG1(call);
row = IPC_GET_ARG2(call);
/uspace/trunk/fb/main.h
0,0 → 1,35
/*
* Copyright (C) 2006 Ondrej Palkovsky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#ifndef __MAIN_H_
#define __MAIN_H_
 
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
size_t maxsize);
 
#endif
/uspace/trunk/libc/include/ipc/fb.h
17,5 → 17,6
#define FB_VIEWPORT_DELETE 1033
#define FB_SET_STYLE 1034
#define FB_GET_RESOLUTION 1035
#define FB_DRAW_TEXT_DATA 1036
 
#endif
/uspace/trunk/libc/include/sys/mman.h
0,0 → 1,47
/*
* Copyright (C) 2006 Ondrej Palkovsky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#ifndef __libc_MMAN_H_
#define __libc_MMAN_H_
 
#include <as.h>
 
#define MAP_SHARED (1 << 0)
#define MAP_PRIVATE (1 << 1)
#define MAP_FIXED (1 << 2)
#define MAP_ANONYMOUS (1 << 3)
 
#define PROTO_READ AS_AREA_READ
#define PROTO_WRITE AS_AREA_WRITE
#define PROTO_EXEC AS_AREA_EXEC
 
extern void *mmap(void *start, size_t length, int prot, int flags, int fd,
off_t offset);
extern int munmap(void *start, size_t length);
 
#endif
/uspace/trunk/libc/generic/as.c
26,21 → 26,7
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ddi.h>
#include <sysinfo.h>
#include <align.h>
#include <as.h>
#include <ipc/fb.h>
#include <ipc/ipc.h>
#include <ipc/ns.h>
#include <ipc/services.h>
#include <kernel/errno.h>
 
 
#include <as.h>
#include <libc.h>
#include <unistd.h>
#include <align.h>
133,6 → 119,9
 
}
 
/* TODO: make this type defined somewhere else */
typedef sysarg_t __address;
 
/** Return pointer to some unmapped area, where fits new as_area
*
* TODO: make some first_fit/... algorithm, we are now just incrementing
/uspace/trunk/libc/generic/mmap.c
0,0 → 1,52
/*
* Copyright (C) 2006 Ondrej Palkovsky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <sys/mman.h>
#include <as.h>
#include <unistd.h>
 
void *mmap(void *start, size_t length, int prot, int flags, int fd,
off_t offset)
{
if (!start)
start = as_get_mappable_page(length);
prot |= AS_AREA_CACHEABLE;
if (! ((flags & MAP_SHARED) ^ (flags & MAP_FIXED)))
return NULL;
if (! (flags & MAP_ANONYMOUS))
return NULL;
 
return as_area_create(start, length, prot);
}
 
int munmap(void *start, size_t length)
{
return as_area_destroy(start);
}
/uspace/trunk/libc/Makefile
71,7 → 71,8
generic/libadt/hash_table.o \
generic/time.c \
generic/err.c \
generic/stdlib.c
generic/stdlib.c \
generic/mmap.c
 
ARCH_SOURCES += \
arch/$(ARCH)/src/entry.s \
/uspace/trunk/libc/arch/ia64/include/types.h
32,6 → 32,7
typedef unsigned long long sysarg_t;
typedef unsigned long size_t;
typedef signed long ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;
/uspace/trunk/libc/arch/ppc32/include/types.h
32,6 → 32,7
typedef unsigned int sysarg_t;
typedef unsigned int size_t;
typedef signed int ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;
/uspace/trunk/libc/arch/amd64/include/types.h
32,6 → 32,7
typedef unsigned long long sysarg_t;
typedef unsigned long size_t;
typedef signed long ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;
/uspace/trunk/libc/arch/ppc64/include/types.h
32,6 → 32,7
typedef unsigned long sysarg_t;
typedef unsigned long size_t;
typedef signed long ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;
/uspace/trunk/libc/arch/mips32/include/types.h
32,6 → 32,7
typedef unsigned int sysarg_t;
typedef unsigned int size_t;
typedef signed int ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;
/uspace/trunk/libc/arch/ia32/include/types.h
32,6 → 32,7
typedef unsigned int sysarg_t;
typedef unsigned int size_t;
typedef signed int ssize_t;
typedef ssize_t off_t;
 
typedef char int8_t;
typedef short int int16_t;