All pastes #494191 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-05-18 03:26 UTC
rendered paste body
int 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;
}