Linux设备驱动模板:poll


Linux设备驱动模板:poll

  1. #define FIFO_MAX_SIZE 1024   
  2. struct xxx_dev  
  3. {  
  4.     struct cdev cdev;  
  5.     wait_queue_head_t r_wait;  
  6.     wait_queue_head_t w_wait;  
  7.     int length;  
  8. };  
  9.   
  10. struct xxx_dev *xxx_devp;  
  11.   
  12. static unsigned int xxx_poll(struct file *filp, poll_table * wait)  
  13. {  
  14.     unsigned char mask = 0;  
  15.     struct xxx_dev *xxx_dev = filp.private_data;  
  16.   
  17.     // poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table * p)   
  18.     poll_wait(filp, xxx_dev.r_wait, wait);  
  19.     poll_wait(filp, xxx_dev.w_wait, wait);  
  20.   
  21.     if (xxx_dev.length != 0)  
  22.     {  
  23.         mask |= POLLIN | POLLRDNORM;  
  24.     }  
  25.   
  26.     if (xxx_dev.length != XXX_MAX_SIZE)  
  27.     {  
  28.         mask |= POLLOUT | POLLWRNORM;  
  29.     }  
  30.   
  31.     return mask;  
  32. }  

相关内容