/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,23 → 409,11 |
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; |
memcpy(to,from,n); |
return 0; |
} |
} |
return __copy_to_user_ll(to, from, n); |
} |
/** |
* __copy_from_user: - Copy a block of data from user space, with less checking. |
/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 |