rendered paste bodyint hv_ioctl(struct inode *inode, struct file *file,
unsigned int ioctl_num,
unsigned long ioctl_param)
{
unsigned long num;
switch (ioctl_num)
{
case IOCTL_SET_NUMCALL:
num = ioctl_param;
printk(KERN_ALERT "hhv: Function %d\n\n", num);
__asm__ volatile (
"li %%r3, 0;\n" \
"li %%r4, 0;\n" \
"li %%r5, 0;\n" \
"li %%r6, 0;\n" \
"li %%r7, 0;\n" \
"li %%r8, 0;\n" \
"li %%r9, 0;\n" \
"li %%r10, 0;\n" \
"mr %%r11,%1;\n" \
"sc 1;\n" \
"extsw %%r3,%%r3;\n" \
"mr %0,%%r3;\n" \
"nop;\n"
: "=r" (last_ret)
: "r" (num));
printk(KERN_ALERT "\n"); /* hhv: Call OK. last_ret=%d\n", last_ret);*/
break;
case IOCTL_GET_RETVAL:
/* Inverse return value, cos < 0 will make ioctl call to fail */
return -last_ret;
break;
}
return 0;
}