Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 489 → Rev 490

/shark/trunk/drivers/fb/matrox/matroxfb_base.c
124,6 → 124,8
static int default_cmode = CMODE_NVRAM;
#endif
 
void *sem_sync;
 
static void matroxfb_unregister_device(struct matrox_fb_info* minfo);
 
/* --------------------------------------------------------------------- */
213,6 → 215,7
mga_outl(M_ICLEAR, 0x20);
ACCESS_FBINFO(crtc1.vsync.cnt)++;
matroxfb_crtc1_panpos(PMINFO2);
shark_internal_sem_post(sem_sync);
//wake_up_interruptible(&ACCESS_FBINFO(crtc1.vsync.wait));
handled = 1;
}
219,6 → 222,7
if (status & 0x200) {
mga_outl(M_ICLEAR, 0x200);
ACCESS_FBINFO(crtc2.vsync.cnt)++;
shark_internal_sem_post(sem_sync);
//wake_up_interruptible(&ACCESS_FBINFO(crtc2.vsync.wait));
handled = 1;
}
267,7 → 271,6
}
 
int matroxfb_wait_for_sync(WPMINFO u_int32_t crtc) {
wait_queue_t __wait;
struct matrox_vsync *vs;
unsigned int cnt;
int ret;
289,10 → 292,11
if (ret) {
return ret;
}
//init_waitqueue_entry(&__wait, current);
 
shark_internal_sem_wait(sem_sync);
 
cnt = vs->cnt;
ret = 1;//ret = wait_event_interruptible_timeout(vs->wait, cnt != vs->cnt, HZ/10);
ret = 1;
if (ret < 0) {
return ret;
}
2011,6 → 2015,7
init_rwsem(&ACCESS_FBINFO(crtc2.lock));
init_rwsem(&ACCESS_FBINFO(altout.lock));
ACCESS_FBINFO(irq_flags) = 0;
shark_internal_sem_create(&sem_sync,0);
//init_waitqueue_head(&ACCESS_FBINFO(crtc1.vsync.wait));
//init_waitqueue_head(&ACCESS_FBINFO(crtc2.vsync.wait));
ACCESS_FBINFO(crtc1.panpos) = -1;
/shark/trunk/drivers/linuxc26/include/linux/completion.h
21,12 → 21,7
#define DECLARE_COMPLETION(work) \
struct completion work = COMPLETION_INITIALIZER(work)
 
static inline void init_completion(struct completion *x)
{
x->done = 0;
init_waitqueue_head(&x->wait);
}
 
extern void init_completion(struct completion *x);
extern void FASTCALL(wait_for_completion(struct completion *));
extern void FASTCALL(complete(struct completion *));
extern void FASTCALL(complete_all(struct completion *));
/shark/trunk/drivers/linuxc26/include/linux/wait.h
54,40 → 54,20
#define DECLARE_WAIT_QUEUE_HEAD(name) \
wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
 
static inline void init_waitqueue_head(wait_queue_head_t *q)
{
q->lock = SPIN_LOCK_UNLOCKED;
INIT_LIST_HEAD(&q->task_list);
}
extern void init_waitqueue_head(wait_queue_head_t *q);
 
static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
{
q->flags = 0;
q->task = p;
q->func = default_wake_function;
}
extern void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p);
 
static inline void init_waitqueue_func_entry(wait_queue_t *q,
wait_queue_func_t func)
{
q->flags = 0;
q->task = NULL;
q->func = func;
}
extern void init_waitqueue_func_entry(wait_queue_t *q,
wait_queue_func_t func);
 
static inline int waitqueue_active(wait_queue_head_t *q)
{
return !list_empty(&q->task_list);
}
extern int waitqueue_active(wait_queue_head_t *q);
 
extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
 
static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new)
{
list_add(&new->task_list, &head->task_list);
}
extern void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new);
 
/*
* Used for wake-one threads:
/shark/trunk/drivers/linuxc26/include/asm/uaccess.h
371,9 → 371,20
: "m"(__m(addr)), "i"(errret), "0"(err))
 
 
unsigned long __copy_to_user_ll(void __user *to, const void *from, unsigned long n);
unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned long n);
static inline unsigned long __copy_to_user_ll(void __user *to, const void *from, unsigned long n) {
 
memcpy(to,from,n);
return 0;
 
}
 
static inline unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned long n) {
 
memcpy(to,from,n);
return 0;
 
}
 
/*
* Here we special-case 1, 2 and 4-byte copy_*_user invocations. On a fault
* we return the initial request size (1, 2 or 4), as copy_*_user should do.
398,22 → 409,10
static inline unsigned long
__copy_to_user(void __user *to, const void *from, unsigned long n)
{
if (__builtin_constant_p(n)) {
unsigned long ret;
 
switch (n) {
case 1:
__put_user_size(*(u8 *)from, (u8 *)to, 1, ret, 1);
return ret;
case 2:
__put_user_size(*(u16 *)from, (u16 *)to, 2, ret, 2);
return ret;
case 4:
__put_user_size(*(u32 *)from, (u32 *)to, 4, ret, 4);
return ret;
}
}
return __copy_to_user_ll(to, from, n);
memcpy(to,from,n);
return 0;
 
}
 
/**
/shark/trunk/drivers/linuxc26/include/linuxcomp.h
28,4 → 28,8
#define __HAVE_ARCH_MEMCMP
#define __HAVE_ARCH_MEMCHR
 
void shark_internal_sem_create(void **sem, int init);
void shark_internal_sem_wait(void *sem);
void shark_internal_sem_post(void *sem);
 
#endif
/shark/trunk/drivers/linuxc26/shark_glue.c
0,0 → 1,21
#include <kernel/int_sem.h>
#include <stdlib.h>
 
void shark_internal_sem_create(void **sem, int init) {
 
*sem = (void *)malloc(sizeof(internal_sem_t));
internal_sem_init((internal_sem_t *)(*sem),init);
 
}
 
void shark_internal_sem_wait(void *sem) {
 
internal_sem_wait((internal_sem_t *)(sem));
 
}
 
void shark_internal_sem_post(void *sem) {
 
internal_sem_post((internal_sem_t *)(sem));
 
}
/shark/trunk/drivers/linuxc26/core.c
371,7 → 371,7
void device_unregister_wait(struct device * dev)
{
struct completion c;
init_completion(&c);
//init_completion(&c);
dev->complete = &c;
device_unregister(dev);
//wait_for_completion(&c);
/shark/trunk/drivers/linuxc26/makefile
11,7 → 11,7
OBJS_PATH = $(BASE)/drivers/linuxc26
 
OBJS = bus.o linuxcomp.o core.o driver.o vsprintf.o interface.o kobject.o\
shark_linuxc26.o class.o
shark_linuxc26.o shark_glue.o class.o
 
C_OPT += -I../linuxc26/include