home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / UNIX / LKSOutOfLineData / KernelServer / mydriver_main.c < prev    next >
Encoding:
Text File  |  1992-07-24  |  2.4 KB  |  83 lines

  1. /* mydriver_main.c:  major functions of mydriver */
  2.  
  3. #import <kernserv/kern_server_types.h>
  4. #import <kernserv/prototypes.h>
  5. #import "../Library/mydefs.h"
  6.  
  7. kern_server_t instance;
  8.  
  9. /* mydriver_init:  Called when mydriver is loaded. */
  10. void mydriver_init(void)
  11. {
  12.     printf("My driver loaded\n");
  13. }
  14.  
  15. /* mydriver_signoff:  Called when mydriver is unloaded. */
  16. void mydriver_signoff(void)
  17. {
  18.     printf("My driver unloaded\n\n");
  19. }
  20.  
  21. /* mydriver_import:  Called by mydriver_server, which was created by MiG. */
  22. kern_return_t mydriver_import(port_t server, user_data_t user_data, unsigned int length)
  23. {
  24.     kern_return_t r;
  25.     user_data_t tmp, local_data;
  26.     port_t kernel_task;
  27.     
  28.     kerhtask = kern_serv_kernel_task_port();    
  29.     tmp = local_data = (char *)kalloc(8192);
  30.  
  31.     printf("Calling vm_write\n");
  32.     r = vm_write((vm_task_t)kernel_task, (vm_address_t)local_data, 
  33.         (pointer_t)user_data, 8192);
  34.     if (r != KERN_SUCCESS)
  35.         printf("Call to vmwrite failed \n"); 
  36.     else {
  37.         printf("Trying to access data.\n");
  38.         printf("First data element is: %c\n", *tmp++);
  39.         printf("Second data element is: %c\n", *tmp++);
  40.         printf("Third data element is: %c\n", *tmp++);
  41.         printf("Fourth data element is: %c\n", *tmp++);
  42.         printf("Fifth data element is: %c\n", *tmp++);
  43.         
  44.         (void)strncpy(tmp, local_data, length);
  45.         printf("Contents of data are: %s\n", tmp);
  46.     }
  47.     return KERN_SUCCESS;
  48. }    
  49.  
  50. /* mydriver_export:  Called by mydriver_server, which was created by MiG. */
  51. kern_return_t mydriver_export(port_t server, user_data_t *user_data, unsigned int *length)
  52. {
  53. #define DATA "ACK"
  54.     kern_return_t r;
  55.     user_data_t local_data;
  56.     port_t kernel_task;
  57.     unsigned int tmp;
  58.     
  59.     /* Note that kalloc doesn't zero the memory it returns. */
  60.     local_data = (user_data_t)kalloc(8192);
  61.     local_data = strcpy (local_data, DATA);
  62.     *length = strlen(local_data);
  63.     printf("Data is: %s\n", local_data);
  64.  
  65.     /* Need to allocate space in our task's map. */
  66.     r = vm_allocate((vm_task_t)task_self(), 
  67.     (vm_address_t *)user_data, 8192, TRUE);
  68.     if (r != KERN_SUCCESS) {
  69.     printf("Call to vm_allocate failed: %d\n", r); 
  70.     return KERN_FAILURE;
  71.     }
  72.     
  73.     /* Copy data into our task's map. */
  74.     kernel_task = kern_serv_kernel_task_port();
  75.     r = vm_read((vm_task_t)kernel_task, (vm_address_t)local_data,
  76.         8192, (pointer_t *)user_data, &tmp);
  77.     if (r != KERN_SUCCESS) {
  78.     printf("Call to vm_read failed: %d\n", r); 
  79.     return KERN_FAILURE;
  80.     }
  81.  
  82.     return KERN_SUCCESS;
  83. }