Subversion Repositories HelenOS-historic

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1547 → Rev 1542

/uspace/trunk/fb/ppm.c
File deleted
/uspace/trunk/fb/ppm.h
File deleted
/uspace/trunk/fb/ega.c
110,7 → 110,7
/* We accept one area for data interchange */
intersize = IPC_GET_ARG2(call);
if (intersize >= scr_width*scr_height*sizeof(*interbuf)) {
receive_comm_area(callid,&call,(void **)&interbuf);
receive_comm_area(callid,&call,(void **)&interbuf, scr_width*scr_height*sizeof(*interbuf));
continue;
}
retval = EINVAL;
/uspace/trunk/fb/fb.c
46,7 → 46,6
#include "fb.h"
#include "main.h"
#include "../console/screenbuffer.h"
#include "ppm.h"
 
#define DEFAULT_BGCOLOR 0x000080
#define DEFAULT_FGCOLOR 0xffff00
475,89 → 474,7
cursor_print(vp);
}
 
static int shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp)
{
static keyfield_t *interbuffer = NULL;
static size_t intersize = 0;
 
static char *pixmap = NULL;
static ipcarg_t pixmap_id = 0;
static size_t pixmap_size;
 
int handled = 1;
int retval = 0;
viewport_t *vport = &viewports[vp];
unsigned int x,y;
 
switch (IPC_GET_METHOD(*call)) {
case IPC_M_AS_AREA_SEND:
/* We accept one area for data interchange */
if (IPC_GET_ARG1(*call) == pixmap_id) {
void *dest = as_get_mappable_page(IPC_GET_ARG2(*call));
pixmap_size = IPC_GET_ARG2(*call);
if (!ipc_answer_fast(callid, 0, (sysarg_t)dest, 0))
pixmap = dest;
else
pixmap_id = 0;
if (pixmap[0] != 'P')
while (1)
;
return 1;
} else {
intersize = IPC_GET_ARG2(*call);
receive_comm_area(callid,call,(void **)&interbuffer);
}
return 1;
case FB_PREPARE_SHM:
if (pixmap_id)
retval = EBUSY;
else
pixmap_id = IPC_GET_ARG1(*call);
break;
case FB_DROP_SHM:
if (pixmap) {
as_area_destroy(pixmap);
pixmap = NULL;
}
pixmap_id = 0;
break;
case FB_DRAW_PPM:
if (!pixmap) {
retval = EINVAL;
break;
}
x = IPC_GET_ARG1(*call);
y = IPC_GET_ARG2(*call);
if (x > vport->width || y > vport->height) {
retval = EINVAL;
break;
}
draw_ppm(pixmap, pixmap_size, IPC_GET_ARG1(*call), IPC_GET_ARG2(*call),
vport->width - x, vport->height - y, putpixel, vp);
break;
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);
break;
default:
handled = 0;
}
if (handled)
ipc_answer_fast(callid, retval, 0, 0);
return handled;
}
 
/** Function for handling connections to FB
*
*/
569,6 → 486,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];
586,9 → 505,6
cursor_blink(vp);
continue;
}
if (shm_handle(callid, &call, vp))
continue;
 
switch (IPC_GET_METHOD(call)) {
case IPC_M_PHONE_HUNGUP:
client_connected = 0;
597,7 → 513,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.c
39,16 → 39,23
#include "ega.h"
#include "main.h"
 
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area)
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
size_t maxsize)
{
void *dest;
 
dest = as_get_mappable_page(IPC_GET_ARG2(*call));
if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0) {
if (*area)
as_area_destroy(*area);
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[])
/uspace/trunk/fb/main.h
29,6 → 29,7
#ifndef __MAIN_H_
#define __MAIN_H_
 
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area);
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
size_t maxsize);
 
#endif
/uspace/trunk/fb/Makefile
49,8 → 49,7
font-8x16.c \
main.c \
sysio.c \
ega.c \
ppm.c
ega.c
 
OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
 
/uspace/trunk/libc/generic/async.c
623,27 → 623,6
return (aid_t) msg;
}
 
/** Send message and return id of the sent message
*
* The return value can be used as input for async_wait() to wait
* for completion.
*/
aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
ipcarg_t arg3, ipc_call_t *dataptr)
{
amsg_t *msg;
 
msg = malloc(sizeof(*msg));
msg->done = 0;
msg->dataptr = dataptr;
 
msg->wdata.active = 1; /* We may sleep in next method, but it
* will use it's own mechanism */
ipc_call_async_3(phoneid,method,arg1,arg2,arg3, msg,reply_received,1);
 
return (aid_t) msg;
}
 
/** Wait for a message sent by async framework
*
* @param amsgid Message ID to wait for
/uspace/trunk/libc/generic/mmap.c
33,15 → 33,15
void *mmap(void *start, size_t length, int prot, int flags, int fd,
off_t offset)
{
int rc;
 
if (!start)
start = as_get_mappable_page(length);
prot |= AS_AREA_CACHEABLE;
// if (! ((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE)))
// return MAP_FAILED;
// return NULL;
if (! (flags & MAP_ANONYMOUS))
return MAP_FAILED;
return NULL;
 
return as_area_create(start, length, prot);
}
/uspace/trunk/libc/generic/time.c
73,7 → 73,7
printf("Failed to initialize timeofday memarea\n");
_exit(1);
}
if (! (rights & AS_AREA_READ)) {
if (rights != (AS_AREA_READ | AS_AREA_CACHEABLE)) {
printf("Received bad rights on time area: %X\n",
rights);
as_area_destroy(mapping);
/uspace/trunk/libc/include/sys/mman.h
31,8 → 31,6
 
#include <as.h>
 
#define MAP_FAILED ((void *) -1)
 
#define MAP_SHARED (1 << 0)
#define MAP_PRIVATE (1 << 1)
#define MAP_FIXED (1 << 2)
/uspace/trunk/libc/include/ipc/fb.h
20,8 → 20,4
#define FB_DRAW_TEXT_DATA 1036
#define FB_FLUSH 1037
 
#define FB_DRAW_PPM 1038
#define FB_PREPARE_SHM 1039
#define FB_DROP_SHM 1040
 
#endif
/uspace/trunk/libc/include/async.h
46,8 → 46,6
 
aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
ipc_call_t *dataptr);
aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
ipcarg_t arg3, ipc_call_t *dataptr);
void async_wait_for(aid_t amsgid, ipcarg_t *result);
int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
 
70,25 → 68,8
*r2 = IPC_GET_ARG2(result);
return rc;
}
static inline ipcarg_t sync_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *r1,
ipcarg_t *r2, ipcarg_t *r3)
{
ipc_call_t result;
ipcarg_t rc;
 
aid_t eid = async_send_3(phoneid, method, arg1, arg2, arg3, &result);
async_wait_for(eid, &rc);
if (r1)
*r1 = IPC_GET_ARG1(result);
if (r2)
*r2 = IPC_GET_ARG2(result);
if (r3)
*r3 = IPC_GET_ARG3(result);
return rc;
}
 
 
pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid,
ipc_call_t *call,
void (*cthread)(ipc_callid_t,ipc_call_t *));
/uspace/trunk/libc/arch/ia64/Makefile.inc
38,6 → 38,3
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \
arch/$(ARCH)/src/psthread.S \
arch/$(ARCH)/src/thread.c
 
BFD_NAME = elf64-little
BFD_ARCH = ia64-elf64
/uspace/trunk/libc/arch/ppc32/Makefile.inc
39,6 → 39,3
CFLAGS += -mcpu=powerpc -msoft-float -m32
AFLAGS += -a32
LFLAGS += -N
 
BFD_NAME = elf32-powerpc
BFD_ARCH = powerpc:common
/uspace/trunk/libc/arch/amd64/Makefile.inc
37,6 → 37,3
arch/$(ARCH)/src/thread.c
 
LFLAGS += -N
 
BFD_NAME = elf64-x86-64
BFD_ARCH = i386:x86-64
/uspace/trunk/libc/arch/mips32/Makefile.inc
37,5 → 37,4
arch/$(ARCH)/src/psthread.S \
arch/$(ARCH)/src/thread.c
 
BFD_ARCH = mips
BFD_NAME = elf32-little
 
/uspace/trunk/libc/arch/ia32/Makefile.inc
37,6 → 37,3
arch/$(ARCH)/src/thread.c
 
LFLAGS += -N
 
BFD_NAME = elf32-i386
BFD_ARCH = i386
/uspace/trunk/libc/arch/mips32eb/Makefile.inc
31,13 → 31,9
 
TARGET = mips-sgi-irix5
TOOLCHAIN_DIR = /usr/local/mips/bin
CFLAGS += -mips3
CFLAGS += -mno-abicalls -mips3
 
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \
arch/$(ARCH)/src/psthread.S \
arch/$(ARCH)/src/thread.c
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c
 
LFLAGS += -N
 
BFD_ARCH = mips
BFD_NAME = elf32-big
/uspace/trunk/console/nameic.ppm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/uspace/trunk/console/helenos.ppm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/uspace/trunk/console/console.c
388,7 → 388,7
}
if ((interbuffer = mmap(NULL, sizeof(keyfield_t) * fb_info.cols * fb_info.rows , PROTO_READ|PROTO_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, 0 ,0 )) != NULL) {
if (ipc_call_sync_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t)interbuffer, 0, AS_AREA_READ, NULL, NULL, NULL) != 0) {
if (ipc_call_sync_3(fb_info.phone, IPC_M_AS_AREA_SEND, (ipcarg_t)interbuffer, 0, AS_AREA_READ | AS_AREA_CACHEABLE, NULL, NULL, NULL) != 0) {
munmap(interbuffer, sizeof(keyfield_t) * fb_info.cols * fb_info.rows);
interbuffer = NULL;
}
/uspace/trunk/console/gcons.c
30,21 → 30,18
#include <ipc/ipc.h>
#include <async.h>
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
 
#include "console.h"
#include "gcons.h"
 
#define CONSOLE_TOP 65
#define CONSOLE_TOP 50
#define CONSOLE_MARGIN 10
 
#define STATUS_START 120
#define STATUS_SPACE 5
#define STATUS_SPACE 20
#define STATUS_WIDTH 40
#define STATUS_HEIGHT 30
 
#define MAIN_COLOR 0xffffff
#define MAIN_COLOR 0x118811
 
static int use_gcons = 0;
static ipcarg_t xres,yres;
148,42 → 145,9
vp_switch(console_vp);
}
 
static void draw_pixmap(char *logo, size_t size, int x, int y)
{
char *shm;
int rc;
 
/* Create area */
shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
if (shm == MAP_FAILED)
return;
 
memcpy(shm, logo, size);
/* Send area */
rc = sync_send_2(fbphone, FB_PREPARE_SHM, (ipcarg_t)shm, 0, NULL, NULL);
if (rc)
goto exit;
rc = sync_send_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t)shm, 0, PROTO_READ, NULL, NULL, NULL);
if (rc)
goto drop;
/* Draw logo */
send_call_2(fbphone, FB_DRAW_PPM, x, y);
drop:
/* Drop area */
nsend_call(fbphone, FB_DROP_SHM, 0);
exit:
/* Remove area */
munmap(shm, size);
}
 
extern char _binary_helenos_ppm_start[0];
extern int _binary_helenos_ppm_size;
extern char _binary_nameic_ppm_start[0];
extern int _binary_nameic_ppm_size;
void gcons_redraw_console(void)
{
int i;
size_t hsize = (size_t)&_binary_helenos_ppm_size;
 
if (!use_gcons)
return;
191,10 → 155,7
vp_switch(0);
set_style(MAIN_COLOR, MAIN_COLOR);
clear();
draw_pixmap(_binary_helenos_ppm_start, (size_t)&_binary_helenos_ppm_size, xres-64, 0);
draw_pixmap(_binary_nameic_ppm_start, (size_t)&_binary_nameic_ppm_size, 5, 10);
 
 
for (i=0;i < CONSOLE_COUNT; i++)
draw_stat(i, i == active_console ? CONS_ACTIVE : CONS_DISCONNECTED);
vp_switch(console_vp);
223,7 → 184,7
/* Create status buttons */
for (i=0; i < CONSOLE_COUNT; i++) {
cstatus_vp[i] = vp_create(STATUS_START+CONSOLE_MARGIN+i*(STATUS_WIDTH+STATUS_SPACE),
cstatus_vp[i] = vp_create(CONSOLE_MARGIN+i*(STATUS_WIDTH+STATUS_SPACE),
CONSOLE_MARGIN, STATUS_WIDTH, STATUS_HEIGHT);
if (cstatus_vp[i] < 0)
return;
/uspace/trunk/console/Makefile
47,12 → 47,9
../kbd/generic/key_buffer.c \
gcons.c
 
IMAGES = helenos.ppm nameic.ppm
 
ARCH_SOURCES =
 
GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) \
$(addsuffix .o,$(basename $(IMAGES)))
GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
 
.PHONY: all clean depend disasm
81,6 → 78,3
 
%.o: %.c
$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
 
%.o: %.ppm
$(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) $< $@
/uspace/trunk/ns/ns.c
90,7 → 90,7
addr = as_get_mappable_page(PAGE_SIZE);
map_physmem(ph_addr, addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
}
ipc_answer_fast(callid, 0, (ipcarg_t)addr, AS_AREA_READ);
ipc_answer_fast(callid, 0, (ipcarg_t)addr, AS_AREA_READ | AS_AREA_CACHEABLE);
}
 
int main(int argc, char **argv)
/uspace/trunk/kbd/arch/mips32eb
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:special
-*
\ No newline at end of property