~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/arch/um/drivers/ssl_user.c

Version: ~ [ 0.6-2.3.46 ] ~
Architecture: ~ [ um ] ~

** Warning: Cannot open xref database.

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <sys/stat.h> 4 #include <fcntl.h> 5 #include <errno.h> 6 #include <sched.h> 7 #include <signal.h> 8 #include <termios.h> 9 #include "ssl.h" 10 #include "user_util.h" 11 #include "user.h" 12 13 static int fd_count = 0; 14 static int maxfd = -1; 15 static fd_set read_fds; 16 17 void ssl_add_fd(int fd) 18 { 19 if(fd_count == 0) 20 FD_ZERO(&read_fds); 21 FD_SET(fd, &read_fds); 22 fd_count++; 23 if(fd >= maxfd) 24 maxfd = fd + 1; 25 } 26 27 static int ssl_rcv_proc(void *unused) 28 { 29 fd_set r; 30 int i, n; 31 char ch, dev[] = "/dev/ptyXX"; 32 33 set_cmdline("(serial line receive thread)"); 34 while(1){ 35 while(fd_count == 0) sleep(1); 36 while(fd_count != 0){ 37 memcpy(&r, &read_fds, sizeof(r)); 38 n = select(maxfd, &r, NULL, NULL, NULL); 39 if(n < 0){ 40 printk("ssl_rcv_proc : select failed, errno = %d\n", errno); 41 PROC_UNTESTED(); 42 continue; 43 } 44 for(i=0;i<maxfd;i++){ 45 if(FD_ISSET(i, &r)){ 46 n = read(i, &ch, sizeof(ch)); 47 if(n != 1){ 48 close(i); 49 n = getmaster(dev); 50 if(dup2(n, i) < 0) panic("ssl couldn't dup"); 51 printk("ssl : Line closed, reopened on %s\n", dev); 52 continue; 53 } 54 ssl_receive_char(i, ch); 55 } 56 } 57 } 58 } 59 } 60 61 int ssl_thread(unsigned long sp) 62 { 63 int pid; 64 65 pid = clone(ssl_rcv_proc, (void *) sp, 66 CLONE_VM | CLONE_FILES | CLONE_SIGHAND | SIGCHLD, NULL); 67 register_pid(pid, 0); 68 return(pid); 69 } 70

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.