home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / Dev32 / lxidc.c < prev    next >
C/C++ Source or Header  |  2002-04-26  |  7KB  |  261 lines

  1. /* $Id: lxidc.c,v 1.2 2002/04/26 23:08:55 smilcke Exp $ */
  2.  
  3. /*
  4.  * idc.c
  5.  * Autor:               Stefan Milcke
  6.  * Erstellt am:         08.11.2001
  7.  * Letzte Aenderung am: 14.04.2002
  8.  *
  9. */
  10. extern "C" {               // 16-bit header files are not C++ aware
  11. #define INCL_NOPMAPI
  12. #define INCL_DOSINFOSEG
  13. #include <os2.h>
  14. }
  15. #include <devtype.h>
  16. #include <devhelp.h>
  17. #include <strategy.h>
  18. #include <stacktoflat.h>
  19. extern "C" {
  20. #include <linux/types.h>
  21. #include <linux/kernel.h>
  22. #include <linux/slab.h>
  23. #include <linux/mm.h>
  24. #include <linux/version.h>
  25. #include <linux/module.h>
  26. #include <linux/timer.h>
  27. #include <linux/ioctl.h>
  28. #include <linux/init.h>
  29. #include <linux/vmalloc.h>
  30. #include <linux/kmod.h>
  31. #include <asm/uaccess.h>
  32. #include <linux/process.h>
  33. #include <linux/pci.h>
  34. #include <linux/i2c.h>
  35. #include <linux/i2c-algo-bit.h>
  36. #include <linux/videodev.h>
  37. #include <ioremap.h>
  38.  
  39. #include <lxapiidc.h>
  40. #include <lxapilib.h>
  41. #include <lxrmcall.h>
  42. }
  43.  
  44. extern "C" void *malloc(unsigned long size);
  45. extern "C" void free(void *ptr);
  46. extern "C" unsigned long OS2_lxioctl(void __far* requestPacketPtr);
  47.  
  48. #define DECLARE_LXIDCGETAPIPTR(type,packet) \
  49. type *pApi=(type*)packet; \
  50. if(LXAPI_VERSION<pApi->required_version) return 2; \
  51. pApi->actual_version=LXAPI_VERSION;
  52.  
  53. #define SETTOLXAPI(name) pApi->name=name;
  54.  
  55. WORD32 __far IDCEntry(ULONG cmd, ULONG packet);
  56. #pragma aux IDCEntry "IDC_ENTRY" parm reverse [ecx edx]
  57. WORD32 __far IDCEntry(ULONG cmd, ULONG packet)
  58. {
  59.  WORD32 rc=0;
  60.  switch(cmd)
  61.  {
  62.   case LXIDCCMD_GETOS2API:
  63.    {
  64.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETOS2API,packet);
  65.     SETTOLXAPI(OS2_lxioctl);
  66.     SETTOLXAPI(OS2_add_module);
  67.     SETTOLXAPI(OS2_apply_mod_parm);
  68.     SETTOLXAPI(OS2_set_module_parm);
  69.     SETTOLXAPI(OS2_get_num_modules);
  70.     SETTOLXAPI(OS2_get_total_num_modules);
  71.     SETTOLXAPI(OS2_get_module_name);
  72.     SETTOLXAPI(OS2_enum_modules);
  73.    }
  74.    break;
  75.   case LXIDCCMD_GETRMAPI:
  76.    {
  77.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETRMAPI,packet);
  78.     SETTOLXAPI(RM32CreateDriver);
  79.     SETTOLXAPI(RM32DestroyDriver);
  80.     SETTOLXAPI(RM32CreateAdapter);
  81.     SETTOLXAPI(RM32DestroyAdapter);
  82.     SETTOLXAPI(RM32CreateDevice);
  83.     SETTOLXAPI(RM32DestroyDevice);
  84.     SETTOLXAPI(RM32AllocResource);
  85.     SETTOLXAPI(RM32DeallocResource);
  86.     SETTOLXAPI(RM32ModifyResources);
  87.    }
  88.    break;
  89.   case LXIDCCMD_GETV4LAPI:
  90.    {
  91.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETV4LAPI,packet);
  92.     SETTOLXAPI(OS2_v4lx_enum_devices);
  93.     SETTOLXAPI(OS2_v4lx_get_num_devices);
  94.     SETTOLXAPI(OS2_v4lx_open_device);
  95.     SETTOLXAPI(OS2_v4lx_close_device);
  96.     SETTOLXAPI(OS2_v4lx_close_all_opened_devices);
  97.     SETTOLXAPI(OS2_v4lx_get_opened_device);
  98.     SETTOLXAPI(OS2_v4lx_ioctl);
  99.    }
  100.    break;
  101.   case LXIDCCMD_GETMEMAPI:
  102.    {
  103.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETMEMAPI,packet);
  104.     pApi->malloc=malloc;
  105.     pApi->free=free;
  106.     SETTOLXAPI(kmalloc);
  107.     SETTOLXAPI(kfree);
  108.     SETTOLXAPI(vmalloc);
  109.     SETTOLXAPI(__vmalloc);
  110.     SETTOLXAPI(vfree);
  111.     SETTOLXAPI(kfree_s);
  112.     SETTOLXAPI(virt_to_phys);
  113.     SETTOLXAPI(phys_to_virt);
  114.     SETTOLXAPI(free_pages);
  115.     SETTOLXAPI(alloc_pages);
  116.     SETTOLXAPI(remap_page_range);
  117.     SETTOLXAPI(is_access_ok);
  118.     SETTOLXAPI(__copy_user);
  119.     SETTOLXAPI(copy_to_user);
  120.     SETTOLXAPI(__copy_user_zeroing);
  121.     SETTOLXAPI(copy_from_user);
  122.     SETTOLXAPI(get_user);
  123.     SETTOLXAPI(put_user);
  124.     SETTOLXAPI(ioremap);
  125.     SETTOLXAPI(iounmap);
  126.    }
  127.    break;
  128.   case LXIDCCMD_GETSEMAPI:
  129.    {
  130.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETSEMAPI,packet);
  131.     SETTOLXAPI(init_MUTEX);
  132.     SETTOLXAPI(init_MUTEX_LOCKED);
  133.     SETTOLXAPI(down);
  134.     SETTOLXAPI(up);
  135.    }
  136.    break;
  137.   case LXIDCCMD_GETSLCAPI:
  138.    {
  139.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETSLCAPI,packet);
  140.     SETTOLXAPI(spin_lock_init);
  141.     SETTOLXAPI(spin_lock);
  142.     SETTOLXAPI(spin_lock_flag);
  143.     SETTOLXAPI(spin_trylock);
  144.     SETTOLXAPI(spin_unlock_wait);
  145.     SETTOLXAPI(spin_unlock);
  146.    }
  147.    break;
  148.   case LXIDCCMD_GETMODAPI:
  149.    {
  150.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETMODAPI,packet);
  151.     SETTOLXAPI(request_module);
  152.     SETTOLXAPI(release_module);
  153.    }
  154.    break;
  155.   case LXIDCCMD_GETSCHAPI:
  156.    {
  157.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETSCHAPI,packet);
  158.     pApi->__jiffies=&jiffies;
  159.     pApi->__current=¤t;
  160.     SETTOLXAPI(add_wait_queue);
  161.     SETTOLXAPI(add_wait_queue_exclusive);
  162.     SETTOLXAPI(remove_wait_queue);
  163.     SETTOLXAPI(__wake_up);
  164.     SETTOLXAPI(sleep_on);
  165.     SETTOLXAPI(sleep_on_timeout);
  166.     SETTOLXAPI(interruptible_sleep_on);
  167.     SETTOLXAPI(interruptible_sleep_on_timeout);
  168.     SETTOLXAPI(wake_up_process);
  169.     SETTOLXAPI(schedule_timeout);
  170.     SETTOLXAPI(schedule);
  171.     SETTOLXAPI(kernel_thread);
  172.    }
  173.    break;
  174.   case LXIDCCMD_GETTIMAPI:
  175.    {
  176.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETTIMAPI,packet);
  177.     SETTOLXAPI(add_timer);
  178.     SETTOLXAPI(mod_timer);
  179.     SETTOLXAPI(del_timer);
  180.    }
  181.    break;
  182.   case LXIDCCMD_GETRESAPI:
  183.    {
  184.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETRESAPI,packet);
  185.     pApi->__ioport_resource=&ioport_resource;
  186.     pApi->__iomem_resource=&iomem_resource;
  187.     SETTOLXAPI(request_resource);
  188.     SETTOLXAPI(release_resource);
  189.     SETTOLXAPI(allocate_resource);
  190.     SETTOLXAPI(request_irq);
  191.     SETTOLXAPI(free_irq);
  192.     SETTOLXAPI(eoi_irq);
  193.     SETTOLXAPI(__check_region);
  194.     SETTOLXAPI(__request_region);
  195.     SETTOLXAPI(__release_region);
  196.    }
  197.    break;
  198.   case LXIDCCMD_GETPCIAPI:
  199.    {
  200.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETPCIAPI,packet);
  201.     pApi->__pci_pci_problems=&pci_pci_problems;
  202.     SETTOLXAPI(pcibios_init);
  203.     SETTOLXAPI(pcibios_fixup_bus);
  204.     SETTOLXAPI(pcibios_enable_device);
  205.     SETTOLXAPI(pcibios_align_resource);
  206.  
  207.     SETTOLXAPI(pci_find_device);
  208.     SETTOLXAPI(pci_find_subsys);
  209.     SETTOLXAPI(pci_find_class);
  210.     SETTOLXAPI(pci_find_slot);
  211.     SETTOLXAPI(pci_find_capability);
  212.  
  213.     SETTOLXAPI(pci_read_config_byte);
  214.     SETTOLXAPI(pci_read_config_word);
  215.     SETTOLXAPI(pci_read_config_dword);
  216.     SETTOLXAPI(pci_write_config_byte);
  217.     SETTOLXAPI(pci_write_config_word);
  218.     SETTOLXAPI(pci_write_config_dword);
  219.  
  220.     SETTOLXAPI(pci_enable_device);
  221.     SETTOLXAPI(pci_disable_device);
  222.     SETTOLXAPI(pci_set_master);
  223.     SETTOLXAPI(pci_assign_resource);
  224.  
  225.     SETTOLXAPI(pci_register_driver);
  226.     SETTOLXAPI(pci_unregister_driver);
  227.     SETTOLXAPI(pci_insert_device);
  228.     SETTOLXAPI(pci_remove_device);
  229.     SETTOLXAPI(pci_dev_driver);
  230.     SETTOLXAPI(pci_match_device);
  231.    }
  232.    break;
  233.   case LXIDCCMD_GETI2CAPI:
  234.    {
  235.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETI2CAPI,packet);
  236.     SETTOLXAPI(i2c_probe);
  237.     SETTOLXAPI(i2c_add_driver);
  238.     SETTOLXAPI(i2c_del_driver);
  239.     SETTOLXAPI(i2c_attach_client);
  240.     SETTOLXAPI(i2c_detach_client);
  241.     SETTOLXAPI(i2c_master_send);
  242.     SETTOLXAPI(i2c_master_recv);
  243.     SETTOLXAPI(i2c_transfer);
  244.     SETTOLXAPI(i2c_bit_add_bus);
  245.     SETTOLXAPI(i2c_bit_del_bus);
  246.    }
  247.    break;
  248.   case LXIDCCMD_GETVIDAPI:
  249.    {
  250.     DECLARE_LXIDCGETAPIPTR(LXIDC_GETVIDAPI,packet);
  251.     SETTOLXAPI(video_register_device);
  252.     SETTOLXAPI(video_unregister_device);
  253.    }
  254.    break;
  255.   default:
  256.    rc=1;
  257.    break;
  258.  }
  259.  return rc;
  260. }
  261.