forked from KolibriOS/kolibrios
130 lines
2.1 KiB
C
130 lines
2.1 KiB
C
|
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
unsigned handle;
|
||
|
unsigned io_code;
|
||
|
void *input;
|
||
|
int inp_size;
|
||
|
void *output;
|
||
|
int out_size;
|
||
|
}ioctl_t;
|
||
|
|
||
|
|
||
|
#define ERR_OK 0
|
||
|
#define ERR_PARAM -1
|
||
|
#define ERR_NOMEM -2
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
void usleep(u32_t delay);
|
||
|
|
||
|
static int __attribute__ ((always_inline))
|
||
|
abs (int i)
|
||
|
{
|
||
|
return i < 0 ? -i : i;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern inline u32_t get_service(char *name)
|
||
|
{
|
||
|
u32_t retval;
|
||
|
asm("int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(68),"b"(16),"c"(name));
|
||
|
|
||
|
return retval;
|
||
|
};
|
||
|
|
||
|
extern inline u32_t load_service(char *name)
|
||
|
{
|
||
|
u32_t retval;
|
||
|
asm("int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(68),"b"(21),"c"(name));
|
||
|
|
||
|
return retval;
|
||
|
};
|
||
|
|
||
|
extern inline int call_service(ioctl_t *io)
|
||
|
{
|
||
|
int retval;
|
||
|
|
||
|
asm("int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(68),"b"(17),"c"(io)
|
||
|
:"memory");
|
||
|
|
||
|
return retval;
|
||
|
};
|
||
|
|
||
|
extern inline void* UserAlloc(size_t size)
|
||
|
{
|
||
|
void *retval;
|
||
|
|
||
|
asm("int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(68),"b"(12),"c"(size)
|
||
|
:"memory");
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
extern inline void UserFree(void *mem)
|
||
|
{
|
||
|
__asm__ __volatile__(
|
||
|
"int $0x40"
|
||
|
::"a"(68),"b"(13),"c"(mem)
|
||
|
:"memory");
|
||
|
}
|
||
|
|
||
|
extern inline int GetScreenSize()
|
||
|
{
|
||
|
int retval;
|
||
|
|
||
|
__asm__ __volatile__(
|
||
|
"int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(61), "b"(1));
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
extern inline int GetScreenBpp()
|
||
|
{
|
||
|
int retval;
|
||
|
|
||
|
__asm__ __volatile__(
|
||
|
"int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(61), "b"(2));
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
extern inline int GetScreenPitch()
|
||
|
{
|
||
|
int retval;
|
||
|
|
||
|
__asm__ __volatile__(
|
||
|
"int $0x40"
|
||
|
:"=a"(retval)
|
||
|
:"a"(61), "b"(3));
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
extern inline int test_mmx()
|
||
|
{
|
||
|
int retval;
|
||
|
|
||
|
__asm__ __volatile__(
|
||
|
"cpuid\n\t"
|
||
|
"testl $23, %%edx\n\t"
|
||
|
"setnzb %%al\n\t"
|
||
|
"movzx %%al, %%eax"
|
||
|
:"=a"(retval)
|
||
|
:"a"(0)
|
||
|
:"ebx","ecx","edx");
|
||
|
|
||
|
return retval;
|
||
|
}
|